システムプロンプトは、Claudeの動作、機能、応答スタイルを定義します。Claude Code SDKは、システムプロンプトをカスタマイズする3つの方法を提供します:出力スタイル(永続的なファイルベースの設定)の使用、デフォルトプロンプトへの追加、または完全な置き換えです。

システムプロンプトの理解

システムプロンプトは、会話全体を通してClaudeがどのように動作するかを形作る初期の指示セットです。Claude Codeのデフォルトシステムプロンプトには以下が含まれます:
  • ツール使用の指示と利用可能なツール
  • コードスタイルとフォーマットのガイドライン
  • 応答のトーンと詳細度の設定
  • セキュリティと安全性の指示
  • 現在の作業ディレクトリと環境に関するコンテキスト

変更方法

方法1:出力スタイル(永続的な設定)

出力スタイルは、Claudeのシステムプロンプトを変更する保存された設定です。これらはマークダウンファイルとして保存され、セッションやプロジェクト間で再利用できます。

出力スタイルの作成

import { writeFile, mkdir } from 'fs/promises'
import { join } from 'path'
import { homedir } from 'os'

async function createOutputStyle(name: string, description: string, prompt: string) {
  // ユーザーレベル: ~/.claude/output-styles
  // プロジェクトレベル: .claude/output-styles
  const outputStylesDir = join(homedir(), '.claude', 'output-styles')
  
  await mkdir(outputStylesDir, { recursive: true })
  
  const content = `---
name: ${name}
description: ${description}
---

${prompt}`
  
  const filePath = join(outputStylesDir, `${name.toLowerCase().replace(/\s+/g, '-')}.md`)
  await writeFile(filePath, content, 'utf-8')
}

// 例:コードレビュー専門家を作成
await createOutputStyle(
  'Code Reviewer',
  'Thorough code review assistant',
  `You are an expert code reviewer.

For every code submission:
1. Check for bugs and security issues
2. Evaluate performance
3. Suggest improvements
4. Rate code quality (1-10)`
)

出力スタイルの使用

作成後、出力スタイルは以下の方法で有効化できます:
  • CLI: /output-style [style-name]
  • 設定: .claude/settings.local.json
  • 新規作成: /output-style:new [description]

方法2:appendSystemPromptの使用

appendSystemPromptオプションは、すべての組み込み機能を保持しながら、カスタム指示をデフォルトシステムプロンプトに追加します。
import { query } from "@anthropic-ai/claude-code"

const messages = []

for await (const message of query({
  prompt: "フィボナッチ数を計算するPython関数を書くのを手伝って",
  options: {
    appendSystemPrompt: "Pythonコードには常に詳細なdocstringと型ヒントを含めてください。"
  }
})) {
  messages.push(message)
  if (message.type === 'assistant') {
    console.log(message.message.content)
  }
}

方法3:customSystemPromptの使用

customSystemPromptオプションは、デフォルトシステムプロンプト全体をカスタム指示で置き換えます。
import { query } from "@anthropic-ai/claude-code"

const customPrompt = `あなたはPythonコーディング専門家です。
以下のガイドラインに従ってください:
- 清潔で十分に文書化されたコードを書く
- すべての関数に型ヒントを使用する
- 包括的なdocstringを含める
- 適切な場合は関数型プログラミングパターンを優先する
- 常にコードの選択を説明する`

const messages = []

for await (const message of query({
  prompt: "データ処理パイプラインを作成して",
  options: {
    customSystemPrompt: customPrompt
  }
})) {
  messages.push(message)
  if (message.type === 'assistant') {
    console.log(message.message.content)
  }
}

3つのアプローチすべての比較

機能出力スタイルappendSystemPromptcustomSystemPrompt
永続性✅ ファイルとして保存❌ セッションのみ❌ セッションのみ
再利用性✅ プロジェクト間❌ コードの重複❌ コードの重複
管理✅ CLI + ファイル⚠️ コード内⚠️ コード内
デフォルトツール✅ 保持✅ 保持❌ 失われる(含めない限り)
組み込み安全性✅ 維持✅ 維持❌ 追加が必要
環境コンテキスト✅ 自動✅ 自動❌ 提供が必要
カスタマイズレベル⚠️ デフォルトを置換⚠️ 追加のみ✅ 完全制御
バージョン管理✅ はい✅ コードと共に✅ コードと共に
発見可能性/output-style❌ 発見不可❌ 発見不可

使用例とベストプラクティス

出力スタイルを使用する場合

最適な用途:
  • セッション間での永続的な動作変更
  • チーム共有設定
  • 専門アシスタント(コードレビュアー、データサイエンティスト、DevOps)
  • バージョン管理が必要な複雑なプロンプト変更
例:
  • 専用のSQL最適化アシスタントの作成
  • セキュリティ重視のコードレビュアーの構築
  • 特定の教育法を持つ教育アシスタントの開発

appendSystemPromptを使用する場合

最適な用途:
  • 特定のコーディング標準や設定の追加
  • 出力フォーマットのカスタマイズ
  • ドメイン固有の知識の追加
  • 応答の詳細度の変更

customSystemPromptを使用する場合

最適な用途:
  • Claudeの動作の完全制御
  • 専門的な単一セッションタスク
  • 新しいプロンプト戦略のテスト
  • デフォルトツールが不要な状況

アプローチの組み合わせ

最大限の柔軟性のために、これらの方法を組み合わせることができます:

例:セッション固有の追加を持つ出力スタイル

import { query } from "@anthropic-ai/claude-code"

// "Code Reviewer"出力スタイルがアクティブであると仮定(/output-styleを介して)
// セッション固有の重点領域を追加
const messages = []

for await (const message of query({
  prompt: "この認証モジュールをレビューして",
  options: {
    appendSystemPrompt: `
      このレビューでは、以下を優先してください:
      - OAuth 2.0準拠
      - トークンストレージセキュリティ
      - セッション管理
    `
  }
})) {
  messages.push(message)
}

関連項目