Zoom AppsをFlutter Webで実装する手引き - 事前準備編

## Zoom Appsについて

https://qiita.com/yosuke-sawamura/items/99b6ed443677c05d9a8d

Zoom JapanのQiita記事にて、丁寧に紹介されていました。

## 本記事のモチベーション

Zoom Apps実装経緯としては、
**1. 開発チームとしてFlutterベースでの開発が主流のため**
**2. Zoomを利活用するアプリの案件の中で、デフォルトのZoomクライアントアプリを利用したい、機能として画面を表示しながら開発アプリ上で操作を行いたいという要望がZoom Appsの利用ケースとマッチした**
以上の点で、FlutterでZoom Appsを実装するという運びとなりました。

Zoom AppsはJavascriptベースでのSDKであり、Zoom Appsのアプリ画面はWebViewから特定のページを表示させる形で構成されるので、**Flutter Web**の限定対応という形で開発が始まりました。

開発していた中で、Flutter Web上でZoom Apps SDKを利用するのにつまづいたポイントがいくつかありましたので、備忘録的にそれらを書き記していこうとしたのが、本記事の主旨になります。

構成としては、以下の通りです。
Zoom Apps構成までに必要な要素は何か、Flutterでそれらを実装するにはどのようにするかを検討する事前準備編（当記事）
事前準備編の内容を踏まえて実際に実装を行う実装編（次回・・・もしかしたら2部構成になるかもしれません）
実際に作成したアプリを申請した際の備忘録の申請編



## 1.Zoom Appsをスタートアップできる環境を用意する

冒頭のZoom Apps紹介記事にて
[Zoomクライアント内Webviewを経由した連携になるためWebサーバの用意が必要](https://qiita.com/yosuke-sawamura/items/99b6ed443677c05d9a8d#:~:text=Zoom%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88%E5%86%85Webview%E3%82%92%E7%B5%8C%E7%94%B1%E3%81%97%E3%81%9F%E9%80%A3%E6%90%BA%E3%81%AB%E3%81%AA%E3%82%8B%E3%81%9F%E3%82%81Web%E3%82%B5%E3%83%BC%E3%83%90%E3%81%AE%E7%94%A8%E6%84%8F%E3%81%8C%E5%BF%85%E8%A6%81)
とされています。

ということで、Flutter Web Appを外部公開できる環境を構築する必要があります。
アプリケーションをデプロイした場合はデプロイ先のURLとなりますが、開発中に毎回デプロイが発生するのは効率が悪い・・・
そこでローカル環境を外部公開するツールが必要になります。
色々探してみましたが、 **Ngrok** を使用するのがよさそうです。

https://qiita.com/mininobu/items/b45dbc70faedf30f484e

Flutter Webでも利用されている記事もありました。Zoom Appsではないですが、リダイレクト処理によるアクセスが発生する=URLの外部公開が必須であるという点で共通しており、テスト的に動作を確認するのに便利なツールです。

https://zenn.dev/tokku5552/books/flutter-web-liff-scheduler/viewer/6_prepare_ngrok

## 2.OAuth認証用ステップをWebサーバに設定>>Flutter Web内で用意

OAuth認証自体の説明に関してはこちらを参考にしています。

https://qiita.com/TakahikoKawasaki/items/e37caf50776e00e733be

Zoomでのアプリケーション認証では、
**zoomの認証サーバ(https://zoom.us/oauth/authorize) をパラメータ付きで開く**
OAuth認証ステップを実装する必要があります。

URLをWebブラウザで開くものとしては、Flutterでは**url_launcher**パッケージを使用するのがよさそうです。

https://pub.dev/packages/url_launcher

https://blog.flutteruniv.com/flutter-package-url_launcher/

また、OAuth2.0での拡張仕様であるPCKEもサポートされており、セキュリティを考慮するのであれば、こちらも利用することが望ましい。

https://devforum.zoom.us/t/zoom-oauth-2-0-proof-key-for-code-exchange-pkce-flow/63830

https://qiita.com/ist-n-m/items/992c67b803ff460818ec

PCKEも含めて実装したい場合は、**pkce**パッケージを使用するのがよさそうです。

https://pub.dev/packages/pkce

## 3.クライアントがアプリを介してWebにアクセスする際にOWASPを設定する

[クライアントからアクセスされた際に全てOWASP対応にする必要があるのでヘッダーに制限事項を明示する必要があるようです。](https://qiita.com/yosuke-sawamura/items/99b6ed443677c05d9a8d#-web%E3%82%B5%E3%83%BC%E3%83%90%E5%81%B4%E3%81%AE%E5%AE%9F%E8%A3%85%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6---%E3%82%B5%E3%83%BC%E3%83%90%E3%82%B5%E3%82%A4%E3%83%89)

https://developers.zoom.us/docs/zoom-apps/security/owasp/

クライアントがアプリ経由でサイトにアクセスする際にWebサーバ側がヘッダー情報にOWASP情報を盛り込む必要がありますが、
OWASPヘッダーを簡単に作成できる**helmet**というライブラリを利用するのが、漏れなく実装できそうです。

https://helmetjs.github.io/

https://zenn.dev/s1r_j/articles/6a8e2d593bfc08e21392

## 4.ZoomAppsSDKのJSライブラリをFlutter上で利用できるようにする

Zoom AppsのSDKはJavascriptのライブラリとして提供されています。

これをFlutter上で使えるようにする場合は、**js**パッケージを使用するのがよさそうです。

https://pub.dev/packages/js

https://zenn.dev/heyhey1028/articles/abd818ca760e33

---------------

使用するべきツール・ライブラリ・Flutterパッケージの検討に関しては以上になります。

次回からは、実際にこれらを使い、Flutter WebでZoom Appsを作成していきます。
(記事の根幹部分なので早めに更新をしていきたいですが、1ヶ月以上お待たせするかもしれません・・・🙏)