VSCodeのRemote ContainersでABEJA Platformの学習コードをデバッグする方法


# はじめに

プログラムを作る際に、デバックを迅速に行えることは重要です。Visual Studio CodeがDockerコンテナ内のリモートデバッグ機能をサポートしたということで、早速ABEJA Platform上で学習コードをデバッグしてみました。本記事ではその方法について説明します。なお、本記事はプラットフォームの使い方を一通り学んだ方を対象とし、用語の説明などは省略します。

# VSCodeのインストール

2019年5月現在、VSCodeのRemote Containers機能は、VSCodeではなく、VSCode Insidersという新機能をいち早く試せるバージョンでしか利用できませんので、そちらを[ダウンロード](https://code.visualstudio.com/insiders/)して利用しましょう。Macならば以下でも使えるらしいです。

```
$ brew cask install visual-studio-code-insiders
```

# RemoteContainerをインストール

以下をインストールするだけです。

![Kobito.MpAUCe.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146529/23196343-fc79-8f4b-22b0-c7bae405f92c.png "Kobito.MpAUCe.png")

# Dockerfileの作成

以下のようなDockerfileを作成しましょう。`USER_ID`、`TOKEN`、`ORGANIZATION_ID`はプラットフォームのコンソールに表示されているものを使いましょう。`DATASETS`は学習データセットのIDを入れます。

```
  1 FROM abeja/all-cpu:18.10
  2
  3 ENV ABEJA_PLATFORM_USER_ID user-XXXXXXXXXXXXXXXXXXXXX
  4 ENV ABEJA_PLATFORM_PERSONAL_ACCESS_TOKEN XXXXXXXXXXXXXXXXXXXXXXXXXXX
  5 ENV ABEJA_ORGANIZATION_ID XXXXXXXXXXXXXXXXX
  6 ENV DATASETS '{"train":"XXXXXXXXXXXXXXX"}'
  7
  8 RUN pip install -U abeja-sdk abejacli
  9
 10 RUN mkdir /app
``` 

# Docker Containerを立ち上げ

ここではコードが`/home/user/workspace`に保存されていることとしましょう。対象のディレクトリをマウントしてコンテナを立ち上げておきます。

```
$ docker build -t platform_container .
$ docker run -it --rm -v /home/user/workspace:/app platform_container:latest
```

# コンテナ内にアクセス

VSCode Insidersを起動し、F1から`Remote-Containers: Attach to Running Container`を選択し、先ほど起動したコンテナを選択します。すると、新しくVSCodeの画面が立ち上がります。

![Kobito.rZQ8ev.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146529/dbd64528-264b-20b0-725a-3ee0b3aa01ec.png "Kobito.rZQ8ev.png")

![Kobito.JphPt8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146529/32863a2e-9d1a-cf51-9114-2d0dd6380405.png "Kobito.JphPt8.png")

# プロジェクトの初期設定

先ほどコードを`/app`にマウントしたので、`File`の`Open...`メニューから、そのディレクトリを開きましょう。以下のような画面になっているかと思います。

![Kobito.lPFK1v.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146529/2cea1426-09b0-af06-0707-80620e0a4f74.png "Kobito.lPFK1v.png")

Pythonのデバッグをするために、PythonのExtensionをインストールしましょう。

![Kobito.CGnxO3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146529/b2836dde-91e8-718f-d065-bcf077fd6cf6.png "Kobito.CGnxO3.png")

続いて、ABEJA Platformの仕組みでデバッグするためにConfigurationを設定します。以下のメニューを選択し、Pythonを選択しましょう。

![Kobito.Be9ECU.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146529/7d9849e6-b049-bee1-9ac8-4af581acf7df.png "Kobito.Be9ECU.png")

![Kobito.F2yqij.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146529/a6335d36-fc5f-352a-73b5-c16e53d4c241.png "Kobito.F2yqij.png")

すると、`launch.json`の編集画面に移るので以下のように修正します。

```json
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: Current File",
            "type": "python",
            "request": "launch",
            "program": "/usr/local/bin/abeja-model",
            "args": ["train", "--handler", "main:handler"],
            "console": "integratedTerminal"
        }
    ]
}
```

# デバッグの実行

準備はできたので、F5を押してデバッグできます！

![Kobito.hYT2Lh.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146529/0020097b-5781-5432-ce8b-3380699dd8a2.png "Kobito.hYT2Lh.png")

# まとめ

VSCodeを使ってABEJA Platformのコードをデバッグする手順について書きました。良きABEJA Platformライフを！