
Welcome to my guesstimater - 28年前のプログラムがClaudeで復活した話
ファイルの名前は main_c_12.3
Macのフォルダの奥に、ひっそりと眠っていた。
拡張子もない、素っ気ないファイル名。
開いてみると、C言語のコードが2660行。
/* neural network 1.9
Last updated 1998/12/03 Thu.
Copyright (c) 1998 Iwao Kumazawa. */1998年12月3日(木)。
わたしが33歳のとき、岐阜大学第2外科の研究室で書いたプログラム。
胃がん術後患者672例の予後を、ニューラルネットワークで予測する。
プログラムをつくるワークを一日中していた。
集中しすぎて額のアジナ・チャクラが熱くなったのを覚えている🧘。
当時の開発環境..
当時実用的なニューラルネットのソフトはなかった。
統計ソフトのStatViewやSPSSはあった。SASは大学にはあったが、自分のパソコンでは使えない。leave-one-out(LOO)検証という手法には対応していなかった。
だから、自分で作った。
Cの入門書を買い、先輩に逆行列の計算を教わり、バックプロパゲーションのアルゴリズムを統計の本から読み解き、1行1行コードに落とし込んだ。コンパイラはSymantec THINK C、途中からCodeWarriorに変わった。CodeWarriorになった瞬間、計算速度が劇的に上がったことをいまでも鮮明に覚えている。
マシンはPowerBook 3400c/G3置換。
LOO検証は、672例なら672通りの組み合わせで学習し直すから、数時間かかった。夜のうちに走らせておいて、翌朝結果を確認する。
そういう作業を繰り返した。
28年後の春
2026年4月。
Claudeとの対話の中で、ふとそのファイルのことを思い出す。
「アップロードしてみますか?」
ためしに投げてみると、Claudeはほぼ即座に答えた。
「CodeWarrior IDE 3.0J製、Mac OS 9形式(cp932/\r改行)。全2660行・22関数。内容:階層型NN(バックプロパゲーション)、ロジスティック回帰、Cox比例ハザード、線形回帰、LOO交差検証…」
わたしが1年半かけて作ったものを、Claudeは数秒で読み切った。
修正は1行だけ
オリジナルのCコードをLinuxで動かすために、必要だった変更はほぼ2つだった。
ひとつは`<unix.h>`のインクルードを削除すること。これはMac OS 9固有のヘッダで、Linuxには存在しない。
もうひとつは乱数の処理。
// 元のコード(Mac OS 9)
l = r * total_Z / 32768 + 1;
// Linux版に修正
l = (int)((double)r / (RAND_MAX + 1) * total_Z) + 1;Mac OS 9の`rand()`が返す最大値は32767。
Linuxでは2,147,483,647。
この差を見落としたまま実行すると、配列の外に飛び出してSegmentation faultで落ちる。Claudeが丁寧に原因を特定してくれた。
「AddressSanitizerの結果です。1077行目のtotal_data_division内で、配列外アクセスが発生しています」
つまり、28年間に必要だった修正は実質1行だった。
19秒
実行してみた。
NN leave-one-out method
epoch_limit=50
middle_units=3
Operation is started.
10:sample 70.0 0sec.
20:sample 80.0 0sec.
...
670:sample 87.5 19sec.
sample 87.5 672例のLOO検証が、19秒で完走した。
当時は数時間かかっていたものが。
数字が語ること
論文に載せた数値がある。
LOO適中率:88.1%
感度:61.2%
特異度:96.0%
今回の再現値(100回試行の平均)は:
LOO適中率:87.5%(差0.6%)
感度:61.2%(完全一致)
特異度:95.6%(差0.4%)
感度が小数点1位まで一致した。再現性が認められた。
1998年のC言語コードが、正しく書かれていた。
バックプロパゲーションの実装が、28年前のわたしが理解して、ちゃんと機能していたということ。
0.6%の差は、乱数のシードの違い、浮動小数点演算のMac→Linux間の微差、そういったものの積み重ねだろうとClaudeは分析してくれた。
アルゴリズムの誤りではない。おそらく。
「my guesstimater」
コードの最初に、こんな行がある。
printf("Welcome to my guesstimater
(Integrated Data mining tool). \n");
printf("Freeware, send Bug reports to
iwaokuma@rd.mmtr.or.jp.\n");`guesstimater`。
「推測する道具」という意味で、当時のわたしが造語したのかなと思ったら、調べるとguesstimateは1934年にアメリカの統計学者が作った実在の言葉だったようだ。
freeware(無償配布)と書いてある。誰かに使ってもらえるとでも思っていたのだろうか。
もう使われていないメールアドレスが残っている。
あの頃の熱量が、こういうところに密んでいる。
暗黙知が、コードになっていた
ポランニーは「われわれは語れる以上のことを知っている」と言った。
当時のわたしは、バックプロパゲーションを「理解」していた。
でもその理解がどの程度のものだったか、自分ではわからなかった。
今回のプロセスで、ひとつのことが確認できた。
1998年12月3日のわたしが書いたコードが、
28年後のLinux環境で、修正1行で動いた。
暗黙知が可視化されていた。プログラムという言語で。
AIとわたし
今回の作業を振り返ると、Claudeはわたしの記憶を補完し続けてくれた。
「うる覚えですみません」と言いながら投げた断片的な情報を、
ソースコードと照合し、
ファイル構造を推定し、
Segfaultの原因を特定し、
100回の試行を自動化し、
論文値と比較した。
わたしが1年半かけて作ったものを、
Claudeとふたりで、数時間で再現した。
もちろんAIは「凄い」。
同時に、28年前のわたしがちゃんとやっていた、という確認ができたという、お話。
タイムカプセルを開けた
論文を提出したのは2001年。
掲載された消化器外科学会雑誌で、どれだけ読まれたかはわからない。
でもコードは残っていた。データも残っていた。
そしてAIという、28年前には想像もしていなかった道具と一緒に、そのコードが、また走り出した。
種を蒔いた人が、発芽を見なくていいとはいうものの、
今日は、発芽を見ることができた。
タイムカプセルを開けた。
感無量、しみじみとする休日の夕方。
2026年4月12日