はじめに
ここまでの記事で紹介した内容は、VS Code側は特にライセンス追加無しで利用可能な範囲のものでした。
(DBBユーザー・ビルドについては、z/OS側で有償のDBBという製品導入/構成が必要ですが、VS Code側はZowe Explorer, Z Open Editorの基本機能で利用可能です。)
Z Open Editorはこれまで紹介してきたような基本機能に加え、Advanced Capabilityと呼ばれる追加機能が提供されています。これは、IDz(IBM Developer for z/OS)のライセンスをVS Code側に認識させることで利用可能となる機能です。
ここでは、Advanced Capabilityとして提供される機能のいくつかを取り上げて試してみます。
関連記事
VS Code - z/OS連携 (1)概要
VS Code - z/OS連携 (2)基本構成
VS Code - z/OS連携 (3)基本操作: ソース編集
VS Code - z/OS連携 (4)基本操作: JES操作など
VS Code - z/OS連携 (5)DBBユーザー・ビルド
VS Code - z/OS連携 (6)Advanced Capability
VS Code - z/OS連携 (7)AIエージェントの活用: 概要
VS Code - z/OS連携 (8)AIエージェントの活用: 実践編
Advanced Capability 概要
参考: Advanced Capability - Overview
まず、Advanced Capabilityを利用するためには以下のいずれかの有償製品のライセンスが必要になります。
- IDz Select (IBM Developer for z/OS Select)
- IDz EE (IBM Developer for z/OS Enterprise Edition)
- ADFz (IBM Application Delivery Foundation for z/OS)
2026年5月時点では以下の機能が提供されており、このうち末尾の★が付いた機能を利用したい場合は IDz EE もしくは ADFzのライセンスが必要です(IDz Selectでは利用不可)。
- Remote Connection Emulator: 3270エミュレーター機能(RSE profileのみ)
- z/OS Resources table: MVSデータセット、USSファイル、JOBなどをISPFライクなテーブル形式のビューで表示する機能
- Data Elements view: COBOL, PL/Iプログラム中のデータ項目を表形式で表示する機能
- Program Control Flow Browser: COBOL, PL/Iのソースを分析し、制御フローをインタラクティブなグラフで表示する機能
- Data Flow Browser for COBOL: COBOLのソースを分析し、データのフローをインタラクティブなグラフで表示する機能
- Preprocessor support for COBOL and PL/I: COBOL, PL/IにおけるPreprocessorのサポート機能
- HLASM macros support: HLASMのマクロサポート機能
- Language Detection for data set members: リモートのファイルオープン時の言語検出機能(RSE profileのみ)
- ★Linting with IBM ZCodeScan: コーディング・ルールに合致しているかをチェックする機能
- ★Dependency Based user build and advanced error reporting: DBBユーザー・ビルドのエラー結果を取り込んで"問題"ビューに統合する機能
- ★Agent Mode: AIエージェントからZ Open Editorの各種操作を行うためのMCPサーバー機能
有効化
ここで取り上げている、Advanced Capabilityに含まれる機能は、ライセンスを有効化しないと利用できません。ここでは、Advanced Capabilityの機能を使用するために必要な手順を示します。
参考: Activating advanced capabilities
VS CodeにZ Open Editorをインストールすると、以下のようなIBM Z Open Editorの"ようこそ"画面が表示されます。
これを下の方にスクロールしていくと、高度な機能(Advanced Capability)についての項目があります。

Z Open Editorを最初にインストールしてから90日間は試用期間ということで、Advanced Capabilityが有効化されています(アクティブ状態)。
90日間経過すると試用期間終了となるため"失効"状態となり、Advanced Capabilityは利用不可となります。

正規のライセンスを適用してAdvanced Capability有効化する方法としては以下の2つがあります。
(1) RSE APIによるActivation Keyの自動更新
これは、RSE profile経由でz/OSに接続する構成をとる場合に利用可能な方法です。
まず、適切な手順でz/OS側にRSE APIの設定を行う必要があります。特に、以下の箇所に記載されている設定が必要になります。
参考: Automatic Activation
- Install and complete basic configuration of z/OS host component IBM z/OS Explorer Extensions,
FMID HHOPxxx. For more information, see Installing and configuring the host components.- Install and complete basic configuration of z/OS host component IBM Remote System Explorer API (RSE API),
FMID HAMAxxx.- Make sure z/OS Explorer knows where to find z/OS Explorer Extensions. Depending on where z/OS Explorer Extensions was installed, this detection is automatic, or done via an environment variable in the configuration file rse.env.
- Allow z/OS Explorer Extensions to register as ADFz or IDzEE. For more information, see Product enablement in IFAPRDxx.
- Allow z/OS Explorer Extensions to write SM122 records to track that it provided an activation token.
z/OS側で上の構成を行ったうえで、VS Code側ではRSE Profileを作成します。
RSE Profile例:
...
"profiles": {
"odeinst1": {
"properties": {
"host": "odeinst1",
"rejectUnauthorized": false
},
"profiles": {
...
"rse": {
"type": "rse",
"properties": {
"port": 8195,
"encoding": "IBM-1399",
"jobEncoding": "IBM-1399",
"basePath": "rseapi",
"protocol": "https"
},
"secure": ["user", "password"]
}
...
RSE Profile経由でz/OSに接続したタイミングでActivation Keyの更新後行われ、そこから30日間Advanced Capabilityが有効化されます。
RSE Profile接続時のZ Open Editorのログ出力例:
2026-05-04T13:58:26.922+09:00 INFO : CRRZG5147I プロファイル"odeinst1.rse"を使用して、高度な機能のアクティベーションを更新しました。 このステータスは今後30日間有効となる。
更新後のステータス表示例:
※有効期限が最終更新日から30日後の日付に設定される
(2) Acitivation Keyの手動インポート
まず、Shopz、もしくは Passport Advantage経由でActivation Keyを入手する必要があります。
(Activation Keyの情報はPDFで提供される場合があり、その場合、Activation Keyの情報をtxtファイルにコピーしてからインポートすることになります。詳細は入手した手順に従ってください。)
Z Open Editor "ようこそ" 画面の "高度な機能"の項目の、"アクティベーションキーの更新"をクリックします。

以下のポップアップが出るので、BrowseをクリックしてActivation Keyのファイルを選択し、Importします。

完了すると、以下のようにImportされたActivation Keyが表示され、有効化されたことが確認できます。

※上の例はIBM Internalの特殊なActivation Keyを使用している例です。
Advanced Capability 利用例
ここでは、Advanced Capabilityに含まれる機能のうちいくつかを抜粋して試してみます。
Remote Connection Emulator (3270エミュレーター機能)
参考: Launching a 3270 emulator from Zowe Explorer
VS Codeから3270エミュレーターを起動して使用することができます。
この機能はRSE profileでのみ利用可能です。
(z/OSMF profileではサポートされませんのでご注意ください)
※そもそもVS CodeをUIとして使用するということは、旧来から使用されている3270ベースのUIから脱却してモダナイゼーションを進めようという背景があることも考想定されます。しかし、一部の操作についてはどうしても3270ベースの操作が残ってしまう状況があることも考えられます。そんな場合にこの機能が使えると便利かもしれません。
z/OS側構成補足
この機能はz/OS側ではRSE提供のRCE(Remote Connection Emulator)という機能を使うことになりますので、z/OS側ではそのためのセットアップをしておく必要があります。
VS Codeからの接続はHTTPではなくHTTPSでの通信が必須、つまり、TLS通信が必須ということになりますので、証明書の管理などが必要になります。
ちなみにクライアント側の実体としてはブラウザベースのアプリケーションとなっており、VS Codeから3270エミュレーター機能を使用する際にもVS Codeが内部的に持っているブラウザ機能が使用されることになります。
このような背景があることから、動かすまでに躓きやすいポイントがありますので、注意すべき設定箇所について補足しておきます(基本的には公式ドキュメントの記述に従ってセットアップするようにしてください)。
RSE API構成ファイル(rseapi.env)
参考: rseapi.env, the RSE API configuration file
RSE API構成ファイルにてRCE関連のパラメーターを設定する必要があります。
RSE API 構成ファイル設定例
#
# rseapi.env - RSE API environment variables
#
#=============================================================
# optional definitions, defaults provided if not specified
#=============================================================
# Directory where Java is installed (default set in rse.env)
#-------------------------------------------------------------
JAVA_HOME=/usr/lpp/java/java21/current_64/
# RSE API server and JES Job Monitor ports
#-------------------------------------------------------------
RSEAPI_PORT_HTTP_1="8195"
RSEAPI_PORT_SHUTDOWN_1="8196"
RSEAPI_JMON_PORT_1="8115"
# Encrypted communication details
#-------------------------------------------------------------
# Use this for a keystore file or a RACF keyring owned by the
# started task user ID
#RSEAPI_KEYRING="RSEDRING"
RSEAPI_KEYRING="RSEDRING2"
# For JCERACFKS keystore
#RSEAPI_KEYSTORE_FILE="safkeyringjce://$(id -un)/$RSEAPI_KEYRING"
#RSEAPI_KEYSTORE_PASS="password"
RSEAPI_KEYSTORE_TYPE="JCERACFKS"
# Options to enable SAF JWT support
# Default to true.
#-------------------------------------------------------------
#RSEAPI_SAF_JWT=true
RSEAPI_SAF_JWT=false
# To enable the Common Properties service, this variable needs to
# set to a shared UNIX directory on the system.
#-------------------------------------------------------------
RSE_COMMON_PROPERTIES=/var/rseapi_common
# Disable data set migration, recall and deletion of migrated data set.
# The default value is false.
#-------------------------------------------------------------
DISABLE_MIGRATE_HRECALL_HDELETE=true
# The host port to use when creating a connection from the server to
# the TN3270 emulator.
# The default is 23
#-------------------------------------------------------------
RCE_PORT=992
# Whether or not to use a secure connection when connecting from the
# server application to the TN3270 emulator.
# The default is false.
#-------------------------------------------------------------
RCE_SECURITY=true
CATALINA_OPTS="$CATALINA_OPTS -Xms256m -Xmx512m -Xquickstart -Xscmx30m"
CATALINA_OPTS="$CATALINA_OPTS -Xshareclasses:nonFatal,cacheDirPerm=0777,cacheDir=/javasc/rseapi,name=rseapicache"
CATALINA_OPTS="$CATALINA_OPTS -Xlp:objectheap:pagesize=1m,warn,pageable -Xlp:codecache:pagesize=1m,pageable"
RSE_COMMON_PROPERTIES=/var/rseapi_common
パラメーター補足:
-
RCE_PORT=992: RCE経由で接続する先のTN3270サーバーのPort番号を RCE_PORTで指定しています(この環境はデフォルトの23番ポートとは異なるため)。 -
RSEAPI_SAF_JWT=false: このパラメーターは明示指定しない場合デフォルトでtrueが設定されます。これがtrueの場合、SAF JWT Supportのセットアップを行う必要があります(Define JSON Web Token (JWT) support for RSE)。今回はJWTは使用しない想定のため、明示的にflaseを指定して無効化しておきます。 -
RSEAPI_KEYRING="RSEDRING2": TLSのサーバー証明書を保持するKeyRingを指定します。このKeyRing、証明書作成についてはこのあと補足します。
サーバー証明書
参考: Security updates
※上のサンプルだと一度自己署名証明書を作ってそれを普通の証明書に変更する手順になっており、イマイチなので少し手順は変えています。
RACFを認証局としたCA証明書は既に存在するものとします。
CA証明書: VSICA
RACDCERT CERTAUTH LIST(LABEL('VSICA'))
Digital certificate information for CERTAUTH:
Label: VSICA
Certificate ID: 2QiJmZmDhZmjgeXiycPB
Status: TRUST
Start Date: 2026/03/16 13:00:00
End Date: 2030/02/17 12:59:59
Serial Number:
>00<
Issuer's Name:
>CN=172.26.1.2_SELF_CACERT.OU=ZOSVSI.O=International Business Machines<
>.C=US<
Subject's Name:
>CN=172.26.1.2_SELF_CACERT.OU=ZOSVSI.O=International Business Machines<
>.C=US<
Subject Key ID:
7B:28:AF:D9:27:95:88:07:94:73:F9:02:3A:41:E9:06:
95:B2:21:25
Signing Algorithm: sha256RSA
Key Usage: HANDSHAKE, DATAENCRYPT, DOCSIGN, CERTSIGN
Key Type: RSA
Key Size: 2048
Private Key: YES
Certificate Fingerprint (SHA256):
2B:21:FA:7B:6A:6F:52:95:04:9F:B3:C4:22:46:2B:85:
49:69:83:E2:13:03:D6:32:1C:76:CC:FE:76:AA:2A:A7
Ring Associations:
Ring Owner: SYSTEM
Ring:
>TELNET_RING<
Ring Owner: SYSTEM
Ring:
>FTPS_RING<
Ring Owner: IZUSVR
Ring:
>ZOSMF_RING<
Ring Owner: CICSUSER
Ring:
>CICSRNG<
Ring Owner: ZOSCSRV
Ring:
>ZCONNECT<
Ring Owner: STCDBG
Ring:
>DBGRING<
Ring Owner: STCRSE
Ring:
>RSEDRING<
Ring Owner: STCDBG
Ring:
>EQAPROF_Ring<
Ring Owner: IBMUSER
Ring:
>IMSRING<
Ring Owner: STCDB2
Ring:
>DB2RING<
ホスト名、ドメイン名を確認しておきます。
USSのシェルでhostnameコマンドでホスト名を確認します。
IBMUSER:/u/ibmuser # hostname
STD1.example.com
CA証明書VSICAで署名したサーバー証明書ZOSEXPL2を新規に作成します。
RACDCERT ID(STCRSE) GENCERT SUBJECTSDN(CN('TCRSE_ZOSEXPL2') OU('ZOSVSI') O('International Business Machines') C('US')) SIZE(2048) SIGNWITH(CERTAUTH LABEL('VSICA')) WITHLABEL('ZOSEXPL2') NOTAFTER(DATE(2030/02/16)) ALTNAME(IP(10.244.xx.xx) DOMAIN('*.example.com'))
ここで、ALTNAMEにてDOMAIN('*.example.com')を指定しています。このドメイン名はPCからRSE APIにアクセスする際のホストのドメイン名を指定しておく必要があります。
(IPアドレスの末尾は意図的にxxでマスキングしています)
作成したサーバー証明書 'ZOSEXPL2'
RACDCERT ID(STCRSE) LIST(LABEL('ZOSEXPL2'))
Digital certificate information for user STCRSE:
Label: ZOSEXPL2
Certificate ID: 2Qbi48PZ4sXp1uLF59fT8kBA
Status: TRUST
Start Date: 2026/04/07 00:00:00
End Date: 2030/02/16 23:59:59
Serial Number:
>0C<
Issuer's Name:
>CN=172.26.1.2_SELF_CACERT.OU=ZOSVSI.O=International Business Machines<
>.C=US<
Authority Key ID:
7B:28:AF:D9:27:95:88:07:94:73:F9:02:3A:41:E9:06:
95:B2:21:25
Subject's Name:
>CN=TCRSE_ZOSEXPL2.OU=ZOSVSI.O=International Business Machines.C=US<
Subject's AltNames:
IP: 10.244.xx.xx
Domain: *.example.com
Subject Key ID:
0E:24:81:EA:C2:6B:74:1F:2B:34:71:30:49:53:BE:67:
00:B5:D8:9D
Signing Algorithm: sha256RSA
Key Type: RSA
Key Size: 2048
Private Key: YES
Certificate Fingerprint (SHA256):
21:00:AF:F2:A9:F1:CD:E0:12:75:26:37:F9:66:C0:E7:
68:84:F8:5E:42:10:43:C9:C7:34:1D:70:84:DC:3E:05
Ring Associations:
*** No rings associated ***
KeyRingを作成して証明書を紐づけます。
RACDCERT ID(STCRSE) ADDRING(RSEDRING2)
RACDCERT ID(STCRSE) CONNECT(RING(RSEDRING2) LABEL('VSICA') CERTAUTH)
RACDCERT ID(STCRSE) CONNECT(RING(RSEDRING2) LABEL('ZOSEXPL2') DEFAULT)
SETROPTS RACLIST(DIGTRING,DIGTCERT) REFRESH
KeyRing ’RSEDRING2’
RACDCERT ID(STCRSE) LISTRING(RSEDRING2)
Digital ring information for user STCRSE:
Ring:
>RSEDRING2<
Certificate Label Name Cert Owner USAGE DEFAULT
-------------------------------- ------------ -------- -------
VSICA CERTAUTH CERTAUTH NO
ZOSEXPL2 ID(STCRSE) PERSONAL YES
PC側構成補足
PC側では3270エミュレーター機能を動かす際に、VS Codeが内部的に保持しているブラウザが使用されます。TLS通信時のサーバー証明書のチェック機能はこのVS Code内部ブラウザの挙動に依存します。デフォルトでは以下のようなチェックが行われます。
- 自己署名証明書を使っていないか(いわゆるオレオレ証明書はNG)
- サーバー証明書に署名しているCA証明書が信頼されるルート証明機関のものとして認識されているか
- アクセスしているホスト名のドメイン名が、サーバー証明書に含まれるSAN(Subjects Alternate Name)に一致しているか
サーバー証明書に署名しているCA証明書'VSICA' をExport(RACDCERT EXPORT)してPCにダウンロードし、PC上に信頼されたルート証明機関として登録しておきます。
Windowsの場合: Windowsの設定で"インターネットオプション" の"コンテンツ"タブから"証明書"をクリック

"信頼されたルート証明機関"タブから"インポート"をクリック

あとはウィザードに従ってCA証明書のファイルを"信頼されたルート証明機関"としてインポートすればOK
接続例
Zowe Explorer view から RSE Profileを右クリック - [VSコードで3270エミュレータを起動する] を選択

VS Code内で3270エミュレーターが使えるようになります。

外部ブラウザーの使用
[外部ブラウザーで3270エミュレータを起動する]を選択すると、文字通り外部ブラウザ(ChromeやFirefoxなど)で3270エミュレーターを起動することもできます。
この時、たとえばChromeを使用すると、サーバー証明書に含まれるSANの情報が実際のドメイン名と一致していない場合でも、以下のような警告が出ますが、最下部のリンクから警告を無視しして無理やりアクセスすることも可能です。(上の手順の通り、きちんと証明書を作成していればこの警告は表示されないはずです)

※VS Codeの内部ブラウザでもこの警告を無視するオプションがありますが、VS Code全体に影響してしまうため推奨されません。
警告を無視して先に進むと以下のように、"保護されていない通信"という状態で3270エミュレーターが扱える状態になります。

エミュレーターの設定
右上の"プロファイルの編集"アイコンをクリックすると、エミュレータについての設定が行えます。

PCOMと類似の設定が行えますが、完全に同じとはいかず細かな制約はありそうです。

気になる点としては、例えば以下のようなことがあります。
- コードページとしては、930/939は選択できるが、1390/1399は選択肢に無い
- フォントの追加登録はできない
- LU名の明示指定ができない
z/OS Resources table
構成としては、z/OSとの接続用に z/OSMF profile もしくは RSE profileを設定していればOKです。
VS Codeのコマンド・パレットから、「IBM Z Open Editor: z/OS リソース一覧表を開く(Open z/OS Resources Table)」を選択します。

Profile選択
まず、プロファイルのビューが表示されます。ここには、zowe.config.jsonで定義してあるz/OS接続用のプロファイルが表示されますので、接続したいプロファイルをクリックします。

Resource選択
プロファイルを選択すると、どのリソース(MVS, USS, JES)にアクセスするかを選択するビューが表示されます。

MVS
Resource選択画面でMVSを選択すると、以下のようにどのデータセットを参照するかの条件を選択する画面になります。ここではフィルターを選択してみます。

追加されたフィルター(TAG.TEST01.*)を選択します。

指定したフィルターに合致するデータセットの一覧が表形式で表示されます。

ここからPDSデータセットをクリックすると、そこに含まれるメンバーの一覧が表示されますし、さらにメンバーをクリックするとそのメンバーがエディターで開きます。

このように、ISPFのパネルに似たようなイメージの表形式でMVSデータセットを扱うことができます。
列のカスタマイズや列ごとのソートも行えます。
Zowe Explorer viewからデータセットを右クリック - [表示] - [z/OSリソース表] を選択することでも表示できます。

USS
Resource選択画面でUSSを選択すると、以下のようにどのディレクトリを参照するかの条件を選択する画面になります。ここではフィルターを選択してみます。

指定したフィルターに合致するディレクトリ下の内容が表形式で表示されます。

ここからディレクトリを選択するとその選択したディレクトリの情報が表示されますし、さらにファイルをクリックするとそのファイルがエディターで開きます。

JES
Resource選択画面でJESを選択すると、以下のようにどのJOBを参照するかの条件を選択する画面になります。ここではFiltersを選択してみます。

Statusを指定します。(ここでは任意のステータスとして*を指定)

追加されたフィルター(Owner: TAG | Prefix: COB* | Status:*)を選択します。

指定したフィルターに合致するJOBの一覧が表形式で表示されます。

ここからJOBをクリックすると、そこに含まれるステップ/DDの一覧が表示されますし、さらにステップ/DDをクリックするとその内容がエディターで開きます。

Data Elements view
COBOL, PL/Iプログラム中のデータ項目を表形式で表示する機能を提供します。ローカル・ファイル、および、Zowe Explorer経由でアクセスできるリモート・ファイルの両方で有効です。
※言語が適切に認識され、COPYBOOK/INCLUDEファイルの解決ができていて、重大な構文エラーが無いことが前提です。
まずソースをエディターで開き、エディター内を右クリック - [表示(Show in)] - [「データ・エレメント」ビュー]を選択

プログラム中で使用されている変数名、および、セクション名/パラグラフ名の一覧が表形式で表示されます。

各変数名をクリックすると、ソース中で当該変数が宣言されている箇所にカーソルが移動します。COPYBOOK/INCLUDEで別ファイルを読み込んでいる場合は当該ファイルが開いてポイントしてくれます。
COPYBOOK読み込み時に、以下のようにREPLACING指定がされている場合には、置き換え後の変数名がリストされます。
...
COPY CUSTCOPY REPLACING ==:TAG:== BY ==WS-CUST==.
...
...
01 :TAG:-REC.
05 :TAG:-KEY.
10 :TAG:-ID PIC X(5).
10 :TAG:-REC-TYPE PIC X.
05 :TAG:-NAME PIC X(17).
*****05 :TAG:-ACCT-BALANCE PIC S9(7)V99 COMP-3.
05 :TAG:-ACCT-BALANCE PIC 9(7)V99.
*****05 :TAG:-ORDERS-YTD PIC S9(5) COMP.
05 :TAG:-ORDERS-YTD PIC 9(5).
05 :TAG:-ADDR PIC X(20).
05 :TAG:-CITY PIC X(14).
05 :TAG:-STATE PIC X(02).
...
この表形式のデータは以下のような操作が可能です。
- フィルターによる表示内容の制御
- 表示するカラムのカスタマイズ
- カラムごとのソート
- CSVファイルとしてエクスポート
Program Control FLow Browser
参考: Program Control Flow Browser
COBOL, PL/Iのソースを分析し、制御フローをインタラクティブなグラフで表示する機能を提供します。ローカル・ファイル、および、Zowe Explorer経由でアクセスできるリモート・ファイルの両方で有効です。
※言語が適切に認識され、COPYBOOK/INCLUDEファイルの解決ができていて、重大な構文エラーが無いことが前提です。
まずソースをエディターで開き、エディター内を右クリック - [表示(Show in)] - [プログラム制御フロー]を選択

プログラム内の、セクション/パラグラフをノードとして、どのノードからどのノードへの遷移が行われるかというのをグラフとして表示してくれます。

特定のノードを選択すると、選択したノード(セクション/パラグラフ)のソース中の位置がポイントされます。

ソースが複雑で大量のセクション/パラグラフがあると、ビジーになりがちです。その場合、特定のノードの範囲のみに絞って表示させることもできます。ノードの右側の三転リーダーをクリックすると以下のようなメニューが表示されます。

この情報は、JSON, PDF, SVG, PNG, XML, DOT(GraphViz)のファイル形式でエクスポートすることもできます。
この機能で表示される情報はいわゆるフローチャート(処理の流れを示すもの)ではありません。あくまでも、どのパラグラフからどのパラグラフへの遷移があるか、という関係性を図示しているものですのでご注意ください。
Data Flow Browser for COBOL
COBOLのソースを分析し、特定の変数に関連するデータのフローをインタラクティブなグラフで表示する機能を提供します。
ローカル・ファイル、および、Zowe Explorer経由でアクセスできるリモート・ファイルの両方で有効です。
※言語が適切に認識され、COPYBOOK/INCLUDEファイルの解決ができていて、重大な構文エラーが無いことが前提です。
まずソースをエディターで開き、参照したい変数名を選択して右クリック - [表示(Show in)] - [データフロー]を選択 (ここではWS-CUST-REC-TYPEを選択)

指定した変数名に関連するデータの流れをグラフとして表示してくれます。

各ノードは変数名、グループ(構造体)、ファイル、リテラルなどを表します。
実線矢印はデータの流れを表します。
破線矢印は要素とグループ要素の関係性(上位/下位)を表します。
ノードを選択するとそのノードの宣言に関連するソース中の位置がポイントされます。破線矢印を選択するとその関係性を示すデータ宣言のソース中の位置がポイントされます。実践矢印を選択するとデータの流れを示すソース中のステートメント(MOVE文など)の位置がポイントされます。

同じ意味合いのデータの流れが複数ある場合、例えば MOVE PARM01 TO PARM02というステートメントが複数存在する場合、変数間のデータの流れとしては同義のため1つの情報として集約されます。すなわちそれらのステートメントがどこで発生しているかを網羅的に把握するものではありません。
カウンター変数NUM-UPDATE-REQUESTSに関するデータフローの表示例:

エラー情報を格納するフィールドERR-MSG-DATA1に関するデータフローの表示例:

この情報は、JSON, PDF, SVG, PNG, XML, DOT(GraphViz)のファイル形式でエクスポートすることもできます。
★ZCodeScan
参考: Linting with IBM ZCodeScan
COBOL, PL/Iソースに対して、事前定義のコーディング・ルールに合致しているかをチェックする機能を提供します。
ローカル・ファイル、および、Zowe Explorer経由でアクセスできるリモート・ファイルの両方で有効です。
コーディング・ルール補足
ルールは製品提供のものと、ユーザーが独自に定義するカスタム・ルールがあります。
事前定義されたものとしては、Code Review, Security Reviewというカテゴリにて以下に記載されています。
IDz - Defininig Rules
例えば、分かりやすいところでいえば、以下のようなルールが定義されています。
- zcodescan.cobol.rules.RequireEndClauseRule: END句の明示指定を必須とするルール
- zcodescan.cobol.rules.NestedIfLimitRulee: IF文のネストの階層の深さを制限するルール
-
zcodescan.cobol.rules.NoDisplayRule: 本番環境での利用を想定して
DISPLAYステートメントの利用を不可とするルール
ルールによっては引数を伴うものもあります。上の2つ目のルールはIF文のネストの深さをプロパティNestingLimitで指定することができます。
カスタム・ルールは、YAMLファイル内で正規表現を用いて定義する方法と、Javaで実装する方法があります。詳細は以下のドキュメントをご参照ください。
IBM ZCodeScan custom rules
VS Code側構成
参考: Editing Rules Files in VS Code
事前準備
適用するコーディングルールの設定はYAMLファイルで行うため、YAMLファイル作成時の支援の意味で、Schemaファイルを設定しておきます。
YAML Language Support by Red HatをVS Codeにインストールします。
スキーマファイルと、対応するYAMLファイルのパターンのマッピングをVS Codeの設定ファイルに追加します。
...
"yaml.schemas": {
"https://raw.githubusercontent.com/IBM/zopeneditor-about/refs/heads/main/zcodescan/zcodescan-rules-1.3.0.json": ["*rules.yaml"],
"https://raw.githubusercontent.com/IBM/zopeneditor-about/refs/heads/main/zcodescan/zcodescan-rules-domains-1.3.0.json": ["*domains.yaml"]
}
...
ルール・ファイル作成
適用したいルール設定をまとめたファイルを作成します。ここでは、サンプルとして以下のようなsam-rules.yamlファイルを作成してみます。
rules:
- id: zcodescan.cobol.rules.RequireEndClauseRule
severity: HIGH
statements:
- name: "If"
value: true
- name: "Evaluate"
value: true
- name: "Read"
value: true
- name: "Search"
value: true
- name: "Call"
value: true
- id: zcodescan.cobol.rules.ProgramIdRule
severity: INFO
設定内容補足:
一つ目のルールzcodescan.cobol.rules.RequireEndClauseRuleはEND句の明示指定を必須とするルールで、statements:にて、IF, Evaluate, Callなど各ステートメントについてこのルールを有効化するかどうか指定しています。すべてtrueを指定しているので、いずれのステートメントでもEND句を必須としています。
2つ目のルールzcodescan.cobol.rules.ProgramIdRuleは、プログラムIDとファイル名がマッチすることをチェックするルールです。
ZAPPファイル設定
ZAPPファイルにて、上で作成したルール・ファイルを指定します。
profiles:以下に、type:zcodescanとしてルール・ファイルのパスを指定します。
...
profiles:
# User build profile example, requires IBM Dependency-Based Build v3.0.3
- name: zBuilder-userbuild
type: dbb
settings:
command: "$DBB_HOME/bin/dbb -DBB_DAEMON_HOST 127.0.0.1 -DBB_DAEMON_PORT 8180 build"
lifecycle: user
lifecycleArgs:
- "--hlq ${dbbHlq}"
- "--verbose"
- "--errPrefix ${errPrefix}" # will be ignored if Advanced Features are not available
additionalDependencies:
- "dbb-app.yaml"
logFilePatterns:
- "*.log"
- "BuildReport.html"
- "*.json"
# Custom ZCodeScan rules example
- name: zcodescan
type: zcodescan
settings:
rules:
- type: local
locations:
- "zcodescan/sam-rules.yaml"
...
ZCodeScanの実行
上で設定したルールのチェックを実行します。
対象のソースを開き右クリック - [IBM を実行してください ZCodeScan]を選択します (日本語訳がおかしくなってますが...)

ZCodeScanの結果が"問題"viewに表示されます。エラーメッセージをクリックすると、ソースコード中の該当箇所が表示されます。また、エラーメッセージを右クリック - [この IBM zCodeScan の詳細についてはこちらをご覧ください] を選択すると、該当するルールについての詳細が表示されます。

上の画面の例は、CALL文に明示的なENDが記述されていないためエラーとなっています。
★DBB User Build advanced error reporting
参考: Advanced problems view integration
DBBユーザー・ビルドのエラー結果を取り込んで"問題"ビューに統合する機能を提供するものです。従って、前提としては先の記事で示した通りDBBの設定を行ってVS Codeからユーザー・ビルドを行えることが前提です。
そのうえで、この機能を使用するためには、zapp.yamlファイルのzBuilder用のプロファイルにて、--errPrefixを指定する必要があります。
...
profiles:
# User build profile example, requires IBM Dependency-Based Build v3.0.3
- name: zBuilder-userbuild
type: dbb
settings:
command: "$DBB_HOME/bin/dbb -DBB_DAEMON_HOST 127.0.0.1 -DBB_DAEMON_PORT 8180 build"
lifecycle: user
lifecycleArgs:
- "--hlq ${dbbHlq}"
- "--verbose"
- "--errPrefix ${errPrefix}" # will be ignored if Advanced Features are not available
additionalDependencies:
- "dbb-app.yaml"
logFilePatterns:
- "*.log"
- "BuildReport.html"
- "*.json"
...
サンプル実行
例えば、以下のような単純なサンプルコードをローカルに作成してみます。
IDENTIFICATION DIVISION.
PROGRAM-ID. SAMP02.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-MESSAGE PIC X(50) VALUE
'THIS IS A TEST PROGRAM'.
* SAMPLE Error Code
01 WS-LARGE-NUMBER PIC 9(19) VALUE ZERO.
01 WS-COUNTER PIC 9(4) VALUE ZERO.
PROCEDURE DIVISION.
MAIN-LOGIC.
DISPLAY 'PROGRAM SAMP02 STARTED'.
DISPLAY WS-MESSAGE.
MOVE 1234567890123456789 TO WS-LARGE-NUMBER.
DISPLAY 'LARGE NUMBER: ' WS-LARGE-NUMBER.
PERFORM VARYING WS-COUNTER FROM 1 BY 1
UNTIL WS-COUNTER > 5
DISPLAY 'COUNTER: ' WS-COUNTER
END-PERFORM.
DISPLAY 'PROGRAM SAMP02 ENDED'.
STOP RUN.
こちらは、ローカルでファイルを作成した段階では、Z Open EditorのSyntax Checkでは特に何もひっかかりません。しかし、実際にユーザー・ビルドを実行してz/OS上でビルドを行うとコンパイル・エラーが発生します。
この時、エラーの情報としてibm-userbuild-error-feedback.xmlというファイルもダウンロードされます。
<PACKAGE>
<FILEREFERENCETABLE>
<FILECOUNT>1</FILECOUNT>
<FILE>
<FILENUMBER>1</FILENUMBER>
<FILENAME>DEV01.DBB.COBOL(SAMP02)</FILENAME>
</FILE>
</FILEREFERENCETABLE>
<MESSAGE>
<MSGNUMBER>IGYDS1145-S</MSGNUMBER>
<MSGLINE>12</MSGLINE>
<MSGFILE>1</MSGFILE>
<MSGTEXT>
More than 18 digit positions were specified in a "PICTURE" string for a numeric or numeric edited item. A "PICTURE" string of "S9(18)" was assumed.
</MSGTEXT>
</MESSAGE>
<MESSAGE>
<MSGNUMBER>IGYPS2002-E</MSGNUMBER>
<MSGLINE>21</MSGLINE>
<MSGFILE>1</MSGFILE>
<MSGTEXT>
Numeric literal "1234567890123456789" was longer than the maximum allowed length. The literal was truncated to "234567890123456789".
</MSGTEXT>
</MESSAGE>
</PACKAGE>
この情報が取り込まれて、"問題"ビューにエラーとして表示されますし、ソース中にもエラー箇所が赤波線で強調されます。

このように、ユーザー・ビルドの結果がエラー情報として取り込まれてソースとのマッピングが行われるため、問題判別がしやすくなります。
★Agent Mode
参考: Agent Mode
AIエージェントからZ Open Editorの各種操作を行うためのMCPサーバー機能を提供するものです。最近注目度が高まっているIBM BobやRoo Code、ClineといったAIエージェント機能を持つ開発ツールと一緒にZ Open Editorを使用する際に非常に有用な機能です。
このMCPサーバーは、これまで紹介してきたZ Open Editor Extensionで提供される機能、例えば、VS CodeからMVSデータセットを操作したり、JCLをサブミットしたり、DBBユーザービルドを実行したり、...、という操作を、MCPの"ツール"として提供しています。つまり、これらの操作をエージェントが事理的に行えるようになる、ということです。
参考: IBM Z Open Editor MCP Tools
この機能の具体的な利用イメージは後続記事で紹介します。











