Angular と Rails を組み合わせてみる
前回の記事では Angular+NestJS の組み合わせについてピックアップをしましたが、今回は Ruby on Rails5 と Angular8 の組み合わせで web アプリを作成している記事があり、読んでいてとても面白い内容だったので翻訳に挑戦しました!
どちらも個人的に気に入っているフレームワークなので、世の中にこの組み合わせでの開発が増えてくると嬉しいです。
Angular8 と Rails5 (*以下記事の翻訳)
あたなはどうか知らないが、学びやすく、素早く書けて、オープンソースという理由で私は Ruby on Rails が大好きだ。また、Ivy というクールな新しいレンダーエンジンを導入した Angular の新バージョン、Angular8 のリリースにもワクワクしている。
もしあなたが私と同じでこれら2つのフレームワークに関する興味をわかってくれて、でも、その素晴らしい2つをどう始めたら良いのかさっぱりわからない場合は、ぜひこれを読んでほしい。
さっそく初めてみよう!
慣習的に Javascript フレームワークと一緒に Rails を使う場合は、webpack が必要とされていた。しかし、Rails には webpacker と呼ばれるこれにうってつけの gem があり、Angular プロジェクトを動かしてくれる。しかし、最新バージョン(7 系以上)の Angular では内部で webpack システムを持っており、そのようなプロジェクト構成が、素晴らしい AngularCLI を使う妨げとなってしまうのだ。
その代わりに私たちがしなければならないのは、Angular からの出力ファイルを受け取り、それらを提供するコントローラを備えた API としての Rails アプリを使うことだ。
始める前に下記をインストールしてほしい。
- node (8.9 以上)
- NPM (5.5.1 以上)
- Angular CLI
- Rails 5+ (インストールに RVM または Rbenv を使うことをおすすめします)
- Postgresql
1. Angular プロジェクトを作成する
好きなディレクトリの場所でターミナルを開いて、Rails/Angular プロジェクトを作成する。
ng new rails-angular-project
Angular routing を使うか聞かれたら、迷わず「YES」を押しちゃってください!(かなり良いですよ!)
その次に、好きなスタイルシートの形式を選択して下さい。(個人的には SCSS で進めてます)
そして、全て完了したら先ほど作ったプロジェクトにジャンプしましょう!
cd rails-angular-project
2. Rails プロジェクトを作成する
では、現在のディレクトリに Rails プロジェクトを作成しましょう!
rails new . -database=postgresql
これによって、Angular プロジェクトの内部に Rails プロジェクトを作成し始めるが、全てのマージを拒否した場合、コンフリクトが発生する。
Rails プロジェクトが作成されたなら、.gitignore ファイルにいくつかファイルを追加する必要があります。
.gitignore ファイルを開いて、下記をコピペして下さい。
# Ignore bundler config.
/.bundle
# Ignore all logfiles and tempfiles.
/log/*
/tmp/*
!/log/.keep
!/tmp/.keep
# Ignore uploaded files in development
/storage/*
!/storage/.keep
.byebug_history
# Ignore master key for decrypting credentials and more.
/config/master.key
# Ignore application configuration
/config/application.yml
3. 上記 2 つを合体する
今の段階で、Angular プロジェクトと一緒になった Rails アプリとなっており、これは API としての Rails を使用し提供している一方で、Angular フレームワークを用いた SPA の利益も享受していることと言える。しかしその前に Rails に Angular が提供するファイルにアクセスできるようにしなければならない。
通常は Angular アプリでは、ng serve
を使用して開発を進めるのだが、今回はng build
を使用して Rails のパブリックディレクトリに出力するように設定する。
ルートディレクトリにあるAngular.json
を開いて、出力先ディレクトリをdist/rails-angular-app
からpublic
に変更する。
...
"options": {
"outputPath": "public",
...
次に、app/controllers にstatic_controller.rb
という名前のファイルを作成する。
class StaticController < Rails::ApplicationController
def index
render file: Rails.root.join('public', 'index.html')
end
end
static_controller は Angular によって提供されるindex.html
をレンダリングする役目を持ちます。
そして、下記のコードをroutes.rb
に追加して下さい。
Rails.application.routes.draw do
get '*other', to: 'static#index'
end
これで、Rails にルートをキャッチさせて、static_controller にリダイレクトすることができます。また、上記のコードによって api に必要となるどのルートも定義することができるのです。でもそれは次の機会に回しましょう!
4. Foreman を使って便利にする
Foreman を導入することによって、Web アプリを提供しやすくしましょう。
gem にforeman
を追加することによってインストールして下さい。
...
# Use foreman
gem 'foreman'
...
bundle install
で新しい gem をインストールします。
bundle install
Procfile と呼ばれるファイルを新しくルートディレクトリに追加します。これは組み合わせされる全てのコマンドを foreman が読み込めるようにするためのファイルです。
web: rails s -p 3000
client: ng build --watch=true
これで foreman を起動できます。
foreman start
Rails アプリと Angular アプリが同時に起動されるはずです。そして、localhost:3000
にアクセスすると以下のような画面が表示されるでしょう。
完了です!これで自由に Web アプリを開発することができますし、api にシンプルかつパワフルなフレームワークを与えるのと同時に、Angular CLI の力を用いることができます。
5.終わりに
今回、Rails5 のバックエンドと Angular8 のフロントエンドで、同じディレクトリに存在し、それぞれの力を最大限に活用するアプリケーションを作りました。このチュートリアルがあなたにとって役に立てれば幸いです。