気軽に Hotwire を触ってみよう
こんにちは、万葉の チームおじさん こと tatsuosakurai です。
はじめに
本記事では、Hotwire が気になっているけれども、まだ触ったことがないという方に向けて、Hotwire を気軽に触る方法を紹介します。
Hotwire というと、Railsエンジニアに限定した話というイメージがあるかもしれません。しかし、実は Hotwire は、 HTML と多少の JavaScript 知識があれば簡単に理解・活用できる技術です。
ここで紹介している内容は、 Rails の知識ゼロでも試せるくらいとてもシンプルです。Rails や Ruby を普段使っていない方や、デザイナーの方など、 Rails には詳しくないけれども HTML はわかる、という方にも、ぜひ最初の一歩としてご活用いただければうれしいです:)
※厳密には、 Hotwire の一部機能である Turbo、その一部の機能である Turbo Frames を試す方法を紹介しますが、本記事では分かりやすいように Hotwire と呼びます。
HotwireはHTMLを送る技術
Hotwire という名前は、「HTML OVER THE WIRE」の略です。「HTMLをサーバからブラウザに送ること」によってSPA的なアプリケーションを作ることができます。そのため、HTML を分かっている人にとっては、扱いやすい技術といえます。
それでは早速書いていきましょう
本記事では、Rails は使わずに、http-server を使って Hotwire の動作を試してみます。
環境の準備
まずは、お手元の環境に npm がまだ入っていなければ、npm をインストールしてください。その上で、ターミナルから http-server をインストールします。
$ npm install -g http-server
参考までに、筆者は以下の環境で動作確認をしています。
MacOS: 13.2.1
Chrome: 111.0.5563.64 (Official Build) (arm64)
node: v18.15.0
npm: 9.6.1
http-server: 14.1.1
hotwired/turbo: 7.3.0
HTMLファイルの用意
次のステップとしては、http-server で実際に画面を表示してみます。そのために、表示に利用する HTML ファイルを用意しましょう。任意の作業ディレクトリを作って、次のような構成で、お好きなテキストエディタなどでファイルを作成・保存してください。
※なお、 HTML ファイル内のタグは、行数削減のため、動作確認ができる最小限にとどめています。
ファイル構成
hothtml
├── index.html
└── apple_answer.html
index.html
<!DOCTYPE html>
<html lang="ja">
<meta charset="UTF-8">
<script type="module">
import hotwiredTurbo from "https://cdn.skypack.dev/@hotwired/turbo";
</script>
<title>単語帳</title>
<h1>単語リスト</h1>
<ul>
<li>
<turbo-frame id="apple">
apple <a href="./apple_answer.html">答えを見る</a>
</turbo-frame>
</li>
<li>banana</li>
</ul>
apple_answer.html
<turbo-frame id="apple">
りんご
<a href="./index.html">問題へ戻る</a>
</turbo-frame>
http-server を起動する
ファイルが準備できたら、作業ディレクトリから、http-server を起動します。次のコマンドを実行してください。
$ http-server
Starting up http-server, serving ./
http-server version: 14.1.1
http-server settings:
CORS: disabled
Cache: 3600 seconds
Connection Timeout: 120 seconds
Directory Listings: visible
AutoIndex: visible
Serve GZIP Files: false
Serve Brotli Files: false
Default File Extension: none
Available on:
http://127.0.0.1:8080
http://192.168.1.26:8080
Hit CTRL-C to stop the server
ブラウザで http://127.0.0.1:8080 を開く
起動したら、http://127.0.0.1:8080 を開いてください。次のような画面が表示されるはずです。
次に、「答えを見る」というリンクをクリックしてみましょう。
すると、次のように 「apple」 の文字が「りんご」に変わり、リンクのテキストも「問題へ戻る」に変わります。
リンクをクリックしたときは、別のページへ遷移するというのがHTMLの基本の動きですが、ここでは、同じページの中で、一部分だけが動的に変化しているように見えます。こういった動的な変化をさせるには、これまで基本的にJavaScriptを自分で書いて実現する必要がありましたが、Hotwire を使えば、HTML を用意するだけで簡単に実現できます。
HTMLが部分的に入れ変わることを確認する
それでは、リンクをクリックしたときに HTML の内容が変わっていることを、Chromeの検証機能を使って確認しましょう。
今回用いた Hotwire の「Turbo Frames」では、<turbo-frame>要素内のリンクをクリックすると、その<turbo-frame>要素の範囲だけをリンク先の内容に入れ替えてくれる(※)という機能があります。以下のようなイメージです。
※厳密には、リンク先の画面内の同じIDのturbo-frame要素の内容に置き換えられます。
Chromeの検証機能を、以下に貼った動画のように表示させて、実際に要素が入れ替わることを確認してみましょう。
終わりに
これで、気軽に Hotwire を触ってみることができました!
一応、コードも置いておきます。 https://github.com/everyleaf/hothtml
本記事を通じて、Hotwire を身近に感じてもらうことができていたらうれしいです。
本記事ではほんのさわりだけをご紹介しています。ご興味を持たれた方は、他の Hotwire Lab の記事 もご活用ください。
今後も 公式リファレンス の翻訳や、 Hotwireことはじめ の解説、具体的なHotwire の使い方などを紹介していく予定ですので、どうぞよろしくお願いします。
株式会社万葉ではエンジニアの採用を行っています!
https://everyleaf.com/we-are-hiring