11年のうちのほとんどの期間、何かにバックエンドが必要になると、私の反射はまず自分で書くことだった。それが毎回正しい判断だったからではなく、作ること自体が楽しい部分で、その習慣を通せる程度には腕があったからだ。長いあいだ、その習慣は自分のエゴに払う税金であり、私はそれを職人技だと自分に言い聞かせていた。2025年の初め、私はついに——少なくとも一つのプロジェクトについては——その支払いをやめた。
私のポートフォリオはずっと誇りに思ってきたものだが、その土台はタイムカプセルになっていた。何年ものあいだ、小さなPHPのバックエンドがINIファイルからデータを読んでいた。のちにフロントエンドは生のJSONをディスクから直接読むだけになった。見た目は磨かれていて、作業フローは惨めだった。誤字ひとつ、プロジェクトの更新ひとつのたびに、エディタを開き、ファイルを書き換え、コミットを押す。机から離れた場所で、スマホから一文だけ直したいと思い、フルデプロイなしにはそれができないと気づいたことを覚えている。習慣が職人技に感じられなくなり、自分で作った檻に感じられ始めたのは、その瞬間だった。
ゼロから管理画面を手作りしたくはなかった——そこにエゴがあるのは自分でも聞こえた——ので、すでにあるものを見に行った。その探索は私をヘッドレスCMSへと連れ戻した。フロントエンドがコンテンツの保管場所から完全に切り離され、データはAPI経由でどこへでも提供される。この形はエンタープライズ規模で以前に扱ったことがあったが、独立系のツールがどれほど進化したかは追えていなかった。
SaaSの巨人たち——Contentfulとその近隣——は本当に有能で、そしてレコード単位で課金し、そのAPI上限は成長するものにとってはカウントダウンタイマーのように読める。自分のサイトを使うことで罰せられるようなサブスクリプションの請求書はほしくなかった。コードとデータベースをそのまま所有したかった。
そこで、自分でホストできるものだけを見て、実際に人が使っているものを検討した。
Strapiは、完成したアプリケーションとフレームワークのあいだの空間に位置していた。インターフェースはスマホから変更できる程度には良く、それでいてコードへの扉を閉ざさない。Node上で動くので、標準的なCMSなら手詰まりになるところで、ライフサイクルフックやカスタムコントローラがそこにある。6つのロケールを後付けではなく第一級のオブジェクトとして扱い、スキーマを手書きせずに形作らせてくれ、記事を——一枚岩のマークアップではなく積み重ねられるブロックという——モジュール的なものに変えた。
数か月後にこのブログを始めたとき、私はゼロからやり直さなかった。すでにあったモデルを拡張し、2つ目のフロントエンドをそこに向けた。静的ファイルの読み取り機は、2つのプロジェクトに仕える一つのエンジンになっていた。
これは改宗の物語ではない。私はいまだに、必要以上に頻繁にゼロからの構築に手を伸ばすし、その本能は持っておく価値があると今でも思っている。ただしそれは、間違えても自分だけが代償を払うプロジェクトのものだ——退屈で信頼できるべき唯一のインフラのものではない。ここで道具を選ぶことは難しいほうの判断で、今回ばかりは私はそれを下した。
土台はできた。あとは建てるだけだ。