おさとの雑記帳

日々の学習のアウトプットに使っていきます!

devcontainerでRubyの実行環境作ってみた

結論

  • rbenvなどなしにRubyの開発環境を作ることができた

目標

  • VS Code + Remote Containerで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で作ったものになります!

ぜひご活用ください!

フィードバックもお待ちしております 💪

参照