普段Claude Codeを使っているのですが、/remote-control(通称/rc)でスマホから操作できるようにしても、そもそも自分のPCの電源が入っていないと使えないことに気づきました。外出先で「あ、あれメモしておきたい」と思っても、PCが眠っていたら何もできません。

YouTubeでもたまに「NASでClaude Codeを動かしてみた」系の動画を見かけていたので、自分も同じことに挑戦してみることにしました。備忘録として残しておきます。

やりたいこと

  • 24時間つけっぱなしのNAS(UGREEN NASync DXP2800GT)の中でClaude Codeを動かす
  • PCの電源に関係なく、スマホからいつでも話しかけられる状態にする
  • ゆくゆくは、外出先で思いついたことをスマホからClaudeに伝えて、Obsidianのセカンドブレイン(自分用のメモ・記録システム)にノートとして残してもらう

というわけで、今回はまず「NAS上でClaude Codeを常時稼働させる」ところまでの記録です。

使ったもの

  • NAS本体: UGREEN NASync DXP2800GT
  • Portainer: Dockerを画面操作で扱えるようにする管理ツール(NASにはもともとDockerが入っていたので、そこに追加)

Step 1: Claude Code専用の保存フォルダを作る

まず、Claude Codeが作業したファイルを置いておく場所を、NASの中に作りました。

  1. NASの「ファイル」アプリを開く
  2. 「共有フォルダ」を右クリック→新規作成
  3. フォルダ名を claude-projects
  4. 保存先ボリュームと、自分のアカウントへの読み書き権限を設定
  5. 作成

これで /volume1/claude-projects という場所ができました。

ちなみに機種によってはパスの付き方が少し違うこともあるらしく、不安な場合はSSHでNASに入って ls -la /volume1/ を叩いて実物を確認するのが確実でした。

Step 2: PortainerでClaude Code用のコンテナを立てる

ここが本番です。PortainerのStack機能を使って、Claude Codeを動かす専用のコンテナ(Dockerの中の独立した1つの箱、というイメージ)を作ります。

  1. Portainerの「Stacks」→「Add stack」
  2. 名前は claude-code
  3. 「Web editor」に以下を貼り付け
services:
  claude-code:
    image: node:22-slim
    container_name: claude-code
    restart: unless-stopped
    stdin_open: true
    tty: true
    working_dir: /workspace
    volumes:
      - /volume1/claude-projects:/workspace
      - claude-config:/root/.claude
    command: >
      bash -c "
      apt-get update &&
      apt-get install -y git curl &&
      npm install -g @anthropic-ai/claude-code &&
      tail -f /dev/null
      "

volumes:
  claude-config:

volumesのところで、NASのclaude-projectsフォルダをコンテナの/workspaceにつないでいるので、コンテナを作り直してもファイルが消えません。ログイン情報も別途永続化しているので、毎回ログインし直す手間もなし。

  1. 「Deploy the stack」を押して数分待つ
  2. 「Containers」で claude-code が「running」になっていればOK

初回はパッケージのインストールが自動で走るので、「Logs」タブでエラーなく進んでいるか確認しました。

Step 3: ログイン

  1. Portainerの「Console」を開く
  2. claude と入力してEnter
  1. 初回の初期設定(色味の選択など)を進める
  2. 「Claude account with subscription」でログイン方法を選択
  1. 表示されたURLをブラウザで開いて認証、出てきたコードをコンソールに貼り付け

「Welcome back」の画面が出たらログイン成功です。

Step 4: /remote-controlでスマホと接続

今回の一番の目的です。ログイン後の画面で、

/remote-control

と打つと、候補が表示されます。

実行すると「Enable Remote Control」の確認が出るのでEnter。「Remote Control is active」と出て、セッションURLが発行されます。

あとは、スマホのClaudeアプリの「Code」タブを開くと、このセッションが一覧に出てきて、タップすれば接続完了。

スマホ側の「コンピューターを接続」画面。ここに表示されているコマンドはすでにNAS側で実行済みなので、画面を閉じてセッション一覧から選べばOKだった。

これで、PCの電源を落としていても、NASさえ動いていればスマホからいつでも話しかけられる状態ができました。最初にやりたかったことが達成できて一安心です。

つまずいたこと: PCのConsoleから会話が見えなくなる

一段落したところで、「あれ、スマホでは会話が続いてるのに、Portainerの”Console”を開き直しても何も見えない」という現象にぶつかりました。

調べてみると、Portainerの「Console」を開くのは、そのたびに新しい接続を作る操作らしく、最初に開いたConsoleを閉じても、裏で動いているClaudeのプロセス自体は生き続けているとのこと。ただ、後から新しく開いたConsoleからは、その”元の接続”を覗き直す手段がない、という仕組みでした。

PC側からも会話を見たいときは、Portainer経由ではなく、ブラウザで直接以下を開けば解決しました。

  • /remote-control実行時に表示されたセッションURL(https://claude.ai/code/session_〇〇〇〇)
  • https://claude.ai/code のセッション一覧(オンラインのものは緑の丸印)

次にやりたいこと

ここまでで「PC電源に縛られないClaude Code環境」はひとまず完成しました。

本来の目的はここから先で、Obsidianと連携させたセカンドブレインを作ることです。外出先でふと思いついたことをスマホからClaudeに話しかけると、それがそのままObsidianのVaultにノートとして残っていく、という状態を目指しています。すでにNAS上にVault用フォルダは用意していて、arscontexta(Claude Code用のプラグイン)でメモのフォルダ構成やテンプレートも組み込み済みなので、次回はその運用まわりを書いてみようと思います。