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

0
Posted at

IBM i のディスプレイファイル(DSPF)は、画面上の配置だけでなく、
DDSの固定桁、条件標識、継続行、キーワードの記述位置なども意識して編集する必要があります。

これまでの IBM i DSPF Screen Designer は、DSPFを画面イメージとして表示し、
フィールドや文字定数、罫線、属性などを視覚的に編集する機能を中心としていました。

今回、新たに DDS専用のソースエディタを追加しました。

これは、単にVSCode標準のテキストエディタへ切り替える機能ではありません。

DDSの固定桁編集を支援するために、次の機能を備えた専用エディタです。

  • 桁ルーラー
  • 上書きモード
  • 欄スナップ
  • DDS入力規則のリアルタイム検証
  • キーワード補完
  • SEU風のF4プロンプト
  • カーソル位置に応じた欄ヘルプ
  • 文字列検索
  • 継続行への分割
  • SEU風カーソル
  • グリッド表示
  • ダークモード
  • IBM iコンパイル
  • コンパイルエラーの行・桁表示

画面設計、DDS編集、差分確認、IBM iコンパイル、
エラー修正までを、同じDSPF Screen Designer内で行えることを目指した機能です。


従来の「ソースで開く」と何が違うのか

IBM i DSPF Screen Designerには、以前から次のコマンドがありました。

IBM i DSPF: テキストエディタで開く

これは、デザイナーで開いているDSPFを、VSCode標準のテキストエディタへ戻すための機能です。

今回追加したDDSソースエディタは、それとは別の機能です。

デザイナー内のツールバーにある次のボタンで切り替えます。

📄 ソース

ソース表示中は、ボタンが次の表示に変わります。

🖥 画面

つまり、今回の機能では同じデザイナータブの中で、次の2つの表示を切り替えます。

画面イメージ
    ⇅
DDS専用ソースエディタ

VSCode標準エディタへ開き直すのではなく、画面イメージとDDS編集面が一体化している点が大きな違いです。

[画面イメージとDDSソースエディタの切り替え]メイン画面.png
ソース編集画面.png


DDSは「普通のテキスト」として編集しにくい

DDSは、自由形式のソースではありません。

位置によって意味が決まる固定形式であり、例えば次のような情報が特定の桁に配置されます。

  • 条件標識
  • 名前
  • 参照
  • 長さ
  • データ型
  • 小数桁
  • 用途
  • キーワード

通常のテキストエディタで文字を挿入すると、後続の文字が右へずれます。

DDSでは、1文字ずれただけでも別の欄として解釈され、
コンパイルエラーや意図しない定義になる可能性があります。

また、日本語の全角文字では、表示上の文字数とDDS上で消費する桁数が一致しません。

そこで専用エディタでは、SEUに近い感覚で固定桁を維持しながら編集できるようにしています。


1. 上書きモードを既定にした

DDSソースエディタは、既定で上書きモードになっています。

Insertキー

で、上書きモードと挿入モードを切り替えます。

通常の文章編集では挿入モードが自然ですが、固定桁のDDSでは、
文字を挿入して後続桁をずらすよりも、現在の桁を置き換える操作のほうが安全です。

カーソルもSEU風に表示されます。

モード カーソル
上書き 下線 _
挿入

全角文字の上では、カーソルも2桁幅で表示されます。


2. 全角文字をDDS上の2桁として扱う

専用エディタでは、全角文字を半角2桁分として扱います。

IMEで確定した文字列も同様です。

例えば、文字定数に日本語を入力した場合も、
表示上の文字数ではなくDDS上の実際の占有桁を基準として編集します。

商品名

は3文字ですが、DDS上では全角文字として6桁分を使用します。

さらにDDSの実桁計算では、SO/SIも考慮します。

このため、全角文字を入力したことで、
後続の行・桁・キーワード欄が意図せずずれることを防ぎやすくなっています。


3. Tabで次のDDS欄へ移動できる

次のキーで、DDSの欄単位にカーソルを移動できます。

Tab
Shift + Tab
キー 動作
Tab 次の欄の開始桁へ移動
Shift+Tab 前の欄の開始桁へ移動

空白を何文字も入力して位置を合わせる必要がありません。

また、行末でEnterを押すと、新しい行へA仕様の雛形が入ります。

DDSの桁位置を意識しつつ、入力操作そのものは簡略化しています。


4. 桁ルーラーとグリッド表示

ソース編集面には桁ルーラーが表示されます。

さらに、ステータスバー左端の次のチェックをオンにすると、グリッド表示モードになります。

グリッド

グリッド表示では、次のガイドを確認できます。

  • DDS各欄の境界線
  • 80桁目の赤い限界線

設定は保存されるため、次回も同じ表示状態で開けます。

固定桁ソースでは「今どの欄を編集しているのか」が重要です。桁ルーラーと境界線によって、視覚的に欄位置を確認できます。


5. DDS入力規則をリアルタイムに検証する

ソースを入力すると、DDSの入力規則をリアルタイムで検証します。

主な検証対象は次のとおりです。

  • 80桁制限
  • SO/SIを含む実際の占有桁
  • 欄ごとの許容文字
  • 条件標識の書式
  • 引用符の閉じ忘れ
  • 各欄の値として許可されているか

問題がある場合は、次の場所に表示されます。

  • ソース上の波線
  • 行番号横のガターに
  • 検証結果ペイン
  • ステータスバー直上の警告バー

警告バーには、入力をブロックした理由が全文表示されます。長いメッセージは折り返され、×で閉じられます。

既定では、入力規則に違反する入力をブロックします。

設定で次をオフにすると、入力は許可し、警告だけを表示できます。

違反入力をブロック

作業途中では一時的に不完全な行を入力したい場合もあるため、厳格な編集と警告中心の編集を切り替えられます。

[入力補助エラー]ソース編集時の入力補助(80桁オーバー).png


6. DDSキーワードを補完する

機能欄で英字を2文字入力するか、次のキーを押すと、DDSキーワードの候補を表示します。

Ctrl + Space

候補には次の情報が表示されます。

  • キーワード名
  • 説明
  • 引数のヒント
  • 対応状況

対応状況は、例えば次のタグで区別されます。

対応済み
認識のみ

拡張機能が画面表示やプロパティ編集まで対応しているキーワードなのか、ソースとして認識するだけなのかを確認できます。


7. SEU風のF4プロンプト

カーソルのある行で次のキーを押すと、SEU風のプロンプトを開きます。

F4

DDSの1行を欄ごとのフォームへ分解し、入力できます。

SEUのDPプロンプトに近い考え方です。

各欄には?があり、クリックすると許容値の一覧を表示します。値をクリックすれば、そのまま欄へ入力できます。

入力中は、組み立て後のDDS行をプレビューできます。

空行でF4を押した場合

空行では、次のような雛形を選択できます。

  • レコード行
  • フィールド
  • 文字定数
  • ファンクションキー
  • SFL/CTL一式

サブファイル制御レコードなどをゼロから固定桁で入力する負担を減らせます。

コメント行でF4を押した場合

コメント行では、次の項目を編集する簡易フォームになります。

  • 順序番号
  • コメント本文

[プロンプト入力画面表示]F4でプロンプト画面.png


8. カーソル位置の欄ヘルプ

次のキーで、現在のカーソル位置に対応する欄のヘルプを表示できます。

Shift + F1

表示される内容は次のとおりです。

  • 欄の名称
  • 欄の説明
  • 許容値
  • 条件標識欄で使用中の標識一覧

条件標識欄では、現在のDSPFで使用されている標識がチップとして表示されます。

ヘルプはEscで閉じます。

DDSの欄位置を暗記していなくても、編集位置に応じた説明をその場で確認できます。

[ヘルプ画面表示]!ヘルプ機能.png


9. 文字列検索

DDSソース内の検索には、次のキーを使用します。

Ctrl + F

主な動作は次のとおりです。

  • ヒット件数を表示
  • Enterで次の一致へ移動
  • Shift+Enterで前の一致へ移動
  • 現在の一致箇所をマーカー表示

通常のVSCode操作に近い感覚で、フィールド名、レコード名、キーワード、標識などを検索できます。


10. 右クリックメニュー

ソース上を右クリックすると、クリックした位置に応じて次の操作を選べます。

  • プロンプト表示
  • 欄ヘルプ表示
  • キーワード補完
  • 継続行に分割
  • 検索

メニューの見出しには、クリックした位置の行・桁・欄名が表示されます。

現在の文脈で使用できない操作は無効表示されます。

ショートカットを覚えていない場合でも、右クリックから機能を探せます。


11. ソース編集に集中できる画面構成

DDSソース表示へ切り替えると、右側のプロパティパネルと標識ペインは自動的に折りたたまれます。

縦に長いソース編集面と重ならないようにするためです。

画面イメージへ戻すと、折りたたむ前の状態へ復元されます。

さらに、ステータスバーの次のボタンで文字サイズを変更できます。

A−
A+

設定範囲は11~20px、既定値は13pxです。

次のボタンでは、ダークモードとライトモードを切り替えます。

🌙
☀

フォントサイズとテーマは保存されます。

画面イメージとソースを切り替えても、ソース側のスクロール位置とカーソル位置は前回の場所へ復元されます。


12. デザイナー編集とソース編集を同じUndo履歴で扱う

ソースエディタで行った変更は、自動的にデザイナーのメンバー文書へ反映されます。

変更するとタブに未保存マークが付き、次の操作で保存します。

Ctrl + S

ソース側の編集も、画面イメージ側の次のボタンでまとめて戻したり、やり直したりできます。

Undo
Redo

画面上でフィールドを移動した変更と、ソース側でDDSを直接直した変更を、同じ編集対象として管理します。


13. 編集しなければ原文は1バイトも変えない

専用ソースエディタを開いただけでは、DDSソースを書き換えません。

編集しない限り、次の内容を含めて原文を1バイトも変更しない方針です。

  • コメント
  • 順序番号欄
  • 元の空白
  • 未対応キーワード
  • 拡張が認識しない記述

既存のDSPFには、会社や担当者ごとの記述形式が残っていることがあります。

デザイナーやソースエディタで開いただけでソース全体を再生成せず、実際に編集した箇所を中心に変更します。


14. 保存前に差分を確認する

ソース編集後は、保存前に差分を確認できます。

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

比較対象は、開いているDSPFによって変わります。

対象 比較元
IBM iメンバー サーバー上の現在の内容
ローカル.dspf ディスクに保存済みの内容

右側には、現在保存しようとしている内容が表示されます。

差分確認だけでは保存や書き戻しは実行されません。

IBM iメンバーの書き戻し確認で「差分を確認」を選んだ場合は、差分を表示したあと、改めて書き戻すか確認されます。

[修正差分表示]修正箇所の差分表示.png


15. IBM iで直接コンパイルできる

今回のソース編集機能は、編集だけで終わりません。

DSPFをIBM i上でCRTDSPFし、結果をソースエディタへ表示できます。

対象は次の両方です。

  • オブジェクトブラウザーで開いたIBM iメンバー
  • ローカルディスク上の.dspf

実行方法

  • オブジェクトブラウザーでメンバーを右クリックして「コンパイル」
  • デザイナータブ右上のボタン
  • エクスプローラーで.dspfを右クリックして「コンパイル」

16. コンパイルエラーをソースの該当行・桁へ表示する

コンパイルが終了すると、自動的にDDSソースエディタが開きます。

エラーがある場合は、最初のエラー行へ自動移動します。

検証結果ペインには、次のグループが表示されます。

コンパイルエラー
コンパイル警告

一覧をクリックすると、該当行へ移動します。

ソース上では、該当行のガターにが表示されます。

マウスを乗せると、エラーメッセージを確認できます。

表示例は次のとおりです。

121行目 7-16桁:
CPD7850 オプション標識を使用することはできない。

次の情報を同時に確認できます。

  • 行番号
  • 桁範囲
  • IBM iメッセージID
  • メッセージ本文

コンパイルリストだけを別画面で読み、手作業でソース行を探す必要を減らせます。

スクリーンショット挿入位置
![コンパイルエラーをDDSソースの該当行へ表示](./images/dspf-compile-error.png)


17. コンパイルリスト全文も確認できる

次の操作で、コンパイルリスト全文を読み取り専用タブに表示できます。

IBM i DSPF: コンパイルリストを開く

通知に表示される「コンパイルリストを開く」からも実行できます。

リストの先頭には次の情報が追加されます。

  • 実行日時
  • 実行したCL
  • エラー明細の取得元
  • 補助プログラムを使用したか
  • イベントファイルかリスト解析か

ソース上のエラー表示と、従来型のコンパイルリスト確認を併用できます。


18. デザイナー、ソース編集、コンパイルが一つの流れになった

今回の機能追加によって、DSPF開発を次の流れで行えるようになりました。

画面イメージでレイアウトを編集
        ↓
📄 ソースでDDSを直接調整
        ↓
リアルタイム検証
        ↓
F4プロンプト・補完・欄ヘルプ
        ↓
保存前の差分確認
        ↓
Ctrl+Sで保存/書き戻し
        ↓
▶ CRTDSPF
        ↓
エラーを該当行・桁へ表示
        ↓
修正して再コンパイル

従来は、画面デザイナー、SEU、コンパイルリスト、
5250画面などを行き来していた作業を、VSCode上へまとめることを目指しています。


TOBiを使う場合との使い分け

TOBi(The Object Builder for i)を利用している環境では、
プロジェクト全体や依存関係を含む通常のビルドはTOBiが担当します。

一方、今回追加したコンパイル機能は、編集中のDSPFを素早く確認する用途に向いています。

用途 適した機能
DSPF単体の構文確認 DSPF Screen Designerのコンパイル
エラー行・桁の即時確認 DSPF Screen Designer
RPG・CL・PFを含む依存ビルド TOBi
Git管理されたプロジェクト全体のビルド TOBi
画面レイアウト修正直後の確認 DSPF Screen Designer

専用コンパイル機能がTOBiを置き換えるものではありません。

DSPF単体の編集サイクルを短くし、最終的なプロジェクトビルドはTOBiで行う、という使い分けができます。


注意事項

半角カナの表示

ソースメンバーとIBM iジョブのCCSIDの組み合わせによっては、コンパイルリスト内の半角カナが文字化けして見えることがあります。

エラーメッセージ本文や行・桁の判定には影響しません。


まとめ

今回追加したのは、単なる「DDSを文字で編集できる画面」ではありません。

IBM iの固定形式DDSを意識した、次の機能をまとめた専用開発環境です。

  • 固定桁を維持する上書き編集
  • 全角文字とSO/SIを考慮した桁計算
  • DDS欄単位のカーソル移動
  • リアルタイム入力検証
  • キーワード補完
  • SEU風F4プロンプト
  • 欄ヘルプ
  • 継続行への分割
  • 差分確認
  • IBM iへの保存・書き戻し
  • コンパイル
  • エラーの行・桁表示
  • コンパイルリスト表示

IBM i DSPF Screen Designerは、画面を視覚的に設計するだけのツールから、
画面設計とDDSソース開発を往復しながら、
コンパイルエラーまで確認できるDSPF開発環境
へ拡張しました。

まだすべてのDDS記述や環境を完全に保証するものではありませんが、
既存資産をできるだけ保持しながら、
VSCode上でDSPFを開発しやすくすることを目指して改善を続けています。


関連記事


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