メニューボタン
IBMiコラム2026.02.25

IBM i のウンチクを語ろう:その116
- IBM Bobベータ版に触ってみた -1 -

安井 賢克 著

皆さん、こんにちは。昨年12月の当コラム「Code AssistantからProject Bobへ」にて説明しましたとおり、生成AIによるソフトウェア開発のパートナーProject Bob、その後名称を改めIBM Bobが、近い将来に正式発表される見込みです。具体的なタイミングはわかりませんが、このコラムが公開される頃にはデビューしているかもしれませんし、もう少し待つことになるかもしれません。

これに先立ってIBMは昨年末よりIBM BobのTech Preview、直訳するならば技術的チラ見せ、言わばベータ・プログラムへの参加希望者を募集しており、申込者数は全世界で1,000を数えたと聞いています。私自身もwatsonx Code Assistant for i (以下WCA4i)のベータ・プログラムに参加したことでもあったので(体験記はこちら)、これの後継版ならば是非試さねばとばかりに早期に申込みを済ませたところ、12月半ばに運良くその順番が巡ってまいりました。今回はベータ版の利用体験を皆様と共有することで、IBM Bobの優れている点、課題になるかもしれない点を、インストール、ソース・プログラムへのアクセス、アプリケーションのそれぞれについて書き進めてまいります。

念のために留意いただきたいのは、機能や品質は私が試した時点のものであり、正式版では大きく改善されている可能性がある、という点です。後で述べますが、ベータ版で課題と感じた部分は解消されているかもしれません。また、私自身はこれまでにIBM i のプログラミングや運用を生業とした経験が全くありませんので、スキルと経験の無い開発者がIBM Bobというパートナーを得たらどこまでできるようになるのか、という視点から(暖かい目で)読み進めていただけるとありがたく思います。

インストール編

IBM Bobのインストール作業は順調で、直ちにプログラム解析や生成などの作業に進むことができたのか、と問われれたら、残念ながら「私に関してはそうではなかった」が答えです。ドキュメントの整備が不十分だった可能性もありますが、回避する手段は見つけましたし、不具合は直接開発部門に報告したので、正式版では解消されるものと期待しています。

まずは前提を確認しておきましょう。使用する端末、私の場合はWindows PCです、はSSHによってIBM i に既に接続できているものとします。この部分を除けばIBM i における事前作業は不要です。ベータ・プログラムに申し込み、利用条件に同意すると、Bob-IDEとBob-Shellの2つのモジュールをインストールするよう求められると共に、API Keyがメールで送られてきます。API Keyとはユーザーを認証するためのパスワードのようなものです。

Bob-IDEはマイクロソフト社が開発しオープンソース化したVS Codeのフォーク、すなわちIBMが手を加えた独自の派生モジュールです。WCA4iではVS Codeを前提に、WCA4i用のアドオン・モジュールを追加インストールする必要がありましたが、Bob-IDEでは統合されているので作業は少し楽になります。その後IBM i と連動させるため、Code for IBM i などのVS Code用アドオン・モジュール類を、Bob-IDEに追加でインストールする必要があります。これらのダウンロードからインストールまでは極めて順調でした。Code for IBM i のインストールについてはQiita上の文書が参考になると思います。

少々苦戦したのはBob-Shellです。npmコマンドによってNode.jsパッケージをインストールしなさい、としかメール上のガイドに示されていません。npmはJavaScriptのパッケージ管理ツールなので、前提条件として明示されていませんが、Node.js自体を事前にインストールしておく必要があるのかもしれません。そのインストール作業を終え、Windowsに標準装備されているPowerShellコマンドプロンプト画面にて指定されたコマンドを投入したところ、セキュリティ・エラーを起こしてしまいました。

スクリプトの実行が無効だと言っていますので、これを有効化できれば良いのでしょう。マイクロソフト社のサイトなどを参照し、どうやら以下のSet-ExecutionPolicyコマンドで解決できるらしいことを突き止めました。「セキュリティ上の危険にさらされる可能性」という警告がありますが、ここは心を強く持って「Y」を返します。

Set-ExecutionPolicy RemoteSigned -Scope Process

その後あらためて上記npmコマンドを投じたところ、作業は無事に完了しました。ただわからなかったのは、Set-ExecutionPolicyコマンドの実行が必要ならば、その旨ガイドにあっても良いはずです。

もしかしたらnpmコマンドを投じるプロンプトが正しくなかったのかもしれません。違いを良く理解していないのですが、Windows標準ツールだけでも「PowerShell(x86)」とか「コマンド プロンプト」など計4種類もあります。さらにインストール済みだったNode.jsをたまたま眺めていたら、「Node.js command prompt」が利用可能になっているのを見つけました。Set-ExecutionPolicyが有効化されていない状態でこのコマンドプロンプトからnpmコマンドを投じたら、セキュリティの問題にも引っ掛からずに作業を完了できました。もしかしたらこれが正当な手順なのかもしれません、いずれにせよインストール・ガイドに明示してもらいたいものです。

Bobを利用する以上は、テストに使えるRPGアプリケーションをあらかじめIBM i 上に用意しておいた方が良いでしょう。必要になるのはRPGソース・プログラムだけでなく、関連するデータベースとかディスプレイ・ファイルなどを含んだ一式です。幸いにもアイ・ラーニング社がその学習教材EOL/400を公開してくれていますので、私はこれを活用しました。

ソース・プログラムへのアクセス編

この部分で少々戸惑う方が出るのではないか、というのが正直な感想です。Bob-IDEではIBM i のライブラリ・ファイルシステム上にあるソース・プログラムに直接アクセスできないらしい、といった噂を事前に聞いていたので、実際にはどうなのか確認してみようという思いがありました。実際のところは、アクセスはできるけれどもちょっと面倒だった、といったところです。

アプリケーションの準備が整い、Windows PC上のBob-IDEと、IBM i との間の接続が確立されたら、早速Bob君の力を試してみたいと思います。どれでも構わないのですが、まずは学習教材のQEOLライブラリの中にある、RPGⅢプログラムAOP140の説明を求めてみます。プログラムを読み込む必要があるので、チャット・ウィンドウ下のモードにおいて「Code」を選択します。念のためにBob-IDEからアクセスできることを確認するためエディタ上にAOP140を表示した状態で、チャット・インターフェースを通じて以下のやり取りを行いました。

QEOLライブラリの中にあるRPGⅢプログラムAOP140を説明してください。
Bob RPGプログラムAOP140.RPGの内容を確認して説明いたします。
IBM Bobはワークスペース外のこのファイルを読みたい:
C:\QEOL\QEOLRPG\AOP140.RPG

ファイルへのパスを見てみると、Bob-IDEにて既にアクセスしているにも関わらず、Bobは対象となるRPGⅢソースコードはPC上にあると想定していることがわかります。Bobが言うような上記フォルダ内にソースコードを置いておけば、事はスムーズに運ぶのでしょう。BobがサポートするのはIBM i だけではないことがその理由なのだと思いますが、ここは敢えて相手の思考に合わせることなく、「人間ファースト」(?)を貫いてプログラムの在処を示すことにします。

プログラムはSSH接続されたサーバーにあります。
ユーザー名<ユーザー名>でアクセスできます。
Bob SSH接続を試みます。リモートサーバー上のファイルにアクセスしてみます。
ssh <ユーザー名>@ "cat /QEOL/QEOLRPG/AOP140.RPG"

QEOLライブラリの中と伝えたはずなのですが、BobはIFSを基本に考えていながら、パス名を正しく設定できていません。明確にライブラリ・ファイルシステムと言う必要があるのでしょうか。チャット・ウィンドウからその旨を伝えると、今度はIFSフルパスの形式でプログラムの在処を正しく認識してくれるようになりました。

Bob IBM i システムのライブラリ・ファイルシステムからプログラムソースを取得します。
ssh <ユーザー名>@ "cat QSYS.LIB/QEOL.LIB/QEOLRPG.FILE
/AOP140.MBR"

このコマンドに同意すると、読み出した結果をチャット・ウィンドウに表示してくれるのですが、文字化けしていて判読不能でした。ソースコードをEBCDICのまま無変換で読み出そうとしたようです。この問題はBobも認識したらしく、自ら解決策を考えて提示してくれます。

Bob ファイルがバイナリ形式で取得されてしまいました。
IBM i システムのソースファイルをテキスト形式で取得するために、別のコマンドを試します。
ssh <ユーザー名>@ "system 'CPYTOIMPF
FROMFILE(QEOL/QEOLRPG) TOMBR(*FIRST)
TOSTMF('\''/tmp/aop140.txt'\''') MBROPT(*REPLACE)
STMFCCSID(1208) RCDDLM(*CRLF)'" && ssh <ユーザー名>@ "cat /tmp/aop140.txt"

サーバー上でソースコードの文字コードを変換しながらIFSに一旦コピーしておいて、それを読み出そうという方針であるように思われます。Bobの柔軟性に感心したのと、仮にこのような方針で対処しようと思いついたところで、私は自力でこのように複雑なコマンドを書き上げることはできそうにありません。

Bobにこれを実行するよう促す前に、文字コードの違いが考慮されているのかが気になりました。上記コマンド内でコピー先に関する「STMFCCSID(1208)」の1208とは、UTF-8形式のユニコードを表す文字コード(CCSID)なのですが、そもそもソースコードのCCSIDが何なのかを認識しなければ正しくコード変換されないはずです。サーバーの構成を見ればわかることではあるので、余計なおせっかいかもしれませんが、念のためにBobに注意を促してみます。

サーバーのCCSIDは5035です
Bob サーバーのCCSIDが5035(日本語EBCDIC)であることがわかりました。
この情報を使って正しくファイルを取得します。
ssh <ユーザー名>@ "iconv -f IBM-5035 -t UTF-8
/QSYS.LIB/QEOL.LIB/QEOLRPG.FILE/AOP140.MBR 2>/dev/null | head -300"

このコマンドの実行を促すと、何故かファイルの内容が何も無かったとのコメントが返ってきました。後で気付いたのですが、iconvという文字コード変換コマンドがPC上に見つからなかったことが原因で、変換後ファイルを得られなかったのかもしれません。健気な(?)Bobは次の手段を考えますが、サーバー側のDSPPFMコマンドは対話処理用だったために結果を得ることができませんでした。そして更に次々と別の手段を考えます。実際にはBobが考えたコマンドを、実行前に都度承認する必要があるのですが、Bobの応答を連続的にご覧ください。対策を考えてダメだったら何度でも別の手段を考える、その間に恨み言ひとつ言わない、という姿勢は、なかなか人間には真似できそうにありません。

Bob

出力が空でした。IBM i のコマンドを使用してソースを表示する方法を試します。
ssh <ユーザー名>@ "system 'DSPPFM
FILE(QEOL/QEOLRPG) MBR(AOP140)' | head -500"

DSPPFMコマンドはインタラクティブなので、別の方法を試します。
DB2を使用してソースデータを取得します。
ssh <ユーザー名>@ "db2 \"SELECT CAST(SRCDTA AS
VARCHAR(100)) FROM QEOL.QEOLRPG WHERE SRCMBR='AOP140'
ORDER BY SRCSEQ, SRCDAT\" | head -500"

DB2へのアクセス権限がないようです。
IBM i のCLコマンドを使用してソースをストリームファイルにコピーしてから読み取ります。
ssh <ユーザー名>@ "system 'CPYTOSTMF
FROMMBR('\''/QSYS.LIB/QEOL.LIB/QEOLRPG.FILE/AOP140.MBR'\''')
TOSTMF('\''/tmp/aop140_src.txt'\''') STMFOPT(*REPLACE)
STMFCCSID(5035) ENDLINFMT(*LF)'" && ssh <ユーザー名>@ ス> "cat /tmp/aop140_src.txt"

コマンドのエスケープに問題がありました。シンプルな方法で試します。
ssh <ユーザー名>@ 'system "CPYTOSTMF
FROMMBR('\''/QSYS.LIB/QEOL.LIB/QEOLRPG.FILE/AOP140.MBR'\'')
TOSTMF('\''/tmp/aop140.txt'\'') STMFOPT(*REPLACE)
STMFCCSID(1208)"' && ssh <ユーザー名>@ "cat
/tmp/aop140.txt"

Systemコマンドのパスが正しくないようです。直接QSHコマンドを使用します。
ssh <ユーザー名>@ "/QOpenSys/usr/bin/system
'CPYTOSTMF
FROMMBR(\"/QSYS.LIB/QEOL.LIB/QEOLRPG.FILE/AOP140.MBR\")
TOSTMF(\"/tmp/aop140.txt\") STMFOPT(*REPLACE)
STMFCCSID(1208)' && cat /tmp/aop140.txt"


これでようやくチャット・ウィンドウにRPGⅢのソースコードが正しく表示されるようになりました。Bobも感動(?)しているのでしょうか。

Bob 素晴らしい!ソースコードが取得できました。
これでAOP140プログラムの詳細な説明ができます。

プログラムの保守・開発の入り口に辿り着くまでに、ここまで長引くとは想像していませんでした。Bob-IDEのエディタ部分にソースコードが表示されていることと、分析のためにソースコードを読み込むことは、連動していないと理解するべきなのでしょう。

効率良く作業を進めるためにも、この直観に反する動きは何とか解決して欲しいと感じました。BobはIBM i 専用ではないことは理解しているのですが、IBM i 特有のテクノロジーを理解するモードを備えてもらえると助かりますね。例えばオブジェクトの在処を指定するのに、伝統的なライブラリ・ファイルシステムのパス名を主に想定するけれども、IFSのパス名でも随時受け入れる、ソースコードにタグ付けされているCCSIDに応じて、適切に文字コードの変換を行う、などといった点を盛り込んでくれれば、大分使い勝手が向上すると思います。ただ一方で、不用意にプログラムを改変できないようにする安全策とも考えることができそうです。

一旦ここで区切りとし、次回はいよいよアプリケーションの分析と変換を試したいと思います。

ではまた

あわせて読みたい記事

サイト内全文検索

著者プロフィール

パワーシステム・エバンジェリスト

安井 賢克
やすい まさかつ

2017 年 11 月付けで、日本アイ・ビー・エム株式会社を経てベル・データ株式会社に入社。IBM 時代にエバンジェリストとして IBM i の優位性を社内外に訴求する活動を行う傍らで、大学非常勤講師や社会人大学院客員教授として、IT とビジネスの関わりを論じる講座を担当しました。ベル・データ入社後も継続しているエバンジェリスト活動が米国 IBM にも認められ、2021 年以降 IBM Champion の称号を得ています。

PAGE TOP