Amazon Chime のチャット機能でどんなことができるのか確認する

# 1. Amazon Chime とは
* [Amazon Chime](https://docs.aws.amazon.com/ja_jp/chime/) とは、AWSで提供されているコミュニケーションサービスです
* このサービスはいわば Zoom や Microsoft Teams のAWS版といえるようなサービスで、チャット、オンラインミーティング、ビジネス通話などの様々な機能を提供するサービスです
* 今回は Amazon Chime のチャット機能に注目し、具体的にどのようなことができるのかを少し調べてみようと思います

# 2. 紹介記事
 Amazon Chimeの紹介記事を探してみると、以下のようなものがありました。サービスの概要はここである程度わかると思います。

https://business.ntt-east.co.jp/content/cloudsolution/column-59.html

# 3. 基本的なドキュメント
* [ユーザーガイド](https://docs.aws.amazon.com/ja_jp/chime/latest/ug/chime-using-chat.html)
* [管理者ガイド](https://docs.aws.amazon.com/ja_jp/chime/latest/ag/what-is-chime.html)
* [SDK/APIリファレンス](https://docs.aws.amazon.com/ja_jp/chime/latest/APIReference/welcome.html)

Amazon Chime SDK は Amazon Chime の機能を拡張したり、自前のアプリに組み込んだりするのに使えるそうです。今回記事ではSDKについては扱わず、素の Amazon Chime でどの程度のことができるかを確認します。以下、その内容となります。

# 4. Amazon Chime の始め方
## 4-1. 必要な管理ポリシー
　管理者は AmazonChimeFullAccess をつけておけばとりあえず使えます（少々乱暴ですが）。
詳細については下記ページに書かれています。

https://docs.aws.amazon.com/ja_jp/chime/latest/ag/security_iam_id-based-policy-examples.html

## 4-2. アカウントの作成
　まず、AWSのコンソールから Amazon Chime を選びます。まだ何もしていないため Account も作られていません。この "Account" というのはチャットの場を作成する管理者のような、あるいは参加するユーザ全体を管理するグループやチームのアカウントのような位置づけのようで、実際にチャット上で会話を行う "User" とはレベルが異なる存在のようです。このアカウントにはユーザ管理の考え方によって2種類あり、チームアカウントとエンタープライズアカウントがあります。チームレベルで使うのか、会社レベルで使うのかという違いです。後者はIdPやOkta SSOを使ってユーザ管理したいというような場合に使うようです。今回はチームアカウントで試してみます。

 https://docs.aws.amazon.com/ja_jp/chime/latest/ag/choose-team-enterprise-account.html
 
 create account のダイアログには「ユーザから見えるので見られたくないような情報を入れないように」と言うような意味のことが書かれています。チャットを使うチームの名前などを使っても良いかもしれません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2261111/6685f3af-7986-a21a-2ff5-59c18370053f.png)

　New account ボタンを押してアカウントを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2261111/7173c284-1aae-d588-7f7e-6021a08d0235.png)

 
　作成結果です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2261111/f0098750-720a-ed13-7fe4-51e99564e88d.png)

　アカウント名をクリックすると、アカウントごとのメニューが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2261111/0738dba8-0155-c1d0-7cdf-e8f266b58c3e.png)

　ここで可能な action は Rename と Delete です。
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2261111/f203bff1-eb98-0d21-bce3-bc9be77503ef.png)

## 4-3. アカウントからユーザを招待する
　メニューの Users > Users を選ぶとユーザ一覧画面になります。アカウントごとにその下で管理されるユーザということのようです。アカウントを作ったばかりなので当然ながらまだ一人もいません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2261111/cbfee002-e1fa-1d0d-8fcc-33099dec69b9.png)

 　invite users ボタンを選択し、チャット(というかチーム)に招待したい人のメールアドレスを入力します。そのメールアドレスに対して招待メールが送られます。セミコロンで区切って複数のアドレスを書いて良いようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2261111/ec091f46-3911-088f-b43b-66ce680e7a58.png)

招待したユーザは Users の一覧に追加されます。この時点ではまだ相手が承認していないので Invitation status は "Pending" になっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2261111/390eea98-a4fd-6fae-e53a-66cc535622ee.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2261111/3d5314f5-2f11-9e8e-cbfc-606577777093.png)

## 4-4. ユーザが招待を受け入れる
　ここからは、招待されたユーザ側からの視点になります。
招待されたユーザには下記のようなメールが来ます。このメールの Accept! ボタンを招待されたユーザが押せばユーザ登録の承認が完了します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2261111/d5820f41-b72a-58a2-bd16-d328c61b5d7b.png)

Accept! ボタンを押したユーザは下記のような画面に飛ばされます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2261111/2f6a3352-e3bc-7019-5edc-bd4e59c79909.png)
ここでクライアント用のアプリケーションをダウンロードするか、Web から利用するかを選択します。お好みで選択すればよいかと思います。アプリケーションのインストールは省略したいので Web アプリを選択すると、下記のようなサインイン画面へ遷移しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2261111/a78d06c0-15ff-3cc9-edb6-33311dfdd9e0.png)
メールアドレスを入力し "Sign in / Sign up" を押下します。

## 4-5. Amazonユーザとしてログイン（必要ならユーザ登録する）
すると、下記のようなログイン画面へ遷移しました。これは、このメールアドレスを使って(AWSではなく） Amazon のサイトで認証するためのようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2261111/4b82102f-0dde-f3bf-d5c3-21c49e00f44a.png)

ここがちょっと不思議なのですが、Amazon Chime でチャットに参加するユーザ（メールアドレスで識別される）は別途 Amazon アカウントとして登録される必要があるようです。

https://docs.aws.amazon.com/ja_jp/chime/latest/ug/create-account.html

>仕事用またはビジネス用のメールアドレスを使用して、無料の Amazon Chime ユーザーアカウントにサインアップしてください。その場合、招待された会議の自動通話を受信して、チャット機能を使用することができます。サインアップの所要時間はわずか数分です。また、Amazon Chime Pro の機能を 30 日間無料で利用できます。試用期間終了後は、Basic 権限で Amazon Chime を無料で利用できます。
>会議に参加してチャットだけを使いたい場合は、そこでやめてもかまいません。

　このAmazon Chime ユーザーアカウントは、登録されたメールアドレスでたまたますでに (Eコマースサイトとしての）Amazon.co.jp にアカウントを持っていると名寄せされて同一のアカウントとして認識されるようです。Amazon Chime ユーザとして登録されたメールアドレスで Amazon.co.jp のアカウントを持っている場合はそのままログインできますが、持っていない場合は、画面下の「Amazonアカウントを作成」ボタンを押して新たに Amazon ユーザアカウント登録をする必要があります。しかしここで新たに作成した Amazon ユーザアカウントで Amazon.co.jp を利用できるわけではないようです。不思議だなぁと思っていたら、実は (Amazon.co.jp ではなく本家アメリカの) Amazon.com の方にユーザアカウントが作られるようで、そちらでならEコマースサイトの利用も可能であるようです。これはこれで微妙な仕様ですが…ひとまず理解しました。

Amazonユーザとしてのログインに成功すると、下記のような画面に遷移します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2261111/0cc7e1a5-9e9b-0c0a-2898-235cfafea9fc.png)
この画面で「許可」ボタンを押すと、Amazon Chime の一般ユーザとしてのホーム画面が表示されます。

### 4-5-1. 【追記】Amazon.com ユーザアカウントを使いたくない場合
　アカウントの説明の所で書いたように、チームアカウントではなくエンターアカウントを作成し、DNSのドメインと紐づけて独自の ActiveDirectory サーバーなり Okta SSO なりを使ってユーザを管理するのであれば、Amazon.com にアカウントを作らなくても良いようです。会社で使う場合にはこちらの方が現実的な選択肢かも知れません。

https://docs.aws.amazon.com/ja_jp/chime/latest/ag/claim-domain.html

https://docs.aws.amazon.com/ja_jp/chime/latest/ag/active_directory.html



## 4-6. ホーム画面表示
招待されたユーザが Amazon Chime にログインすると表示される画面です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2261111/3e4c0894-c46c-7997-a43e-bc30320c7752.png)

## 4-7. チャットルーム作成
サイドバーに "Create a chat room" と書かれたボタンが見えると思います。これを押してみます。チャットルームを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2261111/c52aeef5-6f0f-d772-eb1d-fa5b726e644d.png)

チャットルームが作成されたところです。（※個人情報的な表示があるところに墨入れをしたのでなんだか見づらくなっていますがご容赦ください）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2261111/31d07536-dbdf-980b-23b2-7b8aeaf197e0.png)

ルームに一人しかいないので寂しい状態です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2261111/b8255b21-4ad5-c3f3-82f0-84af3459285c.png)

## 4-8. 他のユーザも召喚
　そこで、再度 AWSのチームアカウントの画面に戻り、他のユーザ（と言っても自分のGmailアドレス）も invite してみます。このユーザにも招待メールが届き、招待されたユーザが Accept! を押せば追加ユーザとして登録されます。その画面は先ほどと同じなので割愛します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2261111/4e38e747-6eae-559e-8065-5e63359872f9.png)

　新たに追加されたユーザは既にルーム内にいるユーザからチャット画面で検索し、チャットルームへ追加できます。ユーザ画面側から今登録された Gmail のメールアドレス（の自分）を召喚してみたいと思います。右上の三点メニューから "Add members" を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2261111/490e50f1-92f1-0ccc-b5fc-dbaa4e1c808d.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2261111/6798e6e9-488c-4313-79fb-c82cdfe4dc9f.png)


ユーザが追加されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2261111/e58f4392-f97a-3f2b-2506-913eec05798b.png)

Gmailの自分からチャットで話しかけられたところ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2261111/77c56701-3efe-444e-a297-d2e26ed11dc9.png)

Gmailアドレスのユーザ側から見るとこんな感じです。自分の発言が青い吹き出しになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2261111/9d18b143-b705-e973-c06f-c0b8f302b135.png)

　使い方の流れは Microsoft Teams や Slack と似たような感じなので、それらを使ったことのある人ならイメージはつかみやすいと思います。


# 5. その他の動作について確認する
　以上でチャット機能の一通りの流れは確認できたので、その他の細かい点について確認したいと思います。

## 5-1. 文字の修飾はどの程度できるのか？
マークダウンが使えるようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2261111/d5d4b1d4-ff5f-4dba-d3d4-facfc8b0699d.png)
イタリックと色付けは失敗しました。表は最初失敗したのですが、行間を空けてやり直したらOKでした。Teams チャットのようにExcelからコピペして表を作ってくれるような機能はありませんでした。
準拠している記法は↓こちらのようです。イタリックにはできないようなのですが…

https://commonmark.org/help/

## 5-2. 画像は貼れるか？
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2261111/8284a56d-5f15-8341-703d-b9cdbba62c17.png)
問題なくできるようです。ただし、１投稿に１画像しか貼れない模様。

## 5-3. いいね機能はあるか？
　自分の投稿に絵文字を入れる機能はありますが、他のユーザの投稿に「いいね」などの評価をつける機能はなさそうです。

## 5-4. 投稿を後から編集、削除はできるか？
　これが一番気になったのですが、投稿した本人でも後からの編集や削除はできないようです。管理者でも画面からの削除、編集は不可。APIにメッセージIDを渡さないと削除できないとのことで、削除機能が欲しかったらSDKで作りこむ必要があるようです。これはちょっとびっくりですね…

https://docs.aws.amazon.com/ja_jp/chime/latest/ug/delete-chat-messages.html

https://docs.aws.amazon.com/ja_jp/chime/latest/ag/message-settings.html

# 6. 費用は？
 公式情報はこちら

https://aws.amazon.com/jp/chime/pricing/

 利用した分だけ払う従量制なのですが、どうも計算方法がわかりにくい。
 >クレジットカードおよび AWS アカウントなしで、Amazon Chime を初めてご利用いただく場合、30 日間無料にて Amazon Chime Pro をお試しいただけます。30 日経過後は、Amazon Chime Basic 版を引き続き無料でお使いいただけます (制限なし)。また、料金をお支払いいただくことで、Amazon Chime Pro 版もお使いいただけます。

最初の30日無料なのはいいとして、Pro版ユーザとBasic版のユーザがあり Basic版のユーザは無料で使える。では、何をするとPro版ユーザになるのか。Business Calling機能を使って通話を行う、またはオンライン会議を主催する（ゲスト参加は無料）と有料になる模様。チャットをするだけならば無料で使えるように見えます。料金計算ツールには Amazon Chime SDK しか出て来ませんでした。


# 7. まとめ
ということで、Amazon Chime のチャット機能について調べた結果をざっとまとめます。

* チャット機能として、ルームを作って他のユーザを招待するといった最低限の機能は備えている
* Teams のチャットほどのリッチなUIはない。文字装飾はマークダウン記法にある程度対応している
* 「いいね」のような投稿への評価レスポンス機能はない
* 投稿をあとから編集したり、削除する機能はない。個人的にはこれが一番痛い。編集機能はともかく削除機能はつけて欲しかった
* 料金はチャットだけなら無料で使えるらしい
* ただし、チームアカウントの場合 AWSとは別に各ユーザが Amazon アカウントを作る必要がある
* Amazon アカウントを作りたくない場合はエンタープライズアカウントとして AD などと紐づけて管理する。

ということで、開発チームなどのグループがなんらかの事情で Slack や Teams は使えないけどAWSなら使えるという場合、代替手段として Amazon Chime のチャット機能を使うという選択肢はありかもしれないと思いました。

ということで、今回は以上です。
ここまでお読みいただきありがとうございました。