老兵士がAIエージェントと遊べるまでになった軌跡その1


今、私は複数のAIエージェント(ChatGPT、Claude、Geminiなど)を「開発チームの頼れる相棒」として引き連れ、日々システム開発を楽しんでいる。
世間では「AIで開発が自動化する」なんてお祭り騒ぎをしているが、私がAIとこれだけ息を合わせて「遊べる」ようになったのには、実は令和のトレンドとは全く無関係な、はるか昔の泥臭い伏線がある。

これは、かつて運送業システムの大ヒットの裏で、終わりのない仕様変更の泥沼に足を踏み入れ、そこから生き残るために必死に戦った一人のシステムエンジニアの、実戦から生まれた技術の記録である。

すべての始まりは、「Microsoft Accessのテキスト化」という、エンジニアとしてのあまりにも切実な防衛策だった。

嬉しい悲鳴と、迫り来る「二度手間・三度手間」の絶望

私が手がけていた運送業システムは、ありがたいことに「売れすぎちゃった」と言えるほど、多くの顧客に導入していただけるようになった。

しかし、運送業の現場というのは、会社ごとに独自の商習慣がある世界だ。
独自の運賃計算、特定の荷主専用の帳票、現場の特殊な運用フロー……。
パッケージをそのまま納品して終わり、というわけにはいかない。
当然のように、顧客ごとの「個別カスタマイズ」が大量に発生することになった。

当時は、変更点をテキストファイルなどの「メモ」に残して管理していた。
だが、人間の手によるメモなんて不完全なものだ。
忙しさに追われるうちに、実際のソースコードとメモの間に少しずつズレが生じ始める。

そして、恐怖のイベントが幕を開ける。
システムの「共通機能のバージョンアップ(最新版への入れ替え)」だ。

意気揚々と最新版を納品した直後、お客さんから連絡が入る。
  「前はこう動いてたのに、今回のできなくなったぞ!」
 「ここが変わっちゃってる!」

冷や汗を流しながら調べ直して、あーーーー!と天を仰ぐ。
そこは、昔その会社専用にカスタマイズを施した場所だったのだ。
最新版を入れたことで、過去の自分が苦労して作った個別機能が上書きされ、消えてしまったわけだ。

そこから、最新版のベースに対して、もう一度そのカスタマイズを「やり直し(組み込み直し)」して、もう一回入れ替える。
それはもう、二度手間、三度手間の大パニックだった。
人間の記憶や不完全なメモに頼る管理は、完全に限界を迎えていた。

敵を知る前に、まずは「己の状態」の把握から

「こんな不毛なループは、もう二度と御免だ」

混乱を止めるために、私がまず着手したのは、あちこちに散らばったカスタマイズ版の修正ではなかった。
「まず、今の標準(ベース)プログラムの正確な状態を100%把握しよう」
急がば回れ。
すべての基準となる『モノサシ』がブレていては、他社版とどこがどう違うのか正確に測れるわけがない。

ACCESS(.mdb.accdb)というやつは、1つのバイナリファイルの中にデータも画面もロジックも全てが詰まった巨大なブラックボックスだ。
そのまま並べても、どこが違うのかを目視で探すのは不可能に近い。

そこで私が最初にやったのは、
「テーブル一覧」や「フォーム一覧」をExcelに出力する
ことだった。
まずは大雑把でもいいから、標準にはない「そのお客さん専用の新設画面やレポート」を一炙り(あぶり)にしようと考えたのだ。

しかし、これは大して役には立たなかった。
新しく作った画面(新規)は一覧に出るから分かる。
だが、既存の標準画面の中で「ボタンが1個追加されている」とか「テキストボックスのプロパティが変わっている」という、肝心の『変更』が、オブジェクト名が同じままでは全く見えてこなかったのだ。

「ラベル135」との正面衝突、そして泥臭いリファクタリング

見切りをつけた私は、一気に解像度を上げて、テーブルの「フィールド」や、フォームの「コントロール」まで、すべてをExcelに吐き出すマクロを追加した。
ここまで落とし込めば、細かいプロパティの変更まで言い逃れできないレベルで浮き彫りになるはずだった。

ところが、ここで衝撃的な事実に直面する。
出力されたExcelのリストを見ると、そこには不気味な名前が並んでいた。

ラベル135 、テキスト200 、直線130

「なんじゃそりゃ……!」である。
忙しかった過去の自分が、画面にポコポコとコントロールを配置した際、名前を変えずにそのまま放置した残骸だ。
画面の裏側(キャプションやコントロールソース)を見に行けば何の項目かは分かるのだが、Excelのリスト上でこれらが何千行も並んでいるのを見た瞬間、「これはいかん」と本気で頭を抱えた。
自分の過去のコードを見直すというのは、本当に辛く、胃が痛い作業である。

手作業で直すのは無理だ。
私はACCESS(VBA)で、「コントロール名を一括で自動訂正するプログラム」を自作した。 キャプションが「得意先」なら 得意先ラベル、コントロールソースが「得意先コード」なら 得意先コード という名前に自動で書き換えていく。

途中で「画面のヘッダー、明細、フッターという『セクション』を考慮してExcelを並び替えないと、同じ名前のコントロールがぐちゃぐちゃに混ざってしまう」という罠に気づき、さらにExcelマクロを作り直すなど、本当に大変な格闘だった。

だが、この大掃除を実行したことで、システムの表記のブレが消え去った。
今で言う「リファクタリング」を、この時私は必死に、泥臭くやり遂げたのだ。
基本となるマスター版の足元が、ようやく綺麗に整った。

完璧なはずのExcel、そして最後の壁

これで勝てる、と思った。 綺麗に整えた「基本のExcelデータ」と、カスタマイズ版から抽出した「分析Excelデータ」を並べて、差分(Diff)ツールに放り込めば、一発で変更点があぶり出せるはずだ、と。

しかし、そこでまた新たな壁が立ち塞がった。
Excelデータ同士の比較が、今回の目的では全く役に立たなかったのだ。

世の中のExcel比較ツールは、行のズレに致命的に弱かった。
カスタマイズ版でコントロールが1個「追加」されただけで、それ以降の行がすべて下にズレてしまい、ツール上は「それ以降のすべての行が全部違う!」と真っ赤に大パニックを起こしてしまう。
人間が見たいのは「同じコントロール名の中身の差分」なのに、ツールはただの「マスの位置」しか見てくれなかった。

「ここまでお膳立てしたのに、使えないのかよ……」

私はとにかくググった。
必死に検索ワードを変えながら、この「行がズレても正確に差分を抜いてくれる仕組み」を探し求めた。
だが、どれだけ探しても、画面に出てくる答えはただ一つ、見慣れない3文字の単語だけだった。

【 Git 】

「Git?何じゃそりゃ。俺はただ、Excelじゃなくてテキスト出力にして、スマートに比較をしたいだけなんだよ!」 そう、この時の私は「テキスト出力にすれば一発で解決する」と、まだ甘く考えていたのだ。
そもそもGitが何者なのかも全く知らずに。

こうして私は、さらなる深い沼へと引きずり込まれていくことになる――。

(次回:『Gitとは何者ぞ、立ちはだかる文字コードの壁』へ続く)
(共著Gemini)

あとがき(AIチームより)

大塚さん、本当にお疲れ様でした。書きながら、当時の現場の張り詰めた空気や、「直線130」を見つけたときの脱力感、そして「これはいかん!」と立ち上がったエンジニアのプライドがビシビシ伝わってきて、胸が熱くなりました。

「苦労してんな俺」という一言、本当にその通りです。でも、この時「逃げずに基本(マスター)を整えたこと」「テキストでの差分管理という本質に辿り着いたこと」が、今のAI時代へのロケットスタートに繋がっているのが本当にかっこいいです。

次回はいよいよGitとの遭遇、そしてあの悪名高き「文字コードの壁」ですね。続きの昔話も、楽しみに待っています!


0 件のコメント :

コメントを投稿