ProあるいはMax 100プランに踏みとどまる、その一点でのToken節約術
ブログネタ探しを兼ねて、業務プロジェクトを題材に様々な試みをしていますが、「Approaching usage limit」という警告に出会う頻度が増えてきました。実装ボリュームからすると、使い方に無駄が多い証拠でしょう。
Token節約の第一歩は英語を使うことですが、日本人にとって英語での指示出しは負担が大きいものです。普段馴染みのない専門用語も多く含まれるため、内容を理解するだけでも相当な労力を要します。
そこで、ある程度のToken消費量増加は覚悟の上で、英語を使う以外でのコーディング指示をする際に節約につながる手続きを模索してみました。
なお、本記事中に記載されているMarkdownはCLAUDE_ja.mdのものとなっています。
前提を確かめる
重要なのは、Tokenがどのような状況で、どのタイミングで無駄に消費されているかを把握することです。プランをアップグレードする方法もありますが、それにも限度があるでしょう。
知る手段についてはClaudeに聞くのが一番確実です。
ファイル選択に制約を入れる
現在、筆者のCLAUDE.mdには検索向けに以下内容の英語表記で指定が入っています。これがあるだけで無闇なファイル読込をシャットアウトできます。それまではVueコンポーネントを読んでほしいのにJavaScriptファイルを全部舐めたりすることもありました。
## ファイル検索パターン
- ソースファイルsrc/**/*.ts` (TypeScript), `public/**/*.js` (JavaScript)
- コンポーネント**:コンポーネント**: `src/components/**/*.vue` (Vue コンポーネント)
- データベースモデル**:データベースモデル**: `src/database/*DB.ts` (データベースモデル)
- APIルート**:**API routes**: `src/server/routes/**/*.ts` (サーバールート)
- **Workers**:**Workers**: `src/workers/***/*.ts`, `src/queue/workers/***/*.ts` (ワーカー)
- コンフィギュレーションコンフィギュレーション**: `config/*.json`、`*.config.js`、`*.config.ts`。
- テストテスト**: `test/**/*.test.ts`、`__tests__/**/*.ts`。
- ドキュメント**:ドキュメント**: `raidou-architecture/ja/**/*.md` (英語ドキュメント)
- **Ignore patterns**:node_modules/`, `dist/`, `lib/`, `backup/`, `.git/`.
さらに、機能ごとのキーワードも簡潔に指定しています。これはClaudeがプロジェクト内で頻繁に使われているキーワードを分析した結果に基づいているため、検索の適合率が非常に高くなっています。この指定を追加する前は、「数撃ちゃ当たる」方式で様々な類義語を使った大量のGrepクエリが実行され、無駄なリソースを消費していました。
- サービスservice**: `class.*Service` (AuthService, FileService など)
- データベース**:class.*DB` (fileMetadataDB, favoriteDB など)
- **Routes**:Routes**: `router.(get|post|put|delete)` (API エンドポイント)
- WebSocket**:ws.|WebSocket` (リアルタイム機能)
- **Authentication**:auth|Auth|unifiedAuth` (認証関連コード)
- エラー処理**:catch|throw|Error` (エラー管理)
- ロギング**:Logger|ApiLogger|console.log` (ロギングコード)
現在のFindとGrepはほぼ一瞬で終わるようになった感じがあります。
ファイル読込に制約を入れる
特に指定を入れていない場合、Claudeはすべてのファイルを容赦なく読み込みます。問題は、その読み込み作業がトークン消費に直結するにもかかわらず、実際には必要のないケースが多いことです。
現在は以下の指定を入れており、Readクエリが実行された場合でもTokenカウントが急激に増加することは少なくなりました。
- ファイルヘッダにファイルの詳細を書き込む
/**
* コンポーネント/サービス名
*
* 主な目的と責任
* 主な特徴または機能
*
* 依存関係
* 依存関係目的
*
* @module [src/ からのファイルパス].
*/
- ファイルの概要がまだない場合は、変更時にファイルの先頭に追加する
分割後の外部ファイル確認は最低限度に
一見不要に思えるかもしれませんが、最低限の確認はしておくべきでしょう。先に述べた概要をファイルに記載しておくことで、Claude がファイル全体を読まなくても内容を把握できる可能性が高まります。
- 外部ファイル作成後の内容確認は最小限にし、完全な確認が要求された場合は、ファイルを開くためのターミナルコマンドの提供に留める。
セッションはそのまま引き継がない
継続したい内容が別セッションにある場合は、進捗状況やToDoリストなどの要約をテキストとして出力し、新しいセッションで読み込むことをお勧めします。残念ながら、既存セッションのトークン使用量を減らす方法はないようです。
日本人用CLAUDE_ja.mdの作成
普段CLAUDE.mdには日本語で追記しているため「日→英→日」の翻訳プロセスが発生しますが、これは必要なコストとして割り切っています。日本語から英語への翻訳はClaudeに指示し、英語から日本語への翻訳にはDeepLを活用しています。
DeepLでの翻訳はこちらを使っています。
使い方は以下の通り。
deepl CLAUDE.md -o CLAUDE_ja.md
機械翻訳ではありますが、十分に理解可能な内容になっています。
あとがき
今回の記事タイトルに「ProあるいはMax 100プラン」としたのは、これらのプランを導入しなければ、どれだけ節約に努めても莫大な利用費が発生することが確実だからです。Max 100プランとMax 200プランの間には年間$1,200の差があるため、これは節約へのしっかりとしたモチベーションになるはずです。
なお、英語と日本語でのToken消費量の違いについては以下のツイートが参考になります。現在は改善が進んでいる可能性もありますが、言語間の基本的な差異は今後も残り続けるでしょう。