ブログを Hugo から Astro に移行した

投稿: 2025年8月23日
更新: 2025年8月26日

このブログをHugoで始めてからもう3年以上が経つ。当初は「まず書き始める環境を整えることが大事」と思って、細かいことにはこだわらず最低限のテンプレートで走り出した。結果的にそれは正解だった。書く習慣を作ることがまずは重要だし、設定をこねくり回していると結局面倒になって止めてしまうことが目に見えていたからだ。

ただ、システム開発あるあるで「いつか直そう」がいつまでも先送りになってしまう。最高の状態ではないが、とりあえず動いてるからいいか的な。しかし最近、久しぶりに記事を書こうとしたとき、Cloudflare Pages 上のHugoのバージョン周りでデプロイの問題が起き、新しい投稿ができなくなったため、思い切って書き直すことにした。

技術選定

これを機に Astro に乗り換えることにした。世の中には他にも選択肢がたくさんあるが、自分はGatsbyがあまり好きではなかったし、今の仕事でも使っているAstroの方が肌に合っている。テンプレートにも凝らず、シンプルなモノトーンのブログで良いので、これこそ Vibe Coding の出番だろうと思った。結果、90%くらい Claude Code に書いてもらい、見た目も中身も簡単に移行できた。

Hugo 等の静的サイトジェネレーターとの違いとして、マークダウンのパースやページ生成など一部を自分で実装する必要があるのは手間ではあるが、その分内部の挙動やURL設計を自分で決められる透明性がある。これは個人でコントロールしたい自分には合っている。しかも Vibe Coding であらかた作れてしまう時代において、細かく設定できるのはメリットしかない。

ユーザーメリットとしては、やはり Astro が体感で速い気がする。Lighthouseのスコアも高い。

記事をどこに保存するか問題

今回、記事の管理フローを一新した。

これまで Markdown ファイルを GitHub に置いて直接 Neovim で編集していたが、日本語の編集やちょっとした修正が面倒で、Joplin というメモアプリで下書きをしてからコピペ、という二度手間や、それに伴う同期ズレがストレスになっていた。そこで方針を変え、 Markdown をファイルで管理する代わりに、普段使っている Joplin をそのまま公開できるようにした。

Joplin にはAPIサーバーとして使える機能(Web Clipper)があるので、ローカルでその API をたたいて「 public タグを付けたノートを公開する」というフローを構築した。画像などのアセットもビルド時に API 経由で引っ張ってきて公開ディレクトリに配置するようにしたので、日常的に書いているメモにひと手間加えるだけで公開まで完了するようになった。これが予想以上に快適で、書き殴りメモ→公開のハードルが一気に下がった。

惜しい点は、 Joplin は非常にシンプルなアプリゆえ、メタデータをGUIで設定できない。 Slug をメタデータとして持たせたかったが、 GUI では設定するのが難しかったので、ひとまずタイトルに「左がタイトル / 右がスラッグ」というルールを入れて運用することにした。運用ルールとしては改善の余地はありそうだが、タイトルと Slug が同じ場所にあるは悪くないし、 Joplin のタグ機能はそのまま流用できるので利便性は高い。

3411cae791f6907cae430432aaaa28a9.png

Vibe Coding について

前述の通り、ほとんどのコーディング作業をCloud Code の Vibe Coding で行ったため、所要時間は思っていたより短く、全体で1日もかかっていない。大半は記事の置き場所やデプロイ設定、Disqus の移行など、実装以外の細かい調整に時間を使った感じで、ブログ実装自体は1時間もかかっていないと思う。結果的に、必要な部分だけ自分で調整して、普段使っているツールを公開ワークフローにうまく組み込めたのは大きな収穫だった。

使ったスタックはシンプルで、Astro + Tailwind (v4) のみ。意識的にあまり制約をつけないことによって、AIがのびのびと開発できる余地を作ったし、自分でもあんまり手を加えないようにした。逆にプロンプトに関しては結構丁寧に書いたので、それが良かったのかなと思う。ラリーは7回くらい。あとこれはあんまり本筋ではないが、最近プロンプトを英語でやるようにしている。英語の方が細かい文言を調整したりするのが日本語より書きやすいっていうのがある。てか日本語って変換するのがめちゃくちゃめんどくさいんだよな、シンプルに。

余談

この記事はほとんど音声入力で作った。最近、長文を入力するのが本当にめんどくさいなと思ってきて、仕事もプライベートも音声入力でほとんど入力するようにしている。感覚としては30文字を超える文章を書こうと思った瞬間に音声入力に切り替えるという感じ。俳句なら手で書くけど短歌になりそうと思った瞬間に音声入力を起動する、みたいな。

AI の進化により、 Linux でも快適に音声入力できることに気付いたので、ちょっとしたCLIを自作した。CLI を叩くと音声入力待ちになって、終了すると whisper に送られ、文字起こしが完了したら自動でクリップボードに保存されるというとてもシンプルなコマンドだ。それがすごく良い感じで、文字入力という行為そのものに対する考え方が変わった。このブログも音声入力を活用し、まずは文字起こしで単純なテキストの羅列にして、それを gpt5-thinking-mini である程度いい感じにしてもらって、最後自分で調整して公開、という流れができ、ブログを書く時間・労力がめちゃくちゃ下がった。

AI が微調整している以上、文体とかはもしかしたら自分っぽくないかもしれないが、目的は別に文学的な文章を書くことじゃなくて、まあ別に本ブログの目的は特に無いんだが、情報を必要かもしれない人に届けるということがブログの目的だとするならば、別に文体にこだわる必要はないので、この形で今後もサクッと続けていけたらなと思った。いつか音声入力に関する発見についても記事にしたい。