はじめに
VMでの実行は処理速度が非常に重たいので、Windows環境下で快適にかつ、他のVM環境と競合する恐れを回避するためにDocker環境を用います。
また、VS Codeでの開発を基本とするため、Remote Containerを用いて自動でコンテナを開くように設定します。
かなり雑に作ったのでエラーが起きた場合は各自で対応してくれると助かります。
なお、本環境はTEBA、Perl、gcc、makeが使えるUbuntu環境です。
準備するもの
- Visual Studio Code
- VS Code拡張機能「Remote - Containers」 (ID:
ms-vscode-remote.remote-containers
) - Docker Desktop (またはDocker Engine) がインストールされ、起動していること
設定手順
開発したいプロジェクトのフォルダ(ここでは\my-teba-project
)内に、以下のファイルを追加・配置します。
- Dockerfile の作成
プロジェクトのルートにDockerfile
というファイルを作成し、以下の内容を貼り付けます。
# ベースイメージとしてUbuntu 22.04を指定
FROM ubuntu:22.04
# apt実行時にインタラクティブなダイアログを無効化
ENV DEBIAN_FRONTEND=noninteractive
# 必要なパッケージのインストール (GraphViz用のlibexpat1-devとlocalesを追加)
RUN apt-get update && apt-get install -y \
build-essential \
wget \
perl \
cpanminus \
graphviz \
libexpat1-dev \
locales \
&& rm -rf /var/lib/apt/lists/*
# ロケールの設定
RUN locale-gen en_US.UTF-8
ENV LANG=en_US.UTF-8
ENV LANGUAGE=en_US:en
ENV LC_ALL=en_US.UTF-8
# 依存Perlモジュールのインストール
RUN cpanm JSON Algorithm::Diff GraphViz Clone
# TEBAのダウンロードと展開
WORKDIR /root
RUN wget http://tebasaki.jp/src/src/teba-1.55.2.tar.gz && \
tar zxvf teba-1.55.2.tar.gz && \
rm teba-1.55.2.tar.gz
# シンボリックリンクの作成
RUN ln -s teba-1.55.2 teba
# 環境変数の設定
ENV PATH="/root/teba/bin:${PATH}"
ENV PERLLIB="/root/teba/TEBA"
# 作業ディレクトリの指定
WORKDIR /workspace
# コンテナ起動時のデフォルトコマンド
CMD [ "bash" ]
-
.devcontainer
フォルダの作成
プロジェクトのルートに.devcontainer
という名前のフォルダを作成します。 -
devcontainer.json
ファイルの作成
作成した.devcontainer
フォルダの中に、devcontainer.json
という設定ファイルを作成し、以下の内容を貼り付けます。
// .devcontainer/devcontainer.json
{
"name": "TEBA Ubuntu Env",
"build": {
// Dockerfileの場所を指定
"dockerfile": "../Dockerfile"
},
// VS Codeでコンテナに接続した際の作業フォルダ
"workspaceFolder": "/workspace",
// コンテナ内で自動的に有効化したいVS Code拡張機能
"customizations": {
"vscode": {
"extensions": [
"ms-vscode.cpptools", // C/C++拡張機能
"d-biehl.perl-toolbox" // Perl拡張機能
]
}
},
// コンテナ作成後に実行するコマンド (TEBAの動作確認)
"postCreateCommand": "echo 'TEBA setup verification:' && echo 'Available commands:' && ls -la /root/teba/bin/ && echo 'Testing basic parsing:' && echo 'int main() { return 0; }' | cparse.pl | join-token.pl && echo 'Testing rewrite.pl with for-while sample:' && cd /root/teba/sample-prog-trans && echo 'int i; for(i=0; i<10; i++) {}' | cparse.pl | rewrite.pl -p for-while.pt | join-token.pl",
// コンテナに接続するユーザーをrootに指定
"remoteUser": "root"
}
最終的なフォルダ構成
最終的に、プロジェクトフォルダは以下のような構成になります。
my-teba-project/
├── .devcontainer/
│ └── devcontainer.json
└── Dockerfile
起動方法
-
VS Codeで、上記の設定を行った
my-teba-project
フォルダを開きます。 -
VS Codeが
.devcontainer
フォルダを検知し、右下に「Reopen in Container」という通知が表示されます。このボタンをクリックしてください。 -
もし通知が表示されない場合は、
Ctr - Shift - P
でコマンドパレットを開き、「Remote-Containers: Reopen in Container」を検索して実行します。 -
初回起動時はDockerfileからDockerイメージのビルドが始まるため、完了まで数分かかります。ビルドが完了するとVS Codeのウィンドウがリロードされ、コンテナに接続された状態になります。