★ここ記事は10分で読むことができます。
本記事の目的は、初心者の人がDockerを使って Ruby on Railsの開発できることです。
Macを使っている人を想定しています。
環境構築までの記事なので、その先のRuby on RailsでWebアプリを作るスキルを身につけるにはプログラミングスクールが本当におすすめです。
今では無料で相談できるので、プログラミングスクールに自分があっているかや、エンジニア転職をするかどうかなど相談して未来へのモヤモヤをなくすきっかけにして欲しいと思います。
特に人気のCodeCampとTechAcademyの人気とオススメである理由を紹介します。
プログラミングのオンラインスクールのCodeCamp
- 無料体験レッスンを受講すると受講料が1万円引になります
- 就職/転職やキャリアについての相談が無料でできる
- マンツーマンが好きな人におすすめ
- オンラインで365日/7時〜24時迄、時間と場所を選ばずに学習できる
- 最短4週間のカリキュラムあり
Webアプリケーションコース
- 自宅にいながら4ヵ月で実践経験が詰める
- オリジナルサービスやオリジナルアプリなどの開発までサポート
- 受講生に1人ずつ現役のプロのパーソナルメンターがつく
- チャットで質問すればすぐに回答が返ってくる
目次
本記事の目的とポイント
さてWebアプリの開発はプログラミングスクールで経験を積んでもらうとして、
本記事の目的はDockerでRails5 に対応したRuby on Railsの環境構築を行うこと です。
初心者の人はRails5を選ぶと良いと思います。
そして、手順とコードを全て書いてあるのでわからないなりにコピペをして進めていける内容になっています。
一番めんどくさい環境構築はサクッと終わらせてしまいましょう。
Dockerとは
Dockerは今ではローカル・クラウド関わらず開発に必要なスキルになっています。
下2つのわかりやすい記事を読んでみてください。
・Qiita :【図解】Dockerの全体像を理解する -前編-
・Docker入門(第一回)~Dockerとは何か、何が良いのか~
他にも、UdemyのDocker講座が評判が良いので、興味のある方は見てみると良いと思います。
環境構築手順
1. 必要なフォルダ/ファイルの作成
1-1. 作業フォルダの作成
まず、アプリを開発用の作業フォルダをどこでもいいので作成します。
ターミナルを開いて以下のコマンドで、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アプリを開発していきましょう!