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?

VS Code - z/OS連携 (6)Advanced Capability

0
Last updated at Posted at 2026-05-23

はじめに

ここまでの記事で紹介した内容は、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では利用不可)。

有効化

ここで取り上げている、Advanced Capabilityに含まれる機能は、ライセンスを有効化しないと利用できません。ここでは、Advanced Capabilityの機能を使用するために必要な手順を示します。

参考: Activating advanced capabilities

VS CodeにZ Open Editorをインストールすると、以下のようなIBM Z Open Editorの"ようこそ"画面が表示されます。

image.png

これを下の方にスクロールしていくと、高度な機能(Advanced Capability)についての項目があります。
image.png

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

正規のライセンスを適用してAdvanced Capability有効化する方法としては以下の2つがあります。

(1) RSE APIによるActivation Keyの自動更新

これは、RSE profile経由でz/OSに接続する構成をとる場合に利用可能な方法です。

まず、適切な手順でz/OS側にRSE APIの設定を行う必要があります。特に、以下の箇所に記載されている設定が必要になります。
参考: Automatic Activation

  1. 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.
  2. Install and complete basic configuration of z/OS host component IBM Remote System Explorer API (RSE API), FMID HAMAxxx.
  3. 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.
  4. Allow z/OS Explorer Extensions to register as ADFz or IDzEE. For more information, see Product enablement in IFAPRDxx.
  5. 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例:

zowe.config.json
...
    "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日間有効となる。

更新後のステータス表示例:

image.png

※有効期限が最終更新日から30日後の日付に設定される

(2) Acitivation Keyの手動インポート

まず、Shopz、もしくは Passport Advantage経由でActivation Keyを入手する必要があります。
(Activation Keyの情報はPDFで提供される場合があり、その場合、Activation Keyの情報をtxtファイルにコピーしてからインポートすることになります。詳細は入手した手順に従ってください。)

Z Open Editor "ようこそ" 画面の "高度な機能"の項目の、"アクティベーションキーの更新"をクリックします。
image.png

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

完了すると、以下のようにImportされたActivation Keyが表示され、有効化されたことが確認できます。
image.png
※上の例は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 構成ファイル設定例
/etc/zexpl/rseapi.env
#
# 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を新規に作成します。

RACFコマンド例
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を作成して証明書を紐づけます。

RACFコマンド例
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の設定で"インターネットオプション" の"コンテンツ"タブから"証明書"をクリック
image.png

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

あとはウィザードに従ってCA証明書のファイルを"信頼されたルート証明機関"としてインポートすればOK

接続例

Zowe Explorer view から RSE Profileを右クリック - [VSコードで3270エミュレータを起動する] を選択
image.png

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

外部ブラウザーの使用

[外部ブラウザーで3270エミュレータを起動する]を選択すると、文字通り外部ブラウザ(ChromeやFirefoxなど)で3270エミュレーターを起動することもできます。

image.png

この時、たとえばChromeを使用すると、サーバー証明書に含まれるSANの情報が実際のドメイン名と一致していない場合でも、以下のような警告が出ますが、最下部のリンクから警告を無視しして無理やりアクセスすることも可能です。(上の手順の通り、きちんと証明書を作成していればこの警告は表示されないはずです)
image.png
※VS Codeの内部ブラウザでもこの警告を無視するオプションがありますが、VS Code全体に影響してしまうため推奨されません。

警告を無視して先に進むと以下のように、"保護されていない通信"という状態で3270エミュレーターが扱える状態になります。
image.png

エミュレーターの設定

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

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

気になる点としては、例えば以下のようなことがあります。

  • コードページとしては、930/939は選択できるが、1390/1399は選択肢に無い
  • フォントの追加登録はできない
  • LU名の明示指定ができない

z/OS Resources table

参考: 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)」を選択します。
image.png

Profile選択

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

Resource選択

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

MVS

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

新しいフィルターの追加を選択します。
image.png

参照したいデータセットのパターンを入力します。
image.png

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

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

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

このように、ISPFのパネルに似たようなイメージの表形式でMVSデータセットを扱うことができます。
列のカスタマイズや列ごとのソートも行えます。

Zowe Explorer viewからデータセットを右クリック - [表示] - [z/OSリソース表] を選択することでも表示できます。
image.png

USS

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

新しいフィルターの追加を選択します。
image.png

参照したいディレクトリのパターンを入力します。
image.png

追加されたフィルター(/etc)を選択します。
image.png

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

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

JES

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

新しいフィルターの追加を選択します。
image.png

JOBオーナーを指定します。
image.png

Prefexを指定します。
image.png

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

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

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

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

Data Elements view

参考: Data Elements view

COBOL, PL/Iプログラム中のデータ項目を表形式で表示する機能を提供します。ローカル・ファイル、および、Zowe Explorer経由でアクセスできるリモート・ファイルの両方で有効です。
※言語が適切に認識され、COPYBOOK/INCLUDEファイルの解決ができていて、重大な構文エラーが無いことが前提です。

まずソースをエディターで開き、エディター内を右クリック - [表示(Show in)] - [「データ・エレメント」ビュー]を選択
image.png

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

各変数名をクリックすると、ソース中で当該変数が宣言されている箇所にカーソルが移動します。COPYBOOK/INCLUDEで別ファイルを読み込んでいる場合は当該ファイルが開いてポイントしてくれます。

COPYBOOK読み込み時に、以下のようにREPLACING指定がされている場合には、置き換え後の変数名がリストされます。

SAM.cbl
...
       COPY CUSTCOPY REPLACING ==:TAG:== BY ==WS-CUST==.
...
CUSTCOPY.cpy
...
       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).
...

image.png

この表形式のデータは以下のような操作が可能です。

  • フィルターによる表示内容の制御
  • 表示するカラムのカスタマイズ
  • カラムごとのソート
  • CSVファイルとしてエクスポート

Program Control FLow Browser

参考: Program Control Flow Browser

COBOL, PL/Iのソースを分析し、制御フローをインタラクティブなグラフで表示する機能を提供します。ローカル・ファイル、および、Zowe Explorer経由でアクセスできるリモート・ファイルの両方で有効です。
※言語が適切に認識され、COPYBOOK/INCLUDEファイルの解決ができていて、重大な構文エラーが無いことが前提です。

まずソースをエディターで開き、エディター内を右クリック - [表示(Show in)] - [プログラム制御フロー]を選択
image.png

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

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

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

特定のノードまでの制御フローのみを表示する例:
image.png

特定のノードからの制御フローのみを表示する例:
image.png

この情報は、JSON, PDF, SVG, PNG, XML, DOT(GraphViz)のファイル形式でエクスポートすることもできます。

この機能で表示される情報はいわゆるフローチャート(処理の流れを示すもの)ではありません。あくまでも、どのパラグラフからどのパラグラフへの遷移があるか、という関係性を図示しているものですのでご注意ください。

Data Flow Browser for COBOL

参考: Data Flow Browser

COBOLのソースを分析し、特定の変数に関連するデータのフローをインタラクティブなグラフで表示する機能を提供します。
ローカル・ファイル、および、Zowe Explorer経由でアクセスできるリモート・ファイルの両方で有効です。
※言語が適切に認識され、COPYBOOK/INCLUDEファイルの解決ができていて、重大な構文エラーが無いことが前提です。

まずソースをエディターで開き、参照したい変数名を選択して右クリック - [表示(Show in)] - [データフロー]を選択 (ここではWS-CUST-REC-TYPEを選択)
image.png

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

各ノードは変数名、グループ(構造体)、ファイル、リテラルなどを表します。
実線矢印はデータの流れを表します。
破線矢印は要素とグループ要素の関係性(上位/下位)を表します。

ノードを選択するとそのノードの宣言に関連するソース中の位置がポイントされます。破線矢印を選択するとその関係性を示すデータ宣言のソース中の位置がポイントされます。実践矢印を選択するとデータの流れを示すソース中のステートメント(MOVE文など)の位置がポイントされます。
image.png

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

カウンター変数NUM-UPDATE-REQUESTSに関するデータフローの表示例:
image.png

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

この情報は、JSON, PDF, SVG, PNG, XML, DOT(GraphViz)のファイル形式でエクスポートすることもできます。

★ZCodeScan

参考: Linting with IBM ZCodeScan

COBOL, PL/Iソースに対して、事前定義のコーディング・ルールに合致しているかをチェックする機能を提供します。
ローカル・ファイル、および、Zowe Explorer経由でアクセスできるリモート・ファイルの両方で有効です。

コーディング・ルール補足

ルールは製品提供のものと、ユーザーが独自に定義するカスタム・ルールがあります。
事前定義されたものとしては、Code Review, Security Reviewというカテゴリにて以下に記載されています。
IDz - Defininig Rules

例えば、分かりやすいところでいえば、以下のようなルールが定義されています。

ルールによっては引数を伴うものもあります。上の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の設定ファイルに追加します。

settings.json例
...
"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ファイルを作成してみます。

zcodescan/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としてルール・ファイルのパスを指定します。

zapp.yaml例
...

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]を選択します (日本語訳がおかしくなってますが...)
image.png

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

上の画面の例は、CALL文に明示的なENDが記述されていないためエラーとなっています。

★DBB User Build advanced error reporting

参考: Advanced problems view integration

DBBユーザー・ビルドのエラー結果を取り込んで"問題"ビューに統合する機能を提供するものです。従って、前提としては先の記事で示した通りDBBの設定を行ってVS Codeからユーザー・ビルドを行えることが前提です。

そのうえで、この機能を使用するためには、zapp.yamlファイルのzBuilder用のプロファイルにて、--errPrefixを指定する必要があります。

zapp.yaml例
...
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"
...

サンプル実行

例えば、以下のような単純なサンプルコードをローカルに作成してみます。

SAMP02.cbl
       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というファイルもダウンロードされます。

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 &quot;PICTURE&quot; string for a numeric or numeric edited item.  A &quot;PICTURE&quot; string of &quot;S9(18)&quot; was assumed. 
</MSGTEXT> 
</MESSAGE> 
<MESSAGE> 
<MSGNUMBER>IGYPS2002-E</MSGNUMBER> 
<MSGLINE>21</MSGLINE> 
<MSGFILE>1</MSGFILE> 
<MSGTEXT> 
Numeric literal &quot;1234567890123456789&quot; was longer than the maximum allowed length.  The literal was truncated to &quot;234567890123456789&quot;. 
</MSGTEXT> 
</MESSAGE> 
</PACKAGE>

この情報が取り込まれて、"問題"ビューにエラーとして表示されますし、ソース中にもエラー箇所が赤波線で強調されます。
image.png

このように、ユーザー・ビルドの結果がエラー情報として取り込まれてソースとのマッピングが行われるため、問題判別がしやすくなります。

★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

この機能の具体的な利用イメージは後続記事で紹介します。

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?