Skip to content

原文(日本語訳)

非インタラクティブモード(-p)での構造化出力を修正しました

原文(英語)

Fixed structured outputs for non-interactive (-p) mode

概要

v2.1.22 で、非インタラクティブモード(-p または --print フラグ使用時)での構造化出力が正常に動作しない問題が修正されました。これにより、Claude Code をプログラマティックに使用する際の信頼性が向上しました。

注意点

  • 非インタラクティブモード限定: この問題は -p または --print フラグを使用した場合にのみ発生していました
  • 自動化への影響: CI/CD パイプライン、スクリプト、プログラマティックな統合に影響していました
  • 構造化出力の重要性: JSON 形式の出力は、Claude Code の応答をプログラムで解析する際に不可欠です
  • 小規模な修正: コードベース全体への影響は限定的ですが、自動化ユーザーにとっては重要な修正です

実践例

修正前の問題

以前のバージョンでは、非インタラクティブモードで構造化出力が期待通りに動作しませんでした:

bash
# 問題のあるコマンド(v2.1.21 以前)
claude -p "プロジェクト内の TypeScript ファイルをリストアップしてください" \
  --output-format json

# 期待: 整形された JSON 出力
# 実際: 不正な形式または欠落したデータ

これは以下のような自動化シナリオで問題となっていました:

bash
# CI/CD パイプラインでの使用例
#!/bin/bash

# コードレビューの自動化
result=$(claude -p "このコミットの変更をレビューしてください" \
  --output-format json)

# JSON のパースに失敗
echo "$result" | jq '.review.summary'
# エラー: 構造化出力が正しくない

修正後(v2.1.22 以降)

v2.1.22 では、構造化出力が正常に動作し、プログラマティックな使用が可能になりました:

bash
# 正しく動作する(v2.1.22 以降)
claude -p "プロジェクト内の TypeScript ファイルをリストアップしてください" \
  --output-format json

# 整形された JSON 出力を取得

実用的な自動化例

CI/CD でのコードレビュー自動化

bash
#!/bin/bash
# .github/scripts/auto-review.sh

# 変更されたファイルを取得
changed_files=$(git diff --name-only HEAD~1)

# Claude Code で自動レビュー
review_result=$(claude -p \
  "以下のファイルの変更をレビューしてください: ${changed_files}" \
  --output-format json)

# JSON を解析してコメントを作成
summary=$(echo "$review_result" | jq -r '.review.summary')
issues=$(echo "$review_result" | jq -r '.review.issues[]')

# GitHub PR にコメントを投稿
gh pr comment --body "## 自動レビュー結果\n\n${summary}\n\n### 検出された問題:\n${issues}"

プロジェクト分析の自動化

bash
#!/bin/bash
# analyze-project.sh

# プロジェクトの概要を取得
analysis=$(claude -p \
  "このプロジェクトの構造を分析し、主要なコンポーネントを特定してください" \
  --output-format json)

# 構造化されたデータを抽出
components=$(echo "$analysis" | jq -r '.components[]')
architecture=$(echo "$analysis" | jq -r '.architecture')

# レポートを生成
cat > project-analysis.md <<EOF
# プロジェクト分析レポート

## アーキテクチャ
${architecture}

## 主要コンポーネント
${components}
EOF

バッチ処理の自動化

bash
#!/bin/bash
# batch-refactor.sh

# 複数ファイルの一括リファクタリング
for file in src/**/*.ts; do
  result=$(claude -p \
    "このファイルをリファクタリングして、より読みやすくしてください: ${file}" \
    --output-format json)

  # リファクタリングが成功したか確認
  success=$(echo "$result" | jq -r '.success')

  if [ "$success" = "true" ]; then
    echo "✓ ${file} をリファクタリングしました"
  else
    echo "✗ ${file} のリファクタリングに失敗しました"
  fi
done

利用可能な出力フォーマット

bash
# JSON 形式(プログラマティックな使用に最適)
claude -p "タスク" --output-format json

# ストリーミング JSON(リアルタイム処理用)
claude -p "タスク" --output-format stream-json

# テキスト形式(人間が読む用)
claude -p "タスク" --output-format text

プログラマティックな使用のベストプラクティス

エラーハンドリング

bash
#!/bin/bash

# エラーハンドリングを含む堅牢なスクリプト
result=$(claude -p "タスク" --output-format json 2>&1)
exit_code=$?

if [ $exit_code -ne 0 ]; then
  echo "エラー: Claude Code の実行に失敗しました"
  echo "$result"
  exit 1
fi

# JSON の検証
if ! echo "$result" | jq empty 2>/dev/null; then
  echo "エラー: 不正な JSON 出力"
  exit 1
fi

# 正常処理
echo "$result" | jq '.data'

タイムアウトの設定

bash
#!/bin/bash

# タイムアウトを設定して実行
timeout 300 claude -p "長時間かかるタスク" --output-format json

if [ $? -eq 124 ]; then
  echo "タイムアウト: 5分以内に完了しませんでした"
  exit 1
fi

関連情報