理系学生日記

おまえはいつまで学生気分なのか

devcontainerにおいてdirenvをデフォルト有効化しておきたい

環境構築手順をドキュメンテーションするのもメンテナンスするのも面倒なので、チーム開発をする際、最近はdevcontainerを使おうということにしています。 一方、環境変数の管理にはdirenvを使っているのですが、direnvはこうやってセットアップしてねという手順を書くのも同様なので、デフォルトでフック等も有効化しておきたい。

devcontainerの設定ファイル.devcontainer.jsonにはpostCreateCommandという設定があり、これはコンテナが作成された後に実行されるコマンドを指定できます。 これを使ってdirenvをデフォルトで有効化しておきます。

まずはDockerfileでdirenvをインストールします。

FROM mcr.microsoft.com/vscode/devcontainers/base:bullseye

RUN apt-get update \
    && export DEBIAN_FRONTEND=noninteractive \
    && apt-get -y install -y --no-install-recommends \
    direnv \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/* \

その上で、.devcontainer.jsonpostCreateCommandにdirenvの設定を追加します。設定というよりは、単にhookを効かせるだけといえばだけですが…。

(略)
    "postCreateCommand": "direnv hook bash >> ~/.bashrc && direnv allow"

postCreateCommandはコンテナのビルドが完了したタイミングで実行されるフックポイント。ここでdirenvのhookについての設定などを.bashrcに追加しています。強制的にdirenv allowを実行することに関しては、セキュリティリスクを招くといえば招くので、ご利用は計画的に。