1799年に発見された「ロゼッタ・ストーン」を手がかりに、古代エジプトのヒエログリフを解読したのは、ジャン=フランソワ・シャンポリオンです。今回は、まったく読めないとされていたロゼッタ・ストーンの解読ストーリーをヒントに、ドキュメントなきレガシーコード解析のマインドセットとプロセスを考えてみたいと思います。「読める箇所」「分かる箇所」を足掛かりに、仮説と検証を繰り返しながら解読を進めるアプローチから「解読者魂」を読み取ってみたいと思います。
- もくじ
1. レガシーコード解析と「ロゼッタ・ストーン解読」は似ている!?
1-1. ロゼッタ・ストーンと解読者
1799年、ナポレオン率いるフランス軍がエジプトを遠征中、ラシード(ロゼッタ)という町の要塞修復工事中に、奇妙な黒い石板を発見しました。高さ約112cm、幅約76cmの花崗閃緑岩の石板は、後に「ロゼッタ・ストーン」と呼ばれます。
解読後にわかったことを先に記すと、ロゼッタ・ストーンには、プトレマイオス5世の勅令が3つの文字体系、「ヒエログリフ(古代エジプト象形文字)」「デモティック(民衆文字)」「ギリシャ語」で刻まれていました。大英博物館の公式解説によると、ロゼッタ・ストーンは紀元前196年に刻まれたものでした。
The British Museum "Everything you ever wanted to know about the Rosetta Stone"
この謎に挑んだのが、フランスの言語学者ジャン=フランソワ・シャンポリオンです。シャンポリオンは幼少期にラテン語とギリシャ語をマスターし、コプト語(古代エジプト語の末裔)にも精通しており、さらに研鑽を積んで、20歳までに20を超える言語を習得した語学の天才でした。
ロゼッタ・ストーンがイギリス軍に接収されて、ロンドンの大英博物館に移された後に、シャンポリオンは複製版を使って解読に挑みました。なんと20年以上にわたる苦闘の末、1822年9月にヒエログリフの謎を解き明かして、兄に向かって「Je tiens mon affaire(私が手に入れた)」と叫んだといわれています。その後、パリ碑文・美文学アカデミーの事務官ダシェ氏あてに有名な「ダシェへの手紙」を送付して解読を報告しました。
Smithsonian Magazine "How the Rosetta Stone Yielded the Secrets of Ancient Egypt"
1-2. 読めないヒエログリフとレガシーコードの関係
ヒエログリフは、数千年前のエジプト人が使っていた複雑な文字体系です。絵のような記号が数百種類あり、それぞれが意味を表すのか音を表すのかも一目ではわかりません。長い間「神聖な象徴文字」とされ、壁や石碑に刻まれながらも、その意味は謎のまま放置されていました。
いきなりですが、この話を現代のレガシーコードの解析に置き換えてみましょう。
20年以上前のシステムで、退職した開発者の手による、コメントもなく仕様書も失われ、変数名が意味不明なコードの塊としてレガシーコードが存在したら......これはまるでロゼッタ・ストーンのヒエログリフのようではありませんか?状況が重なります。
例えば、ロジックが絡み合ったスパゲッティコードが目の前にあったとします。なぜこのif文がここにあるのか、誰も説明できません。ヒエログリフ同様、読めない状態です。しかし両者には共通点があります。どちらも過去の遺産だということです。
1-3. ロゼッタ・ストーンの解読の鍵は?
なぜシャンポリオンは「読めないはずの文字(ロゼッタ・ストーン)」を解読できたのでしょうか。その最大の理由は、ロゼッタ・ストーンに「すでに読むことのできる言語」が刻まれていたことにありました。
記されていた3言語のうち、ギリシャ語は当時の研究者たちにとって既知の言語です。ギリシャ語部分を読めば、プトレマイオス王の勅令の内容が理解できます。そこからヒエログリフとの対応を仮説を立て、繰り返しパターンを探していました。特に有名なのが「カルトゥーシュ」と呼ばれる、楕円形の枠で囲まれた部分です。「この枠の中にあるのは、おそらく王の名前に違いない」という推測から、ヒエログリフの音声体系の解明へとつながりました。
つまり、既知の言語を足掛かりにして、未知の言語を照らし出すことが解読の「勝利の方程式」となっていました。単なる翻訳ではなく、繰り返しパターンから言葉を探り、検証を重ねた点がポイントとなりました。
1-4. まず「振る舞い」を「読む」という発想
この発想をレガシーコードの解析に当てはめると、どうなるでしょうか。エンジニアはソースコードという「未知の言語」を一行目から読み解こうとすることがあります。しかし、それは、辞書なしでヒエログリフを読み解こうとする無謀な挑戦なのかもしれません。コードそのものが読めなくても、そのプログラムが引き起こす振る舞いは観測できます。どんな入力に対して、どんな出力を返すのか。どのAPIと通信しているのか。どのテーブルを更新しているのか。
一例ですが、ECサイトの在庫管理コードでは、注文時に「在庫-1」という処理のログを追跡するだけで、内部の動きを大まかに把握できるでしょう。コードを直接読もうとするのではなく、まず、動かして観察するのがロゼッタ・ストーン解読と同じアプローチといえるかもしれませんね。いずれにしても、解読には手間がかかります。
2. ロゼッタ・ストーン解読的アプローチ
2-1. 解読を可能にした「既知の言語」という突破口
シャンポリオンにとっての突破口は、先述したギリシャ語とコプト語でした。ギリシャ語は意味がわかる言語であり、コプト語は古代エジプト語の流れをくむ言語です。彼はこの二つを軸に文法構造を推測しました。未知に真正面から挑むのではなく、既知を徹底的に活用するという姿勢でした。
シャンポリオンはギリシャ語の文を基に、王の名前や重要な名詞がどの位置に配置されているかを特定し、ヒエログリフとの対応関係を一つずつパズルのように埋めていきました。単一の石板だけでは不十分だったため、他の石碑の王名のカルトゥーシュも収集し、パターンを蓄積していったとされています。
転じて、レガシーコード解析においても、まったく同じことが言えそうです。コードの中身が不明であっても、ビジネスロジックやドメインルール(業務上の決まり事)は既知の言語です。
「この業務フローでは必ず消費税の計算が行われるはずだ」「このタイミングで在庫が1つ減るはずだ」という既知の知識が、コードの中の重要なロジックを見つけ出すための突破口になります。まずそれらを集め、対応関係をマッピングしていくことが、解析の第一歩となります。
2-2. レガシー解析における入出力・ログ・外部仕様
現代のエンジニアにとってのロゼッタ・ストーンは、システムが吐き出す「入出力データ」や「ログ」です。コードという内部構造が読めなくても、外部から観測できる情報は嘘をつきません。
具体的には、APIのリクエストとレスポンスを観察したり、ログからエラー発生条件を洗い出したり、実際に操作してどのデータがどのテーブルに保存されるかを確認したりすることで解読を進めます。ログ解析には、ELKスタックのようなツールを使いタイムスタンプ付きで追跡する方法が実践的だといわれています。
こうした外側からの観測が、内部の意味を推測するための重要な手がかりになります。ロゼッタ・ストーンの解読のように「コードを直接読もうとするより、まず動かして観察する(情報を集める)」ことが、手間はかかりますが、「急がば回れ」で解決を早めてくれるようです。
2-3. 観測から対応関係を見つけるリバースエンジニアリング
ロゼッタ・ストーンの解読においても、シャンポリオンの凄みは、単なる推測に留まらず、徹底した「対応関係の検証」を行った点にあるといわれています。
ギリシャ語の「P-T-O-L-M-E-S(プトレマイオス)」という音の並びが、ヒエログリフのどの記号に対応するかを、一つずつ特定していきました。上で紹介したスミソニアン誌によると、シャンポリオンはエジプトのコプト語の知識を総動員し、文字が単なる「絵」ではなく「音」を表していることを見抜いていたようです。
レガシーコード解析でも同じです。特定の入力パラメータを変えると、特定のフィールドだけが変化する。あるエラーメッセージが出るときは、必ず特定の条件を満たしている。そのような相関を地道に記録していくことで、内部ロジックの仮説が立てられることになります。完成品から設計思想を逆算するリバースエンジニアリングは、ヒエログリフの記号とギリシャ語の単語を一つずつ対応づけていったロゼッタ・ストーンの解読と、本質的には同じなのかもしれません。
3. 仮説と検証から真実を読み出す
3-1. 仮説を立て、壊し、更新し続ける思考プロセス
シャンポリオンは最初、ヒエログリフはすべて象徴的な意味を持つ表意文字だと考えていました。しかしそれではどうしても説明がつかない部分が出てきます。そこで彼は自らの仮説を疑い、「これは音を表す『表音文字』も含まれているのではないか」というパラダイムシフトを起こしました。紹介したように、そこで王名「プトレマイオス」のヒエログリフを音で読む仮説を立て、楕円形のカルトゥーシュが王名を囲むルールを見つけ、音声記号の配列を何度も更新していったのです。
レガシーコード解析でも、この「仮説検証サイクル」が不可欠です。「この条件分岐は在庫切れ時の処理だろう」という仮説を立て、実際に条件を作り出して動かしてみる。予想と違う動きをしたら、潔く仮説を捨てる。「在庫切れではなく、返品処理のロジックだったのか」と更新する――といった繰り返しが、真実へ近づく唯一の道のようです。
3-2. 技術力以上に問われる姿勢と粘り強さ
シャンポリオンの解読を支えたのは、天才的な頭脳以上に、彼の並外れた執念でした。天才性よりも好奇心と忍耐、解析にかける「魂」によるものだったといっても過言ではありません。
レガシーコード解析も同様です。高度なアルゴリズム知識があるかどうかよりも、「なぜ、ここで1を引いているのか?」という小さな疑問を流さない丁寧さ、何度仮説が外れても次のアプローチを考え出す粘り強さと解読にかける「魂」、そして「死んだコード」の背後にいるかつての開発者の意図を想像する共感力を備えたエンジニアこそが、真の解読者になれるのかもしれません。
つらいときは、ロゼッタ・ストーンに20年以上にわたって立ち向かったシャンポリオンの姿を思い出してみてください。失敗を恐れない粘りが解析をゲームのように楽しいものに変えてくれるのかもしれません。
3-3. 「解読のカギ」を残す意義
私たちがレガシーコードの解析に苦労するのは、過去の誰かが「解読のカギ」を残してくれなかったからです。ならば現代のエンジニアとして、未来のエンジニアのためにカギを残していくことも意義あることだと思います。
具体的には、最低限のドキュメント、API仕様書、自動テスト、監視設計が柱となります。特に重要なのは「なぜ(Why)そうしたのか」を記したドキュメントでしょう。「何をしているか(What)」はコードを読めばわかりますが、「なぜその手法を選んだのか」という意図は、文字として残さない限り消えてしまいます。テストコードは、将来のエンジニアにとっての「ギリシャ語」になります。テストを読めば、そのコードがどう動くべきかが瞬時に理解できるからです。
こうした取り組みは、将来の誰かが未知に直面したときの助けになります。現代のエンジニアたちのドキュメントへの一手間が、未来のエンジニアが数週間、数ヶ月にわたって暗闇を彷徨うのを防ぐ歴史的な貢献になるのかもしれません。
4. まとめ
ロゼッタ・ストーン解読は、既知のギリシャ語から未知のヒエログリフを読み解いたシャンポリオンの物語だと言ってよいと思います。これをレガシーコード解析に当てはめると、解読には技術力にくわえて粘り強さと「解読者魂」がポイントになります。そして、なによりも、現代のエンジニアはドキュメントとテストという「解読のカギ」を残すことで未来のエンジニアを救う意識を持つことが大切でしょう。


