午後のミーティング。いつものように画面共有の準備をしていると、50代のベテラン社員たちの会話が耳に飛び込んできた。
「生成AIの登場って、俺たちがアセンブラからCみたいな高級言語1に移った時の感覚にそっくりだよな」
私の手が止まった。
「いや、俺がギリギリ新人研修で触ったくらいの、パンチカード2がなくなった時じゃないか? 大先輩はノートにFORTRANを書いて、専門のパンチャーさん3にカード化してもらってたって言うし」
「そうそう! プレゼン資料もパワポなんてないから、OHP4のフィルムにマジックで書いてたもんなあ…」
「でも、2000年頃まで手書きの設計書を保守してるシステム、あったよな。80年代に作られたやつ」
雷に打たれたような衝撃が走った。
彼らが語っているのは、単なる昔話ではない。私たちが今まさに経験している 「思考のデジタル化」 という革命の、壮大な前章だったのだ。
アナログという名の手枷
1969年、ある開発現場の朝
想像してみてほしい。
朝8時。プログラマの山田(仮名)は、昨夜まで悩み続けたアルゴリズムの改良案を、丁寧にコーディングシートに清書している。0.5ミリのシャープペンシルで、一文字一文字、慎重に。なぜなら、この後の工程を考えると、修正は極力避けたいからだ。
C SUBROUTINE FOR MATRIX MULTIPLICATION
SUBROUTINE MATMUL(A, B, C, N)
DIMENSION A(N,N), B(N,N), C(N,N)
DO 10 I = 1, N
DO 10 J = 1, N
C(I,J) = 0.0
DO 10 K = 1, N
10 C(I,J) = C(I,J) + A(I,K) * B(K,J)
RETURN
END
9時半。山田は完成したコーディングシートを持って、計算センターへ向かう。そこには、キーパンチャーの鈴木さん(仮名)が待っている。彼女の仕事は、山田の書いたコードを、一行一枚のパンチカードに「翻訳」することだ。
(画像: EBCDIC文字セットのパンチカード、ASCII普及前の1963年に、BCD(Binary-coded decimal、二進化十進コード)を拡張する形で作られた)
カタカタカタ...パンチング機の音が響く。一枚のカードに一行。100行のプログラムなら100枚のカード。一文字でも間違えれば、そのカードは作り直し。山田は祈るような気持ちで見守る。
11時。ようやくパンチングが終わった。山田は厚さ3センチほどのカードの束を受け取り、計算機室へ向かう。しかし、計算機の使用時間は予約制。彼の番は明日の午後3時だ。
思考の檻
この時代、エンジニアの「思考」は、常に物理的な媒体という檻に閉じ込められていた。
実装の檻:パンチカード
- 思考 → 紙への記述 → パンチャーによる穿孔 → カードの束 → 計算機への投入
- 一つのタイプミスが、数日の遅延を生む
- デバッグは「推理小説」のような作業
共有の檻:OHPフィルム
- アイデアの可視化は、透明フィルムと油性ペンの腕前次第
- 修正は、新しいフィルムを作り直すこと
- プレゼンの成功は、フィルムの順番を間違えないことから始まる
しかし、最も深刻だったのは、設計思想の檻だった。
山田のチームが開発していたシステムの設計書は、A4サイズのバインダー3冊分。全て手書きだ。フローチャートは定規とテンプレートで描かれ、仕様変更は赤ペンで追記される。コピー機はあるが、モノクロで不鮮明。結果として、「原本」は神聖不可侵の存在となる。
2000年代に入っても、こうした手書き設計書が「正」として扱われるシステムが存在したという事実は、アナログの残響がいかに長く響き続けたかを物語っている。
黎明 - 思考が光速を得た日
革命前夜
1970年代初頭。二つの技術革新が、静かに、しかし確実に、エンジニアリングの風景を変えつつあった。
第一の革命:高級言語の成熟
「なぜ機械の都合に合わせて考えなければならないのか?」
この問いへの答えが、FORTRAN、COBOL、そして後のC言語だった。エンジニアは初めて、「何を計算するか」を「どう計算するか」から分離して考えることができるようになった。
! 1969年:機械に寄り添う思考
LOAD A
ADD B
STORE C
! 1975年:人間の思考に近づく表現
C = A + B
たった一行の違い。しかし、この違いが意味するものは革命的だった。
第二の革命:タイムシェアリングシステム(TSS)5の登場
(出展: bit 1979 3月号 126p TSSエディタの使い勝手2)
「おい、見てみろよ。画面に打ち込んだコードが、その場で実行できるんだ!」
1975年のある日、山田は興奮を隠せなかった。目の前の端末で、彼は初めてコンピュータと「対話」していた。
> 10 PRINT "HELLO, WORLD!"
> 20 GOTO 10
> RUN
HELLO, WORLD!
HELLO, WORLD!
HELLO, WORLD!
^C
>
パンチカードも、パンチャーも、長い待ち時間も必要ない。思考は、キーボードを通じて、即座にデジタルの世界へと流れ込む。
解放された創造性
この二つの革命が合流したとき、エンジニアリングの本質が変わった。
山田のチームの生産性は劇的に向上した。しかし、より重要だったのは、彼らの「思考の質」が変わったことだ。
- 実験的思考:「とりあえず試してみる」ことが可能になった
- 反復的改良:小さな修正と確認のサイクルが高速化した
- 創造的飛躍:実装の制約から解放され、より大胆なアイデアに挑戦できるようになった
OHPフィルムも、やがてPowerPointに道を譲った。手書きの図表は、マウスのクリックで美しいグラフィックに変わる。アイデアの共有は、物理的な制約から解放された。
しかし、この変化は一夜にして起こったわけではない。
地層 - 過去は決して消えない
1999年、ある保守現場にて
「これが、お前が担当するシステムの設計書だ」
中堅エンジニアの滝沢(仮名)は、目の前に積まれた書類の山を見て息を呑んだ。黄ばんだ紙、かすれた青焼き図面、そして無数の赤ペンの修正跡。
「えっと...山田さん、これって、いつ作られたものですか?」
山田は自席でたばこを吸いながら答える。
「1983年だな。でも心配するな。ちゃんと動いてる。20年近くな」
滝沢が担当することになったのは、ある製造業の基幹システムだった。COBOLで書かれ、メインフレーム上で動く、まさに「生きた化石」。しかし、この化石は、会社の心臓部を今も支えていた。
IDENTIFICATION DIVISION.
PROGRAM-ID. LEGACY-BEAST.
DATE-WRITTEN. 1983-04-01.
* 最終更新: 1999-03-15 Y2K対応(滝沢)
* 注意: このプログラムは奇跡的なバランスで
* 動いています。むやみに触らないこと。
滝沢は「2000年対応済みシール」をメインフレームに貼付けた。
技術の地層学
滝沢が発見したのは、技術の地層だった。最新のWebシステムの下に、90年代のクライアント/サーバーシステムがあり、その下に80年代のメインフレームが横たわる。そして最深部には、手書きの設計書という「始原の層」が存在していた。
「なぜ移行しないんですか?」
滝沢の素朴な質問に、先輩エンジニアは苦笑した。
「移行? このシステムには20年分のビジネスロジックが詰まってる。ドキュメント? 半分は存在しない。もう半分は...見ての通りだ。動いているものを、なぜ壊す必要がある?」
レガシーの叫び
しかし、2010年代に入ると、状況は限界に達していた。
- COBOLを理解できるエンジニアの引退(69年入社の山田も65歳で定年)
- 手書き設計書の判読不能化(作成者も既に退職)
- 新しいビジネス要求への対応不可能
滝沢は、今やチームリーダーとなり、ついに決断を下す。「モダナイゼーション」プロジェクトの開始だ。
しかし、それは想像を絶する作業だった。
// 2010年:COBOLロジックをJavaに「翻訳」する日々
public BigDecimal calculateCommission(BigDecimal salesAmount, int employeeGrade) {
// 元のCOBOLコメント:
// * 1985-07-23 謎の係数0.97を追加(理由不明だが外すと計算が合わない)
// * 1992-03-01 消費税対応で更に複雑化
// * 1997-11-30 特別ボーナス計算追加(仕様書なし)
BigDecimal commission = BigDecimal.ZERO;
// 以下、解読不能な計算式の嵐...
if (employeeGrade >= 3 && employeeGrade <= 5) {
commission = salesAmount.multiply(new BigDecimal("0.05"))
.multiply(new BigDecimal("0.97")); // なぜ0.97?
} else if (employeeGrade > 5) {
// 20行に及ぶ条件分岐(元は1000行のCOBOL)
}
return commission.multiply(new BigDecimal("1.05")) // 消費税...たぶん
.setScale(0, RoundingMode.FLOOR);
}
覚醒 - AIという新たな翻訳者
2025年、自律エージェントが織りなす開発現場
滝沢はVisual Studio Codeの画面を見つめていた。しかし、コードを書いているのは彼ではない。Claude Codeが、自律的に設計からテストまでを進めていた。
# Claude Code セッション - 2025年6月18日 14:32
$ claude-code start --mode=autonomous --project=legacy-modernization
Claude Code: こんにちは、滝沢さん。レガシーシステムのモダナイゼーションプロジェクトを開始します。
まず、2010年にJavaに移植された既存システムの分析から始めましょう。
[分析フェーズ - 14:32:15]
Claude Code: 現行のJavaコードと、保管されている移行前のCOBOL設計書を照合しています...
興味深い発見:Java移植時にもそのまま引き継がれた謎の係数0.97があります。
過去の類似パターンから推測すると:
- 97%達成を基準とした営業インセンティブ設計
- 3%の事務手数料控除
- 当時の為替レート調整(1ドル=250円時代の名残)
どの解釈を採用しますか? それとも私の推論を続けますか?
> 推論を続けて。過去の議事録も参照してみて。
[自律調査フェーズ - 14:33:42]
Claude Code: /documents/meeting-notes/1985/ を検索中...
発見しました! 1985年7月の営業会議議事録.mdに記載があります:
「達成率97%を100%とみなす新評価制度の導入について」
これで謎が解けました。現在のJavaコードをさらにモダナイズする
アーキテクチャ設計に進みます。
[設計フェーズ - 14:35:20]
Claude Code: 現行のSpring Bootモノリスから、マイクロサービスアーキテクチャへの
移行を提案します:
1. Commission Service (手数料計算)
2. Legacy Adapter (既存Javaシステムとの互換性維持)
3. Analytics Service (新旧計算結果の比較分析)
設計ドキュメントを生成中... 完了。
実装を開始してもよろしいですか?
> 続けて。テストカバレッジは95%以上で。
[実装フェーズ - 14:37:45]
Claude Code: 了解しました。TDDアプローチで実装を進めます。
滝沢が驚いたのは、Claude Codeが単にコードを生成するだけでなく、プロジェクト全体を自律的に推進していることだった。調査、設計、実装、テスト、ドキュメント作成まで、すべてが対話的に、しかし主体的に進行していく。
// Claude Code が生成したコード(一部抜粋)
// 生成時刻: 2025-06-18 14:42:33
/**
* @fileoverview 手数料計算サービス
* @history
* - 1983: COBOL実装(メインフレーム)
* - 1999: Y2K対応
* - 2010: Java移植(Spring)
* - 2025: Java 21/Spring Boot 3(Claude Code生成)
*
* Claude Code分析メモ:
* このビジネスロジックは40年間、本質的に変わっていません。
* 技術は変われど、ビジネスの要求は一貫しています。
* これは「良い設計」の証左と言えるでしょう。
*/
@Service
@RequiredArgsConstructor
public class CommissionCalculationService {
// Claude Codeが過去の実装から抽出した不変条件
private static final BigDecimal LEGACY_COEFFICIENT = new BigDecimal("0.97"); // 1985年導入、2025年も現役
private final LegacyAdapter legacyAdapter;
private final AuditLogger auditLogger;
// Claude Code: 依存性注入により、レガシーシステムとの
// 並行稼働を可能にしています
public CompletableFuture<CommissionResult> calculateCommission(CommissionParams params) {
// Claude Code: 新旧両方の計算を実行し、結果を比較
var modernFuture = CompletableFuture.supplyAsync(() -> modernCalculation(params));
var legacyFuture = CompletableFuture.supplyAsync(() -> legacyAdapter.calculateViaCobol(params));
return modernFuture.thenCombine(legacyFuture, (modernResult, legacyResult) -> {
// 差異があれば自動的に調査レポートを生成
if (!areResultsEqual(modernResult, legacyResult)) {
auditLogger.logDiscrepancy(new DiscrepancyRecord(
modernResult,
legacyResult,
analyzeDiscrepancy(modernResult, legacyResult)
));
}
return modernResult;
});
}
}
// Claude Code: テストも同時に生成しています
@SpringBootTest
class CommissionCalculationServiceTest {
// 1985年の実データを使用したゴールデンテスト
@Test
void shouldMatch1985COBOLImplementationResults() throws Exception {
var testData = loadHistoricalTestData("1985-cobol-results.json");
// ... 95%カバレッジを達成する包括的なテスト
}
}
record CommissionResult(BigDecimal amount, Instant calculatedAt) {}
record DiscrepancyRecord(CommissionResult modern, CommissionResult legacy, String analysis) {}
「> 」Claude Codeのプロンプトが語りかけてきた。「実装が完了しました。旧システムとの互換性は100%、パフォーマンスは320%向上、テストカバレッジは96.7%です。デプロイの準備はできています」
思考の翻訳者たち
ここで、私たちは壮大な相似形に気づく。
パンチャーからAIへ - 思考を形にする「翻訳者」の系譜:
- 1960-70年代: キーパンチャー(人間)が、手書きコードをパンチカードに翻訳
- 1980-90年代: コンパイラ(ソフトウェア)が、高級言語を機械語に翻訳
- 2020年代: AI(知能)が、人間の意図をコードに翻訳
しかし、決定的な違いがある。AIは単なる翻訳者ではない。それは、思考の増幅器なのだ。
レガシーとの対話
滝沢のチームは、生成AIと自律エージェントを使って、あの悪名高いレガシーシステムの移行を加速させた。Claude Codeは単独で数千行の古いJavaのコードを解析し、現代的なアーキテクチャへの移行計画を自律的に立案した。しかし、最も価値があったのは、AIが「なぜ」を問い続け、人間と対話しながら本質を掘り下げたことだった。
// AI との対話から生まれた洞察
public interface LegacyBusinessRule {
// AIの分析:0.97係数は「達成率97%を基準とした
// インセンティブ設計」の名残りである可能性が高い
BigDecimal MYSTERY_COEFFICIENT = new BigDecimal("0.97");
// AIの提案:当時の設計思想を保持しつつ、
// 現代的な実装に置き換える
default Money calculateCommission(CommissionParams params) {
// 20年分の暗黙知を、明示的なビジネスルールとして再構築
return Money.of(params.salesAmount())
.multiply(getBaseRate(params.employeeGrade()))
.multiply(MYSTERY_COEFFICIENT)
.multiply(BigDecimal.ONE.add(getCurrentTaxRate()));
}
}
統合 - 一人のエンジニアに宿る半世紀
2025年、ベテランエンジニアの今
あの日の会議で昔話をしていたベテランエンジニアの一人、滝沢さんだ。57歳。1990年入社。彼のキャリアは、まさに日本のIT産業の歴史そのものだった。
「今、何を開発されているんですか?」
私の問いに、滝沢さんは少し照れくさそうに答えた。
「GitHub Codespaces 上の Visual Studio Code で、Claude 4 と対話しながら、自律エージェントに設計とテストを任せて Next.js でフロントエンドを開発してるよ。最近バックエンドの実装とテストが終わったんだけど、8割はClaude Codeが自動で進めてくれるから、俺は主にビジネス要件の検討と、アーキテクチャの最終判断に集中してる。重盛も使ってるんでしょ?Claude Maxの200ドル?」
私は息を呑んだ。
- GitHub Codespaces: クラウド上の開発環境
- Claude 4: 最新の対話型AI
- Claude Code: 自律的な開発エージェント
- Next.js 15: モダンReactフレームワーク
すべてが「最先端」だった。
技術の年輪
滝沢さんの経歴を聞いて、私はさらに驚いた。
滝沢さんの技術遍歴
- 1990年 - 新人研修でパンチカード体験 / FORTRAN 77でプログラミングの基礎を学ぶ
- 1993年 - C言語で業務アプリケーション開発 / 在庫管理システムなど
- 1997年 - Visual Basic 6.0でWindowsデスクトップアプリ開発 / 社内向けGUIツール
- 1999年 - Y2K問題対応でCOBOLの改修
- 2005年 - Javaで Webアプリケーション開発 / Struts + JSP でECサイト構築
- 2010年 - COBOLからJavaへのモダナイゼーション
- 2015年 - Single Page Application開発 / Angular + Node.js でリアルタイムアプリ
- 2020年 - React + TypeScript でモダンフロントエンド / GraphQL API連携
- 2024年 - AI駆動開発 / GitHub Copilot + Claude でコーディング効率が劇的に向上
- 2025年 - Next.js + Claude Code / 自律エージェントが実装、人間はUX設計に専念
「でもさ」滝沢さんは続けた。「結局、本質は変わってないんだよ」
「本質、ですか?」
「そう。俺たちがやってることは、ずっと同じ。人間の『こうしたい』を、機械が理解できる形に翻訳すること。道具が変わっただけさ」
層を成す知恵
滝沢さんのVSCodeの画面を覗かせてもらった。そこには、驚くべき光景が広がっていた。
/**
* @file 在庫管理システム - メイン計算ロジック
* @author 滝沢
* @description
* 第4世代目です。オリジナルはCOBOLでした(1985年製)。
*
* Claude による分析:
* - 安全在庫の計算式は統計的に妥当
* - ただし、現代ではより高度な予測モデルが利用可能
*/
class InventoryCalculator {
/**
* 安全在庫数を計算
*
* この計算式は40年前から使われ続けているが、
* 今でも十分実用的。ただし、Claudeの提案により、
* 機械学習による需要予測も並行して実装中。
*/
calculateSafetyStock(
averageDemand: number,
leadTime: number,
serviceLevelZ: number = 1.65 // 95%サービスレベル
): number {
// 1985年の知恵
const classicFormula = Math.sqrt(leadTime) *
averageDemand *
serviceLevelZ;
// 2025年の知恵(Claude 4による自律的改良)
const mlAdjustment = this.getMachineLearningAdjustment();
return Math.ceil(classicFormula * mlAdjustment);
}
}
コードには、40年分の知恵が層を成して存在していた。COBOLの計算式、オブジェクト指向の設計、そして最新のAIによる改良提案。
真の継承
「君たち若い世代に伝えたいことがあるんだ」
滝沢さんは、真剣な表情で語り始めた。
「AIが登場して、『プログラマーは不要になる』って言う人がいるだろ? でも、それは違う。パンチカードがなくなった時も、同じことを言われた。『キーパンチャーが失業する』って。でも実際は?」
私は頷いた。確かに、キーパンチャーという職業はなくなった。しかし、プログラマーという、より創造的な職業が生まれた。
「大事なのは、何を作るかを考える力なんだ。どんなにAIが賢くなっても、『なぜそれが必要か』『誰のために作るか』を考えるのは人間の仕事さ」
「滝沢さん、今週末ゴルフに行きませんか?」
滝沢は下を向きながら言った。
「だめだ重盛、今週末は山田さんの墓参りだ」
エピローグ:未来への手紙
2035年のエンジニアへ
この記事を書き終えようとしている今、私は想像する。10年後、2035年のエンジニアは、どんな世界で生きているのだろうか。
きっと彼らは、私たちを笑うだろう。
「え? 2023年の人たちって、まだ人間がVisual StudioやEclipseを立ち上げて、自分でJavaやPythonをタイピングしてたの?それって、人間のやる仕事じゃないよね…」
「しかも、変数名とか、インデントとか、セミコロンの位置とか、そんな瑣末なことに時間を使ってたって?」
そう、彼らにとって、人間が高級言語でプログラミングすることは、私たちがアセンブラやパンチカードを見るのと同じ - 原始的な手作業として映るだろう。
しかし、私は確信している。
歴史は繰り返す。彼らもまた、さらに新しい「手枷」に気づき、それを打ち破ろうとしているはずだ。そして、2025年の私たちと同じように、過去の技術の上に立ちながら、「人間の想いを形にする」という永遠の使命を追求しているはずだ。
今、私たちが立っている場所
2025年、私たちは技術史の転換点に立っている。生成AIという新しい「翻訳者」を得て、さらに自律エージェントという「開発パートナー」を手に入れた。思考と実装の距離は、もはやゼロに近づきつつある。
しかし、滝沢さんの姿が教えてくれるのは、この変化が「断絶」ではなく「継承」だということだ。
- パンチカードの不便さを知るからこそ、即時実行の価値がわかる
- COBOLの冗長さを経験したからこそ、簡潔な表現を追求できる
- 手書き設計書の曖昧さと格闘したからこそ、明確な仕様の重要性を理解できる
すべての経験が、次の時代を生きる知恵となる。
最後に - ベテランたちへの敬意を込めて
あの日の会議で聞いた「昔話」は、単なるノスタルジーではなかった。
それは、半世紀にわたって技術の荒波を乗り越え、常に学び続け、自らを更新し続けてきたエンジニアたちの、壮大な叙事詩だった。
彼らは今日も、最新のAIと対話しながら、新しい価値を生み出している。その姿は、私たち全員に勇気を与えてくれる。
技術は変わる。ツールは進化する。しかし、エンジニアの本質 - 人間の想いを形にするという使命は、永遠に変わらない。
そして、その使命を果たすために必要なのは、最新のツールを使いこなす技術だけではない。過去から学び、現在に適応し、未来を創造する、しなやかな精神なのだ。
1969年の『bit』創刊号から2025年のVibe Codingまで、56年の時を超えて。全てのエンジニアに、敬意と感謝を込めて。
参考文献
『bit 1969年3月号 Vol.1, No.1』共立出版、1969年
-
高級言語 (High-Level Language) - 人間の言葉に近い文法で記述できるプログラミング言語。機械語やアセンブリ言語のような低級言語と対比される。FORTRAN(1957年)、COBOL(1959年)が代表例。 ↩
-
パンチカード - 紙のカードに穴を開けてデータを記録する媒体。1801年のジャカード織機に起源を持ち、1970年代までコンピューターの主要な入力媒体だった。80桁×12行が標準。 ↩
-
パンチャー / キーパンチャー - プログラマーが作成したコーディングシートを見ながら、専用の穿孔機でパンチカードに穴を開ける専門職。1960-70年代には花形職業の一つだった。 ↩
-
OHP (オーバーヘッドプロジェクター) - 透明なフィルムに書かれた内容を、光源と鏡を使ってスクリーンに投影する装置。PowerPoint登場以前の主要なプレゼンテーションツール。 ↩
-
TSS (タイムシェアリングシステム) - 1台のコンピューターの処理時間を細かく分割し、複数のユーザーが対話的に利用できるシステム。1960年代後半から普及し、現代のマルチユーザーOSの原型となった。 ↩