脱・属人プログラム — 学習ノート
— .md(教える)・lint(検品する)・hook(自動で起動する)の違いと使い分け
「AIに、うちのやり方を毎回守らせたい」。そのための道具は大きく3つあります。役割がまったく違うので、混同すると「hookで縛らなきゃ」と身構えてしまう。実は多くの場合はいちばん手軽な .md で十分——3つの違いと、どれを使うかの判断を1枚にまとめます。
2026.07.26 作成 / 出典:Claude Code 公式ドキュメント「hooks」ほか
.md=教える/lint=検品する/hook=検品を自動で起動する.md 一択。機械で測れるルールだけ lint が向くhook は lint を自動で呼ぶ「引き金」。単体では何もしないはじめに
AIに仕事を任せると、「毎回この書き方で」「この操作は絶対しないで」といったうちのルールを守らせたくなります。ところが困ったことに、別のチャットを開くと、AIは前の会話をまるごと忘れています。だから「次から気をつけてね」は、そのチャットの中でしか効きません。
その"仕組み"が、この3つの道具です。ただし3つは担当している工程がまるで違います。ざっくり言うと——.mdは「仕事の前に教える」、lintとhookは「仕事の後で検品する」。まず1つずつ見ていきましょう。
道具1
教える(前工程)AIが仕事を始める前に読む「マニュアル」。ここに書いたことを、AIが読んで守ろうとします。
.md は Markdown(マークダウン)という、ただのテキストファイルです。Claude Codeでは、これを仕事の前に自動で読み込む仕組みがあります。代表が CLAUDE.md(プロジェクトの指示書)や、スキル・サブエージェントの定義ファイル。ここに「埋め草の文を書かない」「ターゲットは"大学1,2年生"と書く」などのルールを書いておくと、AIが毎回読んで従います。
| 得意 | 弱点 |
|---|---|
| 意味の判断が要るルール(埋め草・言い回し・雰囲気)も守れる。書くのが一番かんたん(テキストを足すだけ) | AIが読んで"守ろうとする"ので、100%守られる保証はない。うっかり漏れることがある |
道具2
検品する(後工程)できあがった成果物を、機械的にチェックする小さなプログラム。決まった不良だけを確実に見つけます。
lint(リント)は、ソフト開発で昔からある「できあがりを機械でチェックする道具」の総称です。今回の文脈なら、たとえば content.json(AIが書いた台本)を読んで、「1文が80字を超えていないか」「禁止した言葉が入っていないか」をパターン照合で検出する、といった小さなスクリプトになります。
ここが hook との一番の違いです。lint は「呼ばれて初めて動く」。自分から発動する仕組みは持っていません。誰かが「実行しろ」と呼んで、はじめて検品します。呼び方は3通り。
| 呼び方 | 誰が呼ぶ | 設定 |
|---|---|---|
| ① 手で | 人が「チェックして」と実行する | 不要 |
| ② 手順書(.md)で | スキルの手順に「完成したらlintを走らせる」と書いておき、AIが手順として実行 | 不要(.mdに1行足すだけ) |
| ③ hookで | Claude Codeが決まったタイミングで自動で呼ぶ | 必要(下記) |
道具3
自動で起動する「この瞬間になったら、あれを自動で走らせて」を仕込む仕組み。検品そのものはしません——起動するだけ。
hook(フック)は、Claude Codeが決まったタイミング(イベント)で、指定した処理を自動で走らせる設定です。「ファイルが書かれた瞬間」「サブエージェントが仕事を終えた瞬間」などに反応して、たとえば lint を呼び出す。hook自身は検品しません。あくまで「引き金」で、中身は lint 頼みです。
hook(センサー)+lint(ライト)はセットで働く。hookには弱点があります。よく使うタイミング(書いた後・完了後)の hook は、すでにファイルが書かれた後に走るので、書き込みを未然に止められません。エラーを出して「次に直させる」だけ。本当に事前ブロックできる種類もありますが、扱いが重くなります。
比較
| .md(ルールファイル) | lint(検査スクリプト) | hook(自動発火) | |
|---|---|---|---|
| 役割 | AIに事前に教えて守らせる | 完成物を機械でチェック | チェックを自動で起動する引き金 |
| 意味の判断 | できる(AIが読む) | できない(パターンのみ) | しない(lint等を呼ぶだけ) |
| タイミング | 書く前(予防) | 書いた後(検品) | 指定の瞬間に自動起動 |
| 例 | 「埋め草を書くな」 | 「1文80字超を検出」 | 「完成時にlintを起動」 |
| 弱点 | 100%守られる保証はない | 意味的ルールは無理 | 単体では無力(中身はlint頼み) |
.mdは「教育(前工程)」、lintとhookは「検品(後工程)」。そしてhookとlintはセット——hookが引き金、lintが中身。hookだけでは何もチェックできない。選び方
ルールを「意味で測るか/機械で測れるか」で仕分けるのがコツです。
.md に書く。これが主役lint が向く。まずは手順書(.md)から呼ぶ②案で十分hook で自動化。多くの場合そこまで要らない| 守らせたいルール | 向く道具 | 理由 |
|---|---|---|
| 内容のない「埋め草の文」を書かない | .md | 埋め草かどうかは意味の判断。機械では測れない |
| 丁寧すぎる曖昧表現を避ける | .md | 同上。読んで判断できるAIに任せる |
| 1文が80字を超えない(音声合成が止まるため) | lint | 文字数は機械で確実に数えられる |
| 禁止した言葉(例:古くなる年号表記)が入っていない | lint | 決まった言葉の有無はパターン照合で検出できる |
| 上のlintを「台本ができた瞬間に毎回」走らせたい | hook | 自動起動が欲しいときだけ。lintと組で使う |
.md だけで十分回ります。「これだけは機械で絶対に弾きたい」が出てきたら lint を1本足し、呼び方は手順書(.md)に書く。hookは"完全自動にしたい"と本気で思ったときの最終手段。順番は .md → lint → hook。補足
片方は一般的な概念、もう片方はClaude Code特有の部分がある——ここを知っておくと「持ち運べる資産かどうか」が分かります。
| 道具 | Claude Code専用? | 補足 |
|---|---|---|
lint | いいえ | ソフト開発で昔からある一般概念。中身はただのプログラムで、Claude Codeを離れてもどこでも使える・持ち運べる |
hook(考え方) | いいえ | 「何かのタイミングで自動発火」という発想自体は一般的(webhook等) |
hook(設定として組む形) | はい | 「Claude Codeがツールを動かした瞬間に発火」する仕組みはClaude Codeの中だけの機能 |
.md | 運用が特有 | 中身はただのMarkdown。ただし「起動時に自動で読み込む」運用がClaude Code特有(CLAUDE.md・スキル等) |
注意
① hookで全部縛ろうとしない。意味的なルール(大半)は hook では判定できない。そこは .md の仕事。
② lintは自分から動かない。「作ったのに何も起きない」のは正常。呼んで(手順書 or hook)はじめて動く。
③ .mdは100%ではない。うっかり漏れる。だから機械で測れる部分だけ lint で"念のための網"をかける、という重ね方が現実的。
.md=教える・lint=検品する・hook=検品を自動起動する.md、機械で測れるルールは lint.md → 必要なら lint → 本気で自動化したいなら hook付録
.md(マークダウン)対応
この教材HTMLは、下のカリキュラム(Markdown正本)と公式ドキュメントを束ねて作成。内容を直すときは両方を整合させる。
| 元カリキュラム / 出典 | 使った内容 |
|---|---|
| setup/claude-code/ メモリとCLAUDEmdの違い.md | 道具1(.md=AIが読む指示書)の背景 |
| setup/claude-code/ 非エンジニアが使うコマンド一覧.md | Claude Codeの前提(スキル・サブエージェント等)=関連 |
| 公式ドキュメント「hooks」 code.claude.com/docs/en/hooks | hookの発火イベント・"書いた後に走る"制約・settings.jsonでの設定の出典(2026-07確認) |
| 一般概念(lint) | lint=ソフト開発の一般的な検査ツールという説明(特定製品に依存しない) |