はじめに
メインフレームのアプリケーションについても、オープン系のアプリケーションで使われているような作法で、ソース管理やビルドのツールを利用することができます。
ここでは、Gitを使ったソース管理とDBB(Dependency Based Build)という有償のツールを使用したビルドをVSCodeから行う方法について記載します。
関連記事
VSCodeを使用したメインフレーム・アプリケーション開発 - (1)概要
VSCodeを使用したメインフレーム・アプリケーション開発 - (2)z/OS基本操作
VSCodeを使用したメインフレーム・アプリケーション開発 - (3)ソース編集
VSCodeを使用したメインフレーム・アプリケーション開発 - (4)ソース管理ツール/ビルドツール連携
VSCodeを使用したメインフレーム・アプリケーション開発 - (5)デバッガーの利用
VSCodeを使用したメインフレーム・アプリケーション開発 - (6)FTP経由での接続
全体像
オープン系で使われているような作法と同じように、以下のような手順でソースの編集が行えます。ここで主にターゲットとしているシチュエーションとしては、Small Scale User Buildと呼ばれているようなもので、個別のバグフィックスなど1~2つのソースを修正するようなケースです。
(1) clone/pull: リモートのリポジトリの内容ををローカル・リポジトリーに取り込みます。
(2) 編集: VSCode上でCOBOL, PL/Iなどのソースを編集します(前の関連記事のイメージ)。
(3) ビルド: z/OS上に変更したソースを転送してコンパイル/リンクします。
(4) テスト: 修正が正しく行われたかどうか単体テストします。
(5) push: 修正が完了したら修正内容をGit Serverのリポジトリーに反映させます。
(2)~(4)を回してソースの修正を行うことになると思いますが、「(4)テスト」の部分はz/OSアプリの場合一工夫必要になります。ここは言語(COBOL, PL/I, ASM)、利用するミドルウェア(CICS、Db2、IMS、MQ、...)、テスト対象のプログラムの呼び出し形態(バッチ実行、3270画面経由、サブルーチンコール、API、...)などによってテストのやり方が異なるからです。
テスト部分については用途に応じたテストツールが色々と提供されていたり、デバッガーなどを用いたトライ&エラーを行いたい場合があったりと、バリエーションも豊富なのでこの記事では取り上げません。例えばPCOM経由でこれまでと同じような手法で単体テストしたり、別途テストツールを用いてテストする、あるいは自動化してビルドスクリプトに組み込む、といったことが考えられますが、ここでは一旦なにかしらの方法で単体テストをするステップが入るものと考えておいてください。
ソース管理
これは一般的なオープン系アプリケーションのソース管理で利用されている、VSCodeが元々持っているGit連携機能をそのまま使います。GitHubなどのGitサーバーと連携してソース管理が行えますので、COBOLやPL/Iなどz/OS向けのアプリケーションのソースもこれで管理しましょう、ということです。
これはz/OS特有の話ではないのでVSCodeとGit連携そのものについてはここでは深くは触れませんが、以下参考程度に。
PC上にGitを導入しておく必要があります。
git for Windows
Windowsであれば上のサイトからV2.30.1をダウンロードしてインストール(設定はデフォルト)
c:\>git --version
git version 2.30.1.windows.1
VSCodeではGit連携の基本的な機能は元々提供されているようですが、より便利に扱えるようにするためのGit関連のExtensionがいくつか提供されているようです。Git Historyというのが便利そうなので入れてみました。
ビルド
オープン系のアプリケーションの場合、Javaやnodejsなどはローカルの環境でビルドやテストがある程度できたりしますが、z/OSアプリケーション(COBOL, PL/I, ASM,...)の場合はコンパイル/リンク、テストはz/OS上で実行する必要があります。そのためには、必要なファイル群をz/OS上に転送しソースにあったJCLを実行する、といったことをする必要があります。この辺りの操作を簡素化する仕組みを、DBBを中心とした機能で提供してくれています。
関連する要素技術を補足します。
DBB(Dependency Based Build)
参考:
IBM Dependency Based Build
GitHub - DBB sample
アプリケーションのビルドをサポートする機能を提供する有償製品です。基本的にはz/OS上にインストールして使用するものです。DBB Toolkitと呼ばれるコンポーネントがz/OS関連操作(コンパイラ実行、ソースコピーなど)を行うためのJava APIを提供しています。これにより、Groovyでビルド用のスクリプトを記述することができます。
DBB Toolkitが提供するのは基本的にAPIやGroovy関連のライブラリなので、必ずしもz/OS側で何らかのサーバー機能を常駐させておく必要はありません。ただ、これらはJVM上で動くことになりJVMの起動には一般的に大きなコストがかかります。このJVM起動に関するパフォーマンスを改善させるために、DBB Daemonを常駐させておいてビルド指示の度にJVM起動が走ることを回避する、といった使い方をすることもできます。その場合はDBB Daemonの構成をしてDaemonを起動させておく必要があります。
参考: Improving performance with ZD&T or Java startup by using DBB daemon
DBBではもう一つDBB Serverというコンポーネントも提供しています。これはz/OSではなくLinux上に立てるサーバー(実体はLiberty)で実装される機能で、ソースの依存関係のメタデータを管理したりビルド結果を管理させることができます。当記事ではこの部分については触れません。
ちなみにWazi Developer for Red Hat CodeReady Workspacesという製品にはDBBが含まれています。
zAppBuild
DBBという製品は、VSCodeやEclipseなどオープン系の開発ツールと連携しやすいように、Groovyでビルドのスクリプトを書ける仕組みを提供してくれています。ただ、それはつまり、これまでJCLで書いていたコンパイル/リンクなどの一連の操作を別のスクリプトで書かないといけないということになります。一からそのようなスクリプトを作るのは大変なので、zAppBuildという汎用的に使えるビルドのスクリプトやプロパティーファイルの雛形を提供してくれています。これはGitHubで公開されておりダウンロードして自由に利用可能です( Apache-2.0 License)。
これは、z/OSのUSS上に展開して利用します。
Z Open Editor Extension
参考:
IBM Z Open Editor Documentation
IBM Z Open Editor概要
Z Open Editor Extensionは前の関連記事でも書きましたが、VSCode上でCOBOLやPL/Iなどのソース編集をサポートしてくれる機能が提供されます。ただ、それだけではなく、このExtensionではDBBとの連携機能も提供されており、VSCodeからz/OSに対してビルド指示を行うことが出来るようになっています。
VSCodeからDBBへの連携の際は内部的にZowe CLIが使われますが、z/OSMFとの接続だけではなくSSH接続も必要なため、Zowe CLIのssh-profileも作成しておく必要があります。
構成(事前準備)
z/OS側
DBB toolkitとzAppBuildの構成は基本的に環境毎に1度実施すれば複数ユーザーで共有して利用できます。
DBB toolkit
DBB toolkitをz/OS上にインストールしてセットアップする必要があります。
ここでは詳細は割愛します。
参考: Installing and configuring the DBB toolkit on z/OS
zAppBuild
zAppBuildの構成としては、GitHubで提供されているファイル群をUSS上に展開し、環境依存の情報をプロパティ・ファイルに設定する、ということを行います。
ファイルの展開
USS上にもGitのクライアントを導入することができますので、USS上にGitクライアントがあってGitHubと接続できる環境であれば、直接USS上にzAppBuildのファイル群をCloneすることができます。
ただ、z/OSから直接外部のGitHubに接続できる環境を整えるのは難しいことも多いと思いますので、ここでは、一旦PC上にCloneをしてそれをz/OSにz/OSMF経由(Zowe CLI経由)で転送する方法でやってみます(以下のイメージ)。
※せっかくなのでここでもVSCodeやZowe CLIが活用できるのでそれでやってみます。
適当なワークスペースを作成し、そこでコマンドパレット(Ctrl+Shft+P)からGit Cloneを選択します。
zAppBuildのリポジトリのURLを指定します。(https://github.com/IBM/dbb-zappbuild.git)
このdbb-zappbuild以下をUSS上に転送しますが、ここではzowe cliのコマンドを使用してみます。
参考: zowe › zos-files › upload › dir-to-uss
まず、ファイル転送の仕方を指定するために、dbb-zappbuildディレクトリ直下に、.zosattributesというファイルを新規作成し、以下のように編集します。
# Don't upload
**/.git/** -
# pattern local-encoding remote-encoding
*.* UTF-8 1399
USS上に、ファイル転送先のディレクトリを作成しておきます。こでは、/u/dbb_common/dbb-zappbuild
とします。
TAGUCHI:/u/dbb_common: >ls -la
total 48
drwxr-xr-x 3 TAGUCHI SYS1 8192 Feb 21 13:56 .
drwxrwxr-x 28 OMVSKERN SYS1 8192 Feb 20 20:44 ..
drwxrwxr-x 7 TAGUCHI SYS1 8192 Feb 21 14:09 dbb-zappbuild
次にPC上でコマンドプロンプトを開いて、Cloneを作成したディレクトリに移動し、以下のコマンドでdbb-zappbuild以下を転送します。
C:\y\VSCode_workspace\WaziTest03>zowe zos-files upload dir-to-uss "dbb-zappbuild" "/u/dbb_common/dbb-zappbuild" --recursive --zosmf-profile prof_Wazi01
success: true
from: C:\y\VSCode_workspace\WaziTest03\dbb-zappbuild
to: /u/dbb_common/dbb-zappbuild
Directory uploaded successfully.
一通りファイルが転送されたら、必要に応じて権限設定を行います。ここでは複数ユーザーで共有する想定なので、同一グループメンバーが編集できるように、group属性にwrite権限を付与します。
TAGUCHI:/u/dbb_common: > chmod -R g+w dbb-zappbuild
USS上に展開されたディレクトリ、ファイル一覧
TAGUCHI:/u/dbb_common: >ls -laTR
.:
total 48
drwxr-xr-x 3 TAGUCHI SYS1 8192 Feb 21 13:56 .
drwxrwxr-x 28 OMVSKERN SYS1 8192 Feb 20 20:44 ..
drwxrwxr-x 7 TAGUCHI SYS1 8192 Feb 21 14:09 dbb-zappbuild
./dbb-zappbuild:
total 256
drwxrwxr-x 7 TAGUCHI SYS1 8192 Feb 21 14:09 .
drwxr-xr-x 3 TAGUCHI SYS1 8192 Feb 21 13:56 ..
drwxrwxr-x 2 TAGUCHI SYS1 0 Feb 21 13:56 .git
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 4882 Feb 21 14:09 BUILD.md
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 1144 Feb 21 14:09 CONTRIBUTIONS.md
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 1553 Feb 21 14:09 DCO1.1.txt
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 1236 Feb 21 14:09 INSTALL.md
t ISO8859-1 T=on -rw-rw-r-- 1 TAGUCHI SYS1 11355 Feb 21 14:09 LICENSE
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 5391 Feb 21 14:09 README.md
drwxrwxr-x 2 TAGUCHI SYS1 8192 Feb 21 13:56 build-conf
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 19738 Feb 21 14:09 build.groovy
drwxrwxr-x 2 TAGUCHI SYS1 8192 Feb 21 14:07 languages
drwxrwxr-x 4 TAGUCHI SYS1 8192 Feb 21 14:07 samples
drwxrwxr-x 2 TAGUCHI SYS1 8192 Feb 21 14:09 utilities
./dbb-zappbuild/.git:
total 16
drwxrwxr-x 2 TAGUCHI SYS1 0 Feb 21 13:56 .
drwxrwxr-x 7 TAGUCHI SYS1 8192 Feb 21 14:09 ..
./dbb-zappbuild/build-conf:
total 256
drwxrwxr-x 2 TAGUCHI SYS1 8192 Feb 21 13:56 .
drwxrwxr-x 7 TAGUCHI SYS1 8192 Feb 21 14:09 ..
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 824 Feb 21 14:06 ACBgen.properties
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 1766 Feb 21 14:06 Assembler.properties
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 893 Feb 21 14:06 BMS.properties
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 2838 Feb 21 14:06 Cobol.properties
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 1304 Feb 21 14:06 DBDgen.properties
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 1086 Feb 21 14:06 LinkEdit.properties
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 979 Feb 21 14:06 MFS.properties
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 1696 Feb 21 14:06 PLI.properties
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 1294 Feb 21 14:06 PSBgen.properties
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 15155 Feb 21 14:06 README.md
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 938 Feb 21 14:06 ZunitConfig.properties
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 4524 Feb 21 14:06 build.properties
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 1456 Feb 21 14:06 datasets.properties
./dbb-zappbuild/languages:
total 256
drwxrwxr-x 2 TAGUCHI SYS1 8192 Feb 21 14:07 .
drwxrwxr-x 7 TAGUCHI SYS1 8192 Feb 21 14:09 ..
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 8863 Feb 21 14:07 Assembler.groovy
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 6211 Feb 21 14:07 BMS.groovy
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 14803 Feb 21 14:07 Cobol.groovy
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 7319 Feb 21 14:07 DBDgen.groovy
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 5005 Feb 21 14:07 LinkEdit.groovy
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 6338 Feb 21 14:07 MFS.groovy
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 11248 Feb 21 14:07 PLI.groovy
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 10992 Feb 21 14:07 PSBgen.groovy
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 1470 Feb 21 14:07 README.md
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 7709 Feb 21 14:07 ZunitConfig.groovy
./dbb-zappbuild/samples:
total 64
drwxrwxr-x 4 TAGUCHI SYS1 8192 Feb 21 14:07 .
drwxrwxr-x 7 TAGUCHI SYS1 8192 Feb 21 14:09 ..
drwxrwxr-x 7 TAGUCHI SYS1 8192 Feb 21 14:08 MortgageApplication
drwxrwxr-x 2 TAGUCHI SYS1 8192 Feb 21 14:07 application-conf
./dbb-zappbuild/samples/MortgageApplication:
total 128
drwxrwxr-x 7 TAGUCHI SYS1 8192 Feb 21 14:08 .
drwxrwxr-x 4 TAGUCHI SYS1 8192 Feb 21 14:07 ..
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 464 Feb 21 14:08 README.md
drwxrwxr-x 2 TAGUCHI SYS1 8192 Feb 21 14:08 application-conf
drwxrwxr-x 2 TAGUCHI SYS1 8192 Feb 21 14:08 bms
drwxrwxr-x 2 TAGUCHI SYS1 8192 Feb 21 14:08 cobol
drwxrwxr-x 2 TAGUCHI SYS1 8192 Feb 21 14:08 copybook
drwxrwxr-x 2 TAGUCHI SYS1 8192 Feb 21 14:08 link
./dbb-zappbuild/samples/MortgageApplication/application-conf:
total 176
drwxrwxr-x 2 TAGUCHI SYS1 8192 Feb 21 14:08 .
drwxrwxr-x 7 TAGUCHI SYS1 8192 Feb 21 14:08 ..
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 566 Feb 21 14:08 Assembler.properties
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 511 Feb 21 14:08 BMS.properties
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 1289 Feb 21 14:08 Cobol.properties
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 667 Feb 21 14:08 LinkEdit.properties
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 529 Feb 21 14:08 PLI.properties
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 9661 Feb 21 14:08 README.md
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 2163 Feb 21 14:08 application.properties
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 821 Feb 21 14:08 file.properties
./dbb-zappbuild/samples/MortgageApplication/bms:
total 64
drwxrwxr-x 2 TAGUCHI SYS1 8192 Feb 21 14:08 .
drwxrwxr-x 7 TAGUCHI SYS1 8192 Feb 21 14:08 ..
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 6526 Feb 21 14:08 epsmlis.bms
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 2619 Feb 21 14:08 epsmort.bms
./dbb-zappbuild/samples/MortgageApplication/cobol:
total 416
drwxrwxr-x 2 TAGUCHI SYS1 8192 Feb 21 14:08 .
drwxrwxr-x 7 TAGUCHI SYS1 8192 Feb 21 14:08 ..
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 8775 Feb 21 14:08 epscmort.cbl
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 132337 Feb 21 14:08 epscsmrd.cbl
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 2166 Feb 21 14:08 epscsmrt.cbl
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 7888 Feb 21 14:08 epsmlist.cbl
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 5854 Feb 21 14:08 epsmpmt.cbl
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 6723 Feb 21 14:08 epsnbrvl.cbl
./dbb-zappbuild/samples/MortgageApplication/copybook:
total 128
drwxrwxr-x 2 TAGUCHI SYS1 8192 Feb 21 14:08 .
drwxrwxr-x 7 TAGUCHI SYS1 8192 Feb 21 14:08 ..
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 577 Feb 21 14:08 epsmortf.cpy
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 104 Feb 21 14:08 epsmtcom.cpy
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 333 Feb 21 14:08 epsmtinp.cpy
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 399 Feb 21 14:08 epsmtout.cpy
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 386 Feb 21 14:08 epsnbrpm.cpy
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 534 Feb 21 14:08 epspdata.cpy
./dbb-zappbuild/samples/MortgageApplication/link:
total 48
drwxrwxr-x 2 TAGUCHI SYS1 8192 Feb 21 14:08 .
drwxrwxr-x 7 TAGUCHI SYS1 8192 Feb 21 14:08 ..
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 70 Feb 21 14:08 epsmlist.lnk
./dbb-zappbuild/samples/application-conf:
total 272
drwxrwxr-x 2 TAGUCHI SYS1 8192 Feb 21 14:07 .
drwxrwxr-x 4 TAGUCHI SYS1 8192 Feb 21 14:07 ..
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 256 Feb 21 14:07 ACBgen.properties
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 1130 Feb 21 14:07 Assembler.properties
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 515 Feb 21 14:07 BMS.properties
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 1997 Feb 21 14:07 Cobol.properties
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 673 Feb 21 14:07 DBDgen.properties
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 671 Feb 21 14:07 LinkEdit.properties
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 535 Feb 21 14:07 MFS.properties
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 1311 Feb 21 14:07 PLI.properties
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 676 Feb 21 14:07 PSBgen.properties
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 13016 Feb 21 14:07 README.md
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 394 Feb 21 14:07 ZunitConfig.properties
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 3505 Feb 21 14:07 application.properties
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 820 Feb 21 14:07 bind.properties
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 810 Feb 21 14:07 file.properties
./dbb-zappbuild/utilities:
total 208
drwxrwxr-x 2 TAGUCHI SYS1 8192 Feb 21 14:09 .
drwxrwxr-x 7 TAGUCHI SYS1 8192 Feb 21 14:09 ..
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 232 Feb 21 14:09 ADMIN.pw
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 3847 Feb 21 14:09 BindUtilities.groovy
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 10991 Feb 21 14:09 BuildUtilities.groovy
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 8247 Feb 21 14:09 GitUtilities.groovy
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 17942 Feb 21 14:09 ImpactUtilities.groovy
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 826 Feb 21 14:09 README.md
t IBM-1399 T=on -rw-rw-r-- 1 TAGUCHI SYS1 862 Feb 21 14:09 ScannerUtilities.groovy
プロパティ・ファイルの設定
USS上に展開されたファイルのうち、dbb-zappbuild/build-conf/dataset.properties
を編集して、環境依存のデータセットの情報(LEや各ミドルウェアのライブラリの情報など)を指定します。
# Dataset references
# Build properties for Partition Data Sets (PDS) used by zAppBuild build scripts.
# Please provide a fully qualified DSN for each build property below.
# Ex:
# MACLIB=SYS1.MACLIB
# z/OS macro library. Example: SYS1.MACLIB
MACLIB=SYS1.MACLIB
# Assembler macro library. Example: CEE.SCEEMAC
SCEEMAC=CEE.SCEEMAC
# LE (Language Environment) load library. Example: CEE.SCEELKED
SCEELKED=CEE.SCEELKED
# High Level Assembler (HLASM) load library. Example: ASM.SASMMOD1
SASMMOD1=HLA.SASMMOD1
# Cobol Compiler Data Sets. Example: COBOL.V4R1M0.SIGYCOMP
SIGYCOMP_V4=
SIGYCOMP_V6=IGY630.SIGYCOMP
# PL/I Compiler Data Sets. Example: PLI.V5R2M0.SIBMZCMP
IBMZPLI_V52=IEL530.SIBMZCMP
IBMZPLI_V51=
# CICS Macro Library. Example: CICSTS.V3R2M0.CICS.SDFHMAC
SDFHMAC=DFH550.CICS.SDFHMAC
# CICS Load Library. Example: CICSTS.V3R2M0.CICS.SDFHLOAD
SDFHLOAD=DFH550.CICS.SDFHLOAD
# CICS COBOL Library. Example: CICSTS.V3R2M0.CICS.SDFHCOB
SDFHCOB=DFH550.CICS.SDFHCOB
# MQ COBOL Library. Example: CSQ.V9R1M0.SCSQCOBC
SCSQCOBC=CSQ911.SCSQCOBC
# MQ Load Library. Example: CSQ.V9R1M0.SCSQLOAD
SCSQLOAD=CSQ911.SCSQLOAD
# DB2 Load Library. Example: DB2.V9R1M0.SDSNLOAD
SDSNLOAD=DSNC10.SDSNLOAD
# IMS Macro Library. Example: DFS.V11R1M0.SDFSMAC
SDFSMAC=DFSF10.SDFSMAC
# IMS RESLIB. Example: DFS.V11R1M0.SDFSRESL
SDFSRESL=DFSF10.USER.SDFSRESL
# User generated library for DB/DC and DC installations. Example: DFS.V11R1M0.REFERAL
REFERAL=DFSF10.REFERAL
# IBM Debug Library containing Exits
SEQAMOD=EQAF00.SEQAMOD
# Optional IDz Load Library. Example: FEL.V14R0M0.SFELLOAD
SFELLOAD=FELE20.SFELLOAD
# Optional IDZ zUnit / WAZI VTP library containing necessary copybooks. Example : FEL.V14R2.SBZUSAMP
SBZUSAMP=
USS上のディレクトリの作成
DBBとの連携では、ローカルのPCからファイルをUSS上に転送し、USS上で各種操作が行われます。そのためのディレクトリを作成しておく必要があります。ここでは以下のようにディレクトリを作成することにします。
このディレクトリは、ユーザー単位で設定しておくのがよさそうです。
DBBワークスペース用ディレクトリ: /u/TAGUCHI/projects
ログ用ディレクトリ: /u/TAGUCHI/projects/logs
基本的には、SSHで接続するユーザーのアクセス権があればよいです。ただ、DBBのShared Daemonという機能を使う場合は、ログ用のディレクトリについてはDBB Shared Daemonがの実行ユーザーからログの書き込みが行われるので、DBB Shared Daemon実行ユーザーのwrite権限も必要になります。
(今回試した環境では、SSHユーザーとDBB Shared Daemonユーザーのグループを同じにし、グループに対してwrite権限も付与しています)
TAGUCHI:/u/TAGUCHI/projects: >ls -la
total 1008
drwxr-xr-x 6 TAGUCHI SYS1 8192 Feb 21 13:16 .
drwxr-xr-x 8 TAGUCHI SYS1 8192 Feb 22 10:54 ..
drwxrwxr-x 2 TAGUCHI SYS1 8192 Feb 21 13:39 logs
...
環境変数設定
DBBを使用する場合以下の環境変数の指定が必要になります。ssh接続ユーザーのホームの.profile
もしくは/etc/profile
に以下を指定します。
export DBB_HOME=/usr/lpp/IBM/dbb
export JAVA_HOME=/usr/lpp/java/J8.0_64
その他
Zowe CLI経由でVSCodeとz/OSを接続するため、z/OS側ではz/OSMF(もしくはRSE API)、および、SSHが稼働している必要があります。
PC側
インストール
PC側では、以下をインストールしておく必要があります。
- Git
- Zowe CLI
- VSCode + Zowe Explorer Extention + Z Open Editor Extention + (Git History)
Gitについては情報がたくさん出回っていますので割愛。Zowe CLI, VSCode周りは前の関連記事で紹介しているのでそちらをご参照ください。
Zowe CLI: z/OSとの接続構成
Zowe CLI, VSCode周りはこれまでの関連記事で示した設定がそのまま有効です。おさらいするとこんな感じです。
- Zowe CLI: z/OSMF接続プロファイル設定
- VSCodeにZowe Explorere Extension, Z Open Editor Extensionを追加インストール
DBBと連携する場合、Zowe CLIの設定として、SSH用の接続プロファイルというのを追加してSSH接続できるようにしておく必要があります。
以下のコマンドでSSH接続用のプロファイルを作成します。
C:>zowe profiles create ssh-profile ssh_Wazi01 --host OCPW01 --port 31175 --user TAGUCHI --password xxx
Profile created successfully! Path:
C:\Users\TomohiroTaguchi\.zowe\profiles\ssh\ssh_Wazi01.yaml
host: OCPW01
port: 31175
user: TAGUCHI
password: managed by @zowe/secure-credential-store-for-zowe-cli
Review the created profile and edit if necessary using the profile update command.
オプション補足
- ssh_Wazi01: 作成するSSH用のプロファイル名(任意の名前を指定)
- --host OCPW01: 接続先z/OSのホスト名指定(もしくはIPアドレスの指定)
- --port 31175: 接続先z/OSのSSHがListenしているポート(デフォルトだと22)
- --user TAGUCHI: SSH接続で使用するユーザー
- --pasword xxx: SSH接続で使用するパスワード
Zowe CLIのSSH関連コマンドを実行して、このプロファイルを使用して接続できるかどうか確認します。
参考: Zowe CLI: zowe › zos-uss › issue › ssh
C:>zowe zos-uss issue ssh pwd --ssh-profile ssh_Wazi01
$ pwd
/u/TAGUCHI
上の例は、プロファイル"ssh_Wazi01"で指定した接続先に対してssh経由で "pwd"コマンドを実行する例です。TAGUCHIユーザーで接続しているので、接続先z/OSのUSS上のホームディレクトリが表示されたのが確認できます。
※注意!
SSHプロファイルの作成に失敗した場合(例えばポート番号の指定を間違えるなど)、削除して作成し直したりzowe profiles update
コマンドで一部のパラメータのみ修正したりすることができます。ただし、一度作成をミスしたプロファイル名のまま修正を行うと、後続のDBB連携の際にうまく動かない場合があります。プロファイル作成時にミスした場合や設定変更を行いたい場合は、それまで使ったことのない新規の別名でSSHプロファイルを作成しなおすようにしてください。
VSCodeのプロパティ設定
ファイル - ユーザー設定 - 設定を選択し、ユーザータブを選択します。
zoweで検索して拡張機能以下のIBM Z Open Editorを選択すると、"Zopeneditor: Zowe"という項目が表示されます。
ここに、以下のようにパラメーターを設定します。
- defaultCliProfile: Zowe CLIに定義したz/OSMF用プロファイル
- defaultSshProfile: Zowe CLIに定義したSSH用プロファイル
同様に設定画面で、user buildで検索すると、"Userbuild: User Setting"という項目が表示されます。これはVSCode上ユーザー単位でもワークスペース単位でも指定できます。(ここで言っているワークスペースというのはVSCodeの概念の話です)
- dbbWorkspace: USS上のDBBワークスペース用ディレクトリ(事前作成しておく)
- dbbLogDir: USS上のログ用ディレクトリ(事前作成しておく)
- dbbHLQ: ビルド時に使用するHLQ(データセットの事前作成は不要。ユーザー・ビルドを行うと、このHLQで自動でデータセットが作成される)
使用例
上の手順で、一通りの下準備は完了です。次に、サンプルを使って具体的な操作を試していきます。
使用するのはGitHubに提供されている以下のサンプルです。
GitHub: zoepneditor-sample
VSCode上に適当なワークスペースを作成して上のUser Buildの設定を行っている状態、という想定です。
また、接続先のz/OSは実際のz/OS環境ではなくWazi DeveloperのSandbox(OpenShiftクラスター上に構成したz/OSエミュレーター)を使用するものとします。
サンプルのクローン
VSCodeでUser Buildの設定を行っているワークスペースを開きます。
Ctrl+Shift+Pでコマンドパレットを開き、Git:Cloneを選択します。
CloneしたいgitリポジトリのURLを指定します。(https://github.com/IBM/zopeneditor-sample.git
)
これで、指定したフォルダにサンプルのプロジェクトがクローンされ、VSCodeのワークスペースから管理できるようになりました。
ただ、デフォルトだと"master"ブランチを参照している状態になっています。今回、接続先はWazi DeveloperのSandboxを使って試していますが、このサンプルではWazi環境用にカスタマイズされたブランチが提供されているので、そちらのブランチに切り替えます。
左側のメニューからソース管理を選択して、zopeneditor-sampleの横のmaster部分をクリックします。
ブランチの候補が出力されるので、"origin/wazi-master"ブランチを選択します。
これでwazi-masterのブランチに切り替わった状態となります。
ZAPPファイルの編集
参考: Experimental: Configure your applications with ZAPP files
関連記事でも紹介したように、言語の関連付けやCOBOLのCopybookの探索先などの情報はVSCodeのプロパティで設定することができます。ただし、このような属性はアプリケーションのプロジェクト毎に設定すべきもので、VSCodeのプロパティで保持していると都合が悪い場合があります。そこで、プロジェクト単位に管理したい情報(ソース編集やビルドに関連する情報)を、VSCodeのプロパティではなく別ファイルで管理できる仕組みが提供されています。それがZAPPファイルと呼ばれるものです(詳細は上のリンクを参照のこと)。Experimental(試験的)という但し書きがついているのでまだ過渡期の仕組みですが、欠かせない機能だと思いますので使用してみます。
ZAPPファイルは、VSCodeのプロパティで指定していたことをプロジェクト単位にjsonまたはyaml形式で指定できます。サンプルとしてzapp-example.json, zapp-example.yamlが提供されています。ここではJSON形式のファイルを使いたいと思います。
zapp-example.jsonを、zapp.jsonという名前で同フォルダ(zopeneditor-sample直下)にコピーして編集します。
※ここに、property-groupsの指定などがあるので、この指定に基づいてCOPYBOOKの探索などができるようになります。
...
"profiles": [
{
"name": "dbb-userbuild",
"type": "dbb",
"settings": {
"command": "$DBB_HOME/bin/groovyz",
"buildScriptPath": "/u/dbb_common/dbb-zappbuild/build.groovy",
"buildScriptArgs": [
"-DBB_DAEMON_HOST 127.0.0.1",
"-DBB_DAEMON_PORT 7380",
"--userBuild",
"--workspace ${zopeneditor.userbuild.userSettings.dbbWorkspace}",
"--application zopeneditor-sample",
"--hlq ${zopeneditor.userbuild.userSettings.dbbHlq}",
"--outDir ${zopeneditor.userbuild.userSettings.dbbLogDir}"
],
"additionalDependencies": [
"application-conf"
]
}
}
]
...
上の例では以下の箇所を変更しています。
- buildScriptPath: zAppBuildをセットアップした先のbuild.groovyのパスを指定します。
-
buildScriptArgs:
- -DBB_DAEMON_HOST, -DBB_DAEMON_PORT: DBB Shared Daemonを使用する場合のオプションを追記しています(具体的な値は管理者に要確認)。使用しない場合は追記不要。
-
- --outDir: USS上に作成したログ用ディレクトリのパスを指定します。上の例ではVSCodeのプロパティで指定したdbbLogDirの値を参照するようにしています(/u/TAGUCHI/projects/logs)。
※実際に運用する場合は、このZAPPファイルも含めて環境に合わせてカスタマイズした状態のものをGit Server上に管理しておく、ということになると思います。今回はサンプルを使っているのでこのファイルを修正していますが、実際にはこの辺を意識させずに必要なソースのみ編集できればいいように環境を整えておくことはできると思います。
.gitattributesファイルの確認
ビルドを実行する際は、対象のファイルをPC上からターゲットのz/OSのUSSファイルに一旦転送されます。この時コード変換が行われますが、この時使用される文字コードを.gitattributesファイルで指定することができます。このファイルはリポジトリのトップに配置する必要があります。サンプルで提供されている.gitattributesファイルは以下の通りです。
*.cpy zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
*.cbl zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
*.jcl zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
*.bms zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
*.pli zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
*.inc zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
*.asm zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
*.mfs zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
*.bnd zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
*.lnk zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
*.rex zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
*.txt zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
*.groovy zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
*.sh zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
*.properties zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
*.rexx zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
*.config zos-working-tree-encoding=ibm-1047 git-encoding=utf-8
参考: Setting up the user build - Configuring encoding on USS
※日本語文字列を含むファイルは、ここに日本語のencoding(例えばibm-1399など)を指定しても正しくコード変換されないという不具合がありましたが、それは2021/08/19にリリースされたZ Open Editor V1.2.6で修正されています。
参考: IBM Z Open Editor - What's New - IBM Z Open Editor Releases 1.2.6 - 2021/08/19
Fixed an issue in User Build that prevented the use of the correct encoding as defined in
.gitattributes
to files uploaded via z/OSMF or RSE API profiles.
ビルド実行
編集したいソースを開きます。ここではCOBOL以下のSAM1.cblを選択します。
(ここではビルドの手順を確認したいので、特に修正などは行いません。)
ZAPPファイルが有効であれば、COPYBOOKの参照などが有効になっていることが確認できます。
エディター部分を右クリックして、"Run Setup for IBM User Build"を選択し、ビルドの前提となるセットアップの処理を実施します。
IBM User Buildの出力画面が開いて、ログが表示されます。
Run Setupのログ出力例
=====================
Running setup for user build...
Setup will upload files or folders defined in your ZAPP file or in .vscode/settings.json under "zopeneditor.userbuild.userSettings.additionalDependencies".
Checking ZAPP file or workspace settings...
DBB ZAPP or workspace settings should be defined in either your repository's zapp.yaml, zapp.json or .vscode/settings.json file.
command: $DBB_HOME/bin/groovyz
buildScriptArgs: -DBB_DAEMON_HOST 127.0.0.1,-DBB_DAEMON_PORT 7380,--userBuild,--workspace /u/TAGUCHI/projects,--application zopeneditor-sample,--hlq TAGUCHI.DBB,--outDir /u/TAGUCHI/projects/logs
buildScriptPath: /u/dbb_common/dbb-zappbuild/build.groovy
additionalDependencies: application-conf
---------------------
Checking user settings...
User settings should be defined in your VS Code or Theia Settings under zopeneditor.userbuild.userSettings
localWorkspacePath: **Optional setting is missing**
dbbWorkspace: /u/TAGUCHI/projects
dbbHlq: TAGUCHI.DBB
dbbLogDir: /u/TAGUCHI/projects/logs
---------------------
Using ssh profile ssh_Wazi01
Using zowe profile profile prof_Wazi01
Identified local root workspace path as c:\y\VSCode_workspace\WaziTest03\zopeneditor-sample
Running setup to build c:\y\VSCode_workspace\WaziTest03\zopeneditor-sample\COBOL\SAM1.cbl program.
Executing ssh command:
mkdir -p '/u/TAGUCHI/projects/zopeneditor-sample'
$ mkdir -p '/u/TAGUCHI/projects/zopeneditor-sample'
Uploading additional dependencies...
Uploading c:\y\VSCode_workspace\WaziTest03\zopeneditor-sample\application-conf
Executing ssh command:
mkdir -p '/u/TAGUCHI/projects/zopeneditor-sample/application-conf'
$ mkdir -p '/u/TAGUCHI/projects/zopeneditor-sample/application-conf'
User build setup FINISHED.
続いて、ビルドを実行します。
エディター部分を右クリックして、"Run IBM User Build with full upload"を選択し、ビルドの処理を実施します。
※この操作を行うと、必要なファイルをz/OSに転送してコンパイル/リンクを実施するスクリプトが流れます。
Run IBM User Buildのログ出力例
=====================
Running user build...
Identified local root workspace path as c:\y\VSCode_workspace\WaziTest03\zopeneditor-sample
---------------------
Checking ZAPP file or workspace settings...
DBB ZAPP or workspace settings should be defined in either your repository's zapp.yaml, zapp.json or .vscode/settings.json file.
command: $DBB_HOME/bin/groovyz
buildScriptArgs: -DBB_DAEMON_HOST 127.0.0.1,-DBB_DAEMON_PORT 7380,--userBuild,--workspace /u/TAGUCHI/projects,--application zopeneditor-sample,--hlq TAGUCHI.DBB,--outDir /u/TAGUCHI/projects/logs
buildScriptPath: /u/dbb_common/dbb-zappbuild/build.groovy
additionalDependencies: application-conf
---------------------
Checking user settings...
User settings should be defined in your VS Code or Theia Settings under zopeneditor.userbuild.userSettings
localWorkspacePath: **Optional setting is missing**
dbbWorkspace: /u/TAGUCHI/projects
dbbHlq: TAGUCHI.DBB
dbbLogDir: /u/TAGUCHI/projects/logs
---------------------
Using ssh profile ssh_Wazi01
Using zowe profile profile prof_Wazi01
Executing ssh command:
mkdir -p '/u/TAGUCHI/projects/zopeneditor-sample/COBOL'
$ mkdir -p '/u/TAGUCHI/projects/zopeneditor-sample/COBOL'
Uploading c:\y\VSCode_workspace\WaziTest03\zopeneditor-sample\COBOL\SAM1.cbl program.
Found total of 2 local include files:
c:\y\VSCode_workspace\WaziTest03\zopeneditor-sample\COPYBOOK\CUSTCOPY.cpy
c:\y\VSCode_workspace\WaziTest03\zopeneditor-sample\COPYBOOK\TRANREC.cpy
Executing ssh command:
mkdir -p '/u/TAGUCHI/projects/zopeneditor-sample/COPYBOOK'
$ mkdir -p '/u/TAGUCHI/projects/zopeneditor-sample/COPYBOOK'
Uploading c:\y\VSCode_workspace\WaziTest03\zopeneditor-sample\COPYBOOK\CUSTCOPY.cpy
Uploading c:\y\VSCode_workspace\WaziTest03\zopeneditor-sample\COPYBOOK\TRANREC.cpy
---------------------
Executing ssh command:
$DBB_HOME/bin/groovyz /u/dbb_common/dbb-zappbuild/build.groovy -DBB_DAEMON_HOST 127.0.0.1 -DBB_DAEMON_PORT 7380 --userBuild --workspace /u/TAGUCHI/projects --application zopeneditor-sample --hlq TAGUCHI.DBB --outDir /u/TAGUCHI/projects/logs /u/TAGUCHI/projects/zopeneditor-sample/COBOL/SAM1.cbl
$ $DBB_HOME/bin/groovyz /u/dbb_common/dbb-zappbuild/build.groovy -DBB_DAEMON_H
$
$ bb-zappbuild/build.groovy -DBB_DAEMON_HO <ST 127.0.0.1 -DBB_DAEMON_PORT 7380 -
$
$ _HOST 127.0.0.1 -DBB_DAEMON_PORT 7380 -- <userBuild --workspace /u/TAGUCHI/pro
$
$ --userBuild --workspace /u/TAGUCHI/proj <ects --application zopeneditor-sampl
$
$ rojects --application zopeneditor-sample < --hlq TAGUCHI.DBB --outDir /u/TAGUC
$
$ ple --hlq TAGUCHI.DBB --outDir /u/TAGUCH <I/projects/logs /u/TAGUCHI/projects/
$
$ UCHI/projects/logs /u/TAGUCHI/projects/z <openeditor-sample/COBOL/SAM1.cbl
** Build start at 20210224.103644.036
** Build output located at /u/TAGUCHI/projects/logs
** Adding /u/TAGUCHI/projects/zopeneditor-sample/COBOL/SAM1.cbl to Building build list
** Writing build list file to /u/TAGUCHI/projects/logs/buildList.txt
** Invoking build scripts according to build order: BMS.groovy,Cobol.groovy,Assembler.groovy,PLI.groovy,LinkEdit.groovy
** Building files mapped to Cobol.groovy script
*** Building file zopeneditor-sample/COBOL/SAM1.cbl
** Writing build report data to /u/TAGUCHI/projects/logs/BuildReport.json
** Writing build report to /u/TAGUCHI/projects/logs/BuildReport.html
** Build ended at Wed Feb 24 22:37:20 GMT 2021
** Build State : CLEAN
** Total files processed : 1
** Total build time : 35.904 seconds
__RC=0__
** Build finished
Looking for user-build logs in "/u/TAGUCHI/projects/logs".
Downloading logs to c:\y\VSCode_workspace\WaziTest03\zopeneditor-sample\logs
Downloading log file /u/TAGUCHI/projects/logs/buildList.txt. Binary: false
Downloading log file /u/TAGUCHI/projects/logs/SAM1.log. Binary: false
Downloading log file /u/TAGUCHI/projects/logs/BuildReport.json. Binary: true
Downloading log file /u/TAGUCHI/projects/logs/BuildReport.html. Binary: true
Downloading of 4 log files to c:\y\VSCode_workspace\WaziTest03\zopeneditor-sample\logs finished successfully.
コンパイル/リンクの結果はローカルのlogディレクトリ下に<src>.log
というファイルで生成されています。
COBOLコンパイル結果例
PP 5655-EC6 IBM Enterprise COBOL for z/OS 6.3.0 P200319 Date 02/22/2021 Time 13:05:46 Page 1
Invocation parameters:
LIB
IGYOS4090-I The "LIB" option specification is no longer required. COBOL library processing is always in effect.
Options in effect:
NOADATA
ADV
AFP(NOVOLATILE)
QUOTE
ARCH(8)
ARITH(COMPAT)
NOAWO
NOBLOCK0
BUFSIZE(4096)
NOCICS
CODEPAGE(1140)
NOCOMPILE(S)
NOCOPYLOC
NOCOPYRIGHT
NOCURRENCY
DATA(31)
DBCS
NODECK
NODEFINE
NODIAGTRUNC
DISPSIGN(COMPAT)
NODLL
NODUMP
NODYNAM
NOEXIT
NOEXPORTALL
NOFASTSRT
FLAG(I,I)
NOFLAGSTD
HGPR(PRESERVE)
NOINITCHECK
NOINITIAL
INLINE
INTDATE(ANSI)
NOJTC
LANGUAGE(EN)
LINECOUNT(60)
NOLIST
LP(32)
NOMAP
MAXPCF(100000)
NOMDECK
NONAME
NSYMBOL(NATIONAL)
NONUMBER
NONUMCHECK
NUMPROC(NOPFD)
OBJECT
NOOFFSET
OPTIMIZE(0)
OUTDD(SYSOUT)PP 5655-EC6 IBM Enterprise COBOL for z/OS 6.3.0 P200319 Date 02/22/2021 Time 13:05:46 Page 2
NOPARMCHECK
PGMNAME(COMPAT)
QUALIFY(COMPAT)
RENT
RMODE(AUTO)
NORULES
NOSERVICE
SEQUENCE
SOURCE
SPACE(1)
NOSQL
SQLCCSID
NOSQLIMS
NOSSRANGE
NOSTGOPT
SUPPRESS
NOTERM
NOTEST(NODWARF,NOSOURCE,NOSEPARATE)
NOTHREAD
TRUNC(STD)
NOVBREF
VLR(STANDARD)
VSAMOPENFS(COMPAT)
NOWORD
XMLPARSE(XMLSS)
XREF(FULL)
ZONEDATA(PFD)
ZWBPP 5655-EC6 IBM Enterprise COBOL for z/OS 6.3.0 P200319 SAM1 Date 02/22/2021 Time 13:05:46 Page 3
LineID PL SL ----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7-|--+----8 Map and Cross Reference
000001 ****************************************************************
000002 * LICENSED MATERIALS - PROPERTY OF IBM
000003 * "RESTRICTED MATERIALS OF IBM"
000004 * (C) COPYRIGHT IBM CORPORATION 2018, 2019. ALL RIGHTS RESERVED
000005 * US GOVERNMENT USERS RESTRICTED RIGHTS - USE, DUPLICATION,
000006 * OR DISCLOSURE RESTRICTED BY GSA ADP SCHEDULE
000007 * CONTRACT WITH IBM CORPORATION
000008 ****************************************************************
000009 * PROGRAM: SAM1
000010 *
000011 * AUTHOR : Doug Stout
000012 *
000013 * READS A SEQUENTIAL TRANSACTION FILE AND MAKES UPDATES
000014 * TO A SORTED SEQUENTIAL CUSTOMER FILE
000015 *
000016 * A GOOD CASE FOR DEBUGGING LAB - INDEED
000017 *
000018 * CAN BE MADE TO ABEND WITH BAD INPUT DATA FOR FAULT ANALYSIS LAB
000019 *****************************************************************
...(省略)...
1SAVE OPERATION SUMMARY:
MEMBER NAME SAM1
LOAD LIBRARY TAGUCHI.DBB.LOAD
PROGRAM TYPE PROGRAM OBJECT(FORMAT 5 OS COMPAT LEVEL z/OS V1R8 )
VOLUME SERIAL B4USR1
DISPOSITION REPLACED
TIME OF SAVE 13.06.08 FEB 22, 2021
1SAVE MODULE ATTRIBUTES:
AC 000
AMODE 31
COMPRESSION BINDER DATA
DC NO
EDITABLE YES
EXCEEDS 16MB NO
EXECUTABLE YES
LONGPARM NO
MIGRATABLE NO
OL NO
OVLY NO
PACK,PRIME NO,NO
PAGE ALIGN NO
REFR NO
RENT YES
REUS YES
RMODE ANY
SCTR NO
SIGN NO
SSI
SYM GENERATED NO
TEST NO
XPLINK NO
MODULE SIZE (HEX) 0000424C
DASD SIZE (HEX) 0000A000
1 ENTRY POINT AND ALIAS SUMMARY:
NAME: ENTRY TYPE AMODE C_OFFSET CLASS NAME STATUS
SAM1 MAIN_EP 31 00000000 C_CODE
*** E N D O F O P E R A T I O N S U M M A R Y R E P O R T ***
1z/OS V2 R4 BINDER 13:06:06 MONDAY FEBRUARY 22, 2021
BATCH EMULATOR JOB(TAGUCHI1) STEP(*OMVSEX ) PGM= IEWBLINK
IEW2008I 0F03 PROCESSING COMPLETED. RETURN CODE = 0.
1----------------------
MESSAGE SUMMARY REPORT
----------------------
TERMINAL MESSAGES (SEVERITY = 16)
NONE
SEVERE MESSAGES (SEVERITY = 12)
NONE
ERROR MESSAGES (SEVERITY = 08)
NONE
WARNING MESSAGES (SEVERITY = 04)
NONE
INFORMATIONAL MESSAGES (SEVERITY = 00)
2008 2278
**** END OF MESSAGE SUMMARY REPORT ****
今回の例はCOBOLのSAM1.cblをビルド(コンパイル/リンク)した例ですが、結果としてはVSCodeのプロパティのdbbHLQで指定したHLQ以下のLOAD(今回の例ではTAGUCHI.DBB.LOAD)に実行モジュールが生成される、ということになります。
おわりに
今回は、ビルドに関してベースとなる手順の部分のみを実施してみました。
実際の開発プロセスを回す場合は、アプリケーション用のリポジトリを別途作成してそれを使用し、ソース編集/ビルド/UT を回して確定したら変更をcommitしてpushというような流れになると思います。
テスト部分については冒頭でも示したように、変更対象のソースの形態に依存するので、やり方はまちまちです。テスト支援ツールと組み合わせれば、UT部分もUser Buildのスクリプトに組み込んである程度自動化する、ということも可能にはなると思います。