深夜2時。オフィスの蛍光灯がチカチカと不規則なリズムを刻んでいる。
俺は、20年前に自分が産み落とした愛児——legacy_tool.plのソースコードを前に、深い溜息をついた。
「ガンドルフさん、このツール、モダンなWebダッシュボードからJSONで叩けるようにしてください。あ、既存のロジックは絶対壊さないでくださいね。基幹システムですから」
昼間、若手エンジニアから爽やかに告げられたその言葉が、耳の奥で呪詛のように繰り返されている。
既存のロジックに手を加えれば、ダムが決壊するようにバグが溢れ出す。それは俺が一番よく知っている。
だが、今のままではHTTPだのJSONだのという「浮ついた流行り」を受け入れる隙間などどこにもない。
俺は、ソースコードの末尾に、501個目となるelsifを書き加えようとして……手が止まった。
往診
背後で、音もなくキーボードを叩く音がした。 「……誰だ?」 振り返ると、そこには場違いな二人が立っていた。 一人は、黒い鞄をデスクに置き、無愛想に俺のモニターを覗き込んでいる男。 もう一人は、穏やかな微笑みを浮かべた女性だ。
「どちら様ですか?」俺の問いに、女性が丁寧にお辞儀をした。 「大丈夫ですよ、ここはコード診療所です……あ、いえ、本日は往診ですね。助手のナナコと申します。こちらはドクターです」 「ドクター……? 医者が俺のコードに何の用だ」 俺の警戒を無視して、男——ドクターは、俺のソースコードを指先で弾いた。
診断
ドクターは俺の500行に及ぶelsifを一瞥し、鼻で笑った。
「硬化。……癒着。末端、不純物」
短く、断定的な声。
「何だと……!」俺が立ち上がろうとすると、助手のナナコさんがそっと手を制した。 「落ち着いてください、ガンドルフさん。ドクターは、長年の継ぎ接ぎ(パッチ)によって、コードの血管——つまりインターフェースが動脈硬化を起こしているとおっしゃっています。外部からの新しい情報、たとえばJSONのような血液を流そうとしても、血管が硬すぎて拒絶反応を起こしている……適合不全症候群、ですね」
俺は力なく椅子に座り直した。 「……分かっている。だが、このロジックは俺の命だ。20年かけて磨き上げた。1行たりとも書き換えたくないんだ」 ドクターは俺を見ようともせず、鞄から見たこともないほど洗練されたキーボードを取り出した。 「不要」 一言だけ言い放ち、ドクターの指が舞った。
外科手術
ドクターは、俺のlegacy_tool.plには指一本触れなかった。
代わりに、彼は新しいファイルInventoryAdapter.pmを作成し、そこに魔法のようなコードを書き込み始めた。
| |
ドクターの手の動きを見守りながら、ナナコさんが静かに解説してくれる。 「ドクターは今、バイパス手術を行っています。既存のロジックを無理に変えるのではなく、それを包み込む(ラップする)『アダプター』を作ることで、古い道具を新しい環境に適合させているんです。これで、ガンドルフさんの大切なロジックは守られたまま、若手の方々の要望にも応えられますよ」
俺の目には、ドクターの書くコードが、古びた心臓に繋がれた新しい人工弁のように見えた。 無骨で、だが驚くほど正確な、適合のための接木。
術後経過
「……できたぞ」 ドクターがそう言った気がしたが、実際には彼はただEnterキーを静かに叩いただけだった。 テストコードが走り、全てのランプが緑色に変わる。 既存のCLIツールは何一つ変わっていない。なのに、そこから出力されるデータは、完璧に整理されたJSON形式としてWebダッシュボードに吸い込まれていく。
「信じられん……俺のコードが、息を吹き返した」 俺が感動に震えていると、ドクターは無言で俺のデスクの上を見た。 そこには、俺が20年使い倒して黒ずんだ、ボロボロのマウスパッドがあった。 ドクターはそれを無造作に手に取り、自分の鞄へ放り込んだ。代わりに、鞄から取り出したばかりの、新品のリストレストを俺の前に置いた。
「(……えっ?)」 俺は息を呑んだ。 あの汚いマウスパッドを、ドクターは「20年の戦友」として認めてくれたのか? それを自分の鞄にしまい、代わりに「これからはこれで腕を休めろ」と、この最新のリストレストを……。 俺の胸に、熱いものが込み上げた。
「……先生、感謝します。俺の、俺たちの20年を認めてくれて」 俺が深く頭を下げると、ドクターは満足げに一度だけ頷き、出口へと向かった。 ナナコさんが苦笑いしながら、俺に耳打ちした。 「……ガンドルフさん、あれ、ただの廃棄物回収です。ドクターは清潔でないものが視界に入るのが我慢できないだけなんですよ」
……まあ、いいさ。 俺は新しく置かれたリストレストの、適度な弾力を確かめた。 俺の愛児は、これからも新しい時代を生き抜いていける。 「俺も、まだ引退には早いな」 深夜のオフィス。チカチカしていた蛍光灯が、心なしか安定した光を放ち始めた気がした。
処方箋まとめ
| 症状 | 適用すべき | 経過観察 |
|---|---|---|
| インターフェースの仕様が合わない | ✓ | |
| 既存の安定したコードを修正したくない | ✓ | |
| 外部ライブラリの仕様に依存しすぎている | ✓ | |
| ロジック自体が破綻している | ✓ |
治療のステップ
- 既存ロジックの特定: 変更を加えたくない「心臓部」を明確にする。
- Adapterクラスの作成: ターゲットとなる新しいインターフェースを持つクラスを設計する。
- 委譲(Delegation)の実装: 新しいメソッドの中で、既存の古いメソッドを呼び出す。
- データ変換: 戻り値や引数の形式を、新しい仕様に合わせて整形する。
助手より
古いコードを大切に守り続けることは、決して悪いことではありません。ただ、時には「新しい風」を通すための窓口を作ってあげることも必要ですね。Adapterパターンは、過去と未来を繋ぐ優しい架け橋です。ガンドルフさんの20年、これからも大切になさってくださいね。 ——ナナコ
