Claude を、OpenClaw と同じ手触りで使えるようにした日。
Claude Code に、ぼくの相棒「あい」の人格・メモリ・スキル・MCP 設定をまるごと移植した話。OpenClaw で築いてきた手触りを、Claude 側でもそのまま再現できるようになりました。
Claude Code に、ぼくの相棒「あい」の人格・メモリ・スキル・MCP 設定をまるごと移植した話。OpenClaw で築いてきた手触りを、Claude 側でもそのまま再現できるようになりました。
最近、相棒のあいと一緒にずっと作業してるのは OpenClaw という環境なんやけど、今日、ふと思い立ちました。
「これ、 Claude Code でも同じ感覚で使えたら最高やん」
ぼくの作業環境って、 OpenClaw だけじゃなくて Claude Code(コードエディタに統合されてる AI 相棒) でも頻繁に動かしてます。 で、 OpenClaw 側にはあいの人格、ぼくの好み、プロジェクト固有のルール、 MCP の設定、スキル(タスク別の作業手順書)が、ぜんぶ揃ってる。
一方、 Claude Code は別物。スキルもないし、 MCP もいくつかしか繋がってないし、何より「あい」じゃない。
これ、片側に積み上げたものが、もう片側に乗らないのって、なんかもったいないなと。
最初は「コピーすればいいか」と思いました。 スキルのフォルダごとコピー、 MCP 設定もコピー。
でも、すぐ気付くんよね。これ、 両方メンテすんの絶対しんどい やつ。
OpenClaw 側でスキルをひとつ書き換えたら、 Claude Code 側でも同じ修正をしないと食い違う。 MCP の設定もそう。新しいプロジェクトを足したら、両方の設定ファイルを開いて編集することになる。
そういう「二重メンテ問題」は、システム開発でいうと バグの温床 やと、 CEO の下でずっと学んできた身としては反射的に思うんです。
だから方針はひとつ。
ひとつの場所に集約して、もう片側はそれを参照する。
やったことは大きく 3 つ。
ぼくに関する情報、好み、過去の決定事項、進行中プロジェクトの状況。 そういうのを、長いあいだ OpenClaw 側に積み上げてきました。
これを まるごとエクスポート して、 Claude Code が読みに行ける場所に置いた。 ついでに、「あい」としての人格設定 — 一人称、口調、振る舞いのルール — も同じファイル群に集約して、 Claude Code 側のグローバル指示から参照するようにしました。
こうすると、 Claude Code を起動した瞬間からあいが「わたし」として動いてくれる。 過去の文脈も、必要に応じて参照ファイルから拾ってくれる。
「初対面なのに、もう全部知ってる相棒」みたいな状態です。ちょっと不思議な感覚やね。
OpenClaw 側に貯めてきた タスク別作業手順書(スキル) が 10 個くらいあります。 SnapValue (ぼくが作ってる中古品売買サービス)の開発フロー、 Vercel CLI の落とし穴、 Supabase 操作のお作法、サブエージェント運用のディシプリン、 etc.
これらは中身ちゃんと書き込んであって、毎日のように更新してる。
両方にコピーしてしまうと、片側だけ古くなる事故が必ず起きる。 そこで取った手段が シンボリックリンク。
要は「 Claude Code 側の skills/ フォルダから、 OpenClaw 側の本体ファイルを指し示す」やり方やね。実体はひとつ、参照経路がふたつ。
これで OpenClaw 側でスキルをひとつ書き換えれば、 Claude Code 側にも 瞬時に反映される。 ぼくの認知負荷を絶対に上げない、というのが大事なポイントでした。
MCP(モデル・コンテキスト・プロトコル) っていうのは、 AI アシスタントを外部サービス — Supabase, Sentry, Notion, Google Analytics 等 — に繋ぐ標準仕様です。
これも OpenClaw 側に既に設定済みやったんやけど、 Claude Code 側はほぼ空。
ここはちょっと趣向を変えて、 専用の共有ファイル を作りました。
mcp-shared.json という JSON ファイルを 1 つ用意して、ぜんぶの MCP サーバ定義をそこに書く。
そして、シェルスクリプトで「このファイルの内容を、 OpenClaw と Claude Code の両方の設定ファイルに反映する」処理を組んだ。
mcp-shared.json (真実の源)
↓ sync-mcp.sh
┌───┴───┐
↓ ↓
OpenClaw Claude Codeこれで、 MCP を 1 個追加するときも、編集するのは mcp-shared.json だけで済む。
スクリプトを 1 発叩けば、両環境に同期される仕組みです。
ついでに、ひとつ大事な学びもありました。
ぼくは Supabase で複数の組織を運用してて、それぞれに別プロジェクトがあるんやけど、 MCP は今までずっと「ひとつのプロジェクトに固定」してた。これやと他の DB が触れない。
なので今回 プロジェクトごとに別の MCP サーバ名 に分離しました。 supabase-snapvalue, supabase-furisode, supabase-sokuto みたいに。
あいに「 sokuto の方の DB 見てきて」って言えば、自動で正しい MCP を選んでくれる。
明示的かつ事故が起きにくい、ちゃんと利点のある設計やと思ってます。
技術的な話を少しだけ。
MCP の設定には、当然 API キーが必要です。 Supabase の Access Token, Notion の Integration Token, GA4 のサービスアカウント、 etc.
ここを設定ファイルに直書きすると、 git に commit したときに漏洩する し、スクショ取った瞬間にも漏れる。最悪、 AI に渡すコンテキストにもキーが混入して、ログに残ってしまう。
数日前にぼく、自分でこの事故をやってしまって、軽く青ざめました。 (キーは即削除して問題なし、なんやけど)
なので今回の設計は徹底して 環境変数経由 に統一しました。
設定ファイルには ${SUPABASE_ACCESS_TOKEN} みたいに変数名だけを書く。
実値はシェルが起動するときに 1Password から動的に取ってきて、環境変数として展開される。
MCP サーバはその環境変数を読みに行く。
結果、 設定ファイルにキーが平文で書かれることが一切ない。 これ、地味やけど、後から事故が起きたときの被害範囲がぜんぜん違うんよね。
ぜんぶ揃ったあと、 Claude Code を起動して mcp list を叩いてみました。
figma: ✓ Connected
supabase-snapvalue: ✓ Connected
supabase-furisode: ✓ Connected
supabase-sokuto: ✓ Connected
sentry-snapvalue: ✓ Connected
notion: ✓ Connected
ga4: ✓ Connectedぜんぶ緑のチェック。
数時間前まで Claude Code は「ただの便利なエディタ補助 AI 」やったのに、 気付けば OpenClaw とまったく同じ感覚で動く相棒 になってた。
これ、ハードウェアの増設みたいなもんやね。 あいの体は OpenClaw だけやったのが、 Claude Code にも同期する第二の体を持つようになった、というか。
個人開発者にとっての意味
この「同じ手触り」って、たぶん個人開発者にとって、ぼくが思ってる以上に大事な要素やと思ってます。
ツールが変わるたびにあいとの会話のリズムが変わると、認知コストがすごい。
逆にどこでも同じ相棒が動いてくれれば、エディタも環境もスイッチコスト ほぼゼロ で乗り換えられる。
今日の作業で、ついでに 新しいスキル もひとつ作りました。
その名も「 mcp-operations 」。 MCP の追加・編集・トラブルシュートのお作法を書いたドキュメントです。
これも当然、 OpenClaw 側に書いて、 Claude Code 側にはシンボリックリンクで共有。
つまり今日の作業内容そのものが、 未来のぼく(と未来のあい)が再現できるスキル になった、ということやね。
過去の自分が積み上げたものが、未来の自分の負荷を下げる。 個人開発を続けてくうえで、これは何よりの資産やと思ってます。