Rails · · Sampo Kuokkanen

新しいRails 8アプリを作ろう!オススメGem

新しいRails 8アプリを作ろう!

時間管理のアプリほしい! なぜか既存のものが全部使えない、という設定にしましょう。 (TDD、テスト駆動開発について書きたいのが主な理由です)

Ruby on Railsでプロジェクトを始めよう! 使うのは最新のRails 8です。

$ gem install rails

コマンドを実行して、ローカルにRailsをインストールしているのが前提になります。 もちろんその前にもRubyをインストールする必要があります。今回はRuby 3.4を使います。

今回はJavaScriptなしでリアルタイムに動くアプリを作りたいので、Turboを導入することにします。 いわゆるHotwireになります。Rails 7以降はTurbo/Stimulusが標準で入っているので、特別な設定は不要です。

覚えられないほどオプションがあるので、rails new --helpを実行してみましょう。

今回使いたいオプションを以下にまとめています。

rails newのオプション

Tailwind

まず、CSSはTailwindを使いたいです。 これでTailwindにスタイルを任せて、手動でCSSを書くことをほぼなくすことができます。

こちらのオプションは--css=tailwindです。

Javascript

JSはデフォルトでimportmapになっていて、それで問題ないので、 指定しなくて大丈夫です。Webpack、Sprocketsから開放されます!

asset-pipeline(Rails 8ではデフォルトがPropshaft)

以前はアセットパイプラインというとSprocketsの話でしたが、Rails 8ではPropshaftがデフォルトになりました。 Sprocketsのようにトランスパイルやミニファイをせず、ただ配信するだけのシンプルな作りで、速いです。 なので--asset-pipeline=propshaftを明示的に付ける必要はもうありません。

Solid Queue / Solid Cache / Solid Cable(Rails 8の新デフォルト)

Rails 8からはジョブキュー・キャッシュ・WebSocketのバックエンドがすべてDB(SQLite/PostgreSQL)ベースの solid_queue / solid_cache / solid_cableになりました。以前のようにRedisを別で立てなくても、 最初からバックグラウンドジョブやキャッシュが動きます。小〜中規模ならこれで十分です。

main

--mainというオプションでRailsをバージョン指定ではなく、GitHubのメインブランチを使うようにできます。 Shopifyなど、イケてる会社がやっているやり方です。 Gemが対応していない、ということもよくあるので、初心者はこのオプションなしが安全

--skip-jbuilder

jsonを返すことは今の所考えていないので不要です。

database

DBはPostgreSQLを使います。 オプションは--database=postgresqlです。 (ちなみにRails 8ではSQLiteの本番運用も現実的になったので、小規模なら--database=sqlite3も選択肢です)

全部合わせて

以下のコマンドになります!

$ rails new worktimerr --database=postgresql --css=tailwind --skip-jbuilder

Propshaftもimportmapもデフォルトになったので、Rails 7の頃より指定するオプションが減りましたね。

これで開発に当たれますね! と思っていたら、RSpec、RuboCopの設定など、作成したあとにやらないといけないこともまだ残っています。

Rubyのバージョンが古かった!

無事作成したら、Rubyのバージョンが古いことに気づいて、 git -C ~/.rbenv/plugins/ruby-build pull というコマンドでrbenvに最新のバージョンの情報を読み込まないといけなかったです。 (rbenvではなくmiseを使っている場合はmise self-updatemise ls-remote rubyで確認できます)

これでrbenv install 3.4.1で最新のRubyをインストールして、 rbenv global 3.4.1で最新のRubyをデフォルトにしています。

.ruby-versionには古いバージョンが記載されていますので、3.4.1に書き換えます。

Gemfileにもruby "古いバージョン"と書いてあるので、上と合わせて、ruby "3.4.1"に書き換えます。

再度bundle実行して、今日の作業は終わりです!