1
0

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でIBM i モダナイゼーション:資産棚卸し

1
Last updated at Posted at 2026-05-01

IBM Bobを利用したモダナイゼーション実践①:資産棚卸し編

IBM Bobの機能を活用することで、既存のIBM i環境のモダナイゼーションをどこまで実施できるのか実践していきます。今回は、IBM Bob以外のツールを使用せず、無償で実施できるモダナイゼーション手法を紹介します。

まず最初のステップとして、現状のアプリケーション資産の分析を行います。

はじめに

IBM i環境には、多数のソースメンバーやプログラムなどのオブジェクトが存在しています。IBM Bobに全てのソースメンバーを読ませて仕様書の作成をすることは可能ですが、不要なソースを読ませた場合、Bobコインの消費量が増えてしまいます。そこで、モダナイゼーションを進める前に、現在使用しているオブジェクトの特定と、使用していない不要なオブジェクトの整理が必要です。

2026年4月時点では、IBM BobはIBM iに直接接続してオブジェクト情報を取得できないため、MCPサーバーを利用します。MCPサーバーの構築方法は複数ありますので、以下のリンクを参考にしてください。なお、構築方法や仕組みの詳細については本記事では割愛します。

アプリケーション資産棚卸しに必要な情報

IBM iには「IBM i Services」と呼ばれる、SQLを利用してさまざまな操作を実行できる機能が用意されています。今回の資産分析に活用できるIBM i ServicesをIBM Bobに選定してもらって実施していきます。

IBM i Servicesの詳細については、以下のドキュメントに記載されています:

今回、上記PDFの内容をIBM Bobに読み込ませるため、マークダウン形式に変換しました。変換後のファイルは以下のリンクから参照できます

上記のマークダウンファイルをIBM Bobに読んでもらって選定した、今回準備するIBM i Servicesは以下の通りです

1. オブジェクト情報

  • QSYS2.OBJECT_STATISTICS(テーブル関数) - 全オブジェクトの統計
  • QSYS2.PROGRAM_INFO(ビュー) - プログラム情報
  • QSYS2.SERVICE_PROGRAM_INFO(ビュー) - サービスプログラム情報
  • QSYS2.MODULE_INFO(ビュー) - モジュール情報
  • QSYS2.PROGRAM_REFERENCES(ビュー) - プログラム参照
  • QSYS2.OBJECT_DEPENDENCIES(ビュー) - 依存関係

2. データベース

  • QSYS2.SYSTABLES(ビュー) - テーブル定義
  • QSYS2.SYSTABLESTAT(ビュー) - テーブル統計
  • QSYS2.SYSCOLUMNS(ビュー) - カラム定義
  • QSYS2.SYSINDEXES(ビュー) - インデックス
  • QSYS2.SYSVIEWS(ビュー) - ビュー定義
  • QSYS2.SYSKEYS(ビュー) - キー情報
  • QSYS2.SYSTRIGGERS(ビュー) - トリガー
  • QSYS2.SYSCST(ビュー) - 制約
  • QSYS2.SYSPROCS(ビュー) - ストアドプロシージャ
  • QSYS2.SYSFUNCS(ビュー) - 関数

3. ソース・構造

  • QSYS2.SYSPARTITIONSTAT(ビュー) - ソースメンバー
  • QSYS2.BOUND_MODULE_INFO(ビュー) - バインドモジュール
  • QSYS2.BOUND_SRVPGM_INFO(ビュー) - バインドサービスプログラム

4. 運用・ジョブ

  • QSYS2.SCHEDULED_JOB_INFO(ビュー) - スケジュールジョブ

5. セキュリティ

  • QSYS2.OBJECT_PRIVILEGES(テーブル関数) - オブジェクト権限

MCPサーバーのツール設定

上記のIBM i Servicesを利用して解析作業を実施します。まず、MCPサーバーにツールを設定していきます。

以下のYAMLファイルをIBM Bobに作成してもらいました

asset-inventory.yaml(クリックして展開)
# IBM i 資産棚卸しとモダナイゼーションツール
# プログラム資産の棚卸しとモダナイゼーション分析のためのツール
# Version 1.0.0

sources:
  ibmi-system:
    host: ${DB2i_HOST}
    user: ${DB2i_USER}
    password: ${DB2i_PASS}
    port: 8076
    ignore-unauthorized: true

tools:
  # ===== 1. オブジェクト情報 =====
  
  get_object_statistics:
    source: ibmi-system
    responseFormat: markdown
    description: "QSYS2.OBJECT_STATISTICSを使用してライブラリ内のオブジェクトの包括的な統計情報を取得します。"
    statement: |
      SELECT
        OBJNAME, OBJTYPE, OBJATTRIBUTE, OBJOWNER, OBJCREATED,
        DAYS_USED_COUNT, OBJSIZE, OBJTEXT, SQL_OBJECT_TYPE
      FROM TABLE(QSYS2.OBJECT_STATISTICS(
        OBJECT_SCHEMA => :library_name,
        OBJTYPELIST => :object_type_list,
        OBJECT_NAME => :object_name
      ))
      ORDER BY OBJTYPE, OBJNAME
      FETCH FIRST 500 ROWS ONLY
    parameters:
      - name: library_name
        type: string
        description: "ライブラリ名"
        required: true
      - name: object_type_list
        type: string
        description: "オブジェクトタイプリスト"
        default: "*ALL"
      - name: object_name
        type: string
        description: "オブジェクト名"
        default: "*ALL"

  get_program_info:
    source: ibmi-system
    responseFormat: markdown
    description: "QSYS2.PROGRAM_INFOから詳細なプログラム情報を取得します。"
    statement: |
      SELECT
        PROGRAM_LIBRARY, PROGRAM_NAME, PROGRAM_TYPE, OBJECT_TYPE,
        CREATE_TIMESTAMP, USER_PROFILE, ACTIVATION_GROUP, PROGRAM_SIZE,
        SQL_STATEMENT_COUNT, PROGRAM_OWNER, TEXT_DESCRIPTION,
        SOURCE_FILE, SOURCE_FILE_LIBRARY, SOURCE_FILE_MEMBER, PROGRAM_ATTRIBUTE
      FROM QSYS2.PROGRAM_INFO
      WHERE PROGRAM_LIBRARY = UPPER(:library_name)
        AND (:program_filter = '*ALL' OR PROGRAM_NAME LIKE UPPER(:program_filter))
      ORDER BY PROGRAM_TYPE, PROGRAM_NAME
      FETCH FIRST 500 ROWS ONLY
    parameters:
      - name: library_name
        type: string
        description: "ライブラリ名"
        required: true
      - name: program_filter
        type: string
        description: "プログラム名フィルター"
        default: "*ALL"

  # ... その他のツール定義(get_service_program_info, get_module_info, など)

  get_tables_info:
    source: ibmi-system
    responseFormat: markdown
    description: "テーブル定義と統計情報を取得します。"
    statement: |
      SELECT
        T.TABLE_SCHEMA, T.TABLE_NAME, T.TABLE_TYPE, T.TABLE_TEXT,
        T.COLUMN_COUNT, T.LAST_ALTERED_TIMESTAMP,
        COALESCE(S.NUMBER_ROWS, 0) AS NUMBER_ROWS, S.LAST_CHANGE_TIMESTAMP
      FROM QSYS2.SYSTABLES T
      LEFT JOIN QSYS2.SYSTABLESTAT S
        ON T.TABLE_SCHEMA = S.TABLE_SCHEMA AND T.TABLE_NAME = S.TABLE_NAME
      WHERE T.TABLE_SCHEMA = UPPER(:schema_name)
        AND (:table_filter = '*ALL' OR T.TABLE_NAME LIKE UPPER(:table_filter))
      ORDER BY T.TABLE_TYPE, T.TABLE_NAME
      FETCH FIRST 500 ROWS ONLY
    parameters:
      - name: schema_name
        type: string
        description: "スキーマ名"
        required: true
      - name: table_filter
        type: string
        description: "テーブル名フィルター"
        default: "*ALL"

  # ... その他のデータベース関連ツール

  get_source_members:
    source: ibmi-system
    responseFormat: markdown
    description: "ソースファイルメンバー情報を取得します。"
    statement: |
      SELECT 
        TABLE_SCHEMA, TABLE_NAME, TABLE_PARTITION, NUMBER_ROWS,
        DATA_SIZE, SOURCE_TYPE, LAST_CHANGE_TIMESTAMP,
        LAST_SOURCE_UPDATE_TIMESTAMP
      FROM QSYS2.SYSPARTITIONSTAT
      WHERE TABLE_SCHEMA = UPPER(:library_name)
        AND (:source_file_filter = '*ALL' OR TABLE_NAME LIKE UPPER(:source_file_filter))
      ORDER BY TABLE_NAME, TABLE_PARTITION
      FETCH FIRST 500 ROWS ONLY
    parameters:
      - name: library_name
        type: string
        description: "ライブラリ名"
        required: true
      - name: source_file_filter
        type: string
        description: "ソースファイル名フィルター"
        default: "*ALL"

  # ... その他のツール定義

toolsets:
  asset_inventory_objects:
    title: "資産棚卸し - オブジェクト"
    description: "プログラム、サービスプログラム、モジュール、依存関係の棚卸しツール"
    tools:
      - get_object_statistics
      - get_program_info
      - get_service_program_info
      - get_module_info
      - get_program_references
      - get_object_dependencies

  asset_inventory_database:
    title: "資産棚卸し - データベース"
    description: "データベースオブジェクトの棚卸しツール"
    tools:
      - get_tables_info
      - get_table_columns
      - get_indexes_info
      - get_views_info
      - get_keys_info
      - get_triggers_info
      - get_constraints_info
      - get_procedures_info
      - get_functions_info

  asset_inventory_source:
    title: "資産棚卸し - ソース・構造"
    description: "ソースメンバーとプログラムバインド構造を分析するツール"
    tools:
      - get_source_members
      - get_bound_modules
      - get_bound_service_programs

  asset_inventory_operations:
    title: "資産棚卸し - 運用"
    description: "スケジュールジョブを含む運用情報のツール"
    tools:
      - get_scheduled_jobs

  asset_inventory_security:
    title: "資産棚卸し - セキュリティ"
    description: "オブジェクト権限とセキュリティ設定を分析するツール"
    tools:
      - get_object_privileges

metadata:
  version: "1.0.0"
  description: "包括的なIBM i資産棚卸しとモダナイゼーション分析ツール"
  domain: "development"
  category: "asset-inventory"

# Made with Bob

このYAMLファイルを使用して、IBM iのライブラリーに含まれるオブジェクト情報を取得していきます。

MCPサーバーのツールを使用した棚卸しの結果

このツールを実際に使用して資産棚卸しを実施し、その結果を分析していきます。

image.png
上記のように既存のオブジェクトの情報も取得できました。
image.png
また最近使用していないプログラムオブジェクトや、ソースの存在しないプログラム情報なども取得できました。
ソースは存在するがコンパイル後のPGMが存在しないものも確認できました。
image.png

最後に

IBM i のオブジェクトの情報をもとに現在使用していないソースやプログラムを確認することができました。
次回は現在使用しているオブジェクト情報をもとに仕様書の作成や資産の分析を行なっていきます。

(参考)ツールの詳細説明

IBM Bobに作成したyamlファイルについてどのようなツールを使用しているのか説明してもらいました。

作成したYAMLファイルには、5つのカテゴリに分類された合計20個のツールが定義されています。

1. オブジェクト情報ツール(6個)

IBM i上のプログラムやオブジェクトの詳細情報を取得するツール群です。

ツール名 説明 主な用途
get_object_statistics オブジェクトの統計情報を取得 オブジェクトの使用状況、サイズ、作成日の確認
get_program_info プログラムの詳細情報を取得 ILE/OPMの判別、ソースファイル情報の確認
get_service_program_info サービスプログラム情報を取得 サービスプログラムの活動化グループ、サイズの確認
get_module_info モジュール情報を取得 モジュールの言語、最適化レベルの確認
get_program_references プログラム参照関係を取得 プログラム間の呼び出し関係の把握
get_object_dependencies オブジェクト依存関係を取得 オブジェクト間の依存関係の可視化

2. データベースツール(9個)

データベースオブジェクトの構造と内容を分析するツール群です。

ツール名 説明 主な用途
get_tables_info テーブル定義と統計を取得 テーブル一覧、レコード数の確認
get_table_columns カラム定義を取得 テーブル構造の詳細確認
get_indexes_info インデックス情報を取得 インデックスの有無、ユニーク制約の確認
get_views_info ビュー定義を取得 ビューの定義内容、更新可否の確認
get_keys_info キー情報を取得 主キー、外部キーの確認
get_triggers_info トリガー情報を取得 トリガーの実行タイミング、対象テーブルの確認
get_constraints_info 制約情報を取得 テーブル制約の確認
get_procedures_info ストアドプロシージャ情報を取得 プロシージャの定義、言語の確認
get_functions_info 関数情報を取得 ユーザー定義関数の確認

3. ソース・構造ツール(3個)

ソースコードとプログラム構造を分析するツール群です。

ツール名 説明 主な用途
get_source_members ソースメンバー情報を取得 ソースファイルの内容、更新日時の確認
get_bound_modules バインドモジュール情報を取得 プログラムにバインドされたモジュールの確認
get_bound_service_programs バインドサービスプログラム情報を取得 プログラムにバインドされたサービスプログラムの確認

4. 運用ツール(1個)

システム運用に関する情報を取得するツールです。

ツール名 説明 主な用途
get_scheduled_jobs スケジュールジョブ情報を取得 定期実行ジョブの確認、ステータスの把握

5. セキュリティツール(1個)

オブジェクトのセキュリティ設定を確認するツールです。

ツール名 説明 主な用途
get_object_privileges オブジェクト権限を取得 ユーザー/グループの権限設定の確認

ツールセットの活用

これらのツールは、5つのツールセットにグループ化されており、目的に応じて効率的に使用できます

  • asset_inventory_objects: オブジェクト全般の棚卸し
  • asset_inventory_database: データベース構造の分析
  • asset_inventory_source: ソースコードの追跡
  • asset_inventory_operations: 運用状況の確認
  • asset_inventory_security: セキュリティ設定の監査

パラメータの使い方

各ツールには柔軟なフィルタリング機能が用意されています

  • library_name / schema_name: 対象ライブラリの指定(必須)
  • *_filter: オブジェクト名のフィルタリング(ワイルドカード使用可能)
    • '*ALL': すべてのオブジェクトを対象
    • 'CUST*': CUSTで始まるオブジェクトのみ
    • '*ORDER': ORDERで終わるオブジェクトのみ
1
0
1

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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?