Ruby on Rails (本稿では Rails と表記します) は、
Ruby で作成された WEBアプリのフレームワークです。
Rails は Ruby の GEM (ライブラリ)なので、
前章で作成した ruby34.bat を管理者権限で実行し、
gem install rails
でインストールできます。
バージョンを指定する場合、 V8.1.2 なら、
gem install rails -v 8.1.2
です。
本稿では、V8.1.2 を使う前提で説明します。
とりあえず、動くものを作ってみましょう。

これだけだと味気ないので、
WEBアプリらしい機能を追加してみましょう。
簡単なメンバー管理を入れてみます。
ruby34.bat のプロンプトに戻ります。
データの新規作成。
New user をクリック。
Name と Email に適当な文字列を入力。
Create User をクリック。
User was successfully created.
と表示され、
入力した Name と Email が表示されているハズです。
データの編集。
Edit this user をクリック。
Name や Email の文字列を変更します。
Update User をクリック。
User was successfully updated.
と表示され、
編集した Name と Email が表示されているハズです。
データの削除。
Destroy this user をクリック。
User was successfully destroyed.
と表示され、データが消えているハズです。
このように、
Rails を使えば、簡単に WEBアプリが作れます。
いや、謎のコマンドを一杯打って大変だった、と思われたかもですが、
rails_sample\\app フォルダの下にあるファイル群を見ると、
相当数のコードが自動生成されているのが分かります。
これらを一から手で書くのは、もっと大変です。

rails new する際の --skip-active-storage オプションは、
本来不要なハズのものです。
Rails8 の ActiveStorage は画像処理に VIPS を使用するのですが、
記載現在 VIPS は Windows 上で動作しないようです。
直接的な解決策は見つからなかった (例えば Linux を使えとか言われる) ので、
今回は使用しない ActiveStorage 自体を無効化しています。
実際には Warning が出るだけで、VIPS を使わなければ支障ないという話もあるので、
実害がないなら、オプション無しでも構わないでしょう。
Rails V8 は、まだ新しいので、
使用する GEM の状態や実行環境の組み合わせで、
期待値通りに行かないことが多いのは残念です。

Windows 環境で、
rails new したときに、
Bundler::GemRequireError: There was an error while trying to load the gem 'sqlite3'.
(Bundler::GemRequireError) Gem Load Error is: cannot load such file -- sqlite3/sqlite3_native
というエラーが出て実行に失敗することがあります。
これは、指定環境で使える sqlite3 バイナリが無いからだと思われます。
SQLite3 を諦めて PostgreSQL などにするのも良いですが、
SQLite3 を使いたい場合は、以下の方法で凌ぎます。
一旦、エラーした WEBアプリを削除し、
bundle config set --global force_ruby_platform true
してから、rails new し直します。
実行には非常に時間が掛かります。
プロンプトの画面に何の変化もない状態で待たされるので、
焦らず終わるまで待ってください。
成功したら、
bundle config unset --global force_ruby_platform
しておきます。
Windows で SQLite3 が使えない障害は起きがちなようです。
Rails がリリースされている以上、原本のソースコードはあるハズ。
force_ruby_platform true することで、
実行環境に合致した GEM を Build し直してくれます。
ちなみに、set --global すると、
$Env:USERPROFILE\.bundle フォルダに config という名前のファイルが生成されて、
設定が保存されます。
この設定は、実行ユーザー内の全体に作用しますし、
対応バイナリの有無に関わらず Build し直すせいで実行時間も掛かりますから、
new の後で unset しています。
ちなみに、
rails new した後で対処しても構わない状況であれば、
WEBアプリのフォルダに移動し、
bundle config set force_ruby_platform true
することで、WEBアプリ毎に設定する事も可能です。
こちらの場合、
config ファイルは、WEBアプリの .bundle フォルダに保存されます。
他のWEBアプリは影響を受けないので、unset しなくても構いません。

force_ruby_platform true の余波について。
SQLite3 GEM がインストールできない問題に対処するため、
force_ruby_platform true した時に、
更に問題が起きる場合があります。
gemfile で platform を指定している GEM、
例えば、
gem "tzinfo-data", platforms: %i[ windows jruby ]
です。
platform ruby は windows でも jruby でもないので、
tzinfo-data がインストール対象から外れてしまいます。
Windows で tzinfo-data は必須なので、
結果 rails s に失敗して、Rails サーバーが起動しません。
これを回避するには、
rails new する前に、予め、
gem "tzinfo-data", platforms: %i[ windows jruby ]
から platform 指定を外した
gem "tzinfo-data"
に上書きするよう指示しておけばOKです。
具体的には、
rails new するフォルダに移動した後、
Set-Content -Path rails_template.rb -Value ‘gem "tzinfo-data"’ -Encoding Ascii
を実行し、
更に、rails new コマンドは、
rails _8.1.2_ new rails_sample --skip-active-storage -m rails_template.rb
のようにします。
上記、Set-Content すると、
gem "tzinfo-data"
を書かれた rails_template.rb というファイルが保存されます。
これが設定を上書きするファイル(テンプレート) です。
rails new する際に -m でテンプレートファイルを指定することで、
gemfile を意図する状態に更新してから bundle install できます。
gemfile の仕組みはとても便利ですが、
new しないとファイルが生成されないのに、
new する前に gemfile を変更しないといけない状況はありがちです。
ちなみに、
rails new 時に使えるオプションについては、Rails ドキュメント を参照してください。