XServer VPS 無料枠 + Static 無料枠で Claude Code on the Web 相当の「エージェント用ベース環境」を `curl | bash` で再現する
例の如くvibe執筆ですはい。
XServer VPS 無料枠 + Static 無料枠で Claude Code on the Web 相当の「エージェント用ベース環境」を curl | bash で再現する
TL;DR
- 自分用のエージェント踏み台として XServer VPS の 無料枠 を使っているが、立ち上がった Ubuntu Desktop は素の状態で、Claude Code on the Web の VM みたいに「最初から
pytestもcargoもripgrepも入っている」状態ではない - そこで Claude Code on the Web の Installed tools を目標値にした
setup.shを手元のエージェントに書かせて、XServer Static の無料枠 に置いた (バイブコーダーなので手打ちはしない) - VPS 立て直後にリモートデスクトップで入って、端末で
curl -fsSL https://stXXXXXX.static.jp/setup.sh | bash1 行で 5 分くらいで揃う - XServer Static は private repo OK / SSL 自動 / 転送量無制限 で
curl | bashのホストとして手頃 - ハマるのは「反映待ちのデフォルトページ」「ブラウザキャッシュ」の 2 つだけ
目標値: Claude Code on the Web の “セッション VM”
setup.sh の目的を一言で言うと、Claude Code on the Web の “セッションごとに立ち上がる VM の中身” を、自分の VPS の上に再現すること。
Anthropic のドキュメント Use Claude Code on the web — Installed tools によると、Web 版のセッションは Ubuntu 24.04 ベースで、起動直後から以下が入っている:
| カテゴリ | プリインストール |
|---|---|
| Python | Python 3.x + pip, poetry, uv, black, mypy, pytest, ruff |
| Node.js | nvm 経由の 20 / 21 / 22 + npm, yarn, pnpm, bun, eslint, prettier, chromedriver |
| Ruby | 3.1 / 3.2 / 3.3 + gem, bundler, rbenv |
| PHP | 8.4 + Composer |
| Java | OpenJDK 21 + Maven + Gradle |
| Go | 最新安定版 (モジュールサポート) |
| Rust | rustc + cargo |
| C/C++ | GCC, Clang, cmake, ninja, conan |
| Docker | docker, dockerd, docker compose |
| データベース | PostgreSQL 16, Redis 7.0 |
| ユーティリティ | git, jq, yq, ripgrep, tmux, vim, nano |
リソースは 4 vCPU / 16 GB RAM / 30 GB disk。これが Claude Code が走る「初期土俵」で、エージェントが pytest や cargo build や docker compose を探さずに叩ける、という状態が常に成り立つ。エージェント側の負荷とコケるリスクが目に見えて減る。
なんでこの構成になったか (経緯)
Claude Code on the Web を直接使えばいいじゃん、という話なのだが、Web 版は (執筆時点で) Pro / Max / Team の research preview。手元の AI コーディングエージェント (Codex CLI など) を同じ土俵で走らせたいときに、自分のマシンや無料 VPS の上で同等の環境を作りたくなる。
最初から「private repo + 短い HTTPS + 書き換え自由」を求めて XServer Static に行き着いたわけではなく、実際の経緯はもうちょっと泥臭い:
- XServer VPS の 無料枠 で Codex CLI とかを動かしてみた。スペックは 3 vCPU / 4 GB RAM / NVMe 30 GB / Ubuntu Desktop (GNOME)。Claude Code on the Web (4 vCPU / 16 GB / 30 GB) と比べると CPU・ディスクはほぼ同等、メモリだけ 16 → 4 GB に妥協が入る
- 接続は SSH ではなく 公式手順のリモートデスクトップ で入っている。デスクトップから「端末」を開いて作業
- ただし立ち上がった Ubuntu Desktop は本当に何も入っていない (
gitすらない)。自分はバイブコーダーで手打ちはしないので、最初は md のメモに「apt install … / nvm 入れる / rustup … / pipx で poetry mypy …」というコマンド一覧を貼っておいて、端末にコピペしていた。それでも毎回コピペするのは面倒 - 別件で取っていた XServer Static の無料枠 の使い道が決まっていなかった。1 GB / SSL 自動 / 転送量無制限 / GitHub 自動デプロイ付きの無料サブドメインが余っている、という状態
- 「ちょうど setup.sh を 1 行で配れるホストがほしい」と気づいて、md コピペを
curl -fsSL https://stXXXXXX.static.jp/setup.sh | bash1 行に置き換えたら、案外かなり実用的だった ← イマココ
要するに、Static の無料枠の使い道を探した結果として XServer の無料枠を 2 つ重ねる構成になり、結果として Claude Code on the Web の VM を擬似的に手元に持ってくる形にできた、という後付け感のある成立過程。
XServer Static の何が嬉しいか
| 項目 | 仕様 |
|---|---|
| 料金 | 0 円 |
| ディスク | 1.00 GB |
| 転送量 | 無制限 (過大負荷時は制限の注意書きあり) |
| 独自 SSL | 無料 (https://stXXXXXX.static.jp が自動で立つ) |
| Web サーバー | Apache 2.4.x / nginx |
.htaccess / mod_rewrite |
利用可能 |
| アカウント上限 | お一人様 3 個まで |
| GitHub 自動デプロイ | private repo OK |
curl | bash の URL ホストとしてはこの表の右列 (転送量無制限 / HTTPS 自動 / private repo OK) が全部ついてくるのが効く。setup.sh は数 KB なので 1 GB の枠は使い切らない。
手順
前提: 手元のマシンでの作業。git と GitHub アカウントがあれば足りる。
1. XServer Static のアカウントを取る
https://static.xserver.ne.jp/ からお申し込み。コンビニのプリカで貫通する。
セットアップ直後は反映待ちのデフォルトページが返るが、十数分待てば抜ける (後述)。
2. GitHub リポジトリを用意して public/ 等の公開フォルダを作る
リポジトリ自体は private で OK。任意のフォルダだけを公開対象に切り分ける。と良。
my-vps-setup/ ├── README.md # 公開しない ├── notes/ # 公開しない └── public/ # ← stXXXXXX.static.jp/ に展開される ├── index.html └── setup.sh
この場合リポジトリは private のまま、public/ の中身だけがインターネットに出る — これが GitHub Pages との差分。
4. setup.sh をエージェントに書かせる
ここが本記事の (ある意味) 一番どうでもいいパート。setup.sh の中身を真面目に手で書く必要はない。上の Installed tools 表を手元のエージェント (Claude Code でも Codex でも) に渡して、
「この表に揃えた Ubuntu 24.04 用の setup.sh を書いて。自分は普段 Python + Node + Rust + C/C++ + ユーティリティしか使わないのでそれだけ。
set -eo pipefailで止めて、apt → nvm → rustup → pipx の順で」
くらいの指示を出せば、30 秒で叩き台が出てくる。バイブコーディングで書き換えていけばいい。自分も Claude Code に書かせた。
結果として出てくる骨格は、概ねこんな形 (これも参考程度):
!/usr/bin/env bash
set -eo pipefail
Utilities + C/C++ (Installed tools の C/C++ + Utilities 相当)
sudo apt-get update sudo apt-get install -y –no-install-recommends \ build-essential clang cmake ninja-build git tmux vim nano curl \ ripgrep fd-find jq python3-pip python3-venv pipx
Node.js (nvm 経由で 20 / 21 / 22)
curl -fsSL https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash export NVM_DIR=”$HOME/.nvm”; . “$NVM_DIR/nvm.sh” nvm install 20 && nvm install 21 && nvm install 22 && nvm alias default lts/* npm i -g yarn pnpm bun eslint prettier
Rust (rustc + cargo)
curl -fsSL https://sh.rustup.rs | sh -s – -y –default-toolchain stable
Python ツール (pipx で分離)
pipx ensurepath for p in poetry black mypy pytest ruff uv conan; do pipx install “$p”; done
echo “done — open a new shell to pick up PATH (nvm / cargo / pipx)”
Ruby / PHP / Java / Go / Docker / DB が必要になったプロジェクトを触る時は、また同じエージェントに「Ruby (rbenv + 3.1/3.2/3.3) も足して」と頼めばいい。必要分しか入れないほうが起動も速い。
自分が今運用している sh は swap / GNOME 調整 / git global config / yq なども含めて 4KB ほどあり、https://st274264.static.jp/setup.sh でそのまま見られる。中身は全部エージェントに書かせた / 修正させたもの。
5. VPS を立てて 1 行で叩く
XServer VPS で Ubuntu Desktop (GNOME) を作ってリモートデスクトップで入り、デスクトップから「端末」を開いて、
| curl -fsSL https://st274264.static.jp/setup.sh | bash |
そこまで待たずに全部入る。新しいシェルを開けば node, cargo, pipx 経由のツールが PATH に乗っている。これで Claude Code on the Web 相当のスタート地点に立てた状態 で、エージェントを走らせ始められる。VPS を作り直しても同じ 1 行で同じ状態が戻る。
ハマったところ
反映待ちのデフォルトページ
サーバー作成直後は
無効なURLです。 プログラム設定の反映待ち
という XServer のデフォルトページ (Content-Length: 678, Last-Modified: 2024-08-21) が返ってくる。TLS 証明書もこの間は未発行で、curl は SNI 不一致で落ちる。curl -k で中身だけ確認できる。十数分〜数十分で抜けるので焦らないでいい。
できないこと
動的処理 (PHP / Node / Python) は不可。ホスト名は自動採番 (stXXXXXX)。アカウントは 3 個まで。curl | bash で配るのが目的ならどれも刺さらない。
(なお curl | bash を不特定多数向けに置くなら setup.sh.sha256 を併置する、記事側で全文を貼る、くらいの配慮はする。これは XServer Static の話というより curl | bash 全般の話)
まとめ
XServer の無料枠を 2 つ重ねて、Claude Code on the Web の VM の中身を VPS の上に焼き戻す、というのがこの記事の正体:
- XServer VPS (無料) で Ubuntu Desktop (GNOME) を立てる (3 vCPU / 4 GB RAM / NVMe 30 GB)
- XServer Static (無料) に
setup.shを置く (Claude Code on the Web の Installed tools を目標値) - VPS 立て直後にリモートデスクトップで入って
curl -fsSL https://stXXXXXX.static.jp/setup.sh | bashで 5 分
月 0 円で、GitHub に push するだけで setup.sh を更新できる。VPS を作り直しても同じ 1 行で同じ環境が戻る。エージェントが pytest や cargo を探さずに叩ける土俵が常に手元にある、というのがこの構成の効能。