コントリビュート

このドキュメントを編集

ドキュメントを翻訳するか、お使いのコンピューターでプロジェクト全体を開きます。

作業内容を送信するまで、何も公開されません。

ブログ

Wails v3 Beta:Go デスクトップアプリケーションの新たな基盤

Wails v3 Beta では、より直接的なアプリケーションモデル、より充実したバインディング、そして Go デスクトップアプリケーションのためのより明確な基盤が導入されます。

leaanthony読了まで2分

macOS 上で動作する Wails v3 ネイティブフレームレスウィンドウ

本日、Wails v3 Beta をリリースします。

Wails を使うと、Go 開発者は使い慣れた Web フロントエンドツールを使用し、組み込みブラウザーではなく各プラットフォームのネイティブ WebView を利用して、デスクトップアプリケーションを構築できます。v3 は大きな進化です。アプリケーションに、より直接的な API、より明確なビルドモデル、そして Wails に対応を求める声が寄せられてきたデスクトップアプリケーションのための、より優れた基盤を提供します。

これはベータリリースであり、最終の 3.0 リリースではありません。デスクトップ API は安定しており、すでに複数のチームが v3 を本番環境で使用していますが、デプロイ前に十分なテストを行ってください。ベータ期間中は、コミュニティと協力して互換性やワークフローに関する最後の問題を洗い出します。Wails v2 は引き続き現行の安定版であり、今後も修正が提供されます。

ベータ期間中のドキュメント

ベータ期間中は、API とワークフローの最終検証を進める一方で、英語版ドキュメントを信頼できる唯一の情報源として維持します。現段階では翻訳の PR を受け付けていません。一般提供の開始前にドキュメントが十分安定し、翻訳者が度重なる変更に追われずに作業できるようになった時点で、翻訳作業を再開します。

v3 の内容

  • 複数ウィンドウのファーストクラスサポートを含む、明示的なアプリケーション API とウィンドウ API
  • コメントや意味のあるパラメーター名を保持した、より充実した TypeScript バインディングを静的ソース解析によって生成する Go サービス
  • バックエンド API とともにフロントエンドのアセットやスクリプトをバンドルできるサービス。インストール可能でより高機能なプラグインの基盤となります
  • 内容を確認、拡張、デバッグできる、可視性の高い Taskfile ベースのビルドシステム
  • ネイティブのデスクトップウィンドウを使用せずに、同じアプリケーションとサービスを実行するためのサーバービルド
  • サポート対象では、Intel、Apple Silicon、amd64、arm64 に対応した macOS、Windows、Linux のモダンなデスクトップサポート
  • iOS と Android の実験的なモバイルサポート。試用は可能ですが、デスクトップベータ版の互換性保証の対象外です

v3 が必要な理由

Wails v2 により、モダンな Web フロントエンドを備えた Go アプリケーションを簡単に構築できるようになりました。これまで、このプロジェクトと非常に多くのアプリケーションをしっかりと支えてきました。しかし、単一ウィンドウを前提とするコンテキスト駆動型ランタイムと、厳密に管理されたビルドプロセスのために、一般的なデスクトップ開発の一部が必要以上に難しくなっていました。

v3 は異なるモデルを出発点としています。アプリケーション、ウィンドウ、サービス、イベント、プラットフォーム機能は、いずれも明示的なオブジェクトです。そのため、アプリケーションが成長してもフレームワークを理解しやすく、複数ウィンドウなどの機能も回避策ではなく、アプリケーションモデルの通常の一部として扱えます。

新機能

実用的なデスクトップソフトウェアのためのアプリケーション API

v3 では、v2 の wails.Run(...) 設定方式を、明示的なアプリケーションライフサイクルに置き換えました。アプリケーションを作成し、サービスを登録してウィンドウを作成し、必要な動作を担うオブジェクトを直接操作します。

これにより、暗黙的なコンテキスト受け渡しの大部分が不要になります。ウィンドウの操作はウィンドウが担い、アプリケーション全体の操作はアプリケーションが担います。これは複数ウィンドウのアプリケーションにとってより自然なモデルであり、大規模なコードベースのテストや保守にも適しています。

アルファ期間中に v3 を使用した方々からは、圧倒的に肯定的なフィードバックが寄せられました。特に、明示的なモデルは開発者から好評です。コードを追いやすくし、所有関係を明確にするとともに、複雑なデスクトップアプリケーションがフレームワークに妨げられることなく成長できる余地をもたらします。

複数ウィンドウのファーストクラスサポート

複数ウィンドウは v3 の中核機能です。各ウィンドウには独自のライフサイクルがあり、実行時に作成、管理、終了できます。その結果、エディター、インスペクター、設定画面、ツールウィンドウ、または複数の独立した UI を必要とするデスクトップソフトウェアを、より明快に実現できます。

サービスと生成バインディング

従来のバインディングモデルは Go サービスに置き換わります。アプリケーションロジックを通常の Go コードとして維持しながら、フロントエンドとの境界を明示できます。バインディングはアプリケーションとそのサービスを反映した構造で生成されるため、フロントエンドに公開された API を見つけて使用しやすくなります。

v3 は、静的ソース解析を使用してこれらのバインディングを生成します。つまり、リフレクションを通じてビルド済みプログラムの情報を取得するのではなく、コメントや意味のあるパラメーター名など、開発者がコードに記述した情報をジェネレーターが保持できます。その結果、フロントエンド API はより充実して実用的になり、生成プロセスも理解しやすく保守しやすくなります。

サービスは、Go コードとともにフロントエンドのアセットやスクリプトをマウントすることもできます。これにより、ある機能に必要なバックエンド API、JavaScript または UI、ホストアプリケーションとの統合ポイントを、一貫性のある単一の場所にまとめられます。バインディングとフロントエンド依存関係をばらばらに自分で組み合わせるのではなく、プラグインをインストールし、そのサービスをマウントして機能を利用するだけで、Wails プラグインがすぐに高度な機能を提供できるようになります。汎用プラグインシステムはこのベータ版には含まれていませんが、v3 では、v2 のバインディングモデルでは実現できなかった形で、この方向性を現実的なものにしています。

確認して用途に合わせて変更できるビルドシステム

v3 では、プロジェクトのビルド構造が可視化されています。すべてのビルド上の判断を単一のコマンド内に隠すのではなく、プロジェクトには標準的なレイアウトと Taskfile ベースのビルド設定が用意され、アプリケーションと併せて内容を理解、拡張、デバッグできます。

より強固なクロスプラットフォームデスクトップ基盤

このベータ版は、amd64 および arm64 の Windows、Intel および Apple Silicon の macOS、amd64 および arm64 の Linux をサポートします。WebKitGTK 6.0 を使用する GTK4 が Linux のデフォルトスタックです。GTK3 は v3.0 シリーズ全体を通じて、レガシーオプションとして引き続き利用できます。モバイルサポートは期待の持てる機能ですが、引き続き実験段階であり、デスクトップベータ版の互換性保証には含まれません。

このリリースには、日常的な開発体験の信頼性を高めるために必要な取り組みも含まれています。プラットフォーム上の動作の改善、より高機能なウィンドウモデル、より明確な診断情報、チェックサムと来歴情報を備えたリリース成果物などです。

v2 からの移行

v3 は新しいメジャーバージョンであり、移行は単なるバージョン番号の変更ではなく、実際の移植作業です。主な概念上の変更点は、アプリケーションとウィンドウのライフサイクル、コンテキストに結び付いたバインディングに代わるサービス、v2 ランタイムパッケージに代わるアプリケーション API とウィンドウ API の直接利用、そしてフロントエンドバインディングの再生成です。

これらの変更を順に説明し、機能対応表とテストチェックリストも収録したv2 から v3 への移行ガイドを公開しています。このベータ版でサポートされる移行方法は、この手動ガイドに従うことです。すべての v2 プロジェクトがレビューなしで移行できるとは考えないでください。結果をテストし、ランタイム呼び出しを慎重に移植し、新しいアプリケーションの準備が整うまでは v2 を維持してください。

実験的な移行アシスタントについても評価を進めています。これは今回のベータリリースには含まれておらず、実際の代表的な v2 プロジェクトで検証が完了するまでは推奨しません。

これまでの道のりについて率直に

最初の v3 アルファタグは 2023 年 1 月 18 日に公開されました。アルファ段階としては長い期間であり、曖昧な言葉で済ませず、きちんと説明する必要があります。

その間に、プロジェクトは大きく変化しました。2021年9月に Windows 向けの最初の Wails v2 ベータ版がリリースされた時点では、リポジトリのスター数はおよそ4000でした。2022年9月の v2 リリース時には、およそ10300に達し、現在では35000を超えています。この成長はありがたいことですが、同時に、プロジェクトを適切に運営するために求められることも変わります。リリースに関する決定に依存するユーザーが増え、コントリビューターが参加するための明確な道筋がさらに必要になり、次の機能を単に追加するよりも、プロジェクトの予測可能性を高めることが作業のより大きな部分を占めるようになります。

この成長に応じて必要となったほど迅速かつ明確に、常にプロセスを適応できたわけではありません。その責任は私にあります。必要なのは、大げさな約束をしたり、あらゆる決定を形式的な手続きにしたりすることではありません。何がサポート対象で、何が実験的なのか、どのように意思決定を行うのか、そして次に何をするのかを、より明確にすることです。

その取り組みは、このベータ版から始まります。現在は、ベータ、リリース候補、GA の各マイルストーン、より明確な互換性に関する方針、更新されたセキュリティポリシーに加え、公開動作の変更や新機能のための WEP(Wails Enhancement Proposal)プロセスを整備しています。Wails の成長に合わせて、今後もロードマップを改善し、プロジェクトのガバナンスを見直していきます。目指しているのは、動きにくいプロジェクトではなく、信頼しやすく、貢献しやすいプロジェクトです。

また、Wails subreddit を再始動し、v3 が一般提供に向かう中で、実践的な議論、質問、フィードバックを行うもう一つの場として積極的に運営していきます。

ベータ版をインストールして試す

リリースの公開後、次のコマンドで最新の v3 CLI をインストールします。

sh
go install github.com/wailsapp/wails/v3/cmd/wails3@latest

プロジェクトを作成する前に、対話形式のセットアップウィザードを実行してください。ローカル開発環境を確認し、Wails に必要な依存関係の設定を支援します。

sh
wails3 setup

ダークモードで表示した Wails v3 セットアップウィザード

プロジェクトを作成する

準備が整ったら、次のコマンドでプロジェクトを作成します。

sh
wails3 init

再現可能なバグを見つけた場合は、wails3 doctor の出力を添え、可能であれば最小限の例とともに報告してください。新機能や公開動作の変更を提案する場合は、機能リクエストの issue ではなく、WEP のドラフト PR を作成してください。どちらの方法も、私たちが明確に対応し、ベータ版の進行を維持するうえで役立ちます。

謝辞

Wails v3 が存在するのは、未完成のビルドをテストし、難しいバグを報告し、ドキュメントを翻訳し、質問に答え、コードを提供し、プロジェクトにさらなる改善を求め続けてくださった皆さんのおかげです。ありがとうございます。

そして、この長い移行期間を通じて Wails を支えてくださったスポンサーの皆さまに、心から特別な感謝を申し上げます。皆さまの支援は、単にプロジェクトを存続させただけではありません。v3 に向けてプロジェクトを加速させるために必要なアーキテクチャ、ツール、テスト、ドキュメントに継続して時間を費やす機会を与えてくれました。すべてのテスターとコントリビューターがこのリリースの形成に貢献しましたが、その作業にふさわしい注意を注ぐことを可能にしたのは、スポンサーの皆さまです。

このベータ版は、v3 を適切に完成させるための協力をお願いするものです。実際に試し、これを使って構築し、どこで問題が起きるかをお知らせください。そして、3.0 までの道のりを短く、かつ慎重なものにするために力を貸してください。