CLAUDE LABEN
AUTO — Claude Code の auto モードが本日8月14日から既定で有効になります。Pro・Max・Team の各プランが対象ですPRICE — Sonnet 5 のプロモ価格 $2/$10 per Mtok が恒久化されました。9月1日に予定されていた $3/$15 への引き上げは行われませんFIX — 8月13日の v2.1.231 で、事前登録済みの OAuth クライアントを使う MCP サーバー(Slack など)でサインインが失敗する不具合が直っていますSUNSET — 旧 Workbench と実験的プロンプトツール API の廃止は8月17日で、残り3日となりましたMCP — 新しい MCP 2026-07-28 仕様への対応が進んでいます。ステートレス化と OAuth・OIDC の強化、Apps と Tasks のバージョン付き拡張が入りましたBOOST — Claude Code 契約者向けの週次利用枠 50% 上乗せは8月19日までの期間限定ですAUTO — Claude Code の auto モードが本日8月14日から既定で有効になります。Pro・Max・Team の各プランが対象ですPRICE — Sonnet 5 のプロモ価格 $2/$10 per Mtok が恒久化されました。9月1日に予定されていた $3/$15 への引き上げは行われませんFIX — 8月13日の v2.1.231 で、事前登録済みの OAuth クライアントを使う MCP サーバー(Slack など)でサインインが失敗する不具合が直っていますSUNSET — 旧 Workbench と実験的プロンプトツール API の廃止は8月17日で、残り3日となりましたMCP — 新しい MCP 2026-07-28 仕様への対応が進んでいます。ステートレス化と OAuth・OIDC の強化、Apps と Tasks のバージョン付き拡張が入りましたBOOST — Claude Code 契約者向けの週次利用枠 50% 上乗せは8月19日までの期間限定です
記事一覧/Claude Code
Claude Code/2026-08-14上級

生成物1ファイルが手書きコード70本より重いので、Claude Code に読ませる範囲を決め直しました

運用中のリポジトリを対象に、どの領域が文脈をどれだけ食うかを数え直しました。生成物の除外・探索パターンの選び方・settings.json での固定まで、実際に決めた運用ルールとその根拠をまとめます。

Claude Code218settings.json3コンテキスト4コスト設計7リポジトリ運用

プレミアム記事

「プレビューの打ち切り位置を決めているのはどのファイルですか」。運用しているサイトのリポジトリで、Claude Code にそう尋ねたときのことです。

返事が来る前に、セッションはアプリケーションコードの探索を始めていました。答え自体は正しく、2ファイルを指して的確でした。ただ、そこに至るまでに読まれた量が、私の想像していた「ちょっと探す」の範囲を超えていました。

個人開発では、この手の摩擦を指摘してくれる人がいません。気になったので、探索の作法を変える前に、リポジトリ側を数えることにしました。読ませる範囲を決めるには、まず何がどれだけ重いのかを知らないと始まらないからです。

結果として一番驚いたのは、ビルドで作り直せる生成物1ファイルが、手で書いた70本のソースコード全部よりも重かったことでした。

セッションを始める前に、リポジトリ側を数える

計測対象は claudelab.net のリポジトリです。日本語806本・英語806本の記事を MDX で抱えた Next.js のサイトで、git 管理下のファイルは1,796件あります。

最初に書いたのは、領域ごとの「読ませたときの重さ」を出すだけの小さなスクリプトです。トークナイザを厳密に再現する必要はありません。領域同士を比べて意思決定できれば十分なので、日本語は1文字を約1トークン、それ以外は約3.6文字を1トークンとして概算しています。

#!/usr/bin/env python3
"""ctxweight.py - git 管理下のファイルを「読ませたときの重さ」で並べる。
 
使い方:
    python3 ctxweight.py            # リポジトリ全体
    python3 ctxweight.py src        # 特定ディレクトリのみ
"""
import collections
import subprocess
import sys
 
PRICE_PER_MTOK = 2.0  # 入力単価(USD / 1M tokens)。自分が使うモデルの値に置き換える
 
 
def estimate_tokens(text: str) -> int:
    """CJK は約1文字=1トークン、それ以外は約3.6文字=1トークンとして概算する。
 
    正確な値はモデルのトークナイザ依存なので、絶対値ではなく
    「領域Aは領域Bの何倍か」を判断するための相対指標として使う。
    """
    cjk = sum(1 for ch in text if ' ' <= ch <= '鿿' or '＀' <= ch <= '￯')
    return int(cjk + (len(text) - cjk) / 3.6)
 
 
def tracked_files(roots):
    # git ls-files を使うと .gitignore 済みのファイルを自動的に除ける
    out = subprocess.check_output(['git', 'ls-files', '-z'] + list(roots)).decode()
    return [f for f in out.split('\0') if f]
 
 
def group(path: str) -> str:
    parts = path.split('/')
    return '/'.join(parts[:2]) if len(parts) > 1 else '(root)'
 
 
def main():
    agg = collections.defaultdict(lambda: [0, 0])  # [tokens, files]
    per_file = []
 
    for path in tracked_files(sys.argv[1:]):
        try:
            text = open(path, encoding='utf-8').read()
        except (UnicodeDecodeError, OSError):
            continue  # 画像などのバイナリは対象外。読めないものは黙って飛ばす
        tokens = estimate_tokens(text)
        agg[group(path)][0] += tokens
        agg[group(path)][1] += 1
        per_file.append((tokens, path))
 
    total = sum(v[0] for v in agg.values()) or 1
    print(f"{'領域':<28}{'推定tok':>12}{'files':>7}{'占有率':>8}{'$/回':>9}")
    for key, (tokens, files) in sorted(agg.items(), key=lambda x: -x[1][0])[:15]:
        print(f"{key:<28}{tokens:>12,}{files:>7,}"
              f"{tokens / total * 100:>7.1f}%{tokens / 1e6 * PRICE_PER_MTOK:>9.3f}")
    print(f"{'合計':<28}{total:>12,}"
          f"{sum(v[1] for v in agg.values()):>7,}{100.0:>7.1f}%"
          f"{total / 1e6 * PRICE_PER_MTOK:>9.3f}")
 
    print("\n-- 単体で重いファイル --")
    for tokens, path in sorted(per_file, reverse=True)[:5]:
        print(f"{tokens:>12,}  {path}")
 
 
if __name__ == '__main__':
    main()

git ls-files を使っているのは、.gitignore 済みのファイルを自分で除外しなくて済むからです。node_modules.next を数えても意味がありませんし、除外リストを手で保守すると必ずずれます。

リポジトリ全体に当てると、こうなりました。

領域推定トークンファイル数占有率
content/articles7,666,9271,61291.0%
src/generated289,60323.4%
ルート直下162,418151.9%
content/blog157,421701.9%
src/app80,278361.0%
src/components37,332220.4%
合計8,422,3231,796100%

記事本文が9割を占めるのは、コンテンツサイトなので当然です。予想どおりでした。

想定と食い違ったのは、その次の行でした。

生成物1ファイルが、手で書いたコード全部の2.2倍だった

src だけに絞ると、内訳の歪みがはっきりします。

領域推定トークンファイル数src 内の占有率
src/generated289,603268.9%
src/app80,2783619.1%
src/components37,332228.9%
src/config8,11521.9%
src/lib ほか5,029101.2%

手で書いたソースコード70本を合計しても130,754トークンです。対して src/generated はたった2ファイルで289,603トークン、うち articles.json 単体が284,072トークンを占めています。比にして2.21倍。

このファイルは MDX から機械的に組み立てられるメタデータの集約で、ビルドのたびに作り直されます。つまり、読ませても新しい情報は一切増えません。元データはすべて content/ 側にあります。

それでも src を対象にした探索では、真っ先に候補に挙がる位置にいます。ファイル名が articles.json で、パスが src の下にあるからです。名前とパスが「重要そう」に見えるファイルほど、実は導出物であることがあります。

入力単価に置き換えると、この2ファイルは1回読むだけで約0.58ドルです。手書きコード全部を読んでも0.26ドルなので、情報量ゼロの側が2倍以上高い、という状態でした。

なお単価は動きます。Sonnet 5 の入力単価は2026年8月10日付で1Mトークンあたり2ドルが恒久価格になり、9月1日に予定されていた引き上げは行われないことになりました。ただしこの手の数字は前提が変わるので、スクリプト側の PRICE_PER_MTOK は必ず自分で確認した値に置き換えてください。

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
自分のリポジトリのどこが文脈を食っているかを1コマンドで割り出し、読ませない範囲を根拠つきで決められるようになります
生成物やロックファイルが混ざったまま探索を始めて、入力コストと的外れな推論を同時に招く事故を、踏む前に防げるようになります
検索の絞り込みが甘いと、ファイルを直接読むより高くつく場面があることを見分けられるようになります
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Claude Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

Claude Code2026-07-16
許可ルールを積み上げたセッションが毎ターン重くなる — ルールセットの棚卸しと、安全性を保ったまま数を減らす設計
deny/ask ルールを増やすほど毎ターン遅くなる問題が 2.1.209 で修正されました。ただしルール設計そのものの負債は残ります。棚卸しスクリプト・被覆検出・ターン時間の実測手順と、列挙型から接頭辞型へ移す設計をまとめます。
Claude Code2026-07-15
Dynamic Workflows の規模と effort を、勘ではなく手元の台帳で決める
Dynamic Workflows の一般提供で /config の workflow size と effort が自分の手に渡りました。large を選び続けて費用だけが伸びた1週間の記録から、OpenTelemetry のコンソール出力を台帳化し、タスク型ごとに size と effort を割り当てるまでを実装込みで整理します。
Claude Code2026-07-05
Claude Code のネイティブ1Mコンテキストを、いつ使い、いつ使わないか — コストで決める判断ルール
Sonnet 5 が既定になり、Claude Code はネイティブで1Mトークンのコンテキストを扱えるようになりました。大きな窓は便利ですが、広げるほど費用は増えます。全部を窓に入れるべきか、分割して読ませるべきか。実測できる token 見積もりと、状況ごとに答えを出す判断ルールを、動くコードとつまずきどころ付きでまとめます。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →