Review database schema design and detect anti-patterns. Based on common RDB design knowledge and best practices. Supports Prisma, Drizzle, Rails, Django, Laravel, TypeORM, Sequelize, SQLAlchemy, and raw SQL (DDL). Use when the user says "review DB design", "check schema", "review table design", "review migration", "check for anti-patterns", "DB設計をレビューして", "スキーマを見て", "テーブル設計を確認して", "マイグレーションをレビューして", "アンチパターンがないか調べて", "この設計で問題ないか見て".
engineer-drill
エンジニア技術面接の壁打ちスキル。設計判断が問われる問題を出題し、回答を4段階で採点して記録する。「勉強しよう」「クイズ出して」「面接対策」などで起動。
含まれるファイル(6)
- SKILL.md11.1 KB
- questions/backend.md14.3 KB
- questions/frontend.md12.0 KB
- questions/testing-design.md13.3 KB
- questions/web-standard.md13.4 KB
- records/history.md2.7 KB
SKILL.md(原文)
インストールする前に、エージェントに与えられる指示の中身を確認できます。
エンジニア勉強スキル(技術面接壁打ち)
技術面接で問われる「設計判断・使い分けの説明」タイプの問題を出題し、口頭回答を採点・記録するスキル。
答えはこのスキルには置かない。採点・解説はAIがその場で行い、評価観点 を採点基準として使う。
ディレクトリ構成
SKILL.md: このファイル(出題・採点・記録のルール)profile.md: ユーザー情報(初回に作成)questions/: 問題バンク(分野別)frontend.md(FE-xxx: React / Next.js / TypeScript)web-standard.md(WS-xxx: Cookie / ストレージ / HTTP / セキュリティ)backend.md(BE-xxx: API設計 / Hono / データベース)testing-design.md(TD-xxx: テスト戦略 / 設計原則 / アーキテクチャ)
records/history.md: 出題状態表(1問題=1行)
推奨モデル設定
- 基本: Sonnet + effort low(採点・解説は正確な知識の引き出しが本体で、長考しても質が上がらない。テンポも良くなる)
- 深い壁打ちをしたい日、解説・模範解答に物足りなさを感じるとき: Opus + effort low
モデル選択は AskUserQuestion で聞かない。1問目の問題文を出す直前(同じメッセージ内)に、案内テキストとして1行添えるだけにする:
- 例: 「モデル: Sonnet + effort low(推奨) / 深い壁打ち・質の高い解答が欲しいときは Opus に切り替え」
- 現在動いているモデルが Sonnet 以外の場合でも、押し付けずあくまで案内に留める(切り替えるかはユーザー任せ)
- effort の案内(
/effortで low にするのがおすすめ)もこの1行に含めてよい - この案内はセッション開始時の1回だけ。以降は繰り返さない
起動時フロー
-
profile.mdを読む。存在しない、またはプレースホルダのままなら、以下の2点を質問して作成する:- 使用言語・フレームワークと経験年数: チャットでのフリー入力で聞く。書き方に迷わないよう、記入例を添える(例:「Next.js/React/TypeScript + Hono/PostgreSQL、実務3年、フルスタック寄り」のように、技術スタック・年数・役割の順で教えてください)
- わからなかったときの扱い: AskUserQuestion で二択(すぐ解説してほしい / ヒントをもらって粘りたい)
「深掘りの好み」は質問せず、デフォルトの「テンポ重視」で
profile.mdに記録する(1周目は答えられるかの棚卸しが目的のため。追い問いが活きるのは2周目以降)。設定済みの場合は質問せず、「プロフィールは設定済み。変えたくなったらいつでも言って」と一言添えてそのまま次へ進む(ユーザーの返答は待たない)。
プロフィールがテンポ重視のままで、出題状態表の未出題がゼロ(全問一度は解いた)になっていたら、「一通り解き終わったので、追い問いモード(回答後に面接官のように深掘り)に変えるのもおすすめ」と一言案内してそのまま進む。案内したら
profile.mdの深掘りの好みの行に「(追い問い案内済み)」と追記し、以降は繰り返さない。 -
records/history.mdの「出題状態」表を読み、各問題の最新評価・最終出題日を把握する。 -
ユーザーの指定がなければ、以下の出題モードから選んでもらう。問題数は聞かず、1問ずつ「出題→採点→次へ」を繰り返し、ユーザーが止めるまで続ける。
-
出題する問題が決まったら、その分野の
questions/ファイルだけを読む。出題判定は出題状態表で完結するため、問題バンク全ファイルの読み込みは不要。
出題モード
モード選択は AskUserQuestion の四択で聞く(モデル選択はここに同梱しない。「推奨モデル設定」の通り1問目の直前にテキストで案内する):
- ランダム: 全分野から出題。未出題を優先し、全問出題済みなら完全ランダム(経過日数は考慮しない)
- 分野選択: frontend / web-standard / backend / testing-design から選んでもらい、分野内は下記の復習優先ロジックで選ぶ
- 復習: 最新評価が ✕・△ の問題を優先(✕→△の順、同順位は最終出題日が古い順)。次に復習間隔(◯:14日 / ◎:30日)が経過した問題。尽きたら「復習対象なし」と伝え、✕・△が最も偏っている分野の未出題問題を提案する
- 模擬面接: 4分野から1問ずつ計4問。途中のヒント・解説・採点は挟まず通しで回答してもらい、最後にまとめて講評・採点・記録する
復習優先ロジック(分野選択モードで使用)
- ユーザーの難易度指定で候補を絞る。ただし復習対象(下記優先順位1・2に該当する問題)は難易度指定より優先して候補に残す。
- 候補の中から以下の優先順位で選ぶ。同順位内はランダム:
- 前回 ✕ の問題(最終出題から3日以上経過しているもの)
- 前回 △ の問題(最終出題から7日以上経過しているもの)
- 未出題の問題
- 前回 ◯ の問題(最終出題から14日以上経過しているもの)
- 前回 ◎ の問題(最終出題から30日以上経過しているもの)
- すべての候補が経過日数の条件で除外された場合は、経過日数を無視して ✕→△→◯→◎ の順に、最終出題日が最も古いものを出す。
- 難易度はユーザー指定がなければ ★☆☆〜★★☆ を中心にし、直近3回連続で◎の分野には ★★★ を混ぜる。
- 出題時は問題文のみを提示し、評価観点は見せない。
セッションの切り替え
コンテキストが長くなると応答品質が落ちるため、1セッション10問を目安にする。10問に達したら(または回答・解説のやりとりが特に長くなったら)、進行中の問題の採点と記録を完了させた上で、「新しいセッションで続けるのがおすすめ」と伝える。
引き継ぎプロンプトの作成やCompactは不要。続きに必要な状態はすべて history.md と profile.md に永続化されているので、ユーザーには「/clear してから、もう一度『クイズ出して』と言えば続きから始まる」とだけ案内する。
採点ルール(4段階)
回答を受けたら、問題の 評価観点 に照らして採点する:
- ◎: 評価観点をすべてカバーし、さらに観点の先(トレードオフ・実例・実務での適用)まで説明できた
- ◯: 評価観点の過半(3観点なら2つ以上)をカバーし、明確な誤りがない
- △: カバーできた観点が1つ以下、または説明に明確な誤りが混ざっている
- ✕: 答えられなかった、または回答の主要な部分が誤っていた
採点対象は最初の回答のみ。「ヒントで粘る」スタイルでヒント後に正解へたどり着いても、ヒント後に補った観点はカバー扱いにせず、最初の回答だけで採点する(記録が実力を正しく反映しなくなるため)。ヒント後に到達できた場合はメモに「ヒント後到達」と残す。
採点後は必ず:
- 評価(◎◯△✕)と、カバーできた観点・抜けた観点を伝える
- 抜けた観点を中心に解説する(profile.md の「わからなかったときの扱い」に従う)
- 「模範解答」を示す。面接でそのまま口に出せる話し言葉で、結論→理由→具体例・トレードオフの順、30〜60秒で話せる分量(3〜6文程度)。評価観点をすべて自然に含めること。箇条書きではなく面接官に語りかける文章で書く
- 模範解答を示したら、同じターン内でそのまま
records/history.mdの該当行を更新する(採点は最初の回答で確定しているので、この時点で記録できる。次の問題まで遅延させない) - profile.md の「深掘りの好み」に応じて追い問いをする
- 締めの一言は「次の問題いきますか?(n で次へ / 深掘りしたい点があればそのまま聞いて)」の形にする。ユーザーが「n」(next) とだけ入力したら、確認を挟まず次の問題を出す
このスキルはクイズではなく勉強用。採点・模範解答のあと、ユーザーから「〜の場合はどうなる?」「ここがまだ腑に落ちない」といった壁打ちが始まることがある。次の問題に急がず、納得いくまで付き合うこと。壁打ちの内容は採点には反映しない(採点は最初の回答で確定済み、記録も更新済み)。
模擬面接モードのみ例外で、最後の講評時に4問ぶんまとめて記録する。
記録ルール
records/history.md は「出題状態」表(1問題=1行、全問題ぶんを常に保持)のみ。採点後は該当行を更新する(最新評価・最終出題日・出題回数をインクリメント・メモを上書き):
## 出題状態
| 問題ID | 最新評価 | 最終出題日 | 回数 | メモ |
|--------|----------|------------|------|------|
| FE-001 | △ | 2026-07-11 | 1 | 再レンダリングの説明は正確。DOM参照用途に言及なし |
- メモには「抜けた観点」を短く書く(次回出題時のヒントになるため)。表が崩れるため
|は使わない - 問題バンクに問題を追加したら、出題状態表にも行を追加する(評価
-・回数 0) - セッション終了時、✕・△が特定の分野(IDプレフィックス)に偏っていれば「苦手分野」として一言伝える
問題バンクのフォーマット
questions/*.md の各問題は以下の形式。問題を追加するときもこれに従う:
### FE-001: useStateとuseRefの使い分け
- 問題: useStateとuseRefの使い分けについて、それぞれの特性を踏まえて説明してください。
- タグ: react, hooks
- 難易度: ★☆☆
- 評価観点: 再レンダリングの発生有無 / レンダー間の値の保持 / DOM参照用途
- 難易度: ★☆☆=ジュニア / ★★☆=ミドル / ★★★=シニア
- 評価観点: 採点者が回答に含まれているか確認する論点を3つ程度、
/区切り - IDプレフィックス: FE=frontend / WS=web-standard / BE=backend / TD=testing-design
レビュー
まだレビューはありません。使ってみた感想をお寄せください。
同じリポジトリのスキル
概要と使いどころ