ABEJA Platform CLIを非対応のWindows10で使えるようにしてみた

# はじめに
本記事はWindows10(Python 3.7.3)でABEJA Platform CLIを使用する為に実施した設定作業の記事です。

Windowsでの使用はサポート外ですが、私の環境では一部の処理以外は正常に動作しています。

正常に動作しない処理は`run-local`です。モデルの作成やデータのアップロードなどの基本的な処理は正常に動作しています。（2019/04/24時点）

全てのCLIを試していないので断言はできませんが、おそらくローカル環境にDockerが必要なCLIが正常に動作しないのだと思われます。（`Docker Desktop for Windows`はインストール済だが正常に動作しない。Windows独自の機能...Hyper-Vなどの影響？）

一部の機能が正常に動作しないことで、Windowsにこだわって使用するかどうか悩むと思いますが、本記事ではABEJA Platform CLIのインストールスクリプトの解析結果と、それを踏まえたうえでの私の考え・方針なども記載しておりますので、その辺を御覧いただく事でご自身で使用の可否を判断できるかと思います。

# ABEJA Platform CLIのインストールスクリプトの解析結果

[マニュアル](https://developers.abeja.io/cli/overview/#インストール)を見ると、下記コマンドを実行する事でインストールが完了するようです。

```
$ curl -s https://packagecloud.io/install/repositories/abeja/platform-public/script.python.sh | bash
$ pip install abejacli
```

`pip install abejacli`は全OS共通の処理内容だと思われますので、分析するべきは1行目の`curl`で処理しているインストールスクリプトだと判断しました。

[インストールスクリプト](https://packagecloud.io/install/repositories/abeja/platform-public/script.python.sh)を分析した結果、処理の内容は`pip.conf`という設定ファイルに`extra-index-url`(複数のPython Package IndexのベースURLを扱う際に必要な設定)を追加するのが目的のようでした。

その理由はおそらく、ABEJA Platform CLIのリポジトリはデフォルトの`https://pypi.python.org/simple`ではなく、`https://packagecloud.io/abeja/platform/pypi/simple`に存在するからだと思われます。

このスクリプトの処理の内容をWindowsに適応する場合、下記の両者のギャップを埋める必要があることが分かりました。

※両者: WindowsとCLIのサポート内OS(MacOS, Linux)

- 設定ファイル名が異なる(Windows: `pip.ini`)
- 設定ファイルの配置場所が異なる(Windows: `%APPDATA%\pip\pip.ini`)
- Windowsに`bash`がない

# 考え・方針
インストール処理の大枠は下記のとおりです。

1. `pip.ini`に`extra-index-url`の設定(2行程度のコード)を追加
2. 決められた場所に`pip.ini`を保存
3. `pip`を使用してABEJA Platform CLIをインストール

Windowsには標準で`bash`がなく、スクリプトで処理されている内容が手作業でも簡単に短時間で出来ることから、手作業で実施することにします。

クリティカルな作業はなく、操作や設定を誤ったからといって何かが壊れることもないと思われます。
設定を元に戻す場合も、ファイルやフォルダの削除や`pip`のアンインストール処理を実行するだけで良いでしょう。

Pythonは仮想環境を作ることも可能ですが、CLIを使うために毎回仮想環境を起動するのは面倒なので、仮想環境は作らない方針です。
仮想環境を作る場合は[コチラの内容](https://packagecloud.io/abeja/platform-public/install#virtualenv)を参照とのことなので、本記事の内容では正常に動かないかもしれません。

最後に大事な事ですが、Windowsはサポート外なので、「問い合わせが受け付けられない」、「解決されない」、「修正されない」ことを覚悟の上で実施しています。

# インストール

## pip.iniの設定

本作業は[マニュアル](https://developers.abeja.io/cli/overview/#インストール)に記載されている下記コマンドの処理のWindows版を手作業で実施しています。

```
curl -s https://packagecloud.io/install/repositories/abeja/platform-public/script.python.sh | bash
```

### `pip.ini`の作成（配置場所含む）
`pip.ini`は何処にでも配置しておけばよいわけではなく、決められた場所が存在します。

デフォルト設定は`%APPDATA%\pip\pip.ini`です。既に存在する場合はそのままで構いませんが、存在しない場合はファイルやフォルダを新規作成して作りましょう。

※`%APPDATA%`のデフォルトは`C:\Users\[ユーザー名]\AppData\Roaming`。コマンドプロンプトで`set`を実行することで確認可能。

### `pip.ini`の作成

`pip.ini`に以下の内容を追加で入力して保存します。

```
[global]
extra-index-url=https://packagecloud.io/abeja/platform-public/pypi/simple
```

## ABEJA Platform CLIのインストール

下記コマンドを実行してABEJA Platform CLIをインストールします。

```
pip install abejacli
```

インストールが終わったら、下記コマンドを実行してCLIの初期設定をします。
参考: [ABEJA Platform CLI - 概要 - 初期設定](https://developers.abeja.io/cli/overview/#初期設定)

```
abeja configure
```

初期設定が終わったらCLIが実行できる状態になりますので、CLIの動作確認をします。
動作確認の為の処理は何でも構いませんが、私の場合は無難にモデルの情報取得処理を実行して確認しました。

```
abeja model describe-models
```

下図のようにCLIの結果が返ってきたら、インストールは完了です。
![キャプチャ02.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128060/84d07208-bdeb-9ef7-c345-9de7ba2894a8.png)


# 最後に
今回は職場の環境がWindowsのみなので、あえてWindowsにこだわってみました。

これから機械学習に関わる人達の中には同様の事情の方も少なくないと思います。素直にGUIで操作すればよい話かもしれませんがCLIを使いたいシーンもあるでしょう。

そういう方々の参考になればと思い本記事を書きました。お役に立てれば幸いです。

ただ、最近ではWindowsからLinuxの環境を簡単に構築できるのも確かです。VMwareやWindows Subusystem for Linuxを使ってLinux環境を構築したり、LinuxベースのオンラインIDEを使うのも1つの手段でしょう。（Dockerの使用が面倒なものもあるかもしれませんが...）

OSがWindowsだからといってWindowsに固執せず、色々な選択肢を視野に入れる事も大切かもしれません。