Docker × Rails6 API × React環境for Mac[vol2]

プログラミング

MacにDockerを入れてRuby on RailsのAPIモードで動かしたい。フロントはReactにしたい。

今回も前回の続きをしていきます。

以下の環境を構築することを目的としています。

  1. DockerでRuby on Rails環境を構築
  2. RailsはAPIモード
  3. フロント側にはReact

前回は、「Dockerのインストール」、「docker-compose.ymlの書き方」という部分まで紹介しています。今回は2番目の「Dockerfile・Gemfileの準備」という部分の解説記事となっています。

本記事の執筆者

・エンジニア歴10年以上
・IT企業転職歴も3回以上
・プログラミングスクール運営側の経験あり
・現在はフリーランスエンジニアとして企業に常駐(在宅勤務)

目次

  1. DockerやDockerfileについて
    • Dockerのコンテナとは
    • Dockerfileとは
  2. Dockerfileの書き方について
    • Api側のDockerfileの設定
    • entrypoint.shの設定
    • front側のDockerfileの設定
  3. Gemfileの書き方について
    • Gemfileの設定
    • Gemfile.lockの準備
  4. まとめ

DockerやDockerfileについて

docker-logo

Dockerは、前回の記事で少し触れましたが、アプリケーションの実行環境で、Vagrant、VirtualBox、VM Ware、XAMPP/MAMPなどと同様に開発現場で使われてきました。

Dockerfileを触るまえに、コンテナやDockerfileが何か説明しておきます。

01Dockerのコンテナとは

Dockerには、コンテナと呼ばれるものがあり、ライブラリを集めたものとイメージしてもらうといいと思います。VirtualBoxなどの仮想化ソフトとは構成が異なっています。

02Dockerfileとは

Dockerfileは、コンテナの内容を記述し、設定するファイルということになります。

この後、Dockerfileの書き方や説明をしていきます。もちろん開発で何を使うかによってDockerfileに記述する内容も変わってくるので、自分にあった環境を作る必要があります。

Dockerfileの書き方について

Dockerfileの書き方

今回の環境ではapi側とfront側それぞれにDockerfileを準備します。

01Api側のDockerfileの設定

api
  - Dockerfile
  - Gemfile
  - Gemfile.lock
  - entrypoint.sh
front
  - Dockerfile
docker-compose.yml

api直下に置くDockerfileです。ハイライトされている部分ですね。

FROM ruby:2.7.1

RUN 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

RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs yarn

RUN mkdir /myapi
WORKDIR /myapi
COPY Gemfile /myapi/Gemfile
COPY Gemfile.lock /myapi/Gemfile.lock
RUN bundle install
COPY . /myapi
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000

CMD ["rails", "server", "-b", "0.0.0.0"]
FROM コンテナを生成するイメージを記述
RUN 実行するコマンドを記述。細かいコマンドの説明はここでは省きますが、yarnやnode.jsをインストールしています。
例えば、
apt-get update(パッケージリストの更新)
apt-get install -y(パッケージをインストール。-yで問い合わせに対してはyes)
WORKDIR コンテナ作業パスを記述
COPY ローカルのファイルをイメージにコピーする。パスを記述
ENTRYPOINT docker-compose upなどで初回起動時に実行したい処理を記述

02entrypoint.shの設定

api
  - Dockerfile
  - Gemfile
  - Gemfile.lock
  - entrypoint.sh
front
  - Dockerfile
docker-compose.yml

api側のDockerfileの中に「entrypoint.sh」の記述があるので、こちらから説明。

docker-compose upなどで初回起動時に実行したい処理を書く場合にentrypoint.shというスクリプトを呼び出しています。

不要なファイルを削除している。なければ無視。

#!/bin/bash
set -e

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

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

03front側のDockerfileの設定

api
  - Dockerfile
  - Gemfile
  - Gemfile.lock
  - entrypoint.sh
front
  - Dockerfile
docker-compose.yml

front側はこれだけです。nodeのイメージはalpineという軽量のものを使用しました。

FROM node:14.15.4-alpine  
WORKDIR /usr/src/app

Gemfileの書き方について

Gemfileの書き方

Gemfileはrailsアプリで利用するgemを管理するファイルですね。

01Gemfileの設定

api
  - Dockerfile
  - Gemfile
  - Gemfile.lock
  - entrypoint.sh
front
  - Dockerfile
docker-compose.yml
source 'https://rubygems.org'
gem "rails", "6.0.2.1"

必要なgemは、後から追加すればいいので一旦これだけ記述しておきます。

02Gemfile.lockの準備

api
  - Dockerfile
  - Gemfile
  - Gemfile.lock
  - entrypoint.sh
front
  - Dockerfile
docker-compose.yml

空のファイルを準備します。Gemfileをもとにインストールされたgemのバージョンが記述されています。このファイルは自動で書き込みしてくれるので、特に触ることはないと思います。

まとめ

第2回が終わりました。ここまできたら設定はほぼ完了です。あとはコマンド打ってデータベースの設定を書くだけです。

第3回も続けて環境構築完了してみてください。

コピペで環境作ってもいいですが、何でどうしてって疑問を感じた時は調べてスキルアップしましょう(自分に言っている笑)

どうしても独学は学習の難易度が上がります。プログラミングスクール否定派もいますが、効率良く学ぶ上で僕はありだと思っています。

お金より時間の方がもったいないからです。Railsは多くのプログラミングスクールで教えています。僕が調べた感じでいくと以下の3校がおすすめです。

Ruby on Railsを学習するのであれば、以下のプログラミングスクールがおすすめです。理由は運営者が自社開発をすすめている点。卒業生が転職できるレベルのスキルが身についている点です。

  1. 気になったプログラミングスクールを3-4校くらいはピックアップする
  2. ピックアップしたプログラミングスクールの無料体験を受け比較する(最低3校)
  3. その中から自分に合ったプログラミングスクールを選ぶ