【Ruby on Rails】をVS CodeのRemote Containerで開発するための環境をつくった記録
ちょっと仕事の都合でRuby on Railsのアプリケーションに一瞬触れることがあり、いい機会だからちょっとRailsに慣れておくかと思い、環境づくりをせこせこやってみた記録。
Railsの専用イメージがあればもうちょっと手軽だったんだろうが、2022年2月現在で既に非推奨化してるので、しょうがないから自分で用意することにした。
個人的にVS CodeのRemote Containerで開発することが多いので、そのためのDockerイメージ作りという感じ。基本的には必要なものをインストールしまくるだけの簡素なもの。
後に同じことをしたくなったとき用に備忘録を兼ねてまとめる。
Dockerfile
FROM ruby:3.0.3-slim-bullseye RUN apt update && apt upgrade -y # install necessary libraries RUN apt install -y ruby-dev build-essential zlib1g-dev # install rails RUN gem install rails --no-document # install curl RUN apt install -y curl # install nodejs,npm,yarn RUN curl -fsSL https://deb.nodesource.com/setup_current.x | bash - RUN apt-get install -y nodejs RUN npm install -g yarn # install postgresql RUN apt install -y postgresql-13 RUn mkdir -p -m 777 /var/lib/postgresql/data && chown postgres:postgres /var/lib/postgresql/data RUN su postgres -c '/usr/lib/postgresql/13/bin/initdb -D /var/lib/postgresql/data/' #RUN su postgres -c '/usr/lib/postgresql/13/bin/pg_ctl start -D /var/lib/postgresql/data' RUN apt install -y libpq-dev # install git cli RUN apt update && apt upgrade -y RUN apt install -y git RUN git config --global init.defaultBranch main RUN echo "su postgres -c '/usr/lib/postgresql/13/bin/pg_ctl start -D /var/lib/postgresql/data/'" >> /root/.bashrc
VS CodeのRemote ContainerでこのDockerfile指定すれば後は勝手に以下の内容で開発環境ができあがる(多少時間はかかる)。
- ruby 3.0.3p157
- Rails 7.0.1
- Postgresql 13.5
- Debian GNU/Linux 11 (bullseye) ※/etc/os-releaseのPRETTY_NAMEを拝借
ちなみにこれでイメージサイズ1.08GBになりますw
ただまあこれだけのセットあって1.08GBで済んでるならまだマシなほうかもと自分に言い聞かせておく。ポジティブシンキングは大事だ!
以下いくつかコメントなどをば
- 基本的にはRails公式ページのGetting Startedにしたがって必要なものを入れていってるだけである。
- DBはポスグレを使う(後にrailsのプロジェクト作るときに
--database postgresql
オプションを指定する)前提でインストールしている。起動直後にDBもあがってて欲しかったので、最終行にあるように、無理矢理/root/.bashrcにスクリプトを書き込んで、起動と同時にDBもあがるように小細工している。多分これでうまくいくはずだが、行かなかった場合も、起動後にTerminal立ち上げて、/root/.bashrcに書き込んでるコマンドsu postgres -c '/usr/lib/postgresql/13/bin/pg_ctl start -D /var/lib/postgresql/data'
打てばDBはあがる。 - Railsの起動ポート(デフォルト3000番)及びポスグレのポート(デフォルト5432番)をport forwardingすればホスト側からも繋ぐことができる。
- 余談。busterを使うと、いちいち手動でリポジトリの更新や鍵の追加等をしなきゃポスグレの最新(に近いバージョン)が手に入らなかったので、ベースをbullseyeにしている。ただbulleyeでもポスグレの14入手するには別途リポジトリ更新等の作業が必要である。
Railsプロジェクトの開始
(1)rails new
適当な場所でrails new --database postgresql [プロジェクト名]
を実行する。
コマンド実行した直下に[プロジェクト名]のディレクトリが出来上がる。
ここでは仮に「railstest」とでも名付けておく。
rails new --database postgresql railstest
(2)database.ymlの修正
config/database.yml
を開いて、defaultにusername
とpassword
を追加する
###(略)### default: &default adapter: postgresql encoding: unicode # For details on connection pooling, see Rails configuration guide # https://guides.rubyonrails.org/configuring.html#database-pooling username: railstest # ここと password: <%= ENV.fetch("PJ_DATABASE_PASSWORD") { 5 } %> # ここを追加 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> ###(略)###
username
は任意の名前に変更すること。ここではプロジェクト名と同じにした。そっちのほうがわかりやすいと思うが。password
は基本このままでよいのだが、慣習的に接頭辞の"PJ_"の部分はプロジェクト名を付けることが多いようだ。つまり、railstestがプロジェクト名なら<%= ENV.fetch("RAILSTEST_DATABASE_PASSWORD") { 5 } %>
とする。なお、パスワードなどいらんということであれば、このフィールド自体物理的に消していい。- Railsプロジェクト作成直後のdatabase.ymlなら、developmentとtestはdefaultを変えればそれでいいはずだが(database以外はdefaultそのまま使用する設定になってるので)、productionは別途変更する必要がある。これはdeployする環境とかサービスに応じて適宜変更要である。
(3)createuser
(2)で指定したユーザーをDBに作成する。
以下コマンドを実行する。
su postgres -c '/usr/lib/postgresql/13/bin/createuser -r -d -P railstest'
「railstest」の部分はユーザー名なので(2)のusername
に記述したユーザー名を指定すること。
なお、-P
オプションを指定しているので、コマンド実行後にパスワードの入力を求められる(確認用含めて2回)
パスワードなどなしで良いということであればこの-P
オプションを外せばいいだけ。
ミスってユーザー作っちまった!ということであれば同じ場所にあるdropuser
というコマンドで削除できる。
su postgres -c '/usr/lib/postgresql/13/bin/dropuser railstest'
(4)rake db:create
DBを作成する。
以下コマンドを実行する。
bin/rake db:create PJ_DATABASE_PASSWORD='***'
PJ_DATABASE_PASSWORD
は(2)でdatabase.ymlのpassword
に書いた環境変数名を記述する。
RAILSTEST_DATABASE_PASSWORD
にしたならちゃんとここも変えておく必要がある。
また、***
の部分は(3)で入力したパスワードで書き換える。
(5)rails server
railsを起動する。
bin/rails server
ブラウザでhttp://127.0.0.1:3000/
にアクセスして以下のような画面が返ってきたら成功。
(6)もろもろ
あとはbin/rake generate controller
だのbin/rake generate model
だのまあ好きにやればよい。