HOME > Web > Docker for MacでRails5.1+Vue.jsの環境をサクッと構築

Docker for MacでRails5.1+Vue.jsの環境をサクッと構築

つい先日Railsの最新バージョンである5.1のベータ版がリリースされました。Rails5.1では様々な機能追加があり、目玉機能であるwebpackerを使って最近流行りのフロントエンドライブラヂのVue.jsやReact.jsの環境を簡単に構築できるようになりました。

Dockerを使う事によりVagrantといった仮想環境を作って一から構築するよりも早く、さらにDockerなら環境の構築・削除がとても簡単にできます。

今回はその環境をDockerを使って簡単にかつ素早く構築する方法を紹介いたします。

Docker for Macのインストール

まずDocker for MacをインストールしてMacでDockerが使えるようにします。 Docker for Macは非Linux環境でサクッとLinux環境を構築するのに適したコンテナを作成できるツールです。

https://docs.docker.com/docker-for-mac/

Get Docker for Mac [stable]ボタンをクリックしてDocker.dmgをダウンロードします。

c7ce1dba339c054e133ef241b7ba4304

Docker.dmgをダブルクリックします。

a4d0a601439c20c8a2f9505e2c41c8f4

DockerのアプリフォルダをApplicationsフォルダに移動します。これでDocker for Macのインストールは完了です。

dc630d38400ae4af669d0caf8328ae7c

ApplicationsフォルダからDockerをダブルクリックして起動してください。

2181869ed03dd071b195ae3d4dcc4542

初回起動時は下記の画面が表示されます。Nextをクリックします。

646238f5a7eb7dbc700df865b060a851

Docker for Macの起動には管理者権限が必要という事です。OKボタンをクリックして管理者のパスワードを入力します。

ea4060e61ca699da4113d0382639d9ea

d0fb046b5d3c798a9b197ddc2bcd1300

パスワード入力してOKをクリックするとステータスバーにDockerのアイコンが追加され下図のポップアップが表示されます。 Got it!ボタンを押して閉じましょう。

c78ddd4f534f6106c4cbea17decaaead

ちなみにステータスバーのDockerのアイコンをクリックすると各種設定を行えます。 Dockerの起動状態や、停止など行えます。

2b4f375bd34fd78c1bac65188f28128b

これでDockerを使うための下記のツールがインストールされた状態です。

名前説明
dockerDockerの実行環境そのもの
docker-compose複数のコンテナを利用して一つのサービスを提供する場合に YAML 一発で構築出来るようにするツール
docker-machinedockerをバーチャルホストや Mac、Windows でも使えるようにしてくれるもの

ターミナルを開いて実際にインストールされたか確認してみましょう。

ターミナルで実行

docker --version
docker-compose --version
docker-machine --version

下図のようにバージョン情報が確認できれば正常にインストールできています。

0be9f14a8ffadeca93f6a0f8b1a85ecd

それでは続いてDockerを使ってRails環境を構築していきます。

DockerでRails5.1環境インストール

今回は下記の環境でRails5.1を構築していきます。

  • Ruby 2.4.0
  • Rails 5.1.0.beta1
  • PostgreSQL

プロジェクトフォルダの作成

それではRails環境を構築するフォルダを作成します。適当な箇所でフォルダを作成してください。

ターミナルでコマンド実行

cd ~/Documents
mkdir docker-rails51
cd docker-rails51

作成したフォルダ内に環境構築のファイルを作成していきます。 今回私はVisual Studio Codeを使って構築していきますので、このフォルダをVisual Studio Codeで開いておきます。 Visual Studio Codeはcodeコマンドで開く事ができます。

ターミナルでコマンド実行

code ./

docker rails51 vuejs mac 04

Dockerfileの作成

まずは、Dockerfileを作成していきます。

ターミナルでコマンド実行

touch Dockerfile

docker rails51 vuejs mac 03

Dockerfileを開いて下記を追加してください。

Dockerfile

FROM ruby:2.4.0

# シェルスクリプトとしてbashを利用
RUN rm /bin/sh && ln -s /bin/bash /bin/sh

# 必要なライブラリインストール
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev

# yarnパッケージ管理ツールインストール
RUN apt-get update && apt-get install -y curl apt-transport-https wget && \
    curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \
    echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \
    apt-get update && apt-get install -y yarn

# Node.jsをインストール
RUN curl -sL https://deb.nodesource.com/setup_7.x | bash - && \
    apt-get install nodejs

# ワークディレクトリ設定
RUN mkdir /myapp
WORKDIR /myapp
ADD Gemfile /myapp/Gemfile
ADD Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
ADD . /myapp

今回はDockerファイルではruby2.4.0のイメージを元に、下記の内容をインストールしています。

  • シェルスクリプトとしてbashを利用
  • 必要なライブラリインストール(build-essential、libpq-dev)
  • yarnインストール
  • Node.jsインストール(Ver7)

Rails5.1からはwebpakerというライブラリからVue.jsを簡単に導入できるようになり、最新のNode.js環境と、新しいNode.jsのパッケージ管理であるyarnというツールが必要ですのでそれをインストールしています。

Gemfile・Gemfile.lockの作成

続いて、Railsアプリの各種gemをインストールするためにGemfileGemfile.lockを作成します。

ターミナルでコマンド実行

touch Gemfile

docker rails51 vuejs mac 02

Gemfileにはまず、Rails5.1環境をインストールするよう下記を追加しておきます。

Gemfile

source 'https://rubygems.org'
gem 'rails', '~> 5.1.0.beta1'

Gemfile.lockは何も入力していない状態のファイルを予め作成しておきます。

ターミナルでコマンド実行

touch Gemfile.lock

docker rails51 vuejs mac 01

docker-compose.ymlの作成

Dockerのイメージ・コンテナをオーケストレーションするツールである、Docker Composeを使ってRails環境をDocker上に構築していきます。 Docker Composeの設定内容はdocker-compose.ymlというファイルを作って定義します。

ターミナルでコマンド実行

touch docker-compose.yml

docker rails51 vuejs mac 05

docker-compose.yml

version: '2'
services:
  db:
    image: postgres
  web:
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    depends_on:
      - db

docker-compose.ymlの内容を実際に構築するため、下記のコマンドを実行します。

ターミナルでコマンド実行

docker-compose run web bundle exec rails new . --force --database=postgresql --skip-bundle

この処理でローカルに保存していないイメージをダウンロードしたり、Dockerfileの初期化処理をするのでしばらく時間がかかります。 docker-compose runコマンドで対象のコンテナに対してコマンドを実行できるようになっており、webのコンテナに対してbundle exec rails new . --force --database=postgresql --skip-bundleのrailsコマンドを実行してRailsプロジェクトを作成しています。

コマンド処理が完了すると下図のとおり、プロジェクトフォルダ内にRailsプロジェクトのファイル群が追加されます。

docker rails51 vuejs mac 06

Gemfileの修正

続いて、今回の目的であるVue.jsでフロントエンド開発できる準備を整えていきます。 先ほどのrailsコマンドでGemfileに色々書き込まれていると思います。そのGemfileをさらに追記していきます。

Gemfile

# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '~> 5.1.0.beta1'
# Use postgresql as the database for Active Record
gem 'pg', '~> 0.18'
# Use Puma as the app server
gem 'puma', '~> 3.7'
# Use SCSS for stylesheets
gem 'sass-rails', github: "rails/sass-rails"

# Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 1.3.0'
# See https://github.com/rails/execjs#readme for more supported runtimes
//▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼コメントアウト▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼
gem 'therubyracer', platforms: :ruby
//▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲コメントアウト▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
//▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼追加▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼
gem 'webpacker', github: 'rails/webpacker'
//▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲追加▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
# Use CoffeeScript for .coffee assets and views
gem 'coffee-rails', '~> 4.2'
# Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks

therubyracerとRails5.1での新ツールであるwebpackerを追加しています。 追加できたらbundle updatedocker-compose buildで環境を再構築します。

ターミナルでコマンド実行

docker-compose run web bundle update
docker-compose build

また、Railsプロジェクト内にもwebpackerが追加されている事を確認しましょう。

docker rails51 vuejs mac 07

database.ymlの修正

次にRailsプロジェクトのデータベース設定をしていきます。今回はdocker-composeで一緒に構築したpostgresのデータベースコンテナに対しての接続設定をconfig/database.ymlに追加しています。

config/database.yml

development: &default
  adapter: postgresql
  encoding: unicode
  database: myapp_development
  pool: 5
  username: postgres
  password:
  host: db

test:
  <<: *default
  database: myapp_test

データベースの作成

次にRailsプロジェクトようのデータベースを作成するコマンドrake db:createdocker-compose runで実行します。

ターミナルでコマンド実行

docker-compose run web rake db:create

下図の画面が出れば無事にデータベースが作成されたことになります。

docker rails51 vuejs mac 08

webpackerインストール

これでrails webpackerコマンドが使えるようになっているはずですので実行します。

ターミナルでコマンド実行

docker-compose run web rails webpacker:install

下記のような出力が出ていればOKです。

docker rails51 vuejs mac 09

Railsプロジェクトのnode_module内にもwebpacker関連のファイル群がインポートされているはずです。

docker rails51 vuejs mac 10

webpackerにてVue.js環境インストール

次にVue.jsを使うためのrails webpacker:install:vueコマンドを実行します。

ターミナルでコマンド実行

docker-compose run web rails webpacker:install:vue

処理が完了するとjavascript/packageの中にVue.js関連のファイルが作られ、またnode_modulesの中にもライブラリが追加されます。

docker rails51 vuejs mac 11

hello_vue.jsを表示する画面を作成

webpackerを使ってRails環境にVue.jsの関連ファイルが生成されました。その中のhello_vue.jsの内容をRailsのViewテンプレートで呼び出して表示させてみます。

今後はこのpackの中のJavascriptファイルとvueファイルを編集してVue.jsのフロントエンドを開発していきます。 それでは、rails gコマンドでホーム画面を表示させるためのコントローラークラスを作成します。

ターミナルでコマンド実行

docker-compose run web rails g controller Home index

下記のファイルが追加されます。

docker rails51 vuejs mac 13

次に、先ほどのrails webpacker:vueコマンドで追加されたVue.jsのUIコンポーネントであるhello_vueを表示させるようにしてみます。 app/views/home/index.html.erbを開いてjavascript_pack_tagを追加します。

app/views/home/index.html.erb

//▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼削除▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼
<h1>Home#index</h1>
<p>Find me in app/views/home/index.html.erb</p>
//▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲削除▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
//▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼追加▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼
<h1><%= javascript_pack_tag 'hello_vue' %></h1>
//▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲追加▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲

javascript_pack_tagを使う事により、packフォルダ内にあるVue.jsコンポーネントクラスを読み込むためのscriptタグが追加されます。

次にルーティング管理のファイルconfig/routes.rbにて先ほど作ったホーム画面のルーティング設定を追加しておきます。

config/routes.rb

Rails.application.routes.draw do
  //▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼削除▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼
  get 'home/index'
  //▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲削除▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
  //▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼追加▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼
  root to: 'home#index'
  //▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲追加▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
end

Vue.jsファイルのビルド

それでは、Vue.js関連のコンポーネントをネイティブのJavascriptにコンパイルするためのwebpackを起動してみます。 Rails5.1からはbin/webpackをコマンド実行する事によりwebpackによるビルドが開始されます。

ターミナルでコマンド実行

docker-compose run web bin/webpack

下記のように表示されれば無事Vue.jsのコンポーネントがwebpackによりビルドされています。

docker rails51 vuejs mac 12

Railsサービス起動

docker-compose upコマンドでサービスを起動します。

docker-compose up

下記のようなログが出力されていればOKデス

docker rails51 vuejs mac 14

これでRailsアプリのサービスが起動しているはずですので、下記URLにアクセスします。

http://localhost:3000

このようにHello Vueを表示されれば無事Vue.jsが動いています。

docker rails51 vuejs mac 15

このようにRails5.1からVue.jsやReact.jsなどの流行りのフロントエンド開発の環境を手軽に連携して開発できるようになりました。 昨今のJavascriptでのフロントエンド開発は環境を構築するのが一苦労ですが、DockerとRails5.1を使うと比較的に楽に構築できるのでおすすめです。