Goで書いた小さなCLIを毎朝使うようになってから、私は「動けばいい」という言い方を前より信用しなくなりました。動くこと自体は最低条件で、そのあとに残る重さや更新の面倒さや、消しやすさまで含めて道具だと思うようになったからです。
Electron製のアプリを見るときに引っかかるのも、だいたいそのあたりです。画面が出るとか、ショートカットがあるとか、そういう表面だけなら十分なものは多いです。ただ、使う側のPCにはChromiumとNode.jsの都合まで一緒に乗ってきます。自分の机の上に置くものとして考えると、私はそこを雑に流せません。
サイズを見ると気分の問題では済まない
今日、確認のために node:20-bookworm のコンテナで electron@31.7.7 を素の状態から入れてみました。やったことはかなり単純で、空のディレクトリで npm init -y したあとに npm install electron@31.7.7 を流しただけです。
docker run --rm -v "$PWD:/work" -w /work node:20-bookworm npm init -y
docker run --rm -v "$PWD:/work" -w /work node:20-bookworm npm install electron@31.7.7
du -sh node_modules node_modules/electron/dist
手元の確認では node_modules 全体が 267MB、node_modules/electron/dist だけで 260MB ありました。もちろん実際の配布物はここから作り方次第で変わります。それでも、最初の一歩からこれだけの塊を抱えるのは軽い話ではありません。
私は別に「重いものは全部悪い」と言いたいわけではないです。ブラウザ技術でデスクトップアプリを組める便利さは本物です。Webのチームがそのままアプリまで持っていける場面もあるでしょうし、短期間で形にしたい事情も理解できます。
ただ、その便利さの請求書を最後に払うのは、だいたいユーザーのPCです。メモリを食うこともありますし、起動の鈍さとして返ってくることもあります。タスクマネージャーを開いたときに、またお前か、となる種類のソフトがありますが、私はあれがかなり苦手です。
配る道具は削除の軽さまで含めて設計だ
最近あらためて思うのですが、配布しやすさはインストールの簡単さだけではありません。消しやすさもかなり大事です。気に入らなければすぐ捨てられます。更新が止まっても邪魔になりません。そのくらい身軽な道具のほうが、結局は長く残ります。
この感覚は、Goで単体バイナリの小さな道具を書いていると余計に強くなります。朝に使うだけのCLIなら、展開してすぐ動いて、不要になれば消して終わり、くらいがちょうどいいです。私はそういう雑味の少ない道具を一度知ると、Electronの「でも作りやすいから」という言い訳に前ほど乗れなくなります。
AIでボイラープレートを出すのは簡単になりました。だからこそ、どの技術を選ぶかの雑さはむしろ目立ちます。書く手間が減ったぶん、重さや配布や保守の癖まで考えるのが人間の仕事として残った感じがします。
Electronを全否定するつもりはありません。けれど、自分のPCに置くソフトくらい、自分の目で重さを見て、自分の感覚で嫌がっていいと思います。動いたから採用、では私はもう止まれません。そこから先にある不快さまで含めて、ちゃんと触って決めたいです。