Railsにこれから初めて触れる方を対象にしたチュートリアルです
RailsにElmを導入するチュートリアルになります
まず、rails new
を実行し、Railsアプリのひな型を作成します。
rails new elm
次に、作成したRailsアプリのディレクトリへと移動します。
cd elm
RailsでWeboack
を使いやすくしたWebpacker
というものを使用します
まず、Gemfile
にWebpacker
を追加します
gem 'webpacker', '4.0.2'
なお、Webpacker
のバージョンを4.0.2
としているのはElmのインストールエラー回避のためです
3.5.5
だとインストール時にエラーが発生します
ref: Elm installer not working #1711
ちなみに、Webpacker
では、Vue、React、Angular、Elm、Stimulusを使用することができます
gem
を追加した後、ターミナルでbundle install
を実行します
bundle install
その後、Webpacker
のインストールコマンドを実行します
rails webpacker:install
今回はElmを使用するのでrails webpacker:install:elm
を実行します
rails webpacker:install:elm
これでElmをRailへ導入できました!
Webpacker
を使う場合、ruby ./bin/webpack-dev-server
というコマンドを実行しつつ、rails s
でローカルサーバーを起動する必要があります
その為、現状のままではターミナルを複数開いておく必要があり、少々面倒です
そこで、複数のコマンドを並列して実行できるforeman
を使用します
まず、Gemfile
にgem 'foreman'
を追記します
gem 'foreman'
その後、bundle install
bundle install
この時、sqlite3がインストールできないエラーが発生するかもしれません その場合は以下のようにsqlite3のバージョンを修正してbundle install
を実行してください
gem 'sqlite3', '1.3.13'
bundle install
次に、foreman
で使用するProcfile.dev
を作成します
web: bundle exec rails s
webpacker: ruby ./bin/webpack-dev-server
あとは、foreman start -f Procfile.dev
をターミナルで実行するだけです
foreman start -f Procfile.dev
localhost:5000
にアクセスできればOkです(foreman
を使用する場合、使用するポートが5000へと変更されています)
rails g controller
コマンドを使い、コントローラーを作成します
rails g controller web index
その後、config/routes.rb
を以下のように編集します
Rails.application.routes.draw do
root 'web#index'
end
foreman start -f Procfile.dev
を実行して、localhost:5000
でページが表示されていればOKです
それではElmを使ってみましょう
先ほどElmインストールした際に、app/javascript/packs/hello_elm.js
が作成されています
app/views/web/index.html.erb
に以下のコードを追加してください
<%= javascript_pack_tag 'hello_elm' %>
その後、foreman start -f Procfile.dev
を実行し、localhost:5000
にアクセスします
ブラウザにHello Elm!
と表示されていればOKです!
次に、app/javascript/packs/index.js
を以下のように作成します
import { Elm } from '../Index'
document.addEventListener('DOMContentLoaded', () => {
const target = document.createElement('div')
document.body.appendChild(target)
Elm.Index.init({
node: target
})
})
その後、app/javascript/Index.elm
を以下のように作成します
module Index exposing (..)
import Html exposing (..)
import Html.Attributes exposing (..)
main =
div [] [text "Hello, Elm & Ruby on Rails!"]
最後に、app/views/web/index.html.erb
に以下のコードを追加します
<%= javascript_pack_tag 'index' %>
あとは、foreman start -f Procfile.dev
を実行し、localhost:5000
にアクセスします
ブラウザにHello, Elm & Ruby on Rails!
と表示されていればOkです!