2025年12月、first-go で Go を本格的に触り始めた。TypeScript 中心の開発からの転換点で、「次に自前で何か書くなら Go かな」という気持ちで始めた。

動機ははっきりしていて、バイナリ1つで配布できるビルドツール / SSG を自前で書きたかった。TypeScript だと Node ランタイムや依存が前提になるのが、ツール配布だとちょっと重く感じていた。

何を作ったか

ただ言語を素振りするだけだとつまらないので、Go + HTMX の Web アプリ雛形 を GitHub Template として組んだ。

  • Go 標準の net/http(重いフレームワークは入れない)
  • html/template でサーバー側レンダリング
  • HTMX で、JS フレームワークなしの軽いインタラクション
  • DB_MODE で memory / SQLite・Turso を切り替え
  • AUTH_ENABLED で Cookie セッション認証の有無を切り替え
  • handler / service / repository でレイヤ分割

ハマった/学んだところ

最初に効いたのは、「ハンドラは薄く、ロジックは service に」 という分け方を最初から徹底したこと。Repository パターンにしておくと、memory 実装と SQLite 実装を DB_MODE で差し替えられて、プロトタイプから永続化ありへ移すのが楽だった。

途中で全体を日本語化したり、HTMX 対応で認証ミドルウェアを直したりしつつ、最後にユニットテストを足してカバレッジを計測した。config / repository / service / middleware / handler それぞれにテストを置いて、テスタブルに切ってあると Go は素直に書ける、という手応えがあった。Makefilerun / build / test / coverage をまとめて、make で回せるようにしたのも地味に快適。

Go は CLI / バッチ / SSG / 軽い Web に向く、というのが触ってみての感想。ランタイムを持ち歩かなくていいのが、やっぱり配布で効く。

おわり

この first-go が、2026年1月の go-static-site(このサイトの自前 SSG)に直接つながった。最初の素振りを「捨てコード」じゃなくて再利用できる雛形にしておくと、次の本番にそのまま効く、というのを実感した回。