【RESTクライアント】Insomniaをおすすめする記事

今までRESTクライアントはAdvanced REST clientを使っていたのですが、不満なことが何点かあって[Insomnia REST](https://insomnia.rest/)に乗り換えました。

そうしたらあまりに便利だったので、（あわよくばユーザが増えることを期待して）おすすめポイントをいくつか紹介したいと思います。




# 1. ワークスペースでAPIリクエストを管理できる

ディレクトリ単位でAPIリクエストを管理するクライアントはよくあると思うのですが、InsomniaだとWorkspace単位で管理＆変更が可能です。

<img width="865" alt="スクリーンショット 2020-01-26 21.34.00.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/391127/c73093fa-de10-68e6-e176-41ec63a8c503.png">

紫色のWorkspace名のプルダウンからワークスペースを変更したり、新規に作成することができます。

これで案件毎にリクエストや環境変数を簡単に管理することが可能です。


# 2. ワークスペース毎に環境変数が設定可能

Insomniaの独特な機能として環境変数（environment）が挙げられます。

例えば他のRESTクライアントだと、localや環境毎に内容は同じでドメイン名だけが違うAPIリクエストをわざわざ作る必要がありました。
これだと作成するのも管理するのも大変です。

```
http://localhost:8080/api/v1/items/1234 // local用
https://dev1.example.com/api/v1/items/1234 // develop用
https://hoge.example.com/api/v1/qiita1234 // production用
```


insomniaだとWorkspace毎に環境変数を設定することができ、さらにボタン一つで切り替えることができます。

そして以下の画像のように環境変数を使用してリクエスト先のURLを書くことによって、わざわざ環境毎に異なるリクエストを作成する必要がなくなるのです。

<img width="1010" alt="スクリーンショット 2020-01-29 9.20.15.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/391127/f6c0939a-cfff-f237-d042-5e1445e322b9.png">

また環境変数はjson形式で簡単に書くことができるので管理も簡単です。

<img width="926" alt="スクリーンショット 2020-01-26 21.51.32.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/391127/64d6208b-e78f-aa89-0d10-7d377a88fea2.png">




# 3. curl→Insomnia, Insomnia→curl（＆その他）への変換が便利

## curl→Insomniaへの変換

オプションがたくさんついたcurlコマンドだけを渡されて、それを開発で使用するためにRESTクライアントに手作業で入力するような経験をしたことある方は結構いらっしゃるのではないでしょうか。（~~自分は二度とやりたくないです~~）

insomniaだとcurlコマンドをコピペするだけで、自動でAPIリクエストに変換してくれます。

例えばこんな感じの見るだけで嫌になってくる長いcurlでも

```
curl --request PATCH --url http://localhost:8080/api/v2/items/57fa3d27abea2033c44b --header 'accept: text/html,application/xhtml+xml' --header 'accept-language: en-US,en;q=0.5' --header 'authorization: Bearer xxxxxxxxxxx' --header 'content-type: application/json' --data '{"title": "hoge_title","body": "sample body","status": "editing"}'
```

ぺっとコピペするだけで簡単に変換してくれます。

![ezgif-3-b692cae500f0.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/391127/f1b26aee-1581-66a3-eaaa-cac96dae8246.gif)

ただしAuthorizationヘッダは`--header`で設定している関係か、AuthタブではなくHeaderタブに挿入されるようなのでその点は注意してください。


## Insomnia→curl（&その他）への変換

チームメンバーに自分の使っているAPIリクエストをcurlに変換して共有する場面は多々あると思います。
Insomniaでももちろんその機能が存在します。

共有したいリクエストを選択し`Copy as Curl`をクリックするだけでcurlコマンドがクリップボードにコピーされ、あとは適当なところにペーストするだけで簡単に出力することが可能です。

![スクリーンショット 2020-01-29 12.09.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/391127/e41149ac-a98d-d2a8-749e-6d9bd3c88f1f.png)

ここまでは他のRESTクライアントでもよくある機能ですが、Insomniaでは各プログラミング言語で直接ソースコードを出力することが可能です。

![ezgif-3-c5ed29d0d592.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/391127/245f58f4-ead1-30de-3d90-2f855e4070b4.gif)

このように（多少手直しは必要ですが）お手軽にソースコードを生成することができます。
~~私は一度もこの機能を使ったことないですが…~~


# 4. APIリクエストのヘッダに設定したアクセストークンやセッションを自動更新

Web APIの開発においてAuthorizationヘッダにアクセストークンを入れて認証・認可したり、セッションを使用したりすることは多いと思います。
しかしそれらの有効期限が切れるたびに取得用のAPIを叩いて、リクエストのヘッダーにセットして…というのは非常に面倒です。
Insomniaならこれを自動化することができます。

Authタブを開き、使用したい認証を選択します。（今回はBearer）
TOKENの欄に`Request => Header`を選択し、入力された値をクリックするとTagの編集画面が開きます。

<img width="538" alt="スクリーンショット 2020-05-16 16.46.15.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/391127/cab02506-b95b-e6e1-7d62-1e8155737b10.png">

この画面でどのAPIリクエストのレスポンスやヘッダーを参照するかなどを選択することができます。
（画像ではgetAccessTokenがダミーのためLive Previewがエラーを出しています）

<img width="869" alt="スクリーンショット 2020-05-16 16.36.39.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/391127/2a962145-6056-5c3d-23c5-682a2dca17a0.png">


またトークンを自動更新することもでき、`Trigger Behavior`で設定可能です。
設定値は三項目あり、ヘッダーの値を取得する際のトリガーを設定することができます。

* Never：自動更新しない
* NoHistory：トークンの有効期限切れなどでエラーの応答が返ってきたら更新する
* Always：常に更新する

今回はレスポンスのヘッダーから情報を取得しましたが、この機能はかなり自由度が高く、ヘッダー以外にもレスポンスのBody部やリクエストからも値を選択することが可能です。

# 5. ワークスペースを丸ごと全部共有する

Insomniaでは自分の作成したエンドポイントや設定データなど全てのデータをワークスペース単位で共有することが可能です。
この機能を使えば、新規に案件にジョインした人に全てのエンドポイントやそれを叩くのに必要な設定を網羅した構築済みのRESTクライアントを共有する、なんてことが簡単にできるのです。

メニューから`Import/Export`を選択し、`Data`タブの`Export Data`から`Current Workspace`を選択すると、このようにどのAPIを共有するかを選択する画面が表示されます。

<img width="852" alt="スクリーンショット 2020-05-16 16.56.12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/391127/3ef9d9ff-a244-9db0-434b-1735649769d1.png">

選び終わったら右下の`Export`ボタンを押し、ファイル形式（json, xmlなど）を選択すれば簡単に共有用のデータを作成できます。

取り込む際は同じく`Import/Export`の`Data`タブから`Import Data`の`From File`を選択し、共有したいデータを選ぶだけでワークスペースを取り込むことができます。


# 最後に

Insomniaは普段からコードエディターやIDEなどを使っている人にとってはとても取っ付きやすく、またUIも洗練されており欲しいところに欲しい機能があるため、使い慣れるととてもストレスフリーになります。
強いて欠点を挙げるとすれば、全ての機能を使おうとすると若干ラーニングコストがかかることぐらいですかね。

また公式のドキュメントやチュートリアルが画像付きで丁寧に整備されており、読みやすいのも特徴です。
どのツールを使用するにしてもわからないことを検索すればちゃんと答えが返ってくる環境が整っているということは、使いやすさの次ぐらいに大切なことです。

[公式ドキュメント](https://support.insomnia.rest/)

少しでもストレスフリーな開発をするためにも、自分が「良い！」と思えるツールに出会うための一助になれれば幸いです。

[Insomnia REST](https://insomnia.rest/)