ブログを更新しました。そう書いている今この瞬間、当ブログの一番新しい記事の投稿日は2018年12月10日となっている。なんと4年前である。ではいったい「ブログを更新しました」とはどういう意味なのであろうか。ただ嘘をついているのか、それとも、この今書いているブログがその対象ということだろうか。しかし、そうすると「更新しました」という過去形は不自然なのではないだろうか。いや待て、結局のところこのブログを読者が読む時間を基準とすると、たしかにそのときはブログはすでに過去に更新されているということになるではないか。読者に届く情報としては確実に真実を示している。と、いうことは、このように「ブログを更新しました」というブログを自己言及的に書くことで無限にブログを量産できるということになるのだろうか…
…というどうでもいいことは置いといて、ブログを更新しました。といっても投稿のことではなく、ブログのシステムを新しいものに更新したということです。
これまでこのブログは Gatsby を使って作られていましたが、Fresh に移行しました。
Fresh
Fresh は Deno で動くフルスタック志向の Web アプリケーションフレームワークで、ドキュメントの "Introduction" では以下が特徴として書かれています。
- No build step
- Zero config necessary
- JIT rendering on the edge
- Tiny & fast (no client JS is required by the framework)
- Optional client side hydration of individual components
- Highly resilient because of progressive enhancement and use of native browser features
- TypeScript out of the box
- File-system routing à la Next.js
ここで個人的に特に注目したいのは "JIT rendering on the edge" と "Optional client side hydration of individual components" です。
前者の "JIT rendering on the edge" は、Deno Deploy での動作を強く意識しているということだと受け取れます。Deno Deploy はもうすぐ GA 予定 (ここによると "General Availability in Q3 2022" らしい) のエッジ環境で、おそらく Deno としては商売の中枢に位置付けているものです。Netlify の Edge Function も Deno ベースですし、エッジでの動作というのが Deno の主戦場になっていくものと思われます。Fresh を公式プロジェクトとしたのもその辺りの戦略によるものでしょう。もちろんユーザーとしてもエッジ環境での動かせるメリットは非常に大きいので、それはそのまま、そこの親和性が保証されるであろう Fresh の魅力になります。当然、このブログも Deno Deploy で動いています。
後者の "Optional client side hydration of individual components" は Islands Architecture と呼ばれるパターンです。これは Astro も採用している アーキテクチャパターンで、Web ページが基本的には静的な要素から構成されるようにしておき、インタラクティブ性が求められるコンポーネントだけにクライアントサイドでの hydration を行うパターンです。このコンポーネントが島っぽいので (?) "island" と呼ばれます。このメリットは、基本静的なページなのでクライアントで script
を読み込む必要がなく、もしスクリプトが必要な UI があれば、その限定された island だけに script を適用できるというものです。つまりクライアントサイドで読み込むスクリプトを劇的に削減できて、かつ必要なインタラクティブ性も犠牲にしないことを意図しています。これによって SPA や一般的な SSR の hydration による複雑性をかなりの部分で排除できそう、というのも開発者目線での魅力となると思っています。コンポーネントのレンダリングをサーバーサイドで実行して、クライアントをできるだけ "JavaScript Free" にしようというのは、この Fresh や Astro だけでなく、React 18+ や Remix, そしておそらく次期バージョンの Next.js でも大きくフィーチャーされるでしょうから、フロントエンドコミュニティ全体のトレンドでもありますね。
で、そんな Fresh を使ってブログを作り直してみたわけですが、まあ何というか、別にこの程度のブログを作るだけなら何使っても同じというか、Islands Architecture も何とか使おうと謎のカウンターを仕込んでみたりしたけど結局最終的には ./islands
ディレクトリごと消しちゃったりとか、ぶっちゃけこれで Fresh の魅力に迫れるようなことはなかったです。
ただ発見 (Deno Deploy でのファイルシステムの扱いとか) や各種ハマりどころ (lang
の設定方法わかんねーよ、とか) は多かったので、もう少し本格的に Fresh の素振りをするときには効率よくやれるようになったとは思います。結構コードも読むことになったし。
投稿しないブログを持つということ
というわけで晴れてブログシステムが新しくなったのですが、先に言ったようにこのブログは最終更新が4年前とかで、まったく更新されていません。
そんなブログのシステムを更新して意味あるの?と聞かれたならば、自信を持って「ない」と答えるでしょう。実際にこの Fresh 版も作っただけで公開する予定はまったくなかったのですが、会社で話題に出す機会があったので、じゃあせっかくなら公開しようかな、くらいのノリでやった感じです。
このブログはもともとは Middleman で作っていて Gatsby に作り替えたのですが、その間にも、そして Fresh 版に至るまでにも、ひっそりと手元では以下のようなバリエーションのブログを作っていました。
なので、公開された Gatsby バージョンや Fresh バージョンは数ある中の1つでしかなく、それが公開されたかどうかというのは、さっきも書いた通りノリや気分でしかありません。
しかし、投稿しなくとも、公開しているブログを持っているということで、こういう具合に、何か新しい技術などを見つけたときの「本番運用を想定した遊び場」として使うことができます。僕はこの価値はとても高いと感じています。
なので、これからもこのブログはきっとほとんど更新されないと思いますが、僕のパソコンの中でだけは、ひっそりとシステムが新しく変わっていくのでしょう。