DockerでRuby on Rails開発の準備をするメモ
はじめに
タイトルの通りメモです。さらに筆者はRuby初心者なので内容についてはあまり信頼がおけません。
前提
一応対象読者は下記です。こんな人なら多少参考になるかもしれません。
dockerで環境構築
version: '3' services: web: image: ruby:2.5.3 volumes: - ./web/src/:/usr/src/ command: tail -f /dev/null
まずは雑にこんなdocker-compose.ymlを作成します。
- rubyは記事執筆時点で2.5.3が安定版の最新バージョンのようです
- rubyイメージはそのままだと起動してすぐ死ぬので、とりあえず起動しっぱなし用コマンドを入れておきます
- railsのアプリケーションディレクトリは/usr/src/以下に置くイメージです
これでとりあえずコンテナ起動して入れる状態にはなったので、docker-compose up
してdocker exec
します。
あと知らなかったんですが、docker-composeにいつの間にかdocker-compose exec
コマンドが追加されていて、例えば今回であればdocker-compose exec web bash
とかでコンテナが起動できるようになったみたいです。地味に便利。
コンテナに入れたら、とりあえずおまじないをして、
apt-get update
Ruby on Railsに必要なsqlite3を入れます。
apt-get install sqlite3
あとはrailsをインストールしてやります。
gem install rails
gemはPHPでいうcomposerみたいなものっていう認識なんですが、railsのインストールされた場所を見てみたら/usr/local/bundle/bin/rails
にあるみたいだし、global installしてもホームディレクトリに置かれるcomposerよりも、挙動としてはyumとかapt-getに近いものなのかもしれません。
rails --version
railsがインストールされたのを確認したら、新しくrailsプロジェクトを作成します。
プロジェクトを作成したいディレクトリに移動して
rails new blog
と入力します。blog
部分はプロジェクト名なのでなんでもよいのですが、今回は公式のチュートリアルにのっとって進めます。
実行が完了したら、railsプロジェクトの各種ファイルが生成されていること、それらが適切なvolumes設定によりdockerホストに同期されていることを確認しましょう。
ちなみにrails new
実行時に自動でbundle install
というコマンドも実行されているようです。bundle
(bundler)はgem
と同じくgemを管理できるツールですが、gem
よりもこちらの方がcomposerとかの挙動に近そうです。
bundle install
を実行すると、Gemfileというファイル(実際はGemfile.lock)を参考に、依存性を解決しつつインストールを行います。インストール先はデフォルトだとgem
と同じですが、--path
オプションでインストール先を指定することもできるようです。
railsは親切なので、開発用のwebサーバが用意されています。
bin/rails server
でwebサーバを起動してみます。
Could not find a JavaScript runtime. See https://github.com/rails/execjs for a list of available runtimes.
というエラーが表示されました。nodejsを入れてやると解決するようです。
apt-get install nodejs
これでwebサーバが無事起動するのですが、こいつはサーバの3000番ポートで待ち受けます。そういえばコンテナのポートを開けてなかったのでdocker-compose.ymlの設定を変更します。合わせてここまでの作業をイメージ化しておきましょう。
まずはこれがdocker-compose.yml
version: '3' volumes: bundle: services: web: build: ./web/ volumes: - ./web/src/:/usr/src/ - bundle:/usr/local/bundle/ ports: - 3000:3000 command: tail -f /dev/null
そしてwebコンテナのDockerfileです。
FROM ruby:2.5.3 RUN apt-get -y update RUN apt-get install -y \ sqlite3 \ nodejs RUN gem install rails
docker-compose.ymlのbundleボリュームについては、bundle install
でインストールされたgemを永続化しておくものです。これをしておかないとコンテナを起動するたびにbundle install
をしなくてはならなくなります。
あとはbin/rails server
してdockerホストに3000番ポートでアクセスすればrailsのデフォルトページが表示されますね。
おわり。