モダンなWeb開発の救世主!Go言語とHTMXを組み合わせた爆速開発術
How I use HTMX with Go
How I use HTMX with Go
最近、HTMXとGoの組み合わせにハマっています。シンプルかつパワフルで、複雑なJavaScriptフレームワークなしでインタラクティブなWebアプリを構築するのに最適です。近々、具体的な実装方法やベストプラクティスを記事にまとめる予定なのでお楽しみに!
最近のプロジェクトでHTMXを使ってみたけど、かなり気に入ったよ。AngularJSやReactが登場する前のWebがどんなものだったかを知っている身としては、普通のWebページを作れて、かつ書かなきゃいけないJSの量を最小限に抑えられるという点が最高にありがたい。Vanilla JSでも問題はないけど、HTMXを使えば、何度も何度も同じイベントハンドラを書くために必要なボイラープレート(定型コード)をかなり減らせるんだ。
もし興味があって、「モダンなフロントエンド」の思想があまり好きじゃないなら、一度HTMXを試してみることをお勧めするよ。ちなみに、HTMXの公式サイトにある最初の例はすごくシンプルだけど、少し勉強すればもっと強力に使いこなせるようになるよ。
Go + HTMXの組み合わせは最高だね。自分はa-h/templを組み合わせて、テンプレートやコンポーネント、パーシャルでの型安全性を確保しているよ。
つい最近、自分のツールキットを公開したんだけど[1]、これを「GUSスタック」って呼んでる。Go、Unix、SQLiteの頭文字さ。exe.devの「GUTSスタック」[2]にかなりインスパイアされてるけど、TypeScriptの代わりにHTMXを使っているのが特徴だ。
他にもこんなGoのコンポーネントをキットに入れてるよ...
このスタックでコーディングして、エージェント的な開発を行い、バイナリをビルドしてデプロイするのはすごく生産的だよ。
Alex Edwardsは素晴らしいよね。彼の本と「Learn go with tests」が、僕がこの言語を知るきっかけだった。今でも人におすすめしてるよ。
昔のプロジェクトをHTMXで書き直したくなってきたな。
いい投稿だね。GOTHスタックは最高だよ。
HTMXは素晴らしいよ。我々もConvictional[1]でHTMX + AlpineJSを使ってかなり長い間やってきたけど、製品がライブコラボレーション機能満載の複雑なものになっていくにつれて、現代のスタートアップの制約下では限界を感じたんだ。残念ながら、Reactのようなものに比べて学習データが少ない新しい技術だと、AIモデル(frontier models)を活用した開発が少しやりづらいのがネックだね。
自分たちはこの[1]小さなパッケージを使ってるよ。HTMLテンプレートファイル、生のHTML文字列、あるいはプレーンテキストをベースにしたHTMXレスポンスをチェインできるんだ。最初のもの以外は全部OOB(Out of Band)ターゲットとして扱える。実例はこんな感じ:
return htmx.Write(w,
&htmx.Template{
FS: htmx.FS(ui.HTMX, "parts"),
Filename: "arrows.html",
Fields: []any{thread, up},
},
&htmx.Component{
HTML: `
<div {{$count := index . 0 -}} {{- $thread := index . 1 -}}
hx-swap-oob=true
id="points-{{$thread}}"
class="points">{{$count}} points</div>`,
Fields: []any{count, thread},
},
)
自分用にKotlin + HTMXを使ったフレームワークを書いたよ - https://github.com/reubenfirmin/zoned 。目標は、エンドツーエンドで完全に型安全なWebアプリを作れるか試すこと。Kotlinx.htmlを使ってて、これはHTMLを書くためのJSXっぽいDSLを提供してくれる。
最初の90%は手書きでやって、最後の10%とREADMEはClaudeを使って仕上げて公開してみたんだ。
Go + Datastarの方がシンプルだし、こっちの方が断然好きだな。
GoとAlexのことは大好きだけど、HTMXを使った経験はいつも結局ガッカリすることになるんだよね。
一番しっくりくる表現は、HTMXで作業しているとコードベースの複雑さがアプリ自体の成長率の2倍で増えていく感じがするっていうこと。いつも奇妙なエッジケースにぶち当たって、結局変なハックをしないと解決できなくなるんだ。
Nodeのパッケージが嫌われる理由はわかるし、HTMXはその反動でやりすぎな気もする。でも、JSONのやり取りに悩まなくていい時間以上に、アプリの見た目や操作感を良くしようとするとその3倍の労力がかかるよ。Mantineのテンプレート[1]を使えば2分で最高レベルのUIコンポーネントを組み込めるし、それを静的アセットとして埋め込めば結局同じGoの単一バイナリにまとめられるんだから。