Microclimateローカル版でアプリケーションの開発を試す

# Microclimateとは

Microclimateは、IBMが公開しているアプリケーション開発環境です。ひっそりβ版が公開されていましたが、つい最近ひっそりβがとれたようです。

あまり情報が公開されていないので私の独自調査によると、まず、ローカル版とKubernetesのHelm版があります。ローカル版は、

- ポータル
- コードの雛形生成（Java,Node.js,Swift）
- エディタ
- ビルドツール
- アプリケーションランタイム
- モニタリングツール
- Git連携機能

がセットになっているようです。Helm版はこれに加え、

- GitLab
- Jenkins

も合わせてデプロイされますので、ちょっとしたCI/CD環境をすぐに使い始めることができる、ということです。

今回はローカル版を試してみます。

検証環境
- Mac OS
- Docker Community Edition 18.03.0-ce

# 手順

## インストール

公式サイトからダウンロードします。

> https://microclimate-dev2ops.github.io/gettingstarted

現時点では`microclimate-18.03.zip`というファイルがダウンロードできます。これを解凍します。

```
$ unzip microclimate-18.03.zip
$ cd microclimate-18.03/cli
$ ./install.sh
```

Dockerイメージのビルドやダウンロードが始まります。通信状況によってはかなり時間がかかりますので待ちましょう。しばらく待つと次のようなメッセージが出ます。

```
=====================

INSTALLATION COMPLETE

Microclimate has been successfully installed.

Add Microclimate to your $PATH by running one or more of the following commands.

echo 'export PATH="$PATH:/Users/teru/.microclimate"' >> /Users/teru/.bash_profile

Note: These will not reload automatically. Use 'source [ Your file location ]' to reload the path.
For example I would use 'source ~/.bashrc' to reload my .bashrc file.

Alternatively you can run '~/mcdev COMMAND'
```

言われたとおり、PATH環境変数にホームディレクトリの`.microclimate`を追加しましょう。

## Microclimateの起動

次のコマンドを実行します。-oオプションは開始後に自動でブラウザを開くという意味です。

```
$ mcdev start -o
```

すると初回はDockerのネットワーク設定や必要となるイメージのプルなどが始まります。これも時間がかかる場合があるので、気長に待ちましょう。次のメッセージが出れば起動完了です。

```
Creating microclimate-jmeter-init       ... done
Creating microclimate-theia-init        ... done
Creating microclimate-file-watcher-init ... done
Creating microclimate-portal            ... done

Microclimate has been started at http://localhost:9090

Waiting for Microclimate to start
```

先ほど -oオプションを付けたので、ブラウザが自動で開かれているはずです。あるいはブラウザで直接 http://localhost:9090/ アクセスしてください。

## ポータルの表示

初回は利用規約への合意画面が出ますので合意してください。すると、ポータル画面が表示されます。個人的にはすでに日本語化されていることに驚きました。

<img width="1291" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/241424/704e76b6-e7da-2ee4-d2b3-e7c4346cf0f9.png">

最初は何もないので新規プロジェクトを作成するか、既存プロジェクトをインポートします。インポートの場合はGit、ローカル、アーカイブから選択できます。

<img width="1082" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/241424/dd9ab388-7eac-268a-df1f-fde6e7ad2186.png">

## プロジェクトの作成

今回は新規プロジェクトを選んでみます。今のところ、Java、Node.js、Swiftが選べます。今回はとりあえずJavaで。ちなみにプロジェクト名ですが、英小文字と数字しか受け付けてくれません。-や_のような記号は駄目ですし、大文字も駄目です。この制約は結構きついです。

<img width="1177" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/241424/d8f209ce-9113-ac7d-f70f-11e42453fca4.png">

次に進むとフレームワークの選択をします。個人的な趣味でSpringを選びます。

<img width="1191" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/241424/1eda8388-ee9a-9c74-5d28-223197755f0b.png">

作成ボタンを押すとすぐにプロジェクトの生成が終わります。それではコードの編集をしてみましょう。

<img width="1188" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/241424/e7bafe2e-99eb-a6e5-fd9e-feaa2aeb0972.png">

## コードの編集

コードの編集に進むとWebIDEが開きます。ファイルを見ると、Spring BootのPOMや、Dockerfile、Jenkinsfileなどが自動生成されているのがわかります。

<img width="1290" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/241424/090be570-8718-2c8c-615b-15d7368a721c.png">

もちろんここではコードの修正が可能です。

## ビルド・ログ

ビルドログを見ると、Mavenによるビルドが自動で入っていることがわかります。エラーがなければアプリケーションも自動起動します。

<img width="1273" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/241424/355d701f-27ad-bf3b-f96d-b5bab06843fc.png">

## アプリケーションを開く

アプリケーションの実行結果が表示されます。

<img width="1288" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/241424/541496a7-2da3-3ed3-c130-5d7cbb21f207.png">

これだとなんだかわかりませんので、URL欄のパスに/v1/を付けてみます。実は先ほど自動生成されたソースでは、このURIで簡単なメッセージを出力するようになっています。

<img width="934" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/241424/420d0b4c-c3bf-170f-3956-577347d4cb31.png">

## アプリケーション・ログ

アプリケーションのログ出力を見ることができます。

<img width="1281" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/241424/99c61f2b-246e-614a-e889-f0ebe8e82846.png">

変なコードがたくさん出ているのは、出力時に文字色を変えるエスケープだと思われます。残念ながらこの画面では色は変わらないようです。

## アプリケーション・モニター

CPUやメモリの使用状況や、リクエスト数、スループットなどを見ることができます。これは便利ですね。

<img width="1285" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/241424/114067c4-af25-d07a-b43e-28ac08fdeb16.png">

## ロードの実行

アプリケーション・モニターの画面からロードの実行をすることできます。ボタンを押せば次のように自動的に負荷をかけることができます。

<img width="1198" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/241424/3b41ebb3-ded0-178b-79a9-276094e8cc5b.png">

なお、HTTP Incoming Requestsがちょっと変ですね。時系列が他のグラフと合っていないように見えます。これはご愛嬌。

ここでかけた負荷は、プロジェクトフォルダのload-test/TestPlan.jmxで定義されています。こういった雛形が自動生成されているのはうれしいですね。

<img width="1194" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/241424/8a391458-0c5a-0ba5-1a11-7d06bc7f6cb1.png">

## Git連携

変更したファイルはGitでの管理が可能です。

<img width="349" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/241424/5b20ac8a-7983-ff54-df87-c6ee9c2e1db4.png">

# 感想

最低限開発に必要なものは揃っているという印象です。コードや各種設定ファイルがある程度自動生成されるのも便利です。ただ、それ以外は、本格的なCI/CDツールとは比べることはできません。特にWebIDEはやはり本格的な開発には貧弱すぎます。しかし、それは今回Javaを選択したからというのもあります。私見ですが、この手のツールは、開発言語にNode.jsを採用すると一気に化けます。今後どう機能拡張していくのか、引き続き見守ってみたいと思います。

後日Helm版の方も検証してみます。