devcontainer.vim
コンテナ上で Vim を使った開発をするためのツール。 (VSCode Dev Container の Vim 版)
VSCode 向けに作成された devcontainer.json に追加する形で Vim による Dev Container 開発のための設定を追加・起動するツールです。
Usage:
devcontainer.json が存在しないプロジェクトで、ワンショットで環境を立ち上げる
devcontainer.vim run [DOCKER_OPTIONS] [DOCKER_ARGS]
docker run -it --rm -v "$(pwd):/work" --workdir /work -v "$HOME/.vim:/root/.vim" --name golang golang:1.22.1-bookworm コマンド相当の環境でコンテナを立ち上げる場合の例:
devcontainer.vim run -v "$(pwd):/work" --workdir /work -v "$HOME/.vim:/root/.vim" --name golang golang:1.22.1-bookworm
devcontainer.json が存在する場合
環境の起動
start サブコマンドで、環境を立ち上げ、Vim を転送し、起動できる。
たとえば、カレントディレクトリから devcontainer.json を検索し、読み込み、環境を立ち上げ、Vim を転送し、起動する場合は以下。
devcontainer.vim start .
devcontainer への引数を(--workspace-folder 以外は) そのまま利用できるため、
.vim をバインドしたい場合、以下のように指定する。
devcontainer.vim start --mount "type=bind,source=$HOME/.vim,target=/root/.vim" .
環境の停止
TODO:
環境の削除
down サブコマンドで環境の削除ができる。
devcontainer.vim down .
ツールのアップデート
devcontainer.vim が内部で利用するツールをアップデートしたい場合には、 tool サブコマンドを使用する。
# Vim のアップデート
devcontainer.vim tool vim download
# devcontainer CLI のアップデート
devcontainer.vim tool devcontainer download
テンプレートをもとに devcontainer.json を作成する
devcontainer.vim templates apply サブコマンドを使用することで、 devcontainers が提供しているテンプレートから devcontainer.json を生成できる。
また、利用可能なテンプレート ID, フィーチャー ID は以下ページで確認できる。
2. Using the Dev Container CLI - templates/README.md at main · devcontainers/templates も参照。
go のテンプレートを用いて devcontainer.json を生成する場合の例:
devcontainer.vim templates apply --template-id ghcr.io/devcontainers/templates/go:4.0.0 .
go のテンプレートを用い、 feature として Docker in Docker を指定した devcontainer.json を生成する場合の例:
/workspaces/devcontainer.vim/build/devcontainer.vim-linux-amd64 templates apply \
--template-id ghcr.io/devcontainers/templates/go:4.0.0 \
--features '[{ "id": "ghcr.io/devcontainers/features/docker-in-docker:2"}]' .
Customize:
.vim や vimfiles など、ホストからバインドマンとさせたいものがあるが、
VSCode 等の他ツール向けに作成した devcontainer.json に devcontainer.vim 専用の mounts 定義を付けることはしたくない。
そのため、別途 devcontainer.vim のみが読み込むファイルを .devcontainer/devcontainer.vim.json に配置する。
devcontainer.vim は、 .devcontainer/devcontainer.json と .devcontainer/devcontainer.vim.json をマージして実行する。
PROJECT_ROOT/
+- .devcontainer/
| +- devcontainer.json # 普通の devcontainer 向けの設定を記述
| +- devcontainer.vim.json # .vim のマウントなど、 devcontainer.vim のみで利用したい設定を記述
|
+- ...(other project files)
devcontainer.json:
{
"name":"Go",
"image":"mcr.microsoft.com/devcontainers/go:1-1.22-bookworm",
"features":{},
"remoteUser":"vscode"
}
devcontainer.vim.json:
{
"mounts": [
{
"type": "bind",
"source": "${localEnv:HOME}/.vim",
"target": "/home/vscode/.vim"
}
]
}
追加の設定を生成する
devcontainer.vim config -g で devcontainer.vim が使用するための追加設定ファイルのテンプレートを生成できる。
devcontainer.vim config -g --home /home/containerUser > .devcontainer/devcontainer.vim.json
使用できるオプションは以下:
-g : 設定生成フラグ
-o : 生成した設定の出力先ファイルを指定(default: STDOUT)
--home : 設定テンプレート内のホームディレクトリのパス
Requirements:
以下コマンドがインストール済みで、PATH が通っていること。
Features:
- : v0.1.0
- : docker run 対応
- : コンテナの起動
- : AppImage 版 Vim のダウンロードとコンテナへの転送
- :
devcontainer.vim への引数と docker への引数を指定できるようにする
- : v0.2.0
- :
devcontainer.json の composeContainer 対応
- : dockerComposeFile
- : service
- : workspaceFolder
- : remoteUser
- : v0.3.0
- :
devcontainer.json の nonComposeBase 対応
- : v0.4.0
- : down コマンドの実装
- :
composeContainer と nonComposeBase の判定
- :
devcontainer read-configuration の結果に dockerComposeFile が含まれているかで判定
- :
composeContainer の場合
docker compose ps --format json して Project の値を取得し、 docker compose -p ${PROJECT_NAME} down する
- :
nonComposeBase の場合
docker ps --format json して Labels 内に devcontainer.local_folder=xxx が含まれており、 xxx が現在のディレクトリと一致するものを探し、そいつの ID で docker rm -f ${CONTAINER_ID} する
- : v0.5.0
- : devcontainer.vim のみが利用する設定に関する仕組みを追加
- :
devcontainer.json と devcontainer.vim.json をマージしてからコンテナを起動する
- : キャッシュディレクトリ内の構造整理
- :
devcontainer.vim.json の設定例出力機能
- : 標準出力
- : ファイルパス指定(
-o オプション)
- : Windows 向けに環境変数をセット
- : config コマンドの実装
- : リリーススクリプト・リリースワークフローを作る
- : v0.6.0
- :
devcontainer up の出力を表示する
- :
devcontainer templates apply コマンドを使えるようにする
- : v0.7.0
- : v0.8.0
- : クリップボード転送機能追加
- TCP でテキストを待ち受け、受信したテキストをクリップボードへ反映するプログラムを作る
- TCP ソケット通信する関数、ヤンク処理時にテキスト送信をするマッピングを実装したスクリプトを作る
docker cp で /SendToTcp.vim にコピーし、 -c "source /SendToTcp.vim する
devcontainer.vim 起動時に「1.」のプログラムを実行
- 多重起動防止のために既にプログラムが実行済みかどうかを確認する必要がある
- 終了時にも、「他の
devcontainer.vim が存在するか」を確認して終了させるか判定
- : v0.9.0
- : キャッシュクリアコマンド
- : アンインストールコマンド
- : v0.10.0
- : v0.11.0
- : テンプレートリスト出力機能
devcontainer.vim templates apply に渡す --template-id として使える ID の一覧を出力
Limitation:
amd64 のコンテナしか使用できません。
Install:
binary download
Latest version
go install
go install github.com/mikoto2000/devcontainer.vim@latest
Uninstall:
Windows
Delete executable file, config directory(~/AppData/Roaming/devcontainer.vim), and cache directory(~/AppData/Local/devcontainer.vim).
Remove-Item PATH_TO/devcontainer.vim.exe
Remove-Item -Recurse ~/AppData/Roaming/devcontainer.vim
Remove-Item -Recurse ~/AppData/Local/devcontainer.vim
Linux
Delete executable file, config directory(~/.config/devcontainer.vim), and cache directory(~/.cache/devcontainer.vim).
rm PATH_TO/devcontainer.vim
rm -rf ~/.config/devcontainer.vim
rm -rf ~/.cache/devcontainer.vim
MacOS
TODO:
License:
Copyright (C) 2024 mikoto2000
This software is released under the MIT License, see LICENSE
このソフトウェアは MIT ライセンスの下で公開されています。 LICENSE を参照してください。
Author:
mikoto2000 mikoto2000@gmail.com