エンジニア勉強スキル(技術面接壁打ち)
技術面接で問われる「設計判断・使い分けの説明」タイプの問題を出題し、口頭回答を採点・記録するスキル。
答えはこのスキルには置かない。採点・解説は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