結論
- rbenvなどなしにRubyの開発環境を作ることができた
目標
やったこと
基本的には以下のリポジトリを参考にさせていただきました。
github.com
用意したのは
.devcontainer
├── Dockerfile
├── devcontainer.json
└── docker-compose.yml
です。
それぞれ見ていきましょう。
Dockerfile
Dockerfile
とはイメージを作成するための手順が記されたものです。
FROM ruby:3.1.2
RUN gem install rufo
# Set locale as ja_JP.UTF-8
RUN apt-get update \
&& apt-get install -y locales vim\
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
RUN sed -i -E 's/# (ja_JP.UTF-8)/\1/' /etc/locale.gen \
&& locale-gen
ENV LANG ja_JP.UTF-8
- FROM:親イメージの呼び出し
- RUN:現在のイメージよりも上にある新しいレイヤでコマンドを実行し、結果をコミットする
- ENV:環境変数を設定
- apt-get:パッケージの操作、管理を行うコマンド
- sed:文字列の置換処理などを行うLinuxコマンド
一行ずつ見ていきます
FROM ruby:3.1.2
Rubyのversion 3.1.2のイメージを呼び出します。
RUN gem install rufo
フォーマッターであるrufoをインストールします。
RUN apt-get update \
&& apt-get install -y locales vim \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
APTライブラリのインデックスを更新し、localesとvimをインストール、アーカイブファイルを削除、最後にキャッシュファイルを削除しています。
RUN sed -i -E 's/# (ja_JP.UTF-8)/\1/' /etc/locale.gen \
&& locale-gen
locale.gen の ja_JP.UTF-8
をコメントインし、locale_genを実行しています。
ENV LANG ja_JP.UTF-8
環境変数に、LANG = ja_JP.UTF-8
を設定しています。
これで Dockerfile にイメージを作成するための必要な手順を記し終えました!
次にdevcontainer.jsonを見ていきましょう。
devcontainer.json
devcontainer.json
はコンテナ周りの環境やVS Codeの設定を記述するためのファイルです。
{
"name": "Ruby",
"dockerComposeFile": "docker-compose.yml",
"service": "ruby",
"workspaceFolder": "/workspace",
"settings": {
"ruby.format": "rufo",
"ruby.useLanguageServer": true
},
"extensions": [
"rebornix.Ruby",
"redhat.vscode-yaml",
"kaiwood.endwise",
"VisualStudioExptTeam.vscodeintellicode"
]
}
各キーのざっくりとした説明です。
- name:dev containerの表示名
- dockerComposeFile:参照するdocker-composeファイルのパスを指定
- service:docker-composeで起動するコンテナの名前
- workspaceFolder:指定しないとターミナルでrootになってしまう
- settings:VS Codeで適用する諸設定
- extensions:buildした時に入ってほしいVS Codeの拡張を記述
extensionsにはRubyで開発する際に最低限必要なものを入れてるつもりですが、こういうのもあれば、というのがあればぜひコメントください 🙆♂️
最後にdocker-compose.ymlを見ていきましょう
docker-compose.yml
docker-compose.yml
は起動したいコンテナ群の情報を記述します。
version: '3'
services:
ruby:
build:
context: ..
dockerfile: .devcontainer/Dockerfile
volumes:
- ..:/workspace:cached
- bundle-volume:/usr/local/bundle
command: sleep infinity
volumes:
bundle-volume: null
今回はrubyというコンテナのみ起動していますね!
(command: sleep infinity
はなくてもいけると思ったのですが、エラー吐きますね、、調査して追記するかもしれません 🙇♂️)
まとめ
- VS Code + dev container の組み合わせで個々人の環境に依存しない開発環境が作成できた
おまけ
こちらがRubyの開発環境をdev containerで作ったものになります!
ぜひご活用ください!
フィードバックもお待ちしております 💪
参照