CLAUDE LABEN
QUOTA — Claude Code 契約者向けの週次利用枠50%上乗せは8月19日で終了しました。本日から通常枠に戻るため、長時間のエージェント実行を常用していた場合は週内の配分が変わりますCONTEXT — v2.1.234 で組み込み claude-api スキルの読み込みコストが約20万トークン超から約2.5万トークンへ下がりました。参照ドキュメントを必要になった時点で読む方式に変わっていますPERMISSIONS — v2.1.235 で権限ダイアログの表示文と「今後確認しない」の対象範囲が常に一致するようになりました。内容を完全に表示できない場合は選択肢自体が出ませんCACHE — 言語サーバーがセッション途中で切断・再接続したときにプロンプトキャッシュ全体が無効化される不具合が修正されました。長時間セッションのキャッシュヒット率に効きますSESSION — claude.ai の利用上限がリセットされた時点でセッションが自動継続されるようになりました。config の Continue automatically at usage limit で切れますPRICING — Claude Sonnet 5 の導入価格 100万トークンあたり入力2ドル・出力10ドルは8月31日で終了し、9月1日から入力3ドル・出力15ドルへ移ります。残り11日ですQUOTA — Claude Code 契約者向けの週次利用枠50%上乗せは8月19日で終了しました。本日から通常枠に戻るため、長時間のエージェント実行を常用していた場合は週内の配分が変わりますCONTEXT — v2.1.234 で組み込み claude-api スキルの読み込みコストが約20万トークン超から約2.5万トークンへ下がりました。参照ドキュメントを必要になった時点で読む方式に変わっていますPERMISSIONS — v2.1.235 で権限ダイアログの表示文と「今後確認しない」の対象範囲が常に一致するようになりました。内容を完全に表示できない場合は選択肢自体が出ませんCACHE — 言語サーバーがセッション途中で切断・再接続したときにプロンプトキャッシュ全体が無効化される不具合が修正されました。長時間セッションのキャッシュヒット率に効きますSESSION — claude.ai の利用上限がリセットされた時点でセッションが自動継続されるようになりました。config の Continue automatically at usage limit で切れますPRICING — Claude Sonnet 5 の導入価格 100万トークンあたり入力2ドル・出力10ドルは8月31日で終了し、9月1日から入力3ドル・出力15ドルへ移ります。残り11日です
記事一覧/Claude Code
Claude Code/2026-08-20上級

起動しただけで1万トークン消えるスキルを、大きさではなく到達率で切り分ける

自分用の運用スキルが、呼び出しただけで約1万トークンを消費していました。節ごとにトークンを測り、最大の節ほど切り出してはいけない理由と、到達率で分けたときの実測値を、監査スクリプトつきでまとめます。

Claude Code227SKILL.md7progressive disclosure2文脈設計個人開発117

プレミアム記事

壁紙アプリの素材を仕分ける自分用のスキルを呼び出したとき、まだ画像を1枚も見ていないのに、最初の返答までの間が以前より長く感じられました。仕分けの手順そのものは変えていません。増やしたのは、混入が多いカテゴリの判定ルールと、マージ後の API 反映手順だけです。

そのスキルを測ってみたら、SKILL.md 1本で約1万トークンありました。仕分けを始める前、つまり画像の話を1つもしていない時点で、それが文脈に載っていたことになります。

8月17日の Claude Code v2.1.234 で、組み込みの claude-api スキルを読み込むときの文脈コストが約20万トークン超から約2.5万トークンへ下がりました。参照ドキュメントを、必要になった時点で読み込む方式へ変えたためです。同じことを自分のスキルでもやるべきだと考えたところまでは、たぶん多くの方と同じだと思います。

問題は、どの節を外に出すかでした。私は最初、一番大きい節から順に出そうとして、間違えました。

呼び出した時点で、まだ何もしていない

Claude Code のスキルは、description だけが常時読み込まれ、SKILL.md の本体は呼び出されたときに読み込まれます。つまり本体のサイズは「常時コスト」ではなく「起動コスト」です。ここを取り違えると、「使っていないスキルを減らせば軽くなる」という方向に対策が向かってしまいます。実際に効くのは、呼び出したときに載る量のほうです。

個人開発で複数のアプリとサイトを並行して回していると、スキルは自然に長くなります。私の場合、壁紙のカテゴリ分類スキルは30カテゴリぶんの判定ルールを抱えていて、そこに「混入が多いカテゴリの厳格ルール」が後から積み上がりました。書いた本人としては、どれも必要だから書いています。だからこそ、感覚で削る判断ができません。

そこで、節ごとの数値を出すところから始めました。

節ごとに測る、小さな監査スクリプト

やることは単純です。SKILL.md を H2 / H3 で分解し、節ごとにトークン数を数え、大きい順に並べます。それだけで、どこに文脈が消えているかは一目で分かります。

Claude のトークナイザは公開されていないため、ここでは tiktokencl100k_base を使っています。絶対値としては正確ではありません。節と節の比率を見るための物差しとして使う、という位置づけです。tiktoken が入っていない環境でも動くように、文字種別の概算にフォールバックさせています。

#!/usr/bin/env python3
"""SKILL.md の文脈コストを節単位で測り、切り出し候補を出す。
 
使い方:
    python3 skill_context_audit.py path/to/SKILL.md
    python3 skill_context_audit.py path/to/SKILL.md --split out_dir
 
節の見出し直後に reach 注釈(HTML コメント)を書いておくと、
到達率別の集計と切り出しを行う。注釈がない節は always 扱い。
"""
import argparse, os, re, sys
 
try:
    import tiktoken
    _ENC = tiktoken.get_encoding("cl100k_base")
    def count_tokens(text: str) -> int:
        return len(_ENC.encode(text))
    TOKENIZER = "cl100k_base"
except ImportError:
    # tiktoken が無い環境向けの概算。日本語1文字≒0.7token、ASCII 4文字≒1token
    def count_tokens(text: str) -> int:
        cjk = sum(1 for c in text if ord(c) > 0x2E80)
        return int(cjk * 0.7 + (len(text) - cjk) / 4)
    TOKENIZER = "approx"
 
REACH_RE = re.compile(r"<!--\s*reach:\s*([a-z0-9_]+)\s*-->")
HEADING_RE = re.compile(r"(?m)^(#{2,3} .*)$")
 
 
def split_sections(md: str):
    """(見出し, 見出し込みブロック) の列に分解する。先頭は __head__。"""
    parts = HEADING_RE.split(md)
    sections = [("__head__", parts[0])]
    for i in range(1, len(parts), 2):
        body = parts[i + 1] if i + 1 < len(parts) else ""
        sections.append((parts[i].strip(), parts[i] + "\n" + body))
    return sections
 
 
def reach_of(block: str) -> str:
    m = REACH_RE.search(block)
    return m.group(1) if m else "always"
 
 
def audit(path: str):
    md = open(path, encoding="utf-8").read()
    sections = split_sections(md)
    rows = [(h, reach_of(b), count_tokens(b)) for h, b in sections]
    total = sum(r[2] for r in rows)
 
    print(f"file      : {path}")
    print(f"tokenizer : {TOKENIZER}")
    print(f"total     : {total} tok / {len(md)} chars\n")
    print(f"{'tok':>7} {'share':>6}  reach     heading")
    for h, reach, t in sorted(rows, key=lambda r: -r[2]):
        print(f"{t:7d} {t * 100 / total:5.1f}%  {reach:<9} {h[:56]}")
 
    by_reach = {}
    for _, reach, t in rows:
        by_reach[reach] = by_reach.get(reach, 0) + t
    print("\n-- 到達率別 --")
    for reach, t in sorted(by_reach.items(), key=lambda kv: -kv[1]):
        print(f"  {reach:<10} {t:6d} tok ({t * 100 / total:4.1f}%)")
 
    resident = by_reach.get("always", 0)
    print(f"\n常駐(always)だけを本体に残した場合の起動時コスト: {resident} tok"
          f"({(1 - resident / total) * 100:.1f}% 削減)")
    return rows, total

出力はこうなります。実際に運用している壁紙のカテゴリ分類スキルに通した結果です。

file      : .claude/skills/wallpaper-category/SKILL.md
tokenizer : cl100k_base
total     : 10048 tok / 14372 chars
 
    tok  share  reach     heading
    980   9.8%  always    ### 1. バッチ処理(レートリミット対策付き)
    849   8.4%  always    ### 自動マージ(100枚ごと)
    755   7.5%  always    __head__
    596   5.9%  always    ## カテゴリの相互排他ルール(重複禁止の組み合わせ)
    586   5.8%  always    ### 3. APIカテゴリへの自動適用(マージ後に必ず実行)
    481   4.8%  always    ### ⚠️ 3D — 厳格ルール(混入多発カテゴリ)
    458   4.6%  always    ### ⚠️ タイポグラフィ — 厳格ルール(重複・混入多発カテゴリ)

14,372 文字で約 10,048 トークンです。日本語主体の文書なので、文字数から受ける印象よりトークンは重くなります。1文字あたり 0.7 トークン前後という比率は、日本語で SKILL.md を書いている方なら覚えておいて損はありません。行数で管理していると、この重さは見えません。

行数を基準にした管理については、以前 SKILL.md の後半が読まれていなかった話 でも書きました。今回はその続きにあたります。行数で上限を決めたあと、では具体的にどの節を外へ出すのか、という段です。

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

この記事の続きを読む

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

この記事で得られること
自分のスキルのどの節が起動時の文脈を食べているのかを、節単位の数値で把握できるようになります
大きい節を references に出して読み込みの往復を増やす失敗を、切り出す前に避けられるようになります
複数のセッションにまたがる作業手順について、どこでスキルを分けるべきかの基準を持てるようになります
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

Claude Code2026-05-30
SKILL.md の後半が読まれていなかった話 — 200行に収める設計と progressive disclosure
Codex CLI が SKILL.md を約220行で読み止める観測をきっかけに、エージェントが実際に読む長さと、SKILL.md を200行以内に収める設計・references への退避の考え方を整理しました。
Claude Code2026-05-10
Claude Code の SKILL.md に grep ガードを仕込んで、AI 生成記事のテンプレ語句を push 前に弾く
Claude Code の Skill にプロンプトだけで品質指示しても、毎日大量に記事を生成していると徐々にテンプレ語句がすり抜けてきます。SKILL.md の最終ステップに grep ガードを差し込んで、違反を検出したら再生成に戻す仕組みを、4サイト運用の実例から紹介します。
Claude Code2026-08-18
調べ物タスクの WebFetch キャッシュ TTL を、自分の使い方に合わせて選ぶ
Claude Code の WebFetch には URL キャッシュの TTL 設定があります。同じページを何度も取りに行く調べ物タスクで、取得回数と情報の鮮度がどう入れ替わるのかを、観測用の小さなサーバと計算スクリプトで確かめながら決めていきます。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →