Wailsでデスクトップアプリを作る #1 Wailsとは — Goで作る軽量デスクトップアプリ

読了 6分

Go基礎講座でGoの基本を身につけると、実践の多くはWebサーバーとCLIに進みます。しかしGoで作れるのはサーバーだけではありません。チームで使う小さなユーティリティ、ローカルファイルを扱うツール、社内ダッシュボードのクライアントのように、ウィンドウを持つデスクトップアプリが必要になる場面があります。そのときGoのコードとWebフロントエンドの技術をそのまま持ってデスクトップに進めるフレームワークがWailsです。

全 8 編(本編 6 編 + 応用 2 編)です。

  • #1 Wailsとは — Goで作る軽量デスクトップアプリ ← この記事
  • #2 プロジェクト構造と開発ループ — wails devとバインディング
  • #3 Goとフロントエンドの連携 — メソッドバインディングとイベント
  • #4 システム統合 — ダイアログ・メニュー・ウィンドウ制御
  • #5 実践機能 — 設定の保存とエラー処理
  • #6 ビルドと配布 — プラットフォーム別パッケージング
  • #7 フロントエンドフレームワークを付ける — Svelte・Vue・React(応用)
  • #8 デバッグ — 開発者ツール・ログ・よくあるエラー(応用)

この記事では、デスクトップアプリフレームワークの中でWailsがどこに位置するのかを確認し、インストールと環境診断を経て、最初のアプリのウィンドウを開くところまで進めます。

デスクトップアプリフレームワークの全体像 #

Web技術でデスクトップアプリを作るアプローチは、すでに主流になっています。VS Code、Slack、Discordはすべてこの方式です。代表的な選択肢3つを比較すると、Wailsの位置がはっきりします。

区分ElectronTauriWails
バックエンド言語Node.jsRustGo
レンダリングChromiumをアプリに同梱OS内蔵のWebViewOS内蔵のWebView
配布物のサイズ数十〜数百MB数MB数MB
メモリ使用量大きい(Chromiumプロセス)小さい小さい
エコシステムの成熟度最大大きい成長中

ElectronはChromiumブラウザ全体をアプリに入れて配布します。どのOSでも同じレンダリングを保証する代わりに、シンプルなメモアプリでもインストーラーが100MBを超え、メモリも大きく占有します。TauriとWailsは逆のアプローチです。OSにすでに入っているWebView(WindowsのWebView2、macOSのWKWebView、LinuxのWebKitGTK)を借りて使うため、配布物が数MB程度まで小さくなります。

TauriとWailsの違いはバックエンド言語です。TauriはRust、WailsはGoです。すでにGoを使っているなら、ゴルーチン、標準ライブラリ、既存のGoコードをそのままデスクトップアプリのバックエンドに持ち込めることが、Wailsを選ぶ理由になります。

Wailsの動作構造 #

Wailsアプリは2つの層で構成されます。

Wailsアプリの構造
┌────────────── ネイティブウィンドウ ─────────────┐
│                                              │
│   Webフロントエンド (HTML/CSS/JS, WebView)     │
│   画面の描画、ユーザー入力                       │
│                                              │
│          ▲ 呼び出し         │ 結果/イベント     │
│          │                 ▼                 │
│   Goバックエンド (単一バイナリ)                  │
│   ファイル、ネットワーク、ビジネスロジック          │
└──────────────────────────────────────────────┘

UIはWeb技術で描き、ファイルアクセスや重い計算のようにブラウザにはできないことをGoが受け持ちます。2つの層はWailsが自動生成するバインディングでつながっていて、フロントエンドのJavaScriptからGoのメソッドを関数呼び出しのように使えます。この連携がシリーズ全体を貫く核心概念で、#3で詳しく扱います。

ビルドの成果物は、フロントエンドの出力まで内蔵した単一の実行ファイルです。別途ランタイムをインストールする必要はなく、ファイル1つを渡せば動きます。

v2とv3 — このシリーズの基準 #

Wailsは現在v2が安定版で、次期バージョンのv3は2026年7月時点でアルファ段階です。v3はマルチウィンドウ対応や新しいAPI構造を予告して活発に開発されていますが、正式リリースの時期はまだ発表されていません。このシリーズは安定版のv2を基準に進め、v3で変わる点は最終回で展望として整理します。

インストールと診断 #

Go 1.21以上とnpmがインストールされている必要があります。Wails CLIはgo install一行でインストールできます。

Wails CLIのインストール
go install github.com/wailsapp/wails/v2/cmd/wails@latest

デスクトップアプリにはOSごとの依存関係があるため、インストール直後に診断コマンドで環境を確認しておくのがよいです。

環境診断
$ wails doctor
Wails CLI v2.10.1
...
# Diagnosis
Your system is ready for Wails development!

wails doctorはGo、npm、プラットフォーム依存関係のインストール状態を表で示し、足りない項目のインストール方法まで案内してくれます。最後の行にreadyのメッセージが出れば準備完了です。

注記
WindowsではWebView2ランタイムが必要です。Windows 11と最新のWindows 10にはすでに入っていて、ない環境ではWailsでビルドしたアプリが初回起動時にインストールを案内します。Linuxはディストリビューションに応じてWebKitGTKの開発パッケージ(webkit2gtk系)のインストールが必要で、具体的なパッケージ名はwails doctorが教えてくれます。

最初のアプリを実行する #

いよいよプロジェクトを作ってウィンドウを開きます。wails initにプロジェクト名とテンプレートを指定します。

プロジェクトの作成と実行
wails init -n hello-wails -t vanilla
cd hello-wails
wails dev

初回の実行は、フロントエンドの依存関係のインストールとビルドのため少し時間がかかります。完了するとネイティブウィンドウが開き、入力欄に名前を入れると挨拶が表示される基本アプリが現れます。見た目は普通のWebページですが、挨拶を作って返しているのはブラウザのJavaScriptではなく、裏で実行中のGoコードです。

-t vanillaはフレームワークなしの素のHTML/JSテンプレートを指定します。React、Vue、Svelteのテンプレートも用意されていて、テンプレートの選択肢とプロジェクト構造は次回で1つずつ開いていきます。

まとめ #

この記事の要点は3つです。

  • WailsはGoバックエンドとWebフロントエンドを1つのネイティブウィンドウにまとめるデスクトップフレームワークです。
  • Electronと違いOS内蔵のWebViewを使うため、配布物は数MB程度の単一実行ファイルになります。
  • 安定版はv2でv3はアルファ段階のため、このシリーズはv2を基準に進めます。

次回の「Wailsでデスクトップアプリを作る #2 プロジェクト構造と開発ループ — wails devとバインディング」では、wails initが作ってくれたファイルを1つずつ開いてそれぞれの役割を確認し、ホットリロードの開発ループとバインディングの最初の動きを見ていきます。

X