VS Code - z/OS連携[Zowe Explorer V3編]  (1)概要, 基本構成

# はじめに

VS CodeのExtensionを使用すると、VS Codeからz/OSに接続してz/OS上のリソースを操作することができます。例えば、MVSデータセット/USS上のファイルを参照/編集したり、JCLのサブミットやJOBLOG参照などをVS Codeから行えるようになります。VS Codeはあくまで開発ツールの一種という位置づけなので、細かなシステム管理オペレーションの観点で言えば完全にPCOM(3270エミュレーター)を置き換え得るものではないと考えますが、かなりの部分でz/OS関連の操作性を向上させてくれるツールと言えます。

この辺りについては、以前も以下のような記事を書いていますが、日々機能拡張や設定変更などが加えられていていますので改めて整理しなおします。

過去記事:
[VS Code - z/OS接続構成 (Zowe CLI V2編)](https://qiita.com/tomotagwork/items/e48be1114a5fca77d976)
[VSCodeを使用したメインフレーム・アプリケーション開発](https://qiita.com/tomotagwork/items/085b91098fce3aabaeaf)

なお、当記事は2025年1月時点の情報をベースに記載しています。(Zowe Explorer V3.0レベル)

## 関連記事

[VS Code - z/OS連携[Zowe Explorer V3編] (1)概要, 基本構成](https://qiita.com/tomotagwork/items/4eb3e51b01b8db76cefc)
[VS Code - z/OS連携[Zowe Explorer V3編] (2)基本操作](https://qiita.com/tomotagwork/items/7e6ab9970d4b8a1fb219)
[VS Code - z/OS連携[Zowe Explorer V3編] (3)VS Codeからのユーザー・ビルド](https://qiita.com/tomotagwork/items/45e46ca55e38cec44a58)

# 関連コンポーネントの整理

VS CodeのExtensionからz/OSに接続して操作するにあたって、関連する技術、仕組みについて補足しておきます。

## 接続構成イメージ

VS CodeのExtensionからz/OSに接続する際には、z/OSMFやSSHなど、既存の他の仕組みで使われている接続方式/ホスト側コンポーネントが流用されています。VS Code Extension - z/OS間の主要な接続構成のイメージを以下に図で示します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/63475adf-561d-fc84-a336-3f10617c0fc3.png)

## VS Codeから実行できる操作と必要コンポーネントの関係
上の図で示した接続構成が全て必須という訳ではありません。利用したい機能/操作に応じて必要な接続構成を選択して利用すればよいです。以下に、VS Codeから利用できる主な機能/操作と、それを実現する際に必要なコンポーネントについて整理します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/255e97d5-c4a5-8a1c-39e7-ec0b6f566927.png)

## 用語、コンポーネント補足

### Zowe
Zoweというのは、z/OSの管理やアプリ開発を効率化するためのOSSを活用したフレームワークです。z/OS上、あるいは、オープン系プラットフォーム上で稼働する様々なコンポーネントが提供されています。
このフレームワークを使用して独自のツールを作成することもできますし、これを利用した製品機能、OSSなども出てきており、モダナイズされたz/OSの新しい使い方、新しいUIなどが利用できるようになってきています。

参考: 
[Zowe Overview](https://docs.zowe.org/stable/getting-started/overview)
[Zowe Architecture](https://docs.zowe.org/stable/getting-started/zowe-architecture)
[Download Zowe](https://www.zowe.org/download.html)

※VS Codeから利用できるようにするために、上で示されているコンポーネントを全てセットアップしなければいけないという訳ではありません。必要なものをピックアップして使えばよいというイメージです。

### Zowe CLI
Zowe CLIはZoweで提供されるコンポーネントの1つです。これはz/OS外のプラットフォーム(Windows, Linuxなど)からz/OSの操作を行うためのCLI(Command Line Interface)を提供するものです。これを使用すると、PCのコマンドラインからz/OS上のデータセットを取得したりJCLをサブミットしたりMVSコマンドを投入できるということになります。すなわち、WindowsのバッチやLinux上のシェル・スクリプトを組んでz/OSのオペレーションをある程度自動化するということも可能です。
この時操作対象とのz/OSと接続する必要がありますが、使用する機能によってホスト側コンポーネントの要件が変わってきます。基本的なデータセット操作/JCL関連操作についてはz/OSMF or RSEが使用されます(後述)。それに加えてSSHが使われるケースがある、という感じです。

参考:
[Zowe CLI installation checklist](https://docs.zowe.org/stable/user-guide/cli-install-cli-checklist)

### Zowe Explorer Extension
VS CodeのUIからz/OSの操作(データセット編集、JCSサブミットなど)を行えるようにするためのExtensionです。Zowe CLIのGUI版というイメージが分かりやすいかと思います。裏の動作原理はZowe CLIと同様なので、操作対象のz/OSとの接続には基本的にz/OSMF or RSE, SSHが使われます。
一般的にVS CodeのExtensionはインターネット接続が可能な環境であればMarketplaceからインストール可能で、Zowe Extensionも他のExtensionと同様の方法でMarketPlaceからインストールできます。

参考:
[Zowe Explorer installation checklist](https://docs.zowe.org/stable/user-guide/ZE-install-checklist)
[Marketplace-Zowe Explorer](https://marketplace.visualstudio.com/items?itemName=Zowe.vscode-extension-for-zowe)

※当初はZowe Extensionを使用する前提としてZowe CLIが必要でしたが(内部的にZowe CLIを利用)、最新版ではZowe CLIは個別にインストールする必要は無くなりました。が、z/OSとの接続プロファイルは共通で利用できますし、CLIも使えると何かと重宝するのでZowe CLIもセットで入れておくとよいでしょう。

### IBM Z Open Editor Extension
VS Code上でz/OSのアプリケーション開発を支援する各種機能を提供してくれるExtensionです。
まず基本的な機能としては、COBOL,PL/I,ASM,JCLなどのソース・コードを編集する際の支援として、エディター上で各言語に応じた支援機能が提供されます。分かりやすいところでは、例えばCOBOLのソースをエディターで開くとCOBOL構文を解釈して変数や予約語に応じて色分け表示してくれたり、リアルタイムにSyntax Checkが行われたり、コンテンツアシスト機能が提供されたり、プログラムの構造をアウトラインで表示してくれたりします。これらの機能は基本的にPC上のVS Code内で完結して提供される機能なので、例えばGitで管理されているソースをPC上にCloneして編集するといった環境など、z/OSと接続していないPCでも利用可能です。
ですが、前述のZowe Explorer Extensionと組み合わせることでさらに利用の幅が広がります。Zowe Explorerを使用すると、z/OSのMVSデータセットにあるCOBOLソースを直接VS Codeから開いて編集し、コンパイル/リンク用JCLを編集してサブミットし、JOBLOG確認する、という一連の操作をVS Code上でスマートに行えたりします。
さらに、有償製品であるDBBを使うと、Gitで管理されているソースをPC上で編集した後、以下の一連の操作を一発で行う"ユーザービルド"という仕組みも利用できます。
- z/OSへソース転送
- コンパイル/リンク実行
- 結果ダウンロード

当ExtensionもMarketplaceからインストール可能です。IBM Z Open Editor ExtensionはZowe Explorer Extensionが前提となっているため、Zowe Explorerもインストールする必要があります。

参考:
[Getting started with IBM Z Open Editor](https://ibm.github.io/zopeneditor-about/Docs/getting_started.html)
[Marketplace-IBM Z Open Editor](https://marketplace.visualstudio.com/items?itemName=IBM.zopeneditor)

### z/OSMF
z/OSMF(z/OS Management Facility)は、z/OS上で稼働するシステム管理用のコンポーネントです(z/OSに含まれる1機能)。実体としてはLibertyサーバーが稼働することになります。z/OSMFは管理用の様々な機能を提供しており、ブラウザーベースのUIや、z/OSの各種操作用のREST APIも提供されます。
Zowe ExplorerやZowe CLIは、z/OSMFとの接続構成を行うことで、内部的にREST APIを使用し、VS CodeのUIやコマンドインターフェースを通じてz/OSの操作を行うことが可能となります。

参考:
[Overview of z/OSMF](https://www.ibm.com/docs/en/zos/3.1.0?topic=zosmf-overview)
[Configuring z/OSMF](https://docs.zowe.org/stable/user-guide/cli-install-configure-zosmf/)

### RSE
VS Codeが登場する以前から、開発環境としてEclipseベースのツールが広く利用されてきました。PC上からリッチなUIでz/OSのアプリ開発を支援するツールとして随分前からRDz(Rational Developer for z/OS) => 現在は名前が変わってIDz(IBM Developer for z/OS)というEclipseベースの有用製品が提供されてきました。最近ではこのIDzの機能限定版ともいえるz/OS Explorerというツールも無償で利用できるようになっています。
これらのEclipseベースのツールを利用する際は、z/OSとの接続にRSE(Remote System Explorer)という独自プロトコルが使用され、z/OS側コンポーネントとしてRSE, JMON(JOB Monitor)というアドレス・スペースが稼働している必要があります。
このRSEでの接続を拡張してREST API化するRSE APIという機能があります。RSE,JMONに加えてRSE APIというコンポーネントをz/OS側に構成しておくことで、Zowe Explorer/Zowe CLIからRSE経由で接続し、z/OSの操作を行うことが可能となります。

参考:
[RSE API](https://www.ibm.com/docs/en/explorer-for-zos/3.3?topic=documentation-rse-api)

z/OSの基本操作(データセット操作、JCL実行など)を行う際に使用する接続形態として、z/OSMF or RSE どちらかを選択してそれぞれに応じた構成を行うということになります。

### SSH

SSH(セキュア・シェル)は、リモートのシステムに接続するためのセキュアなプロトコルです。一般的には今さら補足するようなものでもないほど当たり前に使われていますが、メインフレーム界隈ではいまだに浸透しているとは言い難い現状があります。
z/OSでは随分前からUnix System Serviceというその名の通りUnixベースのサービスが使えるようになっており、そこでOpen SSH機能も提供されています。
VS CodeのExtensionからSSH接続経由でz/OSとの連携を行うことで、各種拡張機能が利用できるようになります。

参考:
[Introduction to z/OS OpenSSH](https://www.ibm.com/docs/en/zos/3.1.0?topic=guide-introduction-zos-openssh)

# VS Code 基本構成例

ここでは Windows11 に VS Code の環境をセットアップし、z/OSとの基本的な接続構成を行う例を示します。
z/OSとはz/OSMF, SSHで接続するものとし、z/OS側構成は実施済の前提とします。

## VS Codeインストール
[VS Codeのダウンロードサイト](https://code.visualstudio.com/download)からインストーラーをダウンロード
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/7aeaf2a0-06c5-273c-38f0-4b5bde0fcaec.png)

ダウンロードされたexeを実行して指示に従って進めていけばOKです。

インストールが完了するとVS Codeが起動できるようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/0d0ce0ee-72b5-dad9-4d08-78df40f3c47c.png)


## Zowe Explorer Extension インストール

VS Codeを起動し、左端のExtensionsのアイコンをクリックしてExtensions Viewを開きます。ここではMarketplaceに登録されているExtensionのリストが表示されるので「Zowe Explorer」を検索し、Installをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/a49169b7-707d-2ac9-4dc0-3c69ecdee115.png)

## IBM Z Open Editor Extension インストール

同様にIBM Z Open Editor Extensionをインストールします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/ad11922d-0d0b-66a2-6a31-a50b199d77c5.png)

IBM Z Open Editor Extensionをインストールすると、以下のような Welcome viewが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/06fc335e-45a3-5fca-904d-482d5c950efb.png)

このExtensionの前提としてJava 17以降が必要ですが、ここの例だとJava17がセットアップされていない環境なので、前提が満たされていないことを示す赤い×マークが表示されています。

## Java設定

IBM Z Open Editor Extension利用の前提となるJava 17をセットアップします。
ここでは、IBM Semeru Runtime を使用することにします。

[IBM Semeru Runtimes Downloadsのサイト](https://developer.ibm.com/languages/java/semeru-runtimes/downloads/)からインストーラーをダウンロードします。
64-bit Java 17 LTS JDK の msi を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/8e6d9133-92f1-5f54-9e10-145203ff045a.png)

ダウンロードしたmsiファイルを実行して指示に従ってインストールすればOK
ここでは、デフォルトのパスにインストールする想定。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/9badca13-f461-c445-fa5f-f99a663a0877.png)

VS Codeの「Welcome to Z Open Editor」viewに戻ってPrerequisites以下の「64-bit Java version 17 or higher is found」のセクションを開きます。ここでいくつかJavaのパスを指定する方法がありますが、表の一番上の「zopeneditor.JAVA_HOME」のリンクをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/ba6aaed8-d8ad-3e15-42e1-144eb0e1a04e.png)

Zowe Explorerのオプション設定画面が開くので、ここでJAVA_HOMEとして先にインストールしたJavaのパスを指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/94f2d145-9585-e488-1938-69f6d3da6302.png)

「Welcome to Z Open Editor」view を再度確認すると、前提であるJava設定がOKであることを示す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/8936706f-43b8-bdc6-2b6d-96150a3f47d0.png)

## Japanese Language Pack インストール

必須ではありませんが、使い勝手のため日本語メニューが使えるようにしておきます。
※日本語訳がかなり微妙な部分もあるので、英語表記のままの方が分かりやすいかもしれませんが...
ここはお好みで。

Marketplaceから Japanese Language Pack for VS Code をインストール
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/ce8a59c4-b8d4-d952-98d4-efe3855f43ee.png)

インストールすると以下のポップアップが出るので「Change Language and Restart」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/9f60b7f4-f143-fb4d-f9ff-dfc82f022c32.png)

日本語表記に切り替わりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/53b860d1-a402-9cb7-4179-8b3c9bb0f275.png)

## z/OSとの接続構成

### 構成ファイル作成

参考:
[Creating Zowe Explorer profiles](https://docs.zowe.org/stable/user-guide/ze-profiles)

左端のアイコンのリストから「Zowe Explorer」のアイコンをクリックすると 「Zowe Explorer」viewが開きます。このビューのデータ・セットの横の「＋」アイコン(データセットビューにプロフィールを追加) をクリックすると、ウィンドウ上部に「+ Create a New Team Configuration File」というプルダウンメニューが表示されるのでクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/f8867ca9-07db-73e8-b132-6749614eccb8.png)

すると、以下のように`<ユーザーのホームディレクトリ>\.zowe\zowe.config.json`というファイルが作成されます。これはz/OSとの接続情報を保持する構成ファイルです。デフォルトで以下のような構成情報の雛形が作成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/a0b15b6b-13f9-ecae-4660-d251b3360d62.png)

これを、以下のドキュメントの記述を参考に実環境に合わせて編集します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/369b5d5d-35f4-d87d-50c8-f1f20534c255.png)

<details><summary><font color="blue">構成ファイル例</font></summary><div>

```json:zowe.config.json
{
    "$schema": "./zowe.schema.json",
    "profiles": {
        "lpar1": {
            "properties": {
                "host": "tzMyTest01"
            },
            "profiles": {
                "zosmf": {
                    "type": "zosmf",
                    "properties": {
                        "port": 10443
                    }
                },
                "ssh": {
                    "type": "ssh",
                    "properties": {
                        "port": 22,
                        "privateKey": "C:\\Users\\TomohiroTaguchi\\.ssh\\TechZone\\ssh_private_key_MyTest01.pem"
                    }
                }
            }
        },
        "project_base": {
            "type": "base",
            "properties": {
                "rejectUnauthorized": false
            },
            "secure": [
                "user",
                "password"
            ]
        }
    },
    "defaults": {
        "zosmf": "lpar1.zosmf",
        "base": "project_base"
    },
    "autoStore": true,
    "plugins": []
}
```

</div></details>

上の構成例は、以下のようなz/OS環境がある前提で、このz/OSへの接続設定を行ったものです。以下の接続先の情報を定義し、VS Code上からは`lpar1`という名前で認識するよう定義しています。
- ホスト名: tzMyTest01
- z/OSMF構成済み
    - LisntenするHTTPSのポート番号: 10443
    - z/OSMFの操作権限を付与したユーザーの準備
- SSHサーバー構成済み
    - Listenするポート番号: 22
    - 鍵認証の構成済みで、PrivateKeyをPC上の`C:\Users\TomohiroTaguchi\.ssh\TechZone\ssh_private_key_MyTest01.pem`に配置済み


### 接続確認
上の構成を行うと、ZOWE EXPLORER view のデータ・セットの欄に 接続先として`lpar1.zosmf`というエントリーが追加されます。
接続確認のためにデータセットをVS Codeから参照してみます。
`lpar1.zosmf`の横の虫メガネアイコン(データセットの検索)をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/1cc00de8-e4ea-06e5-4713-9e2c89e2ad20.png)

最初にアクセスする際にはユーザーID/パスワードの入力が求められますのでガイドに従って入力します。(z/OSMF使用権原のあるユーザー/パスワードを指定)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/54e050b5-19dd-f8f2-0845-3d541dd47703.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/b7beb57c-d487-44d1-529b-11b940ebd68f.png)

参照したいデータセットのキーワードを入力します。ここでは「IBMUSER.*」を指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/77234df6-4f0a-b0f4-4913-23b084a3f36f.png)

指定したHLQのデータセット一覧が表示されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/b9004110-d680-5ee5-ab97-32c241a066ad.png)

適当なメンバー(COBOLソース)を選択してみます。VS Codeのエディターで開くことが確認できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/5e2f276c-10a4-11a7-90b2-19fd4dd5e689.png)

同じようなイメージで、USSのファイルやJOB関連の操作も行えます。

※ここでの接続確認は、上の構成ファイルで定義した内容のうちz/OSMFに関するものです。
(上の操作ではSSH接続はまだ使われていません)


# おわりに

ここでは最低限のセットアップ例を示しました。
次の記事ではもう少し具体的な使い方について見ていきたいと思います。