SHOEISHA iD

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

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

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

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

Rails 7における、バンドラーを用いたReactアプリ開発~jsbundling-railsとesbuild~

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

 本連載では、2021年12月にリリースされたRuby on Rails 7にフォーカスし、クライアントサイド開発のためのさまざまな機能を、API開発やリアルタイムWeb開発も絡めながら紹介していきます。連載第3回は、第2回でimportmap-railsとPropshaftを使って作成したReactアプリを、別の構成であるjsbundling-railsとesbuildで開発します。この過程を通じて、これらのライブラリの目的と機能について理解します。

はじめに

 WebアプリケーションフレームワークのRuby on Railsは、2021年12月にバージョン7となりました。これに伴い、クライアントサイド開発のサポートについても大きな変化を遂げ、多様な選択肢が提供されるようになりました。本連載では、このRails 7にフォーカスし、クライアントサイド開発のためのさまざまな機能を、API開発やリアルタイムWeb開発も絡めながら、紹介していきます。

対象読者

  • Ruby on Railsを長らく使ってきた方
  • 他のWebアプリケーション開発フレームワークを使ってきた方
  • Railsにおけるフロントエンド開発に関心のある方

必要な環境

 本記事のサンプルコードは、以下の環境で動作を確認しています。

  • macOS Monterey
    • Ruby 3.1.0p0
    • Ruby on Rails 7.0.2.3
    • Google Chrome 100

バンドラーによるReactアプリ作成の準備

 本記事では、前回同様にRailsアプリにReactを組み込む中で、フロントエンド開発の基本的な流れをおさえていきます。前回は、Rails 7で標準となったimportmap-railsによってReactモジュールを直接インポートする例を紹介しました。この方法は、今後は標準的なものになっていくと思われますが、importmap-railsが使えないブラウザ環境や、Shimライブラリによる代替的な手法が好ましくないと考えるケースもあるとして、今回は従来から用いられてきたバンドラーによるReactアプリの作成を紹介します。

 作成するReactアプリは前回同様にシンプルなものです。コントローラとアクションを1個作成し、そのビューのコンテンツをReactによって生成します。コンテンツも最低限(メッセージと背景画像が表示されるのみ)にとどめています。

バンドラーを選択する

 Rails 7でバンドラーを使う場合、jsbundling-railsというライブラリを使います。このライブラリを使うと、バンドラーとしてesbuild、rollup、そしてwebpackのいずれかを選択できます。バンドラーを選択するにあたり、これら3つのバンドラーを主な項目について比較してみたのが以下の表です。

表 サポートされるバンドラーの比較
  esbuild rollup webpack
ビルド速度 高速 低速 低速
CommonJSモジュール対応 △(要プラグイン)
ES6対応 △(要Babel)
TypeScriptのトランスパイル △(要プラグイン) △(要プラグイン)
JSX構文のトランスパイル △(要プラグイン) △(要Babel)
Tree-shaking ×

 この表から、esbuildとrollupはES6(ECMAScript 2015)にネイティブ対応し、TypeScriptとJSX(JavaScriptコードにHTMLを直接記述する、主にReactで用いられる拡張構文)のトランスパイルが可能など(rollupではプラグインで対応)、基本機能に大きく変わるところはないように見えます。Tree-shakingという、ES6モジュールで使用されない部分をビルド時に削除する機能も有しています。これらに比べると、webpackは基本的な部分で見劣りすると言えます。

 esbuildが優れているのが、ビルドの速度です。rollup、webpackと比較すると、100倍以上の速度差が出たという報告もあります。rollup、webpackがJavaScriptで記述されているのに対して、esbuildはGo言語で記述されており、ネイティブコードにコンパイルされることで高速に動作するのです。また、並列処理が得意とされるGo言語の特性を生かして、esbuild自体も並列化を意識した設計になっているようです。

 これらを勘案して、今回はesbuildを選択することにします。開発用サーバの起動に全くストレスがないのを実感できるでしょう。

アプリケーション環境を整える

 まずは、バンドラーに必要なアプリケーション環境を整えておきます。今回使用するバンドラーであるesbuild自体は、Railsアプリケーションの作成時にインストールされますが、このためにNode.jsとyarnパッケージマネージャが必要となっています。また、Reactのインストールにもyarnパッケージマネージャを使用します。そこで、Node.jsとyarnパッケージマネージャが入っていなければインストールしておきます。手順は省略しますが、macOSではHomebrewを使うのがもっとも簡単です。

 なお、Railsアプリケーションの作成時に下記のようなメッセージが混じる場合には、yarnパッケージマネージャが最新版ではありませんので、念のため最新版にアップデートしておきます。

warning Your current version of Yarn is out of date. The latest version is "1.22.18", while you're on "1.22.17".

次のページ
環境が整ったら、Reactアプリを作成していく

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

Railsによるクライアントサイド開発入門連載記事一覧

もっと読む

この記事の著者

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編 」他、著書多数

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

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

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/16059 2022/07/08 11:00

イベント

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

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

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

メールバックナンバー