Claudeくん!これ作って!~環境お引越し~
Claude Code の細かい tips 記事です。
今回は、Claude Code で作り込んだ執筆環境を、別の端末へ引っ越す話です。
この環境には、文体のルール(スキル)、Claude が覚えたフィードバック(メモリ)、ステータスラインなど、数か月かけて足してきたものがあります。
単純にワークスペースのフォルダをコピーするだけでは移らないものがあるので、Claude Code の挙動再現に必要なものをまとめてお引越しさせました。
記事3行概要
- Claude Code の挙動は、システムプロンプト、CLAUDE.md、スキル、メモリ、設定ファイルなどで決まっていて、置き場所がばらばらだよ!
- ワークスペースと一緒に移るのは CLAUDE.md だけで、スキル、メモリ、設定はホームディレクトリの
~/.claude/にあるので、別に移す必要があるよ! - スキルや設定はそのままだと移らないので、移すものをまとめたキットとインストール用のスクリプトを作ってもらったよ!
Claude Code の挙動は何で決まっているのか
ドキュメントによると、Claude Code は会話と一緒に、システムプロンプト、ツールの定義、リクエストのパラメータ、読み込んだ指示ファイル(CLAUDE.md など)をモデルに送っています。
このうち引っ越しで気にするのは、利用者が変えられるもの、つまり指示ファイル、スキル、メモリ、設定です。(システムプロンプトはどうにもならないので無視します)
読み込むファイル(CLAUDE.md)
CLAUDE.md は、セッションの開始時に毎回読み込まれる指示ファイルです。
ファイル自体の置き場所によって、どの範囲に影響するかが分かれています。
| 種類 | 置き場所 | 効く範囲 | この環境 |
|---|---|---|---|
| ユーザー | ~/.claude/CLAUDE.md |
自分の全プロジェクト | なし |
| プロジェクト |
./CLAUDE.md または ./.claude/CLAUDE.md
|
そのプロジェクト | あり(ワークスペース直下) |
| ローカル | ./CLAUDE.local.md |
そのプロジェクトの自分だけ | なし |
この環境で使っているのは、ワークスペース直下の CLAUDE.md だけでした。ので、これをそのまま引っ越ししました。
中身としては、ディレクトリ構成、シリーズごとの体裁、文章規範のスキルを使うこと、下書きの進め方です。 (例えば、文章としてくどくしないとか、japanese-tech writing skillで校正するなど)
スキル
スキルは、SKILL.md に書いた手順や規範を、必要なときに Claude が読み込む仕組みです。
置き場所には次の3種類があります。
| 種類 | 置き場所 | この環境 |
|---|---|---|
| ユーザー | ~/.claude/skills/<名前>/SKILL.md |
japanese-tech-writing(日本語の技術文章の規範) |
| プロジェクト | ./.claude/skills/<名前>/SKILL.md |
なし |
| claude.ai から同期 | ~/.claude/skills/synced/ |
docx、pdf、pptx、xlsx など |
今回の環境では、japanese-tech-writing というskillのみ、先述のCLAUDE.md から名前で参照していたので、これを引っ越ししました。ほかは公式経由での配布なので、特に引っ越し範囲には含めてません。
メモリ
メモリ(auto memory)は、Claude が会話の中で受けた指摘や好みを、自分でファイルに書き残す仕組みです。
この環境では、「もったいぶった前置きを書かない」「案件由来の記事は実データを入れずダミーにする」といったフィードバックが入っています。
メモリは ~/.claude/projects/<プロジェクト>/memory/ に保存され、MEMORY.md の先頭 200 行(または 25KB)が毎回のセッションで読み込まれます。
ドキュメントには、メモリはその端末だけのもので、端末をまたいで共有されないと書かれています。
引っ越しで問題になるのは、<プロジェクト> の部分がワークスペースのパスで決まることです。
git リポジトリならリポジトリのパス、そうでなければ作業ディレクトリのパスが使われ、英数字以外の文字をすべて - に置き換えた名前になります。
このワークスペースは git リポジトリではないので、作業ディレクトリのパスから次のような名前になります(パスはダミーです)。
/Users/hotate/Desktop/ブログ執筆/Qiita
→ ~/.claude/projects/-Users-hotate-Desktop-------Qiita/memory/
新しい端末でワークスペースを別の場所に置くと、パスが変わるので、メモリのディレクトリ名も変わります。
古いディレクトリ名のままコピーしても、Claude Code はそのメモリを読みません。
実際、このワークスペースは以前 ~/Downloads の下にあり、~/.claude/projects/ には当時のパスから作られた -Users-<ユーザー名>-Downloads-…-Qiita/memory/ が残ったままになっていました。
なので、Claude君に、過去分含めて全部ぶち抜いてもらいました。
Claude君のメモリは、作業ディレクトリのパスそのものに依存しているため、逆に言えば作業ディレクトリを変更する場合は注意が必要です。
そのほかの設定とファイル
残りは、設定ファイルと、Claude Code が自分で書くファイルです。
| 対象 | 置き場所 | この環境での中身 |
|---|---|---|
| ユーザー設定 | ~/.claude/settings.json |
モデル(Opus)、effort(xhigh)、language、advisor のモデル、通知音のフック、許可するコマンド、ステータスラインの指定 |
| ステータスライン | ~/.claude/statusline.sh |
コンテキストの使用率、トークン数、今日の利用料 |
| コスト集計 | ~/.claude/cost-dashboard/ |
セッションログから利用料を集計するスクリプト |
| アプリの状態 | ~/.claude.json |
アカウント情報、MCP サーバーの設定、プロジェクトごとの信頼設定など。Claude Code が自分で書く |
| 会話の履歴 |
~/.claude/projects/<プロジェクト>/*.jsonl、~/.claude/history.jsonl
|
過去のセッションと、入力したプロンプト |
この環境では、MCP サーバー、サブエージェントの定義、キーバインドは使っていなかったため、引継ぎ対象外としています。
お引越しするもの一覧
対象ごとの移し方は次のとおりです。
| 対象 | 移し方 |
|---|---|
CLAUDE.md |
ワークスペースのフォルダごとコピーすれば移る |
| スキル(自作) |
~/.claude/skills/ へコピーする |
| メモリ | 新しいパスから計算したディレクトリ名でコピーする |
| ユーザー設定 | 必要な項目だけを抜き出したテンプレートを、新しい端末の ~/.claude/settings.json に手で統合する |
| ステータスライン、コスト集計 |
~/.claude/ へコピーする |
| コスト集計の定期実行(launchd) | 新しい端末で手で登録する |
引っ越しキット
移すものを、ワークスペースの中の 環境再現/ にまとめてもらいました。ありがとうClaude君!
ワークスペースごとコピーすれば、キットも一緒に新しい端末へ移ります。
環境再現/
├── README.md # 手順、移らないもの、注意
├── install.sh # スキル、メモリ、statusline、コスト集計を配置する
├── claude-config/
│ ├── CLAUDE.md # プロジェクト指示の原本
│ ├── settings.template.json # ユーザー設定のうち執筆に関係する項目
│ └── statusline.sh
├── cost-dashboard/
│ └── claude_cost.py
├── memory/ # MEMORY.md と各メモリ
└── skills/
└── japanese-tech-writing/
└── SKILL.md
新しい端末での手順は次のとおりです。
- Claude Code をインストールし、個人アカウントでログインする。
- ワークスペースのフォルダを任意の場所にコピーする。
- ワークスペースのルートで
bash 環境再現/install.shを実行する。 -
settings.template.jsonを~/.claude/settings.jsonに統合する。 - ワークスペースで
claudeを起動し、/memoryでメモリが見えること、/statusのSetting sourcesにUser settingsが出ることを確かめる。
install.sh の中心は、メモリのディレクトリ名の計算です。
WS="$(pwd)"
# 置換は 1 文字ごと。LC_ALL=C だと日本語 1 文字が 3 バイト分の - になってずれるので、UTF-8 ロケールで実行する
KEY="$(printf '%s' "$WS" | LC_ALL=en_US.UTF-8 sed 's/[^A-Za-z0-9]/-/g')"
MEM="$HOME/.claude/projects/$KEY/memory"
コピーは、既存のファイルがあれば飛ばすようにして、何度実行しても結果が変わらないようにしました。
settings.json には既存の設定があるはずなので、スクリプトでは触らず、手で統合します。
余談:Claude君的移行時の問題点
若干細かい話があったので、そちらをClaude君にまとめてもらいました。
移行に伴う細かい注意
キットを見直して見つかった問題
このキットは 10 月 11 日に一度作っていました。
今回、引っ越しの前に見直したところ、そのままでは動かない箇所が 3 つと、古くなった設定がありました。
1 つ目は、メモリのディレクトリ名を python3 で計算していたことです。
この端末の python3 は asdf(バージョン管理ツール)経由で、使うバージョンを決めていないディレクトリから呼ぶと No version is set for command python3 で失敗しました。
ワークスペースにはバージョンの指定ファイルがないので、install.sh は最初の計算で止まります。
Python を使わず、sed で計算するように変えました。
2 つ目は、その sed の置換がバイト単位になる問題です。
LC_ALL=C で置換すると、日本語 1 文字(UTF-8 で 3 バイト)が - 3 つになり、Claude Code が使う名前とずれました。
| 計算方法 |
/Users/hotate/Desktop/ブログ執筆/Qiita の結果 |
|---|---|
| 1 文字ずつ置換した名前(Claude Code が使う名前) | -Users-hotate-Desktop-------Qiita |
LC_ALL=C の sed
|
-Users-hotate-Desktop-----------------Qiita |
LC_ALL=en_US.UTF-8 の sed
|
-Users-hotate-Desktop-------Qiita |
表のパスはダミーです。
実際の環境でも、Claude Code が作ったディレクトリ名は 1 文字ずつ置換した名前と一致し、LC_ALL=C の結果だけがずれました。
3 つ目は、set -e と cp -n の組み合わせです。
この Mac の cp -n は、コピー先が既にあってコピーを飛ばしたとき、終了コード 1 を返しました。
set -e のもとでは、2 回目の実行でメモリのコピーを飛ばした時点でスクリプトが止まり、後に続くスキルのコピーが実行されません。
既存のファイルかどうかを自分で確かめてからコピーする形に変えました。
古くなっていたのは、設定のテンプレートです。
モデルが sonnet のまま(今は opus)で、ステータスラインも対象外になっていたので、現在の設定に合わせました。
動作確認
ダミーのホームディレクトリと、日本語を含む別のパスにワークスペースを置いて、install.sh を 2 回実行しました。
| 確認したこと | 結果 |
|---|---|
| 1 回目 | メモリ 5 件(MEMORY.md を含む)、スキル、ステータスライン、コスト集計の 8 ファイルをコピーした |
| 2 回目 | 8 ファイルとも「既存のため省略」で、終了コード 0 |
| メモリのディレクトリ名 |
/執筆環境/ の部分が 1 文字ずつ - に置き換わり、6 個の - になった |
| ステータスライン | 同じダミーのホームディレクトリで、配置したコスト集計を 1 回実行してから statusline.sh を動かし、Today:$0.00 が表示された(ダミー側には会話の履歴がないので 0) |
結論
Claude Code の挙動を決めているものは、ワークスペースの CLAUDE.md、ホームディレクトリの ~/.claude/ にあるスキル、メモリ、設定、そしてアカウントに紐づいて配られるものに分かれていました。
ワークスペースと一緒に移るのは CLAUDE.md だけで、スキル、メモリ、設定は別にコピーする必要があります。
特にメモリは、ワークスペースのパスからディレクトリ名が決まるので、新しいパスに合わせてコピーし直さないと読まれないことに注意しましょう。
記事3行概要
- Claude Code の挙動は、システムプロンプト、CLAUDE.md、スキル、メモリ、設定ファイルなどで決まっていて、置き場所がばらばらだよ!
- ワークスペースと一緒に移るのは CLAUDE.md だけで、スキル、メモリ、設定はホームディレクトリの
~/.claude/にあるので、別に移す必要があるよ! - スキルや設定はそのままだと移らないので、移すものをまとめたキットとインストール用のスクリプトを作ってもらったよ!