RubyからArukasのAPIを実行できるgemを作った

# はじめに

この記事は、さくらインターネットさんが提供している[Arukas](https://arukas.io/)のAPIをRubyから実行できるようにしたときの備忘録です

なお、作成したものは[gem](https://rubygems.org/gems/arukas)としてリリースしています

ソースコードは[こちら](https://github.com/S-H-GAMELINKS/arukas)

# きっかけ

仕事の関係でWordPressなどを簡単にデプロイして試せる環境が欲しいなぁとアレコレ探していたのが事の発端。

で、さくらインターネットさんの[Arukas](https://arukas.io/)があったことを思い出し、Arukasを試してました。

Dockerイメージを使ってデプロイできるので便利だったんですが、一気に複数のアプリを作成したりがちょっと辛かった……（いや、GUI操作で簡単にデプロイできるので非常に便利なんですけどね）
仕事で使いたかったのは、「一気にパパーっと複数のDockerイメージをデプロイしたい」感じだったので……

というわけで、その辺をよしなにできるgemを作ろうと思ったのが作りはじめたきっかけです

# つくったもの

![arukas_wp.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191521/3a93e460-fb8c-9861-79fd-cb1d7462ef88.gif)


自作した[arukas](https://github.com/S-H-GAMELINKS/arukas)を使うことで上記のように簡単にWordPressをデプロイできます

ちなみに、WordPressをデプロイしたときのソースコードは[こちら](https://github.com/S-H-GAMELINKS/arukas_wordpress)

基本的には`JSON`ファイルで設定を書いて、`Ruby`で作成した`JSON`を読み込んでPOSTリクエストで送るだけでアプリを作成できる

アプリの起動とかは、アプリ作成時のレスポンスを受け取ることで処理できたりする


# やったこと

基本的には[Arukas API Reference](https://arukas.io/en/documents-en/arukas-api-reference-en/)を読みつつ、[rest-client/rest-client](https://github.com/rest-client/rest-client)でAPIへのリクエスト処理を書いただけ

`PATCH`と`POST`処理周りで`422`エラーが起きてたりしてややこしいことになったりもしたけども……

とりあえず、全APIを実行できるように実装はしてある

# 今後

とりあえず、仕事で使える感じにはなったので必要に駆られたときにだけメンテナンスするかなー？

あと、どこかの勉強会とかで実装時のアレコレとか話しても面白いかもね

# 参考

[Arukas API Reference](https://arukas.io/en/documents-en/arukas-api-reference-en/)
[rest-client/rest-client](https://github.com/rest-client/rest-client)
[【Microsoft Flow】Arukas アプリ作成時にハマったこと（API 認証編）](https://qiita.com/r-wakatsuki/items/0c0d3b1e3b1848ac975a)

# オマケ
## Arukasへのデプロイチュートリアル

実際にArukasへデプロイするチュートリアルです。デプロイするのは`nginx`を使います

まず、必要なgemをインストールします

```shell
gem install arukas rest-client 
```

次に、適当なディレクトリを作成して、そのディレクトリへと移動します

```shell
mkdir hoge
cd hoge
```

次に、デプロイする`nginx`の`JSON`を作成します

```json:nginx.json
{
    "data":{
      "type": "apps",
      "attributes": {
        "name": "myapp"
      },
      "relationships": {
        "services": {
          "data": [
            {
              "lid": "1",
              "type": "services"
            }
          ]
        }
      }
    },
    "included": [
      {
        "lid": "1",
        "type": "services",
        "attributes": {
          "command": "",
          "custom-domain": "",
          "image": "nginx",
          "instances": 1,
          "ports": [
            {
              "number": "80",
              "protocol": "tcp"
            },
            {
              "number": "443",
              "protocol": "tcp"
            }
          ],
          "environment": [
          ],
          "subdomain": ""
        },
        "relationships": {
          "service-plan": {
            "data": {
              "type": "service-plans",
              "id": "jp-tokyo/free"
            }
          }
        }
      }
    ]
}
```

次に、デプロイを実行する`deploy.rb`を作成

```ruby:deploy.rb
require 'arukas'

arukas = Arukas::API::new("ARUKAS_JSON_API_TOKEN", "ARUKAS_JSON_API_SECRET")

json = File.read("test.json")
arukas.create_apps(json)
```

`ARUKAS_JSON_API_TOKEN`、`ARUKAS_JSON_API_SECRET`はArukasの[設定画面](https://app.arukas.io/settings)内の`APIキー`から簡単に発行した`Token`と`Secret`を貼り付けてください

あとは、ターミナルで`ruby deploy.rb`を実行すれば`nginx`がArukasにデプロイされています