EY-Office ブログ

Ruby on Rails6.1のminimalオプションに感謝します

現在Webエンジニアになるには学ぶ事が多すぎるに書いたように、今年初め新人にRuby on Rails教育を行いました。
その際には最新のRuby on Railsバージョン6.1を使ったのですが、このバージョンからRailsプロジェクト作成コマンドrails new--minimalオプションが追加されました。

--minimalオプションを付けてRailsプロジェクトを作成すると、Ruby on Railsバージョン1.Xのようなシンプルなプロジェクトを作成できます。

minimal

Ruby on Railsに追加された機能

Ruby on Railsバージョン1.Xでプロジェクトを作りscaffoldジェネレーターを使うと、データベースの1つのテーブル対し一覧表示・詳細表示・作成・変更・削除が行えるWebアプリを生成してくれます。それ以外の機能はメール送信ぐらいでした。

その後Ruby on Railsが爆発的に使われるようになると、毎年のようにバージョンアップが行われて来ました。内部構造の改良も多く行われましたが、一般的なWebアプリで使うような機能が次々とRailsに追加されてきました。 WikipdiaのHistoryには各バージョンの変更点がわかりやすく書かれています。

バージョン6.1でrails new --helpを実行すると多数のオプションが表示されますが、以下のオプションは追加機能を入れないオプション指定です。

  • —skip-action-mailer メール送信
  • —skip-action-mailbox メール受信
  • —skip-action-text リッチテキスト
  • —skip-active-job バックグラウンドジョブ
  • —skip-active-storage クラウドストレージサービス
  • —skip-action-cable リアルタイム通信
  • —skip-javascript JavaScript
  • —skip-turbolinks ターボリンク
  • —skip-jbuilder JSON API
  • —skip-webpack-install webpack(モダンJS開発環境)

javascriptはバージョン1以前から?、action-mailerはバージョン2、turbolinksはバージョン4、jbuilderもバージョン4ですがJSON APIのサポートは(たぶん)バージョン2からありました。 それ以外はバージョン5以降の追加だと思われます。

EY-Officeの教育ではどうしていたのか

EY-OfficeのRuby on Rails教育では基本的には最新のRailsを使っていました。入門編ではrails newコマンドでオプションを指定していませんでしたが、Gemfileのgem 'jbuilder'をコメントアウトしJSON用コードがコントローラーに入らないようしていました。

  • jbuilderが無効になっていると以下のようなcreate(作成)メソッドがコントローラーに生成されます
def create
  @todo = Todo.new(todo_params)
  if @todo.save
    redirect_to @todo, notice: 'Todo was successfully created.'
  else
    render action: 'new'
  end
end
  • しかしjbuilderが有効になっていると同じcreateメソッドは以下のように謎コードになります。行数的にはたいしたことはありませんが、Ruby言語の初心者にはかなり手強いコードだと思います
def create
  @todo = Todo.new(todo_params)
  respond_to do |format|
    if @todo.save
      format.html { redirect_to @todo, notice: 'Todo was successfully created.' }
      format.json { render action: 'show', status: :created, location: @todo }
    else
      format.html { render action: 'new' }
      format.json { render json: @todo.errors, status: :unprocessable_entity }
    end
  end
end

また、active-jobやaction-cable等は概要を説明するのみで「後は気にしないように」と話して教育を進めています。
受講者の中にはこれらの部分が気になってしまう方もいますが、まずはRuby on Railsの基本を学ぶ事が重要ですと話していました・・・

—minimalオプションありがとう!

バージョン6.1になり、--minimalオプションが追加されました。このオプションは --skip-spring --skip-listen --skip-bootsnap --skip-action-text --skip-active-storage --skip-action-cable --skip-action-mailer --skip-action-mailbox --skip-test --skip-system-test --skip-active-job --skip-javascript をすべて指定したのと同等で、Rails1.Xのようなシンプルなプロジェクトを作成できます。

バージョン6.1を使ってRuby on Rails教育を行うことになり、バージョン6.1をインストールし--minimalオプションを発見した時には小躍りしました😊

しかし --skip-javascriptでJavaScriptがまったく入らないため、Scaffoldが生成したコードでは削除(Destroy)が動作しません!

そこで、今年初めの教育ではRuby on Rails自身を教える事が目的ではなかったので、安易に jquery-ujs(Rails用JavaScriptコード)、jQueryを取り込むScriptタグを app/views/layouts/application.html.erb(レイアウトのテンプレート・ファイル)に追加して対応しました。

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.minjs"></script>
<script src=" https://cdnjs.cloudflare.com/ajax/libs/jquery-ujs/1.2.2/railsjs"></script>

正しくはjquery-ujsにあるように、jquery-railsgemをインストールし設定ファイルを変更する事かもしれませんが・・・・

- about -

EY-Office代表取締役
・プログラマー
吉田裕美の
開発者向けブログ