← 教材一覧へ戻る

脱・属人プログラム — 学習ノート

ルールをAIに
守らせる3つの道具

— .md(教える)・lint(検品する)・hook(自動で起動する)の違いと使い分け

「AIに、うちのやり方を毎回守らせたい」。そのための道具は大きく3つあります。役割がまったく違うので、混同すると「hookで縛らなきゃ」と身構えてしまう。実は多くの場合はいちばん手軽な .md で十分——3つの違いと、どれを使うかの判断を1枚にまとめます。

2026.07.26 作成 / 出典:Claude Code 公式ドキュメント「hooks」ほか

この話の結論(3つだけ)
  1. 3つは役割が別物:.md=教える/lint=検品する/hook=検品を自動で起動する
    マニュアル・検品機・検品機の自動スイッチ、という関係
  2. 「意味の判断」が要るルールは .md 一択。機械で測れるルールだけ lint が向く
    「埋め草を書くな」は.md/「1文80字を超えたら弾く」はlint
  3. hook は lint を自動で呼ぶ「引き金」。単体では何もしない
    まず .md で十分。自動化したくなったら足す、で遅くない

はじめに

そもそも「ルールを守らせる」とは

AIに仕事を任せると、「毎回この書き方で」「この操作は絶対しないで」といったうちのルールを守らせたくなります。ところが困ったことに、別のチャットを開くと、AIは前の会話をまるごと忘れています。だから「次から気をつけてね」は、そのチャットの中でしか効きません。

たとえるなら毎朝、記憶を失って出社してくるアルバイトさん。口頭で伝えたことは翌日には消えている。だから「ルールを守らせる」には、口頭でなく"仕組み"で伝える必要がある。

その"仕組み"が、この3つの道具です。ただし3つは担当している工程がまるで違います。ざっくり言うと——.mdは「仕事の前に教える」、linthookは「仕事の後で検品する」。まず1つずつ見ていきましょう。

道具1

教える(前工程)

.md(ルールファイル)=教える

AIが仕事を始める前に読む「マニュアル」。ここに書いたことを、AIが読んで守ろうとします。

.md は Markdown(マークダウン)という、ただのテキストファイルです。Claude Codeでは、これを仕事の前に自動で読み込む仕組みがあります。代表が CLAUDE.md(プロジェクトの指示書)や、スキル・サブエージェントの定義ファイル。ここに「埋め草の文を書かない」「ターゲットは"大学1,2年生"と書く」などのルールを書いておくと、AIが毎回読んで従います。

たとえるなら新人に渡す業務マニュアル。読んで理解して仕事に活かしてもらう。相手は人間(AI)なので、「これは丁寧すぎる言い回しだな」といった意味の判断が要ることも任せられるのが最大の強み。

得意なこと・弱点

得意弱点
意味の判断が要るルール(埋め草・言い回し・雰囲気)も守れる。書くのが一番かんたん(テキストを足すだけ)AIが読んで"守ろうとする"ので、100%守られる保証はない。うっかり漏れることがある
ここが要点ルールの大半は「これは埋め草か?」「言い過ぎか?」といった意味の判断が要ります。これを機械で測るのは無理で、読んで判断できる相手=AIに任せるしかない。だから意味的なルールは .md が主役になります。

道具2

検品する(後工程)

lint(検査スクリプト)=検品する

できあがった成果物を、機械的にチェックする小さなプログラム。決まった不良だけを確実に見つけます。

lint(リント)は、ソフト開発で昔からある「できあがりを機械でチェックする道具」の総称です。今回の文脈なら、たとえば content.json(AIが書いた台本)を読んで、「1文が80字を超えていないか」「禁止した言葉が入っていないか」をパターン照合で検出する、といった小さなスクリプトになります。

たとえるなら工場の検品機。「規定サイズをはみ出た製品」を機械的に弾く。ただし意味は分からない——「この文、なんか感じ悪いな」は判定できない。決まったパターンだけを、確実に。

大事な性質:自分からは動かない

ここが hook との一番の違いです。lint は「呼ばれて初めて動く」。自分から発動する仕組みは持っていません。誰かが「実行しろ」と呼んで、はじめて検品します。呼び方は3通り。

呼び方誰が呼ぶ設定
① 手で人が「チェックして」と実行する不要
② 手順書(.md)でスキルの手順に「完成したらlintを走らせる」と書いておき、AIが手順として実行不要(.mdに1行足すだけ)
③ hookでClaude Codeが決まったタイミングで自動で呼ぶ必要(下記)
見落としがちlint は「中身(検品)」であって「引き金」ではありません。②のように.mdの手順に書いて自動で呼ばせれば、hookを使わなくても"半自動"にできます。今の仕組みと相性がいいのはこの②です。

道具3

自動で起動する

hook(自動発火)=検品を自動で起動する

「この瞬間になったら、あれを自動で走らせて」を仕込む仕組み。検品そのものはしません——起動するだけ。

hook(フック)は、Claude Codeが決まったタイミング(イベント)で、指定した処理を自動で走らせる設定です。「ファイルが書かれた瞬間」「サブエージェントが仕事を終えた瞬間」などに反応して、たとえば lint を呼び出す。hook自身は検品しません。あくまで「引き金」で、中身は lint 頼みです。

たとえるなら玄関の人感センサー。人が来たら勝手にライト(=lint)を点ける。センサー自体は照らさない、スイッチを入れるだけ。hook(センサー)lint(ライト)はセットで働く。

知っておくべき制約:多くは「後の祭り」

hookには弱点があります。よく使うタイミング(書いた後・完了後)の hook は、すでにファイルが書かれた後に走るので、書き込みを未然に止められません。エラーを出して「次に直させる」だけ。本当に事前ブロックできる種類もありますが、扱いが重くなります。

正直なところだから hook を入れても「絶対に通さない魔法の関所」にはなりにくい。多くは「後で気づいて直す」で、それは手順書(.md)でlintを呼ぶ②案とやることがほぼ同じ。しかも hook の設定はやや専門的です。「どうしても完全自動にしたい」と思うまでは、無理に使わなくて大丈夫。

比較

3つの違い早見表

.md(ルールファイル)lint(検査スクリプト)hook(自動発火)
役割AIに事前に教えて守らせる完成物を機械でチェックチェックを自動で起動する引き金
意味の判断できる(AIが読む)できない(パターンのみ)しない(lint等を呼ぶだけ)
タイミング書く(予防)書いた(検品)指定の瞬間に自動起動
「埋め草を書くな」「1文80字超を検出」「完成時にlintを起動」
弱点100%守られる保証はない意味的ルールは無理単体では無力(中身はlint頼み)
関係を一言で.mdは「教育(前工程)」、linthookは「検品(後工程)」。そしてhookとlintはセット——hookが引き金、lintが中身。hookだけでは何もチェックできない。

選び方

どれを使えばいい?

ルールを「意味で測るか/機械で測れるか」で仕分けるのがコツです。

判断ルール(これだけ)
  1. そのルールは「意味の判断」が要る?
    要る(埋め草・言い回し・雰囲気)→ .md に書く。これが主役
  2. 機械でパターンとして測れる?(文字数・禁止語・記号など)
    測れる → lint が向く。まずは手順書(.md)から呼ぶ②案で十分
  3. そのlintを「毎回、勝手に」走らせたい?
    そこまで欲しくなったら → hook で自動化。多くの場合そこまで要らない

具体例で答え合わせ

守らせたいルール向く道具理由
内容のない「埋め草の文」を書かない.md埋め草かどうかは意味の判断。機械では測れない
丁寧すぎる曖昧表現を避ける.md同上。読んで判断できるAIに任せる
1文が80字を超えない(音声合成が止まるため)lint文字数は機械で確実に数えられる
禁止した言葉(例:古くなる年号表記)が入っていないlint決まった言葉の有無はパターン照合で検出できる
上のlintを「台本ができた瞬間に毎回」走らせたいhook自動起動が欲しいときだけ。lintと組で使う
結論(費用対効果)まずは .md だけで十分回ります。「これだけは機械で絶対に弾きたい」が出てきたら lint を1本足し、呼び方は手順書(.md)に書く。hookは"完全自動にしたい"と本気で思ったときの最終手段。順番は .mdlinthook

補足

これってClaude Code専用の機能?

片方は一般的な概念、もう片方はClaude Code特有の部分がある——ここを知っておくと「持ち運べる資産かどうか」が分かります。

道具Claude Code専用?補足
lintいいえソフト開発で昔からある一般概念。中身はただのプログラムで、Claude Codeを離れてもどこでも使える・持ち運べる
hook(考え方)いいえ「何かのタイミングで自動発火」という発想自体は一般的(webhook等)
hook(設定として組む形)はい「Claude Codeがツールを動かした瞬間に発火」する仕組みはClaude Codeの中だけの機能
.md運用が特有中身はただのMarkdown。ただし「起動時に自動で読み込む」運用がClaude Code特有(CLAUDE.md・スキル等)
実用的な含意lintを作れば、それはClaude Codeを離れても使える資産(単なるスクリプト)。hook設定だけはClaude Code専用なので環境を変えると持ち越せない。だから「lintを作る+呼び方は手順書(.md)で」という形は、特有機能への依存が少なく、つぶしが効くという利点もあります。

注意

つまずきやすいポイント(正直に)

3つだけ覚えて

hookで全部縛ろうとしない。意味的なルール(大半)は hook では判定できない。そこは .md の仕事。

lintは自分から動かない。「作ったのに何も起きない」のは正常。呼んで(手順書 or hook)はじめて動く。

.mdは100%ではない。うっかり漏れる。だから機械で測れる部分だけ lint で"念のための網"をかける、という重ね方が現実的。

一言まとめ
  1. .md=教える・lint=検品する・hook=検品を自動起動する
    マニュアル/検品機/センサー
  2. 意味で測るルールは .md、機械で測れるルールは lint
    hookはlintを自動で呼びたいときの引き金
  3. 順番は .md → 必要なら lint → 本気で自動化したいなら hook
    多くの場合、.mdだけで十分回る

付録

用語ミニ辞典

.md(マークダウン)
見出しや箇条書きを簡単な記号で書ける、ただのテキストファイル。AIへの指示書(CLAUDE.md)やスキル定義もこの形式。
CLAUDE.md(クロード・エムディー)
そのフォルダでAIに守らせる「指示書」。起動時に自動で読み込まれる。詳しくは教材「AIの第二の脳を作る」へ。
lint(リント)
できあがったものを機械的にチェックする道具の総称。決まったパターン(文字数・禁止語など)だけを検出する。意味は判定できない。
スクリプト
ちょっとした処理をさせる小さなプログラム。lintも1本のスクリプトとして作れる。
hook(フック)
決まったタイミング(イベント)で、指定した処理を自動で走らせる仕組み。検品そのものはせず、lint等を呼び出す「引き金」。
イベント
hookが反応する「きっかけの瞬間」。例:ファイルが書かれた/サブエージェントが完了した、など。
settings.json(セッティングス・ジェイソン)
Claude Codeの設定ファイル。hookはここに書いて仕込む。
サブエージェント
AIの分身。作業を分担させる仕組み。完了した瞬間をhookの「きっかけ」にできる。

対応

元にしたカリキュラム

この教材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=ソフト開発の一般的な検査ツールという説明(特定製品に依存しない)