Haskell
IntelliJ
docker

Docker + IntelliJ で楽に実行環境を構築する

以前から、IntelliJにはDockerを扱うDocker integrationプラグインが存在しましたが、久しぶりに触ったら随分扱いやすくなっていました。
ちょうどHaskellの実行環境を構築する必要があったので、導入してHaskellで"Hello world"するまで、手順をまとめてみます。

実行環境

ソフトウェア バージョン
IntelliJ community edition 2017.3
docker for mac 18.03.1-ce-mac65

Docker integration の導入

Preferences > Plugins > Install JetBrains plugin を開き、docker integrationと入力すると、対象が表示されます。
スクリーンショット 2018-05-19 21.41.39.png

インストール済みなのでボタンが表示されませんが、右側のウィンドウに"Install"ボタンがあるので導入します。

Dockerへの接続

プラグインの導入後、Dockerクライアントへの接続を設定します。
Preferences > Build,Execution,Deployment > Docker を開き、+ボタンをクリックして接続設定を追加します。
Docker for macを利用しているのであれば、設定を追加した時点で接続設定は構築されます。(すごい便利)
スクリーンショット 2018-05-19 21.48.43.png
以前はsocketで接続設定を書いていたんですが、随分と改良されました。Dockerのソケットはデフォルトではunix:///var/run/docker.sockになるので、Docker for macを利用していない方はそちらを設定すれば大丈夫です。
正常に接続できていれば、ウィンドウ下部にConnection successfulと表示されます。

Docker管理用GUIを表示し、Imageをpullする

この時点で、IntelliJからDockerのImageのpullや、Containerの管理が可能になります。
command + shift + a から dockerのツールウィンドウを開きます。
スクリーンショット 2018-05-19 21.59.38.png
起動中・停止中のContainerや、取得済みのImageを一覧できます。新しくImageをpullする場合は、Imageを選択後、一番左上のボタンをクリックします。
スクリーンショット 2018-05-19 22.10.13.png
デフォルトではdocker-hubのレジストリが選択されています。今回はそのままでいいので、Repositoryに必要なImageのリポジトリ名を入力します。
新たにContainerを起動する場合は、対象のImageを右クリックしてCreate Containerから作成できます。

Run時にDocker Container上で実行する

Run/Debug Configurations を開き、Container上で実行するConfigrationを書いていきます。左上の+ボタンをクリックし、Docker > Docker Imageを選択します。
スクリーンショット 2018-05-19 22.25.15.png

Serverには"Dockerへの接続"項で設定した接続を指定し、ImageIDやコンテナ名を設定していきます。
コードを変更した時は即時Conainer側にも反映されるようマウント設定を書く必要があるので、Bind mountsにマウント設定を記述し、加えてCommand line optionsにWorkingDirectoryのオプションを設定しておくと良いです。
Commandに実際に実行したいコマンド(今回ならsandbox.hsをrunghcする)を記述します。最終的に実行されるコマンドがCommand previewに表示されるので、コンソールで実現する際にどのようなコマンドが等価なものであるか確認できます。

設定が完了したら、OKをクリックして設定を適用し、実行してみましょう。
スクリーンショット 2018-05-19 22.29.35.png
無事実行されました。

まとめ

DockerだけでなくDockerComposeなどにも対応しているので、ますますIntelliJから離れられなくなりそうです。
さくっと新しい言語を試したいとき、環境構築で苦しみたくないのは全エンジニアの願いですね。