Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

This article is a Private article. Only a writer and users who know the URL can access it.
Please change open range to public in publish setting if you want to share this article with other users.

VS Code - z/OS連携 (5)DBBユーザー・ビルド

0
Last updated at Posted at 2026-05-03

はじめに

メインフレーム・アプリケーション開発支援の機能を提供するDBB(Dependency Based Build)という有償製品があります。これはz/OS上にインストールして利用するもので、アプリケーションのビルド(コンパイル/リンク)に関連する操作をGroovyから行えるAPIをDBB Toolkitとして提供しています。これを利用すると、JavaやGroovyスクリプトでビルド操作を行うことができます。さらに、このDBB Toolkitを利用したビルド用のフレームワーク "zAppBuild" がOSSとして提供されています。
VS CodeのZ Open Editor Extensionでは、DBBと連携するための機能が提供されており、VS Codeからスマートにビルド処理を行うことができるようになっています。この機能を"ユーザー・ビルド"と呼んでいます。

ここでは、VS CodeからDBBのユーザー・ビルドを利用してサンプルのCOBOLバッチをビルドする基本的な流れを見ていきたいと思います。

当記事で記載する内容は、DBB V3.0をベースとしています。DBB V3.0ではOSSとして提供されていたビルド用フレームワーク"zAppBuild"に相当する機能を製品に取り込んでzBuilderという別の機能を提供しています(DBB V3.0でもzAppBuildは継続利用できます)。
当記事ではzBuilderを利用する場合を例に取り上げます。

zAppBuildはGroovyスクリプトで実装されておりソースコード自体がGitHub上に公開されているので、ロジックを追いかけることも可能ですし、独自カスタマイズも自由に行えます。
参考: GitHub - zAppBuild

一方で、zBuilderはおそらくベースはJavaアプリとして実装されておりYAMLファイルでビルドのフローなどを制御できるようなフレームワークを提供しています。ソースは公開されていないため内部ロジックはブラックボックスなので、既存ロジックのカスタマイズはできません(独自ロジックを組み込むことは可能)。

基本的にはOSSとしての透明性/柔軟性を重視するか、製品機能としてのサポートの手厚さを重視するか、という辺りのトレードオフになるかと思われます。
また、zAppBuildの場合はある程度Groovy言語を解釈できる必要がありますがGroovyが追えれば動作の仕組みはある程度分かります。一方zBuilderではYAMLファイルの構成で柔軟な制御ができるのでGroovyの知識は不要ですがzBuilder特有のかなり複雑な作法を理解する必要があります。

(まだこの辺りの技術は実績が乏しく、マニュアルにも詳細な内部動作の記述は少ないため、個人的には何をやっているか中身を追える方が安心感はあります。)

zAppBuildについては過去記事をご参照ください。
参考:
VS Code - z/OS連携[Zowe Explorer V3編] (3)VS Codeからのユーザー・ビルド
DBB/zAppBuildについてのメモ シリーズ

関連記事

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エージェントの活用: 実践編

全体像

image.png

ユーザー・ビルドの基本的な操作の流れは以下の通りです。

(1) Git Serverから編集対象のソースが含まれるリポジトリをPCにクローンします
(2) VS Codeのエディターでソースを編集します
(3) 編集したソースをビルドします
(4) 必要に応じてUnit Testを実施します
(5) ソースの変更に問題がなければGit Serverに変更内容を反映します

(3)の操作では、VS Codeで編集したソースを右クリックし、IBM User Build実行のメニューを選択すると、以下の一連の操作が自動で行われます。

  • 当該ソース、および、関連するCOPYBOOKを開発環境(z/OS)に転送
  • z/OS上でコンパイル実行(ssh経由でコンパイル用のdbbコマンドを実行)
  • コンパイル結果をPC上にダウンロード

Unit Testは対象のソースの形態や、アクセスするリソース等によって実施方法や実施可否が変わるので、やり方は適宜検討する必要があります。

※DBBを利用したユーザー・ビルドについての情報は、様々なドキュメントに分散していてちょっと分かりにくいです。IDz EE(IBM Developer for Z Enterprise Edition)にはDBBも含まれており、VS Codeからの利用についての情報も記載がありますのでそちらが比較的分かりやすいと思います。以下に主要な参考情報のリンクをまとめておきます。

参考:
DBB - Building z/OS applications with the zBuilder
IDz V1.7 - Setting up and running a user build with zBuilder
Z Open Editor - Setting up user build for DBB zBuilder

VS Codeからのユーザー・ビルド実行

環境構築

z/OS側

DBB製品導入と基本的なセットアップを導入ガイドに従って実施しておく必要があります(詳細は割愛)。
参考: Installing and configuring DBB

構成サンプル

ここでは、DBB User Build に必要なz/OS側コンポーネントの構成情報のサンプルを抜粋して記載します。あくまで構成の参考としてご参照ください。
※TAZ(Test Accelarator for Z)に含まれる On-Demand Environment(旧ZD&T)で提供されるStock Imageの環境をベースに一部カスタマイズしたものです。
z/OSのバージョンはV3.2、DBB V3.0です。

IFAPRDxx
SYS1.PARMLIB(IFAPRD01)
...
PRODUCT OWNER('IBM CORP')
   NAME('IBM DBB')
   ID(5737-K80)
   VERSION(*) RELEASE(*) MOD(*)
   FEATURENAME(*)
   STATE(ENABLED)
...
環境変数関連
/etc/profile
...
export DBB_HOME=/usr/lpp/IBM/dbb
export DBB_CONF=/etc/dbb

export JAVA_HOME=/usr/lpp/java/java21/current_64/
PATH=$PATH:$JAVA_HOME/bin
...
/etc/dbb/dbbenv.sh
...
#! /bin/sh
#
# Licensed materials - Property of IBM
# 5655-AC5 Copyright IBM Corp. 2018, 2024
# All rights reserved
# US Government users restricted rights  -  Use, duplication or
# disclosure restricted by GSA ADP schedule contract with IBM Corp.
#
###############################################################################################
##  Sample shell script to set DBB Environment Variables
##
##
##  Setup Instructions:
##  1) Replace default values (if they differ) with your system values.
##  2) Execute the script using ./dbbenv.sh
##
###############################################################################################
# DBB required variables
export DBB_HOME=/usr/lpp/IBM/dbb
export DBB_CONF=/etc/dbb

# Add $DBB_HOME/bin to the path (required for DBB CLI)
export PATH="${DBB_HOME}/bin:$PATH"

# ZBuilder configuration directory
#export DBB_BUILD=/etc/dbb/build

# Add Db2 JDBC Driver Jar Files to CLASSPATH
#export CLASSPATH=/usr/lpp/db2c10/jdbc/classes/db2jcc4.jar:/usr/lpp/db2c10/jdbc/classes/db2jcc_license_cisuz.jar:$CLASSPATH

# Db2 Data Server Driver variables required for Type 2 local connections
#export STEPLIB=DSNC10.SDSNEXIT:DSNC10.SDSNLOAD:DSNC10.SDSNLOD2:$STEPLIB
#export LIBPATH=/usr/lpp/db2c10/jdbc/lib:$LIBPATH

...
zBuilder用構成

参考: Setting up and configuring zBuilder

zBuilder構成用ディレクトリ
IBMUSER:/u/ibmuser/dbb/build # ls -laR

.:
total 288
drwxr-xr-x   3 BPXROOT  SYS1        8192 Mar 29 11:57 .
drwxr-xr-x   3 BPXROOT  SYS1        8192 Mar 29 11:57 ..
-rwxr-xr-x   1 BPXROOT  SYS1         168 Mar 29 11:57 .gitattributes
-rwxr-xr-x   1 BPXROOT  SYS1        9867 Mar 29 11:57 Assembler.yaml
-rwxr-xr-x   1 BPXROOT  SYS1        4369 Mar 29 11:57 BMS.yaml
-rwxr-xr-x   1 BPXROOT  SYS1        6559 Mar 29 11:57 CPP.yaml
-rwxr-xr-x   1 BPXROOT  SYS1        7789 Mar 29 11:57 Cobol.yaml
-rwxr-xr-x   1 BPXROOT  SYS1        6415 Mar 29 11:57 CobolTestcase.yaml
-rwxr-xr-x   1 BPXROOT  SYS1        5002 Mar 29 11:57 Db2Binds.yaml
-rwxr-xr-x   1 BPXROOT  SYS1        7781 Mar 29 11:57 Languages.yaml
-rwxr-xr-x   1 BPXROOT  SYS1        6900 Mar 29 11:57 Languages.yaml.original
-rwxr-xr-x   1 BPXROOT  SYS1        2927 Mar 29 11:57 LinkEdit.yaml
-rwxr-xr-x   1 BPXROOT  SYS1        8230 Mar 29 11:57 PLI.yaml
-rwxr-xr-x   1 BPXROOT  SYS1        4128 Mar 29 11:57 REXX.yaml
-rwxr-xr-x   1 BPXROOT  SYS1        2025 Mar 29 11:57 Transfer.yaml
-rwxr-xr-x   1 BPXROOT  SYS1        4777 Mar 29 11:57 dbb-build.yaml
drwxr-xr-x   2 BPXROOT  SYS1           0 Mar 29 11:57 groovy

./groovy:
total 16
drwxr-xr-x   2 BPXROOT  SYS1           0 Mar 29 11:57 .
drwxr-xr-x   3 BPXROOT  SYS1        8192 Mar 29 11:57 ..
UserBuild実行ユーザーのプロファイル
~/.profile
...
export _BPXK_AUTOCVT=ALL
export DBB_BUILD=/u/ibmuser/dbb/build
...
DBB Shared Server関連

参考: Build daemon configuration

SYS1.PROCLIB(DBBS)
//*********************************************************************
//*
//* DBB Shared Daemon Start
//*
//*
//DBBS   PROC CNFG='/etc/dbb'
//*
//BGZSD  EXEC PGM=BPXBATSL,REGION=0M,TIME=NOLIMIT,
//            PARM='PGM &CNFG./startdaemon.sh'
//STDOUT   DD SYSOUT=*
//STDERR   DD SYSOUT=*
//*
//        PEND
//*
/etc/dbb/process_definitions.xml
<!--
    Licensed Materials - Property of IBM
    (c) Copyright IBM Corporation 2018, 2024. All Rights Reserved.
   
    Note to U.S. Government Users Restricted Rights:
    Use, duplication or disclosure restricted by GSA ADP Schedule
    Contract with IBM Corp. 

	Note: Ensure $DBB_HOME is set before loading sample definitions. 
 -->
<ProcessManager>
	<ProcessDefinition>
		<name>groovyz</name>
		<process>com.ibm.dbb.build.ext.buildprocess.GroovyBuildProcess</process>
		<classpath>$DBB_HOME/lib/*:$DBB_HOME/groovy/lib/*:/usr/include/java_classes/isfjcall.jar:$DBB_CONF/logging</classpath>
	 <options>-Xshareclasses:cacheDir=/javasc/dbbs,name=dbbscache,nonFatal,cacheDirPerm=0777 -Xms256m -Xmx512m -Xquickstart -Xscmx50m -Xlp:objectheap:pagesize=1m,warn,pageable -Xlp:codecache:pagesize=1m,pageable -Djava.library.path=/usr/lpp/IBM/dbb/lib/:/usr/lib/java_runtime64/:/usr/lib/ -Dfile.encoding=COMPAT -Djava.security.manager=allow</options>
		<count>1</count>
	</ProcessDefinition>
	<ProcessDefinition>
		<name>dbb</name>
		<process>com.ibm.dbb.build.ext.buildprocess.DBBCommandProcess</process>
		<classpath>$DBB_HOME/lib/*:$DBB_HOME/groovy/lib/*:/usr/include/java_classes/isfjcall.jar:$DBB_CONF/logging</classpath>
	 <options>-Xshareclasses:cacheDir=/javasc/dbbs,name=dbbscache,nonFatal,cacheDirPerm=0777 -Xms256m -Xmx512m -Xquickstart -Xscmx50m -Xlp:objectheap:pagesize=1m,warn,pageable -Xlp:codecache:pagesize=1m,pageable -Djava.library.path=/usr/lpp/IBM/dbb/lib/:/usr/lib/java_runtime64/:/usr/lib/ -Dfile.encoding=COMPAT -Djava.security.manager=allow</options>
		<count>1</count>
	</ProcessDefinition>
	<LoggingConfiguration>
		<output>/var/dbb/logs</output>
	</LoggingConfiguration>
</ProcessManager>
/etc/dbb/startdaemon.sh
#! /bin/sh
export DBB_CONF=/etc/dbb/
export DBB_HOME=/usr/lpp/IBM/dbb/
export JAVA_HOME=/usr/lpp/java/java21/current_64/
###################################################################
#                                                                    
# Licensed materials - Property of IBM
# 5655-AC5 Copyright IBM Corp. 2018, 2025
# All rights reserved
# US Government users restricted rights  -  Use, duplication or
# disclosure restricted by GSA ADP schedule contract with IBM Corp.
#
###################################################################
# Daemon variable definitions
HOSTNAME=127.0.0.1
PORT=8180
PD_FILE='$DBB_CONF/process_definitions.xml'
export _BPX_SHAREAS=YES # Daemon must start in a shared address space when launching in STC

# Defaults
DBB_HOME_DEFAULT=/usr/lpp/IBM/dbb # If DBB_HOME unset, set to this install path


# Check JAVA_HOME presence or set it if located in default locations
if [ -z "${JAVA_HOME:+set}" ]; then
    if [ -d "/usr/lpp/java/J11.0_64" ]; then
        export JAVA_HOME=/usr/lpp/java/J11.0_64
    else
        echo "JAVA_HOME must be set explicitly or Java must be installed in the default location."
        exit 1
    fi
    echo "JAVA_HOME is unset. Setting JAVA_HOME=$JAVA_HOME"
fi

java_version=$($JAVA_HOME/bin/java -version 2>&1 | awk -F '"' '/version/ {print $2}' | cut -d '.' -f 1,2)
if [[ "$java_version" == "1.8" ]]; then
	echo "Detected Java 8, as of DBB 3.0 Java 8 is no longer supported and JAVA_HOME must be set to Java 11 or higher"
    exit 1
fi

# Check DBB_HOME presence or set it if located in default location 
if [ -z "${DBB_HOME:+set}" ]; then
    if [ -d "$DBB_HOME_DEFAULT" ]; then
        export DBB_HOME=$DBB_HOME_DEFAULT
    else
        echo "DBB_HOME must be set explicitly or installed in the default location: $DBB_HOME_DEFAULT"
        exit 1
    fi
    echo "DBB_HOME is unset. Setting DBB_HOME=$DBB_HOME"
fi


# Check DBB_CONF presence or set it to the default location
if [ -z "${DBB_CONF:+set}" ]; then
    export DBB_CONF=$DBB_HOME/conf
    echo "DBB_CONF is unset. Setting DBB_CONF=$DBB_CONF"
fi


# Define DBB_SAF_CLASS if not set. 
if [ -z "${DBB_SAF_CLASS:+set}" ]; then
    export DBB_SAF_CLASS=/usr/include/java_classes/IRRRacf.jar # Path to SAF class dependency
    echo "DBB_SAF_CLASS is unset. Setting DBB_SAF_CLASS=$DBB_SAF_CLASS"
fi



# default usage
eval "\"$DBB_HOME/lib/sdaemon\" $HOSTNAME $PORT \"$PD_FILE\""

# automatic restart usage
# until eval "\"$DBB_HOME/lib/sdaemon\" $HOSTNAME $PORT \"$PD_FILE\""; do
#     sleep 10
# done
SYS1.PROCLIB(DBBSTOP)
//*********************************************************************
//*
//* DBB Shared Daemon Stop
//*
//*
//BGZSD  PROC CNFG='/etc/dbb'
//*
//BGZSD  EXEC PGM=BPXBATSL,REGION=0M,TIME=NOLIMIT,
//            PARM='PGM &CNFG./stopdaemon.sh'
//STDOUT   DD SYSOUT=*
//STDERR   DD SYSOUT=*
//*
//        PEND
//*

PC側

(1) YAML Langage Support Extension インストール
Zowe Explorer Extension, Z Open Editor Extensionに加えて、追加でYAML Language Support by Red HatをVS Codeにインストールします。

zBuilderに対してビルドに関する各種プロパティはYAMLファイルに設定することになりますが、このExtensionはzBuilder用のYAMLファイルを作成するときのValidationチェックに使用されます。

参考: Configuring schema validation for VSCode

(2) スキーマファイルのダウンロード
以下のzBuilder用YAMLのスキーマファイルが、z/OS USSのDBBインストール先ディレクトリ /usr/lpp/IBM/idz/usr/lpp/IBM/dbb/samples/schema/以下に提供されますので、PC上の適当なフォルダにダウンロードします。

  • applicationConfigurationSchema.json
  • buildConfigurationSchema.json

(3) スキーマとファイルのマッピング
上のスキーマファイルと、対応するYAMLファイルのパターンのマッピングをVS Codeの設定ファイルに追加します。

...
		"yaml.schemas": {
			

			"file:///c%3A/y/VSCode_workspace/ISEConf2026/config/applicationConfigurationSchema.json": [
				"dbb-app.yaml",
				"MortgageApplication/**-app.yaml"
   			],
    		"file:///c%3A/y/VSCode_workspace/ISEConf2026/config/buildConfigurationSchema.json": [
				"dbb-build.yaml",
				"Languages.yaml",
				"Cobol.yaml",
				"Assembler.yaml",
				"BMS.yaml",
				"CobolTestcase.yaml",
				"Db2Binds.yaml",
				"LinkEdit.yaml",
				"PLI.yaml"
    		]

		},
...

これらは、アプリケーションのビルド特性に関連する各種プロパティーを設定するYAMLファイルをカスタマイズする際のサポートに使われます。つまり、この設定はYAMLファイルをカスタマイズする役割のユーザー(ビルドの方式を統括しているアプリの管理者)にとって必要な設定ということになります。必ずしも全ての開発者に必要なわけではありません。

設定

ユーザー・ビルドに関連する設定箇所は分散していて分かりにくいため全体像を整理します。

image.png

上の図の赤字部分の設定を行っていきます。

※一旦ここではユーザー・ビルド(CD/UTフェーズにおける、編集した特定のソースをビルドする操作)に着目していますが、zBuilder は汎用的な仕組みを提供するフレームワークですので、後続のフェーズで使用可能な構成情報なども含んでいます(例えばFull Buildと呼ばれる、Project内のソースを全て一括でビルドする場合に有効な設定など)。

1. zBuilder関連設定

1-(1) 開発環境依存情報の設定(DBB_BUILD)

参考:
Setting up and configuring zBuilder
Build configuration

zBuilderの基本的なセットアップを行います。ここでは開発環境に依存する共通の設定を行うことになります。

基本的にはz/OS USS上の DBB_BUILD環境変数で指定したビルド構成用のディレクトリ下のYAMLファイルをカスタマイズすることになります。
dbb-build.yamlを中心として、言語ごとの各種情報を個別のYAMLファイルで指定してきます。比較的汎用的に使用できるYAMLファイルのサンプルが製品導入ディレクトリに提供されているので、基本的にはそれをコピーしてカスタマイズしていきます。
ここでは最低限のカスタマイズのみ行います(Languages.yamlのみカスタマイズ)。

zBuilderは、Task(ビルドプロセスにおける処理単位)、Variable(各種プロパティ指定)、Conditions(処理を制御するための条件)、Lifecycle(Taks等を組み合わせたビルド定義)、といった概念を用いてビルドのプロセスをYAML形式で定義していくためのフレームワークです。

DBB_BUILDディレクトリ以下YAML例

dbb-build.yamlはとりあえずサンプルそのまま利用。

dbb-build.yaml
---
#
# Licensed materials - Property of IBM
# 5655-AC5 Copyright IBM Corp. 2024, 2025
# All rights reserved
# US Government users restricted rights  -  Use, duplication or
# disclosure restricted by GSA ADP schedule contract with IBM Corp.
#
###############################################################
# Include other build configuration files
###############################################################
version: 1.0.0
include: 
  # IMPORTANT!  Copy and configure Languages.yaml and any other 
  # language configuration files from #DBB_HOME/samples/languages
  # to your $DBB_BUILD directory before executing zBuilder.
  - file: Languages.yaml

#########################################
# Executable build lifecycles
#########################################
lifecycles:

  # build single programs from the command line
  - lifecycle: file
    
    # define the list of tasks to execute during the build lifecycle
    tasks:
      - Start
      - ScannerInit
      - MetadataInit
      - FileAnalysis
      - Languages    # Defined in Languages.yaml
      - Finish

  # build all programs for the application
  - lifecycle: full
    
    # define the list of tasks to execute during the build lifecycle
    tasks:
      - Start
      - ScannerInit
      - MetadataInit
      - FullAnalysis
      - Languages    # Defined in Languages.yaml
      - Finish

  # build only programs impacted by changes to the application
  - lifecycle: impact

    # Optional argument to supply base line references for calculating change files
    # See https://www.ibm.com/docs/en/dbb/3.0?topic=index-task-impactanalysis
    cli:
      usage: dbb build impact [arguments] [options]
      options:
        - longOption: "baselineRef"
          hasArg: true
          description: "Overrides the baseline reference to measure changes from."
    
    # define the list of tasks to execute during the build lifecycle
    tasks:
      - Start
      - ScannerInit
      - MetadataInit
      - ImpactAnalysis
      - Languages    # Defined in Languages.yaml
      - Finish

  # build only changed programs on a topic branch which will be merged back into the main build branch
  - lifecycle: merge
 
    # define the list of tasks to execute during the build lifecycle
    tasks:
      - Start
      - ScannerInit
      - MetadataInit
      - MergeAnalysis
      - Languages    # Defined in Languages.yaml
      - Finish

  # user build for a single program 
  - lifecycle: user
    variables:
      - name: userbuild
        value: true

    # CLI options specific to userbuild
    cli:
      usage: dbb build user [arguments] [options]
      options:
        - longOption: "dependencyFile"
          hasArg: true
          description: "JSON dependency file provided by an IDE used to skip the execution of the DBB scanner."
        - longOption: "errPrefix"
          hasArg: true
          description: "Error prefix for writing error feedback to the Remote Error List view."
        - longOption: "debug"
          hasArg: false
          description: "Enables the debug options on load modules."
    
    # define the list of tasks to execute during the build lifecycle
    tasks:
      - Start
      - ScannerInit
      - FileAnalysis
      - Languages    # Defined in Languages.yaml
      - task: UnitTest
        condition: ${STATUS} == 2 || ${STATUS} == 0 # Skip task on build error or PREVIEW
      - Finish
  
  # Scan source files and existing load modules to collect dependency data for source and outputs without creating load modules.
  - lifecycle: metadata
    variables:
      - name: printScannedItems
        value: true
    # define the list of tasks to execute during the build lifecycle
    tasks:
      - Start
      - ScannerInit
      - MetadataInit
    # - FullAnalysis
      - ImpactAnalysis
      - task: ScanLoadModule
        variables:
          - name: pds
            value: ${HLQ}.LOAD
      - Finish
      
#########################################################################
# Basic task configurations that can be referenced by multiple lifecycles
#########################################################################
tasks:

  # basic build initialization
  - task: Start
  
  # initialize metadata store
  - task: MetadataInit

  # initialize dependency scanners
  - task: ScannerInit
  
  # create simple build list
  - task: FileAnalysis
  
  # create full build list
  - task: FullAnalysis

  # create a build list containing impacted files
  - task: ImpactAnalysis

  # create a build list of topic branch changes flowing back to the main build branch
  - task: MergeAnalysis
    
  # build finialization
  - task: Finish
  
  # default empty Languages stage
  # to be replaced by content of Languges.yaml
  - stage: Languages
    tasks:

Languages.yamlでは、当該環境のライブラリ情報(言語環境やミドルウェアのHLQ)など、環境依存の情報を設定する必要があるため、カスタマイズは必須です。

Languages.yaml
---
#
# Licensed materials - Property of IBM
# 5655-AC5 Copyright IBM Corp. 2024, 2025
# All rights reserved
# US Government users restricted rights  -  Use, duplication or
# disclosure restricted by GSA ADP schedule contract with IBM Corp.
#
#########################################################
# Sample zBuilder language task and variable declarations
#########################################################
version: 1.0.0

#########################################################
# Import language task configurations
#########################################################
include:
  - file: Transfer.yaml
  - file: BMS.yaml
  - file: Cobol.yaml
  - file: CobolTestcase.yaml
  - file: CPP.yaml
  - file: Assembler.yaml
  - file: PLI.yaml
  - file: REXX.yaml
  - file: LinkEdit.yaml

############################################################################
# stage: Languages used to create a reusable list of language configurations
############################################################################
tasks:
  - stage: Languages
    tasks:
     - Transfer       # Defined in Transfer.yaml
     - BMS            # Defined in BMS.yaml
     - Cobol          # Defined in Cobol.yaml
     - CobolTestcase  # Defined in CobolTestcase.yaml
     - CPP            # Defined in CPP.yaml
     - Assembler      # Defined in Assembler.yaml
     - PLI            # Defined in PLI.yaml
     - LinkEdit       # Defined in LinkEdit.yaml
     - REXX           # Defined in REXX.yaml

##############################################################################
# Partition Data Sets (PDS) used by included language tasks
# Please provide a fully qualified DSN for each build variable below as needed
##############################################################################
variables:

  ############################################################
  # Start: Datasets required for MortgageApplication sample
  ############################################################

  # z/OS macro library. Example: SYS1.MACLIB
  - name: MACLIB
    value: SYS1.MACLIB

  #  value:

  # LE (Language Environment) load library. Example: CEE.SCEELKED
  - name: SCEELKED
    value: CEE.SCEELKED

  #  value:

  # High Level Assembler (HLASM) load library. Example: ASM.SASMMOD1
  - name: SASMMOD1
    value: ASM.SASMMOD1

  #  value:

  # Cobol Compiler Data Sets. Example: COBOL.V6R1M0.SIGYCOMP
  - name: SIGYCOMP
    value: IGY.V6R5M0.SIGYCOMP

  #  value:

  # CICS Macro Library. Example: CICSTS.V6R1M0.CICS.SDFHMAC
  - name: SDFHMAC
    value: CICSTS63.CICS.SDFHMAC

  #  value:

  # CICS COBOL Library. Example: CICSTS.V6R1M0.CICS.SDFHCOB
  - name: SDFHCOB
    value: CICSTS63.CICS.SDFHCOB

  #  value:

  # CICS Load Library. Example: CICSTS.V6R1M0.CICS.SDFHLOAD
  - name: SDFHLOAD
    value: CICSTS63.CICS.SDFHLOAD

  #  value:

  # DB2 Load Library. Example: DB2.V12R1M0.SDSNLOAD
  - name: SDSNLOAD
    value: DB2V13.SDSNLOAD

  #  value:

  # Optional IDz Load Library. Needed for Error Feedback option. Example: FEL.V16R0M0.SFELLOAD
  - name: SFELLOAD
    value: FEL.SFELLOAD

  #  value:

  ############################################################
  # End: Datasets required for MortgageApplication sample
  ############################################################

  ############################################################
  # Start: Other datasets
  ############################################################

  ##############################
  # Assembler Datasets
  ##############################

  # Assembler macro library. Example: CEE.SCEEMAC
  - name: SCEEMAC
    value: CEE.SCEEMAC

  #  value:

  ##############################
  # C/C++ Datasets
  ##############################

  # Contains standard C++ header files. Example: CEE.SCEEH
  - name: SCEEH
    value: CEE.SCEEH
  #   value:

  # Contains standard C header files. Example: CEE.SCEEH.H
  - name: SCEEHH
    value: CEE.SCEEH.H

  #   value:

  # Contains standard system header files. Example: CEE.SCEEH.SYS.H
  - name: SCEEHSH
    value: CEE.SCEEH.SYS.H

  #   value:

  # Contains standard internet operations headers. Example: CEE.SCEEH.ARPA.H
  - name: SCEEHAH
    value: CEE.SCEEH.ARPA.H

  #   value:

  # Contains standard network interface headers. Example: CEE.SCEEH.NET.H
  - name: SCEEHNH
    value: CEE.SCEEH.NET.H

  #   value:

  # Contains standard internet protocol headers. Example: CEE.SCEEH.NETINET.H
  - name: SCEEHNIH
    value: CEE.SCEEH.NETINET.H

  #   value:

  # Contains standard template definitions. Example: CEE.SCEEH.T
  - name: SCEEHT
    value: CEE.SCEEHHT

  #   value:

  # Contains class library header files. Example: CBC.SCLBH.H
  - name: SCLBHH
    value: CBC.SCLBH.H

  #   value:

  # Required for XLC/C++ Compiler. Example: CEE.SCEERUN
  - name: SCEERUN
    value: CEE.SCEERUN
  #   value:

  # Contains the runtime library routines needed during execution of applications, and those that require to reside in a PDSE. Example: CEE.SCEERUN2
  - name: SCEERUN2
    value: CEE.SCEERUN2

  #   value:

  # Required for XLC/C++ Compiler. Example: CBC.SCCNCMP
  - name: SCCNCMP
    value: CBC.SCCNCMP

  #   value:

  # Contains the message file to be used by the C pre-linker. Example: CEE.SCEEMSGP
  - name: SCEEMSGP
    value: CEE.SCEEMSGP

  #   value:

  # Contains side-decks for DLLs provided by Language Environment. Example: CEE.SCEELIB
  - name: SCEELIB
    value: CEE.SCEELIB

  #   value:

  ##############################
  # CICS Datasets
  ##############################

  # CICS PLI Library. Example: CICSTS.V6R1M0.CICS.SDFHPL1
  - name: SDFHPL1
    value: CICSTS63.CICS.SDFHPL1

  #  value:

  ##############################
  # Db2 Datasets
  ##############################

  # DB2 Exit Library. Example: DB2.V12R1M0.SDSNEXIT
  - name: SDSNEXIT
    value: DB2V13.SDFHEXIT

  #  value:

  ##############################
  # Debug Datasets
  ##############################

  # IBM Debug Library containing Exits
  - name: SEQAMOD
    value: EQAW.SEQAMOD

  #  value:

  # IBM Debug Tool library containing necessary TAz copybooks
  #- name: SEQASAMP
  #  value:

  ##############################
  # IDz Datasets
  ##############################

  # Optional IDZ zUnit / WAZI VTP library containing necessary copybooks. Example : FEL.V16R2M0.SBZUSAMP
  #- name: SBZUSAMP
  #  value:

  ##############################
  # IMS Datasets
  ##############################

  # IMS Macro Library. Example: DFS.V11R1M0.SDFSMAC
  - name: SDFSMAC
    value: IMSV15.SDFSMAC

  #  value:

  # IMS RESLIB. Example: DFS.V11R1M0.SDFSRESL
  - name: SDFSRESL
    value: IMSV15.SDFSRESL

  #  value:

  ##############################
  # MQ Datasets
  ##############################

  # MQ COBOL Library. Example: CSQ.V9R4M0.SCSQCOBC
  - name: SCSQCOBC
    value: MQCD94.SCSQCOBC

  #  value:

  # MQ PLI Library. Example: CSQ.V9R4M0.SCSQPLIC
  - name: SCSQPLIC
    value: MQCD94.SCSQPLIC

  #  value:

  # MQ Assembler Library. Example: CSQ.V9R4M0.SCSQMACS
  - name: SCSQMACS
    value: MQCD94.SCSQMACS

  #  value:

  # MQ Load Library. Example: CSQ.V9R4M0.SCSQLOAD
  - name: SCSQLOAD
    value: MQCD94.SCSQLOAD

  #  value:

  ##############################
  # PD Tools Datasets
  ##############################

  # PD Tools Common Component load library. Example : PDTCC.V1R8.SIPVMODA
  - name: SIPVMODA
    value: IPV.SIPVMODA

  #  value:

  ##############################
  # PL/I Datasets
  ##############################

  # PL/I Compiler Data Sets.  Example: PLI.V6R1M0.SIBMZCMP
  - name: IBMZPLI
    value: PLI.V6R2M0.SIBMZCMP

  #  value:

  ############################################################
  # End: Other Datasets
  ############################################################

Cobol.yamlもサンプルをそのまま利用(使用するCOBOL環境に合わせて適宜カスタマイズ)。

Cobol.yaml
---
#
# Licensed materials - Property of IBM
# 5655-AC5 Copyright IBM Corp. 2024, 2025
# All rights reserved
# US Government users restricted rights  -  Use, duplication or
# disclosure restricted by GSA ADP schedule contract with IBM Corp.
#
####################################
# Cobol language configuration
#################################### 

version: 1.0.3
tasks:
  # Cobol Language task
  - language: Cobol

    # source file association patterns
    sources:
      - "**/cobol/*.cbl"
      
    # overridable variables
    variables:
      # conditional variable builds compile parameters i.e CICS,SQL
      - name: compileParms
        append:
          - condition: ${IS_CICS}
            value: CICS
          - condition: ${IS_SQL}
            value: SQL
          - condition: 
              exists: errPrefix
            value: ADATA,EX(ADX(ELAXMGUX))
          - condition: 
              exists: debug
              eval: ${debug}
            value: TEST
            
      # flag to perform linkedit
      - name: doLinkEdit
        value: true
        
      # default link edit parameters
      - name: linkEditParms
        value: MAP,RENT

      # build record output deploy type
      - name: deployType
        value: LOAD  # default value
        select:
          - condition: ${IS_CICS}
            value: CICSLOAD
          - condition: ${IS_DLI}
            value: IMSLOAD
          - condition: ${isIMS}
            value: IMSLOAD

      # flag to activate IMS options
      - name: isIMS
        value: false
        
      # default dependency search path for single repository build
      - name: dependencySearchPath
        value: search:${WORKSPACE}/?path=${APP_DIR_NAME}/copybook/*.cpy

      # flag incating to scan the load module for static link dependencies  
      - name: scanLoadModule
        value: true
        
      # Uncomment to resolve logical files using resolveSubsystems
      # - name: subsystemSearchPath
      #   value: ${dependencySearchPath}

    # datasets that need to be created / validated for this language configuration
    datasets:
      - name: ${HLQ}.COBOL
        options: cyl space(1,1) lrecl(80) dsorg(PO) recfm(F,B) dsntype(library)
      - name: ${HLQ}.COPY
        options: cyl space(1,1) lrecl(80) dsorg(PO) recfm(F,B) dsntype(library)
      - name: ${HLQ}.BMS.COPY
        options: cyl space(1,1) lrecl(80) dsorg(PO) recfm(F,B) dsntype(library)
      - name: ${HLQ}.DBRM
        options: cyl space(1,1) lrecl(80) dsorg(PO) recfm(F,B) dsntype(library)
      - name: ${HLQ}.OBJ
        options: cyl space(1,1) lrecl(80) dsorg(PO) recfm(F,B) dsntype(library)
      - name: ${HLQ}.LOAD
        options: cyl space(1,1) dsorg(PO) recfm(U) blksize(32760) dsntype(library)

    # list of steps to execute for each program processed by this language configuration
    steps:
    
      # Copy build file and dependency files to data sets
      - step: copySrc
        type: copy
        target: //'${HLQ}.COBOL(${MEMBER})'
        dependencyCopy:
          - search: ${dependencySearchPath}
            mappings:
              - source: "**/*"
                dataset: ${HLQ}.COPY
                
      # COBOL compile step          
      - step: compile
        type: mvs
        pgm: IGYCRCTL
        parm: ${compileParms}
        maxRC: 4
        dds:
          - { name: "SYSIN", dsn: "${HLQ}.COBOL(${MEMBER})", options: "shr", input: true }
          - { name: "SYSLIN", dsn: "${HLQ}.OBJ(${ENTRY})", options: "shr", output: true, deployType: "OBJ" }
          - { name: "TASKLIB", dsn: "${SIGYCOMP}", options: "shr" }
          - {                  dsn: "${SDFHLOAD}", condition: "${IS_CICS}", options: "shr" }
          - {                 dsn: "${SDSNLOAD}", condition: "${IS_SQL}", options: "shr" }
          - {                 dsn: "${SFELLOAD}", condition: { exists: "SFELLOAD" }, options: "shr" }
          - { name: "SYSPRINT", log: "${STEP}-${FILE_NAME}.log", logEncoding: "${LOG_ENCODING}", options: "cyl space(5,5) unit(vio) blksize(133) lrecl(133) recfm(f,b) new" }
          - { name: "SYSMDECK", options: "cyl space(5,5) unit(vio) blksize(80) lrecl(80) recfm(f,b) new" }
          - { name: "SYSUT1", options: "cyl space(5,5) unit(vio) blksize(80) lrecl(80) recfm(f,b) new" }
          - { name: "SYSUT2", options: "cyl space(5,5) unit(vio) blksize(80) lrecl(80) recfm(f,b) new" }
          - { name: "SYSUT3", options: "cyl space(5,5) unit(vio) blksize(80) lrecl(80) recfm(f,b) new" }
          - { name: "SYSUT4", options: "cyl space(5,5) unit(vio) blksize(80) lrecl(80) recfm(f,b) new" }
          - { name: "SYSUT5", options: "cyl space(5,5) unit(vio) blksize(80) lrecl(80) recfm(f,b) new" }
          - { name: "SYSUT6", options: "cyl space(5,5) unit(vio) blksize(80) lrecl(80) recfm(f,b) new" }
          - { name: "SYSUT7", options: "cyl space(5,5) unit(vio) blksize(80) lrecl(80) recfm(f,b) new" }
          - { name: "SYSUT8", options: "cyl space(5,5) unit(vio) blksize(80) lrecl(80) recfm(f,b) new"}
          - { name: "SYSUT9", options: "cyl space(5,5) unit(vio) blksize(80) lrecl(80) recfm(f,b) new" }
          - { name: "SYSUT10", options: "cyl space(5,5) unit(vio) blksize(80) lrecl(80) recfm(f,b) new" }
          - { name: "SYSUT11", options: "cyl space(5,5) unit(vio) blksize(80) lrecl(80) recfm(f,b) new" }
          - { name: "SYSUT12", options: "cyl space(5,5) unit(vio) blksize(80) lrecl(80) recfm(f,b) new" }
          - { name: "SYSUT13", options: "cyl space(5,5) unit(vio) blksize(80) lrecl(80) recfm(f,b) new" }
          - { name: "SYSUT14", options: "cyl space(5,5) unit(vio) blksize(80) lrecl(80) recfm(f,b) new" }
          - { name: "SYSUT15", options: "cyl space(5,5) unit(vio) blksize(80) lrecl(80) recfm(f,b) new" }
          - { name: "SYSUT16", options: "cyl space(5,5) unit(vio) blksize(80) lrecl(80) recfm(f,b) new" }
          - { name: "SYSUT17", options: "cyl space(5,5) unit(vio) blksize(80) lrecl(80) recfm(f,b) new" }
          - { name: "SYSLIB", dsn: "${HLQ}.COPY", options: "shr" }
          - {                 dsn: "${HLQ}.BMS.COPY", options: "shr" }
          - {                 dsn: "${SDFHCOB}", condition: "${IS_CICS}", options: "shr" }
          - {                 dsn: "${SCSQCOBC}", condition: "${IS_MQ}", options: "shr" }
          - { name: "DBRMLIB", dsn: "${HLQ}.DBRM(${MEMBER})", condition: "${IS_SQL}", options: "shr", output: true, deployType: "DBRM" }          
          - { name: "SYSADATA", condition: { exists: "errPrefix" }, options: "DUMMY" }
          - { name: "SYSXMLSD", condition: { exists: "errPrefix" }, dsn: "${HLQ}.${errPrefix}.SYSXMLSD.XML", options: "tracks space(200,40) dsorg(PS) blksize(27998) lrecl(16383) recfm(v,b) new keep" }


      # Link-Edit step
      - step: linkEdit
        type: mvs
        pgm: IEWBLINK
        parm: ${linkEditParms}
        condition: ${doLinkEdit}
        maxRC: 0
        dds:
          - { name: "SYSLIN", dsn: "${HLQ}.OBJ(${ENTRY})", options: "shr" }
          - { name: "SYSLMOD", dsn: "${HLQ}.LOAD(${ENTRY})", options: "shr", output: true, deployType: "${deployType}", scan: "${scanLoadModule}" }
          - { name: "SYSPRINT", log: "${STEP}-${FILE_NAME}.log", logEncoding: "${LOG_ENCODING}", options: "cyl space(5,5) unit(vio) blksize(133) lrecl(133) recfm(f,b) new" }
          - { name: "SYSUT1", options: "cyl space(5,5) unit(vio) blksize(80) lrecl(80) recfm(f,b) new" }
          - { name: "RESLIB", condition: { exists: RESLIB }, options: "shr" }
          - { name: "SYSLIB", dsn: "${HLQ}.OBJ", options: "shr" }
          - {                 dsn: "${SCEELKED}", options: "shr" }
          - {                 dsn: "${SDFHLOAD}", condition: "${IS_CICS}", options: "shr" }
          - {                 dsn: "${SDSNLOAD}", condition: "${IS_SQL}", options: "shr" }


1-(2) アプリケーション依存情報の設定(dbb-app.yaml)

参考: Application configuration

1-(1)で指定した開発環境依存情報は、いわばその環境でビルド処理を行う際のデフォルト構成ということになります。
アプリケーションごとにビルドの方法や条件は異なることがありますので、アプリケーションに依存した情報はアプリケーションごとに個別に与えることで、1-(1)で指定した内容を上書き指定することができます。
この設定は、dbb-app.yamlというYAMLファイルを中心に管理されます。このファイルは基本的にはアプリケーションのソースコード群と一緒にGitで管理されることを想定しています(ビルド・エンジニアによって一元管理したい場合はUSS上のDBB_BUILDディレクトリ下で管理することも可能です)。

dbb-app.yaml例
dbb-app.yaml
################################################################
# LICENSED MATERIALS - PROPERTY OF IBM
# "RESTRICTED MATERIALS OF IBM"
# (C) COPYRIGHT IBM CORPORATION 2020, 2025. ALL RIGHTS RESERVED
# US GOVERNMENT USERS RESTRICTED RIGHTS - USE, DUPLICATION,
# OR DISCLOSURE RESTRICTED BY GSA ADP SCHEDULE
# CONTRACT WITH IBM CORPORATION
################################################################

version: 1.0.0

application:
  name: zopeneditor-sample

  tasks:
    - task: Cobol
      sources:
        - "**/COBOL/*.cbl"

      variables:
        - name: dependencySearchPath
          value: search:${WORKSPACE}/?path=${APP_DIR_NAME}/COPYBOOK/*.cpy

    - task: PLI
      sources:
        - "**/PLI/*.pli"

      variables:
        - name: dependencySearchPath
          value: search:${WORKSPACE}/?path=${APP_DIR_NAME}/INCLUDES/*.inc

    - task: Assembler
      sources:
        - "**/ASM/*.asm"

      variables:
        - name: dependencySearchPath
          value: search:${WORKSPACE}/?path=${APP_DIR_NAME}/ASMMAC/*.asm;${APP_DIR_NAME}/ASMCOPY/*.asm

2. ユーザー・ビルド情報設定

参考: Setting up user build for DBB zBuilder

2-(1) 共通(zapp.yaml)

ZAPPファイル(zapp.yaml)にてユーザー・ビルドの実行方法を指定します。
以下のようにtype: dbbを指定したプロファイルで指定することになります。

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"
        - "*.txt"
...

プロパティ補足:

  • name: プロファイル名 (後述のsetting.jsonのdbbDefaultZappProfileと合わせる)
  • type: dbbで固定
  • settings.command: DBB起動コマンド (上の例はShared Daemonを使用するオプションも指定している)
    settings.buildScriptPath: zAppBuild提供のbuild.groovyのパス
  • settings.lifecycle: userを指定することで"ユーザー・ビルド"(dbb-build.yamlで定義しているlifecycle)が実行される
  • settings.lifecycleArgs: ユーザー・ビルドを実行する際に渡す引数
  • additionalDependencies: zBuilderのアプリケーション依存情報の設定ファイル
  • logFilePatterns: ダウンロード対象のログファイル名

※Shared Daemonについて補足:
DBBによるビルドプロセスはJVM上で処理されます。デフォルトでは、ユーザー・ビルドの指示をトリガーにUSS上でdbbコマンドが実行され、その都度JVMが起動して処理されます。JVMの起動は一般的に非常にパフォーマンスが悪く、特にZD&TやTAZ:On-Demand EnvironmentなどInterl PC上でのエミュレーターを使っている場合はその影響は顕著です。JVM起動の負荷を軽減させるために、常駐の共有JVMをDaemonとして立ち上げておきそれを使用させることができます。上のコマンドの引数 -DBB_DAEMON_HOST および -DBB_DAEMON_PORT はShared Daemonを使用するたmのオプションです。当然ですが、これを使用するためには事前にShared Daemonを構成して起動させておく必要があります。

2-(2) アプリケーション固有(setting.json)

まず、開発環境として使用するz/OSへの接続プロファイルを指定する必要があります。z/OSMF(or RSE)、および、SSHのプロファイルを指定する必要があります。
設定画面だとZopeneditor: Zoweの欄で以下のように指定します。
image.png

settings.jsonファイルだと以下のようになります。

settings.json
...
    "zopeneditor.zowe": {
        "defaultCliProfile": "odeinst1.zosmf",
        "defaultSshCliProfile": "odeinst1.ssh"
    },
...

次に、ユーザー・ビルド時に使用されるユーザー固有情報を変数として指定します。
設定画面だとZopeneditor > Userbuild: User Settingsの欄で以下のように指定します。
image.png

settings.jsonファイルだと以下のようになります。

settings.json
...
    "zopeneditor.userbuild.userSettings": {
        "dbbWorkspace": "/u/DEV01/projects",
        "dbbHlq": "DEV01.DBB",
        "dbbDefaultZappProfile": "zBuilder-userbuild",
        "localLogDir": "dbb_logs"
    },
...

ここで指定している変数について補足します。

  • dbbWorkspace: ソースや関連プロパティ・ファイルは、一旦z/OS上のUSSファイルシステム上に転送されますが、その一時ファイルを保持しておくための作業ディレクトリのトップを指定します。このディレクトリは事前に作成しておく必要があります。
  • dbbHlq: ソースやCOPYBOOKなどビルドに必要なリソース、ロードモジュールなどの生成物が配置されるデータセットのHLQです。存在しなければプロパティの指定に基づいて動的に作成されます。
  • dbbDefaultZappProfile: ZAPPファイル(zapp.yaml)で指定されるユーザー・ビルド用のプロファイル名
  • localLogDir: ビルド結果のログを保持するPC側のディレクトリです。

ユーザー・ビルド実行例

実際に、シンプルなサンプル・ソースを使ってユーザー・ビルドを実行した時のログを元に流れを解説していきます。

使用するGitリポジトリ: https://github.com/tomotagwork/ZoweTest2026
ユーザー・ビルドするCOBOLソース: TSUB02.cbl
ユーザー・ビルド実行時のログ: User Build Log

ユーザー・ビルドのフロー

ビルド対象のソースをエディターで開き、右クリック - 「フルアップロードでIBM User Buildを実行します」を選択すると、ユーザー・ビルドが走ります。
この時、裏で以下のような処理が自動的に実行されます。

image.png

個々の処理について補足していきます。

(1) 各種プロパティーのチェック

image.png

VS Codeのワークスペースのルートや、settings.json, ZAPPファイル(zapp.yaml)のプロパティーを確認します。
settings.json に指定されている SSH接続用プロファイル(defaultSshCliProfile) の指定に基づき、このプロファイルでSSH接続できるかどうかチェックします。

.gtiattributesファイルがあるかどうかもチェックし、あれば、以降のファイル転送の際には.gitattributesファイルに指定された情報を元にコード変換が行われます。

参考:
Z Open Editor - Character conversion using .gitattributes
IDz - Character conversion using .gitattributes

(2) アプリ依存情報のアップロード

image.png

dbb-app.yamlおよび、それに紐づくアプリ依存情報の設定ファイルをUSS上にアップロードします。
アップロードされる先は、ディレクトリ<dbbworkspece>\<repositoryName>です。<dbbworkspace>はsettings.jsonで指定される値で、<repositoryName>はzapp.yamlで指定される値です。
今回の例では、/u/DEV01/projects/ZoweTest2026/ということになります。

※補足:
VS Code上でビルド対象のソースを右クリックすると、ユーザー・ビルド用のメニューとしては以下の2つが選択できます。

  • 「IBM User Buildを実行します」
  • 「フルアップロードでIBM User Buildを実行します」

両者の違いは、このdbb-app.yamlおよび関連のァイルをアップロードするかどうかの違いです。最初の一回、もしくはこれらのファイルを書き換えた場合は"フルアップロード"する必要があります。

(3) ソースのアップロード

image.png

ビルド対象のソースをUSS上にアップロードします。アップロードされる先は、dbb-app.yamlと同様、ディレクトリ<dbbworkspece>\<repositoryName>です。
今回はTest01/cobol/TSUB02.cblがビルド対象のソースなので、/u/DEV01/projects/ZoweTest2026/Test01/cobol/TSUB02.cblにアップロードされます。

(4) ソースから参照しているCOPYBOOKをアップロード

image.png

ビルド対象のソースから参照しているCOPYBOOKを探索します(探索パスはzapp.yamlのProperty Group)。
今回は、以下の2つのCOPYBOOKを参照しているので、これらをUSS上にアップロードします。

  • Test01\copybook\CPPARM02.cpy/u/DEV01/projects/ZoweTest2026/Test01/copybook/CPPARM02.cpy
  • Test01\copydir\copybook2\CPPARM22.cpy/u/DEV01/projects/ZoweTest2026/Test01/copydir/copybook2/CPPARM22.cpy

(5) ビルド・スクリプト実行

image.png

zapp.yamlファイルに指定したdbbプロファイルに従い、DBB/zBuilderのビルド用スクリプトが実行されます

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"
        - "*.txt"
...

上のプロパティ内で${xxx}で指定されている部分は変数なのでこの部分が適宜解釈されて、結果的には以下のようなコマンドがSSH経由で実行されることになります。

$DBB_HOME/bin/dbb -DBB_DAEMON_HOST 127.0.0.1 -DBB_DAEMON_PORT 8180 build user --hlq DEV01.DBB --verbose --errPrefix U7481467 '/u/DEV01/projects/ZoweTest2026/Test01/cobol/TSUB02.cbl'

参考: Command line options and arguments

※$DBB_HOMEについては、USS上の環境変数としてDBBインストールのパスを指定しておく必要があります。このコマンドは、settings.jsonのdefaultSshCliProfileで指定したSSH用プロファイルに基づいてSSH接続されますので、ここで使用されるユーザーでSSH接続されたシェルにて環境変数が有効化されている必要があります。(例えば全体に有効化するのであれば/etc/profileに指定。)

ここでは、実行されるスクリプトの動作について少し深掘りしていきます。

(5)-1 Lifecycle: user
Lifecycle: user
> Build start at 20260503.102618.269
> Started by 'DEV01' on 'VS01'
> Creating pre-defined variables:
  - APP_DIR: /u/DEV01/projects/ZoweTest2026
  - APP_DIR_NAME: ZoweTest2026
  - APPLICATION: zopeneditor-sample
  - HLQ: DEV01.DBB
  - LIFECYCLE: user
  - LOGS: /u/DEV01/projects/ZoweTest2026/logs
  - STATUS: 0
  - SYSNAME: VS01
  - SYSPLEX: LOCAL
- USER: DEV01
  - WORKSPACE: /u/DEV01/projects

dbbコマンドで lifecycle: userが指定されたので、ユーザー・ビルドを開始します。ここでは引数やプロジェクトの名前などを解釈します。

参考:
Build lifecycle
User build lifecycle

これ以降、Lifecycle:userに定義されている各Taskが実行されていきます。

(5)-2 Task: Start
Task: Start
> Setting source directory 'ZoweTest2026'
> Deleting existing logs directory '/u/DEV01/projects/ZoweTest2026/logs'
> Creating logs directory '/u/DEV01/projects/ZoweTest2026/logs'

後続のビルド処理のための一般的な初期化処理を行います。

参考:
Basic task
Task: Start

(5)-3 Task: ScannerInit
Task: ScannerInit
> Initializing default scanner 'Assembler' with extensions '[asm, mac]'
> Initializing default scanner 'C' with extensions '[c, h]'
> Initializing default scanner 'COBOL' with extensions '[cbl, cpy]'
> Initializing default scanner 'C++' with extensions '[cpp, hpp]'
> Initializing default scanner 'PL/I' with extensions '[pli, inc]'
> Initializing default scanner 'REXX' with extensions '[rexx, rex]'
> Initializing default scanner 'UnitTest' with extensions '[bzucfg]'

DBBのソースモジュールおよびロードモジュールのメタデータスキャナを初期化します。

参考:
Task: ScannerInit

(5)-4 Task: FileAnalysis
Task: FileAnalysis
> Task variables:
  - buildListFileExtension: txt
> Adding source file 'ZoweTest2026/Test01/cobol/TSUB02.cbl' to source list

ビルド対象のプログラムを判断し、そのリストを作成します。

参考:
Task: FileAnalysis

(5)-5 言語ごとの処理(ビルド実行)

image.png

Stage: Languages
Language: Transfer
> No files to process for language: Transfer.
Language: BMS
> No files to process for language: BMS.
Language: Cobol
> Building 'ZoweTest2026/Test01/cobol/TSUB02.cbl'
> File attributes: [LANGUAGE: COB, IS_CICS: false, IS_DLI: false, IS_MQ: false, IS_SQL: false]
> Step: copySrc
    > Type: copy
> Copy source '/u/DEV01/projects/ZoweTest2026/Test01/cobol/TSUB02.cbl' to target '//'DEV01.DBB.COBOL(TSUB02)''
> Copy dependency 'CPPARM02' from file 'ZoweTest2026/Test01/copybook/CPPARM02.cpy' to dataset 'DEV01.DBB.COPY(CPPARM02)'
    > Copy dependency 'CPPARM22' from file 'ZoweTest2026/Test01/copydir/copybook2/CPPARM22.cpy' to dataset 'DEV01.DBB.COPY(CPPARM22)'
> RC=0
> Step: compile
    > Type: mvs
> Execute pgm: IGYCRCTL, parm: ADATA,EX(ADX(ELAXMGUX))
> RC=0
  > Step: linkEdit
    > Type: mvs
    > Execute pgm: IEWBLINK, parm: MAP,RENT
> RC=0

...

ビルド対象のソースに関連する言語用の設定ファイルを判別し、その設定内容に応じたビルド処理を実行します。ここでは、対象のソースがCOBOLのため、Cobol.yamlに設定された内容に応じてMVSデータセットにソース類がコピーされ、コンパイル、リンク/エディットの処理が実行され、結果がUSS上のファイルに出力されます。

参考:
Stage
Language task
Language task: Cobol.yaml

(5)-6 Task: Finish
Task: Finish
> Writing build report data to "/u/DEV01/projects/ZoweTest2026/logs/BuildReport.json"
> Writing build report to "/u/DEV01/projects/ZoweTest2026/logs/BuildReport.html"
> Writing build list to "/u/DEV01/projects/ZoweTest2026/logs/buildList.txt"
> Build ended at 20260503.102632.231
> Duration of build : 00 min, 13 sec
> Total files processed : 1
> Build Status : CLEAN
__RC=0__

ビルドプロセスの終了処理を行い、最終的なレポートファイルの作成などを行います。

参考:
Task: Finish

(6) ログのダウンロード

image.png

/u/DEV01/projects/ZoweTest2026/dbb_logs/にビルド結果のファイルが生成されるので、そこからzapp.yamlのlogFilePatternsの指定に合致するパターンのファイルがローカルPC(settings.json - zopeneditor.userbuild.userSettingsのlocalLogDirに指定したディレクトリ) にダウンロードされます。
今回の場合は、以下のファイルがダウンロードされます。

  • compile-TSUB02.cbl.log
  • linkEdit-TSUB02.cbl.log
  • BuildReport.html
  • BuildReport.json
  • RuntimeReport.json
  • buildList.txt

※IDzのライセンスを適用している状態だとAdvanced Capabilityという追加機能が有効化されます。その場合、 ibm-userbuild-error-feedback.xmlというファイルもダウンロードされ、ビルド時のエラー情報がソースにマッピングされます。詳細は後続記事で解説します。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?