何もインストールせずに CyberTrain を試すには、プレイグラウンドを開いてください:GitHub Codespaces が、チュートリアルのブログ、cybertrain コマンド、Spinel 2026.10.27.7020 を、ブラウザーの中の VS Code で開きます。同じイメージは Docker を使ってローカルでも動きます。
必要なもの
- Spinel
2026.10.27.7020(Cybertrain::SPINEL_TAG。.github/workflows/ci.yml のSPINEL_TAGと同じリリース)。saeki-mototsune/spinel(Cybertrain::SPINEL_REPOSITORY)のリリースで、CyberTrain が必要とする修正を本家のリリースより先に取り込んだ matz/spinel のフォークです。他のバージョンでは未テストです。手動でインストールする必要はありません:cybertrainコマンドが、初めて必要になったときにそのリリースを~/.cybertrainにビルドします(cybertrain setupは求めに応じてそれを行います)。ただし、そのリリースのspinelがすでにPATH上にある場合は除きます — Spinel のインストールの仕組みを参照してください。 - そのビルドには:C ツールチェーン(
cc、またはCCで指定したコンパイラ)とmake— Spinel はすべてのプログラムを C にコンパイルします — さらにgitとcurl。 - SQLite 3 のヘッダーとライブラリ(Debian/Ubuntu では
libsqlite3-dev。macOS では Xcode のコマンドラインツールに含まれています) — モデルは gem ではなく、Spinel の FFI を直接使います。 - zlib のヘッダーとライブラリ(Debian/Ubuntu では
zlib1g-dev。macOS では SDK に含まれています) — gzip されたリクエストボディ(request.decoded_body)は、同じ方法でバインドしたシステムの zlib で展開されます。 - Ruby 3.2+ と RubyGems。
cybertrainコマンドのためだけに必要です(アプリケーションが CRuby 上で動くことはありません)。Ruby 3.2 では、Spinel のビルドにprismgem も必要です(下記)。
cybertrain doctor はこれらのツールとヘッダー、Spinel のインストールを確認します。必要なものが欠けている場合は、プラットフォームに応じたインストールコマンドも表示します。
その他のパッケージRuby 3.2 での prism、どちらも任意の OpenSSL と jemalloc
- Spinel のビルドには Ruby の
prismgem が必要で、Ruby 3.3 以上には同梱されています。Ruby 3.2 ではgem install prismを実行します(Ruby の開発用ヘッダーが必要です。Debian/Ubuntu ならruby-dev)。cybertrain doctorが確認します。 - OpenSSL のヘッダー(
libssl-dev)は任意です:ない場合、Spinel はopensslパッケージなしでビルドされますが、CyberTrain はこのパッケージを使いません。macOS でopensslを require するアプリケーションには、コンパイラのパス上に Homebrew の(keg-only の)OpenSSL が必要です:export LIBRARY_PATH="$(brew --prefix openssl@3)/lib" CPATH="$(brew --prefix openssl@3)/include"。 - jemalloc の開発用パッケージ(
libjemalloc-dev、brew install jemalloc)は任意です:アプリがこれを必要とするのは、そのspin.tomlにallocator = "jemalloc"と書いたときだけで、cybertrain newはこの行をコメントアウトして書き出します。本番環境では有効にする価値があります:examples/blog で毎秒のリクエスト数が 1.1〜1.4 倍になります(docs/benchmark.md)。
CLI をインストールする
gem install cybertrain
cybertrain doctor
1 行目で RubyGems からコマンドをインストールし、2 行目で必要なものを確認します。そこから先は、cybertrain new から cybertrain build まで、チュートリアルが続けます。
cybertrain コマンド
cybertrain help はこれらのコマンドを表示します:
cybertrain new NAME [--path DIR | --version V | --git URL [--ref R]] [--skip-spin]は NAME にアプリケーションを作成し、その中でspin lockとspin run genを実行します。必要なら先に Spinel をインストールします。cybertrain generate scaffold NAME field:type ...(エイリアスはg scaffold)は、カレントディレクトリのアプリケーションにリソースを追加します。cybertrain generate authenticationは、そのアプリケーションにメールアドレスとパスワードによるサインインを追加します:users と sessions のテーブル、UserとSessionのモデル、サインインとサインアップのコントローラーとビュー、ルート、ApplicationControllerのbefore_action、そしてテストです(サインインを追加するを参照)。--invite-onlyを付けるとサインアップのページはありません:ユーザーは./NAME user EMAILで作成し、ユーザーがまだいない間は、最初のユーザーを/setupページでも作成できます。このページはサーバー自身のマシンにだけ応答し、起動時の警告が表示するワンタイムトークンを必要とします。cybertrain generate attachment MODEL FIELD [--any]は、スキャフォールド済みのモデルにファイルアップロードを追加します:5 つのメタデータカラム、モデルのメソッドとコールバック、ダウンロードのアクション、ルート、フォームのフィールド、そしてテストです(カバー画像を追加するを参照)。スキャフォールドのフィールドcover:attachmentも同じことを行います。cybertrain db migrateは生成を行い、未適用のマイグレーションを適用して、もう一度生成します(spin run gen; spin run db -- migrate; spin run gen)。cybertrain migrationもエイリアスとして残されています。cybertrain db COMMAND...はspin run genの後に、その他のデータベースコマンドを実行します:status、rollback [N](実行後にもう一度生成します)、schema:dump、create。cybertrain server [PORT]は生成を行ってから開発サーバーを起動します(spin run gen; spin run NAME、またはspin run NAME -- PORT。デフォルトのポートは 3000)。cybertrain buildはapp/views/を埋め込んで NAME をビルドし、dist/(バイナリ、public/、storage/、tmp/)を組み立てます。cybertrain spin ARGS...は、固定された Spinel でspinを任意のディレクトリから実行します(cybertrain spin test、cybertrain spin run gen -- --check)。cybertrain setup [--force]は Spinel2026.10.27.7020を~/.cybertrainにインストールします(そのリリースのspinelがすでにPATH上にある場合を除く)。--forceは~/.cybertrain以下のコピーを再ビルドします。cybertrain doctorは C ツールチェーン、SQLite のヘッダー、Spinel のインストールを確認します。cybertrain versionはバージョンを表示します。
db、server、build はアプリケーションの中で実行します。NAME はそのアプリケーションの spin.toml にある [package] name です。
Spinel のインストールの仕組み
spin を実行するすべてのコマンド(new、db、server、build、spin)は、まず Cybertrain::SPINEL_TAG のリリースの Spinel が使えることを確かめます。PATH 上の spinel(spin を伴うもの)の spinel --version がそのリリースを報告すれば、それをそのまま使います。そうでなければ、cybertrain が ~/.cybertrain/spinel/2026.10.27.7020/ 以下に置いているコピーを使います。それもなければ、cybertrain が Cybertrain::SPINEL_REPOSITORY のリリースタグからそのコピーをビルドします(git clone、make deps、make -j、make install PREFIX=...)。ビルドは一度だけで、数分かかります。ビルドのログは ~/.cybertrain/log/spinel-2026.10.27.7020-build.log です(手順が失敗すると、その最後の数行が表示されます)。
ビルドに必要なツールが欠けている場合、cybertrain はビルドを始める前に、どれが足りないかを伝え、プラットフォームに応じたインストールコマンドを表示します。PATH 上にある別リリースの spinel が使われたり変更されたりすることはありません:cybertrain は自前のコピーを持ちます(そしてインストールするときにそう伝えます)。
cybertrain setup は同じことを求めに応じて行います。さらに、自前のコピーが使われている場合は、spin を自分で実行するために、それを PATH に加える行を表示します:
export PATH="$HOME/.cybertrain/bin:$PATH"
~/.cybertrain/bin には使用中のリリースを指す spinel と spin のリンクがあるので、リリースが上がってもこの行はそのまま使えます。cybertrain spin ... には PATH はまったく必要ありません。
環境変数CYBERTRAIN_HOME は ~/.cybertrain を移し、CYBERTRAIN_SPINEL_HOME は既存のインストールを使う
2 つの環境変数がこれらすべてを上書きします:
CYBERTRAIN_HOMEは~/.cybertrainの代わりになります(スペース、引用符、$、:を含まないパスにします。Spinel の Makefile とPATHがこれらを扱えないためです)。CYBERTRAIN_SPINEL_HOME=PREFIXは既存のインストールを強制します:そのときcybertrainはPREFIX/binにある(spinelがPREFIXの直下にあればPREFIX自体にある)spinelとspinを使い、それらがそのリリースでなければエラーで停止します。
gem とフレームワーク
gem install cybertrain がインストールするのはコマンドであり、フレームワークではありません。gem は cybertrain コマンドで、手元のマシン上で CRuby(3.2 以降)で動く素の Ruby であり、Spinel の spin ツールを代わりに呼び出します。フレームワークも Spinel も gem には含まれません。フレームワークは、アプリが spin.toml で依存する Spinel のパッケージです:Spinel がそれをあなたのコードと一緒に事前(AOT)コンパイルするので、CRuby 上で動くことはなく、出荷されるのはこの部分です。dist/ のバイナリは Ruby、gem、Spinel なしで動きます。
cybertrain new が書き出すもの
cybertrain new はアプリケーションを書き出し、その spin.toml は CLI と一致するリリースを指します(cybertrain = { git =
"https://github.com/saeki-mototsune/cybertrain", ref = "v0.3.1" })。次に Spinel がインストールされていることを確認し、spin lock(spin がフレームワークをキャッシュ ~/.cache/spin/packages/ に取得し、コミットを spin.lock に固定します)と spin run gen を実行します。rails new が bundle install を実行するのと同じようなものです。そして次の手順を表示します。フレームワークのファイルはアプリに一切コピーされません。spin.toml と spin.lock をコミットしてください。
Spinel のインストールか、2 つの spin ステップのいずれかが失敗した場合、ファイルは残したまま new は終了コード 1 で終了し、原因を解消した後に実行すべきコマンドを表示します(Spinel の場合:cybertrain setup を実行し、続いて新しいディレクトリで cybertrain spin lock && cybertrain spin run gen)。
4 つのオプションが、書き出すものと実行するものを変えます:
--skip-spinはファイルを書き出すだけです:Spinel のインストールも、spin lockも、spin run genも行いません。--path DIRは代わりにローカルのチェックアウトに依存します(CyberTrain 自体を開発するときは、チェックアウトのある場所に合わせて--path ~/src/cybertrain)。--git URL [--ref R]は URL にあるフレームワーク(ブランチまたはタグ R)に依存します。--version Vは、フレームワークがspin-indexに登録された後、インデックスのバージョンに依存します。
--path、--version、--git はひとつだけ指定してください。--ref には --git が必要です。
アプリを新しいリリースに移行する
gem とフレームワークは同じタグからリリースされるため、バージョンは一致します:0.3.1 の gem は、フレームワーク v0.3.1 に依存するアプリを書き出します。アプリを新しいリリースに移行するには、gem を更新し、spin.toml を新しいタグに向けてから、アプリの中で次を実行します:
cybertrain spin lock
cybertrain spin run gen