SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Railsによるクライアントサイド開発入門

Rails 7でリアルタイムWeb開発! Action Cableの応用とRails 7.1の新機能について

Railsによるクライアントサイド開発入門 第9回

  • X ポスト
  • このエントリーをはてなブックマークに追加

アプリケーションに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アプリ開発において本連載が少しでもお役に立てば幸いです。

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Railsによるクライアントサイド開発入門連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 山内 直(WINGSプロジェクト ヤマウチ ナオ)

WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/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本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/18263 2023/09/14 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング