環境構築

【DockerでRuby on Rails】Webアプリ開発の環境の作り方

ぐぅ

ぐぅ

京大工学部▶︎京大大学院情報学研究科▶︎日系企業のITエンジニア。研究室ではAI×通信の研究も行いAIにも知見あり。友人とプログラミング初学者向けブログ「はやぶさエンジニア」を運営。ノーコードで企業し、サブスク型サービスを運営。26歳大阪在住

★ここ記事は10分で読むことができます。
本記事の目的は、初心者の人がDockerを使って Ruby on Railsの開発できることです。

Macを使っている人を想定しています。

環境構築までの記事なので、その先のRuby on RailsでWebアプリを作るスキルを身につけるにはプログラミングスクールが本当におすすめです。

今では無料で相談できるので、プログラミングスクールに自分があっているかやエンジニア転職をするかどうかなど相談して未来へのモヤモヤをなくすきっかけにして欲しいと思います。

特に人気のCodeCampとTechAcademyの人気とオススメである理由を紹介します。

CodeCamp
プログラミングのオンラインスクールのCodeCamp
  • 無料体験レッスンを受講すると受講料が1万円引になります
  • 就職/転職やキャリアについての相談が無料でできる
  • マンツーマンが好きな人におすすめ
  • オンラインで365日/7時〜24時迄、時間と場所を選ばずに学習できる
  • 最短4週間のカリキュラムあり

TechAcademy
Webアプリケーションコース
  • 自宅にいながら4ヵ月で実践経験が詰める
  • オリジナルサービスやオリジナルアプリなどの開発までサポート
  • 受講生に1人ずつ現役のプロのパーソナルメンターがつく
  • チャットで質問すればすぐに回答が返ってくる

本記事の目的とポイント

さてWebアプリの開発はプログラミングスクールで経験を積んでもらうとして、

本記事の目的はDockerでRails5 に対応したRuby on Railsの環境構築を行うこと です。

初心者の人はRails5を選ぶと良いと思います。

そして、手順とコードを全て書いてあるのでわからないなりにコピペをして進めていける内容になっています。

一番めんどくさい環境構築はサクッと終わらせてしまいましょう。

Dockerとは

Dockerは今ではローカル・クラウド関わらず開発に必要なスキルになっています。

下2つのわかりやすい記事を読んでみてください。
Qiita :【図解】Dockerの全体像を理解する -前編-
Docker入門(第一回)~Dockerとは何か、何が良いのか~

他にも、UdemyのDocker講座が評判が良いので、興味のある方は見てみると良いと思います。

環境構築手順

1. 必要なフォルダ/ファイルの作成

1-1. 作業フォルダの作成

「ターミナル コマンdの」の画像検索結果

まず、アプリを開発用の作業フォルダをどこでもいいので作成します。

ターミナルを開いて以下のコマンドで、myappという名前のディレクトリを作成しましょう。

$ mkdir myapp (myappというディレクトリを作る)
$ cd myapp  (作成したディレクトリに移動)

このmyappの下に、必要なファイルを作成していきます。

1-2. Dockerfile 作成

1-1で作成したmyapp内に、Dockerfileを作成します。

$ touch Dockerfile (touchはファイルを作成するコマンドです)

Dockerfileとは、作るDockerをどう構成するかを決める設定ファイルです。

Dockerfile内には、Dockerイメージを構築するための手順が書かれているんですね。

FROM ruby:2.6.5
RUN apt-get update -qq && apt-get install -y nodejs postgresql-client
RUN mkdir /myapp
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
COPY . /myapp

# Add a script to be executed every time the container starts.
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000

# Start the main process.
CMD ["rails", "server", "-b", "0.0.0.0"]

中身を簡単に解説します。

[FROM] 使用するイメージとバージョン
[RUN] コマンドの実行。railsに必要なnodejsとpostgeqsqlをインストールしています
[WORKDIR] 作業ディレクトリを設定
[COPY] ローカルのファイルをコンテナへコピー
[ENTRYPOINT] 一番最初に実行するコマンド(ここではentrypoint.shを参照)
[EXPOSE] コンテナがリッスンするport番号
[CMD] イメージ内部のソフトウェア実行(ここではRailsを指す)

1-3. Gemfile 作成

Gemfileを作成します。

$ touch Gemfile

Gemfile内でRailsのバージョンを指定します。

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

1-4. Gemfile.lock 作成

作成だけして、中身は空のままにします。

下のコマンドだけで大丈夫です。

$ touch Gemfile.lock

1-5. entrypoint.sh 作成

entrypoint.shを作成します。

$ touch entrypoint.sh

entrypoint.shを書きます。

#!/bin/bash
set -e

# Remove a potentially pre-existing server.pid for Rails.
rm -f /myapp/tmp/pids/server.pid

# Then exec the container's main process (what's set as CMD in the Dockerfile).
exec "$@"

set -e : 「エラーが発生するとスクリプトを終了する」の意
rm ... : 「railsのpidが存在している場合に削除する」処理
exec "$@" : DockerfileのCMDで渡されたコマンド(→Railsのサーバー起動)を実行

1-6. docker-compose.yml 作成

最後のファイルとなる、docker-compose.ymlを作成します。

$ touch docker-compose.yml

Webアプリを作るために必要なサービスを書き、一斉に実行するための設定ファイルです。

今回は、「db(PostgreSQLを指定)」「web(アプリケーション、ポートなどを指定)」の2つを記載しています。

version: '3'
services:
  db:
    image: postgres
    volumes:
      - ./tmp/db:/var/lib/postgresql/data
  web:
    build: .
    command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    depends_on:
      - db

docker-compose.ymlの解説。

[version] docker-composeのバージョンです。
[services] この下のハッシュにサービスを作りましょう。命名は自由ですが、通常はwebとdbと名付けます。
[image] 使用するimage(dbでPostgreSQLを指定しています)
[volumes] ディレクトリのマウント設定
[build] Dockerfileなどがあるパス(基本的にカレントディレクトリ)
[command] コマンド(server.pidファイルを削除してからrailsサーバー起動)
[ports] ポート番号。[ホスト:コンテナ]
[depends_on] 依存関係を示していて、起動順を指定できます。ここではdb→webへと起動します。


これで必要なファイルの準備は完了です。
ここまでのフォルダ構成は、下記のようになっているはずです。

myapp
- Dockerfile
- Gemfile
- Gemfile.lock
- entrypoint.sh
- docker-compose.yml

2. Webアプリのビルド

これまでのファイルを実行して、Webアプリをビルドしていきます。

2-1. rails new コマンドの実行

docker-compose runコマンドを利用して、rails newを実行します。

$ docker-compose run web rails new . --force --no-deps --database=postgresql --skip-bundle

--force : 既存のGemfileを上書きするためのオプション
--no-deps : リンクしたサービスを起動しない
--database=postgresql : DBにpostgresqlを指定
--skip-bundle : bundleをskip(最後にbundleします)

このコマンドを実行すると、myappディレクトリにWebアプリの基礎構成が出来ます。

処理は成功しましたが、下記のメッセージは無視でOKです。

Could not find gem 'pg (>= 0.18, < 2.0)' in any of the gem sources listed in your Gemfile.
Run `bundle install` to install missing gems.

2-2. bundle install

rails newの実行で、Gemfileが書き換わっています。
このGemfileの内容を元にbundle installしていきます。
下記コマンドを実行すると、Dockerイメージををビルドする際にbundle installしてくれます。

$ docker-compose build

2-3. DBへの接続設定

Railsのconfig/database.ymlファイルがデフォルトでSQLiteになっているので、postgresqlに書き換えます。

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

development:
  <<: *default
  database: myapp_development

test:
  <<: *default
  database: myapp_test

Railsはデフォルトで、localhost上でDBが動作するようになっています。
そこで、hostを先ほど作成したdbに変更します。

2-4. Dockerコンテナの起動

下記コマンドでコンテナ及びアプリを起動します。

$ docker-compose up

2-5. DB作成

DBを作成して環境構築の完了です。

新らしいターミナルを開いて下のコマンドを実行します。

$ docker-compose run web rake db:create

2-6. Railsが起動していることを確認

Webブラウザで、 http://localhost:3000/ にアクセスすると、Railsが立ち上がっていたら完了です。

お疲れ様でした。

まとめ

今回は初心者に向けたDockerでRuby on Railsの環境構築を行いました。

ここからRailsを使ってどんどんWebアプリを開発していきましょう!

  • この記事を書いた人
ぐぅ

ぐぅ

京大工学部▶︎京大大学院情報学研究科▶︎日系企業のITエンジニア。研究室ではAI×通信の研究も行いAIにも知見あり。友人とプログラミング初学者向けブログ「はやぶさエンジニア」を運営。ノーコードで企業し、サブスク型サービスを運営。26歳大阪在住

-環境構築
-, , , ,

© 2021 はやぶさエンジニア Powered by AFFINGER5