静的なるものの復権 — Astro.jsと道具の透明性について

フレームワーク戦争の果てに、我々は再び最も単純な問いに直面する。この道具は、本当に必要なのか。

遠藤道男執筆 遠藤道男
Astro.jsフレームワーク技術批評ウェブ開発ハイデガー

現代のウェブ開発者たちは、奇妙な強迫観念に取り憑かれている。彼らはあらゆるプロジェクトにReactを導入し、すべてのランディングページにNext.jsを採用し、三行のテキストと一枚の画像を表示するためだけに数メガバイトのJavaScriptバンドルを配信する。これは技術的判断というよりも、むしろ一種の信仰告白に近い。私はモダンである、私は最新のベストプラクティスに従っている、私はコミュニティの一員である — そうした帰属意識の表明として、フレームワークは選択される。実際の要件を精査し、本当に必要な機能を見極め、最小限の道具で目的を達成するという当たり前の工学的思考は、いつの間にか業界から失われてしまった。あるいは、そうした思考は「時代遅れ」というレッテルを貼られ、若い開発者たちの嘲笑の対象となった。

ハイデガーは『存在と時間』において、道具の本質的なあり方を「手元存在」(Zuhandenheit)として規定した。真に機能している道具は、使用者の意識から消え去る。ハンマーを振るう大工は、ハンマーそのものを見ていない。彼の視線は釘に、そして釘を打ち込むべき木材に向けられている。道具は透明になり、目的への通路として機能する。しかし道具が壊れたとき、あるいは道具が不適切であったとき、それは突如として「眼前存在」(Vorhandenheit)として — つまり対象として、障害物として — 意識に浮上する。この洞察は、現代のフレームワーク選択において決定的な重要性を持つ。Next.jsでランディングページを構築するということは、ハンマーの代わりにスイス・アーミーナイフを持ち出すようなものだ。確かにスイス・アーミーナイフにもハンマー機能は付いているかもしれない。しかしその多機能性そのものが、道具を意識の前景に押し出してしまう。開発者はルーティング設定を、サーバーサイドレンダリングの挙動を、ハイドレーションのタイミングを、絶えず意識せざるを得なくなる。道具が透明であることをやめ、それ自体が問題となる。

Astro.jsの設計思想は、この道具の透明性を回復しようとする試みとして理解できる。デフォルトでJavaScriptを一切出力しないという決断は、単なる技術的選択ではなく、哲学的宣言である。それは「動的であること」がウェブの本質ではないという主張であり、HTMLとCSSという原初的な構成要素への回帰である。もちろんAstroは必要に応じてReactやVue、Svelteのコンポーネントを「アイランド」として組み込むことができる。しかしその場合でも、インタラクティビティは例外として扱われ、静的なコンテンツがデフォルトとして維持される。この反転こそが重要なのだ。Next.jsにおいては動的であることが前提であり、静的であることは最適化の結果として事後的に達成される。Astroにおいては静的であることが前提であり、動的であることは意図的な選択として明示的に導入される。どちらが「正しい」かという問いは無意味である。問われるべきは、どちらがより適切かということだ。そして企業のランディングページ、製品紹介サイト、ブログ、ドキュメンテーション — つまりウェブサイトの大多数を占めるこれらのユースケースにおいて、Astroのアプローチが適切であることは明らかだろう。

技術選択における「オーバーキル」という概念について、我々はもう少し真剣に考える必要がある。Next.jsを選択するということは、サーバーサイドレンダリング、インクリメンタル静的再生成、APIルート、ミドルウェア、画像最適化、フォント最適化、そして年に数回のメジャーアップデートに伴う破壊的変更 — これらすべてを受け入れるということを意味する。ランディングページに本当に必要なのは何か。美しいタイポグラフィ、適切にレイアウトされた画像、明確なコール・トゥ・アクション、そして高速な読み込み。これ以上でもこれ以下でもない。App Routerの複雑な規約も、React Server Componentsの微妙な挙動も、use clientディレクティブの配置に関する無限の議論も、本質的には不要なのである。それらは解決すべき問題ではなく、フレームワーク自身が生み出した問題であり、我々はその解決に膨大な認知的リソースを費やしている。これは技術の進歩ではなく、技術の肥大化である。

Astroが提供する開発体験は、ある種の安堵をもたらす。コンポーネントは`.astro`ファイルに書かれ、それはHTMLテンプレートとJavaScriptロジックの単純な結合である。ビルドプロセスは予測可能であり、出力されるHTMLは人間が読める形式を保っている。依存関係は最小限であり、node_modulesディレクトリは控えめなサイズに収まる。デプロイは静的ファイルのアップロードに過ぎず、Vercelの無料枠で十分であり、CDNエッジでの配信は自動的に最適化される。これらすべてが「当たり前」であった時代があったことを、我々は思い出すべきだろう。jQueryとPHPで構築された時代のウェブサイトは、確かに洗練されていなかったかもしれない。しかしそれらは機能していた。そして多くの場合、現代のSPAよりも高速に機能していた。Astroは、その時代の素朴さを現代的な開発者体験と統合しようとする試みであり、私はこの試みを支持する。

批判者たちは言うだろう — Astroでは複雑なアプリケーションは構築できない、と。しかしそれこそが要点なのだ。Astroは複雑なアプリケーションを構築するためのフレームワークではない。それはコンテンツサイトを構築するためのフレームワークであり、その限定された目的において卓越している。ランディングページにNext.jsを採用することの愚かさは、メモ帳アプリにElectronを採用することの愚かさと同種のものである。技術的には可能だが、適切ではない。そしてこの「適切さ」への感覚こそが、現代の開発者たちに最も欠けているものではないだろうか。彼らはTwitterのタイムラインを眺め、インフルエンサーたちの推奨を鵜呑みにし、技術カンファレンスのハイライトリールに感化される。しかし自らの手で要件を分析し、選択肢を比較検討し、最も単純な解決策を選び取るという基本的な能力は、徐々に失われつつある。

Astro.jsを選択するということは、ある種の諦念を受け入れることでもある。すべてを一つのフレームワークで解決しようという野望を捨て、道具を道具として — つまり特定の目的のための限定された手段として — 扱う態度への回帰である。これは技術的後退ではなく、むしろ成熟である。十年後、我々は現在のフレームワーク戦争を振り返り、その多くが無意味な複雑性の積み重ねであったことに気づくだろう。そのとき、Astroのような「適切な道具を適切な場面で使う」という思想だけが、静かに生き残っているはずである。