手軽に Ruby / Rails の開発環境を構築したいなら Docker が最適です。
ここでは、ホストOSとしてUbuntuを使用しています。
(Macホストの場合はこちらを参照してください)
Dockerコンテナでは、ベースOSをUbuntu 20.04とし、Rails アプリケーションを実行するために必要なライブラリやRuby本体をインストールしていきます。
Railsアプリケーション本体はホストOS上のローカルディレクトリから参照できるようにします。
これはRailsアプリケーションの実行環境をDockerコンテナが担い、エディタによるRailsアプリケーションの編集やソースコード管理をホストOS上で実現するためのものです。
以下のようなメリットがあります。
1.ホストOS上にRubyやRailsを直接インストールする必要がない
2.必要に応じて異なるバージョンのRubyやRailsを別々のコンテナで実行させることも可能
3.RailsソースコードはホストOS上の好みのエディタで編集できる
4.Gitの管理対象をホストOS上のソースコードに限定できる
5.(以下のDockerfile.devもGitの管理対象とすべき)
##コンテナの構築と起動
あらかじめDockerサービスをホストOS上にインストールしておいてください。
まずは、任意のディレクトリに以下のファイルを配置します。
# Docker による Ruby / Rails 開発環境の構築
#
# 任意バージョンの Ruby を Ubuntu ベースのコンテナ上にインストールする
# また、node.js をインストールする
# Rails アプリケーションは、コンテナ内ではなく、ホストOSのローカルディレクトリに生成する
From ubuntu:20.04
ENV DEBIAN_FRONTEND=noninteractive
# ローカルと同じユーザを作成する
ARG uid=unknown
ARG user=unknown
RUN useradd -m -u ${uid} ${user}
# ユーザのパスワードを仮に password と設定する
RUN echo "${user}:password" | chpasswd
# # Ubuntu にインストールされているソフトウェアを最新にする
RUN apt-get update -y
RUN apt-get upgrade -y
# Ruby のビルドに必要なパッケージを apt-get 経由でインストールする
RUN apt-get install -y build-essential
RUN apt-get install -y libssl-dev libreadline-dev zlib1g-dev
RUN apt-get install -y git wget
# sqlite3 を利用する場合に必要なライブラリ
RUN apt-get install libsqlite3-dev
# MySQL or MariaDB を利用する場合に必要なライブラリ
RUN apt-get install -y libmysqlclient-dev
# その他の便利ツール
RUN apt-get install -y sudo nano telnet
# ruby-build を使って任意の Ruby バージョンをインストールする
RUN git clone --depth=1 https://github.com/rbenv/ruby-build
RUN PREFIX=/usr/local ./ruby-build/install.sh
RUN rm -rf ruby-build
RUN ruby-build 2.7.2 /usr/local
# node.js, npmをインストール
RUN apt-get install -y nodejs npm
# n packageをインストール
RUN npm install n -g
# n packageを使ってnodeをインストール
RUN n stable
# 最初に入れた古いnode.js, npmを削除
RUN apt-get purge -y nodejs npm
# yarn packageをインストール
RUN npm install yarn -g
以下はコンテナの生成方法
(your_app_nameをあなたのアプリケーション名に変更する)
$ export YOURAPP=your_app_name
$ docker build -t $YOURAPP --build-arg uid=$(id -u $USER) --build-arg user=$USER -f Dockerfile.dev .
コンテナを起動する
$ export REPO=`pwd`
$ docker run -d --name $YOURAPP -v $REPO/:/$YOURAPP/ -p 4000:3000 -v /etc/group:/etc/group:ro -v /etc/passwd:/etc/passwd:ro -u $(id -u $USER):$(id -g $USER) -ti $YOURAPP
##コンテナ内で Rails アプリケーションを生成する
コンテナ上のbashを起動し、Railsアプリケーションを構築していきます。
$ docker exec -ti $YOURAPP bash
あなたのアプリケーションディレクトリに移動する
(your_app_nameをあなたのアプリケーション名に変更する)
$ cd /your_app_name
bundle init を実行して Gemfile ファイルを作成
$ bundle init
Gemfile を編集する(以下ではnanoエディタを使用)
$ nano Gemfile
Gemfile内の # gem "rails" のコメントを外す
(# gem "rails" を gem "rails" に変更する)
bundle install により Rails 関連の Gem を vendor/bundle にインストールする
$ bundle config set path 'vendor/bundle'
$ bundle install
rails new により Rails アプリケーションをこのディレクトリで新規に生成する
Overwrite /example/Gemfile? (enter "h" for help) [Ynaqdhm] と尋ねられたら Y と返答する
$ bundle exec rails new .
Rails アプリケーションを起動する
ホスト OS からアクセスできるようにバインドする IP アドレスを 0.0.0.0 にしておく
$ bundle exec rails s -b 0.0.0.0
コンテナ上の作業が完了したので、改めてホスト OS のブラウザで http://localhost:4000 にアクセスする
ブラウザ上で Yay! You’re on Rails! が表示されたら成功です