後へ      Topへ      次へ

Rails

概要

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 を使う前提で説明します。

簡単なお試し

とりあえず、動くものを作ってみましょう。

  1. Rails のコードを置くため、適当なフォルダを用意します。
  2. ruby34.bat を管理者権限で実行。
    以降、起動したプロンプト上で操作します。
  3. cd コマンドを使って、用意したフォルダに移動。
    以下のコマンドを順次実行。時間が掛かるものもあるので、終わるまで待ちます。
    gem install rails -v 8.1.2
    rails _8.1.2_ new rails_sample --skip-active-storage
    ここまででインストール終了です。
    gem install と rails new でバージョンの指定方法が違うことに注意してください。
  4. では、Rails サーバーを起動します。
    cd rails_sample
    set RAILS_ENV=development
    ruby bin/rails s
  5. ブラウザで http://localhost:3000/ を開き、
    RAILS のマークが表示されればOKです。
    Rails Default Page
  6. ruby34.bat のプロンプトに戻り、
    CTRL+C で Railsサーバーを終了します。

これだけだと味気ないので、
WEBアプリらしい機能を追加してみましょう。
簡単なメンバー管理を入れてみます。

ruby34.bat のプロンプトに戻ります。

  1. ruby bin/rails generate scaffold User name:string email:string
  2. ruby bin/rails db:migrate
  3. ruby bin/rails s
  4. ブラウザで http://localhost:3000/users/ を開き、
    Users
    New user
    と表示されればOKです。
    以下の流れで操作してみてください。
  5. データの新規作成。
    New user をクリック。
    NameEmail に適当な文字列を入力。
    Create User をクリック。

    User was successfully created.
    と表示され、
    入力した NameEmail が表示されているハズです。

  6. データの編集。
    Edit this user をクリック。
    NameEmail の文字列を変更します。
    Update User をクリック。

    User was successfully updated.
    と表示され、
    編集した NameEmail が表示されているハズです。

  7. データの削除。
    Destroy this user をクリック。

    User was successfully destroyed.
    と表示され、データが消えているハズです。

  8. ruby34.bat のプロンプトに戻り、
    CTRL+C で Railsサーバーを終了します。

このように、
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 ドキュメント を参照してください。


後へ      Topへ      次へ