コード以外の用途(翻訳・要約・校閲などの自動処理)で Claude Code を使いつつ、長文の人格定義をコマンドの後ろに直書きせずファイルで管理したい人向け
Claude Code を翻訳や校閲などコード以外の自動処理で動かしていて、同じ長文の人格定義を cron スクリプトと Slack 連携スクリプトの両方から参照したい場面で、共通の txt ファイルに人格を書き出してから <code>claude --system-prompt-file ~/prompts/translator.txt</code> の形で起動する。1ファイル直すだけで複数の呼び出し元に同じ人格を反映できる
Claude Code をコード以外の用途で動かしたい時、たとえば「日本語を英語に翻訳するだけの自動処理」「文章を校閲するだけの自動処理」みたいに、毎回同じ長文の人格定義をコマンドの後ろに書きたくなる場面があります。これを txt ファイルに書き出して、起動時にそのファイルを丸ごと読ませる仕組みが --system-prompt-file です。
同じ系統に --system-prompt と --append-system-prompt-file があるので、最初にその4本の関係をざっくり押さえてから使うと迷いません。
噛み砕くと
会議室のホワイトボードに、最初に「今日の議題はこれ」と書いておく感じです。Claude Code は起動するたびに、何も書かれてないホワイトボードに自前の手順書を貼って仕事を始めます。コーディング規約・ツールの使い方・安全ルール、全部それ。--system-prompt-file は「うちで用意したホワイトボードを使え。Claude Code の手順書は今日は外しておく」という指定です。
外したぶん、ツールの使い方も安全ルールも自前で書き直す必要があります。だからコード補助の延長で使うと痛い目を見ます。
そもそも「システムプロンプト」って何のこと?
Claude Code を起動すると、私たちが画面で打つ前に、裏で「君はこういう仕事をするアシスタントだ。こういうツールが使える。安全のためにこれだけは守れ」みたいな指示文があらかじめ Claude に渡されています。これがシステムプロンプト。
システムプロンプトは1セッションの間ずっと有効で、私たちが入れる質問の上位に立つ「人格定義」「役割定義」として働きます。--system-prompt-file は、この人格定義部分を丸ごと自分のファイルで差し替える指定です。
「翻訳パイプライン用の人格ファイル」を例に、実際の手順を見る
長文の日本語を英語に翻訳するだけの Claude Code を、cron で夜中に回したい、Slack 連携の別スクリプトからも同じ品質で呼びたい、というケースを題材にします。プロンプトの内容を毎回両方のスクリプトに書くと、片方を直し忘れて品質がズレるので、1ファイルにまとめて両方から参照する設計に倒します。
ステップ1: 人格定義ファイルを作る
ホームフォルダに prompts というフォルダを作って、その中に translator.txt を置きます。場所はどこでもいいですが、後でスクリプトから絶対の場所指定で指せる位置が安全です。
$ mkdir -p ~/prompts
$ vim ~/prompts/translator.txt
中身はこんな具合に書きます。300字くらい、実運用ではもっと細かく書きます。
あなたは日本語→英語の翻訳に特化したアシスタントです。
- 入力された日本語を、ビジネス向け英語に翻訳して出力します。
- 翻訳結果以外の前置き・後書き・自己紹介は出しません。
- 固有名詞はそのまま残します。
- 文の調子は丁寧だが堅すぎないトーン。
- 出力フォーマットは英語の本文のみ。Markdownや装飾は付けません。
ステップ2: ファイルを指定して起動する
対話して動作確認したい時は、こう叩きます。
$ claude --system-prompt-file ~/prompts/translator.txt
起動すると、いつもの Claude Code のような「コーディングアシスタント」感は消えて、こちらが書いた人格定義どおりの翻訳マシンとして立ち上がります。試しに「今日はいい天気です」と入れると、英訳だけが返ってきます。
ステップ3: パイプラインから非対話で叩く
cron や Slack 連携みたいな自動処理では、対話画面を開かずに、入力→出力を一発で済ませたいです。Claude Code の -p モード(プリントモード)と組み合わせます。
$ echo "今日はいい天気です" | claude -p --system-prompt-file ~/prompts/translator.txt
これで読み込み口に流した日本語が翻訳されて、出力口に英文だけが返ります。あとはこれを自動実行スクリプトに包んで、cron に登録するだけ。
ステップ4: 別のスクリプトからも同じファイルを参照する
Slack 連携の別スクリプトでも、同じ ~/prompts/translator.txt を指定します。プロンプトの調整は1ファイルだけ書き換えれば、cron 側にも Slack 側にも自動で反映されます。これが文字列直書きの --system-prompt ではなく、ファイル版を選ぶ最大の理由です。
ステップ5: ここで初心者がやりがちな勘違い
「ファイルを書き換えれば、今走ってる Claude Code にもすぐ反映される」と思いがちですが、これは違います。--system-prompt-file は起動した瞬間にファイルを1回読むだけ。同じセッションを続けたままファイルを書き換えても、その変更は反映されません。新しい指示で動かしたければ、Claude Code を一度終了して、起動し直す必要があります。
ステップ6: デフォルトのコーディング規約を残したい場合
「翻訳もしたいけど、Claude Code が普段使っている安全ルールとツール案内は残したい」という場合は、置き換え版ではなく追加版を選びます。
$ claude --append-system-prompt-file ~/prompts/translator.txt
--append-system-prompt-file はデフォルト人格の後ろにファイル内容を足す挙動。デフォルトの手順書を活かしたまま、追加ルールだけ載せたい時はこちらが安全です。
つまり --system-prompt-file は何をしてくれるのか
- やってくれる: 起動時に指定ファイルの中身を読み込んで、Claude Code 標準の人格定義を丸ごと差し替える。コード以外の用途、たとえば翻訳・要約・校閲などに振り切れる
- やってくれない: セッション中のファイル更新の自動反映、デフォルトの安全ルール・ツール使用ガイダンスの維持、複数の人格ファイルの同時読み込み
- 意味が薄い場面: コード補助に少しルールを足したいだけのケース。デフォルトが丸ごと消えるので、得るものより失うものが大きい
使いどころ3シナリオ(具体題材で再現)
シナリオ1: 翻訳パイプラインを cron で回す
日本語の社内メモを毎晩 50 本まとめて英語に翻訳して、共有フォルダに置きたい、というケース。プロンプトは ~/prompts/translator.txt に書いておいて、cron スクリプトから echo "$TEXT" | claude -p --system-prompt-file ~/prompts/translator.txt で叩く形にします。プロンプト調整は1ファイルだけ書き換えれば、明日からの実行に反映されます。
シナリオ2: 校閲ボットを Slack に常駐させる
Slack で投稿された文章をチェックして、誤字・敬語の崩れ・冗長な表現を指摘する人格を ~/prompts/proofreader.txt に書きます。Slack イベントを受けるサーバ側スクリプトから、--system-prompt-file ~/prompts/proofreader.txt を付けて Claude Code を呼ぶだけ。指摘ルールを変えたい時は、ファイルを編集してサーバを再起動すれば終わりです。
シナリオ3: 複数のチームメイトと同じ人格を共有する
翻訳ペルソナを GitHub のプロジェクト保管庫にチェックインして、メンバー全員が同じ translator.txt を --system-prompt-file で読む形にします。プロンプトのバージョン管理ができるので、「先週の翻訳と品質が変わった」みたいな時に過去の変更履歴を遡って原因を追えます。output styles や CLAUDE.md でも似たことはできますが、起動時に外部ファイルとして読ませる柔軟さは --system-prompt-file ならではです。
初心者が踏みやすい落とし穴
- セッション中にファイルを書き換えても反映されない。起動時点のスナップショットしか読みません。新しいルールで動かしたければ、一度終了して起動し直す
- 今いる場所からの場所指定で書いて、別フォルダから叩くと「ファイルが見つからない」エラーになる。cron や別スクリプトから呼ぶときは
~/prompts/translator.txtや/Users/yourname/prompts/translator.txtのように絶対の場所指定で書くのが安全 - コード補助に少しルールを足したい用途で
--system-prompt-fileを選ぶと痛い目を見る。Claude Code のデフォルト人格にはツールの使い方・安全指示・コーディング規約が全部入っていて、それが丸ごと消える。軽い追加なら--append-system-prompt-fileかCLAUDE.mdを選ぶ --system-promptと同時に指定はできない。公式ドキュメントが「mutually exclusive(相互排他)」と明記している。両方を同時に渡す設計は最初から避けて、ファイル版か文字列版のどちらかに統一する- 動的に差し込まれる情報を制御する
--exclude-dynamic-system-prompt-sectionsが効かなくなる。デフォルト人格を丸ごと外すので、そもそも動的セクションを含む条件が成立しなくなる - プロンプトファイルに機密情報を書きっぱなしにしない。チームの保管庫にチェックインする運用なら、API キーや個人名はファイル外に出して、起動時の入力か別の仕組みで渡す
- 起動時の指定だけで永続化したつもりになる。
--system-prompt-fileはその起動1回限りの設定で、次にclaudeとだけ叩けばデフォルト人格に戻る。チーム全員でずっと同じ人格を使いたいなら、output styles か CLAUDE.md に寄せる
書き方
claude --system-prompt-file ファイルの場所
# 例: claude --system-prompt-file ~/prompts/translator.txt
# 非対話モード(-p)と組み合わせる場合:
# echo "今日はいい天気です" | claude -p --system-prompt-file ~/prompts/translator.txt
やってみるとこうなる
入力
$ cat ~/prompts/translator.txt
あなたは日本語→英語の翻訳に特化したアシスタントです。
- 入力された日本語をビジネス向け英語に翻訳して出力します。
- 翻訳結果以外の前置き・後書きは出しません。
$ echo "今日はいい天気です" | claude -p --system-prompt-file ~/prompts/translator.txt
出力例
It's a beautiful day today.
このページに出てきた言葉
- システムプロンプト
- 私たちが質問を打つ前に裏で AI に渡されている「君はこういう役割だ」という指示文。1セッションの間ずっと効き続ける上位の人格定義
- セッション
- Claude Code を起動してから終了するまでの1回の対話のかたまり。終了すると会話の記憶は基本的にリセットされる
- 対話モード
- <code>claude</code> とだけ叩いて起動した時の状態。画面が開いて人間とチャットでやり取りできる
- 非対話モード
- <code>-p</code> を付けて起動した時の状態。入力を1回流して1回返事を出したら終了する。自動処理向き
- 絶対の場所指定
- ファイルの場所をいちばん上から全部書いた表記。例: <code>/Users/yourname/prompts/translator.txt</code>。どこから叩いても同じファイルを指す
- 今いる場所からの場所指定
- 今いるフォルダを起点に書いた表記。例: <code>./translator.txt</code>。今いる場所が変わると指すファイルも変わる
- cron
- 「毎日深夜2時にこのスクリプトを動かして」みたいな定期実行をパソコンに仕込む仕組み
- output styles
- Claude Code に複数の人格を登録して起動時に切り替える仕組み。<code>--system-prompt-file</code> が起動1回だけの差し替えなのに対し、こちらは保存・共有前提
- CLAUDE.md
- プロジェクトのフォルダに置いておくと、Claude Code が起動時に必ず読みに行く覚え書きファイル。恒久ルールを書く場所
- mutually exclusive(相互排他)
- 2つの指定を同時に渡せない関係。<code>--system-prompt</code> と <code>--system-prompt-file</code> は公式が「両方を一度に指定できない」と明記している