結論
- 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で作ったものになります!
ぜひご活用ください!
フィードバックもお待ちしております 💪