
個人がWebサイトを自宅でホストするケースは、いまや稀なことになった。ロンドン在住のKyrylo Novotarskyi氏はそれを覆すことにし、しかもRaspberry Piを選ばなかった。1台16ドル(約2500円)のESP32-S3を6台、部屋の棚に並べて自分のサイトを配信している。
決めごとは1つだけだった。Linuxカーネルが動くものを、要求の通り道に一切入れない。使ったのはLILYGOのT-ETH-Liteで、ESP32-S3にW5500の有線イーサネットを組み合わせた基板だ。20g未満のこの板を4枚、配信に充てた。残る2枚には状態を映す画面をつないでいる。
この構成で難しいのは、6枚のうち誰が応答するかを決めることだ。4枚の基板は1つのMACアドレスを共有し、選ばれた1枚がそれを自分のW5500に書き込んでネットワークへ宣言する。W5500には工場出荷時のMACがなく、使う側が書き込まなければならない。その不便さを逆手に取っている。
選挙をやりとりするのは有線ではなく、暗号化された無線ESP-NOWだ。ケーブルやスイッチが壊れても、誰がケーブルの持ち主かを決める仕組みまで巻き添えにならない。無線で応答があり、有線がつながっていて、実際に配信できる基板のうち、最も番号の小さい1枚を選ぶ。それだけだ。
選ばれた基板は、自分では配信しない。443番で接続を受け、生のバイト列を、いま最も手が空いている基板へ受け渡す。TLSの終端もHTTPの解析もしないため、暗号化されたやり取りはブラウザーから配信側まで素通しで届く。電源を抜いても、次の基板が4秒以内に同じMACと証明書を引き継ぐ。1枚を残して全部抜けば、残った1枚が自分自身へ渡して配信を続ける。
最も手こずったのは、無線では元気に見えるのに通信部分だけが固まった基板だという。原因は、C言語のbreak文が意図したif文ではなく外側のfor文に効いていたことだった。いまは各基板が7秒ごとに自分の公開ポートへつなぎ直し、2回続けて失敗すれば自ら選挙を降りる。6回で意図的にクラッシュし、どのタスクで詰まったかを残す。
性能の頭打ちも本人が測って公開している。新規のHTTPS接続は1件で約650ミリ秒かかり、毎秒3件を超えると落ち始める。つながったあとの応答は40〜60ミリ秒だ。更新は追随側から配り、リーダーを最後に回す。新しいファームウェアが90秒の連続配信に耐えなければ、ブートローダーが前の版へ戻す。
ファームウェアの大半は、同氏自身ではなくAIが書いた。ただし、この種のソフトウェアでは期待したほど使えず、物理的な設計にはとりわけ弱かったという。何が正しく、何を世に出すかを決めるのは自分だ、と同氏は書く。
そのはんだ付けは人生で初めてで、292カ所を手で付けた。基板は3Dプリントした換気付きの筐体へ引き出しのように収め、10インチ8Uのラックに差す。ファン3個と画面2枚を含めた消費電力は約22Wだ。ファームウェア、3Dデータ、はんだの1点目から始まる組み立て手順は、MITライセンスでGitHubに置かれている。

