VSCode拡張機能を開発できる環境をDockerでつくる

はじめに

皆様普段エディタは何をお使いになっているでしょうか。
私はVSCodeを愛用しております。
何といっても拡張機能の豊富さが素敵です。

また拡張機能が作れることも良さの一つです。
自分が欲しい機能を持った拡張機能もないこともあるので、
プログラマらしく無いなら作ってしまえの精神です。

まず開発環境が必要なので、
今回はDockerを使って環境を用意する手順を記載します。

環境構築

Dockerは入っている前提です。
筆者はWindows環境ですが、MacでもLinuxでも変わらないかと。
ボリュームをマウントする際の書き方が少し違うくらいです。

Dockerfileは以下。というか必要なのはこれだけ。

FROM node:17-slim

# パッケージインストール
RUN apt-get update -qq \
&& apt-get install -y -git

# ユーザー設定
ARG USER=”node”
USER $USER

# ワークスペース設定
WORKDIR /workspace

ENV NPM_CONFIG_PREFIX=/home/$USER/.npm-global
ENV PATH=”/home/${USER}/.npm-global:${PATH}”

# エイリアス設定
RUN echo “alias ll=’ls -al'” >> /home/$USER/.bashrc

# ライブラリインストール
RUN npm install -g npm \
&& npm install -g vsce generator-code yo

ビルドしてコンテナ作成。

> docker build -t vscode_extention_base –no-cache .
> docker run –name vscode_extention_base -v %cd%:/workspace -t vscode_extention_base /bin/bash

新規プロジェクトが作れるか確認。

$ npx yo code
? ==========================================================================
We’re constantly looking for ways to make yo better!
May we anonymously report usage statistics to improve the tool over time?
More info: https://github.com/yeoman/insight & http://yeoman.io
========================================================================== (Y/n)n

_—–_ ╭──────────────────────────╮
| | │ Welcome to the Visual │
|–(o)–| │ Studio Code Extension │
`———´ │ generator! │
( _´U`_ ) ╰──────────────────────────╯
/___A___\ /
| ~ |
__’.___.’__
´ ` |° ´ Y `

? What type of extension do you want to create? New Extension (TypeScript)
? What’s the name of your extension? test_extension
? What’s the identifier of your extension? test_extension
? What’s the description of your extension? for test
? Initialize a git repository? No
? Bundle the source code with webpack? No
? Which package manager to use? yarn

エラーが出なければOK。
あとはWORKDIR内で好きなだけ拡張機能を作る。

追加のパッケージが必要な場合、rootユーザーでコンテナにアタッチしてaptでインストールできます。

> docker exec -u 0 -it vscode_extention_base /bin/bash

ポイント紹介

ユーザーは一般ユーザーで

rootユーザーではPermissionの兼ね合いで「npx yo code」を実行時にエラーになってしまうため。

パッケージインストール以降、rootユーザーではなく一般ユーザーに切り替えています。
node:17-slimにはnodeユーザーが既にいるので切り替えだけ。

npmのパッケージはグローバルでインストール

拡張機能作成に必要なNodeのパッケージ

vsce
generator-code
yo

は-gオプションをつけてグローバルにインストールしています。
nodeユーザーでの操作になるので、Permissionエラーにならないように、
nodeユーザーのホームディレクトリ配下の「.npm-global」ディレクトリにインストールするようにしています。

WORKDIRにインストールするとボリュームをマウントした際に消えてしまうため。
entrypointでもインストールできるが、環境として完成させておきたいので、この形にしました。

おまけ:エイリアス設定

alias ll=’ls -al

は必須。

まとめ

公式からもDockerfileは配布されているのですが、コンテナ作成時にエラーになったので自作しました。
追加のボリュームが必要な場合は面倒ですが、コンテナ作り直しです…

そのうち作った拡張機能の紹介ができればと。
拡張機能の作り方自体はたくさん記事があるので割愛します。

参考になれば幸いです。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする