原文(日本語訳)
非インタラクティブモード(-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