「そして時は動き出す」
この名ゼリフ、ご存知の方いらっしゃるでしょうか。
そう、あの DIO(ディオ) が、時を止めた後の決めセリフです。
ジョジョの奇妙な冒険・第3部。
デバッグ地獄3日目突入。
昨年の年末から年始にかけて、ずっと考えてきた箱庭の再設計。
その実装が、いま7割方まで進んでいます。
期間としては、まだ1か月ほどしかかけていませんが、開発は一気に前に進みました。
このスピードの原動力になっているのが、gemini / codex を活用したコーディングです。
数年前と比べると、箱庭の開発スピードは、劇的に変わりました。
そして数日前のこと。
ふと、
ぼくの手が止まりました。
なぜか。
急に怖くなったんです。
「結合テスト」
せんと、やばくね?
と。
今までは、AI先生さんに単体テストを作ってもらい、動作チェックはこまめに行っていました。
でもね。
箱庭のコンポーネントが単体で動いたとして、全体として、ちゃんと動くんだろうか?
……うーん、わかんない。
開発スピードが早すぎて、脳内理解より先にコードが進み、
「えいえいえい」、って進捗だけが上がっていく。
これ、なんか怖くないっすか。
…でもね。
結合テストは、AIには任せられないんです。
なぜかというと、
各コンポーネントのインタフェース仕様や動作シーケンス、
さらには箱庭の API 仕様や前提条件まで、きめ細かに伝えないと、
意味のあるテストにはならないんです。
それに、プロセスを複数起動して、実行かけて、ログを追いかける。
そのログも、必要最小限しか出していないので、OK / NG の判断が、かなり難しい。
こういう一気に作る系の開発では、何が正解なのか。
それは…、結局、全体を通して知っている人間にしか、判断できないんですよ…。
ぼく自身、何年もこういう開発に携わってますが、コンポ設計して、バラバラになったモジュールを統合して、
結合テストするのって、神経すり減らすのよくわかっているんです。
だから、ずっと、避けてました…。
でもね。
(このセリフ、何回目や…)
そろそろ、やばくね?
ってね。
はい。
そして、
想定範囲内です。
デバッグ地獄です。
今日で3日目。
やっと動いた。
今週は、
月曜から東京出張に行ってまして、
デバッグは、
新幹線と宿泊先のホテルの中でやってました。
新幹線の中でデバッグしているとですね、
PC のバッテリーが、
ドンドン減っていく…
独り言を言いながらデバッグしていると、
周りの人から、
ちょっと怪しい目線を向けられる。
途中の停車駅に止まるたびに、
席の入れ替えの人が来るたびに、
手を止めて、
立ち上がる。
その繰り返し。
……きっと、
みなさんにも、
そんな経験ありますよねーーーーぇ。
ね?
そして、今日は、自席でやっと落ち着いてデバッグタイム。
もう快適すぎて泣けてきます。
そして、やっと動きましたーーー!
もう感動的すぎて泣けてきます。ずっと、この姿を夢見て生きてきました。(冗談です)
ご覧ください。この勇姿を。
(箱庭コンダクタを2ノード構成で結合して、シミュレーション時刻同期している様子です)
思い返せば、もう4年前のことです。
2022年3月22日。
というクラスを作りました。
ETロボコンでのUnityとマイコンシミュレータAthrillとの
時刻同期の経験を踏まえて、
「箱庭の時刻同期」の仕組みを新たに検討し、
そのために作成したクラス名です。
そう、あの DIO(ディオ) のスタンド名を、
ずっとクラス名にしたかったんです!
箱庭の世界では、
その世界で動作する箱庭アセットは、
箱庭時刻の中で動きます。
それもパラレルに。
まさに、時間を支配するクラスです。
「そして時は動き出す。」
そのメソッド名は、「time_begins_to_move」です。
いやー、燃えますね。こういうの。
そして、その行数はたったの20行。

これが、箱庭時刻同期の全てなんですよね。
今日動いたやつ。
デバッグ地獄の中で、
ようやく動いたこのコンポーネント、
箱庭コンダクターは、
この時刻同期の仕組みを、
分散シミュレーション環境で実現するための、
超重要な機能なんです。
その箱庭コンダクターは、今回、完全に再設計&作り直ししました。
(Rust実装からC++実装に変更しましたし)
でもね。
あの、TheWorld クラスは、
いまだに同じ実装です。
Simple is Beautiful.
だれかが、そんなこと言ってました。
あれから4年経ちましたが、いまでも通用するコードを、今日、思い出しました。
そういうのを、ふと思い出して、
ちょっと書きたくなった。
それだけです。
おしまい。

コメントを残す