Eleventy
原文は Tom MacWright により に公開されました。 このブログを購読する

このブログを2011年に始めたとき、Jekyllで作った。Jekyllは15年間よく働いてくれた。十分に速かったし、ノートPCを買い替えるたびに環境を入れ直すのに1、2時間かかったとはいえ、基本的には問題なく動いていた。だが昨年末、ローカルの環境をすべて最新のランタイムにアップデートしていたとき、JekyllをRuby 4で動かそうとしても上手くいかなかった。Jekyllプロジェクトは2月にRuby 4への対応(たった1行の修正)をマージしたが、それをきっかけに移行を決めた。
おそらくJekyllをあと数年使い続けることもできただろう。ただ、プロジェクトの勢いが鈍っていることは否めないし、このブログ向けの最適化スタックも少し複雑になってきていた。より最適化を意識したツールを使ってツールチェーンをシンプルにしたいとも思っていた。
というわけで、11tyに切り替えた。あるいは、まもなくBuild Awesomeという名前に変わるものに。騒動が起きる前から切り替えて、この記事も書き始めていた。思うところはあるが、それは本題ではない。
なぜmacwright.comにEleventyを選んだのか?
800ポンドのゴリラはEleventyではなくAstroだ。他にもhakyll(Haskell製)やdodeca(Rust製)といった静的サイトジェネレーターはたくさんある。自分で作るという手もあるし、実際にそうしてきた人も大勢いる。
このサイトについては、他に利害関係者はいない。誰かに新しい技術を教える必要もなければ、自分の選択で誰かに感心してもらう必要もない。このウェブサイトに求める優先事項はシンプルだ。
- シンプルさ
- 長く使えること
- 速さ
内部的にも外部的にもシンプルさを重視している。APIのシンプルさも、実装のシンプルさもだ。どんなツールでもいずれ壊れることを前提にしているし、壊れたときに中を開けて原因を見つけられるようにしておきたいからだ。また、複雑なプロジェクトは維持が桁違いに難しくなるため、圧倒的な支配的地位を築かない限り長続きしにくいというのも理由だ。
長く使えるかどうかを予測するのは難しい。リンディ効果という近道がある。
腐らないもの、たとえば技術やアイデアの将来の寿命は、現在の年齢に比例する
とはいえテックの世界では、最新のソリューションが最良であることもある。多少の予測は必要だ。コントリビューターの多さも指標になるが、それが複数の組織にまたがっている場合に限る。同じ企業に属するコントリビューターがたくさんいるプロジェクトは、全員がレイオフされればあっという間に静かになる。支配や権力が何度か移り変わっても生き残ってきたかどうかも重要だ。
このウェブサイトに関しては、開発時の速さよりもエンドユーザーにとっての速さを重視している。Markdownの変更をプレビューするのに100ミリ秒かかるかどうかは、読者にとってのページ読み込みがどれだけ速いかに比べれば大した問題ではない。どの静的サイトジェネレーターも、変なことをしなければ十分速い。私の経験上、ビルドが「遅い」SSGは、ネストしたループが大半の時間を食っていた。
Eleventyはこれらの条件を十分に満たしている。コントリビューターの数はかなり少ないが、Zachは非常に粘り強く、あらゆる修羅場をくぐり抜けてきた。サイトのビルド自体が速いだけでなく、サイトを最適化するためのツールも豊富で、それらによってmacwright.comのために自前で書いていたコードを置き換えることができた。そしてAstroとは対照的に、内部的なシンプルさを優先して作られている点が際立っている。コード行数という意味でも小規模なプロジェクトだし、巨大な依存関係にも頼っていない。Astroを新規インストールするとViteやesbuildを含めて246個の依存関係が入るのに対し、Eleventyはその約半分の116個で、容量も87.9MBではなく14.6MBで済む。
Eleventyはもっとシンプルにできると思うし(この記事を書いている間にその方向で小さなPRも出した)、不要なマイクロ依存を抱えた古い依存関係を削ればいい。依存関係を削除・削減するe18eプロジェクトは本当に必要とされている。
SSGで生計を立てるのは難しい
もちろん、ニュースもある。EleventyはBuild Awesomeになった。これは他のプロジェクトによる同様の発表が相次いだ後のことだ。
これらはオープンソースのプロジェクトなので、「買収」という言葉には注釈が必要だ。通常はチームを雇い入れ、商標や既存の事業があればそれを引き継ぐという意味合いだ。
Zachはこの動きで少なからず批判を受けた。『Build Awesome』はミレニアルっぽくて、Eleventyの方がずっとクールな名前だったというのは同感だ。リブランドは奇妙だった。
ただ、総じて理解はできる。大きな戦略やプロダクトのローンチを少しずつ小出しにしながら全員に相談するわけにはいかない。EleventyはWeb Awesomeの他のプロダクト、つまりアイコンやウェブコンポーネント、そして静的サイトビルダーともよく合っている。どれもフロントエンド至上主義ではなく、伝統的なウェブの良さを大切にするツールだ。
見てきたように、低レイヤーのツールをマネタイズするのは極めて難しいというのもある。大きな理由の一つは、どんな理由であれ、あるいは理由がなくても、楽しそうなサイドプロジェクトとして自分でSSGを作り始めようとする開発者がいくらでもいるからだ。より上位のコンテンツ向けツールならマネタイズは可能だ。KirbyやSanityなど、CMS機能を備えた一部のサイトジェネレーターはそれを実現し、小規模ながら持続可能なビジネスを築いている。しかしEleventyのような形のものは、小さなプロダクトビジネスとしては成り立たない。最低でもサービス提供が必要になるだろう。
となると、 outcomeはだいたい次のような感じになる。
- 大手、おそらく上場企業に買収され、ホスティングやCDN製品のプラットフォームを強化する手段となる。これがAstro、Nuxt、Gatsby、Remix、そしてある程度はBeginの辿った道だ。Jekyllは最初からそうだった。GitHubのTom Preston-Wernerによって作られ、GitHub Pagesを成功させるための原動力となった。
- メンテナーがフルタイムになることはなく、軽めの本業や間接的な収入手段を持ちながら続ける。これは福祉国家に住み、手頃な医療を受けられることの恩恵とも強く結びついていると感じている。この形から長期的で高品質なソフトウェアがたくさん生まれているのは本当にありがたいが、毎月マーケットプレイスで医療保険を買わなければならないのがどれほど大変かは強調してもしすぎることはない。
- ツールを中心に直接会社を作ろうとする。Remixは初期にライセンス販売でこれを試み、Astroもいくつかのプロダクトの立ち上げを試みた。EleventyはCMSなどの新機能と組み合わせてそれに挑戦しようとしている。
簡単な道はない。アメリカに住んで家族がいれば2番目は実現できないし、1番目はオープンソースが損失を補うための呼び水でしかないなら持続可能とは言えないという意味で、「知らぬが仏」的な解決策かもしれない。
Eleventyをここまで使ってみて
とにかく、1月からEleventyを使っているが、調子はどうだろうか?
おおむね良好だ。ハイライトとしては、Imageプラグインを使って画像をこれまで以上に最適化できたことや、ちょっとした最適化プラグインでHTMLのミニファイをビルドプロセスに直接組み込めたことが挙げられる。サイトのビルドは以前より少し速くなり、Eleventyの強力だが分かりにくいディレクトリデータファイルのおかげで、各ブログ投稿をシンプルにできた。カテゴリをフロントマターではなくディレクトリで管理できるようになったのだ。
テンプレートも楽しい。Ventoテンプレートは、テンプレート内で任意のJavaScriptを書けるのでほとんどが素晴らしい。しかもLiquidのように静かに失敗することもない。
WebCは私にとって喜びでもあり苦しみでもある。ある意味、絶妙なツールだ。ページにコンポーネントを埋め込み、サーバーサイドレンダリングや自動バンドル、優れたパフォーマンスを実現してくれる。しかもシンプルだ。esbuildのような大きなJavaScriptトランスパイラを引き込まないのでパッケージも小さい。最近ではIn the AtmosphereのチャートやColor ditheringのデモでWebCを使った。
だが苦しみもある。非常にユニークなツールで制約も多く、何かを間違えると盛大に失敗する。ドキュメントはその可能性をほのめかすだけで、多くの疑問に答えてくれない。素晴らしいものになり得るし、すでにかなり良いのだが、Zach自身も最近のトークで認めていたように、もっと手をかける必要がある。
WebCとEleventyの両方について、TypeScriptが採用されていないことには複雑な思いがある。WebCにはTypeScriptやリンターがあれば簡単に見つけられるバグがあった。こうしたプロジェクトのツールはもっと良くなり得ると思う。
とはいえ不満を言っても仕方がない。プロジェクトにコントリビュートするようにしている。主にドキュメントへのコントリビュートだが、まだまだ改善の余地は大きい。Eleventyの商業化によってこの活動は複雑になっている。2月以降ドキュメント更新が停滞している理由の一つでもある。有料のドキュメント担当者が現れて、自分のやったことが無意味になるのではないかという疑問が生じるからだ。Kickstarterキャンペーンが大成功して複数のメンテナーが資金を得たり、少なくともZachが安心してフルタイムで取り組めるようになるかもしれない。少なくとも、11tyとその関連プロジェクトでプルリクエストのレビューやマージがもっと活発になるだけの時間が確保されることを願っている。残念ながら今はそのペースが遅いからだ。
Eleventyを使うべきか? もしかしたらそうかもしれない。ゼロから新しい静的サイトジェネレーターを作るのは楽しいが、コミュニティに参加して人気のあるツールを改善するのもまた違った豊かさがある。
EleventyはAstroほど話題にはならない。そして独自の問題もたくさん抱えている。だが他のソフトウェアと同様、それはビジョンや多くの価値観の表れであり、その多くは私の考えと響き合う。正しい種類のソフトウェアであることを願っているし、15年後もまだ使い続けていたい。
そうそう、Build Awesomeのローンチにワクワクしているなら、Kickstarterに登録してほしい。私も少し支援するつもりだ。
記事をランダムに読む
コメント
ログインしてコメントする