1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Adaptive Cards を React で表示する

Last updated at Posted at 2023-02-23

Adaptive Cards は JSON 形式でカード状の UI コンテンツを取り扱う仕様です。マイナーなフォーマットではありますが、Microsoft Teams の WebHook でも採用されているので見覚えがある方もいらっしゃるのではないでしょうか。1

Adaptive Cards は Microsoft が主導してはいますがオープンな仕様であり、各種プラットフォームにもライブラリが提供されています。本稿では React 向けのポートである adaptivecards-react をご紹介します。2

デモページ

実際に adaptivecards-react を利用したサンプルプロジェクトを用意してみました(React + TypeScript + Vite + SWC)。3

adaptivecards-react-example.jpg

見ていただければ分かるように、adaptivecards-react は React 上に要素を出力するところまでを担当しており、Fluent UI に則ったデザインが適用されている訳ではありません。Adaptive Cards は配信先のアプリで周囲の環境に適応した UI へ変換されることを期待していますので、React プロジェクト側のスタイルに合わせれば良いでしょう。

adaptivecards-react の使用方法

使用方法は非常に単純で、Adaptive Cards の JSON を payload 属性に、フォント等のコンフィグを hostConfig 属性に設定するだけです:

<AdaptiveCard payload={card} hostConfig={hostConfig} />

注意点として、v1.1.1 時点で peerDependencies として "react": "^17.0.2" が指定されており、React 18 プロジェクトにはうまく導入できません。本稿の執筆動機は「Adaptive Cards ってオープンな仕様っぽいけど他にはどこで使われてるんだろ~? おっ React でも使えるじゃん! 試してみよう」くらいのノリです。正式リリースが約一年前の React 18 に非対応となると、実プロジェクトでは採用を迷うべきでしょう。なお、本流の adaptivecards は継続的にメンテナンスされているようですので、Adaptive Cards を利用したい場合はこちらを使用できます。

参考リンク

  1. その他 Outlook のアクション可能メッセージや Cortana さん、Windows タイムラインなどで利用可能ですが、いずれもメジャーになりきれなかったり廃止されたりしています。

  2. この他にはバニラ JS 用の adaptivecards や、サードパーティ製の Vue 2/3 向けポートである adaptivecards-vue が存在します。

  3. 完全に余談ですが、このデモの制作で Vite + SWC パターンを初体験しました。小規模プロジェクトとはいえ噂に違わぬ爆速さ! で驚いてしまいました。また、GitHub Actions を利用した GitHub Pages へのデプロイもほぼコピー&ペーストで済むよう整備されており、開発者体験の良さが感じられました。今後のプロジェクトでも積極的に採用したいですね。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?