EurekaMoments

ロボットや自動車の自律移動に関する知識や技術、プログラミング、ソフトウェア開発について勉強したことをメモするブログ

VSCode+DockerでJulia開発用仮想環境を構築する手順

1から始める Juliaプログラミング

1から始める Juliaプログラミング

目次

はじめに

これまで、ソフト開発用の仮想環境を構築する際は
VirtualBoxを使っていましたが、構築後の仮想ディスクの
容量がかなり大きくなるので、共有や管理がしにくい
という問題がありました。

www.eureka-moments-blog.com

こういった課題を解決するために、今後の開発環境構築は
全てDockerを用いて行うことにしました。

www.eureka-moments-blog.com

今回はJuliaによるソフト開発用の仮想環境を
VSCodeとDockerの組合せで構築してみたので、
その手順について紹介します。

構築手順

1. VSCodeをインストール

下記リンクより、OSに合わせてインストーラを
ダウンロードし、インストールします。

code.visualstudio.com

2. 拡張機能: Remote - Containersをインストール

VSCodeからDockerコンテナを立ち上げるための
拡張機能です。

marketplace.visualstudio.com

code.visualstudio.com

これにより立ち上がったDockerコンテナ内には
プログラミング言語とVSCodeサーバが内包
されており、ローカルPCにインストールしている
VSCodeから操作するようになります。

f:id:sy4310:20210320155806p:plain

ターミナルやデバッガ、Gitなどもまとめて
入れることが出来るので、開発に必要なものを
一通り揃えることが可能です。

3. Dockerをインストール

以前にこちらの記事で紹介した手順で
Windows用Dockerをインストールします。

www.eureka-moments-blog.com

4. プロジェクト用ディレクトリを用意

Gitにコミットするディレクトリを下記の
ような構成で作成します。

f:id:sy4310:20210320161720p:plain

これらはこちらのGitHubリポジトリから
クローンしてくることもできます。

github.com

ここでまず用意しなければいけないのが、
.devcontainerというフォルダであり、
この中にDockerコンテナ起動に必要な
設定ファイルを置かなければいけません。

f:id:sy4310:20210320162209p:plain

ここでいう設定ファイルとは、Docker
コンテナ内で使用するプログラミング言語や
各種ツールのインストール、設定をする
ためのコマンドを記述したDockerfileと、
コンテナ内のVSCodeサーバの各種設定を
記述したdevcontainer.jsonの2つです。

5. Dockerfileの作成

全体の記述内容は下記のようになります。

FROM julia:1.5.3

RUN apt-get update
RUN apt-get -yq install git
RUN git config --global user.name "Your name"
RUN git config --global user.email "Your email"

RUN julia -e 'using Pkg; Pkg.add("PackageCompiler")'
RUN julia -e 'ENV["CONDA_JL_VERSION"]=3; using Pkg; Pkg.add(["PyCall", "PyPlot"])'
RUN julia -e 'using Pkg; Pkg.add(["Plots", "DataFrames", "CSV"])'
RUN julia -e 'using Pkg; Pkg.add(["Test", "StatsPlots", "Statistics"])'
RUN julia -e 'using Pkg; Pkg.add(["FreqTables", "NamedArrays", "Distributions"])'
RUN julia -e 'using Pkg; Pkg.add(["LinearAlgebra"])'

まずはベースとするJuliaのDockerイメージを
引っ張って来るためにこちらを実行します。
Juliaのバージョンは、作成当時の最新安定版で
あった1.5.3としています。

FROM julia:1.5.3

次に、Gitのインストールと設定を下記で実行します。

RUN apt-get update
RUN apt-get -yq install git
RUN git config --global user.name "Your name"
RUN git config --global user.email "Your email"

最後に、Juliaコードを動かすために必要な
依存パッケージをインストールします。

RUN julia -e 'using Pkg; Pkg.add("PackageCompiler")'
RUN julia -e 'ENV["CONDA_JL_VERSION"]=3; using Pkg; Pkg.add(["PyCall", "PyPlot"])'
RUN julia -e 'using Pkg; Pkg.add(["Plots", "DataFrames", "CSV"])'
RUN julia -e 'using Pkg; Pkg.add(["Test", "StatsPlots", "Statistics"])'
RUN julia -e 'using Pkg; Pkg.add(["FreqTables", "NamedArrays", "Distributions"])'
RUN julia -e 'using Pkg; Pkg.add(["LinearAlgebra"])'

6. devcontainer.jsonの作成

全体の記述内容は下記のようになります。

{
    "name": "JuliaAutonomy",
    "context": "..",
    "dockerFile": "Dockerfile",

    // Set *default* container specific settings.json values on container create.
    "settings": { 
        "terminal.integrated.shell.linux": "/bin/bash",
        "workbench.editor.enablePreview":false,
        "julia.usePlotPane": true,
        "julia.liveTestFile": "test/runtests.jl"
    },

    // Add the IDs of extensions you want installed when the container is created.
    "extensions": [
        "julialang.language-julia",
        "shd101wyy.markdown-preview-enhanced",
        "donjayamanne.githistory",
        "eamodio.gitlens"
    ],
}

まずはプロジェクトの名前やDockerfileの
パスなどを指定します。

    "name": "JuliaAutonomy",
    "context": "..",
    "dockerFile": "Dockerfile",

次にここで、コンテナ内のVSCodeサーバに
適用する設定内容を記述します。

    "settings": { 
        "terminal.integrated.shell.linux": "/bin/bash",
        "workbench.editor.enablePreview":false,
        "julia.usePlotPane": true,
        "julia.liveTestFile": "test/runtests.jl"
    },

そしてここでは、同じくVSCodeサーバに
インストールする拡張機能を記述します。
JuliaとMarkdown, Git用の拡張機能を
インストールするようにしています。

    "extensions": [
        "julialang.language-julia",
        "shd101wyy.markdown-preview-enhanced",
        "donjayamanne.githistory",
        "eamodio.gitlens"
    ],

7. Dockerコンテナのビルド

ここまで準備が出来たら、いよいよ
コンテナをビルドします。
Remote - Containersをインストールして
いたら、ローカルのVSCodeの左下が
こちらのようになっているはずです。
f:id:sy4310:20210320210008p:plain

そして赤丸で囲った部分をクリックすると
VSCode上部にRemote - Containersの
メニューが表示されるので、この中から
Open Folder in Containerを選択します。
f:id:sy4310:20210320210317p:plain

すると、このようにフォルダ選択の
ダイアログが開かれるので、コンテナで
開きたいフォルダを選択します。
f:id:sy4310:20210320210921p:plain

その後、こちらのようにコンテナの
ビルドが始まるので完了するまで暫く
待ちます。
f:id:sy4310:20210320211153p:plain

最後にこういう状態に遷移したら
ビルド完了です。Juliaの開発環境が
整ったLinuxコンテナが起動したことに
なります。
f:id:sy4310:20210320212129p:plain

8. JuliaとGitの動作確認

ビルドが完了したところで、まずはJuliaの
動作確認をしてみましょう。ターミナルから
Juliaを実行して、このようになればOKです。
f:id:sy4310:20210320212518p:plain

続いてGitの確認もしておきましょう。
git --versionコマンドを実行して、この
ようになればOKです。
f:id:sy4310:20210320212314p:plain

まとめ

VSCodeの拡張機能であるRemote - Containersを
使って、Julia用開発環境を閉じ込めたDocker
コンテナを立ち上げる手順を紹介しました。
下記の手順に従えば、自分のローカルを極力
汚さずに好みの仮想環境を構築できます。

  1. VSCodeをインストール
  2. Remote - Containersをインストール
  3. Dockerをインストール
  4. プロジェクト用ディレクトリを用意
  5. Dockerfileの作成
  6. devcontainer.jsonの作成
  7. Dockerコンテナのビルド
  8. JuliaとGitの動作確認