アプリ マニフェストで Microsoft 365 ホスト ランタイム要件を指定する
注:
アプリ マニフェスト (以前は Teams アプリ マニフェスト) で Microsoft 365 ホスト ランタイム要件を指定する機能は、 パブリック開発者プレビューにあります。
Microsoft Teams個人用タブまたはメッセージ拡張アプリをアプリ マニフェスト バージョン 1.13 以降を使用するようにアップグレードすると、既定で他の Microsoft 365 アプリケーション ホストで使用できます。 ただし、アプリに特定のホストでまだサポートされていない機能も含まれている場合は、アプリが部分的にしか読み込まれず、予期しないユーザー エクスペリエンスが発生する可能性があります。
たとえば、アプリ マニフェスト スキーマ バージョン 1.17 で定義され、ボットの設定を表すボットと構成タブが含まれているアプリを考えてみましょう。 アプリは Outlook と Microsoft 365 (Office) アプリに読み込まれますが、ボット自体を持たないユーザーにのみボット構成タブを表示します。
高品質のアプリ エクスペリエンスが目的のユーザー ベースに到達するようにするには、アプリ マニフェストでアプリのランタイム要件を指定します。 これにより、該当する Microsoft 365 ホストでの動作を調整したり、サポートする準備ができていないコンテキストでの表示から除外したりできます。
アプリのランタイム要件の指定は、次のようなシナリオで役立ちます。
一方向の依存関係: 1 つのアプリ機能の唯一の目的がアプリで別の機能をサポートする場合は、プライマリ アプリの機能が読み込まれている場合にのみ表示されるようにすることができます。 たとえば、アプリにタブ拡張機能とメッセージ拡張機能の両方が含まれており、ユーザーがメッセージ拡張機能を構成するための設定ページとしてタブ機能が含まれている場合は、メッセージ拡張機能をサポートしていないホストに設定タブが読み込まれないことを指定できます。
相互依存関係: アプリに、正常に機能するために一緒に読み込む必要がある特定のアプリ機能がある場合は、すべての機能をサポートする Microsoft 365 ホストでのみアプリを 使用 できることを確認できます。 たとえば、タブ、ボット、およびメッセージ拡張機能がすべて連携してアプリのコア ユーザー シナリオをサポートする場合は、それらの機能を常に一緒に読み込むか、まったく読み込まないように指定できます。
機能の要件: アプリに、特定の Microsoft 365 ホストでサポートされていないランタイム要件を持つ機能がある場合は、それらのホストで実行されているアプリ エクスペリエンスから 、それらの機能が (読み込まれたが機能しないではなく) シームレスに省略 されるようにすることができます。 たとえば、各ダイアログとして開くことができる項目のタブベースのダッシュボード ビューがアプリに含まれており、各ダイアログにボットに送信される情報が含まれている場合は、アプリが特定のホストに読み込むのに必要な主要な機能としてボットベースのダイアログを指定できます。
Microsoft 365 ホストのサポート
次の Microsoft 365 ホスト アプリケーションでは、アプリ マニフェストでランタイム要件を指定する機能がサポートされています。
Microsoft 365 ホスト アプリケーション | Web | Desktop | Mobile |
---|---|---|---|
Teams | ✔️ | ✔️ | ✔️ |
Outlook | ✔️ | ✔️ (新しい Outlook のみ) | ✔️ |
Microsoft 365 (Office) | |||
Microsoft 365 Copilot |
アプリ機能間のリレーションシップを指定する (elementRelationshipSet
)
をアプリ マニフェストに含 elementRelationshipSet
めることで、アプリの個々の機能間のリレーションシップを指定できます。 このオブジェクトを使用して、 一方向の依存関係 とアプリの機能間の 相互依存関係 の両方を指定します。
次のアプリ マニフェスト機能は、一方向または相互の依存関係を持つと指定できます。
- タブ: 個人用 (
staticTabs
) と構成可能 (configurableTabs
) - 個々のコマンドを含むメッセージ拡張機能 (
composeExtensions
) - ボット (
bots
)
各アプリ機能は、ボット、静的タブ、id
および構成可能なタブid
とメッセージ拡張機能にマップbotId
される、entityId
新しく導入された プロパティによって定義されます。 Teams とその他の Microsoft 365 ホストは、1 つの構成可能なタブ、1 つのメッセージ拡張機能、またはその両方を含むアプリをサポートします。 ホストのサポートがこれらの機能の複数のインスタンスに対応するように拡張されている場合、プロパティは id
アプリの将来性を証明します。
重要
作成するリレーションシップが、次の検証規則に準拠していることを確認します。
- で
elementRelationshipSet
指定する要素は、アプリ マニフェストに定義を含める必要があります。 たとえば、element
commandId
(一致するid
値を持つ) アプリ マニフェストに対応する定義がないオブジェクトのoneWayDependencies
セクションにまたは リストされているdependsOn
場合、マニフェスト検証エラーが発生します。id
で認識するには、 またはcomposeExtension
でconfigurableTab
プロパティを指定するelementRelationshipSet
必要があります。 - 特定の機能のセットは、 または
oneWayDependency
によってのみグループ化できますが、両方でmutualDependency
グループ化することはできません。 たとえば、一方向の依存関係 (A はB に依存) と相互依存関係 (A と B は相互に依存) の両方を指定すると、 A は B リレーションシップに依存するが 2 回表されるため、マニフェスト検証エラーが発生します。 - 循環的な一方向の依存関係は許可されません。 たとえば、A の指定は B リレーションシップに依存 し、B は A リレーションシップに依存 すると、マニフェスト検証エラーが発生します。
一方向の依存関係
配列を oneWayDependencies
使用して、アプリの 1 つのコンポーネントが別のコンポーネントに依存するケースを記述します。 配列内のオブジェクトごとに、依存コンポーネント () と依存するコンポーネント (element
dependsOn
) を指定します。 また、特定のアプリ機能のサポートを必要とする個々のコマンドを指定することもできます。 これらの機能がランタイム ホストでサポートされていない場合、ユーザーは使用できません (ただし、他のすべてのコマンドが実行されます)。
次の JSON スニペットは、ボットに対する一方向の依存関係を持つ特定のメッセージ拡張コマンドを示しています。
"elementRelationshipSet": {
"oneWayDependencies" : [
{
"element" : {
"name" : "composeExtensions",
"id" : "composeExtension-id",
"commandIds": ["exampleCmd1", "exampleCmd2"]
},
"dependsOn" : [
{"name" : "bots", "id" : "bot-id"}
]
}
]
}
相互依存関係
配列を mutualDependencies
使用して、目的の関数をサポートするために一緒に読み込む必要があるアプリ機能をグループ化します。 配列内の各オブジェクトは、相互に依存するアプリ機能のセットを表します。 次の JSON スニペットは、相互に依存するボット、静的タブ、メッセージ拡張機能、および構成可能なタブを示しています。
"elementRelationshipSet": {
"mutualDependencies" : [
[
{"name" : "bots", "id" : "bot-id"},
{"name" : "staticTabs", "id" : "staticTab-id"},
{"name" : "composeExtensions", "id" : "composeExtension-id"},
{"name" : "configurableTabs", "id": "configurableTab-id"}
]
]
},
特定のアプリ機能のランタイム要件を指定する (requirementSet
)
個々のアプリ機能定義内で、 を使用して特定の TeamsJS ランタイム要件を requirementSet
指定できます。 これにより、アプリ機能は、重要な TeamsJS 機能をサポートする Microsoft 365 ホストでのみ読み込まれます。
、、および bots
のランタイム要件として、次の TeamsJS 機能をcomposeExtensions
staticTabs
指定できます。
- HTML ベースのダイアログ (
dialog.url
) - Bot Framework の HTML ベースのダイアログ (
dialog.url.bot
) - アダプティブ カード ダイアログ (
dialog.adaptiveCard
) - Bot Framework のアダプティブ カード ダイアログ (
dialog.adaptiveCard.bot
)
次の JSON スニペットは、ホストがタブとボットから呼び出される HTML ダイアログ (TeamsJS v1.x ではタスク モジュールと呼ばれます) をサポートする必要がある静的タブを示しています。
"staticTabs": [
{
"entityId": "idForPage",
"name": "Display name of tab",
"contentUrl": "https://contoso.com/content?host=msteams",
"contentBotId": "Specifies to the app that tab is an Adaptive Card Tab. You can either provide the contentBotId or contentUrl.",
"websiteUrl": "https://contoso.com/content",
"scopes": [
"personal"
],
"requirementSet": {
"hostMustSupportFunctionalities": [
{"name": "dialogUrl"},
{"name": "dialogUrlBot"}
]
}
}
],
コード サンプル
サンプルの名前 | 説明 | JavaScript |
---|---|---|
要件のターゲット: 一方向の依存関係 | アプリ機能間の一方向の依存関係を指定する方法を示すサンプル アプリ。 | 表示 |
要件のターゲット: 相互依存関係 | アプリ機能間の相互依存関係を指定する方法を示すサンプル アプリ。 | 表示 |
関連項目
Platform Docs