Skip to content
frontmatter
キー値
specdojo.idprj-0001:pjr-fpcm-devcontainer-editor-toolchain
specdojo.typeproject
specdojo.statusready
specdojo.rulebookspecdojo:pjr-rulebook
specdojo.part_ofprj-0001:pjr-index
specdojo.item_typetodo
specdojo.item_statusdone
specdojo.prioritymedium
specdojo.ownerDEV
specdojo.registered_at2026-10-02T11:47:42Z
specdojo.completed_at2026-10-13T14:01:04Z
specdojo.conclusionDockerfile へ Neovim・LSP・lazygit などを版固定で導入し、dotfiles で設定を入れる構成に変えて、再ビルド後に両エディタの LSP と lazygit を確かめた

PJR-FPCM devcontainer に Neovim と Emacs 用の開発ツールを導入する ​

1. 概要 ​

開発用 devcontainer に Neovim 0.12(release の tarball)と、両エディタで共通に使う LSP(TypeScript・JSON/ESLint・YAML・Bash・Markdown)・tree-sitter CLI・C コンパイラ・lazygit・git-delta を導入する。エディタの設定とプラグインはイメージに含めず dotfiles と named volume で扱う

2. 完了条件 ​

  • .devcontainer/Dockerfile で Neovim 0.12 系を GitHub release の tarball から導入する。版と sha256 を固定し、arm64 と x86_64 の両方に対応する。nvim --version で 0.12 系が表示される。
  • tree-sitter CLI と C コンパイラ(build-essential)を導入する。
  • LSP として、npm のグローバルに typescript-language-server・vscode-langservers-extracted・yaml-language-server・bash-language-server を、release のバイナリ(版を固定)で marksman を導入し、それぞれの起動を確かめる。
  • lazygit(release のバイナリ、版を固定)と git-delta(apt)を導入する。
  • Emacs は apt の emacs-nox(trixie の 30.1)のままとする。30.2 は不具合修正の版であり、ソースからのビルドはイメージのビルド時間とサイズを大きく増やすため採らない。
  • エディタの設定はローカルと共有しない。devcontainer.json から ~/dotfiles/.emacs.d の bind mount を外し、Neovim の設定の mount も追加しない。ホストの状態によらずコンテナを起動できる。
  • エディタの設定は、利用者の dotfiles のリポジトリを VS Code の dotfiles.repository(または devcontainer CLI の --dotfiles-repository)でコンテナ作成時に導入する。その手順と、リポジトリの構成の例(emacs/・nvim/・install.sh)を devcontainer の説明に書く。
  • プラグイン・パッケージ・native compile のキャッシュ・tree-sitter の grammar は、named volume の ~/.local/share/emacs と ~/.local/share/nvim に置き、コンテナを作り直しても残す。Emacs の生成物をこの volume へ置く early-init.el の設定例を手順に含める。
  • 利用者向けの devcontainer scaffold(prj-0001:pjr-2h5f-devcontainer-scaffold)の雛形には、このエディタ用のツールを既定で含めない。
  • agent はコンテナを再ビルドできないため、イメージの再ビルド後に人が確かめる手順(Neovim と Emacs の Eglot で TypeScript と Markdown の LSP が起動すること、lazygit が起動すること)を result に書く。

3. 作業内容 ​

No作業担当状態メモ
1Dockerfile へのツールの導入(版の固定とチェックサム)DEVdoneNeovim 0.12.5、Marksman 2026-02-08、lazygit 0.65.1 と npm CLI を固定
2devcontainer.json の mount と volume の変更DEVdoneHost の Emacs bind を外し、Emacs / Neovim の data volume を追加
3dotfiles のリポジトリを使う手順の記載DEVdone技術スタック定義 4.10.1〜4.10.2 に設定例と確認手順を追加
4今の Emacs の設定を dotfiles のリポジトリへ移す人done2026-10-13、利用者が実施した
5イメージの再ビルドとエディタでの動作確認人done2026-10-13、利用者が確認した

4. 対応結果 ​

  • .devcontainer/Dockerfile に、amd64 / arm64 対応の Neovim 0.12.5、Marksman 2026-02-08、lazygit 0.65.1 を公式 release と SHA-256 固定で追加した。npm global の TypeScript、JSON / ESLint、YAML、Bash の LSP と tree-sitter CLI は版を固定し、build-essential と git-delta は apt で追加した。Emacs は trixie の emacs-nox 30.1 を維持した。
  • .devcontainer/devcontainer.json から Host Mac の ~/dotfiles/.emacs.d bind mount を削除し、/home/node/.local/share/emacs と /home/node/.local/share/nvim を named volume にした。Neovim の設定を Host から mount する設定は追加していない。
  • 自宅 MacBook Pro 開発サーバ技術スタック定義 に、VS Code / Dev Container CLI から dotfiles を導入する手順、emacs/・nvim/・install.sh の構成例、Emacs の package・native compile・tree-sitter grammar を data volume へ置く early-init.el の例、再ビルド後の確認手順を追加した。
  • 残課題は人が担当する No. 4〜5 である。現在の Emacs 設定を dotfiles リポジトリへ移した後、Dev Container を再ビルドし、Neovim / Emacs Eglot の TypeScript・Markdown LSP、lazygit、named volume の再作成後の保持を実機で確認する。

4.1. 再ビルド後の確認(2026-10-13) ​

利用者が Emacs の設定を dotfiles のリポジトリへ移したあと、本リポジトリの Dev Container を再ビルドし、技術スタック定義の確認手順に従って Neovim と Emacs の LSP、lazygit が動くことを確認した。再ビルド後、接続元端末から specdojo-lp の 4321 へ到達できなかった。原因はコンテナではなく、接続元端末の SSH 設定に 4321 の LocalForward がなかったことである。運用ガイドへ公開ポートの一覧と、appPort へ追加したポートは LocalForward にも追加することを反映した(fd106f859)。

5. 関連ドキュメント ​