はじめに
この記事では、既存のRailsアプリにReactを導入する方法についてまとめています。
環境構築段階からReactを導入する方法についての記事は多いですが、途中からReactを導入する記事は少ないため、私自身かなり苦労しました。同じように苦戦している方の助けになれば幸いです。
環境/前提
- Ruby 3.2.3
- rails 7.1.3.4
- TaiwindCSS使用
- Docker環境
- 「esbuild」で開発を行っていること
- バックエンド(ruby、rails)のみで環境構築していること
Webpackerについて
以前は「Webpacker」を使用するのが一般的でしたが、最近では「Import Maps」や「esbuild」、「Vite」などの新しいツールが推奨されています。Webpackerは廃止されたわけではないですが、公式では使わない方向にシフトしています。この点を押さえておくと良いでしょう。
既存のRailsアプリにReactを導入するための記事が少なく、ChatGPTに聞いたところ「Webpacker」を前提とする回答が多かったので記載しています。
手順
1.yarnで必要なライブラリをインストール(Docker内)
yarn add typescript react react-dom react-router-dom @types/react @types/react-dom @types/react-router-dom
必要なライブラリは後から追加でインストールも可能です。
yarn add ライブラリ名
2.package.jsonの設定追記
"build:js": "esbuild app/javascript/*.* --bundle --sourcemap --outdir=app/assets/builds --loader:.js=jsx"
何をしているのかまとめると
- bundle: 全ての依存関係を一つのファイルにバンドル
- sourcemap: ソースマップを生成
- -format=esm: モジュールの形式をES Modulesに指定
- -public-path=/assets: ビルドされたファイルが公開されるパスを指定
-
--loader:.js=jsx:
.js
ファイルをJSXとしてロードするように指定
読み込むための設定として捉えておくと良いでしょう。
どうやってReact実装するのか
作業場所
app/javascript/
にReact用のフォルダを作成して、そこでReactの開発を進めます。
ディレクトリ構成と考え方
app/javascript/react/components
ここにはReactのコンポーネントを配置します。コンポーネントはWebページのパーツ(ボタン、入力フィールド、カードなど)です。
app/javascript/react/entrypoints
ここにはReactのエントリーポイント(アプリケーションの起点となるファイル)を配置します。ReactDOM.render
などを使ってアプリケーション全体をレンダリングするファイルをここに置きます。
app/javascript/react/features
ここにはReactの特定の機能やページに関連するコードを配置します。例えば、ユーザープロファイルページ、ダッシュボード、設定ページなどのコンポーネントや関連するロジックをここにまとめます。
app/javascript/application.js
ここでは上記で作成したファイルを読み込みます。
例えば、app/javascript/react/entrypoints/application.jsxを作成したら次のように記述します。
import "./react/entrypoints/application"
注意点
パッケージの依存関係や入れてるパッケージによっては競合して動かないことも想定されますのでご了承ください。
おわりに
既存のRailsアプリにReactを導入する方法について簡潔にまとめました。実装についても詳しくまとめたかったのですが、まだReactの知識が浅いため触れられませんでした。今後、もっと学んでいきたいと思います。
この記事が、RailsにReactを導入する方法に苦戦している方の助けになれば幸いです。気付いたことなどありましたら、ぜひ教えてください。
それでは、一緒にReactの学習を頑張りましょう!
参考記事