はじめに
最近「バイブコーディング」という言葉をよく見かけるようになりました。"vibe"(雰囲気)でコードを書く——つまり細かい実装はAIに任せて、人間は「こんな感じで」と指示を出すだけ、という開発スタイルです。
AS400の開発でもこの世界的なビッグウェーブに乗るために、今回は
IBM i(AS/400)で動いているRPGの業務プログラムを、どこまで現実的にWeb化できるか
を試してみることにしました。使ったのは Anthropic の Claude Code です。
AS400のモダナイゼーションって、仕様調査だけでもしんどいですよね。
- RPGソースを読む
- DDS画面定義を読む
- 物理ファイルの構造を調べる
このあたりもできるだけAIに任せて、どこまで任せられるか というのが今回のテーマです。
今回の構成
使ったものはこんな感じです。
| コンポーネント | 説明 |
|---|---|
| Claude Code | Anthropic製のCLI型AIコーディングアシスタント(とても気に入っています) |
| as400-mcp | AS400のメタデータやソースを取得するMCPサーバー(自作) |
| IBM i(AS/400) | 既存の業務システム(RPG、DDS、物理ファイル) |
| as400-web-template | React + FastAPI のWebアプリ用テンプレート(自作) |
「プロジェクトをAIに全部丸投げ」というより、ある程度 下回りをちゃんと用意した上で、どこまで楽できるか を試しています。
AS400連携用のMCPを準備
Claude CodeからAS400の情報を直接取得するため、MCPサーバーを自作しました。
MCPとは
MCP(Model Context Protocol)は、AIが外部のツールやデータにアクセスするための仕組みです。MCPサーバーを用意することで、Claude Codeから
- データベース
- ソースファイル
- システム情報
などにアクセスできるようになります。
既に IBM i MCP Server というIBM公式のMCPサーバーがありますが、運用・管理向けで開発には向かないと感じたので、今回は自分で作成しました。
as400-mcp
今回用意した as400-mcp は、ODBC経由でAS400に接続し、以下のような情報を取得できます。
| ツール | 内容 |
|---|---|
list_libraries |
ライブラリ一覧 |
list_tables |
テーブル(物理ファイル)一覧 |
get_columns |
カラム情報(日本語ラベル付き) |
get_data |
サンプルデータ取得 |
list_source_files |
ソースファイル一覧 |
list_sources |
ソースメンバー一覧 |
get_source |
RPG / DDSソース取得 |
list_programs |
プログラム一覧 |
get_program_references |
依存関係の取得 |
execute_sql |
SELECT文実行(読み取り専用) |
すべて 読み取り専用 なので、AIが暴走してもデータが壊れることはありません。
ソースはGitHubで公開しています。汎用的に使えるよう設計しているので、他の用途にも使えるはずです
処理の流れ
図にすると単純ですが、実際には Claude Codeが裏で勝手にどんどん調べていく 感じです。
解析対象:部品マスタ保守
今回Web化するのは、GOMライブラリにある「部品マスタ保守」です。典型的なAS400業務画面で、検索・一覧(サブファイル)・登録・変更・削除が揃っています。
| オブジェクト | タイプ | 説明 |
|---|---|---|
| M@010 | RPGLE | プログラム本体 |
| M@010D | DSPF | 画面定義(DDS) |
| M@BUHNM | PF | 部品マスタ(物理ファイル) |
プログラム(M@010)
RPG ILEで書かれたプログラムです。主な処理は以下の通り。
- 部品№での検索・位置づけ
- サブファイルへの一覧表示
- 登録・変更・削除処理
約500行程度の、よくあるマスタ保守プログラムです
画面定義(M@010D)
DDSで定義された5250画面です。構成は以下の通り。
| レコード様式 | 用途 |
|---|---|
| FMT01 | ヘッダー(プログラムID、日時) |
| FMT02 | 部品№入力(検索用) |
| FMT03 | 登録・変更・削除フォーム |
| SFL01 / CTL01 | 一覧表示(サブファイル) |
| FMT09 | メッセージ表示 |
5250に慣れている人にはおなじみの構成 ですね。
DDSを読むの、正直しんどいです……
テーブル(M@BUHNM)
部品マスタの物理ファイルです。
| カラム | 日本語名 | 型 | 備考 |
|---|---|---|---|
| BUBUNO | 部品№ | NUMERIC(5,0) | 主キー |
| BUBUNM | 部品名 | CHAR(50) |
いわゆる「よくあるマスタ」です
実演:Claude Codeにやらせてみる
ステップ0:テンプレートプロジェクトを用意
一からプロジェクトを作成することも可能ですが、プロジェクト構成やAS400の接続を含めてすべてAIに説明して作らせるのはあまり建設的ではありません。以下の要件を満たすテンプレートを事前に作成しました。
- フロントエンドはReact + Material UI(TypeScript)
- バックエンドはPython + FastAPIで実装
- AS400とのやりとりにODBCを使用
- dotenvから設定ファイルを読み込める
- データベース接続、テーブル一覧表示などのサンプル画面を用意
ソースはGitHubを参照してください
また上記のプロジェクトを作成したら、as400-mcp の README.md をみながらプロジェクトに .mcp.json を配置してください。
ステップ1:仕様調査
まずは、かなり雑にこんな指示を出しました。
GOMライブラリのM@010(部品マスタ保守)をWeb画面にしたい。
まずはどのようになるのかレポートして
これだけでClaude Codeが
- プログラムを探す
- RPGソースを読む
- DDSを読む
- テーブル構造を確認する
- サンプルデータを見る
を自動的に行い、現状のレポートとWeb画面の提案を出してくれました。
出てきたレポートには、
- 機能一覧(AS400側)
- 画面構成の整理(AS400側)
- Web画面への対応案
- API構成案
- バリデーション案
が含まれていました。解析された既存の仕様も正確でしたし、提案されたWeb画面もモダンな仕様になっていました。
正直、大きく訂正するところはありませんでした。細かい表現の調整は必要でしたが、仕様理解としては十分でした。もっと複雑なプログラムならわかりませんが、単純な画面であれば 仕様調査としてはかなり実用的 です。
ステップ2:実装
次に、実装をお願いしました。
部品マスタというWebページとして実装を進めてください。
既存の画面・APIと同じパターンで追加してください
React(TypeScript)+ FastAPI(Python)のテンプレートを事前に用意していたので、Claude Codeはそれを読み取り、同じ構成で実装してくれました。
5250画面と比べると、「同じ業務だけど、ちゃんと今風」 という感じです。
実際に動くところまでのやりとりは、だいたいこんな感じでした。
-
「部品マスタというWebページとして実装を進めてください。既存の画面・APIと同じパターンで追加してください」
→ ページの表示はすべて成功。ただし部品マスタがホームのDashboardから飛べなかった -
「ホームのダッシュボードにも追加してください」
→ Dashboardからの遷移も行えるようになった。部品マスタの新規登録でDBエラーが発生 -
(画面に表示されたDBエラーの内容を貼る)
→ コミット制御(ジャーナリング)の問題と判断され自動修正。すべて動作するようになった
これだけのやりとりで動くようになりました。
やってみて思ったこと
RPGLEやDDSの処理を読み込み、意図通りに実装していると感じました。画面遷移や画面構成は、少なくとも今回の範囲では違和感がありませんでした。一番驚いたのは RPG ILEのソースをちゃんと正しく理解していたこと でした。
例えば、一覧画面にある検索フィールドの「部品№」検索は、入力されたコード以上のものを表示する仕様なのですが、
C F2BUNO SETLL M@BUHNM ← 入力された部品№以上の位置にセット
C*
C DO *HIVAL
C READ(N) M@BUHNM 99 ← 順次読み取り
C *IN99 IFEQ *ON
C LEAVE
C ENDIF
ちゃんとこのソースを理解し、Web画面で実装されたデータ抽出の部分が WHERE BUBUNO >= ? というSQL条件になっていました。これは正しくRPG ILEのソースを理解していないとできません。
業務ロジックが複雑だったりするとまだわかりませんが、今回試したような単純な画面の移行なら 実務でも十分試す価値がある と感じました。
まとめ
Claude Code と MCP を組み合わせることで、
- AS400の既存資産を直接読ませる
- 仕様整理を自動化する
- Web実装の叩き台を作る
という流れが作れました。「AIが全部やってくれる魔法」ではありませんが、人間が一番つらいところを肩代わりしてくれる道具 としては、かなり優秀だと思います。
次はもう少し複雑な業務ロジックや、バッチ処理のWeb化に挑戦してみたいと思います。
リポジトリ
今回使用したMCPやテンプレートは以下で公開しています。導入方法などは各READMEを参照してください。
-
as400-mcp(AS400連携用MCPサーバー)
https://github.com/omni-s/as400-mcp -
as400-web-template(React + FastAPI テンプレート)
https://github.com/omni-sano/as400-web-template-
mainブランチ:初期テンプレート -
article-demoブランチ:本記事で作成した部品マスタ画面の成果物
-







