定義
ホットリロード(Hot Reloading)は、動いているアプリやウェブプログラムを完全に終了して起動し直さなくても、修正したコードの部品だけをリアルタイムで画面にすっと差し替える技術です。プログラムが進めていた作業内容や画面の状態をそのまま保ったまま、変わった部分だけをすぐに確認できます。
コードを1行直すたびに待たされるとしたら?
文章を書くとき、誤字を1つ直すたびに文書を保存してパソコンを再起動しなければならないとしたらどうでしょう? 想像しただけでもどかしくて、仕事がまともに進まないはずです。昔のソフトウェア開発は、まさにこれに近いやり方で行われていました。
以前は、開発者がボタンの色や文字の大きさを1つ変えるだけでも、プログラム全体を最初から組み立て直し(コンパイルとビルド)、アプリも最初から起動し直す必要がありました。この作業に数十秒、長ければ数分かかるため、開発者はコードを1行直してはぼんやり待つ、ということを何度も繰り返していたのです。
ホットリロードは、こうした待ち時間を大きく減らしてくれました。コードを保存すると、たいてい1秒前後のごく短い間に、変えたデザインや機能が画面にぱっと現れます。おかげで開発者は流れを途切れさせることなく、まるでキャンバスにリアルタイムで絵の具を塗るように、すぐに結果を見ながら作業できるようになりました。
リロードとホットリロードの決定的な違い
ウェブブラウザの「更新(F5)」ボタンを思い浮かべがちですが、ホットリロードは単なる更新とはレベルが違います。通常の更新(ライブリロード)はページを真っ白な状態に戻して最初から読み込み直すため、入力欄に書いていた文字や開いていたメニューなど、画面の状態がすべて消えてしまいます。
たとえば、ショッピングアプリで商品をカートに入れ、配送先を入力したあとで、決済ボタンの見た目を直すとしましょう。通常の更新をすると最初のホーム画面に戻されてしまい、商品を入れるところからやり直しです。
一方、ホットリロードは、入力しておいた配送先とカートの中身を今の状態のまま保ち、決済ボタンのコードだけを差し替えます。奥のほうの画面をテストするときに、わざわざ前の手順を繰り返す必要がないので、開発の効率が桁違いに上がります。
もう少し正確にいうと
もう少し正確にいうと、ホットリロードはモジュール(独立したコードの断片)を入れ替える技術をもとに動いています。ウェブ開発のツールでは、開発者のパソコンと実行中のアプリのあいだに小さな通信の通り道(ウェブソケット)が開かれていることが多く、エディタでファイルが修正された瞬間に、実行中のアプリへ変わったコードの断片だけが素早く送られます。
アプリは受け取った新しいコードをメモリ上ですぐに上書きし、画面のその部分だけを描き直します。これを専門用語で「ホットモジュールリプレイスメント(HMR、Hot Module Replacement)」とも呼びます。
ただし、ホットリロードは魔法の万能キーではありません。画面に見える単純なデザインや個別のロジックの修正にはたいてい問題なく働きますが、アプリの骨組みになる中核の構造や基本の設定ファイルが変わったときは、プログラム全体を完全に再起動してはじめて安全に反映されます。
よくある誤解
ホットリロードとウェブブラウザの更新(F5)は同じ技術だ。
更新は画面を真っ白に初期化して最初から読み込み直しますが、ホットリロードは入力中のデータや画面の状態を保ったまま、変わったコードだけを入れ替えます。
日常で出会う場面
ショッピングアプリの決済画面で、フォームに入力した配送先の住所を消さずに、決済ボタンの色だけを青から緑にすぐ変えるときに使われます。
スマートフォンアプリを開発しているとき、コードを保存したとたん、つないでおいたテスト用スマホの画面の文字がリアルタイムでぱっと大きくなる、あの様子です。
つまり ひとことで
ホットリロードは、作業中の画面の状態を失わずに、修正したコードだけをリアルタイムですぐに差し替えてくれる開発技術です。