Pake: わずか5MBでデスクトップアプリを作れるCLIツール

BBetter Stack
컴퓨터/소프트웨어창업/스타트업AI/미래기술

Transcript

00:00:00Paikはコマンドラインツールで、Webサイトをコマンド一つでネイティブなデスクトップアプリに変換できます。
00:00:05Rustで構築されているため、生成されるアプリのサイズは約5MBと非常に軽量です。
00:00:10ElectronのようにアプリごとにChromeのコピーを丸ごと含める必要はありません。さらに、
00:00:15Rustのコードを一行も書かずに、カスタムCSSやJavaScriptの挿入、トレイアイコンの設定、
00:00:20タイトルバーのスタイルの変更まで可能です。でも、なぜ他の類似ツールではなくこれを使うのか、
00:00:25Rust製なのにPNPMやNPMが必要なのか。正直あまり知りたくはありませんが、
00:00:31チャンネル登録をして、一緒に見ていきましょう。Paikは2022年に、中国のプロダクトエンジニアであるTW93氏によって作成されました。
00:00:40彼は、私も実際に愛用しているMac最適化ツールの「Mole」の作者でもあります。
00:00:45Paikのコンセプトは非常に理にかなっています。考えてみてください。
00:00:49YouTube Music、Gmail、Instagramなどには公式のネイティブアプリが存在しません。
00:00:55普段はブラウザのタブ内で使いますが、もしブラウザとは別に独自のドックアイコンを持ち、
00:00:59より快適に動作するスタンドアロンアプリとして使いたいなら、これは非常に便利です。
00:01:04そこでPaikの出番です。PaikはElectronよりも優れています。
00:01:09なぜならTauri 2をベースにしており、システムのネイティブなWebViewを利用するため、
00:01:14アプリがより小さく、高速で、メモリ消費も抑えられます。Electro、Bun、VercelのZero Nativeに近い仕組みです。
00:01:19それらについては後ほど詳しく話します。TW93氏がTauri 2の上に書いたカスタムコードは
00:01:24約1800行のRustコードで、ウィンドウ管理やネイティブメニュー、JavaScriptの注入などを
00:01:30処理しています。コマンドを実行するだけでPaikがすべてを処理してくれます。実際に
00:01:35私のフィルムエミュレーションプロジェクトをPaikでスタンドアロンアプリにしてみましょう。Paik CLIをインストールすると、
00:01:40Moleを使ったことがある人には非常に馴染み深く見えるはずです。フラグが少ないのも個人的には良い点だと思います。
00:01:45プロジェクトサーバーを起動した状態で、URLとアプリ名を入力してPaikを実行します。
00:01:50エンターキーを押すとアイコンを取得し、アプリ作成プロセスが始まります。
00:01:55所要時間は5〜10分ほどです。完了すると4.3MBのファイルが作成されます。
00:02:00クリックするとアプリが表示されます。これをアプリケーションフォルダにドラッグしてインストールできます。
00:02:05アイコンはうまく読み込めなかったようですが、問題ありません。
00:02:10アプリを開くとすぐに起動し、ドックにもアイコンが表示されます。ビデオを選択しても問題なく動作します。
00:02:14アクティビティモニタで確認してみましょう。
00:02:19このアプリのメモリ使用量はわずか61MBです。Arcブラウザはもっと大量に消費しています。
00:02:24アプリのサイズは55MBで、SlackのようなElectronアプリが310MBあるのと比べると非常に軽量です。
00:02:30しかし前述の通り、Paikには興味深いオプションもいくつかあります。
00:02:35例えば、debugフラグ付きでビルドすれば開発者ツールにアクセスできます。
00:02:40また、hide title barフラグを使えばフレームレスなタイトルバーになり、よりアプリらしくなります。
00:02:46ただ、このアプリはフレームレス用に設計されていないようです。しかし幸いなことに、
00:02:51Paikにはアプリのソースコードを編集せずに修正するオプションがあります。カスタムCSSを書き、
00:02:56injectフラグを使って挿入しました。上部に余白ができたおかげで解消しましたが、
00:03:01今度は下側にスクロールスペースができてしまいました。show system trayフラグを使えば、
00:03:06システムトレイにアイコンを表示し、アプリの表示・非表示を切り替えられます。CSSだけでなくJavaScriptの挿入も可能です。
00:03:12ただし、現時点ではPaikがデフォルトで提供するメニュー項目を編集することはできないようです。
00:03:17また、Paikは実行中のURLでしか動作しません。サーバーを閉じると、アプリを開いても空白画面が表示されます。
00:03:23ただ公平に言えば、Paikはローカルアプリ用に設計されたわけではありません。試しにYouTube Musicを
00:03:28コマンド一つでアプリ化しましたが、驚くほど快適です。サイトの仕組み上、オフラインでも動作します。
00:03:33今ではこれをメインの音楽プレイヤーとして使っています。
00:03:38ただ、基本的には実行中のURLをラップするツールなので、
00:03:42ローカルファイルを指定するオプションを使わない限り、コードをバンドルするツールではありません(これについては動画作成後に知りました)。
00:03:48また、作りがあまり良くないとも言えます。というのは、
00:03:53私はPNPMやNPMではなくBUNを使ってPaikをインストールしましたが、内部でTauriのビルドにはいずれかが必要でした。
00:04:00私のPNPMのバージョンが要件より新しかったためにビルドが拒否され、
00:04:05動作させるためにClaude Codeを使ってPaikのソースコードを書き換える必要がありました。
00:04:11問題のissueは見つけましたが、コンパイル済みのバイナリで提供されていれば全て解決していたはずです。
00:04:15それがElectroBUNやZeroNativeのようなツールを使う利点です。
00:04:20ElectroBUNはWebViewの裏で真のBunランタイムを提供するため、バックエンドのロジックを実行できます。
00:04:25さらにZeroNativeは、Cライブラリを直接呼び出せる完全なZigシェルを提供します。
00:04:31つまり、ライブWebサイトをラップするだけならPaikが最速ですが、それ以上の機能が必要なら
00:04:36他のツールを選ぶのが賢明です。

Key Takeaway

PaikはTauri 2を利用してWebサイトをわずか5MB程度の軽量なデスクトップアプリへ即座に変換できるため、特定のWebサービスをブラウザから分離してスタンドアロンで利用したい場合に最適である。

Highlights

  • PaikはWebサイトを約5MBのネイティブデスクトップアプリに変換するCLIツールである。

  • Tauri 2をベースとし、システム標準のWebViewを利用することでElectronよりも軽量かつ高速に動作する。

  • アプリのメモリ消費量は61MB程度に抑えられ、Slack等の主要なElectron製アプリと比較して大幅に軽量である。

  • カスタムCSSやJavaScriptの挿入、システムトレイアイコンの配置など、ソースコードを変更せずに外観や機能を調整できる。

  • 実行中のURLをラップする仕組みであるため、基本的にはローカルサーバーが稼働している必要がある。

Timeline

Paikの概要とElectronに対する優位性

  • PaikはWebサイトをコマンド操作でネイティブアプリ化するRust製のツールである。
  • 生成されるアプリサイズは約5MBと非常に小さく、ElectronのようにChromeのコピーを内包しない。
  • Tauri 2を基盤としており、システムのネイティブWebViewを利用することでメモリ消費を低く抑える。

YouTube MusicやGmailなど、公式アプリが存在しないWebサービスを快適なスタンドアロン環境で利用するために設計されている。1800行程度のRustコードによって、ウィンドウ管理やメニュー設定、スクリプト注入などを効率的に処理する。

アプリ作成の実践とカスタマイズ機能

  • URLとアプリ名を指定してCLIを実行するだけで、数分でスタンドアロンアプリが生成される。
  • デバッグフラグやタイトルバー非表示フラグにより、アプリの外観を調整できる。
  • Inject機能を利用してカスタムCSSやJavaScriptを挿入し、ソースコードに触れずUIの修正が可能である。

実例としてフィルムエミュレーションプロジェクトをアプリ化した際、サイズは4.3MBに収まった。アクティビティモニタ上でのメモリ使用量は61MBであり、ArcブラウザやSlackと比較して圧倒的な軽量さを実現している。

制約事項と他のツールとの比較

  • 実行中のURLをラップするツールであり、基本的にはローカルサーバーが閉じると画面が空白になる。
  • 内部的なビルド要件としてPNPMやNPMが必要であり、環境依存で設定が複雑になる場合がある。
  • バックエンドロジックの実行が必要な場合は、BunランタイムやZigシェルを提供するElectroBUNやZeroNativeの方が適している。

Webサイトをラップする目的では最速のソリューションだが、ローカルファイルのバンドルや高度なバックエンド処理には向かない。コンパイル済みバイナリで提供されていない点が、特定の実行環境において導入の障壁となる可能性がある。

Community Posts

No posts yet. Be the first to write about this video!

Write about this video