リコリス・リコイル7話に登場するソースコード

#46
2022.9.1

今期放送中のアニメ、「リコリス・リコイル」の7話冒頭に、"Internet Automatic Search Program"と題したソースコードが現れます。

/*<replacement>*/
var bufferShim = require('buffer-shims');
/*</replacement>*/

/*<replacement>*/
var util = require('core-util-is');
util.inherits = require('inherits');
/*</replacement>*/

/*<replacement>*/
var debugUtil = require('util');
var debug = void 0;
if (debugUtil && debugUtil.debuglog) {
  debug = debugUtil.debuglog('stream');
} else {
  debug = function () {};
}
/*</replacement>*/

var BufferList = require('./internal/streams/BufferList');
var StringDecoder;

util.inherits(Readable, Stream);

function prependListener(emitter, event, fn) {
  // Sadly this is not cacheable as some libraries bundle their own

どう見てもJavaScript、それもCommonJSのコードにしか見えませんよね。これだけrequire()していれば明らかです。

では一体何のコードなのでしょうか。鍵はutil.inherits(Readable, Stream)です。util.inheritsというのはNode.jsが提供する関数で、ES6のクラスが無かった時代に継承を行うのに使われていたものです。つまりこの場合、Streamという型をReadableに継承させています。故にこのコードはReadableという型を実装するためのものと考えられます。

そしてこのReadableというのも、Node.jsが提供する読み取り専用ストリームのクラスなのです。

ここまで来れば、このコードが何処から来たのかおおよそ想像がつきます。Node.jsのReadable実装、または、Node.js互換のReadableを実装するライブラリのどちらかとしか考えられません。

答え合わせ

このソースコードは果たして、正確には、Node.jsのReadableの実装から取られたものではありませんでした。というのも、このコード片のオリジナルが見つかったのは、nodejs/readable-streamというリポジトリの_stream_readable.jsだったからです。このリポジトリはオリジナルのNode.jsのstreamの実装をミラーしている、とあるので、実質的にはNode.jsのコードだったと言っても良いのかも知れませんが。

この奇妙な/*<replacement>*/というコメントは、どうやら、元のリポジトリからミラーする過程で生まれたもののようです。ミラーの工程で、いくつかのファイルが一つのファイルに結合されたことによって、require()の位置が不揃いなコードになったようです。