Microsoft Teamsのアプリを作るときに必要なManifestファイルの解説

Microsoft Teams用のアプリを作るときに必要なManifestファイル。この内容について、英語のドキュメントしか見つけられなかったので、要点だけですが日本語でまとめました。
参考：https://msdn.microsoft.com/en-us/microsoft-teams/schema

# Manifestファイルとは?
Microsoft Teams用のアプリを作るとき、そのアプリの概要を記載するJSONファイルです。JSON Schemaは<a href="https://statics.teams.microsoft.com/sdk/v1.0/manifest/MicrosoftTeams.schema.json">こちら</a>に記載されています。このManifestファイルとアイコン画像をまとめて、Teamsアプリのパッケージとするわけです。

Manifestファイルとアイコン画像をまとめた、Teamsアプリのパッケージのサンプルは<a href="https://github.com/OfficeDev/Microsoft-teams-docs/blob/master/teams/FullAppPackage.zip">こちら</a>にあります。解凍すると、Manifestファイルのサンプルとアイコン画像のサンプルがあることが確認できると思います。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/209818/4a162400-ee9c-b6d4-db86-64c927fabaaa.png)

# Manifestファイルの大事なところ
JSON Schemaとサンプルを見れば、概要はわかると思います。一つ、重要な概念としては、基本的にTeams用のアプリはWebアプリであり、そのWebアプリのURLをManifestファイルに記載するという点ですね。何点か、重要なパラメータをピックアップして下記に記載します。

### "id"
<b>Microsoft App ID。</b>Microsoft Bot Frameworkを使用している場合、もしくはTeams用のウェブアプリがすでにMicrosoftにサインインしている場合、すでにMicrosoft App IDを持っていると思いますので、そちらを記載してください。Microsoft App IDを持っていない場合、Microsoft Application Registration Portal(<a href="https://apps.dev.microsoft.com/">こちら</a>)で「アプリの追加」を行えば、新しくMicrosoft App IDを作ることができます。ここで作成したMicrosoft App IDは、今後Botを追加したくなったときにも、Bot用に同じものを利用できます。ちなみにローカル環境でテストするだけでしたら、適当なGUIDを入力するだけでも良かったりします。

### "name"
<b>アプリの名前。</b>かっこいい名前を付けましょう。Office Storeに登録するときもこちらの名前を使います。"short"には30文字しか入らないので、アプリの名前が長いときは、"full"にアプリの名前のフルバージョンを記載しましょう。

### "description"
<b>アプリの説明。</b>わかりやすい説明を書きましょう。"name"と同じく、Office Storeに登録するときは、こちらと同じ情報を記載する必要があります。"short"には80文字しか入りませんが、"long"には4000文字入るので、説明に漏れがないよう気を付けましょう。


### "icons"
<b>アプリのアイコン。</b>20x20の白/透過PNG画像と、96x96のフルカラーPNG画像の2つを用意し、そのパスを記載します。

### "staticTabs"
<b>デフォルトでアプリにピン留めされているタブ。</b>後述の"configurableTabs"は、アプリの設定画面を表示することができますが、こちらはそのような設定画面を表示しません。この"staticTabs"は複数のタブを用意することが可能です。また、逆に"staticTabs"が必要ない場合、この項目は不要です。
パラメータとして、以下のものを持ちます。

- "entityId": タブを識別するためのユニークID
- "name": 表示されるタブの名前
- "contentUrl": タブ内で表示したいコンテンツのURL。Httpsである必要があります
- "websiteUrl": ユーザーがブラウザで見たい場合のURL。↑と同じでも問題ないと思います
- "scopes": アプリのスコープ。ここで設定した範囲のみで、"staticTabs"は表示されます。大きく分けて"personal"と"team"の二種類がありますが、"staticTabs"では<b>現段階では"personal"しかサポートしていません。</b>"personal"にした場合、ユーザはアプリバーにおいて、もしくはアプリがBotアプリの場合Botアプリとの1:1の会話において、これらタブを見ることができます

### "configurableTabs"
<b>設定画面を持つタブ。</b>"configurableTab<b>s</b>"とありますが、現段階ではこのタブは一つしか指定できません。 "configurableTabs"も、不要な場合、省略することができます。
パラメータとして以下のものがあります。ここで気付くと思いますが、"staticTabs"と違い、"entityId"やら"name"やら"contentUrl"を記載する必要がありませんね。これは、なぜならば、これらのパラメータは、"configurationUrl"で表示される画面において設定されるからです。ユーザの入力に応じて、これらのパラメータを適宜変更するのです。そのうえで、タブの中身を呼び出すのです。これら、"configurationUrl"における処理は、JavaScriptを通して行われます。

- "configurationUrl": 設定画面として表示されるコンテンツのURL
- "canUpdateConfiguration": タブの設定をアップデート可能かを示すBoolean。デフォルトだと"True"です
- "scopes": アプリのスコープ。"staticTabs"と異なり、"configurationTabs"では<b>現段階では"team"しかサポートしていません。</b>"team"にした場合、チームにタブとしてアプリを追加した時にこのタブを見ることができます

### "bots"
<b>Botの設定。</b>アプリがBotアプリ(Botを伴うアプリ)の場合に記載します。長くなるので、また別途解説いたします。Botを使わない場合、省略可能です。

### "permissions"
<b>アプリの権限。</b>ここにアプリが要求する権限を書きます。現在はユーザの情報を利用するのに必要な"identity"、チームメンバーへメッセージを送るのに必要な"messageTeamMembers"の二つが設定できるようです。どれも使わない場合、このパラメータは省略可能です。

### "validDomains"
<b>タブのコンテンツのURLとして用いられるドメイン。</b>今までタブのパラメータとして様々なURLを記載してきたと思いますが、それらのドメインをここでリストする必要があります。逆に、ここに記載されているドメイン以外のURLは無効となります。*.example.comといった書き方も可能です。

# まとめ
文字だらけになってしまった…Microsoft Teams用アプリのManifestファイルの要点を記載しましたが、これらの情報はTeamsのアップデートによって変更となる可能性もあるので（特に"scopes"周りとか）、お気を付けてください！