Twilioで開発を始める前に知っておくこと（クレデンシャル編）

:::note alert
2023年5月1日を持ちまして、株式会社KDDIウェブコミュニケーションズのTwilioリセール事業が終了したため、本記事に記載されている内容は正確ではないことを予めご了承ください。
:::

# はじめに

みなさん、こんにちは。
Twilioエバンジェリストの高橋です。

今回は、これからTwilioを使う方（使い始めている方にも）に知っておいてほしい、**APIクレデンシャル**について説明します。

# APIクレデンシャルとは

TwilioはAPIのサービスなので、皆さんからのRest APIコールを受けて色々なことができます。電話をかけたりSMSを送ったりするだけでなく、たとえば電話番号を購入したり、保有している電話番号の一覧を取得したり、ログを確認したりすることが可能です。
RestAPIでできることは、[こちら](https://jp.twilio.com/docs/iam/api)のドキュメントにまとまっています。

当然ですが、RestAPIを利用するためには**認証**が必要です。TwilioではAPIの認証に**BASIC認証**を利用しています。

```sh
curl -G https://api.twilio.com/2010-04-01/Accounts \
    -u '[YOUR ACCOUNT SID]:[YOUR AUTH TOKEN]'
```
上の例は、保有しているアカウントのリストを取得するためのRest APIです。たとえば、作成したサブアカウントの一覧などもこのAPIを使うと取得が可能です。サブアカウントについては、[こちら](https://qiita.com/mobilebiz/items/29f0e0faba0721f8a01e)の記事を御覧ください。

このCurlの`-u`オプションがBASIC認証となり、Twilioでは、**AccountSid**がユーザーID、**AuthToken**がパスワードとして利用されます。このあたりは皆さんよくご存知ですよね。

# テストクレデンシャル

実際の開発現場では、開発中にRest APIをテストしたいことがあります。そこで、テストするたびに料金が発生してしまうことを防ぐために用意されているのが、**テストクレデンシャル**です。
テストクレデンシャルは、以下の場所から確認が可能です。

- 管理コンソールを開きます。
- Dashboardの**設定**メニューの中の**一般**を開きます。

![テストクレデンシャル.png](https://qiita-image-store.s3.amazonaws.com/0/86046/493f381a-d1a8-ce6a-0f39-b1963efa5e8a.png)

ここに書かれているACから始まる文字列がAccountSidの代わりに使えます。また、その下の目のアイコンを押すとテストクレデンシャルのAuthTokenも表示されます。

## テストクレデンシャルにおける制限事項

テストクレデンシャルでは、本来のAccountSidなどを利用したときと比較して、以下の制限事項があります。

- 実際に電話がかかったり、SMSが送られることはありません。
- 電話番号の購入もされません。
- テストが可能なAPIは以下の３つのみです。
 - 電話番号の購入
 - 電話の発信
 - SMSの送信
- `from`パラメータを指定する場合、実際に購入した番号は利用できません。  

上記以外のAPIコールをテストクレデンシャルで実行すると、`403 Forbidden`のエラーが返ります。

## マジックインプット

RestAPIのテストでは、あえてエラーを発生させることでエラーのハンドリングのテストをしたいときがあります。そのときに使うことができる特別な番号を**マジックインプット**と呼びます。
Twilioにはテストクレデンシャルを使ったテストで利用が可能なマジックインプットとして以下の番号を用意しています。

| 値 | 概要 | エラー コード |
|--:|:--|:--|
| +15005550000 | 利用できない電話番号です。 | 21422 |
| +15005550001 | 無効な電話番号です。 | 21421 |
| +15005550006 | 利用できる有効な電話番号です。 | エラーはありません。 |

# APIクレデンシャルの扱いについて

すでに説明したように、Twilioにおけるクレデンシャル情報はとても大切なものです。とくにAuthTokenについては、絶対に他の人には知られてはいけません。万が一知られてしまうと、最悪の場合ご自分の購入したポイントを使い果たすまで電話をかけられたり、SMSを送られてしまうことになります。
ハッカソンイベントなどでチーム開発をしているときに、GitHubなどにクレデンシャル情報が書かれた状態のコードをアップしてしまう事象に遭遇することがあります。ハッカソンではなくても、割とTwilio開発の初心者にはよく見られます（何を隠そう、僕も昔GitHubで公開しちゃったことがあります）。
USのTwilioチームは定期的にこのような事象を確認してはメールで通知をしてくれますが、まずは自分でしっかりと管理することが大切です。
APIクレデンシャルのうちAccountSidは変更できませんが、AuthTokenは変更することができます。万が一、AuthTokenが漏洩してしまった場合は、速やかに変更するようにしてください。

# APIキーについて

ところで皆さん、APIキーってご存知でしょうか？
APIキーは、**APIクレデンシャルの代わりに利用できるクレデンシャル**です。すなわち、RestAPIの発行時に認証情報として利用ができます。
APIキーはいくつでも生成することができますし、一部の機能を制限したキーを生成することも可能なので、システムごとにAPIキーをうまく使い分けて利用するとよいでしょう。ただし、あまりAPIキーを発行しすぎると管理が面倒になるだけでなく、どれかのキーペアが漏洩した時点で不正アクセスされてしまうリスクが増大しますので注意してください。

## APIキーの発行手順

APIキーは以下の方法で生成、削除が可能です。

- 管理コンソールを開きます。
- 電話番号（Phone Numbers）メニューを開き、**ツール**メニューを選択します。
- さらに**APIキー**を選択すると、現在作成したAPIキーの一覧が表示されます。
- 赤いプラスアイコンを押すと、新しいAPIキーを作成する画面が表示されます。

<img width="910" alt="スクリーンショット 2019-03-06 10.06.55.png" src="https://qiita-image-store.s3.amazonaws.com/0/86046/2624213f-dd24-85d4-af62-0486dfc98caa.png">

- APIキーにはわかりやすい名前をつけておきます。
- 種別は「Standard」と「Master」のいずれかが選択できます（Standardを選択した場合は、アカウント管理などの操作ができません）。
- **APIキーを生成する**ボタンを押すと、作成したキーの確認画面が表示されます。
- ここに表示される**SID**がAccountSid、**SECRET**がAuthTokenの代わりに使えます。SECRETについては、以後確認することができませんので、必ず安全な場所に保管してください。
- 最後に**完了しました**にチェックを入れて、**終了**ボタンを押せばAPIの作成は完了です。

# 環境変数を使おう

GitHubに誤ってアップしてしまう事故を防いだり、Qiitaなどにクレデンシャル情報を公開しないためにも、コーディングの際には極力環境変数を利用して、クレデンシャル情報をハードコーディングしないようにしましょう。
環境変数については、それぞれの言語ごとに指定方法が違いますし、便利なライブラリなどがあったりしますので、そちらを調べてください。

# まとめ

- クレデンシャル情報はRestAPIの認証キーです。
- AuthTokenは更新することができます。
- テストクレデンシャルを利用すると、一部のAPIのテストができます。
- APIキーをうまく利用しましょう。
- クレデンシャル情報をハードコーディングしないように十分気をつけましょう。

---
### Twilio（トゥイリオ）とは

https://twilio.kddi-web.com
Twilioは音声通話、メッセージング（SMS/チャット）、ビデオなどの 様々なコミュニケーション手段をアプリケーションやビジネスへ容易に組み込むことのできるクラウドAPIサービスです。初期費用不要な従量課金制で、各種開発言語に対応しているため、多くのハッカソンイベントやスタートアップなどにも、ご利用いただいております。