クイズ10問と解説

AIカスタム研修 Day2 / 午後の最後に解きます

D2 と smart3pm のハーネスで何が起きるかを答える10問です。どの問いも、今日のプチ演習で起こしたことから出ます。

解き方

進め方

解き方

10問とも、D2(d2_harness_20260828)か smart3pm(smart3pm-harness-review)の実物のハーネスの話です。問いの頭に、どちらのハーネスかを書いています。前提には、そのハーネスのファイルが何を見て何を返すかを書いています。

どの問いも、今日のプチ演習で自分の手で起こしたことと同じ形です。1問1点で、8点以上を目安にしてください。解説は、全部解いた後に開きます。

10問

smart3pm-harness-reviewQ1 core.md の行数の検査
前提
  • rules/core.md は、どのセッションでも開始時に全文が読み込まれるルールのファイル。上限は80行と決めている
  • harness/check-guidelines.sh が、コミットの前と push の前に動く。core.md の行数を wc -l で数え、80行を超えていたら止める
場面
  • core.md は今79行。1行が600文字のルールを1本足して、80行にした。これをコミットする
問い

check-guidelines.sh の行数の検査はどうなる?

  1. A. 通る。80行を超えていないので、コミットできる
  2. B. 止まる。1行が長すぎる
  3. C. 止まる。上限の80行ちょうどになった
  4. D. 警告だけが出て、コミットできる
正解と解説(解いた後に開く)

正解 A

根拠: check-guidelines.sh の検査1(wc -l の行数だけを上限と比べる。178-185行目)

誤答: B は文字数も見ているという思い込み。C は「80行まで」を「80行未満」と取り違え。D は検査が知らせるだけだという思い込み

プチ演習1(ハンズオンガイド)で、自分の CLAUDE.md に600文字の1行を足し、行数だけの検査が通すのを見ました。

d2_harness_20260828Q2 agents/ の読み込み
前提
  • CLAUDE.md の中に @ファイル名 と書いたファイルは、セッションを開いた時点で中身ごと読み込まれる
  • D2 の CLAUDE.md は、7行目の @AGENTS.md で AGENTS.md を読み込んでいる
  • AGENTS.md の「読み分けガイド」には、「コーディングの前に agents/03(コーディング規約)を読むこと」と文章で書いてある。@ は付いていない
  • 開始時に動くフック sessionstart_info.ps1 が出すのは、ブランチ名と変更の状態だけ
場面
  • D2 のリポジトリで新しいセッションを開いた。まだ何も頼んでいない
問い

この時点で、agents/03 の中身は読み込まれている?

  1. A. 読み込まれている。AGENTS.md と一緒に読み込まれる
  2. B. 読み込まれていない。コーディングを頼まれたときに、読むかどうかを Claude が決める
  3. C. 読み込まれていない。最初の依頼を送ったときに、フックが読み込ませる
  4. D. 読み込まれている。開始時のフックが全文を読み込ませる
正解と解説(解いた後に開く)

正解 B

根拠: CLAUDE.md:7(@ は AGENTS.md の1本だけ)、AGENTS.md:76-78(読み分けガイドは文章の指示)、sessionstart_info.ps1(出すのはブランチとステータス)

D2 自身も agents/07:76-77 で「入口のトリガーが弱い」と書いている

誤答: A は @ の取り込みが、文章で書いた参照にまで連なると思う誤解。C と D はフックが知識を入れると思う誤解

プチ演習2(ハンズオンガイド)で、名前で指しただけの REVIEW.md を、Claude が後から開く表示を見ました。

d2_harness_20260828Q3 feature ブランチで DB/ に書く
前提
  • D2 では、DB/(SQL ファイルの置き場)を書き換えてよいのは develop と master のブランチだけ
  • .claude/hooks/guard_db_branch.ps1 は、Edit と Write の実行前(PreToolUse)に動くフック。今のブランチが develop と master 以外で、書き先が DB/ の中なら、理由を stderr に書いて終了コード 2 を返す
場面
  • feature/s6000/s6010_d2_document ブランチで、Claude が Write で DB/sql/x.sql を新しく作ろうとした
問い

どうなる?

  1. A. 何も起きず、そのまま作られる
  2. B. 作られた後で、警告だけが Claude に返る
  3. C. 作られる前に止まり、止めた理由が Claude に返る
  4. D. 確認の画面が出て、人が許可すれば作られる
正解と解説(解いた後に開く)

正解 C

根拠: guard_db_branch.ps1:40-43(DB/ 配下は develop・master 以外で exit 2)、cases db-feat-01

誤答: B は実行後の検査と混同。D は終了コード 2 を確認の依頼と思う誤解

プチ演習3(ハンズオンガイド)で、guard_paths が書く前に止め、理由を返すのを見ました。

smart3pm-harness-reviewQ4 Bash の sed -i で migration を書き換える
前提
  • 既存の migration(app/Database/Migrations/ の中)は書き換えず、新しく足す決まり。backend ユニットの .claude/immutable-paths(書き換え禁止の一覧)に載っている
  • guard-write-scope.sh は、Edit と Write の実行前に動く。書き先が担当範囲の外か、immutable-paths に載っていれば止める
  • guard-bash-write.sh は、Bash の実行前に動く。止める条件は、書き先が担当範囲の外であることだけ
  • app/Database/Migrations/ は、backend ユニットの担当範囲の中にある
場面
  • Claude が Bash で sed -i 's/old/new/' app/Database/Migrations/001_init.php を実行しようとした(確認の画面は出ない設定とする)
問い

どうなる?

  1. A. guard-bash-write.sh が、immutable-paths に載っているとして止める
  2. B. guard-bash-write.sh が、担当範囲の外への書き込みとして止める
  3. C. どちらのフックも止めず、ファイルが書き換わる
  4. D. guard-write-scope.sh が、Bash の書き込みも見て止める
正解と解説(解いた後に開く)

正解 C

根拠: guard-write-scope.sh:150(immutable-paths を見るのは Edit 系だけ)、guard-bash-write.sh:189-208(スコープの判定だけ)

誤答: A は Edit と同じ一覧を見ると思う誤解。D はフックがどのツールにも効くと思う誤解

プチ演習4(ハンズオンガイド)で、Edit を止めるフックだけのときに、シェルの書き込みが通るのを見ました。

d2_harness_20260828Q5 LF の md を書いた後
前提
  • D2 では、テキストファイルの改行は CRLF と決めている
  • .claude/hooks/check_crlf_bom.ps1 は、Edit と Write の実行後(PostToolUse)に動くフック。LF だけの改行を見つけると、理由を stderr に書いて終了コード 2 を返す
場面
  • feature/s6000/s6010_d2_document ブランチで、Claude が Write で、LF 改行の doc/notes/memo.md を新しく作った
問い

どうなる?

  1. A. ファイルは作られたまま残り、検査の結果が Claude に返る
  2. B. 書く前に止められ、ファイルは作られない
  3. C. 書いた後で、フックが自動で CRLF に直す
  4. D. 何も起きず、LF のまま残る
正解と解説(解いた後に開く)

正解 A

根拠: check_crlf_bom.ps1:38-43(単独の LF で exit 2)、cases cb-02

誤答: B は実行前と実行後の混同。C は検査が直すと思う誤解。D は実行後のフックの結果が捨てられると思う誤解

プチ演習5(ハンズオンガイド)で、check-phpver が、ファイルを残したまま結果を返すのを見ました。

smart3pm-harness-reviewQ6 ハーネスの正本が無いとき
前提
  • ハーネスのフックの本体(正本)は、smart3pm_guidelines フォルダに1つだけある
  • 各ユニットの .claude/settings.json のフックは、親のフォルダをたどって正本を探し、見つけた本体を呼ぶ短いコマンドになっている。Bash の実行前に動くコマンドの要所は [ -r "$H" ] || { …; exit 2; }
  • $H は見つけた本体のパス。[ -r "$H" ] は「そのファイルが読めるか」を確かめる書き方で、読めなければ || の後ろが動く
場面
  • 親のどこにも smart3pm_guidelines が無い場所でユニットを開いた。Claude が最初に Bash で ls を実行しようとした
問い

どうなる?

  1. A. ls は実行され、エラーの文が画面に出るだけ
  2. B. 確認の画面が出て、人が決める
  3. C. ls は実行され、その後で Claude に警告が返る
  4. D. ls は実行されず、正本が見つからないことが Claude に返る
正解と解説(解いた後に開く)

正解 D

根拠: harness/settings.backend の Bash 用 command([ -r "$H" ] || { …; exit 2; })、design/harness-reference-type.md:33,71

誤答: A は、安全装置が無くても作業は進むと思う誤解(設計原則の Fail loud に反する)。C は実行前と実行後の混同

プチ演習8(ハンズオンガイド)で、フックの本体が無いとき、直接の登録では素通りし、ラッパーを挟むと止まるのを見ました。

d2_harness_20260828Q7 レビュー役の前捌き
前提
  • D2 の作業の順番は、実装 → レビュー②(人が行う2回目のレビュー)→ マージ待ち → マージ
  • .claude/agents/d2-code-reviewer.md は、レビュー②の前に差分を読むサブエージェント。定義ファイルで permissionMode を plan(読むだけ)にし、「コードを直さない」「人が確かめる点を分けて書く」と決めている
場面
  • 実装が終わり、d2-code-reviewer を動かした
問い

実際に起こるのはどれ?

  1. A. 見つけた誤りを、レビュー役がその場で直してコミットする
  2. B. 指摘が無ければ、状態が自動でマージ待ちに進む
  3. C. 重大な指摘があれば、実装の担当に自動で差し戻される
  4. D. 差分の問題点が根拠つきで報告される。コードは変わらず、次に進めるかは人が決める
正解と解説(解いた後に開く)

正解 D

根拠: d2-code-reviewer.md「報告の契約」(コードを直さない、要人間確認を分ける)、CLAUDE.md:23、d2-task-start/SKILL.md:35(レビュー②待ちは人の手番)

誤答: A は「AI レビュー = AI が直す」という期待。B と C はレビュー②を機械の工程と思う誤解

プチ演習6(ハンズオンガイド)で、AI レビューが指摘を書くだけで、コードを変えないのを見ました。

smart3pm-harness-reviewQ8 承認の後で計画書を直す
前提
  • ゲート①は、人が計画書を承認する工程。承認すると new-approval-receipt.sh が、計画書の sha256 をレシートに書く
  • sha256 は、ファイルの中身から計算する指紋のような値。1文字でも変わると別の値になる
  • verify-approval-receipt.sh は、作業フォルダにある今の計画書から sha256 を計算し直し、レシートの値と比べる
場面
  • 承認(レシートの発行とコミット)の後で、担当ユニットの plan-backend.md の誤字を1文字直した。まだコミットしていない
問い

verify-approval-receipt.sh の結果は?

  1. A. レシートが自動で書き直され、有効のまま
  2. B. 警告は出るが、有効(終了コード 0)
  3. C. 失効(終了コード 1)
  4. D. まだコミットしていないので、変更は見られず有効(終了コード 0)
正解と解説(解いた後に開く)

正解 C

根拠: verify-approval-receipt.sh(作業ツリーの sha256 を計算し直す)、plan-feature.md:73-91

誤答: A はレシートが計画書に追いつくと思う誤解。D はコミット済みだけを見ると思う誤解

プチ演習9(ハンズオンガイド)で、承認の後に1文字直すと INVALID になるのを見ました。

d2_harness_20260828Q9 夜間に Claude が push しようとする
前提
  • D2 では、push、マージ、ブランチ作成は人の作業と決めている
  • .claude/settings.json の deny に Bash(git push:*) と PowerShell(git push:*) がある
  • guard_shell_policy.ps1 も、Bash と PowerShell の実行前に git push を見つけると、終了コード 2 を返す
場面
  • 夜、誰も画面を見ていない状態で Claude に Issue を実装させた。実装の後で、Claude が git push origin feature/s7000/s7001_x を実行しようとした
問い

どうなる?

  1. A. 確認の画面が出て、朝に人が許可するまで待ち続ける
  2. B. 実行の前に拒否される。push は人の作業として残る
  3. C. push された後で、ログに警告が出る
  4. D. 夜間の実行では deny が効かず、push される
正解と解説(解いた後に開く)

正解 B

根拠: settings.json:17,21(deny)、guard_shell_policy.ps1 の git guard(push を exit 2)

誤答: A は deny と ask の混同。D は、人がいないと決まりが緩むと思う誤解

プチ演習10(ハンズオンガイド)で、deny は確認なしで止まり、ask は確認のダイアログが出るのを見比べました。

smart3pm-harness-reviewQ10 push --no-verify
前提
  • smart3pm の最後の検査は、git の pre-push フック。push の直前に、手元の PC で動く
  • GitLab 側(サーバ)には検査を置いていない(design/harness-server-free.md)
  • ワークスペースでセッションを開くと、検査を通っていない push があれば警告を出す
場面
  • 人が端末で git push --no-verify を実行した
問い

何が起こる?

  1. A. 検査を通らずに push される。あとでセッションを開いたときに警告が出る
  2. B. pre-push のフックが止め、push は失敗する
  3. C. GitLab 側の検査が止め、push は拒否される
  4. D. Claude Code の確認の画面が出て、人が決める
正解と解説(解いた後に開く)

正解 A

根拠: design/harness-server-free.md:252(git push --no-verify は素通り。事後の検知だけ)、harness/check-pushed-state.sh(ワークスペースの SessionStart で警告)

誤答: B は --no-verify がフックを飛ばすことを知らない。C は前提のサーバ側の検査を見落とし。D は Claude のセッションの外の操作だと気づいていない

プチ演習7(ハンズオンガイド)で、手元の pre-commit を --no-verify で飛ばし、GitLab の check-rules で止まるのを見ました。

答え合わせの一覧

一覧を開く(解いた後に)
問ハーネス正解起こしたプチ演習
Q1smart3pm-harness-reviewAプチ演習1
Q2d2_harness_20260828Bプチ演習2
Q3d2_harness_20260828Cプチ演習3
Q4smart3pm-harness-reviewCプチ演習4
Q5d2_harness_20260828Aプチ演習5
Q6smart3pm-harness-reviewDプチ演習8
Q7d2_harness_20260828Dプチ演習6
Q8smart3pm-harness-reviewCプチ演習9
Q9d2_harness_20260828Bプチ演習10
Q10smart3pm-harness-reviewAプチ演習7
ページの先頭へ