プログラミングが別なプログラミングを生み出す、そんなメタ的なプログラミングは非常に面白いです。プログラミング言語を作るのもそうですが、何かを作るための製品を作り出すのは、心躍るものです。 今回紹介する山手Quineは実行結果がそのままプログラミングになっているという、そんな摩訶不思議なソフトウェアです。

山手Quineの使い方

単純に実行した例です。

ただ山手線の駅名である神田が出ただけではありません。この文字列は、再度Rubyのコードとして実行できます。

ちゃんと山手線の順番(内回り、外回りが用意されています)に並んでいます。つまりこんな実行方法が可能です。

$ ruby akihabara.rb | ruby | ruby | ruby

ちゃんと実行結果が返ってきます。

山手Quineは実行結果として出力される内容がそのまま実行できるだけでなく、山手線の内回り、外回りにちゃんと対応しています。さらに最近できた高輪ゲートウェイ駅にも対応しているという凝りようです。どんなコードで生み出されているのか、それを見てみるだけでも面白いです。

山手QuineはRuby製のソフトウェア(ソースコードは公開されていますがライセンスは明記されていません)です。

mame/yamanote-quine: A self-reproducing program that shapes the station names of Yamanote Line