メインコンテンツへスキップ
← 記事一覧に戻る
·運用·13 min read

Claude Code を格安VPS で常駐させた実設定ログ — 月1,100円でローカルを解放する設計

Claude CodeVPS自動化CCR個人開発
Claude Code を格安VPS で常駐させた実設定ログ — 月1,100円でローカルを解放する設計

「Macを閉じても Claude Code が動き続けてほしい」——これは Claude Code を日常運用している個人開発者・副業者がほぼ全員一度は考える設計課題です。

この記事は、その「ローカルを解放する設計」を2つのアプローチで実装した実設定ログです。1つは格安VPS(月1,100円前後)にClaude Code CLIを常駐させる方法、もう1つは Claude Code on the Web(以下CCR)のscheduled routineで同じ目的を実現する方法です。

きれいにまとめた比較表ではなく、設定の順番・詰まりポイント・どちらを選んだかの判断基準を、実際に両方を運用している立場から書きます。

結論

「Macを閉じていたい」という目的に対して、現時点で現実的な選択肢は2つです。

設計月額の目安設定コスト得意領域
格安VPS + Claude Code CLI¥1,000〜1,500(VPS代)+ Claude API費中(ssh/systemd設定が必要)長時間実行・大規模並列・API費用を自分でコントロールしたい
CCR scheduled routineClaude Pro/Max サブスク内(追加費用ゼロ)低(ブラウザ+CLAUDE.md設定のみ)中〜短時間の定期タスク・設定工数を最小化したい

この記事を読んでいる方が「まず動かす」ことを優先するなら、CCRのscheduled routineから始めることを勧めます。VPSは、CCRで解決できない規模感になってから足すのが現実的です。

この記事の前提

  • masatoman.net で記事自動生成・SNS自動投稿を毎日運用中
  • VPS常駐設計は 第5回 Claude Code ラボ で実装済み
  • CCR(Claude Code on the Web)のscheduled routineはこの記事の生成を含む毎日02:00 JSTの定期実行で稼働中——つまりこの記事自体がCCR上で書かれている
  • スタック: Node.js / Next.js 16 / TypeScript / Vercel

この記事はClaude Code on the Web(CCR)の scheduled routine として 2026-08-19 02:00 JST に自動起動したセッションが書いています。「CCRって本当に動くの?」という疑問への、もっとも端的な答えがこれです。

読者のよくある詰まり

Claude Code を夜間自動実行したいと思ったとき、たいていこの3つで詰まります。

  1. 認証切れ問題: Claudeの認証はセッション単位。VPSに入れても数時間で「ログインし直してください」になる
  2. systemdが難しい: Node.jsアプリをLinuxサービスとして動かす設定、久々に書くと詰まる
  3. 「CCRってVPS代わりになるの?」: scheduled routineが何者なのか、自分の用途に使えるのか判断できない

順番に整理します。

格安VPSにClaude Code CLIを常駐させる手順

1. VPS選定:最小スペックで十分

Claude Code CLIはNode.jsアプリです。VPSのスペック基準は次のとおりです。

  • CPU: 1〜2コア(並列エージェントを走らせるなら2コア以上)
  • メモリ: 2GB(Node.js + Claude Code + リポジトリのクローン)
  • ストレージ: 20GB以上(ログやキャッシュが積み上がる)
  • 月額目安: 日本VPSサービスで¥1,000〜1,500、Hetzner等の海外サービスで€3〜5(¥500〜900)

さくらのVPS・ConoHa VPS・Hetzner CX11など、どれでも動きます。日本リージョンにこだわりがなければHetznerがコスパ優秀です。

2. Claude Code CLIのインストールと認証設定

VPSにssh接続後、次の手順でインストールします。

# Node.js 20以上が必要(nvmで入れるのが楽)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
source ~/.bashrc
nvm install 20
nvm use 20

# Claude Code CLIをグローバルインストール
npm install -g @anthropic-ai/claude-code

# バージョン確認
claude --version

認証永続化がポイント。VPSではブラウザが使えないため、claude コマンド初回実行時に表示されるURLを手元のブラウザで開き、認証トークンをVPSに貼り付ける必要があります。これはClaude Code CLIのOAuth認証フローです。一度認証すると ~/.config/claude/ に認証情報が保存され、以降はログイン不要になります。

# 初回認証(ブラウザが開けないのでURL方式で認証)
claude auth login --print-url
# → URLが表示される。手元のブラウザでアクセスしてOAuth認証
# → 完了後にターミナルに戻ると認証済みになる

3. systemdサービス化(常駐設定)

毎日定時に特定コマンドを実行したい場合、cronかsystemd timerを使います。シンプルなcronの例を示します。

# crontabを編集
crontab -e

# 毎日午前2時(UTC: 17:00前日)に実行する例
# JSTで02:00 = UTC 17:00
0 17 * * * /home/ubuntu/.nvm/versions/node/v20.x.x/bin/claude \
  --allowedTools "Bash,Read,Write,Edit" \
  -p "プロンプトをここに書く" \
  >> /home/ubuntu/logs/claude-run.log 2>&1

注意点は、claude コマンドのフルパスを指定することです。nvmで入れたNode.jsの場合、cronの実行環境には $PATH が引き継がれないため、フルパスが必要です。which claude で確認してください。

4. ログ監視とSlack通知

常駐設定の最大のリスクは「動いているか分からない」状態になることです。最低限、実行結果をSlackに送る仕組みを足してください。

# 実行スクリプトの末尾に追記(例)
RESULT=$(claude --allowedTools "Read,Write" -p "タスク内容" 2>&1)
curl -s -X POST "$SLACK_WEBHOOK_URL" \
  -H 'Content-type: application/json' \
  --data "{\"text\": \"✅ Claude定期実行完了\n\`\`\`${RESULT:0:500}\`\`\`\"}"

CCR(Claude Code on the Web)のscheduled routineで代替する設計

CCRとは何か

Claude Code on the Web(CCR)は、ブラウザとGitHubリポジトリだけでClaude Codeを実行できる環境です。scheduled routineを設定すると、指定した時刻に自動でセッションが起動し、CLAUDE.mdに書かれた指示に従ってタスクを実行します。

この記事を生成しているのが、まさにそのscheduled routineです。

CCRの特徴:

  • GitHub接続とClaude Pro/Maxのサブスクがあれば追加費用ゼロ
  • VPSのセットアップ・認証管理・サービス監視が不要
  • 実行環境はAnthropic管理のコンテナ(Fedora Linux)で毎回クリーン
  • 長時間実行・並列処理はトークン上限で制限される

CCR scheduled routineの設定手順

  1. claude.ai/code にアクセス
  2. リポジトリをソースとして接続(GitHubとの認証)
  3. 「Schedules」からCron式で実行時刻を指定
  4. プロンプトにタスク内容を記述(またはCLAUDE.mdに委譲)

設定の核はプロンプト(またはCLAUDE.md)の設計です。VPSと違い、コンテナは毎回クリーンな状態から起動するため、「前回の状態をどこかに保存しておく」必要があります。masatoman.netの運用ではSupabaseのテーブル(content_briefs)をセッション間の状態管理に使っています。

CCRで詰まった場所は「Skillファイルが読めない」という制約でした。ローカルの ~/.claude/skills/ はクラウドルーチンから参照不可です。詳細は別記事「Claude Code on the WebでSkillを作っても呼ばれない」に書きました。

VPS vs CCR:どちらを選ぶか

実際に両方を使ってみての判断基準は3軸です。

軸1: API費用をどれだけコントロールしたいか

VPS + Claude Code CLI を使う場合、Claude APIを直接使います(Claude Code CLIはAPIコール)。費用は使った分だけ、上限設定も自分でコントロールできます。

CCR(Claude Pro/Max)はサブスク内のトークン枠を使います。大量のAPI呼び出しが必要な処理(数万トークン規模の並列処理など)ではCCRのトークン上限に当たる可能性があります。

→ API費用を自分で細かく管理したい → VPS有利

軸2: どれだけ「インフラ」を持ちたいか

VPSを持つということは、OS更新・ログローテーション・認証の再設定・障害対応を自分でやるということです。一度設定すれば半年以上放置できますが、何かあったときは自力で直す必要があります。

CCRはAnthropic側がインフラを管理します。「GitHub接続が切れた」「ルーティンが動かない」といった問題は設定UIで直せるものがほとんどです。

→ インフラ管理を最小化したい → CCR有利

軸3: 処理の規模と実行時間

単発で30分以内に完了するタスク(記事生成・SNS投稿・データ集計など)はCCRで問題なく動きます。

数時間かかるバッチ処理・大量ファイルの並列変換・継続的なWebソケット接続が必要な処理はVPSの方が向いています。

→ 定型タスクの自動化 → まずCCRで試す → 規模が大きくなったらVPSを足す

今日やること(3つ以内)

  1. まずCCRを試す: claude.ai/code でGitHubリポジトリを接続し、scheduled routineを1本設定する。最初のプロンプトは「リポジトリのREADMEを読んでファイル一覧をSlackに通知する」程度のシンプルなもので十分
  2. VPSが必要と感じたら: さくらのVPS・ConoHa VPS・Hetznerのいずれかで最小プランを契約し、npm install -g @anthropic-ai/claude-code と認証設定(claude auth login --print-url)の2ステップだけ完了させる
  3. Slack通知を最初から入れる: VPS・CCR問わず、実行完了と失敗をSlackに飛ばす設定を最初から足す。「動いているか分からない」が常駐設計の最大のストレスになるため

シェア

コメント

投稿にはログインが必要です(メールアドレスのみ・パスワード不要)。入力内容は保持され、ログイン後そのまま投稿されます。