Qt WebAssembly Q&A, パート1

このブログ記事は「https://www.qt.io/blog/qt-webassembly-qa-part-1」の翻訳です。

WebAssemblyは、C++などの高級プログラミング言語がターゲットとするバイトコード表現で、ブラウザ上の仮想マシン内部で実行されることを想定しています。これにより、組込み機器やアプリケーションなどのソフトウェアの設計方法が大きく変わるでしょう。Qt for WebAssembly は、Google Chrome や Mozilla Firefox などの一般的な Web ブラウザで C++ アプリケーションを実行することができ、さらに多くのブラウザをサポートするための努力も続けています。

WebAssemblyについてもっと知りたいけど、誰に聞けばいいのかわからない?私たちはシニアプロダクトマネージャのVeli-Pekka Heinonenに、開発者コミュニティから送られてきた11の質問を投げかけてみました。これは継続的なシリーズなので、次号でもコミュニティからの質問に回答していきます。

 

Q1: SQLモジュールに対応しますか?

VP: 現在SQLiteはQtSQLモジュールの一部としてサポートされています。 

 

Q2: Qt WebAssembly は Qt 6 でどのようなライセンスが必要ですか? 

VP: WebAssemblyプラットフォームは、GPLv3ライセンスと商用ライセンスの両方で提供されています。言い換えればオープンソースとコマーシャルの両方の顧客が利用可能です。現在のところWebAssemblyのこのデュアルライセンスモデルを変更する予定はありません。 

とはいえ、DesignViewer のような付加価値のある商用のみのモジュールや Qt Charts のような GPLv3 のモジュールは、WebAssembly に加えて、商用のみ、またはモジュールがサポートするすべてのプラットフォームで GPLv3 であることを覚えておくとよいでしょう。

 

Q3: WebAssembly が iOS のポップアップキーボードをサポートするようになるのはいつですか??

VP: Qt 6.4 では iOS キーボードを実験的にサポートしていますがこの機能はまだ完成していません。

 

Q4: Qt は特にローカルのハードウェア(オーディオなど)にアクセスする際に、安全な WebAssembly アプリケーションの開発および配備をサポートするために、どのような取り組みを行っていますか?

VP:  WebAssemblyプラットフォームは、Webアプリができることに制限を設けるJavaScriptサンドボックスなどの基本的なセキュリティ機能を提供します。またQt はローカルファイルアクセスなどの機能にも取り組んでいます。詳細はこちらをご覧ください。

 

Q5: Qt Widget Appは、WebAssemblyで作成できますか?

VP:  しかし、アプリケーションの要件によっては、JavaScriptのサンドボックスと WebAssemblyのプラットフォームに対応するために、いくつかの点を微調整する必要があるかもしれません。例えば、サポートされるQtモジュール、マルチスレッド、ネットワーキング、ローカルファイルアクセスなどがあります。全容はこちらでご覧になれます。

 

Q6: 私たちのアプリケーションが VTK、ITK、boost などの他のサードパーティライブラリを使用する場合、Qt 6.4 を使用すると WebAssembly での展開処理はどのくらい簡単になりますか?

VP: ダイナミックリンクはいくつかのプラットフォームの制限により現在サポートされていません。しかし次期バージョンでこれを変更するための作業が進行中です。静的リンクはすでに使用可能です。

 

Q7: WASMのマルチスレッド化、QT_EMSCRIPTEN_ASYNCIFYを有効にすべきですか?

VP: QDialog::exec() のようなメインスレッドをブロックする API 呼び出しを行う場合、Asyncify を有効にすることができます。マルチスレッドは、アプリケーションがメインスレッドに加えて複数のスレッドを使用する必要がある場合、またはそれによって利益を得ることができる場合に有効にすることができます。

 

Q8: QMLなしでWebAssembly(UIを含む)を使用することは現在(あるいは将来)可能ですか?

VP:  Qt for WebAssembly は、低レベルではありますが、UIに様々な機能を提供するウィジェットもサポートしています。また、スクリーンリーダベースのサポートは、(6.4にはない)開発ブランチのウィジェットに用意されており、必要に応じて活用することができます。

 

Q9: Qt 5.xでWebAssemblyは完全にサポートされていますか?

VP: Qt 5.15 は WebAssembly をターゲットとしてサポートしていますが、いくつかの機能制限がありQt 6 で対処される予定です。プロフェッショナルサービスではQt 6 から Qt 5 への機能移植をサポートします。

 

Q10: Qt for WebAssemblyアプリは、JavaScriptを通してlocalstorageやindexedDBのようなWeb APIブラウザストレージにアクセスすることができるのでしょうか?

VP:  ファイルシステムへのアクセスはウェブ上でサンドボックス化されており、これはアプリケーションがファイルを扱う方法に影響を及ぼします。Web プラットフォームは、ユーザーの制御下にある方法でローカル ファイル システムにアクセスするための API と、永続的なストレージにアクセスするための API を提供します。EmscriptenとQtはこれらの機能をラップし、C++やQtベースのアプリケーションから使いやすいAPIを提供します。詳細はこちらをご覧ください。

 

Q11: Qt 6.4は、WebAssemblyのQOpenGLWidgetをサポートしますか?

VP: Qt 6.4でQOpenGLWidgetが動作するようになりました。

 

WebAssemblyについてもっと知りたい、質問がある方はこちらから。

WebAssembly Demos & Examples

 

 

 

 


Blog Topics:

Comments