VS Code 用プラグイン Microsoft Teams Toolkit が GA リリース 🎉 

こんにちは、みなさん元気にお過ごしでしょうか？
ここ一年ほど、[一連のブログ記事(英語)](https://dev.to/azure/developing-enterprise-ready-microsoft-teams-apps-with-teams-toolkit-v30-o87)で Teams Toolkit プレビュー版を紹介してきましたが、今回、[Visual Studio Code 用 Teams Toolkit](https://marketplace.visualstudio.com/items?itemName=TeamsDevApp.ms-teams-vscode-extension) と Teams Toolkit CLI が GA (Generally available) リリースになったことをお知らせします。そして、.NET の Web アプリを構築している方のための Visual Studio 用 Teams Toolkit がプレビュー版で利用できるようになりました。Build カンファレンスでの発表も聞いていただけたでしょうか？ 
![tomomi-build-annot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/663749/b0f88f60-8ab4-2f24-16de-ccb1ec510630.png)
さて、プレビュー版以来、多くのアップデートや改善が行われていますが、この記事では VS Code のための Teams Toolkit の主要な新機能のいくつかについて紹介します。
![Doodles illustrating the summary of Teams Toolkit](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2ff193v85f0butylm0ix.png)

## 🎞 シナリオベースの Teams アプリの紹介

本リリース以前の Teams Toolkit プレビュー版では、[タブ](https://docs.microsoft.com/microsoftteams/platform/tabs/what-are-tabs?WT.mc_id=m365-66412-timura)、[Bot](https://docs.microsoft.com/microsoftteams/platform/bots/what-are-bots?WT.mc_id=m365-66412-timura)、[メッセージ・エクステンション](https://docs.microsoft.com/microsoftteams/platform/messaging-extensions/what-are-messaging-extensions?WT.mc_id=m365-66412-timura) など、Teams の基本機能をベースにしたアプリのテンプレートコードが提供されていました。

しかし、現実にアプリを設計する際には[リアルライフ・シナリオ](https://docs.microsoft.com/en-us/microsoftteams/platform/overview-story?WT.mc_id=m365-66412-timura)に基づいて製品を設計をするのが普通でしょう。

リアルなシナリオとは、例えばこのように「旅行系サービスを作っているのエンジニアが旅程にあわせて天気予報の通知を送るアプリを作りたい」などというようなユーザ・ストーリーがあげられます。
![developer-scenario.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/663749/8ccb2024-71eb-d89b-2e20-82c8b4a54a15.png)

ですので今回のGAリリースでは、既存の基本機能テンプレートに加え、シナリオベースの Teams アプリテンプレートを追加しました。

以下は、新しく追加された機能になります。

### 🤖 Bot 通知

チャットボットアプリや Teams アプリが通知を送信するというのはよくあるシナリオでしょう。しかし従来の Teams アプリにおけるボット通知の開発プロセスは正直言って面倒なものでした。ですのでこれをもっと楽にするために。今回りリースされた Toolkit では、生成されたコードを微調整することでアプリの通知機能を作成できるようになりました。

Teams Toolkit で新規アプリを作成するとき、このように。シナリオベースの Teams アプリの下にある **Notification bot** をクリックすると、Toolkit が通知を送信するボットを作成するための雛形を生成します。
![Screenshot of Teams Toolkit on VS Code showing the app creation with bot notification menu](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7zmroxq1rcw72kuvwfpl.png)

メッセージのイベントは、トリガーまたはタイマーで指定できます。もし、ボットに定期的なリマインダーを送信させたい場合は、タイマートリガー (Timer Trigger) を選択します。
![Screenshot of Teams Toolkit on VS Code showing the app creation with bot notification trigger options](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yj69miy1ze3f2yju4vpa.png)

JavaScript と TypeScript の選択ができますが、たとえば前者を使用している場合、`source/adaptiveCards/notification-default.json`というファイルを見て、JSONでメッセージの構造を指定している箇所を確認してください。シンプルなテキストだけでなく、リストやテーブル、ボタンなどを使ってメッセージを表示することもできます。

また、JSON が Adaptive Card としてどのように表示されるかをライブでプレビューすることもできます。プレビューするには、**Preview and Debug Adaptive Cards** と書いてあるところをクリックするか、VS Code extension を入手してください。
![Screenshot of Teams Toolkit on VS Code showing Adaptive card viewer](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kowaeke5j3kvnk9y27pe.png)

また、`src/timerTrigger.js` (Timer ベースの通知用)では、送信するメッセージが Adaptive Card にどのように適用されるかを見ることができます。文字列を変更してみて、Teams クライアントでどのように動作するか見てみましょう。
```js
for (const target of await bot.notification.installations()) {
    await target.sendAdaptiveCard(
      AdaptiveCards.declare(notificationTemplate).render({
        title: 'Aloha! This is your daily reminder.',
        appName: 'Contoso Bot',
        description: `This is a sample time-triggered notification (${timeStamp}).`,
        notificationUrl: 'https://www.adaptivecards.io/',
      })
    );
  }
```
F5 デバッガでこの bot アプリを実行すると、予定した時間に bot から通知が届きます。
![Screenshot of a bot sending a message on Teams client](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jbbqb6pap9hi39anewpu.png)
Bot でできることはまだまだあります。

### 💬 コマンド Bot

もう一つの典型的なシナリオは、コマンドに応答するボットでしょう。会話型の複雑なボットを想像するかもしれませんが、ほとんどの場合において必要なのはいくつかのコマンドに応答するシンプルなボットでしょう。たとえば他のサービスに見られる「スラッシュ・コマンド」もこのひとつになるでしょう。

Toolkit を使えば、これまでよりも簡単にコマンドボットを作成することができます。

Teams Toolkit の **Create a new Teams** アプリをクリックした後、メニューから **Command bot** を選択し、残りの作業を行います。

テンプレートコードが生成されたら、`commandHandler`関数を参照してください。例えば、JavaScript を選択した場合、`bot/src/helloWorldCommandHandler.js` というファイルが生成され、トリガーとなる単語と応答メッセージが表示されます。

このハンドラを変更して（あるいは新しいハンドラを作成して）、コマンドを作成することができます。
```js
class HelloWorldCommandHandler {
  triggerPatterns = 'Hi kitty';

  async handleCommandReceived(context, message) {
 // 返答メッセージを adaptive card で表示
    const cardData = {
      title: 'MeowBot 🐱 says',
      body: 'Meow meow meow',
      image: 'https://placekitten.com/500/400',
      imageAlt: 'cat'
    };
    return MessageBuilder.attachAdaptiveCard(helloWorldCard, cardData);
  }
}
```
そして、Adaptive Cards プレビューアーを使って応答メッセージの UI を `bot/src/adaptiveCards/helloworldCommand.json` で定義します。

これで、ユーザーがボットに「Hi kitty」とメッセージを送ると、ボットが応答するようになります。この例ではこのコマンドの通りでないとボットが返答しませんが、特定の単語を含むだけとか、大文字小文字を問わない、などと条件をつけたい場合は、正規表現などを使うといいでしょう。
![Screenshot of a bot responding to the command from a user on Teams client](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s357fd8ys0fn4iqo3cf7.png)

---

## 📬 Outlook と Office 用にアプリを拡張

もう一つの嬉しいニュースは、Teams アプリが Outlook と Office 上でも動作するようになったということです。

新しいアプリを作成する際、以前のバージョンの Toolkit では1つの機能しか選択できませんでしたが、新しい Toolkit では、より多くの選択肢が増えました。

Outlook や Office のような他の M365 製品上で動作するアプリを作成するには、**Extended Teams app across Microsoft 365** から1つを選択します。これは、役に立つコードテンプレートとサンプルを含む雛形コードを生成します。
![Screenshot of Teams Toolkit on VS Code showing the create menu](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/up9b0td6nql6kpmpo0n3.png)
「F5」デバッグ機能は、VS Code でコードをテストしているときの強い味方。そして今、Teams Toolkit のデバッグプロファイルには Outlook と Office が含まれており、どちらかを選択するだけでアプリの実行を確認することができます。
![Screenshot of Teams Toolkit on VS Code showing the debug menu](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qy0jp4aeqq4nxwcrckv0.png)

![Screenshot of Teams and Outlook where the app is running](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e386gtaee8uqvy0vz6rc.png)

---

## 📢 Teams 開発に関するその他の更新情報

Teams や M365 アプリの開発関連でさらにアップデートがあります。

### 📜 Teams SDK v2 & Manifest の更新

Teams クライアント SDK は、タブやタスクモジュールを作成し、タブの設定やテーマの検出、認証などの機能を備えています。この SDK は v2 にアップグレードされ、最新バージョンでは Outlook や Office で動作するTeams アプリを拡張する機能が搭載されています。

また、新しい Teams Toolkit ユーティリティは、Teams-js SDK v1 を使用している既存のアプリを SDK v2 にアップグレードすることができ、インポートと API コールが更新されています。

Toolkit は、Office および Outlook をサポートするために、Teams マニフェストを最新のスキーマに修正することもできます。

### 🖼 タブを使ったアプリに特化した Fluent UI コンポーネント・ライブラリ

タブアプリ（Teams の Web埋め込み）を作成する際、アプリの UI を Teams と同じ様なインターフェイスにするための **Teams UI Component Library** というライブラリが用意されています。
[Teams UI Component Library](https://github.com/OfficeDev/microsoft-teams-ui-component-library) は、**Fluent UI React** の上に構築された UI ライブラリです。Fluent はマイクロソフトのデザインシステムで、すべての M365 に対応したUIライブラリのセットを提供します。

そして、そのベースとなるコンポーネントライブラリである [Fluent UI React](https://github.com/microsoft/fluentui) がv9にバージョンアップし、デザイン・トークンに対応し、パフォーマンスが大幅に改善されました 🎉

---

この記事を読んで、Teams Toolkit を使った Teams アプリ開発を始めるきっかけになれば幸いです。特に Teams アプリ開発初心者の方は、ぜひ参考にしてみてください。

また、コメントやフィードバックもお待ちしております。

それではまた、次の記事でお会いしましょう 👋

## 📚 Learn More

- [Teams Toolkit ドキュメント](https://docs.microsoft.com/microsoftteams/platform/toolkit/teams-toolkit-fundamentals?WT.mc_id=m365-66412-timura)
- [Get started with Microsoft Teams platform](https://docs.microsoft.com/microsoftteams/platform/get-started/get-started-overview?WT.mc_id=m365-66412-timura)

### 📢 Shoutout
この記事を書くにあたって、いろいろ助けてくださったみなさん、特に Teams Toolkit エンジニアチーム、そして Yu Zhang、Zhidi Shang、John Miller、Zhenya Savchenko、Pierce Boggan （敬称略）ありがとう ❤️

原文の英語で読みたい方はこちら
[Microsoft Teams Toolkit for VS Code is now GA 🎉](https://dev.to/azure/microsoft-teams-toolkit-for-vs-code-is-now-ga-4830)