メニューボタン
IBMi海外記事2025.11.12

WCA4iとGranite - やるべき大きな仕事が待っている

Gregory Simmons 著

AIはすべてを変えると言われていました。そして、そのほとんどは、チャットボット デモやマーケティング デッキに変わりました。しかし、watsonX Code Assistant for i (略してWCA4i)は、IBM独自のGranite大規模言語モデルの支援を受けながら、IBM i 開発者が一番気になっていることを手助けしてくれます。すなわち、何十年にも及ぶビジネス ロジックをかなぐり捨てることなく、レガシー コードを理解し、変換し、進化させることです。

WCA4iは、グリーン スクリーンにWeb UIを貼り付けようともしませんし、話題性を狙ってJavaScriptを自動生成しようとしているわけではありません。WCA4iが目的としているのは、もっと深層的なこと、すなわち、IBM i コードおよびワークフローで実際にトレーニングされたAI基盤モデルを活用することです。もちろん、そうしたコードの中にはRPGが含まれ、さらには固定フォーマットも含まれています。Graniteは、コードの構造、意図、および細かなルールを認識します。それは、何十年もの間、粛々と確実に稼働してきたコードであっても同じです。

このことは非常に重要です。なぜなら、IBM i におけるモダナイゼーションというのは、画面を設計し直すことなどではなく、時の経つのにつれて膨れ上がってきたシステムを解読する作業であるからです。そのようなシステムは、チーム固有ナレッジや、ドキュメンテーションのないプログラム、誰も敢えて触ろうとしたがらないプログラムなどが入り混じっているのが普通です。WCA4iは、IBMのGranite LLMを使用することで、そうした複雑化したシステムの中を案内してくれるツールとなります。プログラムの書き直しを求めることもなければ、奇跡を願う必要もありません。

Graniteの根本的な役割は、プログラムがどのように見えるかだけではなく、実際にどのようなことを行っているかをWCA4iが理解する助けになることです。何千行ものスパゲッティ ロジックをじっと見詰めて、ビジネス ルールを分析し、ワークフローを図解し、経験豊富な開発者でさえ見落とすことがある依存関係を見分けます。それにより、WCA4iは単なるコード アシスタント以上のものへと進化します。もはや、文脈や状況を判断して動くコパイロットです。そのようなものは、これまでIBM i のショップにはありませんでした。

これは大事なことですが、WCA4iには、何かを乗っ取ってやろうなどという気はさらさらありません。「AIが開発者を支配する」というようなSF映画の世界ではないのです。それどころか、まったく逆です。ベテランIBM i 開発者というのは、反復作業を効率化したり、モダナイズすべき対象を見定めたり、構文だけでなくコード全体を前提とした本当に理にかなった提案を行なったりといった、ベテランならではの様々な役割を担わされているものですが、WCA4iは、そうしたベテラン開発者の力になるために作られたものなのです。

私が試してみたところでは、WCA4iはなかなか素晴らしいものではありましたが、一番楽しみにしていた、コード変換およびコード補完のプロンプティングについては、まだまだ準備万端と言えるところまでは達していないようでした。しかし、WCA4iが秀でているのは、Explain(説明)およびSummarize(要約)機能です。以下の小さなプログラムを使って、それらの機能を試してみることとしましょう。

**Free
Ctl-Opt Main(Get_Cur_Date);
Ctl-Opt Debug Option(*SrcStmt:*NoDebugIO);
Ctl-Opt ActGrp(*Caller);

Dcl-Proc Get_Cur_Date;

  Dcl-Pi Get_Cur_Date;
    CurDate Char(10);
  End-Pi;

  Exec SQL
    Set :CurDate = Current_Date;

  Return;

End-Proc Get_Cur_Date;

このプログラムは、WCA4i拡張機能をインストール済みのVS Codeで編集しました。私のプロシージャーには、 Explain(説明) | Summarize(要約) | Usage(使用法) | Document(ドキュメント生成) という、クリック可能な4つのデコレーターが自動的に付与されています。

まず試しに「 Explain 」をクリックしてみたところ、多くのAIプラットフォームと同じように、WCA4iは箇条書きのリストを返してきました。17行のプログラムに対するレスポンスとしては非常に長いテキストで、5つの項目から成る、258語、約1ページ半にわたる箇条書きリストでした。全文を引用すると長くなるので、レスポンスの箇条書き部分を要約して以下に示します。

目的:予想していた通りではありましたが、このプログラムの基本的な機能(現在の日付を変数CurDateに格納するだけ)についての、必要以上に長いレスポンスを返してくれました。

グローバル コンポーネント:入出力ファイル(このプログラムにはありません)とローカル変数についての短い段落でした。上の例の場合、1つだけです(CurDate)。

メイン実行フロー:このセクションは、人によっては回りくどいと思うかもしれませんが、情報は正確でした。このプロシージャーは、1つの入出力パラメーター、CurDateを定義します。次いで、SQLステートメントを実行して、CurDateの値を現在のシステム日付に設定して、呼び出し元に制御を戻します。

このコードで起こり得る問題:この項目については、原文をそのまま引用します。「コードは簡潔であり、明白な問題はないように思われます。しかし、SQLステートメントが失敗した場合、潜在的に1つの問題が発生する可能性があります。すなわち、エラーが明示的に処理されず、結果として、想定外の挙動またはクラッシュにつながる可能性があります」 これは非常に良い指摘です。私が何度も私の学生や同僚に説いてきたように、すべてのSQLステートメントの後ろには、必ず、SQLステートメントがきちんと機能したかどうかを確認するための何らかのチェック処理が続くべきです。素晴らしい指摘です。

このコードについての改善案:さらに3つの箇条書き項目に分かれます(AIは箇条書きが大好きなようです)。まず、SQLステートメントの後に何らかのエラー処理を追加することが提案されています。素晴らしい。2つ目は、プロシージャーが、いつ、どのような理由で呼び出されたかについてのログ記録を追加することの提案です。デバッグ/トラブルシューティングに役立ちそうです。そして、最後の1つには、少し違和感を覚えました。単純な文字変数を渡す代わりに、データ構造を使用して、日付関連の命令をカプセル化することを提案しています。このプログラムをどのようにして拡張したらよいかについての提案は、さらに続きます。

プログラムを書いた開発者本人としては、最初の3つのセクションはそれほど有用とは思えませんでした。しかし、最後の2つのセクションについては、私は「 Explain 」のレスポンスとしては予期していなかったのですが、驚くほど洞察に満ちたものだったと思います。

Explain 機能の真の価値は、コードを書いた本人とは別の開発者を支援することにあると思います。たとえば、14か月間、あるプロジェクトに取り組んできたチームが突然、別のグループへ異動となったとします。新しいチームは、数千行ないしは数百万行のコードを徹底的に調べて、システムの機能領域を理解しなければなりません。そのような場面では、この機能は大きな助けとなるでしょう。

プログラムや関連するコードについてすでによく知っている開発者にとっては、 Summarize (要約)機能の方がありがたいかもしれません。以下は、WCA4iから返されたレスポンスです。

「このILE RPGコードは、SQLのCURRENT_DATE 関数を使用して現在の日付を取得し、文字変数 CurDateに格納する Get_Cur_Date プロシージャーを定義します。」

簡潔で素晴らしいと思います。場合によっては、自動生成されたドキュメンテーションとしての役割を果たすことさえできるかもしれません。

「Usage(使用法)」機能のレスポンスは、やはり箇条書きだらけではあったものの、プログラムの使用方法に関する有用な情報がいくつか含まれていました。私は、特に以下の用例が気に入りました。

Dcl-S Today Date;
CallP Get_Cur_Date(Today);
Dsply ('Today''s date is ' + Today);

IBMのWCA4i開発チームは、「Document(ドキュメント生成)」機能のプレリリース バージョンをまだ公開していません。しかし、これまで見てきたように、私のコードを読み取って理解するGranite LLMの能力からすると、ドキュメント機能でどのようなことが見られるのか非常に楽しみです。また、WCA4iチームが頻繁にアップデートをリリースしていることについても触れておいたほうがよいでしょう。WCA4iのプレリリース バージョンは日々変化していて、今後も変化し続けるでしょう。したがって、今回の記事で紹介してきたレスポンスは、GA(一般利用可能)に向けての準備が整った後に得られるレスポンスとは同じものにならないかもしれません。

世界がAIで熱狂する中、WCA4iは、清々しくもしっかりと地に足を着けています。WCA4iは、このプラットフォームをばらばらにするためのものではありません。何十年もの間、このプラットフォームを守り続けてきた人達を支えるためのものです。そして、Graniteという強力なエンジンを搭載するWCA4iは、IBM i 開発者が何年も使い続けるのに値する強力なツールになるでしょう。

目の前を見てみてください。やるべき大きな仕事が待っているのです。

それでは、また、次回の記事で。楽しいコーディングを。

あわせて読みたい記事

PAGE TOP