はじめに
DevcontainerはVSCodeの拡張機能として使用される開発環境という認識でしたが、Emacsから使用できないか調査しました。
下記を参考にしました。
- Dev Containers: Consistency in Development
- Dev Containers Part 2: Setup, the devcontainer CLI & Emacs
ここで説明されている方法は、Dev Container CLI を使ってコンテナを立ち上げ、Tramp を使ってコンテナ内部をブラウズするというものです。
https://github.com/devcontainers/cli
このCLIというのは devcontainers公式のものなんですね。
また、公式の仕様を見る限り、VSCodeでの使用を前提としているわけではないと理解しました。
LSP(Language Server Protocol)同様、オープンな仕様を定義して導入することでVSCode以外の開発環境の改善に貢献しており、このあたりのMicrosoftの取り組みは素晴らしいですね!
インストール
npmでインストールします。
npm install -g @devcontainers/cli
コンテナの立ち上げ
ここでは、既存のdevcontainer環境を使用する例を紹介します。
.devcontainer があるディレクトリで、下記のように実行します。
devcontainer up --workspace-folder .
必要に応じてDockerイメージがビルドされ、コンテナが立ち上がります。
コンテナ内のコマンド実行
ビルドコマンドがmakeであれば、下記のように実行できます。
devcontainer exec --workspace-folder . make
もちろん、bash等を使い、シェルに入ることもできます。
devcontainer exec --workspace-folder . /usr/bin/bash
コンテナ内のファイルシステムへのアクセス
Emacsでは(どのバージョンからサポートしているかの情報が見当たらなかったのですが、私の記憶では Emacs29 から) tramp で直接 dockerコンテナのファイルシステムにアクセスできます。
docker ps でコンテナのIDを取得し(下記の例ではa66888630fb0)、ファイルシステムを参照することができます。
/docker:a66888630fb0:
/docker:ユーザ名@a66888630fb0:
おわりに
このように、EmacsでもDevcontainerが使えます!