1. プロジェクト容量の実測結果
Claude Codeのトークン消費がものすごい・・・いくら請求が来るやら(トークン量は1億となっていた!!)、これは大変なのでトークン削減・コスト最適化の実践を考える
iso_app プロジェクトの容量分析結果(2026年5月実測):
| フォルダ | サイズ(MB) | 分類 | 除外対象 |
| node_modules/ | 103.25 | npmライブラリ | ✅ 除外必須 |
| vendor/ | 73.14 | Composerライブラリ | ✅ 除外必須 |
| storage/app/ | 59.91 | 写真・添付ファイル | ✅ 除外必須 |
| storage/logs/ | 4.33 | ログファイル | ✅ 除外必須 |
| storage/fonts/ | 5.87 | IPAexフォント | ✅ 除外必須 |
| storage/framework/ | 0.27 | Laravelキャッシュ | ✅ 除外必須 |
| public/ | 18.39 | ビルド成果物・画像 | ⚠ 一部除外 |
| resources/ | 1.32 | ビュー・CSS・JS | ❌ 必要(含める) |
| database/ | 0.86 | マイグレーション | ❌ 必要(含める) |
| app/ | 0.38 | 実コード | ❌ 必要(含める) |
⚠ 実コード(app/, resources/, database/, routes/, config/)の合計はわずか 2.7MB。全体の 1% です。
2. .claudeignore の設定
.claudeignore ファイルをプロジェクトルートに作成することで、Claude Code が読み込む対象を 268MB から 2.7MB に削減できます。
依存ライブラリ(最重要)
vendor/
node_modules/
アップロードされた写真・添付ファイル(iso_app固有)
storage/app/public/photos/
storage/app/public/evidence/
storage/app/public/plans/
storage/app/public/ra_attachments/
Laravelキャッシュ・ログ
storage/logs/
storage/framework/
storage/fonts/
ビルド成果物
public/build/
public/storage/
手書きCSSは含める
!public/css/print-common.css
Git・IDE
.git/
.idea/
.vscode/
バイナリ・大容量ファイル
*.zip *.tar.gz *.pdf *.xlsx *.sql *.sqlite
3. Claude Code のモデル設定
3.1 モデル別料金(2026年5月時点)
| モデル | 入力(1Mトークン) | 出力(1Mトークン) | 用途の目安 |
| Claude Haiku 4.5 | $1.00 | $5.00 | 単純な分類・抽出・補助処理 |
| Claude Sonnet 4.6 | $3.00 | $15.00 | 一般的な開発作業(推奨) |
| Claude Opus 4.7 | $5.00 | $25.00 | 複雑な設計・深い分析時のみ |
3.2 推奨設定
| 設定項目 | 推奨値 | 理由 |
| 通常モデル | Sonnet 4.6 | Opusの60%のコストで同等品質 |
| コンテキスト | 標準(200k) | プロジェクト2.7MBに1Mは不要 |
| Thinking mode | true(維持) | 複雑な業務ロジックに有効 |
| Fast mode | false(維持) | 6倍の料金($30/$150)は不要 |
| Auto-compact | true(維持) | 長いセッションでも効率的 |
3.3 モデル切り替えの判断基準
| 作業内容 | 使うモデル |
| プロジェクト構造の把握・ファイル探索 | Sonnet 4.6 |
| 単純なリファクタリング・バグ修正 | Sonnet 4.6 |
| 複雑なバグ調査・根本原因分析 | Opus 4.7 |
| 設計判断が必要な新機能の検討 | Opus 4.7 |
| 大規模なセキュリティ監査 | Opus 4.7 |
| 単純なファイル操作・テキスト整形 | Haiku 4.5 |
3.4 切り替えコマンド
/model # モデル一覧を表示して選択
/model sonnet # Sonnet に変更
/model opus # Opus に変更
/cost # 現セッションのコスト確認
/clear # セッションをクリア(キャッシュも消去)
4. /cost の読み方
4.1 実測データ(セキュリティ監査セッション)
| モデル | input | output | cache read | cache write | コスト |
| Haiku 4.5 | 596 | 10.2k | 1.3m | 93.8k | $0.30 |
| Opus 4.7 | 619 | 1.5k | 130.9k | 69.1k | $0.54 |
| Sonnet 4.6 | 1.2k | 47.0k | 11.0m | 169.4k | $4.65 |
| 合計 | ー | ー | ー | ー | $5.49 |
cache read が大きいほど効率的(再利用できている)です。この実測ではセキュリティ監査(Critical 1〜4対応)を約1時間半で完了しており、外注した場合の数十万円相当の作業を$5.49で実施しました。
5. /clear の使い方
- 1つの作業が終わったら即 /clear → 次の作業に前のコンテキストを引きずらない
- 大きな作業の途中でも、フェーズが変わったら /clear
- /clear 後は「先ほどA機能を実装した、次はB機能に適用する」と1〜2行で再投入
- 同じ機能の修正は同じセッションで続ける(キャッシュを活用)
6. 効率的な指示の書き方
6.1 NG例とOK例
| NG例(曖昧) | OK例(具体的) |
| 「印刷が崩れるので直して」 | 「resources/views/reports/sales-list.blade.php と public/css/print-common.css のみを対象に、A3横で出力できるよう修正。他のファイルは触らないこと」 |
| 「長いコードを貼り付けて修正依頼」 | 「app/Http/Controllers/SalesController.php の calculateTotal メソッド(150行目前後)を修正して」(ファイルパスのみ指定) |
| 「この機能を追加して」 | 「作業1: ○○クラスを作成。作業2: △△への組み込み。完了後に修正ファイル一覧とテストケースを報告」 |
6.2 CLAUDE.md によるコンテキスト削減
CLAUDE.md にプロジェクト全体図を記述しておくと、Claude Code がファイルを探索する回数が減り、トークン消費が削減されます。
- プロジェクト概要と主な機能の説明
- 主要ディレクトリとその役割の対応表
- 実装方針のルール(「新規帳票は layouts/print.blade.php を継承」等)
- 共通コンポーネントとその場所
- 禁止事項(「vendorフォルダは編集しない」等)
Claude API 利用コスト最適化
1. 現状分析
1.1 現在のAI利用の構造
iso_app における AI 利用は「パターンA: 都度プロンプトに全データを含める + CSV形式」で実装されています。このパターンは、設計を改善することで大幅なコスト削減が可能です。
| 利用機能 | 対象ファイル | 送信データの特徴 |
| 環境側面の推論 | AiEnvAspectService.php | 工事概要・発注者要求・近隣要求・重機/化学物質詳細 |
| 推薦機能 | AiRecommendationService.php | 工事概要(発注者・予算・特殊仕様を含む可能性) |
| 監査チェックリスト | AuditAiService.php | 被監査対象名・部署名・業務概要 |
| 安全パトロール | SafetyPatrolController.php | 作業内容・使用機械・特殊作業の詳細 |
| 法規制選定 | CSV形式で送信 | 固定語彙チェックボックス選択(現状は安全) |
1.2 現在の設計の評価
法規制選定機能は「チェックボックス選択による固定語彙のみを送信」という設計になっており、情報セキュリティの観点で理想的なアプローチです。この設計の優れている点:
• 入力の語彙が固定されているため機密情報が混入する余地がない
• ユーザー教育不要(自由記述と違い、うっかり機密を書くリスクがない)
• AI への送信内容が予測可能で監査しやすい
• コストも予測可能(トークン数が安定)
3. コスト削減施策(効果の大きい順)
3.1 施策1: プロンプトキャッシュ(最大90%削減)
法規制CSVデータのように「毎回同じデータを送る」部分をキャッシュ対象にします。
// system プロンプトにキャッシュ設定を追加するだけ
'system' => [
[
'type' => 'text',
'text' => '法規制データ: ' . $csvData,
'cache_control' => ['type' => 'ephemeral'] // ★この1行で90%削減
]
],
重要な設計原則: 変わらない部分(法規制データ)はsystemに、毎回変わる部分(ユーザー条件)はmessagesに分離します。
3.2 施策2: モデルの使い分け
| 機能 | 現状 | 推奨 | コスト削減率 |
| 法規制選定 | 不明 | Haiku 4.5 | 最大80%削減 |
| 環境側面推論 | 不明 | Sonnet 4.6 | Opus比40%削減 |
| 監査チェックリスト生成 | 不明 | Sonnet 4.6 | Opus比40%削減 |
| 複雑な文書分析 | 不明 | Opus 4.7 | 品質維持が必要 |
3.3 施策3: 入力データの圧縮
CSVをそのまま投げる前に、不要な列・空白・長文フィールドを削除します。
// 必要な列だけ抽出(50〜70%削減可能)
$essentialColumns = ['id', '法令名', '分類', '概要', '対象業種'];
// 長い概要は切り詰める
'summary' => mb_strimwidth($row['概要'], 0, 100, '...'),
// 繰り返し値はコードマスタ化
// 「労働」→「1」にすると500行で1000トークン削減
3.4 施策4: レスポンスのLaravelキャッシュ
同じ条件の問い合わせ結果を Laravel のキャッシュに保存します。テスト段階で同じ条件を繰り返す際に特に効果的です。
$cacheKey = 'law_selection:' . md5($userCondition . $dataVersion);
return Cache::remember($cacheKey, now()->addDays(7), function() {
return $this->claudeClient->selectLaws($condition);
});
3.5 施策5: 出力形式の最適化
AIに詳しい説明をさせるのではなく、IDだけを返させて詳細はDBから取得します。
| 出力指示 | トークン消費 | 改善率 |
| 「該当する法規制を詳しく説明してください」 | 200〜500トークン/件 | 基準 |
| 「該当するIDのみカンマ区切りで返してください」 | 10〜30トークン/件 | 90〜95%削減 |
2. 料金体系(2026年5月時点)
| モデル | 入力(1Mトークン) | 出力(1Mトークン) | 用途 |
| Claude Haiku 4.5 | $1.00 | $5.00 | 分類・ルーティング・抽出 |
| Claude Sonnet 4.6 | $3.00 | $15.00 | 一般的な推論・選定タスク |
| Claude Opus 4.7 | $5.00 | $25.00 | 高度な推論が必要な場合のみ |
2.1 プロンプトキャッシュ料金
| 種別 | 料金 | 説明 |
| 通常入力 | 100%(基準) | キャッシュなしの通常料金 |
| キャッシュ書き込み(5分) | 125%(1.25倍) | 初回キャッシュ作成時 |
| キャッシュ書き込み(1時間) | 200%(2倍) | 1時間保持する場合 |
| キャッシュ読み込み(ヒット) | 10%(0.1倍) | 2回目以降 = 90%オフ |
2.2 Batch API(バッチ処理)
Message Batches API を使うと、入力・出力の両方で 50% オフになります。24時間以内に結果が返ります。品質差はありません。リアルタイム応答が不要な処理に活用できます。
- プロンプトキャッシュと組み合わせると最大95%削減可能
- 大量データの一括処理・夜間バッチに適している
4. 優先実施スケジュール
| 施策 | 難易度 | 効果 | 実施タイミング |
| プロンプトキャッシュ実装 | 簡単(数行追加) | 最大90%削減 | 今すぐ |
| Laravelキャッシュ追加 | 簡単 | 繰り返しコスト0 | 今すぐ |
| モデル切り替え(Haiku/Sonnet) | 簡単 | コスト1/3〜1/5 | 今週中 |
| CSV軽量化(不要列削除) | 簡単 | 30〜50%削減 | 今週中 |
| 出力形式の最適化 | 中程度 | 出力コスト90%削減 | 来週 |
| 2段階構成(Haiku→Sonnet) | 中程度 | 品質維持しつつコスト削減 | 来月 |
5. AI利用ログの実装
コスト管理のために、全AI呼び出しをDBに記録する仕組みを実装することを推奨します。
Schema::create('ai_usage_logs', function (Blueprint $table) {
$table->id();
$table->foreignId('user_id');
$table->foreignId('company_id');
$table->string('feature'); // 機能名
$table->string('model'); // 使用モデル
$table->integer('input_tokens');
$table->integer('output_tokens');
$table->integer('cache_read_tokens')->default(0);
$table->decimal('cost_usd', 10, 6);
$table->integer('duration_ms');
$table->timestamps();
});
これにより「どの機能がいくら使っているか」「キャッシュが効いているか」が後から検証できます。会社ごとのコスト分析や、商用化に向けた価格設計にも活用できます。
6. 将来計画: 組織内AI(自前サーバー)
契約事項・技術的背景・経営内容の文書化を扱う際の、情報漏洩リスクゼロのアーキテクチャです。
| 段階 | 内容 | 期間 |
| Step 1: ルールベース匿名化 | 氏名・会社名・金額を自動マスキング。既存Laravelサーバーで動作可能 | 2〜4週間 |
| Step 2: ローカルLLM検証 | Ollama + Llama 3.2 などで自前AIの感触をつかむ(無料) | 別途検討 |
| Step 3: 統合パイプライン | 匿名化→外部AI→固有名詞復元の完全な流れを構築 | 3〜6ヶ月 |

