メインコンテンツへスキップ
見出し画像

AGI(汎用人工知能)到来の予感。SaaSの死。AIによる抽象化ブレークダウン式構造化プログラミング手法で自動プログラミングに挑戦を試みたのだが。

    #創作大賞2026 #ビジネス部門

    筆者が考案した「抽象化ブレークダウン式構造化プログラミング(COBOLベース)」手法を使って、AIで自動プログラミングに挑戦を試みた。・・のだが。
     
    ●BDFAの概要
     
    「抽象化ブレークダウン式構造化プログラミング(COBOLベース)」手法を「BDFA」手法と呼ぶことにする。BDFAとはBreaking down from abstractionの略である。抽象化ブレークダウンの概念は下図の要領である。抽象化を次第にブレークダウンしていくと、自然と具体化(最終コード)に近づいて行き、ボトムで細部コーディングが現れてきてプログラミング完了となる手法である。

    画像
    BDFA概念図

    ①   理解をしやすくするために、「簡易例題1 人事マスターの作成」
     
    ここに新しい合同会社、「三国志」を設立した4人の男がいる。劉備社長、関羽総務部長、張飛営業部長だ。あなたは孔明、IT部長である。社長から人事マスターを作るよう指示があったので、早速プログラミングにとりかかった。
    簡単なプログラム仕様は下図のとおり。4人ぐらいのデータなら手作業でできるが、将来の急速な会社発展(社員1万人超)を考えて、バッチ(一括)処理を行う。
     
    処理内容
    ・TR-F(トランザクション・ファイル)のレコード項目は(社員ID、名前、所属、役職)。
    ・JM-F(人事マスタ・ファイル)のレコード項目は(社員ID、名前、所属、役職)。
    ・TR-Fを読んでJM-Fを出力する。
    ・TR-Fの読み込みが終了したら、プログラムを終了する。

    画像
    簡易例題1 人事マスタの作成 プログラム仕様図

    ②   BDFA手順1  上位抽象化パターンの適用
     
    まず機械的に上位抽象化パターンを適用する。次に、前処理、主処理、後処理のプログラム構造を解析するのだが、その時に、着目するのが、
    ・制御フラグ:プログラム全体のフローを制御するフラグ
    ・処理フラグ:業務処理の判別をするフラグ

    画像
    上位抽象化パターン

    ③   BDFA手順2  制御フラグの抽出設定とデシジョン・テーブル解析
     
    プログラムはどの言語であれ、フローの骨格は3つの処理でできている。順次処理、繰返し処理(COBOLならPERFORM文、Pythonならwhile文)、分岐処理(COBOLならIF、EVALUATE文、Pythonならif文)である。
     
    ここでは制御フラグの分岐処理に着目する。
    プログラムの終了は、トランザクション・ファイル(TR-F)が終了になった時点で、制御フラグ:TR-ENDに“ON”をセットする。そのため、
     
    前処理(MAE-S:上位抽象化コーディング)内でTR-ENDに“OFF”をセットする。そしてTR入力処理(TR-IN:2番目の中位抽象化コーディング)を1回行う。
     
    次の主処理(SHU-S)では、TR-END=“OFF”であれば、トランザクション・レコード(TR-R)を人事マスタ(JM-R)に移送し、JM-Rを書き込む。そして次のTR-Rを読み込む。ブレークダウン対象(中位抽象化)としてJM出力処理(JM―OUT:2次の抽象化コーディング)、TR入力処理(TR-IN)を設定する。
    制御フラグ:TR-END=“OFF”の間は、主処理を繰り返す。
     
    TR-END=“ON”になれば、後処理に移る。
     
    以上の解析をデシジョン・テーブル(DT)を使って整理する。
     
    ここで、具体的にコーディングできるものはコード化する。
     
    例えば、前処理なら
    OPEN INPUT TR-F OUTPUT JM-F(入出力ファイルのオープン)
    MOVE “OFF” TO TR-END(制御フラグの初期セット)
    PERFORM TR-IN (次のブレークダウン対象)
     
    例えば、主処理なら
    PERFORM JM-OUT (次のブレークダウン対象)
    PERFORM TR-IN (次のブレークダウン対象)
     
    主処理が終了したら、後処理となる。
    CLOSE TR-F JM-F
     
    ここでデシジョン・テーブル(DT)の点検を行うと、前処理でTR-ENDに“OFF”をセットしているので、下図の「DT」の「制御フラグの判定表」の「3」、すなわち制御フラグが“OFF”でもなく、“ON”でもない判定条件は余計であることが分かる。従って「フラグセットエラー表示処理」は不要として、コーディングの際に削除する。

    画像
    DT点検によるプログラム改善

    ④   BDFA手順3  処理フラグの抽出設定とデシジョン・テーブル解析
     
    次は業務処理フローを判別するために、処理フラグの抽出設定とDT解析を行うのだが、今回の簡易例題1では、制御フラグであるTR-ENDが処理フラグにもなっている(”OFF”なら主処理)ので、DT解析は不要である。
     
    残るは、抽象化のままの、JM出力処理(JM-OUT)とTR入力処理(TR-IN)のブレークダウンである。
     
    ・JM-OUT
    TR-R(トランザクション・レコード)項目 → JM-R(人事マスタ・レコード)項目.
    JM-Rの書き込み(WRITE)
     
    ・TR-IN
    TR-F(トランザクション・ファイル)を読み込み(READ)、読み終わりなら(AT ENDなら)、制御フラグ:TR―END=“ON”にする。
     
    結果をみると、ブレークダウンする抽象化コードがなくなり、ボトム・コードに達したので、コーディング終了となる。
    プログラム完了である。

    画像
    ボトムコードに達したのでプログラミング終了

    ⑤   処理フラグとDT解析について。追加説明。
     
    業務処理の構造化と抽象化を行う処理フラグについて、上記の例題では説明できなかったので補足しよう。
     
    合同会社「三国志」はますます発展し、本社を蜀CITYに移した。社員も当然大幅に増えた。趙雲開発部長はその目覚ましい活躍により開発本部長に昇格した。また新しく外部から社長室付きの黄忠顧問を招来した。重大な命令違反があった馬謖IT部長が懲戒免職で社を去った。他にも多くの社員の人事異動があった。そこで孔明IT・CIO(最高情報責任者)は、新しく昇格した姜維IT部長に人事異動プログラムの開発を命じた。驚いたことに馬謖IT部長は今のいままで人事異動プログラムを開発していなかったのだ!そのことも懲戒免職の理由の1つだった。
     
    人事異動プログラムの概要
     
    これまでのトランザクション・レコードの先頭に、U(アップデート:更新)、I(インサート:挿入)、D(デリート:削除)の異動コード項目を加え、異動TRと呼ぶことにする。この異動コードが業務処理の分岐処理を制御する処理フラグになる。
    異動TRを読み込み、TRの異動コードと社員IDに応じた異動処理を人事マスタに行う。
    異動TRがエンドになるとプログラム終了。
     
    プログラムのスタート・コーディングは、上記②のテンプレート化した上位抽象化コーディング
    MAE-S
    SHU-S
    ATO-S
    でOK。プログラム全体の制御フラグ、TR―END=“ON”になれば、後処理に移ればいい。

    画像
    簡易例題2 人事異動処理 プログラム仕様図

    ⑥   再度、BDFA手順3  処理フラグの抽出設定とデシジョン・テーブル解析。
     
    TR-Fがエンドになったらプログラム終了である。プログラム全体のフローを制御するフラグはTR-ENDとなる。これについての制御とDTについては、上記で説明しているので割愛する。
     
    さて業務処理の構造区分と制御を左右する処理フラグは、下図のDT解析から、TRの異動CD(U、I、D)と社員IDである。DTからフローチャートに展開すると下図の主処理となる。

    画像
    業務処理を判別分岐する改善前DTとフローチャート

    もちろんこのままフローチャートからコーディングできるが、DTを点検して、改善することができる。
     
    ⑦   BDFA手順3-1  デシジョン・テーブルの改善解析。
     
    改善後DTは下図のとおり。見ての通りDTからコーディングも可能で、抽象化にも役に立つツールだ。DT条件の中の「社員IDがマッチ」等の記述は、直接コーディングにつながらずブレークダウンが必要だが、処理構造の区分・分岐を分かりやすくするために敢えてそうした。いずれにしてもこのDTはコーディングと等価であり、各言語への自動コード生成が可能だ。
     
    フローチャートもいいツールだが、DTの良さは情報圧縮された一覧性と判定・分岐の可読性に優れている点である。

    画像
    改善前DTと改善後DTの比較

    以上が、BDFA手法の概略説明である。
     
    ⑧   AI(Notebook.LM)にBDFA手法を理解させ自動コーディングに挑戦。その前に問題がある。
     
    <専用AIにCOBOLの知識を勉強させるには?>
     
    Notebook.LM(個人AIアシスタント)を専用AIと仮に呼ぶことにする。説明によれば、専用AIは与えられたデータセットに基づいてクローズドなAI処理を行うようだ。そうするとBDFA手法の説明(上記①〜⑦)だけを読み込ませても、COBOL文法の素養がないかもしれない。そうすると満足のいく自動COBOLコーディングは難しいと予想される。専用AIにCOBOL知識も教え込む必要がある。
     
    そこで著作権フリーで無料のCOBOL文法のサイトを探したのだが見つからなかった。困った。どうしよう?
    アイデアが閃いた!汎用AIにいくつかの例題を与え、COBOLコーディングをさせ、そのデータセットを蓄積し、その蓄積データと一緒に上記のBDFA手法の説明(上記①〜⑦)も読み込ませるのだ。
     
    Geminiを呼び出して訊いた。「あなたはCOBOLのコーディングができるか?」するとGeminiが答えた。
    「簡単!簡単!何でもお申し付けください」と自信満々の回答が返って来た。
     
    現時点(2026.4.13)のGeminiは「3.1」。Google史上最高の推論能力、高いマルチモーダル理解(画像・動画・音声・コードを統合的に理解)、エージェント能力(自律的ワークフローなど)の強化、思考レベルを開発者が制御可能、超巨大コンテキスト(max百万トークン)の一括処理とレベルアップしている。2026年1〜4月にかけて最新バージョンがリリースされた優れものだ。
     
    ⑨   Geminiに簡易例題I(人事マスタ作成)を与え、自動コーディングをさせてみた。
     
    生成結果は次の通り。(可読一覧性を強調するため、PROSEDURE.division以外のdivisionは割愛)
     
    PROCEDURE division.
    * メインルーチン
    MAIN-RTN.
    PERFORM INITIALIZE-RTN.
    PERFORM PROCESS-RTN UNTIL EOF-YES.
    PERFORM TERMINATE-RTN.
    STOP RUN.
     
    * 初期処理
    INITIALIZE-RTN.
    OPEN INPUT TR-F
    OUTPUT JM-F.
    PERFORM READ-RTN.
     
    * 主処理
    PROCESS-RTN.
    * TR-Fの内容をJM-Fへ転記
    MOVE TR-REC TO JM-REC.
    WRITE JM-REC.
    PERFORM READ-RTN.
     
    * 読込処理
    READ-RTN.
    READ TR-F
    AT END SET EOF-YES TO TRUE
    END-READ.
     
    * 終了処理
    TERMINATE-RTN.
    CLOSE TR-F
    JM-F.
    DISPLAY "処理が正常に終了しました。".
     
    <そして小憎らしいほどの自信満々のAIの解説が、これ>
     
    「プログラムの解説

    1. ENVIRONMENT DIVISION: 物理ファイル名(TRF.DAT、JMF.DAT)とプログラム内でのファイル名(TR-F、JM-F)を紐づけています。ここでは扱いやすいようにLINE SEQUENTIAL(テキスト形式)としています。

    2. DATA DIVISION: ご指定いただいた4項目(社員ID、名前、所属、役職)を定義しました。

    ・MOVE TR-REC TO JM-REC という命令を使えるよう、項目の桁数と並びを統一しています。これにより1項目ずつ代入する手間を省いています。

    3.PROCEDURE DIVISION: COBOLの王道である「初期処理・主処理・終了処理」の3段構成です。
    ・先行読込: 最初に1件読んでからループに入ることで、ファイルが空だった場合などのエラーを防いでいます。
    ・88レベル項目: EOF-YES などの条件名を使うことで、コードの可読性を高めています。

    これで、TR-Fを全て読み込み終わると自動的にクローズ処理が行われ、プログラムが終了します。何か修正や追加のロジック(特定の部署だけ抽出したい、など)が必要になれば、いつでもお申し付けください。」

    ⑩  評価:Geminiは優秀なCOBOLプログラマー!「SaaSの死」が迫っている!
     
    Geminiのコードは見事に構造化プログラミングを理解していることを示している!
    プログラマー、SEとして幾多のコンピュータ言語やシステム開発手法の習得に、青春の日々を費やした私の努力は何だったのか!
     
    ⑪   Geminiに簡易例題2(人事マスタの更新処理:TR-F、JM-R両方が昇順ソート済)を与え、自動コーディングをさせてみた。
     
    Geminiの生成したコードは省略する。非常に長いコード(文字数にして3千〜4千字を超える)なので割愛する。Geminiの冒頭の応答部分とコード生成後の自信に満ちたGeminiの解説を以下に紹介する。
     
    ・Geminiの冒頭の応答部分
    「承知いたしました。ご提示いただいた条件に基づき、標準的なマッチング更新処理(一対一のマッチング)を行うCOBOLプログラムを生成します。
    このプログラムでは、順編成ファイルの更新処理の定石である「新旧マスタ作成方式」を採用しています。TR-F(異動ファイル)の処理が完了した時点で終了するという条件に則り、簡潔かつ堅牢なロジックで記述します。
    COBOLプログラム:社員マスタ更新処理・・・→生成コードへ」
     
    ・Geminiの解説等
    「プログラムの解説とポイント

    1. マッチング・アルゴリズム:

    ・TR-ID と JM-ID を比較し、EVALUATE 文で分岐させています。
    ・一致 (=): 更新(U)なら書き換え出力、削除(D)ならスキップします。
    ・TR小 (<): マスタに存在しないIDです。追加(I)なら出力し、それ以外(U/D)は「対象不在」のエラーとなります。
    ・JM小 (>): TRに該当データがないマスタレコードです。そのまま新マスタへコピーします。

    2.終端制御 (HIGH-VALUES):

    ・READ 文の AT END で ID 項目に HIGH-VALUES(全ビット1の最大値)を代入しています。これにより、片方のファイルが先に終わっても、もう片方のファイルとの大小比較が正しく継続され、ロジックが破綻しません。

    3.条件への準拠:

    ・「TR-Fの読み込みが終了したら、プログラムを終了する」という条件に基づき、PERFORM ... UNTIL TR-EOF でメインループを制御しています。

    4.エラー処理:

    ・条件に該当しない場合(例:マッチングしているのに新規登録「I」が来た、あるいはマッチングしていないのに更新「U」が来たなど)は、DISPLAY 文でエラー内容を出力するように設計しています。

    この構造は、レガシーシステムから現代のバッチ処理まで幅広く使われる、非常に信頼性の高いパターンです」
     
    ⑫   Geminiに簡易例題3(人事マスタの更新処理:JM-Rは索引ファイル)を与え、自動コーディングをさせてみた。
     
    上記⑩と同様、Geminiの冒頭の応答部分とコード生成後の自信に満ちたGeminiの解説を以下に紹介する。
     
    ・冒頭部分
    「承知いたしました。人事マスタ(JM-F)を異動トランザクション(TR-F)で更新する、典型的かつ堅牢なCOBOLプログラムを作成します。
    今回は、社員IDをキーとして直接参照できるよう、人事マスタを**索引ファイル(INDEXED)**として定義した構成にしています。これにより、効率的なマッチング処理が可能です」
     
    ・解説
    「プログラムの解説
    このプログラムは、業務システムで最も多用される**「マスタ更新ロジック」**をベースにしています。
    1. ファイル構成
    ・TR-F (トランザクション): 順次読み込みを行い、全てのレコードを処理対象とします。
    ・JM-F (マスタ): ORGANIZATION IS INDEXED(索引ファイル)として定義しました。これにより、READ JM-F を実行するだけで、社員IDが一致するレコードを瞬時に検索できます。
    2. マッチング判定(READ ... INVALID KEY)
    INVALID KEY(不一致)の場合:
    ・更新CDが "I"(新規)であれば WRITE で追加します。
    ・それ以外(UやD)は「存在しないレコードを操作しようとした」ため、エラーを表示します。
    NOT INVALID KEY(一致)の場合:
    ・更新CDが "U"(更新)であれば、所属と役職を移送して REWRITE します。
    ・更新CDが "D"(削除)であれば、DELETE を実行します。
    もしここで "I" が来た場合は「既に存在するIDを登録しようとした」重複エラーとして処理します。
    3. エラー処理
    条件に該当しないケース(例:マスタにないのに削除、マスタにあるのに新規登録など)は、DISPLAY 文で標準出力にエラー内容を書き出すようにしています。
    この構造であれば、データ量が増えても索引を利用するため高速に動作します。実務で使う場合は、各処理の後に JM-STATUS(ファイル状態)をチェックして、ファイル破壊などの致命的なエラーをハンドリングするのがプロの作法となります」
     
    ⑬   Geminiに脱帽!私のBDFA手法も必要がなくなった。AGIの到来が近づいているのでは。

    Geminiに例題を与え自動コーディングさせてみて、その結果を蓄積してNotebook.LMに読み込ませ、筆者が考案のBDFA手法でAI自動コーディングを試みようとしたが、GeminiのCOBOLコード生成を目の当たりにして、筆者は当初の試みをストップし考え込んでしまった。

    Geminiは1,2秒でコードを生成してしまった!しかも洗練され構造化されたコードだ。人間のヘタな工夫・手法も必要なくなった。彼(Gemini)の解説を熟読し、「非常に信頼性の高いパターンです」、「プロの作法です」と言った回答から判断して、彼は膨大なCOBOL資産を「把握」していてかつ「理解」しているのではないかと感じ、底知れぬAIの進化に呆然としてしまった。AGI(汎用人工知能)が到来するのもそう遠くないのではと思う。

    画像
    超優秀なAIプログラマー。人間は不要。AI生成画像

    ①   結論:人間は業務処理要領を記したプログラム仕様をAIに渡せば、自動でコーディングしてくれる。プログラミング言語を人間が習得する必要がなくなった。

    筆者が考案したBDFA手法も無用のものとなってしまった。抽象化→具体化のブレークダウンも必要はない。使えるのはDT(デシジョン・テーブル)だけだ。DTで分析してプログラム仕様を作成してAIに渡せば自動でコードを生成してくれる。プログラミング言語は数百種類以上あると言われている。まだ試してはいないが、おそらくGeminiは主要なプログラミング言語を「習得」しているのではないかと思う。
     
    Claude(アンソロピック社製AI)も何種類かのプログラミング言語を自動コーディングできるらしい。公式には自動コーディングできるプログラミング言語数を発表していないが、Python、JavaScript、Java、TypeScript、HTML/CSSなどの主要言語は網羅していると言われている。
     
    人間はもうプログラミング言語を習得する必要はなくなった。人間は処理すべき業務、解決すべき問題などを認識し、AIと相談しながら、AIに処理させればいい。今我々人間はAIと共存する世界に生きている。

    #創作大賞2026 #ビジネス部門


     
     
    スタートレック、マリリン・モンロー、映画、ゲーム、歴史、原子力、・・ 宇宙の森羅万象を愛する、それが私、八木メッシです。よろしく!

    あなたへのおすすめ