Deno 2.9: ネイティブアプリケーション向け deno desktop の紹介

Deno 2.9: ネイティブアプリケーション向け deno desktop の紹介

Deno 2.9 は deno desktop を導入します。この新コマンドは、単一の TypeScript ファイルから Next.js のようなフルスタックフレームワークまで、さまざまな Deno プロジェクトを自己完結型で再配布可能なデスクトップバイナリに変換します。このツールは、アプリケーションコード、Deno ランタイム、そして Web レンダリングエンジンを単一のプラットフォーム固有実行ファイルにバンドルします。

deno desktop のコア機能

deno desktop は、バンドリング、レンダリング、アップデートを処理する高度に統合されたツールチェーンを提供することで、デスクトップアプリケーション構築の摩擦を減らすことを目指しています。

柔軟なレンダリングバックエンド

開発者は、バイナリサイズと一貫性のバランスを取るために、以下の 2 つの主要なレンダリング戦略から選択できます:

  • OS WebView(デフォルト): OS のネイティブ WebView を使用し、バイナリサイズを小さく保ちます。
  • Chromium(CEF): Chromium Embedded Framework(CEF)をバンドルし、macOS、Windows、Linux で同一のレンダリングを保証します。

フレームワーク自動検出

deno desktop には、一般的な Web フレームワーク向けの組み込みサポートが含まれています。以下を自動的に検出し、設定します:

  • Next.js、Astro、Fresh、Remix、Nuxt、SvelteKit、SolidStart、TanStack Start、Vite SSR。

リリースモードでは本番サーバーを起動し、開発時には --hmr フラグをサポートして、元の Web プロジェクトのコード変更なしでホットモジュール置換が可能です。

プロセス内通信

Electron や Tauri が通常ソケットベースのプロセス間通信(IPC)に依存するのに対し、deno desktop はバックエンドと UI 間の通信にプロセス内チャネルを使用します。呼び出し境界を越える際に値はエンコードされますが、このアーキテクチャによりプロセス間往復のオーバーヘッドが排除されます。

クロスプラットフォームコンパイルとアップデート

  • シングルマシンビルド: バックエンドは必要に応じてダウンロードされ、ローカルでビルドされないため、1 台のマシンから macOS、Windows、Linux 用にコンパイルできます。
  • バイナリ差分自動アップデート: ランタイムには Deno.autoUpdate() を使用した組み込みアップデートシステムが含まれます。latest.json マニフェストと bsdiff パッチを利用して、アップデートのポーリング、適用、失敗時の自動ロールバックを行います。

技術実装と API

基本的なデスクトップアプリケーションの作成は最小限の設定で済みます。main.ts にシンプルな Deno.serve() ハンドラを書き、deno desktop main.ts コマンドでバイナリに変換できます。

統合機能

deno desktop は包括的なネイティブ API と設定を提供します:

  • ウィンドウ管理: Deno.BrowserWindow が複数ウィンドウのライフサイクルとイベントを処理します。
  • ネイティブ UI 要素: アプリケーションメニュー、コンテキストメニュー、システムトレイアイコン、macOS ドック統合をサポートします。
  • OS 統合: prompt()alert()confirm() のネイティブポップアップや、Web Notification API を介したネイティブ OS 通知を提供します。
  • 開発者ツール: Deno ランタイムと WebView の両方に同時にアタッチできる統一 DevTools を提供します。

コミュニティの視点と分析

発表後、開発者コミュニティは deno desktop アーキテクチャに関していくつかの戦略的利点と潜在的懸念を指摘しました。

既存フレームワークとの比較

一部のユーザーは、deno desktop が小さなバイナリのためにネイティブ WebView を使用する点で Tauri のアーキテクチャに似ているが、ビジネスロジックを Rust ではなく TypeScript で書く点が異なると指摘しました。

"Sounds like a similar architecture to Tauri, but your business logic is in typescript instead of rust."

他のユーザーは、型情報を削除せずに直接 TypeScript を実行できることが、Node 系代替品に対する Deno の競争優位性をもたらすと主張しました。

セキュリティと権限

コンパイルされたバイナリの文脈で Deno の権限システムに関する質問が出ました。現在、コンパイル時に付与された権限はバイナリに埋め込まれます。

UI と UX の懸念

批評家は、デスクトップ UI に Web 技術を使用すると、ランタイムに関係なくネイティブ OS のデザインパターンに従わないアプリケーションになりがちだと指摘しました。

"The reason Electron apps get a lot of flak is because they are everything but a UI toolkit. They consistently miss the mark in adopting UI patterns from their host OS."

パフォーマンスとリソース管理

CEF ベースのアプリのバイナリサイズに関する議論が続いています。ロードマップ案として、アプリ間で共有 CEF ランタイムを使用し、数百メガバイト規模のフットプリントを数メガバイトに削減する案が提案されています。

Summary

Deno 2.9 は deno desktop を導入し、Deno プロジェクトを macOS、Windows、Linux 向けの自己完結型で再配布可能なデスクトップバイナリにバンドルするツールを提供します。

Sources