<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>AI on ポンコツ地方エンジニアの技術ブログ</title><link>https://blog-0847c6.gitlab.io/tags/ai/</link><description>Recent content in AI on ポンコツ地方エンジニアの技術ブログ</description><generator>Hugo -- gohugo.io</generator><language>ja-jp</language><lastBuildDate>Wed, 13 May 2026 00:00:00 +0900</lastBuildDate><atom:link href="https://blog-0847c6.gitlab.io/tags/ai/index.xml" rel="self" type="application/rss+xml"/><item><title>Claude Code の認証情報とチャット履歴を devcontainer とホストで共有する</title><link>https://blog-0847c6.gitlab.io/posts/2026/05/13/claude-devcontainer-share/</link><pubDate>Wed, 13 May 2026 00:00:00 +0900</pubDate><guid>https://blog-0847c6.gitlab.io/posts/2026/05/13/claude-devcontainer-share/</guid><description>&lt;p&gt;本記事は Ubuntu 24.04 + VSCode Dev Containers を前提としています。&lt;/p&gt;
&lt;h2 id="きっかけ"&gt;&lt;a href="#%e3%81%8d%e3%81%a3%e3%81%8b%e3%81%91" class="header-anchor"&gt;&lt;/a&gt;きっかけ
&lt;/h2&gt;&lt;p&gt;devcontainer をリビルドするたびに Claude Code に再ログインするのが地味にストレスでした。さらに、ホスト側で進めていた会話の続きが devcontainer 側からは見えず、「あの修正の文脈どこに残してたっけ」となりがちでした。&lt;/p&gt;
&lt;h2 id="ゴール構成"&gt;&lt;a href="#%e3%82%b4%e3%83%bc%e3%83%ab%e6%a7%8b%e6%88%90" class="header-anchor"&gt;&lt;/a&gt;ゴール構成
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;ホスト・devcontainer のどちらで起動しても &lt;strong&gt;同じ認証情報&lt;/strong&gt; を使える&lt;/li&gt;
&lt;li&gt;ホストで途中まで進めた会話を devcontainer 側でも &lt;strong&gt;そのまま継続&lt;/strong&gt; できる&lt;/li&gt;
&lt;li&gt;リビルドしても再ログイン不要&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="claude-code-が何を見ているかを把握する"&gt;&lt;a href="#claude-code-%e3%81%8c%e4%bd%95%e3%82%92%e8%a6%8b%e3%81%a6%e3%81%84%e3%82%8b%e3%81%8b%e3%82%92%e6%8a%8a%e6%8f%a1%e3%81%99%e3%82%8b" class="header-anchor"&gt;&lt;/a&gt;Claude Code が何を見ているかを把握する
&lt;/h2&gt;&lt;p&gt;設定の前に、Claude Code が以下の 2 つを参照していることを押さえておきます。&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;種類&lt;/th&gt;
 &lt;th&gt;場所&lt;/th&gt;
 &lt;th&gt;役割&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;認証情報・設定&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;~/.claude.json&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;API キーなど&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;セッション履歴&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;~/.claude/projects/&amp;lt;エンコードしたパス&amp;gt;/&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;プロジェクトごとの会話履歴&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;ポイントは、セッション履歴の格納先が &lt;strong&gt;プロジェクトの絶対パスをスラッシュ → ハイフンに変換した名前&lt;/strong&gt; になっていることです。&lt;/p&gt;
&lt;p&gt;例えばホスト側で &lt;code&gt;/home/&amp;lt;username&amp;gt;/&amp;lt;project_name&amp;gt;&lt;/code&gt; を開いていた場合は、&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;~/.claude/projects/-home-&amp;lt;username&amp;gt;-&amp;lt;project_name&amp;gt;/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;の下に履歴が溜まります。&lt;/p&gt;
&lt;p&gt;つまり、履歴を共有したいなら &lt;strong&gt;ホストとコンテナで「ワークスペースの絶対パス」を一致させる必要がある&lt;/strong&gt; ということです。&lt;code&gt;~/.claude&lt;/code&gt; だけ bind mount しても、コンテナ側のワークスペースパスがホストと違えば別フォルダ扱いになり、履歴は共有されません。&lt;/p&gt;
&lt;h2 id="設定する-2-つのマウント"&gt;&lt;a href="#%e8%a8%ad%e5%ae%9a%e3%81%99%e3%82%8b-2-%e3%81%a4%e3%81%ae%e3%83%9e%e3%82%a6%e3%83%b3%e3%83%88" class="header-anchor"&gt;&lt;/a&gt;設定する 2 つのマウント
&lt;/h2&gt;&lt;p&gt;必要なマウントは性質の違う 2 種類になります。&lt;/p&gt;
&lt;h3 id="1-claude--claudejson-のマウント--コンテナ側ユーザーの-home-に合わせる"&gt;&lt;a href="#1-claude--claudejson-%e3%81%ae%e3%83%9e%e3%82%a6%e3%83%b3%e3%83%88--%e3%82%b3%e3%83%b3%e3%83%86%e3%83%8a%e5%81%b4%e3%83%a6%e3%83%bc%e3%82%b6%e3%83%bc%e3%81%ae-home-%e3%81%ab%e5%90%88%e3%82%8f%e3%81%9b%e3%82%8b" class="header-anchor"&gt;&lt;/a&gt;1. &lt;code&gt;.claude&lt;/code&gt; / &lt;code&gt;.claude.json&lt;/code&gt; のマウント (= コンテナ側ユーザーの home に合わせる)
&lt;/h3&gt;&lt;p&gt;Claude Code は &lt;strong&gt;そのプロセスの &lt;code&gt;$HOME/.claude&lt;/code&gt;&lt;/strong&gt; を読みに行きます。devcontainer のデフォルトユーザーは &lt;code&gt;vscode&lt;/code&gt; なので、&lt;code&gt;~&lt;/code&gt; は &lt;code&gt;/home/vscode&lt;/code&gt; です。したがってターゲットも &lt;code&gt;/home/vscode/.claude&lt;/code&gt; にします。&lt;/p&gt;
&lt;h3 id="2-ワークスペースのマウント--ホスト側の絶対パスに合わせる"&gt;&lt;a href="#2-%e3%83%af%e3%83%bc%e3%82%af%e3%82%b9%e3%83%9a%e3%83%bc%e3%82%b9%e3%81%ae%e3%83%9e%e3%82%a6%e3%83%b3%e3%83%88--%e3%83%9b%e3%82%b9%e3%83%88%e5%81%b4%e3%81%ae%e7%b5%b6%e5%af%be%e3%83%91%e3%82%b9%e3%81%ab%e5%90%88%e3%82%8f%e3%81%9b%e3%82%8b" class="header-anchor"&gt;&lt;/a&gt;2. ワークスペースのマウント (= ホスト側の絶対パスに合わせる)
&lt;/h3&gt;&lt;p&gt;こちらはセッション履歴のキーになる「プロジェクトの絶対パス」を一致させるのが目的なので、ターゲットを &lt;strong&gt;ホスト側と同じパス&lt;/strong&gt; にします。ホストの &lt;code&gt;~/&amp;lt;project_name&amp;gt;&lt;/code&gt; を開いているなら、コンテナ内でも &lt;code&gt;/home/&amp;lt;username&amp;gt;/&amp;lt;project_name&amp;gt;&lt;/code&gt; にマウントするということです。&lt;/p&gt;
&lt;p&gt;ターゲットの基準が違う (ユーザー基準 vs ホスト基準) のがややこしい部分なので、表にしておきます。&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;マウント&lt;/th&gt;
 &lt;th&gt;ターゲット&lt;/th&gt;
 &lt;th&gt;基準&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;~/.claude&lt;/code&gt; &lt;code&gt;~/.claude.json&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;/home/vscode/.claude&lt;/code&gt; &lt;code&gt;/home/vscode/.claude.json&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;コンテナ内ユーザー&lt;/strong&gt; の home&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;ワークスペース&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;/home/&amp;lt;username&amp;gt;/&amp;lt;project_name&amp;gt;&lt;/code&gt; 等&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;ホスト側&lt;/strong&gt; の絶対パス&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="devcontainerjson-の例"&gt;&lt;a href="#devcontainerjson-%e3%81%ae%e4%be%8b" class="header-anchor"&gt;&lt;/a&gt;devcontainer.json の例
&lt;/h2&gt;&lt;p&gt;上記を踏まえた &lt;code&gt;.devcontainer/devcontainer.json&lt;/code&gt; の抜粋です。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-jsonc" data-lang="jsonc"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;my-devcontainer&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;build&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;dockerfile&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Dockerfile&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;args&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// ホストの $HOME を build arg として Dockerfile に渡す
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// (workspace の親ディレクトリを事前に作るために使う。後述)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;WORKSPACE_PARENT&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;${localEnv:HOME}&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// ワークスペースのマウント先をホスト側の絶対パスと一致させる。
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// フォルダ名は localWorkspaceFolderBasename で動的解決するので、
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// ホスト側を rename しても devcontainer.json の編集は不要。
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;workspaceMount&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;source=${localWorkspaceFolder},target=${localEnv:HOME}/${localWorkspaceFolderBasename},type=bind,consistency=cached&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;workspaceFolder&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;${localEnv:HOME}/${localWorkspaceFolderBasename}&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;mounts&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// .claude / .claude.json はコンテナ内ユーザー (vscode) の home にマウント
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;source=${localEnv:HOME}/.claude,target=/home/vscode/.claude,type=bind,consistency=cached&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;source=${localEnv:HOME}/.claude.json,target=/home/vscode/.claude.json,type=bind,consistency=cached&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;remoteUser&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;vscode&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;${localEnv:HOME}&lt;/code&gt; は &lt;strong&gt;ホスト側&lt;/strong&gt; の &lt;code&gt;$HOME&lt;/code&gt; (例: &lt;code&gt;/home/&amp;lt;username&amp;gt;&lt;/code&gt;)、&lt;code&gt;${localWorkspaceFolderBasename}&lt;/code&gt; は VSCode が開いているフォルダ名 (例: &lt;code&gt;&amp;lt;project_name&amp;gt;&lt;/code&gt;) に展開されます。両者を組み合わせることで、ホストで開いているパスと完全に同じ絶対パスをコンテナ内に作れます。&lt;/p&gt;
&lt;h2 id="dockerfile-側で親ディレクトリを用意しておく"&gt;&lt;a href="#dockerfile-%e5%81%b4%e3%81%a7%e8%a6%aa%e3%83%87%e3%82%a3%e3%83%ac%e3%82%af%e3%83%88%e3%83%aa%e3%82%92%e7%94%a8%e6%84%8f%e3%81%97%e3%81%a6%e3%81%8a%e3%81%8f" class="header-anchor"&gt;&lt;/a&gt;Dockerfile 側で親ディレクトリを用意しておく
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;workspaceFolder&lt;/code&gt; に指定したパスの &lt;strong&gt;親ディレクトリ&lt;/strong&gt; がコンテナ内に存在しないと、Dev Containers の起動チェックで「ワークスペースが存在しません」とエラーになります。bind mount はマウント時にターゲットを作ってくれますが、Dev Containers のチェックがそれより先に走るためです。&lt;/p&gt;
&lt;p&gt;そこで Dockerfile 側で親ディレクトリだけ先に作っておきます。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-dockerfile" data-lang="dockerfile"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;mcr.microsoft.com/devcontainers/base:bookworm&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# devcontainer.json の workspaceFolder (= ホストの $HOME/&amp;lt;フォルダ名&amp;gt;) と&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# 同じ絶対パスをコンテナ内に用意しておく。&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ARG&lt;/span&gt; &lt;span class="nv"&gt;WORKSPACE_PARENT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/home/vscode&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;RUN&lt;/span&gt; mkdir -p &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;WORKSPACE_PARENT&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ARG のデフォルト値を &lt;code&gt;/home/vscode&lt;/code&gt; にしておけば、build arg を渡し忘れても既存ユーザーのホームが使われるだけで build が壊れることはありません。&lt;/p&gt;
&lt;h2 id="ユーザーは-vscode-のままでよい"&gt;&lt;a href="#%e3%83%a6%e3%83%bc%e3%82%b6%e3%83%bc%e3%81%af-vscode-%e3%81%ae%e3%81%be%e3%81%be%e3%81%a7%e3%82%88%e3%81%84" class="header-anchor"&gt;&lt;/a&gt;ユーザーは vscode のままでよい
&lt;/h2&gt;&lt;p&gt;「ワークスペースが &lt;code&gt;/home/&amp;lt;username&amp;gt;/&amp;lt;project_name&amp;gt;&lt;/code&gt; なのに &lt;code&gt;whoami&lt;/code&gt; すると &lt;code&gt;vscode&lt;/code&gt; になっている」というアンバランスさが気になるかもしれませんが、機能上は問題ありません。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;devcontainers/base の &lt;code&gt;vscode&lt;/code&gt; ユーザーは UID 1000&lt;/li&gt;
&lt;li&gt;ホスト側の Linux ユーザーも通常 UID 1000&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;UID が一致していれば bind mount したファイルにそのまま読み書きできるためです。&lt;code&gt;vscode&lt;/code&gt; ユーザーが自分の home (&lt;code&gt;/home/vscode/&lt;/code&gt;) 以外の場所で作業すること自体は何も問題を起こしません。&lt;/p&gt;
&lt;p&gt;ユーザー名まで揃えようとすると base image の改造が必要になり、devcontainer features が前提にしている &lt;code&gt;vscode&lt;/code&gt; ユーザーが消えて壊れがちです。&lt;strong&gt;ホストと揃えるのは「絶対パス」だけで十分&lt;/strong&gt; と割り切るのが楽です。&lt;/p&gt;
&lt;h2 id="注意点"&gt;&lt;a href="#%e6%b3%a8%e6%84%8f%e7%82%b9" class="header-anchor"&gt;&lt;/a&gt;注意点
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ホスト側に &lt;code&gt;~/.claude&lt;/code&gt; と &lt;code&gt;~/.claude.json&lt;/code&gt; が存在している必要があります&lt;/strong&gt;。なければ bind mount に失敗します。ホスト側でも一度 Claude Code を起動して認証を済ませておくのが手っ取り早いです。&lt;/li&gt;
&lt;li&gt;セッション履歴を &lt;strong&gt;ホストと同時に書き込まない&lt;/strong&gt; よう注意してください。両方から同じプロジェクトを同時に触ると、ファイルロック等の衝突で履歴が壊れることがあります。基本「どちらか一方で作業する」運用が安全です。&lt;/li&gt;
&lt;li&gt;設定変更後は VSCode の &lt;strong&gt;Dev Containers: Rebuild Container&lt;/strong&gt; でリビルドしないと反映されません。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="まとめ"&gt;&lt;a href="#%e3%81%be%e3%81%a8%e3%82%81" class="header-anchor"&gt;&lt;/a&gt;まとめ
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Claude Code のセッション履歴は &lt;strong&gt;プロジェクトの絶対パスをキー&lt;/strong&gt; にして格納される。&lt;/li&gt;
&lt;li&gt;なので「ホストとセッション共有したい」ならコンテナ内のワークスペースパスをホスト側と完全一致させる必要がある。&lt;/li&gt;
&lt;li&gt;マウント先は 2 系統で基準が違う:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;.claude&lt;/code&gt; / &lt;code&gt;.claude.json&lt;/code&gt; は &lt;strong&gt;コンテナ内ユーザーの home&lt;/strong&gt; に合わせる&lt;/li&gt;
&lt;li&gt;ワークスペースは &lt;strong&gt;ホスト側の絶対パス&lt;/strong&gt; に合わせる&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;ワークスペースの親ディレクトリは Dockerfile 側で &lt;code&gt;mkdir -p&lt;/code&gt; しておく必要がある。&lt;/li&gt;
&lt;li&gt;フォルダ名は &lt;code&gt;${localWorkspaceFolderBasename}&lt;/code&gt; で動的解決すれば、rename にも追従する。&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>