3
2

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 i 開発者向け! VSCode拡張機能 #2

3
Posted at

昨今、IBM i開発でも、ソースをIFSやGitリポジトリで管理し、
VSCodeを中心に開発環境を構成するケースが増えてきました。

その中で、**TOBi(The Object Builder for i)**を使い、
ソースからIBM iネイティブオブジェクトをビルドする構成を採用している方もいらっしゃると思います。

TOBiを利用すると、RPG、CL、DDSなどのソースをプロジェクトとして管理し、
依存関係を考慮しながら必要なオブジェクトだけをビルドできます。

一方で、DSPFについては、
ソースをGit管理できるようになっても、次のような課題が残ります。

  • DDSの行・桁位置から実際の画面を頭の中で再現する必要がある
  • 入出力フィールドの配置変更がソース編集だけでは分かりにくい
  • 標識による条件表示を確認しづらい
  • サブファイルと制御レコードの関係を追いにくい
  • REF / REFFLD の参照先まで確認しないと桁数や型が分からない
  • Git差分だけでは、画面上で何が変わったのか把握しづらい

そこで、**TOBiで管理しているIBM iプロジェクト内のDSPFを、
VSCode上で視覚的に表示・編集できる拡張機能「IBM i DSPF Screen Designer」**を利用しています。

VSCode、TOBi、DSPF Screen Designerを組み合わせた開発環境
image.png
image.png

本拡張機能は、現時点では一般的なOSSとして公開する段階ではないと判断しており、限定的な配布を想定しています。

TOBiとDSPF Screen Designerの役割

最初に、両者の役割を整理します。

ツール 主な役割
VSCode ソース編集、Git操作、拡張機能をまとめる開発画面
TOBi IBM iネイティブオブジェクトのビルド、依存関係管理、必要なオブジェクトの再ビルド
IBM i DSPF Screen Designer DSPFの画面表示、視覚編集、DDS属性設定、差分確認、Excel出力

TOBiのビルド機能を置き換えるものではありません。

また、TOBi専用のAPIを呼び出して動作する拡張機能でもありません。

TOBiが管理するプロジェクト内の .dspf ソースを本拡張機能で編集し、そのソースをTOBiでビルドする、という役割分担です。

Gitリポジトリ / IFSプロジェクト
  ├─ QRPGLESRC
  │    └─ SAMPLE.rpgle
  ├─ QCLLESRC
  │    └─ SAMPLE.clle
  ├─ QDDSSRC
  │    └─ SAMPLE.dspf
  ├─ Rules.mk
  └─ iproj.json
           │
           ├─ RPG・CL・DDSの編集
           │
           ├─ DSPF Screen Designerで画面編集
           │
           └─ TOBiでビルド
                    ↓
             IBM iのQSYSオブジェクト

ソース管理、画面設計、ビルドを、VSCode内でつなげることを狙っています。

TOBiとは

TOBiは、IBM iのネイティブQSYSオブジェクトをビルドするためのオープンソースのビルドシステムです。

以前は Better Object Builder / Bob と呼ばれていましたが、現在は The Object Builder for i(TOBi) という名称になっています。

TOBiでは、GNU Makeの仕組みを使い、ソースと生成されるオブジェクトの関係を管理します。

主な特徴は次のとおりです。

  • 変更されたソースと、その影響を受けるオブジェクトをビルドする
  • オブジェクト間の依存関係を管理する
  • 複数ディレクトリのIBM iプロジェクトを扱う
  • コンパイルパラメーターをプロジェクトやルール単位で設定する
  • IBM i Project Explorerからビルドを実行できる

公式情報は次を参照してください。

TOBiを使っても、DSPFの編集はソースのまま

TOBiによって、DSPFもRPGやCLと同じようにGit管理し、
ビルド対象として扱えるようになります。

ただし、DSPFの編集作業そのものは、通常のテキスト編集です。

例えば、次のDDSを見れば、5行10桁にテキスト定数があることは分かります。

A                                      5 10'得意先コード'
A            CUSTCD        6A  B  5 24

しかし、画面全体で見たときに、

  • 項目がどのように並んでいるか
  • 別のフィールドと重なっていないか
  • 画面サイズに収まっているか
  • 条件付き項目がどの標識で表示されるか
  • サブファイルがどの位置に展開されるか

といった点は、ソースだけでは把握しづらいままです。

DSPF Screen Designerでは、TOBiのプロジェクト内にある .dspf ファイルを画面イメージとして開き、視覚的に確認できます。

TOBiプロジェクト内のDSPFをそのまま編集

1. .dspf ファイルをデザイナーで開く

TOBiで管理しているワークスペースをVSCodeで開き、対象の .dspf ファイルを右クリックします。

IBM i DSPF: デザイナーで開く

DSPFは、24行×80桁または27行×132桁の画面イメージとして表示されます。

通常のクリックではテキストエディタとして開き、必要なときだけデザイナーへ切り替えることもできます。

2. 画面上で配置や属性を変更する

画面上の要素を選択し、位置やDDS属性を変更します。

主な編集内容は次のとおりです。

  • 定数テキストの追加、変更、移動、削除
  • 入力、出力、入出力フィールドの追加と編集
  • フィールド名、桁数、データ型、小数桁の設定
  • DSPATRCOLOREDTCDEEDTWRDEDTMSK の設定
  • VALUESDFTDFTVALCHECKCHANGE の設定
  • DSP、SFL、CTL、WINDOW、GRDレコードの追加
  • 罫線の描画、移動、リサイズ
  • 標識条件の設定とON/OFF確認

3. 編集内容をDDSソースへ反映する

デザイナーで編集すると、内容は .dspf のDDSソースへ反映されます。

元ソースの書式、コメント、カラム1~5の順序番号をできる限り保持し、実際に編集した箇所だけを書き換えます。

画面上でフィールドを移動
        ↓
DDSの行・桁位置を更新
        ↓
.dspf がVSCodeの未保存状態になる
        ↓
Ctrl + S で保存

4. Gitで変更内容を管理する

保存した .dspf は通常のテキストファイルなので、ほかのソースと同様にGitで管理できます。

git diff
git add QDDSSRC/SAMPLE.dspf
git commit -m "得意先照会画面の項目配置を変更"

デザイナー独自の中間形式へ変換して保存するのではなく、管理対象はDDSソースのままです。

5. TOBiでビルドする

編集後のDSPFは、既存のTOBiルールに従ってビルドします。

DSPF Screen Designer
  └─ .dspfを編集・保存
          ↓
Gitで差分確認・レビュー
          ↓
TOBiでビルド
          ↓
DSPFオブジェクトを生成
          ↓
IBM i上で実機確認

TOBi側では、プロジェクトで定義されたルール、ターゲットライブラリー、コンパイルパラメーターをそのまま利用できます。

この組み合わせで得られるメリット

ソース管理方法を変えなくてよい

本拡張機能のために、DSPFを独自JSONや独自XMLへ変換する必要はありません。

TOBiで管理している .dspf を直接編集するため、既存のGit運用やビルドルールを継続できます。

RPG、CL、DDSを同じワークスペースで扱える

RPGやCLは通常のテキストエディタで編集し、DSPFだけを必要に応じて画面デザイナーで開けます。

RPGLE  → VSCodeのテキストエディタ
CLLE   → VSCodeのテキストエディタ
DSPF   → テキストエディタ または DSPF Screen Designer
ビルド → TOBi
履歴   → Git

ツールを切り替える回数を減らし、開発の中心をVSCodeへ寄せられます。

画面変更とプログラム変更を同じコミットで管理できる

画面項目の追加に伴い、RPG側のデータ構造や入出力処理を変更する場合があります。

TOBiプロジェクト内で管理していれば、DSPFとRPGの変更を同じブランチ・同じコミットで扱えます。

変更例
  ├─ ORDERDSP.dspf  項目追加
  ├─ ORDER01.rpgle  入出力処理追加
  └─ Rules.mk       必要に応じてビルドルール変更

レビュー時にも、画面とプログラムの変更を一つの作業単位として確認できます。

ビルド前にDDSの差分を確認できる

デザイナー内の「差分」ボタンから、取り込んだDDSと現在生成されるDDSを比較できます。

また、VSCode標準の差分エディタでも、保存済みソースと現在の編集内容を比較できます。

IBM i DSPF: 保存前の差分を表示

DDSでは桁位置そのものに意味があります。

そのため、画面編集後に、意図していない行やカラムが変更されていないかを確認してから、GitへのコミットやTOBiのビルドへ進めます。

サンプル追加テキストの記載とそれに関連するフィールドを追加

DDSソースの差分確認
image.png

DSPF Screen Designerの主な機能

画面イメージ表示と合成表示

  • 24行×80桁、27行×132桁に対応
  • DSP、SFL、CTL、WINDOW、GRDなどのレコードを切り替え
  • 複数レコードフォーマットの合成表示
  • 合成対象の重ね順を指定

CTLとSFL、通常画面とWINDOWなど、実行時に同時表示されるレコードを重ねて確認できます。

サブファイル関連属性

次のような主要キーワードを確認・設定できます。

  • SFLPAG
  • SFLSIZ
  • SFLLIN
  • SFLINZ
  • SFLCLR
  • SFLDLT
  • SFLEND
  • SFLDROP
  • SFLFOLD
  • SFLMSGRCD
  • SFLMSGKEY
  • SFLPGMQ

REF / REFFLDの解決

参照先PFのDDSソースを選択する方法と、IBM iへSSH接続して属性を取得する方法があります。

取得対象には、桁数、データ型、小数桁、TEXT、列見出し、編集コードなどが含まれます。

TOBiプロジェクト内に参照元PFのDDSも配置されている場合は、ローカルソースから解決できます。

QDDSSRC/
  ├─ CUSTPF.pf
  └─ CUSTDSP.dspf
          └─ REFFLD(CUSTCD CUSTPF)

ローカルに参照元がない場合は、IBM iから取得する方法も選択できます。

配置警告

DDS特有の開始属性文字、終了属性文字、DBCSのSO/SIを考慮し、次の問題を警告します。

  • フィールド本体の重なり
  • 属性文字を置く桁の不足
  • 1行目1桁目への不正配置
  • データ型ごとの画面桁数上限超過

コンパイル前に、画面上の配置問題を見つけやすくします。

Excel出力

表示中の画面イメージをExcelへ出力できます。

  • テキストとフィールドの配置
  • 色や表示属性
  • 罫線
  • WINDOW、WDWBORDER、WDWTITLE
  • 合成表示の重ね順

画面仕様書の作成やレビュー資料として利用できます。

TOBi連携時に想定する開発フロー

実際の作業を、もう少し具体的に整理すると次のようになります。

新規画面を作成する場合

  1. TOBiプロジェクト内に .dspf ファイルを追加する
  2. 必要なビルドルールや属性を設定する
  3. DSPF Screen Designerでレコードフォーマットを作成する
  4. テキスト、フィールド、サブファイル、罫線を配置する
  5. DDS差分を確認する
  6. Gitへコミットする
  7. TOBiでビルドする
  8. IBM i上で表示と入出力を確認する

既存画面を変更する場合

  1. Gitブランチを作成する
  2. 対象DSPFをデザイナーで開く
  3. 合成表示や標識切り替えで現状を確認する
  4. 配置や属性を変更する
  5. 配置警告とインポート結果を確認する
  6. 保存前のDDS差分を確認する
  7. RPG側の処理も必要に応じて変更する
  8. TOBiで対象をビルドする
  9. IBM i上でテストする
  10. DSPFとRPGをまとめてレビューする

Code for IBM iとの連携も可能

TOBiを使うプロジェクト管理とは別に、IBM i上のソースメンバーを直接扱う運用にも対応しています。

設定を有効にすると、Code for IBM iのObject Browserで .DSPF メンバーを右クリックし、デザイナーで開けます。

{
  "ibmi-dspf.integration.codeForIbmiContextMenu": true
}

この場合は、Code for IBM iを通じてIBM i上のソースメンバーを開き、保存時にリモートへ書き戻します。

そのため、次の2つの運用を選べます。

運用 主な流れ
TOBi・Git中心 ローカルまたはIFS上の .dspf を編集し、TOBiでビルド
メンバー中心 Code for IBM iまたは独自ブラウザーからIBM iメンバーを直接編集

チームのソース管理方針に合わせて使い分けられます。

拡張機能独自のIBM i接続機能

本拡張機能には、独自の接続プロファイルとオブジェクトブラウザーもあります。

接続プロファイル
  └─ ライブラリー
       └─ ソースファイル
            └─ メンバー

IBM i側では、SSHとPASE環境の db2util を使用します。

ls /QOpenSys/pkgs/bin/db2util

db2util が未導入の場合は、環境に応じてRPM/yumまたはACSのOpen Source Package Managementから導入します。

接続プロファイルでは、ホスト、ポート、ユーザー、認証方式のほか、db2util のパスや作業ライブラリーなどを接続先ごとに管理できます。

ただし、TOBiプロジェクト内のローカル .dspf を編集するだけであれば、本拡張機能からIBM iへ接続する必要はありません。

利用時の注意点

TOBiのビルド結果を保証する機能ではない

本拡張機能はDDSソースを編集しますが、TOBiのルール、コンパイルパラメーター、IBM i上のオブジェクト生成結果を保証するものではありません。

保存後は、必ずTOBiによるビルド結果とIBM i上の実画面を確認してください。

未対応キーワードがある

一部のDDSキーワードや複雑な記述には対応していません。

未対応キーワードを含む行でも、編集していない行は元の内容を保持する方針ですが、保存前の差分確認を推奨します。

最初は閲覧専用で試す

既存資産へ導入する場合は、設定 ibmi-dspf.readOnly を有効にし、まず画面表示、合成表示、標識切り替え、Excel出力から試す方法が安全です。

{
  "ibmi-dspf.readOnly": true
}

Git管理下で利用する

TOBiと組み合わせる場合は、DSPFもGit管理し、変更前の状態へ戻せる環境で使用することを推奨します。

git status
git diff -- QDDSSRC/SAMPLE.dspf

まとめ

TOBiを利用すると、IBM iのRPG、CL、DDSをGit管理し、依存関係を含めてビルドできるようになります。

そこへDSPF Screen Designerを組み合わせることで、DSPFについては、DDSソースを維持したまま画面イメージで確認・編集できます。

VSCode
  ├─ RPG・CLの編集
  ├─ DSPFの視覚編集
  ├─ Gitによる変更管理
  ├─ DDS差分の確認
  └─ TOBiによるビルド
          ↓
        IBM i

IBM iの資産やDDSを捨てて別の仕組みへ置き換えるのではなく、既存資産を活かしながら、開発環境と作業手順を現代化することを目指しています。

興味を持っていただけた方は、次の案内をご確認ください。

  • 配布・試用案内:検討中
  • 問い合わせ・フィードバック:s_nagao@i-o.co.jp

参考資料

3
2
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
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?