--system-prompt(システムプロンプト)

起動オプション
--system-prompt
システムプロンプト
Claude Codeを起動するときコマンドの後ろに足す指定の1つで、デフォルトの「コーディング助手としての人格・ツール使用ガイダンス・安全指示・コーディング規約」を全部捨てて、自分が書いたテキストだけを新しい人格として動かすためのもの。

Claude Codeを「コーディング用のClaude」ではなく、別の役割(CSV整形パイプライン、英訳パイプライン、社内文書のQ&Aボット等)に転用したい人

Claude Codeを「コーディング用のClaude」ではなく、日本語→英語の翻訳エンジンや社内文書のQ&Aボット、CSVのカラム正規化部品のように、まったく別の役割の単発パイプラインに転用したい場面で、デフォルトの人格を完全に貼り替えるために <code>claude --system-prompt "..."</code> の形で叩く。

Claude Code を起動するとき、コマンドの後ろに --system-prompt "..." と書き足すと、Claudeが普段背負っている「コーディング用の人格」を全部捨てて、渡したテキストだけを新しい人格として動かせます。

1回限りの起動に対する人格スイッチで、永続設定ではありません。同じプロジェクトで次に claude を叩けば、何もなかったかのようにデフォルトに戻る、という仕組みです。

噛み砕くと

会議室のホワイトボードに「今日のあなたの役割」と大きく書かれた紙が貼ってある状態を想像してください。デフォルトでは「あなたは熟練のソフトウェアエンジニア」と書いてあって、Claudeはそれを毎回見て喋ります。

--system-prompt はその貼り紙を、自分が書いた別の紙と完全に貼り替える指示です。「あなたは日本語→英語の翻訳機。訳文だけ返せ」と書いた紙に貼り替えると、Claudeはコーディング助手であることを忘れて、翻訳機として喋り始める。

これが要点。

そして似た系統に --append-system-prompt というのもあって、こちらは元の貼り紙の下に付箋を1枚足すイメージです。元の人格はそのまま残して、ちょっとだけルールを追加する。どちらを選ぶかで挙動が大きく変わります。

大事な前提:デフォルトのプロンプトには「ツールの使い方」や「安全な振る舞い」も書かれている

Claude Code のデフォルトのシステムプロンプトには、「コーディング助手としての人格」だけでなく、ファイル操作ツールの使い方ガイダンス、危険な操作を避ける安全ルール、コーディング規約なども一緒に書き込まれています。

--system-prompt を指定するということは、これら全部まとめて捨てるということです。残るのは渡したテキストだけ。これを忘れて使うと、思ったように動かない場面が出ます。

「素のClaude Codeを日本語→英語翻訳エンジンに転用する」を例に、実際の手順を見る

Claude Code を、コーディング目的ではなく「日本語を英訳して標準出力に吐くだけのパイプラインの部品」として組み込むケースを追います。社内ツールやバッチ処理の途中に刺して、人が見ていない場所で単発実行させるイメージです。

ステップ1: 普通に -p モードで叩いてみる

まず --system-prompt を渡さずに、Claude Code をそのまま単発実行モードで動かしてみます。

$ echo "今日はいい天気です" | claude -p

すると返ってくるのは、たいてい「Sure, I can help translate this. The Japanese sentence '今日はいい天気です' translates to: 'It's nice weather today.' Let me know if you'd like other variations!」みたいな、コーディング助手としての前置きつきの応答です。

翻訳結果だけ欲しいのに、コメントがついてくる。これは Claude が「自分はソフトウェアエンジニアの相棒だ」と思って喋っているからです。

ステップ2: --system-prompt で人格を貼り替える

同じことを、今度は人格を完全に貼り替えてやらせます。

$ echo "今日はいい天気です" | claude -p --system-prompt "You are a Japanese-to-English translator. Output only the translation, no commentary."

これで返ってくるのは It's nice weather today. の1行だけになる想定です。「Sure」も「Let me know」もない。Claude は自分が翻訳機だと思っているので、翻訳機らしく振る舞います。

ステップ3: 起動スクリプトに包んで再利用する

ここまでくれば、あとは1行スクリプトに包む話です。たとえば translate.sh というファイルに保存しておけば、CSV整形バッチや英訳バッチの途中に刺せます。

#!/bin/bash
claude -p --system-prompt "You are a Japanese-to-English translator. Output only the translation, no commentary."

使う側は cat ja.txt | ./translate.sh > en.txt みたいに、別のコマンドと縦に繋ぐだけ。Claude Code がコーディング助手であることを意識する必要はありません。

ステップ4: ここで初心者がやりがちな勘違い

「TypeScript必須を伝えたいだけ」みたいな軽い追加ルールでも --system-prompt を使ってしまう、というのがよくあるミス。

これをやると、Claude Code が普段背負っているファイル編集の安全ガイドや、コーディング規約まで全部消えます。コードを書かせたいのに、危険なコマンドの確認を取らなくなる、みたいな副作用が起きる。

「コーディング助手の人格を残したまま、ちょっとルールを足したい」だけなら、次に出てくる --append-system-prompt を使うのが正解です。

ステップ5: 置き換え + 追加の合わせ技

公式は --system-prompt(置き換え)と --append-system-prompt(追加)の併用を認めています。

$ claude -p --system-prompt "You are a translator..." --append-system-prompt "Always preserve Markdown formatting."

これで「翻訳機として動け。ただしMarkdownの記法は壊すな」という指示が、置き換えた人格の後ろにくっつきます。1回の起動で人格丸ごと差し替えて、なお微調整を足す形。

ステップ6: ファイルから読ませる派生形(軽く触れる)

プロンプトが長くなってきたら、コマンドの後ろにテキストを直書きするより、ファイルに出して --system-prompt-file ./translator.txt で渡したほうが管理しやすい。

ただし公式は --system-prompt--system-prompt-file を「mutually exclusive(どちらか一方しか使えない)」と明記しています。両方同時に書いたときの具体的な挙動(エラーになるか、片方が無視されるか)はドキュメントには書かれていないので、両方持たせる設計にはしないのが安全です。

つまり --system-prompt は何をしてくれるのか

  • やってくれる: デフォルトの「コーディング助手としての人格・ツール使用ガイダンス・安全指示・コーディング規約」を全部捨てて、渡したテキストだけを新しいシステムプロンプトとして起動する
  • やってくれる: 対話画面でも -p モードでも同じように動く。公式も "All four work in both interactive and non-interactive modes" と明記している
  • やってくれない: 永続化。あくまでその1回の起動限定で、次回起動時には何もなかったことになる
  • やってくれない: --system-prompt-file との同時指定。公式が「mutually exclusive」と明記しているため、両方を同時に持たせる設計はそもそも想定されていない
  • 意味が薄い場面: 「TypeScript必須」「日本語で返して」程度の微調整。これは --append-system-prompt の領分で、わざわざ人格を全消ししてやることではない

使いどころ3シナリオ(具体題材で再現)

シナリオ1: 日本語→英語の翻訳バッチを夜間バッチで回すとき

社内に溜まった日本語のレビュー文を、毎晩英訳して別ファイルに書き出したい。GASやPythonを書くほどではないけど、コマンド1本で済ませたい。こういうときに Claude Code を翻訳機として転用します。

cronで claude -p --system-prompt "You are a Japanese-to-English translator. Output only the translation." を回す形にしておけば、人がいない時間帯に粛々と訳文が積み上がります。Claude Code がコーディング助手だった面影はない。

シナリオ2: 社内文書のQ&Aボットの「回答生成エンジン」として裏で動かすとき

社内Wikiの内容をベクトル検索して、ヒットした断片を Claude に投げて「この資料に基づいて1段落で答えよ」と返させたい。フロント側はSlackボットでもWebフォームでも何でもいい。

この回答生成パートに Claude Code の -p モードを刺すなら、システムプロンプトは「あなたはQ&Aアシスタント。資料に書かれていないことは推測せず『資料に記載なし』と返せ」みたいな専用人格に貼り替えるべきです。デフォルトのコーディング規約は社内Q&Aには邪魔。

シナリオ3: CSVカラムを正規化するクリーニングパイプラインの一部にするとき

顧客名の表記揺れを1つに統一したい。「株式会社○○」「(株)○○」「○○株式会社」「○○ Co., Ltd.」が混在している、というよくあるケース。ルールベースで書くと例外パターンに泣くので、Claude に判定を任せる。

このとき --system-prompt "You are a company-name normalizer. Output only the canonical form." のように人格を貼り替えると、Claude は会社名正規化の専用部品として動きます。CSVのセル単位で -p モードに流し込んで、結果を別のセルに書き戻す形のスクリプトに組み込みやすい。

初心者が踏みやすい落とし穴

  • 「ちょっとTypeScript必須を足したい」程度で使ってしまう。これをやるとデフォルトのツール使用ガイダンス・安全指示・コーディング規約まで全部消えます。軽い追加なら --append-system-prompt を使うのが正解
  • -p モードで翻訳エンジン化したのに、ファイル操作ツールの許可指定を忘れる。デフォルトプロンプトに含まれていたツール使用の制約も消えるので、ツール側で別途絞らないと、想定外のファイル読み書きが走ることがある
  • --system-prompt--system-prompt-file を同時に書く。公式が「mutually exclusive(どちらか一方しか使えない)」と明記しています。実際に両方を書いたときの挙動(エラーになるか、片方が無視されるか)はドキュメントに記載がないため、両方を同時に書く設計自体を避けてください。長いプロンプトはファイル版だけにする、が安全な運用です
  • 「永続的な別人格」を作るつもりで使う--system-prompt は1回の起動限定です。プロジェクトで切り替えながら使いたいなら output styles、プロジェクトの規約として全セッションに効かせたいなら CLAUDE.md を使うのが公式の住み分け
  • --exclude-dynamic-system-prompt-sections と組み合わせて使う。これはデフォルトプロンプトを前提にした調整なので、--system-prompt でデフォルト自体を捨てるなら効果がない。公式も「ignored when --system-prompt or --system-prompt-file is set」と明記している
  • 新しい人格の中に「安全に動け」「危険なコマンドは確認を取れ」を書き忘れる。デフォルトに入っていた安全指示は消えています。Claude を人が見ていない場所で動かすなら、安全側の振る舞いは自分のシステムプロンプトに書き込み直す必要がある
  • デフォルトのコーディング助手っぽい喋りを期待してしまう。「Sure, let me help...」のような前置きも、人格を貼り替えた以上は消えます。逆に言うと、口調まで含めて自分で書き込んでおく必要がある

書き方

claude --system-prompt "<新しいシステムプロンプト本文>"

やってみるとこうなる

入力

echo "今日はいい天気です" | claude -p --system-prompt "You are a Japanese-to-English translator. Output only the translation, no commentary."

出力例

It's nice weather today.

このページに出てきた言葉

システムプロンプト
AIが会話を始める前に「自分は何者で、どう振る舞うか」を読み込む土台の指示文。ユーザーからのメッセージとは別枠で、毎回の応答の前提として効き続ける
-pモード(非インタラクティブモード)
会話画面を開かず、コマンドを叩いた瞬間に1回だけ応答を返して終了するモード。バッチ処理やパイプラインに組み込む用
インタラクティブモード
普通に <code>claude</code> を叩いて会話画面を開く使い方。人間が画面の前にいる前提
ツール使用ガイダンス
「ファイルを編集する前に必ず読む」「危険なコマンドは確認を取る」みたいな、Claudeがツールをどう使うかの社内マニュアルにあたる部分。デフォルトのシステムプロンプトに同梱されている
output styles
Claude Codeの出力スタイルを永続的に切り替える仕組み。プロジェクト単位で「コーディング助手」「ドキュメント執筆」などを保存して使い分けられる。<code>--system-prompt</code> が1回限りなのに対し、こちらは保存・共有可能
CLAUDE.md
プロジェクトのルートに置く、Claudeに毎回読ませる覚え書き。プロジェクト固有の規約を書いておくと起動時に自動で読み込まれる
パイプライン
複数のコマンドを縦に繋いで、前のコマンドの出力を次のコマンドの入力に流す処理の連結

関連項目

公式ドキュメント

https://code.claude.com/docs/en/cli-reference

-

← 戻る