- 更新日: 2020年01月17日
- 公開日: 2020年01月11日
【Mac編】DockerでRuby on Railsの開発環境を作ってみよう
Dockerを使い始めたら、お馴染みの Ruby on Rails の開発環境も作ってみたいですよね。今回は、公式ドキュメントを元に、 Docker で Ruby on Rails の開発環境を作る様子をご紹介。
尚、 Docker で Rails の環境を作る際、 自分のパソコンの OS によって作業内容が変わります。今回は Mac用の内容になっていますので、 Windowsの方、 Linuxの方はご了承ください。
【Mac編】DockerでRuby on Railsの開発環境を作ってみよう
MacのDockerでRuby on Railsを準備・起動する様子の動画
- Docker で Ruby on Rails を起動するための 公式ドキュメント
- 必要なファイル、コード GitHub/oshimamasara/docker-rails-mac-Linux
Dockerの公式ドキュメントと Mac の相性はよく、公式ドキュメント通りに作業を進めていけば Ruby on Rails の環境できます。ただ、最初ドキュメントを見た時、「これで大丈夫かな?」と作業を進める中で不安を感じましたので、作業内容を収録しました。作業前の不安解消にお役立ちできれば幸いです。
また Docker で Ruby on Rails の環境を作るために必要なファイル郡、 GitHub にアップしています。公式ドキュメント通りの内容です。上記リンク、ご参照下さい。
それでは、動画ではご紹介できなかった細かい内容をご紹介していきます。
MacのDockerにRuby on Railsを設定する方法
画像クリックで拡大
今回は公式ドキュメントを元に Mac の Docker に Ruby on Rails をセットしますが、公式ドキュメント、一通り読んでもちょっと分かりにくいですよね。必要となるファイルも紹介されていますが、拡張子が無かったりするので Railsはじめて、 Docker初心者、という方はより不安になるのではないでしょうか。
いくつか情報整理の方法はあると思いますが、まずは書かれている内容をより簡単に全体イメージできるように「必要なファイル」と「コード」で仕分けしてみました。
必要なファイル | 目的 | コード | コードの補足 |
Dockerfile | RailsのDockerイメージを作成・起動するため |
Dockerfileのコード
|
コードの補足説明
|
Gemfile | インストールするライブラリの管理ファイル |
Gemfileのコード
|
コードの補足説明
|
Gemfile.lock | インストールされたすべてのgemのすべてのバージョンをロックするもの、最初は空ファイル | ||
entrypoint.sh | コンテナ起動時の初期設定、シェルスクリプト |
entrypoint.shのコード
|
コードの補足説明
|
docker-compose.yml | コンテナの作成・起動、それからRailsとPostgreの連携のため |
docker-compose.ymlのコード
|
コードの補足説明
|
上記表、見難い場合は Googleシート ご参照下さい。
まず今回の作業で必要となるファイルは 5つ。
- Dockerfile
- Gemfile
- Gemfile.lock
- entrypoint.sh
- docker-compose.yml
ローカル環境に Rails をセットしたことのある方なら、「全然違う」と感じることでしょう。Dockerで Rails の環境を作るには上記のようなファイルが必要になります。
また各ファイルには公式ドキュメントに書かれているようなコードが必要に。各ファイル毎のコードとコードの分かりにくい点は、上記表に収めていますのでご参照下さい。
画像クリックで拡大
ちなみに今回の作業環境は、ファイル編集とコマンド操作が伴いますので、私は Visual Studio Code を選択しました。デフォルトの状態で、テキストエディタ、ファイル管理、コマンド操作ができるので便利です。
上図のように 5つのファイルが用意出来たら、次はそれらのファイルを素に実行します。
画像クリックで拡大
docker-compose run web rails new . --force --no-deps --database=postgresql
実行コマンドは、公式ドキュメント通りに。今回 Dockerfile を使っていますが、 Dockerfile の build は、 docker-compose.yml 内で指示しています。そのため docker-compose コマンドがメインに。
docker-compose run
で docker-compose.yml が起動し、順番にプログラム処理されていきます。そのとき services: 内の web: については個別のコマンドも指示。
web rails new .
とすることで、 web: の処理過程で生成されるコンテナに対して Rails に新規プロジェクト作成を指示。
docker-compose.yml だけでも処理が複雑なのに、コンテナ作業も 1回のコマンドに同梱しているので、よけい難しい内容になっています。ただ、こうした処理方法もできるんだ、という点は勉強になりますね。
そしてオプションの --force (-f)
は強制的に実行して下さい、という命令。 --no-deps
は、リンクサービスを開始しない、という指示。 --database=postgresql
についてはデータベースに関する指示。
画像クリックで拡大
docker-compose run web rails new . --force --no-deps --database=postgresql
を実行すると、 Dockerイメージの postgre、 ruby のダウンロードがはじまり、Rails のセット作業が進みます。 4、5分するとイメージが 1つ、コンテナが 2つ新規作成されます。
画像クリックで拡大
そして web rails new .
の結果、現在の作業ディレクトリに Rails関連のファイル、フォルダ軍が出現。ちなみに web rails new myapp01
とすると、 myapp01フォルダが自動作成されて、そのフォルダ下に Rails のファイル、フォルダは保存されますが、このあとの作業に支障をきたしますので、デフォルトの内容でいいと思います。
また web rails new .
の結果、 Gemfile と Gemfile.lock が自動的に書き換えられる結果に。
画像クリックで拡大
画像クリックで拡大
本来 Rails のイメージを作成する時に、こうした機能充実の Gemfile、それから Gemfile.lock を利用する必要があったのですが、 Rails のバージョン等で内容が変わることもあるために、最初は必要最低限の記載。この機能充実の Gemfile と Gemfile.lock を使って再度 Rails のイメージを作成すれば、 Rails機能を搭載した Dockerのイメージを作成できます。
画像クリックで拡大
docker-compose build
再び docker-compose
するわけですが、今度は一度使用した Dockerfile の変更に伴う再実行なので、 docker-compose run
ではなく docker-compose build
に(nuildに関する公式ドキュメント)。
再び Rails のセットアップ等が進むため、3、4分時間がかかります。
画像クリックで拡大
無事 docker-compose build
が完了すると上図のように。次は Rails でデータベース Postgre が使えるようにセットしていきます。
画像クリックで拡大
データベースの設定は、 Rails関連フォルダの中の config フォルダにある database.yml を編集します。 database.yml を開くと上図のようにいろいろ書かれていますが、こちらを公式ドキュメントの通りに書き換え。
画像クリックで拡大
今回はサンプルなのでパスワード等の設定はされていません。実環境で利用する際はご注意下さい。
画像クリックで拡大
データベースの設定が完了したら、次は docker-compose up
と公式ドキュメントには書かれていますが、これを実行してもまだ Rails のデータベースが作成されていませんのでエラーがでます。
今回は先に
docker-compose run web rake db:create
してデータベースを作成。
画像クリックで拡大
そして docker-compose up
。
画像クリックで拡大
localhost:3000 にアクセスすると Ruby on Rails のウェルカム画面が出力されていることが確認できます。
ここまでの Docker の様子を確認したいので、一旦コマンド画面に戻って Ctrl + c でコマンドをキャンセル。そしてイメージやコンテナの様子を確認してきます。
画像クリックで拡大
docker image ls
docker-compose 経由の Dockerfile で、イメージが新しく作成されていることが確認できます。
画像クリックで拡大
docker container ls -a
コンテナは、計 4つできていることが確認。現在どのコンテナも動いていないようなので、ブラウザにアクセスしても Rails の反応はありません。
画像クリックで拡大
自分のパソコンの中には Rails のファイル群があるのに、ブラウザは反応しない。これは Docker のコンテナによって Rails が起動していたため。この Docker特有のファイル感に慣れるのには、マウントや Volumeといった Docker のデータ管理を知っておく必要があります。
参考までに、現在の Rails のコンテナ状況を確認して、 Rails と自分のパソコンのデータの関係を確認してみましょう。
画像クリックで拡大
docker-compose up -d
コンテナの状況を確認する前に、一旦上記コマンドで Rails を起動しておきましょう。 するとコンテナ 1_web_1 と 1_db_1 が動いている事が確認できます。下記コマンドで Rails の方のコンテナを確認してみました。
docker container inspect 1_web_1
画像クリックで拡大
Railsコンテナのデータ状況を示す Mounts の項目を確認すると、現在の作業ディレクトリ(Source)とコンテナ(Destination)の接続ポイントが確認できます。コンテナの myapp 以下、つまり Rails のファイル群と現在の作業ディレクトリが接続中。 Type が ”bind” とありますので、こちらは マウント接続を意味。
画像クリックで拡大
今回の結果、ローカル環境で Rails のファイルを編集し、 Docker で Rails を動かせるわけですが、もし現在の Railsコンテナを docker commit
で再イメージしたいとした時、自分のパソコンのデータは切り離されてイメージ化されますので、予めご注意下さい。
docker cp
や GitHub などを使ってうまくデータ転送する必要があります。
\Webサイト担当者としてのスキルが身に付く/
まとめ
画像クリックで拡大
今まで画像と文章でいろいろ紹介してきましたが、Mac の Docker で Ruby on Rails を作成する様子は上図の通り。「Dockerfile?」「コンテナ?」と思われた方、まずは Docker の基礎から体系的に学習することをオススメします。 基礎がわかる、使えるようになると、 Docker もモットモット楽しくなると思いますよ。
「参考書は買ったんだけどな...」「ネットで調べても、みんな Docker のコマンド違うな...」という方、もし Docker を就職、転職用のツール、スキルに考えているなら CodeCampGATE がオススメですよ。
4か月間短期集中型で Webアプリケーションの基礎を学習し、その中で Docker もレッスン。そして IT業界への就職、転職を斡旋してくれるというもの。お金はかかりますが、これからの人生、『 ITスキルなし or あり 』 で考えたら、決して高くないのではないでしょうか?
もし手と頭が止まっているようであれば、一度「無料相談」試してみませんか? 『無料相談』は随時行っていますので、ご興味ある方は 公式ページ より確認してみて下さい。
- この記事を書いた人
- オシママサラ