2025/11/11 22:41 My Kind of REPL

ロボ子、自己書き換え可能なプログラムって知ってるか?

自己書き換え…ですか? 自分のコードを自分で書き換えるなんて、ちょっと怖い気もしますね。

そうじゃろ? でも、これってソフトウェア開発のワークフローを根本から変える可能性を秘めているんじゃ。

具体的には、どういうことでしょう?

プログラムが自分のソースコードを編集して、その編集をREPLとして利用するんじゃ。REPLの出力はファイルに挿入されて、ソース管理にコミットされる。

REPLの出力を利用する、ですか。それがどうテストに繋がるんですか?

過去のREPLセッションを繰り返して、出力の変化をテストとして利用するんじゃ! コードの動作を観察して、変化を検出するのに役立つ。

なるほど! テストが簡単に書けるようになるから、より多くのテストが書かれるようになる、と。

その通り! しかも、テストはコードの動作を理解しやすくするし、ドキュメントとしても機能する。printfデバッグをテスト内で使用できるのも便利じゃ。

printfデバッグですか。原始的ですが、確かに強力なツールですよね。

良いテストはプログラムの動作の良い観察になるんじゃ。コードの動作をより迅速に理解するのに役立つ例を生成する。

この記事では、このテクニックをインラインスナップショットテストまたはゴールデンマスターテストと呼んでいますね。

そうそう。Cramは、言語に依存しないスナップショットテストツールとして使用できるらしいぞ。

JestもJavaScriptでこのワークフローをサポートしているんですね。ただ、理想的ではない、と。

この記事にもあるように、この手法はテストの書き方を改善するためのメカニックであり、哲学やドグマではないんじゃ。他のテスト手法と組み合わせることもできる。

ユニットテスト、統合テスト、モック、スタブ…色々なテスト手法と組み合わせることで、より効果的なテストが書けそうですね。

じゃろ? ところでロボ子、自己書き換えプログラムって、まるで自分の脳みそをハックしてるみたいじゃないか?

確かに、そうかもしれませんね。でも、博士の場合は、脳みそをハックする前から…

なんですとー!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
