
2026/06/22 14:38
Deno デスクトップ
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Deno Desktop v2.9.0 では、TypeScript プロジェクト(Next.js、Astro、Nuxt、Fresh、Remix、SvelteKit、SolidStart、TanStack Start、および Vite SSR を含む)をセルフコンテインドで再配布可能なデスクトップバイナリに変換するキャナリービルドが追加されました。この機能は
deno upgrade canary で利用可能であり、コード、ランタイム、レンダリングエンジンをプラットフォームごとにバンドルするとともに、Deno の互換レイヤーを通じて Node.js/npm エコシステムとの完全な互換性を維持します。デフォルトでは OS 固有の WebView を使用してバイナリサイズを小さく保ちますが、macOS、Windows、Linux の間で一貫した視覚的なレンダリングを実現するために、バンドルされた Chromium (CEF) バックエンドを選択することも可能です。このツールはコード変更なしでのフレームワークの自動検出、単一のマシンからのクロスコンパイル、ソケットベースの IPC 往復を排除するインプロセス通信チャネルをサポートします。
新しい機能には、
latest.json マニフェストと bsdiff パッチを使用した内蔵の自動更新があり、失敗時のロールバックを伴う自動ポーリングが Deno.autoUpdate() を通じて実装されています。開発者は main.ts で Deno.serve() を使用して HTTP サーバーアドレスを自動的にバインドすることで、ワンファイルデスクトップアプリケーションを作成できます。追加の機能には、ネイティブシステムトレイ/ドックとの統合、ダイアログ(prompt、alert、confirm)、Web 通知 API のサポート、およびホットモジュール置換(--hmr)が含まれます。コマンドキーと TypeScript API は安定版リリースに達するまで変更の対象となる可能性があることに注意してください。また、この時点ですべての機能に関する具体的な API キーも最終決定されます。詳細な使用方法については、CLI リファレンスおよび deno.json デスクトップスキーマ構成を参照してください。本文
Deno Desktop:Deno プロジェクト向けデスクトップアプリ変換ツール
概要
Deno Desktop は、Deno プロジェクト(単一ファイルから Next.js アプリまで)を再配布可能なバイナリへ変換するツールです。すべてのコード、Deno ランタイム、およびウェブレンダリングエンジンを各プラットフォーム向けにまとめてバンドルします。
導入方法
Deno Desktop は Deno v2.9.0 に搭載されていますが、現時点では安定版リリースには含まれていません。
- 今すぐ試す場合:
ビルドをインストールしてください。canarydeno upgrade canary - 注意:機能の安定化までの間は、コマンドや構成キー、TypeScript API が変更される可能性があります。
主な特徴と解決課題
既存のウェブスタック(Electron, Tauri など)にはバイナリサイズの大型化やプラットフォームサポート不足などの妥協点があります。Deno Desktop は以下の方針でこれらの課題を解決します:
- 軽量かつ Node.js 互換
- デフォルトでは OS 標準の WebView を使用し、小型なバイナリを実現。
- Deno の Node.js 互換レイヤーにより、npm エコシステムをそのまま利用可能。
- macOS/Windows/Linux で一貫したレンダリングが必要な場合は、バンドルされた Chromium (CEF) を選択可能。
- フレームワークの自動検出
- Next.js, Astro, Fresh, Remix, Nuxt, SvelteKit, SolidStart などへの適用でそのまま動作。
- コード変更なしで既存の Web プロジェクトをデスクトップアプリへ移行可能(リリースモード用)。
- 開発サーバー時は
フラグが必要です。--hmr
- プロセス内結合による高性能通信
- ソケットベースの IPC ではなく、プロセス内のチャンネルを通じた通信を採用。
- Deno コードと Webview 間のクロスプロセス往復処理が不要で高速化を実現。
- ワンマシンでのクロスコンパイル
- 単一のマシンから macOS, Windows, Linux のすべてのプラットフォーム向けにビルド可能。
- バックエンドライブラリはダウンロードされ、ローカル構築の必要はありません。
- 自動アップデート機能内蔵
マニフェストと bsdiff パッチのみで配布可能。latest.json- ランタイムが自動的にポーリングし、適用失敗時はロールバックも自動化されます。
基本使用例:Hello, Desktop
1 つのファイル(
main.ts)でデスクトップアプリを作成できます。
// main.ts Deno.serve(() => new Response("<h1>Hello, desktop</h1>", { headers: { "content-type": "text/html" }, }) );
コンパイルされたバイナリを実行すると、
Deno.serve() ハンドラにバインドされたローカル HTTP サーバーを表示するウィンドウが開きます。
実行コマンド
- macOS / Linux:
./main- Windows:
.\main.exe
ポート番号やホスト名の指定は不要です(Webview が自動的にアドレスをバインドするため)。詳細は「HTTP サービング」セクションを参照してください。
セクション目次
以下のトピックについて詳しく解説しています:
- 構成:
ファイル内のデスクトップ設定方法。deno.json - バックエンド: CEF, WebView, Raw の種類と選択基準。
- HTTP サービング:
統合およびサービングモデル。Deno.serve() - フレームワーク対応: Next.js, Astro, Fresh, Remix, Nuxt, SvelteKit などへの対応状況。
- Windows 特有機能:
ライフサイクル、複数ウィンドウ、イベント処理。Deno.BrowserWindow - バインディング: Webview から
を通じて Deno コードを呼び出す方法。bindings.<name>() - メニュー: アプリケーションメニューとコンテキストメニューの作成。
- トレイとドック: システムステータスアイコンおよび macOS ドックの活用。
- ダイアログ: ネイティブポップアップとして動作する
,prompt()
,alert()
。confirm() - 通知: Web Notification API を用いたネイティブ OS 通知の実装。
- ホットモジュール置換 (HMR): フレワーク/非フレームワークアプリへの
フラグ適用方法。--hmr - 開発者ツールの統合: Deno ランタイムと Webview に統一された DevTools を付加。
- 自動アップデート機能:
, マニフェスト, bsdiff, ロールバック処理の仕組み。Deno.autoUpdate() - エラー報告: 未捕捉例外やパニックのキャプチャ方法。
- 配布: クロスコンパイル、出力形式、インストーラー作成の流れ。
- 比較検討: Deno Desktop と Electron, Tauri, Electrobun, Dioxus の関係性解説。
- Deno Desktop CLI リファレンス: コマンド、フラグオプション、
デスクトップスキーマの詳細説明。deno.json