その夜、作業の指示ファイルを何気なく開いて、スクロールバーの小ささに手が止まりました。Web サイトの運用のために書き足してきた決まりごとが、いつのまにか 32KB ほどになっていたのです。
きっかけは、書いてあるはずの注意を AI が見落とす日が増えたことでした。「ここは書いてあります」と指さしても、返ってくるのは丁寧な謝罪だけです。足りないのは指示ではなく、読む側の余白なのかもしれないと思いました。
毎回読み込ませる指示を半分ほどに減らしたときの線引きを、順にお伝えします。道具は Cowork のプロジェクト指示でも、フォルダに置く CLAUDE.md でも同じです。
毎回読ませるのは「今日の作業で必ず使うもの」だけ。残りは、置き場所を変えるだけで消えはしません。
長くなった指示が効かなくなる、3つの見分け方
「守られない」と感じたとき、私が最初に確かめるのは次の3点です。
- 守られないのが、ファイルの後半に書いた項目に偏っていないか
- 同じ意味の決まりが、言い回しを変えて2か所以上に書かれていないか
- 一度の事故の経緯が、そのまま決まりごとの横に居座っていないか
私の場合は3つとも当てはまっておりました。足すのは数秒で済むので、足した分だけ安心した気になっていたのです。ところが毎回読まれる文章は、1行増えるたびにすべての作業の文脈を少しずつ占有していきます。
なお、長さと精度の関係は環境やモデルによって変わります。ここで書くのは私の手元で起きたことであり、何バイトを超えたら必ず崩れるという話ではありません。
まず測る — 見出しごとの大きさを数えます
感覚で削ると、読み慣れた箇所ばかり残ります。先に、どの見出しがどれだけの場所を取っているかを数字にしました。
次のスクリプトは、Markdown の ## 見出しごとに文字数を数えて、大きい順に並べます。標準のライブラリだけで動きます。
# measure_sections.py — 指示ファイルの見出しごとの大きさを測る
import re
import sys
from pathlib import Path
text = Path(sys.argv[1]).read_text(encoding="utf-8")
parts = re.split(r"(?m)^(?=## )", text)
rows = []
for part in parts:
title = part.splitlines()[0].strip() if part.strip() else "(先頭)"
rows.append((len(part.encode("utf-8")), title))
total = sum(size for size, _ in rows)
print(f"合計 {total:,} bytes")
for size, title in sorted(rows, reverse=True):
print(f"{size:>7,} bytes {size / total:>5.1%} {title}")python3 measure_sections.py CLAUDE.md のように呼び出します。私のファイルでも、上位に並んだのは「この作業のときだけ読めばよい手順」や一覧表でした。毎回読ませる理由が、いちばん薄い箇所です。
3つの引き出しに分けます
大きな見出しから順に、1項目ずつ次の問いを当てました。
| 問い | 答えが「はい」なら |
|---|---|
| 今日どんな作業をしても、これを破ると困るか | 残す(毎回読ませる) |
| 特定の作業のときだけ必要な手順や一覧か | 移す(別ファイルへ。本体には1行の案内だけ) |
| 過去の事故の経緯や、すでに直った問題の説明か | 捨てる(または履歴用の別ファイルへ退避) |
残すもの
破ると取り返しがつかない禁止事項、作業全体にかかる文体の決まり、そしてどこに何があるかの案内です。案内の1行があれば、中身そのものを抱えていなくても済みます。
移すもの
サイトごとの設定値、トラブルの一覧表、長い手順書などです。本体には次のように書き残しました。
## 詳細の置き場所
- トラブルの対処表・設定値の一覧 → REFERENCE.md(該当する作業のときだけ読む)
- 過去の全文 → archive/ 配下(通常は読まない)移すときにいちばん気をつけたのは、「いつ読むか」を案内の側に書くことです。「詳しくは REFERENCE.md」だけだと、読む側は毎回開くか、まったく開かないかのどちらかに寄ってしまいます。
捨てるもの
「2026年の何月にこういう事故があって」という経緯は、決まりごとが生まれた理由としては大切です。けれども毎回の作業に必要なのは、結論の一文だけでした。経緯は履歴用のファイルへ移し、本体には結論と禁止事項の1行だけを残しました。
言い回しを詰めるだけでは、足りませんでした
最初に試したのは、文章を短く言い換えることでした。「〜する場合は、必ず〜してください」を「〜は必ず〜」に詰めていく作業です。数行ぶんは減りました。けれども全体の大きさはほとんど変わりませんでした。
理由は単純で、重いのは言い回しではなく、項目の数だったからです。次の例は、同じ決まりを詰めた版と、置き場所を変えた版で並べたものです。
# 詰めただけの版(項目は残ったまま)
- 記事公開前は必ず日英の件数を確認。不一致なら公開しない。
- 公開後は台帳へ追記。台帳の列は slug / 型 / 情報源。
- 台帳が壊れたら復旧スクリプトを実行。手順は下記 1〜7。
# 置き場所を変えた版(本体に残るのは1行)
- 公開の前後で守ることは PUBLISHING.md にまとめた。公開作業のときだけ読む。
ただし「日英の件数が合わなければ公開しない」だけはここでも守る。破ると困る一文だけを本体に残し、残りは該当する作業のときに読む場所へ置きます。詰める作業より、分ける作業のほうが、はるかに効いたのです。
半分にしたあと、確かめること
削りっぱなしにはしません。次の3点を、数日の実作業のなかで見るようにしています。
- 移した手順が必要になった場面で、案内をたどって該当ファイルを開けているか
- 以前は守られていた決まりが、削ったあとで外れていないか
- 同じ質問を何度も繰り返す場面が増えていないか
もし2や3が起きたら、その項目は本体へ戻します。削る作業は、戻す基準を持ってはじめて安全になります。 戻したものには短い理由の1行を添えておくと、次に整理する夜の自分が迷いません。
同じ悩みを抱えている方へ
今夜の15分でできることを1つだけ挙げます。指示ファイルに measure_sections.py を当てて、いちばん大きい見出しを1つ選び、その中身が「毎回必要」か「その作業のときだけ」かを判断してみてください。後者なら別ファイルへ移して、本体に案内を1行だけ置きます。
最初の一歩は、1見出しを移すだけで十分だと思います。それだけで、残りの項目の見通しがずいぶん良くなるはずです。