7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

IBM Bobを使って、PostgreSQLのToDoアプリをDb2へ変換してみよう

7
Last updated at Posted at 2026-03-16

IBM BobはIBMが開発したVS Codeを利用したAIコーディングエージェントです。
VS Codeプラグインではなく、IBM Bobを導入して専用アプリとして起動します。CLIもあります。
かわいいキャラクター&人の名前がついているので、使ってるとBobという人型ロボットと話してる感覚に陥ります……。

本投稿は、2026/03/06(金)開催「IBM Database Dojo 2026 IBM Bobを使って、PostgreSQLのToDoアプリをDb2へ変換してみよう」で実施した内容の前準備と実施内容について説明します。

レベルとしては、WebアプリとDBの関係がなんとなく分かっていて、AIコーディングエージェントを使った開発に興味がある方向けの内容です。

セッションは30分なので30分で収まるように、要件や指示を調整しています。そこに至る経緯を書きます。IBM Bobに限らず、AI駆動開発の参考になればと思います。

1. やること「PostgreSQLのToDoアプリをDb2へ変換」

具体的には
PERN(PostgreSQL / Express / React / Node.js)構成のToDoアプリケーション

をPostgreSQLじゃなくてDb2にしてもらいます。このアプリは(なぜかBobではないのですが)Copilotのサポートで作成しました。

image.png
PERN.png

実行環境は以下です:

  • macOS 15.7.4
  • Node.js v24.13.0
  • npm 11.10.1
  • 接続情報(ホスト、ポート、ユーザー、パスワード、スキーマ名)や必要な情報は環境変数に設定済み
    • 今回はデモ用のため、オンラインデモ中に接続情報が表示されないように、環境変数を設定した状態でIBM Bobを起動しています
    • そのような要件がなければ、.envファイルに指定する方法がよいと思います
  • Db2: Db2 SaaS を使用

2. 「このコードはPostgreSQL用です。これをDb2で動くように修正してください。」とシンプルに指示 → Bobがドツボにハマる

まず https://github.com/kyokonishito/pern_todoを自分のMacのdb2_todoというフォルダにcloneします。
作成されたdb2_todoをIBM Bobで開いて、早速始めます。

サクッと雰囲気で指示します! (いわゆる Vibe Coding)
「このコードはPostgreSQL用です。これをDb2で動くように修正してください。」
って一言言うと、いい感じに作ってくれるのでは? と最初は考えていました。

しかし動かない。
image.png

自信満々にちゃんと修正してくれるのですが、やっぱり動かない
image.png

動かない
image.png

というのがかなり繰り返され、 Bobがドツボにハマったため、一旦この方法はやめました。
これはBobの性能がいまいちとかそういうことではなく、他のAIコーディングエージェントでもそんな感じらしいです。

この時うまくいかなかった点は以下です:

  • Db2の接続管理がうまくできていない、PostgreSQLでの書き方に引きずられている
  • Db2 SaaSのスキーマ名指定ができていなかった(PostgreSQLアプリにその機能はなかった)
  • Db2のカラム名が大文字で戻ってくるのが想定外だった
  • Db2のibm_dbドライバーの使い方をわかっていない
  • テストがされていない(指示してやってもらった)

などなど。基本的なSQL変換などはちゃんとやってくれたのですが、Db2な部分が結構PostgreSQLに引きずられていたり、テストが甘かったなどの問題がありました。

3. ちゃんとやってほしいことをrequirement.mdに記述、ハマりそうなところも書いてあげる、そしてPlanモードから開始

これが今のそこそこなAIコーディングエージェントの標準のやり方のようでした。

IBM BobにはPlanモード、Codeモード、Askモード、Advancedモードなどがあり、最初にPlanモードでPlanを立てて、Codeモードでコード変更、テストが一般的なやり方の一つだそうです。

ということで、まずはやってほしいことをrequirement.mdに記述し、それをdb2_todoフォルダに置きます。さっきBobがドツボにハマった部分や、テストしてほしいこともちゃんと書いておきます。

あなたは優秀なプログラマー、データーベースを使用したWebアプリケーション開発が得意です。

あなたは現在のフォルダーにあるPostgresベースのWebアプリをDb2ベースに変更します。
以下の点に考慮して実施します。下記が今現在のPostgresベースのWebアプリに実装されていなくても、Db2アプリには実装するようにしてください。
これ以外でもDb2アプリとして重要機能は、PostgresベースのWebアプリに実装されていなくても、Db2アプリには実装するようにしてください。

- SQLだけでなく、コネクションやトランザクションの管理も考えてDb2に移行します。また何度も接続が不要なようにコネクションプールを実装します。

- Db2のテーブルのカラム名の処理は、大文字で行ってください

- Db2テーブルの指定はスキーマ名を含めて行います。スキーマ名とテーブル名の両方をパラメータ(環境変数)で指定できるようにします。

- 必要な環境変数が設定されていない場合は.envから読み取るようにしてください

- テストに必要なDb2接続情報は, 以下の環境変数を使用します。
    - db名: DB2_DATABASE
    - 接続先hostname: DB2_HOSTNAME
    - 接続先port: DB2_PORT
    - DB userid: DB2_UID
    - DB password: DB2_PWD
    - DB2接続プロトコル: DB2_PROTOCOL
    - Db2Security type: DB2_SECURITY

- テーブル作成スクリプトを準備してください

- エラー発生時は、原因がわかるようにエラーメッセージを標準出力に出すようにしてください。

- コード変更だけでなく、テストコードも作成し、確実に動作することを保証してください。

- 最後にテストコードを使用したテストも実際に実施し、実行に問題ないことを確認してください。

Planモードにして、まずは慎重にコーディング手前で確認することにします。
Bobへの指示は以下です。

@/requirement.md を使って、実装計画 implement-plan.mdを作成して

最初の@/はファイルを指定するコマンドです。相対パスで指定します。

できました!
image.png
image.png

この計画で実装を進めてよろしいでしょうか?と聞いてきてますが、今回は作成された実装計画 implement-plan.mdを読んで、不足してそうな部分は確認していきます。
image.png
image.png
image.png
image.png

いちおう気になる点は直したみたいです。ただ、これあとでDojoセッションでも同じことをやる予定なので、requirement.mdに書いておいてもらいます。

後からチャットで追加した要件を@/requirement.md に追記してもらえますか?

image.png

ではPlanも精査したので、早速実装してもらいます。

@/implement-plan.md に基づいて実装を開始してください

image.png

Bobはチャキチャキコードを変更していきます。
image.png

今度はテスト実装に進むようです。
image.png
このファイルなんなのだ???
一旦聞いてみます。
image.png
image.png
説明もしてくれて、理解したので、OKを出します。
image.png
延々とテストファイルを書いてくれました。
いよいよテスト実行です。
image.png
ここで聞かれます
image.png

迷う時は聞いてくれるみたいです!
ちなみに聞かれた内容に不明点があれば、質問すれば教えてくれます。
image.png

と言った感じで、質問に答えつつ、Bobにコード変更や資料を作ってもらいます。

さて今度はテスト実行です
image.png
最初からエラー出てるって、でも自分で修正してます。
この先、テストでもいろいろエラーが出まして、その結果を見てBobの修正が続きます。
途中で変更方法も指示したりしました。
image.png
いろいろ対話して(!)変更して、一応動くようになりました!
image.png
image.png
しかし、動かすと気になる部分も、、、。直してもらいます。
image.png
直してもらったらやっぱりテスト
image.png

テストも終わり、無事動くようになりました。変更した部分はちゃんと追記してもらいます。
image.png
image.png

これで一旦完了
image.png
image.png

とりあえずDb2でも動くものができました!
通常の開発であれば、ここでOKです。さらにコードの精査(コードレビューなど)に進むところでです。

しかし、今回はライブデモをするため、Bobがアプリを変換する時間を20分以内にすることが目標となっていました。この後はBobがアプリを変換する時間を短縮するための作業をしていきます。

4. 結構エラーが出たり、後から直してほしいところも出てくるのでそれもrequirement.mdに記述、そしてPlanモードから開始、実装も続けてしてもらう

Bobがアプリを変換する時間を短縮するため、その前の経験をもとにrequirement.mdを充実させました。
そして、今度はPlanで止めず、Codeまでやってもらう前提で、Planモードから以下のように指示して、継続して実装、テストまでやってもらいました。

@/requirement.md を読み、その内容に則して、
現在のフォルダにあるPostgresベースのWebアプリをDb2ベースに変更してください。

何度かこの変換→requirement.mdのサイクルを繰り返して、requirement.mdを充実させ、変換時間を短縮していきました。

そんな感じで、requirement.md は
「最初に完成させた要件定義書」ではなく、

  • AIが間違えたこと
  • 次は失敗してほしくないポイント
  • 人間側の暗黙知

を継ぎ足していく「秘伝のタレ」のようなものに成長していきました...

ただ、実装上のDb2系のライブラリの間違いも多く、requirement.mdは要件というより、実装上の注意みたいな記載が多くなってしまいました。これはrequirement.mdに書くべきもの?という疑問が湧いてきてしまい、数回のサイクル実施後、Bob自身に最後に

間違いが発生した原因は何ですか?どうすれば再発しませんか?

と聞いて、最終的には別ファイルを作ってまとめるようにしました。
(これを実際の人に言うとすると、なんか詰めてる感じなんですが)

image.png

LESSONS_LEARNED.mdを作ってくれました。

5. LESSONS_LEARNED.mdも読むように指示

その後は以下のプロンプトでブラッシュアップ!

@/requirement.md を読み、その内容に則して、
現在のフォルダにあるPostgresベースのWebアプリをDb2ベースに変更してください。
また @/LESSONS_LEARNED.md も読んで今までの問題を発生させないような実装を行ってください。

こちらも数回繰り返して、requirement.mdをより充実させました。
また設計文書の作成もrequirement.mdに記載して色々作ってもらいました。
作成したドキュメントの一例(長いので別ポストにしました):

シーケンス図とかも書いててびっくり!

振り返ると、今回はLESSONS_LEARNED.mdを作ってしまいましたが、requirement.mdに「実装上の注意」みたいなセクションをいれてしまって、1つにしても問題はなかったとは思います。

6. さらにデモ用に時間短縮

これは通常の開発作業であれば不要です。

ライブデモ用に変換時間を20分以内にするのに、requirement.mdとLESSONS_LEARNED.mdの充実では限界に近づいてきました。
何度も実施した結果、ドキュメント作成は結構時間がかかることがわかりましたので、デモ用のrequirement.mdにはドキュメントは最低限のものしか作らないように指示を入れました。

これによってほぼ20分で完了するようになりました。

最終的にデモ用でできたものは以下です。

最初から継ぎ足し秘伝のタレになっていてrequirement.mdに初期の実装関連も入ってしまっています。うまくLESSONS_LEARNED.mdと分けられてはいません。すみません🙇

7. デモ実施

セッション資料やデモを実施した動画が以下にあります。倍速で15分くらいになるはずなので、ぜひ見てみてください:
2026/03/06(金)開催「IBM Database Dojo 2026 IBM Bobを使って、PostgreSQLのToDoアプリをDb2へ変換してみよう

セッション資料:

セッション動画:

デモでBobが実際にその場で作成したコード:

8. まとめ

IBM BobでAI駆動開発した感想

セッション資料に書きましたが、こんな感じです:

  • IBM Bobは各種言語のプログラミングが超得意な新入社員✨
  • 文書をまとめるのも得意! アーキテクチャー図やシーケンス図も書けます!
  • でも製品のAPIの詳細とかはよくわかっていないことがあるので、あらかじめ教えてあげるか、実装中に壁打ちで教えてあげましょう
  • やってほしいことは事前に伝えるとスムーズに進みます(requirement.md)
  • 小さく始めて、そこで出てきた失敗(!)や注意事項は最後にBobにLesson Learnedにまとめてもらいましょう! 同じような改修であれば、次はそれを教えてあげると同じ地雷🔥を踏みません(LESSONS_LEARNED.md)

AIコーディングエージェント全般で共通だと感じた点

  • 要件を曖昧にすると、高確率でハマる
  • DB移行や既存コード改修は暗黙知が多く、requirement.md のような明文化が重要
  • 小さく始めて、失敗や注意点をドキュメントとして蓄積していくのが効果的
  • テストまで含めて指示しないと「動いた気がするコード」が量産されがち

IBM Bobのプロダクト設計として特徴的だと感じた点

  • Plan / Code / Askなどの「モード」がUIとして明示されていて、今どのフェーズで作業してるかを意識しやすい(いきなり実装に突っ走りにくい)
  • Planモードで一度立ち止まって実装計画をレビューできるので、要件漏れを早めに潰せる
  • ファイル参照(@/requirement.md など)を前提としたワークフローが強く、ドキュメント駆動での開発と相性が良い

以上です。

7
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?