Electronアプリのビルドサイズを削減するためのDeno移行

Computing/Software4분 읽기

TuBrief 편집팀 원본 영상을 바탕으로 AI의 도움을 받아 작성했습니다. 원본 영상이 기준입니다. 원본 영상: Deno Desktopならアプリのサイズを70%削減可能 · Better Stack

巨大な配布ファイルとの決別

Electronアプリを実行するたびに数百メガバイトのChromiumバイナリを一緒に配布するのは非効率だ。個人開発者にとって、配布ファイルのサイズはインストール率に直結する。Deno DesktopはOSネイティブのWebビューを使用する。既存の180MB規模のアプリを19MBレベルにまで削減可能だ。単なる技術変更ではなく、運用環境の重荷を軽減する作業である。

マイグレーションスプリントのチェックリスト

10日以内にリファクタリングを終えるには、既存の構造を捨てる必要がある。

  • package.jsonの複雑な依存関係の代わりにdeno.lockを使用し、キャッシュ管理体系を簡素化する。
  • Electron Builderやasarのような重いツールを削除し、Deno内部ビルドエンジンを設定する。
  • ipcMainとipcRendererの通信レイヤーを削除し、win.bind()メソッドでプロセス制御権を統合する。

この作業を終えれば、ビルドプロセスの時間を40%短縮できる。

プラットフォーム別のWebビュー差異の制御

Mac、Windows、LinuxではWebエンジンが異なる。WKWebViewとWebView2はレンダリング結果がそれぞれ異なる。CSS仕様を解釈する方法さえ異なる。特にLinuxの古いWebKitGTKはレイアウトを頻繁に崩す。

プラットフォーム間の異質感(違和感)を減らすには、補正スクリプトをデプロイパイプラインに組み込む必要がある。

  1. CSSリセットコードで、すべてのブラウザのデフォルト余白を0に強制する。
  2. ブートストラップ段階でbindings.getPlatformMetadata()を呼び出し、実行中のOSを判別する。
  3. macOSではフレームレスモード時に信号機エリアを考慮して28pxの高さの余白をラッパーdivで確保し、Windowsではダークモードの検知可否に応じてCSSクラスを注入する。

この方式を適用すれば、OSごとに個別にUIを修正するコストが削減される。

ネイティブAPI呼び出しのセキュリティラッパー実装

ElectronのIPCチャネルはセキュリティ事故が多い。Deno Desktopはダイレクトバインディングでデータを伝達し、セキュリティを高める。OS機能を安全に制御するには、ラッパークラスを直接実装しなければならない。

  • ファイル入出力は必ずサンドボックスパスである /app_sandbox_storage 内に限定する。
  • クラスコンストラクタにPath Traversal(パストラバーサル)防止ロジックを含め、パス内の .. 文字を即座に遮断する。
  • 通知などのシステム機能を呼び出す際は、引数として渡されたリソースがホワイトリストにあるか確認し、base64エンコードデータのみを使用する。

GitHub Actionsによるデプロイ自動化

OSごとに環境を設定してビルドしてはならない。GitHub Actionsの行列(マトリックス)戦略を使えば、一度のコミットでWindowsのmsi、LinuxのAppImage、Macのdmgファイルを同時に生成できる。

  • ubuntu-latest環境でWindowsとLinuxを、macos-14でMacバイナリをビルドする。
  • deno desktop --target コマンドに --compress=xz オプションを追加し、最終ファイルの容量を削減する。
  • Linuxの成果物はxvfb-runを実行して、仮想環境で実際の動作可否をテストする。

このパイプラインを構築すれば、手動ビルドよりもデプロイサイクルが2倍速くなる。Denoへの転換は、軽量バイナリとサンドボックスセキュリティという2つの利点をもたらす。

관련 영상

Deno Desktopならアプリのサイズを70%削減可能

Better Stack6:17

커뮤니티의 다른 글

댓글

로그인하고 댓글을 남겨 보세요.

아직 댓글이 없습니다.