Copyright © 2019-2022 W3C® (MIT, ERCIM, Keio, Beihang). W3C liability, trademark and permissive document license rules apply.
この文書は、MiniAppと呼ばれるモバイルアプリケーションの新しい形式を紹介するものです。これは、Web技術に依拠しながら、 ネイティブアプリの機能とも統合する、非常に人気のあるハイブリッドソリューションです。
この節は、公開時点におけるこの 文書の位置づけを説明するものです。現在のW3C 公開物の一覧、およびこの技術報告書の最新版は、 W3C技術 報告書索引( https://www.w3.org/TR/)で確認できます。
この文書は、MiniApps作業 部会によって、 ノートトラックを用いた グループドラフトノートとして公開されました。
グループドラフトノートは、 W3Cまたはその会員によって承認されたものではありません。
これは草案文書であり、随時、他の文書によって更新、置換、または廃止される可能性があります。 この文書を進行中の作業以外のものとして引用することは不適切です。
W3C 特許 ポリシーは、 この文書について、いかなるライセンス要件またはコミットメントも伴いません。
この文書は、 2021年11月2日版W3Cプロセス文書に従います。
ネイティブアプリは日常生活で広く受け入れられていますが、ユーザーにとってまだ改善できる点が多くあります。
ユーザーがネイティブアプリからサービスを受ける前には、多くの場合、 ダウンロード -> インストール -> アプリ登録というプロセスを経る必要があります。
ストレージ容量の制約により、ユーザーがスマートフォンに保持できるネイティブアプリの数には限りがあります。
異なるネイティブアプリ間でデータを共有することは容易ではありません。
ネイティブアプリに取り組むには、開発者はいくつかの新しいプログラミング言語を学ぶ必要がある場合があります。
ネイティブアプリと同じサービスを提供するには、開発者は異なるプラットフォーム向けに重複した製品を 保守する必要がある場合があります。
Webはこれらの問題を回避する理想的なプラットフォームですが、まだ完全とは言えません。
ネイティブと比較すると、システムが提供する機能を活用することは容易ではありません。
また、類似するネイティブアプリに実際に匹敵する、またはそれを上回るパフォーマンスを持つWebアプリケーションを 設計することも、通常は困難です。
モバイルデバイスでは、ユーザーはブラウザーの外でサービスやコンテンツを取得することが多いため、当然ながら、 アカウント、ログイン状態、ユーザー操作について、システム全体で一貫したすべてのアプリケーションを望みます。
さらに、ユーザーがアプリケーションを本当に信頼している場合には、一部のデータをそのアプリケーションと共有したいこともあります。 しかし、現在のデバイスの個人用携帯電話番号や連絡先リストなど、頻繁に要求される情報の一部については、 Web上でユーザーが許可を与えるための良い方法がありません。
MiniAppは新しいモバイルアプリケーション形式であり、Web技術(特に CSSとJavaScript)に依拠し、ネイティブアプリの機能と統合するハイブリッドソリューションです。
スーパーアプリとは、他の アプリケーション(すなわちMiniApps)をホストしサポートして、プラットフォームのリソースを用いてそれらを実行できるようにする ソフトウェアプラットフォームです。
MiniAppsは、いくつかのスーパーアプリで使われたことにより普及しました。これは、Webとネイティブの間の隔たりを埋めるのに役立つ いくつかの特徴を備えて生まれたためです。
MiniAppsは、Progressive Web Applications(PWA)、ネイティブアプリ、またはWebを置き換えることを目的としているわけではありません。
大まかに言えば、これらの技術間の重要な違いの1つは実行 環境です。PWAはブラウザー内のほぼあらゆるWeb対応環境で実行できますが、MiniAppsは 特定のプラットフォームまたはスーパーアプリに束縛されます。もう1つの重要な違いは配布 方式であり、MiniAppsはパッケージ化され自己完結型であるのに対し、PWAのリソースはWeb全体に分散して配布されます。
コーディングの観点では、どちらの技術も類似したプログラミング言語、マークアップ言語、およびCSSベースのスタイルシートを使用します。 MiniAppsは、HTMLのサブセットに基づく専用のドメイン固有言語と、データバインディングおよびイベント管理のための特定の 仕組みを実装しており、Virtual DOM管理を伴うMVVMパラダイムに従います。MiniAppベンダーは、 HTMLに常に直接対応するものがあるとは限らない、類似したUI(User Interface)要素を定義しています。
サービスの観点では、PWAとMiniAppの開発者は、同じ目的と同等の機能を持つAPIにアクセスできますが、 正確に同じ仕様に従うわけではありません。
MiniAppベンダーは、自社のチャネルを通じたアプリのリリースおよび配布管理を目的とした専用APIを定義しています。 その他の専用APIは、具体的なシナリオと実行プラットフォームに結び付いています。たとえば、 デバイスのネイティブなアラームやカレンダー機能を用いてリマインダーを設定するサービス、電話をかけるサービス、 パフォーマンス警告をトリガーするサービスなどです。両方の技術には類似したAPIやサービスがありますが、 それぞれのアプリケーション種別におけるAPI仕様の間には大きな隔たりがあります。PWAは標準Web APIに依拠する一方で、 MiniAppsは、デバイス固有の機能やベンダー専用サービスなど、プラットフォームの機能を最大限に活用するために 非標準APIを実装します。
実装によっては、MiniAppユーザーエージェントはオペレーティングシステム、スーパー アプリ、または異なるさまざまなレンダリングエンジンや WebViewに基づくその他のホスティングプラットフォームであり得ます。MiniAppユーザーエージェントのアーキテクチャは、 次の図に示すように、PWAユーザーエージェントとは異なります。
付録の比較表は、Progressive Web Applications(PWA)と各種MiniApp実装との 違いを識別し、強調しています。これらの違いの一部を次の表にまとめます。
| 機能 | Progressive Web App | MiniApp |
|---|---|---|
| ソースコード | 標準マークアップ言語(HTML)、スタイルシート(CSS)、およびスクリプト(JavaScript)。 | HTML、CSS、JavaScriptの非標準方言 |
| デプロイ形式 | Webリソース(主にHTML、CSS、JavaScriptコード、およびWebAssemblyモジュール) | ZIPコンテナーにパッケージ化されたHTML、CSS、JavaScript、およびその他のリソース。 |
| パッケージング | なし。リソースはWeb上でリンクされる。 | あり。ベンダーごとに異なるパッケージ形式。 |
| Webサーバー上でファイルをホストする必要 | あり | なし |
| インストール不要の利用 | あり、ブラウザーで実行。 | スーパーアプリ内またはOS上で実行。 |
| スタンドアロンアイコン付きのインストール | ブラウザーまたはアプリマーケットプレイスから(任意) | なし |
| サービス | Web APIへのアクセス | 一部のシステムネイティブAPIを含む、非標準Web APIへのアクセス |
MiniApp開発者は、プログラミング言語としてHTML/CSS/JavaScriptをそのまま使うことができますが、MiniAppは より柔軟であるため、日常業務で複雑な機能を素早く開発するのに優れています。
このMiniAppは、AI技術で動物を認識するAR動物園を構築しようとするものです。開発者は、 ネイティブ機能または高度な機能へのアクセスを提供するいくつかのコンポーネントやAPIを追加することで、 それを容易に実現できます(たとえば、画像認識、AR 3D動物モデルレンダリング、音声 合成用の音声API、地図SDKによって提供されるARナビゲーションなど)。
MiniAppsは、検索エンジン、ホストされた アプリ内のMiniAppストア、またはQRコードによって発見できます。
開発者にとって、MiniAppsに取り組む動機は非常に明確です。
| Web | ネイティブアプリ | MiniApp | |
|---|---|---|---|
| 発見可能性 | 検索エンジン | マーケットプレイス | 複数: 検索エンジン + ホストされたアプリ内のMiniAppストア + QRコード |
| 検証済み/信頼済み | なお模索中 | ネイティブアプリマーケットプレイスによる | ホストアプリプラットフォームによる |
| デプロイ/再読み込み | Webページを読み込み/再読み込み | インストール/再インストール | JavaScriptエンジンを使用するため、読み込み/再読み込み |
| プログラミング言語 | Webプログラミング言語 | 新しい/複数の言語: 少なくともiOSとAndroid | Webプログラミング言語 |
| API/コンポーネント(AR、画像認識、位置情報、音声API) | 非常に基本的 | Web開発者にとって複雑 | 非常に簡単な高レベルAPIとコンポーネント |
MiniAppの目標の1つは、異なるプラットフォーム間で情報とサービスを接続することです。そのため、 スマート自動車、音声制御スピーカー、スマートTVなどのIoTアプリケーションに適しています。
現在では、一部のMiniAppsを車載画面やシステムに適合するように変換することが可能です。また、いくつかの MiniAppベンダーは、さまざまな車種にアプリケーションを配布またはアップグレードするのを支援するために、 車載システム向けに特別に設計されたMiniAppプラットフォームを構築しています。これにより、数百万のWeb開発者が 自動車アプリケーションエコシステムに参加できるようになります。
これらの自動車向けMiniAppsは、給油、洗車、 電子料金収受、保険、レストラン予約、エンターテインメントなど、多くのユーザーシナリオに対応できます。たとえば、 システムが残燃料が20%未満であることを検出した場合、所有者に給油 MiniAppを推奨できます。ユーザーは最寄りのガソリンスタンドの情報を取得し、そこへ向かって MiniApp内での支払いを含めた給油を完了できます。つまり「車両から降りずに給油」できます。
IoTデバイスは、MiniAppsを実行するもう1つの担体になりつつあります。IoT向けMiniAppは、 複数のIoTデバイスプラットフォームおよびオペレーティングシステム間の相互運用性を可能にすることを意図しています。 複数のIoTデバイスプラットフォームやIoTオペレーティングシステム間の違いに対処するのではなく、 IoT向けMiniAppsを導入することで、開発者はIoT デバイス上のアプリケーション開発だけに集中すればよくなります。
一例として、HVAC(暖房、換気、および空調) アプリケーションのスイッチパネルがあります。これは画面と複数の物理ボタンを備えています。この場合、 IoT向けMiniAppを導入することで、スイッチパネルの画面UIをWeb 技術を用いて設計および開発し、HVAC情報を表示できます。たとえば、物理ボタンによって入力された目標温度値と、 測定されたリアルタイム温度値を表示できます。
もう1つの例は、タッチスクリーン付きスマートスピーカーです。この場合、IoT向けMiniAppを導入することで、 スマートスピーカーのタッチスクリーンUIをWeb技術を用いて設計および開発し、 音楽や動画の再生、家庭内IoTデバイスの制御、オンラインショッピングを行うことができます。
ユーザー操作がタッチスクリーンに依存する携帯電話上で動作するMiniAppsとは異なり、 TV上で動作するMiniAppsのユーザー操作は、TVリモコンのキーボードとTV画面の フォーカスに切り替わります。
TV向けMiniAppにより、ユーザーはEコマースMiniAppを通じてTV上で商品を購入できます。
また、ユーザーはゲーミングMiniAppsを通じてTV上でゲームをプレイすることもできます。
MiniAppでは、ビュー層は通常ロジック層から分離されています。
ビュー層は、Webコンポーネントやネイティブ コンポーネントの表示を含むMiniAppページのレンダリングを担当します。これはハイブリッドレンダリングと見なすことができます。たとえば、一部のWebコンポーネントは WebViewでサポートされていない、またはパフォーマンス上の制限がある可能性があるため、MiniAppは地図、動画などのネイティブ コンポーネントにも依存します。
ロジック層はJavaScript Workersで実装されます。Workerは、MiniAppのイベント 処理、API呼び出し、ライフサイクル管理を担当します。
拡張ネイティブ機能は通常、ホストするネイティブアプリまたはOSに由来し、支払い、ファイル 処理、画像スキャン、電話発信などを含みます。これらの機能は特定のAPIを通じて呼び出されます。 MiniAppがネイティブAPIを呼び出すと、JavaScript Bridgeを介して、API呼び出しを拡張ネイティブ機能に転送して さらに処理します。そしてJavaScript Bridgeを介して、拡張ネイティブ機能から結果を取得します。
Workerは各Renderに対して接続を確立し、レンダリングが必要なデータをRenderに転送して さらに処理します。
MiniAppページ内のコンポーネントによってイベントがトリガーされると、このページのRenderはイベントを Workerに送信してさらに処理します。同時に、RenderはWorkerから送信されたデータを待機し、 MiniAppページを再レンダリングします。
レンダリングはステートレスと見なすことができ、すべての状態はWorkerに保存されます。
ビュー層とロジック層を分離する利点には、次のものがあります。
MiniAppプラットフォームは、開発者が見栄えのするUIを構築するのを支援する多くのコンポーネントを提供します。これには、
view、form、imageのような基本的な
コンポーネントや、地図のような高レベルコンポーネントが含まれます。
MiniAppベンダーはまた、開発者がWebとネイティブの両方の 機能にアクセスするための多くのAPIを提供します。これには、UI表示API、画像処理APIなどの基本的なインターフェースや、 ユーザーアカウントAPI、地図API、支払いAPIのような高度なものが含まれます。
APIは通常、コンポーネントと連携して動作します。ユーザーがMiniAppページ上の特定のコンポーネントをクリックすると、 関連するAPIを呼び出してユーザーの操作を完了し、必要に応じて現在のMiniAppページを更新します。
ネイティブアプリと同様のユーザー体験を得るため、MiniAppのリソースは通常まとめてパッケージ化されます。 MiniAppパッケージをダウンロードしてインストールした後、MiniAppに必要なすべての静的リソース(すなわち、ページ テンプレート、CSS、JavaScriptファイル、その他の文書)はユーザーの デバイス上に保持されます。これらのリソースは、次回の更新まで余分なダウンロードなしに常に利用できます。
MiniAppパッケージは圧縮ZIPアーカイブであり、次のものを含みます。
検索および実行時に特定のMiniAppを見つける目的で、MiniAppは パッケージ名またはプラットフォーム上の識別子を持たなければなりません。ユーザーが認識するためのアイコンも必要です。
MiniAppページに加えて、MiniAppsは情報の断片またはMiniApp ウィジェットとして表示することもできます。この形式では、開発者は自分たちのサービスやコンテンツをさまざまなホストシナリオ、 いわゆるホスト環境(例: アシスタント、デバイスのグローバル検索など)に配置できます。この機能は、 MiniAppのサービスやコンテンツを具体的なシナリオと結び付け、ユーザーに さらなる利便性を提供します。
たとえば、ユーザーが旅行の列車チケットを購入した場合、スマートアシスタント上のMiniAppウィジェットは列車の最新状況を即座に表示します。 ユーザーはこのウィジェットをクリックし、より詳細な 情報を得るために全画面のMiniAppページへ移動できます。
MiniAppページの場合と同様に、ウィジェットもURIスキームによって記述されます。ホスト環境は、 URIパスを通じて読み込むMiniAppパッケージと対応するウィジェットを指定し、 URIクエリパラメーターを通じてデータをウィジェットに渡します。ウィジェットが読み込まれると、ホスト環境内で 表示およびレンダリングされます。セキュリティと独立性を確保するため、ホストとウィジェットからのデータ、および 異なるウィジェットからのデータは分離されます。
多くのシナリオでは、ウィジェットはより複雑な操作のためにMiniAppページを開くことができます。そのような場合、 ウィジェットは対応するMiniAppとデータを共有する必要があることがよくあります(例: 一貫したログイン 状態を維持する)。したがって、ウィジェットとMiniAppのデータは双方からアクセスできます。言い換えると、 MiniAppウィジェットとページは同じデータアクセス権を持ちます。
ウィジェットの目標の1つは、ユーザーに従来のアプリという概念を忘れさせ、 サービスという形式でユーザーのニーズを真に満たすことです。そのため、すべてのアプリ呼び出し経路に加えて、ウィジェットは、 テキストキーワード、音声 分析、画像認識、コードスキャン、イベントインテントなど、異なるシナリオで異なる方法によってトリガーできます。
注: ウィジェットは中国市場ではQuick Appによって実装されています。
MiniAppsを発見、起動、アクセスするための入口は複数あります。複数の WebView内のWebコンテンツとは異なり、同じMiniAppに対しては1つのインスタンスだけが作成されるため、MiniAppはその状態と データをグローバルに一貫した形で保持します。たとえば、あるユーザーが初めてQRコードの入口からMiniAppを 開いてログインした後、次回MiniAppストアのような別の入口から戻った場合でも、 ユーザーはログイン状態のままです。
MiniAppsのエントリーには、次のものが含まれますが、これらに限定されません。
MiniAppsは、実践を通じて有効であることが証明されたいくつかの仕組みにより、 パフォーマンスとユーザー体験の向上を試みています。
MiniAppのコンストラクターにより、ユーザーはMiniAppを初めて開くときだけ パッケージをダウンロードすればよく、その後はMiniApp内の静的リソース(例: ページ、 スクリプト、CSS)を再度ダウンロードする必要がないため、以降のページの読み込みや 遷移がより効率的になります。この機能はユーザー体験を向上させ、ネットワークトラフィックを 節約します。
同時に、MiniAppには事前ダウンロードの仕組みがあり、MiniAppパッケージを 事前にダウンロードしたり、最初のページのために個別に事前ダウンロードしたりできます。また、ダウンロード中に並列でストリーミング 展開を行うことで、MiniApp起動 段階の所要時間を最小化し、初回起動時の最初のページのパフォーマンス低下とのバランスを取ります。
MiniAppはレンダービュー間でネイティブのページスタック管理を使用し、ページ切り替えは ネイティブコードによって駆動されます。そのため、ページ内のジェスチャー操作や ページ間の切り替えは、ネイティブとまったく同じ滑らかな体験を実現できます。
ビュー層とロジック層が分離されているため、ビュー層は独立してレンダリングできます。 JavaScriptロジックコードにブロックされることなく、ページのレンダリング速度を 大幅に向上させることができます。
MiniAppのランタイム環境は通常、MiniAppの起動前に事前構築されるため、 MiniAppの起動時間が短縮されます。事前構築される内容には、レンダリングビュー、静的リソース、 開発者定義のプリフェッチリクエスト、MiniAppsランタイムコンテナーが含まれます。MiniAppが アクティブ化されると、事前構築されたレンダリングビューを引き継ぎ、その後、次のために新しいレンダービューを キャッシュプール内に事前構築し続けます。レンダービューの数には制限があります。 いずれかのレンダービューが閉じられた場合、または数の制限を超えた場合、 最も古く開かれたレンダービューが破棄されます。MiniAppアプリケーションが終了すると、ランタイム は破棄され、アプリケーション環境とリソースを再利用できます。
MiniAppプラットフォームは、非常に豊富なコンポーネントとAPIを提供します。 これらのコンポーネントとAPIは通常、開発者のパフォーマンス 要件を満たすようによく設計されています。
MiniAppのランタイム環境には、ネイティブコードによって提供される基本機能と フレームワークという2つの主要部分が含まれます。これには、開発者APIとJavaScriptによって実装されたいくつかのコンポーネントが含まれます。 JavaScriptフレームワークはネイティブアプリに組み込まれており、MiniAppを実行する前に MiniAppランタイム環境にあらかじめ読み込まれます。JavaScript フレームワークはホットリロード(使用中の再読み込み)が可能であり、パフォーマンス向上のための多くの可能性をもたらします。
MiniAppプラットフォームは、ユーザーがMiniAppにログインするためのさまざまな方法を提供します。ユーザーが すでに本人認証済みでプラットフォームにログインしている場合、 プラットフォームのログイン情報をMiniAppと共有でき、MiniApp独自のアカウント システムとプラットフォームのアカウントシステムとの相互運用を迅速に実現できます。これにより、MiniAppへのアクセスプロセスがより円滑になります。
たとえば、SMS認証を用いた従来のログインプロセスはより時間がかかります。ユーザーは まず携帯電話番号を手動で入力し、SMSを受信した後に認証コードを入力してログインする必要があります。 MiniAppの利点は、開発者がプラットフォームによって提供されるコンポーネント/APIを使用して、 ユーザーの携帯電話番号を安全かつ便利に取得できることです。ユーザーに対して 携帯電話番号によるワンクリックログインプロセスを認可するよう促すことで、 ユーザーにとって全体のプロセスを簡単にし、開発者にとってユーザー情報を取得するコストを削減します。
MiniAppのサブパッケージ化は、MiniAppパッケージの開発プロセスを改善するためのビルド機構です。 これは、開発者が異なる業務モジュールを異なるサブパッケージに分割するのに役立ちます。
開発者にとって、MiniAppには既定でメインパッケージがあります。これは起動ページファイルと 共通リソースを含みます。サブパッケージは、開発者の業務 モジュールを柔軟に分割するビルド形式です。ユーザーは、必要に応じて異なるサブパッケージを読み込んだ後、特定のページを開くことができます。
ユーザーにとっては、MiniAppを起動すると、メインパッケージが既定でダウンロードされ、 メインパッケージ内のページが起動されます。ユーザーがサブパッケージ内のページを開く必要がある場合、 MiniApp Runtimeはサブパッケージのダウンロードと読み込みを開始し、サブパッケージページを起動します。
このようなサブパッケージのビルド機構により、複数の チームが共同開発する際の分離と協業がより良くなります。ユーザーがMiniAppsを使用する際には、サブパッケージ化の仕組みによって MiniAppホームページの読み込み速度を向上させ、必要に応じてサブパッケージを読み込み、ユーザー体験を最適化できます。
MiniAppにおいて、アドオン/拡張は、既存の MiniAppに特定の機能を追加するカプセル化されたモジュールであり、コンポーネント、JavaScriptモジュール、またはページであり得ます。アドオン/拡張は、 単独で実行されるのではなく、MiniApp内でのみ実行できます。開発者は MiniAppと同じようにアドオン/拡張を開発し、それをMiniAppプラットフォームにアップロードして、他のMiniAppsが 再利用できるようにできます。
MiniAppは、アドオン/拡張によって次のことをサポートします。
アドオン/拡張の仕組みは、MiniApps開発の障壁を下げ、 より多くの開発者をMiniAppエコシステムにもたらします。
この節では、現在主流のMiniAppまたは関連プラットフォームをいくつか説明します。
Alipay Mini ProgramはAlipayネイティブアプリ上で動作し、Webと ネイティブのハイブリッドソリューションです。Alipay Mini ProgramはCSSやJavaScriptなどのWeb技術に依拠します。同時に、 支払い、信用サービス、顔 認証など、Alipayネイティブアプリの機能を統合しています。
Alipayネイティブアプリ上では100万を超えるMini Programsが動作しており、2億3000万DAU(Daily Active User)を持ちます。ユーザーシナリオには小売、交通、医療サービスなどが含まれます。
Baidu Smart Mini Programは、Baiduアプリおよび他のパートナーのプラットフォームを基盤として、 人々を情報やサービスへインテリジェントに接続するオープンなエコロジー製品を指します。 BaiduのAI能力とSmart Mini Programs内のすべてのコンテンツに対する理解を通じて、Baiduはユーザーと Smart Mini Programsを正確に接続します。Baiduの検索と情報フィードの二重エンジンにより、 ユーザーはSmart Mini Programs内でアプリのような体験を実現できます。2019年7月時点で、 15万を超えるSmart Mini Programsと2億7000万MAUがあります。
Baidu Smart Mini Programは、私たちのオープンソースアライアンス内でオープンソース化されており、30を超える 協力者がいて、スーパーアプリ、モバイルOS、車載OS、音声制御スピーカー、TVを カバーしています。
Quick Appは、Quick App Allianceの上位12社の携帯電話メーカーによって開発されたMiniApp標準であり、2億を超えるMAUをカバーしています。 開発者は一度の開発で、すべてのハードウェアベンダーのプラットフォーム上で実行できます。Quick Appsは オペレーティングシステムに深く統合されており、携帯電話システムの複数のシナリオでワンクリックだけで取得できます。 ネイティブレンダリング経路を導入することで、フロントエンド開発と ネイティブのパフォーマンス体験の効果的な組み合わせが実現されます。
Quick Appsは2つの形式で実行できます。ネイティブアプリページのようなQuick Appページ形式と、 シーン内で情報を提示するウィジェット形式です。この2つは異なるユーザーニーズに適応し、 複数のシナリオでシステムとMiniAppを一体として接続します。
PC上のMiniAppsはまだ初期の探索段階にあります。360 PC MiniAppは、 同社のPCブラウザー内で動作するライトアプリケーションです。従来のWebページと比較して、より多くの 機能と、PCオペレーティングシステムとのより容易な相互作用を備えています。
PC MiniAppsは、企業アカウントとして検証されたものにのみ利用可能です。ほとんどの機能は 厳格な規制の下にあるため、高度に信頼されたWebコンテンツと見なすことができます。
PWAsは、現代的なWebアプリケーションを要約する最新の用語です。ネイティブアプリに対応するものとして、 PWAはネイティブアプリのように見え、振る舞い、デバイスのホーム 画面/ランチャー/スタートメニューにインストールできます。ユーザーを再び引き付けるためにプッシュ通知を送信できます。 オフライン時にも使用でき、劣悪なネットワーク条件下でも動作します。幅広い 機能を持つデバイスで動作し、オープンWeb 標準によって定義される新しい機能と連携するように今も進化しています。支払いはPWAアプリ内でユーザーによって行うことができ、 PWAアプリは検索エンジンに適しており、ハイパーリンクと完全に連携します。PWAは技術面および ビジネス面で成功しています(多くのWebサイト、とくに消費者向けのものに広く採用されています)。
この節では、いくつかの典型的なユースケースを選択し、MiniAppsがWebからのサポートを望むいくつかのAPIを提案します。
MiniAppはWebレンダリングとネイティブレンダリングのハイブリッドソリューションです。 Webとネイティブからのレンダリング結果を組み合わせる良い方法があれば非常に有用です。
提案: MiniAppには、ネイティブのレンダリング結果をWeb レンダリング結果へ統合するのを支援する標準化されたAPIが必要です。
MiniAppは、ユーザーがネイティブアプリを使用しているときと同様の体験を得られるよう、 ページ切り替え中にトランジションアニメーションを提供したいと考えていますが、現状ではそれはほぼ不可能です。
提案: MiniAppには、MiniAppページ切り替え中にトランジションアニメーションを追加するためのAPIが必要です。
MiniAppは、標準化された配布形式を通じて、複数のMiniAppホスティングプラットフォーム向けの パッケージおよび解析規約を形成できます。現在、各MiniAppホスティングプラットフォームは異なる 開発ツール(異なるパッケージング方法)を提供しており、MiniAppは異なる MiniAppホスティング環境で異なる方法で解析されます。
提案: MiniAppは、配布 プロセス中には実際にはパッケージ化(圧縮)されたファイル集合です。統一されたファイル接尾辞でMiniApp(.ma)を記述し、 .maファイルを作成する方法と.maファイルを解析する方法を指定できます。
AndroidウィジェットやApple dashboardのように、ユーザーはWebページやアプリページを開くことなく、 MiniAppウィジェットで直接情報を取得したりタスクを完了したりできます。MiniAppウィジェットは、 デスクトップやダッシュボードなど、Webブラウザーの外部の環境に表示できます。
提案:
MiniAppは、MiniAppページのTime to Interactive(TTI)が完了した時点を知る必要があります。
提案: MiniAppページのTime to Interactiveが 完了したことを通知する標準化されたイベント。
3Dモデルは豊富なディテールによってますます人気になっています。ARと組み合わせることで、2Dよりも 優れたユーザー体験を提供できます。ビジネスケースにはオンラインショッピング、 広告、教育などが含まれる可能性があります。しかし、現在のWebには、3Dモデルを扱うための標準的で便利な方法がありません。 この文書では、音声、動画、画像を対応するHTMLタグで扱うのと同様に、 3Dモデルを直接扱うHTMLタグを定義することを提案します。
ユーザーはジェスチャーによって、さまざまな角度から3Dモデルを表示できます。また、3Dモデルは 拡大/縮小することもできます。全画面で表示することも、Webページに埋め込んで 他のHTMLコンテンツと一緒に表示することもできます。
ユーザーはカメラを使って3Dモデルを現実世界に配置できます。ユーザーはモデルを配置するために異なる 場所を指定できます。
提案: Web上で3Dモデルを指定し、ARによる
インタラクティブな3Dコンテンツを可能にする<xmodel>要素。
顔トラッキングは多くの3Dシナリオで使用できます。
提案: video要素を入力として使用し、各 フレームで顔トラッキング出力を更新するFace Tracking API。これには次が含まれます。
手のジェスチャーは、動画エフェクトやAR/VRゲームのシナリオで使用でき、アプリをより印象的かつ インタラクティブにします。
提案: 手の動きを追跡し、手の輪郭を取得するための高レベルAPI。
MiniAppsには、Webへ移行したいAR APIがいくつかあります。これらは、ゲーム、3Dモデルプレビュー、 インタラクティブ広告において、より優れたAR 体験を提供するのに役立つためです。
提案: ARCoreとARKitに基づく低レベルAR APIを提供する。これには次が含まれます。
[MINIAPP-LIFECYCLE]は、MiniAppのライフサイクルイベントと、 MiniAppおよび各ページのライフサイクルを管理するプロセスを定義します。この仕様を実装することで、 ユーザーエージェントは、グローバルなアプリケーションライフサイクルとページ ライフサイクルの両方のライフサイクルイベントを管理できます。
2.1.1 ビュー層をロジック層から分離するで説明したように、MiniAppでは、 ビュー層はロジック層から分離されています。ビュー層は、Webレンダリングとネイティブレンダリングを含む MiniAppページのレンダリングを担当します。これはハイブリッドレンダリングと見なすことができます。ロジック層は JavaScript Workerで実装されます。ロジック層は、MiniAppのイベント処理、 API呼び出し、およびライフサイクル管理を担当します。
MiniAppライフサイクル機構は、MiniAppのグローバルアプリケーションライフサイクルイベントと MiniAppページライフサイクルイベントを通じて、MiniAppのビュー層とロジック層を管理する手段を提供します。 MiniAppのグローバルアプリケーションライフサイクル状態とMiniAppページライフサイクル状態についての知識を持って MiniAppを開発することで、ユーザー体験の向上につながります。MiniAppライフサイクルには一連のイベントが含まれ、 MiniAppはそれらを用いて、自身の状態に基づいて動作を変更することを選択できます。
[MINIAPP-MANIFEST]は、MiniAppsを記述するための メタデータの集合を定義する仕様です。MiniApp Manifestは、識別情報、 人間が読める説明、バージョン管理データ、スタイル情報など、MiniAppの基本情報を設定するための追加の仕組みを提供することで、 [APPMANIFEST]および[MANIFEST-APP-INFO]仕様を 拡張します。MiniAppマニフェストはまた、MiniAppの一部であるページやウィジェットのルーティングも 構成します。
MiniAppマニフェストは、Web App Manifestのいくつかの基本要素を使用して
MiniApp(name、short_name、description、およびicons)を記述する
JSON文書であり、MiniAppに関する技術的詳細を指定する9つの補足メンバー(app_id、
version、platform_version、device_type、pages、
req_permissions、およびwidgets)を追加し、アプリの見た目と操作感を
構成します(color_schemeおよびwindow)。
[MINIAPP-PACKAGING]は、MiniAppパッケージのセマンティクスと適合要件、 およびMiniAppのリソースを保持するコンテナーの構造を定義します。これには、ページコンポーネント (すなわちテンプレート、スタイルシート、JavaScriptロジック)、マニフェスト、その他のメディアファイルまたは構成リソースが 含まれます。
この仕様は、MiniAppsの論理構造および物理構造を決定し、MiniAppをパックする ZIPベースのコンテナーのファイルシステム構成と処理に関する要件を保持します。 MiniAppパッケージのインスタンスは、ランタイム環境またはMiniAppユーザーエージェントにおける MiniAppの配布と実行を容易にします。
[MINIAPP-ADDRESSING]は、MiniAppsにアクセスするための標準 MiniAppプロトコルを定義するノートです。これは、現在、各MiniApp ベンダーがMiniAppリソースを記述する独自の方法を持ち、MiniAppパッケージを取得するために非常に異なる方法を使用しているため、 プラットフォームをまたいでMiniAppsにアクセスすることが非常に困難であり、ユーザーと開発者の両方の観点から 統一された理解に到達することが難しい、という問題を解決することを目的としています。
この文書はモバイルディープリンク技術を参照し、MiniAppにアクセスする2つの方法、すなわち
HTTPSプロトコルを用いる方法とカスタムプロトコルを用いる方法を定義します。さらに、MiniApp Addressingは
MiniApp URIの構文を定義します。これには、環境横断アクセスのためのuri-prefix、
MiniAppsのためのuri-infix "miniapp"、およびMiniAppを一意に識別するための識別子とバージョンが
含まれます。
MiniApp Addressingはまた、ユーザーエージェントがMiniApp URIに基づいて対応するmini-appパッケージを取得する方法、 いくつかのエラー処理、およびネットワーク経由でMiniApp パッケージをダウンロードする手順例についても説明します。
MiniApp WidgetはMiniApp Pageの特別な形式です。ページと同様に、ウィジェットは MiniAppユーザーエージェントと呼ばれるホスト環境で実行されます。MiniAppページとは異なり、ウィジェットは 画面全体ではなく一定の領域を占有できます。[MINIAPP-WIDGET-REQ]文書は、 MiniApp Widgetを開発するための初期設計上の考慮事項を説明します。これには、ユーザーエージェント、パッケージング、 マニフェスト、アドレッシング、ライフサイクル、UIコンポーネント、API、MiniAppとMiniApp Widget間の通信などが含まれます。詳細なWidget仕様は別文書で説明される予定であり、 ユーザーエージェントの詳細な技術要件と機能を記述します。たとえば、ウィジェット実行環境の潜在的な 依存関係、WidgetによってもたらされるAPIやUI Componentsの潜在的な変更、MiniAppとMiniApp Widget間の通信要件など、Widgetによってもたらされる新機能です。ユーザーエージェント開発者と ウィジェット開発者の双方が、技術開発のためにWidget仕様を参照できます。
2021年に、Working Groupは2つの文書、[MINIAPP-MANIFEST]と[MINIAPP-LIFECYCLE]を公開しました。同時に、さまざまなベンダーには
標準化前の実装がいくつかあります。標準の実現可能性を検証し、
標準化前の実装と互換性を持たせるため、作業部会はMiniApp標準
Manifestを、BaiduのApp.jsonやHarmonyOS
FAのconfig.jsonなど、異なる標準化前のマニフェストファイルへ変換するためのツールを開発しました。
また、2021年のTPACブレイクアウトセッションで、作業部会はその
ツールのデモを行いました。
標準と事前展開が進むにつれて、作業部会は、Packaging、Addressing、Lifecycle、UI components、APIを含む可能性のある、完全で標準化された開発手法をサポートするために、ツールを改良する予定です。
MiniAppコンポーネントは、MiniAppを構成するページの構造、内容、およびロジックを定義するための 構成要素です。各コンポーネントは機能、データ、およびスタイルをカプセル化し、開発者が 再利用可能でカスタマイズ可能な項目を構築できるようにします。
MiniApp UI Components仕様は、開発者がMiniAppプラットフォームをまたいで 均質でありながらカスタマイズされたユーザーインターフェースを構築するために使用できる、必須要素の集合を収集します。
この仕様はHTMLおよびCSSの特定のバージョンを参照しません。HTMLおよびCSS標準への変更の採用と 実装を保証するため、最新のW3C勧告を指し示します。MiniAppユーザーエージェントベンダーと 開発者の双方は、自身のプロセスと システムを最新の状態に保つために、これらの仕様への変更を追跡する必要があります。
この仕様は、Web Componentsに基づき、すべてのMiniApp 仕様に共通する定義済み要素の集合を定義します。
IoT向けMiniAppは、IoT向けMiniAppのユースケースを 説明します。これらのユースケースから導かれて、この仕様はIoT向けMiniAppのアーキテクチャを定義します。 MiniApp PackagingおよびMiniApp Lifecycleを再利用し拡張する方法が指定されています。また、IoT向け MiniApp APIのために、いくつかのAPIも指定されています。
IoT向けMiniAppは、携帯電話やPC上で動作するMiniAppsと類似したアーキテクチャを持ちます。しかし、IoT デバイスは異なるハードウェア機能を持つため、IoT向けMiniAppには次のような独自の特徴があります。
MiniAppは、安全な接続をサポートするためにHTTPSを利用します。同じホスト環境内の複数のMiniAppsは、 互いに独立しています。
MiniApp内のユーザー操作には、異なるレベルのユーザー権限が必要です。
| 権限 | ユーザー操作 |
|---|---|
| 既定(追加操作不要) | ページ共有、クリップボード、バイブレーション、コンパス、モーションセンサー、地図、画面輝度、画面 キャプチャ、バッテリー状態 |
| 初回使用時の権限 | 位置情報、カメラ(QRコードのスキャン)、ネットワーク状態、Bluetooth、NFC |
| 毎回使用時の権限 | 連絡先、file-apis、ホーム画面への追加、写真ピッカー、電話発信 |
| トークンによる検証 | プッシュ |
| コールバック/メッセージング | パスワード不要の支払い |
| パスワード要求 | 支払い |
異なる観点と異なるセキュリティレベルに応じて、MiniAppフレームワークは 次の方法を提供します。
プライバシーリスクの高い機能について、MiniAppは開発者に対し、そのような機能を使用する許可を MiniApp開発者プラットフォーム上で申請することを求めます。申請には、理由、利用シナリオの詳細な 説明、および利用デモが含まれます。その後、プラットフォームはMiniAppの利用要件に従って申請を審査します。 承認されたMiniAppsだけが、そのような インターフェースを呼び出すことを許可されます。たとえば、ユーザーの携帯電話番号を取得する機能は、高いセキュリティリスクを持つ機能の1つです。
MiniAppパッケージは公開前にMiniAppプラットフォームによって審査されます。プラットフォームは 開発者がMiniAppの新バージョンを公開する唯一の方法であるため、開発者はMiniApp Platform Operation Termsに従わなければなりません。プラットフォーム監査には、データ収集、データ利用、データセキュリティ、 地理的位置など、多くの側面があります。
オンラインWebページをレンダリングできる<web-view>のような一部のコンテナーコンポーネントについては、
MiniAppユーザーエージェントが、そのコンポーネントによってアクセスされるURLを制限する場合があります。
MiniApp Management Centerに設定されたドメインだけが、<web-view>内でアクセスできます。また、そのコンポーネントが
<iframe>を含む場合、iframeによって開かれるURLも
MiniApp Management Centerに設定されているべきです。このようにして、MiniAppプラットフォームは、MiniAppによって開かれる
動的ページをより堅牢に制御できます。
同様に、MiniAppフレームワークは非同期リクエスト先アドレスの正当性を検証します。
たとえば、リクエスト、ダウンロード、アップロードなどによって起動されるURLについて、そのドメインは MiniApp Management Centerに設定されたドメインに属していなければならず、そのプロトコルは データ送信の安全性を確保するためにHTTPSプロトコルでなければなりません。
MiniAppは中国で生まれましたが、世界中で人気が高まっています。類似した製品形式は、 日本、韓国、東南アジア、米国、欧州、アフリカなど、世界の他の地域でも現れています。 MiniApp技術の標準化は、世界のWebコミュニティから大きな注目を集めています。 そのため、MiniApp標準に関する協力は、国際的な共同の取り組みとなっています。
MiniApp標準化に関する最初の世界的なWebコミュニティでの議論は、福岡で開催された TPAC 2019の期間中に行われました。 ブレイクアウトセッションが開催され、 その中でMiniAppベンダーがMiniApp技術とMiniApp標準の必要性を紹介しました。 参加者は、パッケージング、マニフェスト、 ライフサイクル、ウィジェットなど、MiniApp標準化の可能な方向性について議論しました。MiniApp標準と 現在のWeb標準化作業との重複を避け、MiniAppプラットフォームとWebの間、 および異なるMiniAppプラットフォーム間の相互運用性を高めるために、特別な努力が払われました。 この議論の直後にMiniApps Ecosystem Community Groupが立ち上げられ、MiniApp仕様のインキュベーションが 始まりました。
仮想開催のTPAC 2020では、 Learning from Mini Appsと題したブレイクアウトセッションが行われました。このブレイクアウトセッションでは、専門家が MiniAppの抽象的な形式とMiniAppsが持ち得る強力な機能について議論しました。また、このセッションでは、 さまざまな開発ツールを通じてMiniAppを構築する方法も共有されました。その後、Web開発者が MiniAppとその開発者体験から何を学べるかに焦点を当てたオープンな議論が行われました。
アジア市場におけるMiniAppの製品形式と技術には多くの類似点があります。世界の コミュニティ、とくに中国、日本、韓国の参加者を集め、各地域のMiniApp エコシステムについてコミュニケーションし、MiniAppsに関する標準化作業の将来を議論するため、 W3C MiniApps Working GroupとMiniApps Ecosystem Community Groupは、2021年4月に第1回MiniAppsに関するCJK会議を開催しました。 30を超える組織から約90名の参加者が議論に参加し、MiniAppエコシステム、技術アーキテクチャ、 フレームワーク、および車両向けMiniAppのような新しいシナリオにおけるMiniAppsについて意見交換しました。 議論のおおまかな結論としては、MiniApps Working GroupでMiniApp標準の開発が順調に進む中、 MiniApp標準のセキュリティ、プライバシー、アクセシビリティ、および国際化の水平レビューを始める時期であること、 また、MiniAppでIoT技術を活用することは、新しいシナリオにおけるMiniAppにとって非常に有望な方向性であり、 関連する標準化作業において世界のMiniAppコミュニティが協力する良い機会があることです。
欧州におけるMiniAppsの事例はまだわずかですが、この概念は勢いを増しています。そして、 コミュニティはこれらの技術を探求し始め、従来のアプリマーケットプレイスの外にある新しいビジネスモデルと イノベーションを模索しています。
2021年に、3つのW3C 会員を含むステークホルダーのグループが、Quick App Initiativeを立ち上げました。これは、任意の組織および個人に開かれ、 オープンな協力によって推進される、オープンソース志向の関心グループです。このグループは、フランスを拠点とする 独立非営利組織OW2によってホストされており、ベンダー中立の観点から W3Cの作業を促進し、欧州市場の観点からアウトリーチ、実装、 標準化要件の収集に焦点を当てることを意図した透明なプロセスの下で運営されています。
MiniAppsのユースケースと要件を満たし、Web標準がMiniAppをよりよくサポートできるようにし、 ユーザーエージェントの革新を探求し、Webを豊かにするために、私たちはグループを設立し、 W3Cにおいて次の作業を含めることを望みます。
詳細には、次の技術的作業をさらに検討すべきです。
注: 現在のMiniApp APIとWeb APIとのさらなるギャップは、並行して分析されます。
| 中国語 | 英語 | 定義 |
|---|---|---|
| 小程序 | Mini Program | ネイティブアプリ内で動作するMiniAppの1つの形式。 |
| 快应用 | Quick App | Quick Appアライアンスの12社の携帯電話メーカーによって開発されたMiniApp標準。 |
| 渲染环境 | rendering view | ネイティブビューまたはWebView。 |
| 智能助理(负一屏) | smart assistant | 利便性のためにサービスを提供するスマートアシスタント。通常はホーム画面の左側にあります。 |
| 热更新 | hot reload | 機能を修正または更新するときに再インストールする必要がないこと。MiniAppsでは、 フレームワークの一部がJavaScriptで実装されているため、MiniAppランタイムをホットリロードできます。 |
MiniApps、W3C仕様、およびPWAにおけるAPIの比較表を参照してください。
この文書にも貢献してくださったGuanyu Liu(360)、He Du(Xiaomi)、Hongguang Dong(Xiaomi)、Xiaoqian Wu(W3C)、Yi Shen(Baidu)、Yefeng Xia(China Mobile)に深く感謝します。
Referenced in: