エンジニアの思い立ったが吉日

このブログでは、「あ、これ面白い!」「明日から仕事で使えそう!」と感じたIT関連のニュースやサービスを、難しい言葉を使わずに分かりやすく紹介しています。ITに詳しくない方にも楽しんでもらえるような情報を発信していくので、ぜひ「継続的な情報収集」の場としてご活用ください。

Claudeのコード生成が途中で切れる原因と完全対策ガイド

「Claudeに長いコードを頼んだら、途中で // ... 残りは省略 と表示されて終わってしまった」——そんな経験をしたエンジニアは少なくないはずです。せっかく丁寧なプロンプトを書いたのに、出力が半端なところで打ち切られると、続きを何度も頼まなければならず、かえって時間をロスしてしまいます。

本記事では、Claudeのコード生成が途中で切れてしまう根本原因を技術的に解説したうえで、今日から使える実践的な対策を網羅的にまとめています。Claude.aiのチャットUIからAPI利用、Claude Codeまで、それぞれのシナリオに合わせた対処法を知ることで、AI開発支援をフル活用できるようになります。

コード出力が途中で切れる「本当の原因」を理解しよう

まず大前提として、Claudeが意地悪しているわけでも、バグでもありません。いくつかの技術的な制約と、AIモデル固有の挙動が組み合わさって起きています。原因を正しく理解することが、効果的な対策の第一歩です。

トークン制限とコンテキストウィンドウの違い

よく混同されますが、「出力が切れる」原因には2種類あります。

(1)出力トークン(max_tokens)の制限

Claude APIのモデルには出力トークン数の制限があり、長文生成時に途中で切れてしまう可能性があります。モデルごとの目安は次のとおりです。

モデル 最大出力トークン コード換算目安
Claude Haiku 4.5 8,192トークン 〜400行程度
Claude Sonnet 4.6 64,000トークン 〜3,000行程度
Claude Opus 4.6 128,000トークン 〜6,000行程度
Sonnet/Opus 4.6(拡張モード) 最大128,000〜 大規模コードベース対応

※コード行数はファイル構成や言語により大きく変わります。

(2)コンテキストウィンドウの消費

コンテキストウィンドウとは、AIが「一度に記憶・参照できる情報量の上限」のことです(入力と出力の合計)。会話が長くなるほど、過去のやり取りがウィンドウを圧迫し、新しいコードを生成するための「余白」が減っていきます。

AIモデル固有の「省略癖」

トークン制限とは別に、Claudeにはコードを省略しようとする傾向があります。既存コードを修正する場合などに、変更がない部分を // ... 既存のコードはそのまま と省略してしまうのです。これはClaudeが「読者が既に把握しているだろう」と判断した結果であり、ある意味では賢い挙動ですが、実際に動かすコードとして出力するには致命的です。

API利用時のmax_tokens設定ミス

OTPM レート制限は、各リクエストの開始時にmax_tokensに基づいて推定されます。つまり、APIを使うとき max_tokens の値が小さいと、長いコードを生成しようとしても物理的に打ち切られてしまいます。デフォルト値のままにしていると、思った以上に短いところで出力が止まるケースがあります。


チャットUI(Claude.ai)で試せる即効対策

Claude.aiのチャットUIを使っているユーザーが、追加コストなしに今すぐ実践できる対策を紹介します。

プロンプトに「省略禁止」を明示的に指示する

最も手軽かつ効果の高い方法です。プロンプトの冒頭か末尾に、次のような一文を追加するだけで省略が大幅に減ります。

【重要】コードを出力する際は、省略・中断なく完全なコードを出力してください。
「// ...」「# ...(以下省略)」などの省略表現は一切使わないでください。
既存コードを修正する場合も、ファイル全体のコードを出力してください。

AIって賢すぎるところがあって、長いコードを生成する時に「ここは省略しちゃっていいかな」って勝手に判断しちゃうことがあります。特に、似たような処理が繰り返されるような部分では「以下同様」みたいな省略をしがちです。明示的な禁止命令は、この自動省略を抑止する最も直接的な方法です。

Artifactsを活用して出力スペースを確保する

Claude.aiのArtifacts機能(コードや文書を別ウィンドウに表示する機能)を使うと、通常のチャット返答よりも長いコードを安定して出力できることがあります。「コードをArtifactとして出力してください」と指示することで、チャット本文の余白を圧迫せずにコードを生成できます。

タスクを段階的に分割して依頼する

一度に何百行もあるコードを依頼するのではなく、機能単位・ファイル単位で分割して依頼する方法が根本的かつ効果的です。

❌ 悪い例:
「ECサイトのバックエンド全体(ユーザー管理、商品管理、注文管理、決済)を
Pythonで作成してください」

✅ 良い例(ステップ分割):
Step 1: 「まずDBモデルの定義だけを作成してください(models.py)」
Step 2: 「次にUserManagerクラスのCRUDメソッドを実装してください」
Step 3: 「続いてProductManagerのメソッドを実装してください」
Step 4: 「OrderManagerとPaymentHandlerを実装してください」
Step 5: 「エラーハンドリングとバリデーションを追加してください」

Claudeには、トークン制限という一度の応答に対して対応できる文字数に決まりがあります。長文の文章は分割することで段階的に情報を整理しながら作業を進めるのが有効です。

出力が止まったときの正しい「続き」の依頼方法

途中で出力が止まった場合、「続けて」だけでは文脈がリセットされて期待通りの続きにならないことがあります。次のように、どこまで出力済みかを明示した形で依頼するのが効果的です。

❌ 効果が薄い例:
「続けて」「続きを教えて」

✅ 効果的な例:
「コードの出力が途中で止まりました。直前に出力された部分の末尾は
以下のとおりです。この続きをdelete_userメソッドから出力してください。

[最後に出力されたコードの末尾10行程度をここに貼り付ける]」

API利用時の技術的な対策

Claude APIを組み込んで開発している方向けに、コード側でできる対策を解説します。

max_tokensを適切に設定し、stop_reasonで状態を確認する

API利用時にコードが途切れる最も多い原因は、max_tokens の値が不足していることです。また、出力が止まった理由を stop_reason で確認することで、制限由来か正常終了かを判別できます。

import anthropic

client = anthropic.Anthropic()

response = client.messages.create(
    model="claude-sonnet-4-6",
    max_tokens=16000,  # 必要に応じて大きく設定
    messages=[
        {
            "role": "user",
            "content": "以下の要件でPythonクラスを完全に実装してください。\n"
                       "省略なし、コメントを含むすべてのコードを出力すること。\n"
                       "[要件をここに記述]"
        }
    ]
)

# stop_reasonを必ず確認する
if response.stop_reason == "max_tokens":
    print("⚠️ 出力がmax_tokensの制限で打ち切られました。")
    print("max_tokensの値を増やすか、タスクを分割してください。")
elif response.stop_reason == "end_turn":
    print("✅ 出力は正常に完了しました。")

# 出力コードの取得
code_output = response.content[0].text
print(code_output)

stop_reason == "max_tokens" が返ってきた場合、それはClaude側の問題ではなく、APIの設定側の問題です。値を引き上げれば解消できます。

長大コードは複数ターンで継続生成する

どうしても一度で全体を出力する必要がある場合、複数ターンで継続させる仕組みをコード側で実装できます。

def generate_complete_code(client, prompt: str, model: str = "claude-sonnet-4-6") -> str:
    """途切れた場合に自動で続きを生成する関数"""
    messages = [{"role": "user", "content": prompt}]
    full_output = ""

    while True:
        response = client.messages.create(
            model=model,
            max_tokens=8000,
            messages=messages
        )
        
        current_output = response.content[0].text
        full_output += current_output
        
        # 正常終了なら完了
        if response.stop_reason == "end_turn":
            break
        
        # max_tokensで止まった場合は続きを要求
        if response.stop_reason == "max_tokens":
            messages.append({"role": "assistant", "content": current_output})
            messages.append({
                "role": "user",
                "content": "コードの続きを出力してください。"
                           "省略せず、前の出力の直後から続けてください。"
            })
        else:
            break
    
    return full_output

最新モデルほど長い出力に強い

200行を超える大規模なコードでも安定した出力が可能で、従来のAIツールで見られがちな途中での生成停止や不完全な出力といった問題も大幅に軽減されました。新しいモデルほど長い出力が安定しているため、APIコストと相談しながらモデルを選択することも有効な対策です。


Claude Code利用時の専用対策

Claude Code(コマンドラインから使えるコーディングエージェント)は、チャットUIとは異なる特性と対策があります。

CLAUDE.mdファイルでルールを永続化する

Claude Codeでは、プロジェクトのルートディレクトリに CLAUDE.md というファイルを置くと、そこに書いたルールをClaudeが毎回参照します。「省略しない」「ファイル全体を出力する」といったルールを一度書いておけば、毎回プロンプトに書く手間が省けます。

# CLAUDE.md

## コード生成に関するルール
- コードを出力・修正する際は、ファイルの完全な内容を出力すること
- `// ...``# ...``/* 省略 */` といった省略表現は一切使用しないこと
- 既存コードを変更する場合も、ファイル全体を出力すること
- 各ファイルの先頭には必ずファイルパスをコメントで記載すること
- 変更範囲が明確な場合は、差分(diff形式)での出力も可とする

## プロジェクト構成
(プロジェクトの概要をここに記載すると精度が上がる)

モデルをタスクに応じて切り替える

Claude Code はデフォルト Sonnet ですが、タスクに応じてモデルを切り替えることでコストを削減できます。大規模なアーキテクチャ設計には Opus、日常的なコーディングには Sonnet、単純な修正には Haiku、というように使い分けることで、コスト効率よく長い出力を安定させられます。

/model claude-haiku-4-5    # 軽量タスク・単純な修正
/model claude-sonnet-4-6   # 通常のコーディング(デフォルト)
/model claude-opus-4-6     # 複雑なアーキテクチャ設計・長大コード

Gitと組み合わせて段階的に進める

コードを一気に生成しようとすること自体がリスクです。Claude Codeの真価は、細かいステップで反復しながら進めるワークフローで発揮されます。

# Step 1: DBモデルの設計
claude "usersテーブルとordersテーブルのSQLAlchemyモデルを作成して"
git add . && git commit -m "feat: DBモデルの追加"

# Step 2: CRUDの実装
claude "UserRepositoryクラスのCRUDメソッドをすべて実装して"
git add . && git commit -m "feat: UserRepositoryの実装"

# Step 3: テストの追加
claude "UserRepositoryのユニットテストをpytestで作成して"
git add . && git commit -m "test: UserRepositoryのテスト追加"

一つのステップが完了するたびにコミットしておくと、万が一生成結果がおかしかったときにすぐに git revert で戻せます。


ChatGPT・Geminiとの比較:コード出力の安定性

Claudeのコード出力特性を他のAIツールと比較すると、適切なツール選択の参考になります。

比較項目 Claude ChatGPT(GPT-4o) Gemini 2.0 Flash
最大出力トークン 64,000〜128,000(モデルによる) 16,384 8,192
省略癖 あり(指示で抑制可) あり(同上) やや少ない
長大コードの安定性 高い(指示が適切なら) 中程度 中程度
コンテキストウィンドウ 200K〜1M(モデルによる) 128K 1M
「続けて」への対応 文脈継続は良好 良好 良好
コード特化ツール Claude Code GitHub Copilot / Codex Gemini CLI

Claudeの最大出力トークン数は他社モデルと比較しても多く、設定と指示の仕方次第で長大なコードを安定して生成できる能力を持っています。ただし、どのAIでも共通して言えるのは、プロンプト設計と段階的なタスク分割が重要という点です。


まとめ:「途中で切れる」を防ぐための実践チェックリスト

Claudeのコード生成が途中で切れる問題は、正しい知識と対策を持てば大幅に減らせます。最後に、実践時のチェックリストとしてまとめます。

プロンプト設計のチェック

  • [ ] 「省略しないで」「完全なコードを出力して」を明示しているか
  • [ ] 一度のリクエストで依頼する量は1ファイル・1機能単位以内か
  • [ ] 「続けて」だけでなく、直前の出力末尾を貼り付けているか

API設定のチェック(API利用者)

  • [ ] max_tokens は十分に大きい値を設定しているか
  • [ ] stop_reason を確認して、打ち切りの原因を特定しているか
  • [ ] タスクの規模に対して適切なモデルを選択しているか

Claude Code利用時のチェック

  • [ ] CLAUDE.md に省略禁止ルールを記載しているか
  • [ ] タスクをGitのコミット単位に分割して進めているか
  • [ ] タスクの複雑さに合わせてモデルを切り替えているか

「AIが自分の意図を読み取って完全なコードを出してくれる」という期待ではなく、「AIを効果的に使うための設計をする」という意識に切り替えることが、Claudeを使った開発を飛躍的に改善する近道です。一度ワークフローを整えてしまえば、Claudeは非常に強力なコーディングパートナーとして活躍してくれます。

当サイトは、アフィリエイト広告を使用しています。