Rails 7でリアルタイムWeb開発! Action Cableの応用とRails 7.1の新機能について
Railsによるクライアントサイド開発入門 第9回
ダウンロード サンプルファイル (63.0 KB)
アプリケーションにDockerfileが!? Rails 7.1の新機能について
本連載の締めくくりとして、近くリリースが予定されているRails 7.1の新機能のうち、フロントエンド開発に関連するかは別として、筆者が個人的に注目しているものを抜粋して簡単に紹介することにします。
アプリケーションにDockerfileを生成する
Railsアプリケーションの作成時に、既定でDockerfileなどが含まれるようになります。Dockerfileが用意されることで、Dockerコンテナイメージの作成が容易になり、コンテナへのアプリケーションデプロイ時の利便性が向上します。
具体的には、以下のファイルが作成されます。
- Dockerfile
- .dockerignore
- bin/docker-entrypoint
これらのファイルは、アプリケーションをproduction環境にデプロイする場合を意図しており、development環境で使用すべきではありません。そのため、Dockerfileなどが不要な場合は、--skip-dockerオプションで追加をスキップできます。
DockerコンテナのためのDocked Rails CLIが追加される
Docked Rails CLIが追加されることで、DockerコンテナにおけるRailsアプリケーションのインストールやセットアップが容易になります。具体的には、以下のコマンドを実行することで、railsコマンドに前置きできるdockedコマンドがエイリアスとして定義されます。
% docker volume create docker-volume
% alias docked='docker run --rm -it -v ${PWD}:/rails -v docker-volume:/bundle -p 3000:3000 ghcr.io/rails/cli'
このあと、以下のようにRailsアプリケーションをDockerコンテナ上に作成、Scaffolding、マイグレーション、実行できます。
% docked rails new rails-app % cd rails-app % docked rails generate scaffold message title:string body:text % docked rails db:migrate % docked rails s
エラー発生位置が細かくハイライト表示される
Ruby 3.1でサポートされたgemであるerror_highlightを使って、コード中のエラー発生位置が細かくハイライト表示されるようになります。これで、コードのどこでエラーが発生しているのかが分かりやすくなります。
error_highlightを使っていないRails 7.0のエラー表示では、エラーのある行全体がハイライト表示されていました。長いコードだと、どのへんに問題があるのか分かりにくいと筆者も感じていましたが、error_highlightによってエラーのある範囲が細かくハイライト表示されますので、エラーの特定が容易になります。
一見地味ですが、Railsの開発に慣れていない段階だと非常にありがたい機能と思えます。
Active RecordでCTE(Common Table Expression)がサポートされる
Common Table Expressionとは共通テーブル表現とも呼ばれ、SQL文の記述を簡略化するための記法です。具体的には、WITH文を使ってSELECT文などのクエリに名前を付けておき、それを他のクエリから参照して実行できます。FROM句に続ける一時テーブルや、WHERE句に続けるサブクエリをCTEを使って記述すると一つのSQL文が長くなってしまうのをある程度防げます。ネストされたクエリも別のSQL文に切り離せるので、可読性もアップします。
Rails 7.1では、このCTEをモデルのwithメソッドによってシンプルに記述できるようになります。例えば、以下のwithメソッドでは2つのサブクエリを実行した結果を最終的な結果として受け取るクエリを簡単に記述できます。
Message.with(
messages_with_replies: Message.where("replies_count > ?", 0),
messages_with_tags: Message.where("tags_count > ?", 0)
)
これは、以下のようなSQL文になります。
WITH messages_with_replies AS ( SELECT * FROM messages WHERE (replies_count > 0) ), messages_with_tags AS ( SELECT * FROM messages WHERE (tags_count > 0) ) SELECT * FROM messages
Active Recordでは、内部的な処理にArelというSQL処理のためのライブラリが使われています。このArelを直接使うと同等の処理の記述が可能ですが、かなり冗長なものになるのが難点です。withメソッドによってコードとSQLの対応がシンプルかつ直感的になって、意図するSQLをより生成しやすくなります。
まとめ
今回は第8回の続きとして、Action Cableによるチャットルームアプリのメッセージ保存版の開発と、近々にリリースが予定されているRails 7.1の新機能の一部を紹介しました。
今回を以て、Railsによるクライアントサイド開発の連載は終了です。Railsが、サーバサイドアプリケーションにとどまらずクライアントサイドまで含めたフルスタックのアプリケーション開発に十分に対応できることをお伝えできたのではないかと思います。読者のRailsアプリ開発において本連載が少しでもお役に立てば幸いです。
この記事は参考になりましたか?
既に会員の方はを行ってください。
- Railsによるクライアントサイド開発入門連載記事一覧
-
- Rails 7でリアルタイムWeb開発! Action Cableの応用とRails 7....
- Rails 7でリアルタイム通信を実現! Action Cableの基本をチュートリアルと...
- 簡単にWebサービスの柔軟性が向上! Rails7のAPIモードの使い方をサンプルを通して...
- この記事の著者
-
WINGSプロジェクト 山内 直(WINGSプロジェクト ヤマウチ ナオ)
<WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書、記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook <個人紹介>WINGSプロジェクト所属のテクニカルライター。出版社を経てフリーランスとして独立。ライター、エディター、デベロッパー、講師業に従事。屋号は「たまデジ。」。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
山田 祥寛(ヤマダ ヨシヒロ)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
