Zoweと戯れる - (4) VSCode Extension for Zowe

# はじめに
ZoweデスクトップやCLIを使ってみた記事を書いてきましたが、Zoweは"オープンソースフレームワーク"である、と謳っているように、デスクトップ、CLIそのものがZoweの本質ではありません。
Zoweについては、デジタル・トランスフォーメーションとかAPIエコノミーとかエコシステムとか、なんだかはやりの言葉を使って色々語られていますが(そういうフワっとした実体が掴みにくい言葉はあまり好きではない...)、要は、メインフレーム上でもオープンソースを積極的に活用していきましょう、そのためのベースとなる環境を"Zowe"として提供しますよ、と。Zoweが提供しているものをベースに、メインフレーム上で新たな仕組みをどんどん作って、みんなで使いやすい環境を整えていきましょう、と、そういうことだと思います。

このことを非常に分かりやすく実装して見せてくれているのが、"VSCode Extension for Zowe"だと思います。これを使ってみたときに、「そうか、こういうことか」と、Zoweの可能性を垣間見た気がしました。

ということで、VSCode Extension for Zoweを使ってみた時のログです。

参考: 
[VSCode Extension for Zowe](https://zowe.github.io/docs-site/latest/user-guide/cli-vscodeplugin.html)
[Demo動画](https://youtu.be/la1_Ss27fn8)


※追記
[VSCodeを使用したメインフレーム・アプリケーション開発](https://qiita.com/tomotagwork/items/085b91098fce3aabaeaf)という記事も公開していますのでそちらもご参照ください。

## 関連記事
[Zoweと戯れる - (1) インストール](https://qiita.com/tomotagwork/items/e0fdb744f9c30fc224ed)
[Zoweと戯れる - (2) Zoweデスクトップ](https://qiita.com/tomotagwork/private/cc06368abf3a8caaaac5)
[Zoweと戯れる - (3) Zowe CLI](https://qiita.com/tomotagwork/private/78cd7c63dd00a29564a4)
[Zoweと戯れる - (4) VSCode Extension for Zowe](https://qiita.com/tomotagwork/items/8cdc99e669f8ae82eddc)

# 前置き

## VSCode

VSCodeというのは、Visual Studio Codeの略で、Microsoftが開発したオープンソースのソースコードエディタです。Windows, Linux, MacOSなどをサポートし、各種言語のシンタックスハイライトやコードアシスト機能が利用できます。
Eclipseよりも軽量でサクサク動くイメージがあり、ショートカットなどのカスタマイズもやりやすいように思います。拡張機能(Extension)も豊富に提供されています。
VSCodeをベースにZoweを使った拡張機能として、VSCode Extension for Zoweというのが提供されている訳です。

ちなみに、人気のエディターのランキングなんかを見るとVSCodeは結構上位に入っており、最近特に勢いがあるようです。
参考:
[Ranking the Top 5 Code Editors in 2019](https://www.software.com/review/ranking-the-top-5-code-editors-2019)
[What are the best programming text editors?](https://www.slant.co/topics/12/~best-programming-text-editors)
[16 Best Code Editors for Windows and Mac (2019)](https://mythemeshop.com/blog/code-editors/)
[The 11 Best Code Editors for 2019](https://www.elegantthemes.com/blog/resources/best-code-editors)
## VSCode Extension for Zoweの前提

当然ですがVSCodeをインストールする必要があります。
また、Zowe CLIのインストール、構成を行っておく必要があります。

必須ではありませんが、ここでは、追加で以下のCOBOL Extensionというのを入れてみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/39c51704-e0e0-90c7-8066-ec31644e3c71.png)
これは、COBOLだけでなく、JCLやPL/Iなどの構文解析をしてくれるものです。

# 使用イメージ

VSCode上に、VSCode Extension for Zoweを追加する部分はガイドに従えばよく、他のExtensionと同様にサクッとできるので割愛。

※VSCodeから以下の操作を行うにあたっては、ホスト側のコンポーネントとしてはz/OSMFもしくはRSE APIがあればよく、このシリーズ記事の[Zoweと戯れる - (1)インストール](https://qiita.com/tomotagwork/items/e0fdb744f9c30fc224ed)で示したZoweのサーバーコンポーネントは不要です。構成については以下の記事もご参照ください。
[VSCodeを使用したメインフレーム・アプリケーション開発](https://qiita.com/tomotagwork/items/085b91098fce3aabaeaf)

## 画面構成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/65cda72b-fd77-9c0e-5c51-f100601c5346.png)

Zowe CLIを構成していると、MVSデータセットやSpoolの情報なんかが見れたりしたと思いますが、それをVSCodeに組み込んで、VSCodeからこんな感じで使えるようになります。
左側のメニューから、PDSメンバーを選択してソース開いて編集したり、JCLサブミットして結果を見たりすることができます。

## 一連の操作例

CICS-COBOLのソースを編集して、コンパイル/リンクするJCL流して、結果を確認する、という操作をVSCode上でやってみます。

### COBOLソース編集

MVSデータセットから編集対象のCOBOLソース(PDSメンバー)を選択します。
ここでは、CICSTS55.@DBDC.PGMSOR(WTOPGM)という単純なCICS-COBOLのソースを選択して開いてみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/e946e977-9710-bb16-54e0-a4748d062ab7.png)

COBOLのソースなので、COBOLとして認識させるために、右下のPlain Textと書かれているところをクリックすると言語の候補が出るので、そこからCOBOLを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/b2e1a862-88ba-9bcd-bb75-881cc29a7afc.png)

そうすると、ソースがCOBOLであると認識され、構文の解釈が行われて、コードアシスト機能などが利用できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/3a769f1a-3225-e669-35a4-9d3a3830f235.png)

変更が済んだら保存して終了します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/675fe590-1270-7d19-1396-b6b75f172a4d.png)

### コンパイル/リンク用JCL編集
次に、上のCICS-COBOLソースを、トランスレーション、コンパイル、リンクするJCLを開きます。
こちらは言語としてJCLを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/9570be55-d647-e032-4195-f4c36f98a189.png)

必要な修正を加えたら保存して終了します。

### コンパイル/リンク実施(JCLサブミット)

上で修正したJCLをサブミットします。
左側のメニューで目的のJCLを右クリックし、Submit Jobを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/b8334641-b69c-afc7-ce2d-8328c48f5bf2.png)

実行されたJOBのJOBIDが右下にポップアップで表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/d556ec72-83ea-7a41-89fd-b7c76324553e.png)

### 結果確認

一定時間経過するとメッセージは消えてしまいますが、右下のベルのマークをクリックするとメッセージが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/9db99202-4948-ffc4-5e6e-9dd28c4ce055.png)

JOBID部分がリンクになっているのでクリックすると、左側のメニューのSPOOL FILESにJOBLOGのDDリストが表示されます。そこから見たいDD名を選択して、JOBLOGの結果を確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/3d374be0-158f-189e-7785-bb6d18aa2ca4.png)

コンパイルエラーなどがあった場合は、ソース修正、コンパイルし直し、というのを繰り返すことになります。

# おわりに

コード修正、コンパイル/リンク実施という一連の流れを、VSCode上で割とスムーズに行えそうなことが確認できました。こういうのがオープン系で使われているツールの上に乗っかっていて、フリーでサクッと使えるというのが素晴らしいですね！(ホスト側のセットアップは別にして...)
データセット検索するところとかは若干モッサリなのですが、まぁそこは最初だけなのであまり気になりません。ホスト系のツールにしては珍しくちょっと感動しました。

競合する所では、Eclipseベースのz/OS Explorer(無償)、IBM Developer for z Systems(有償) 辺りになるかと思います。
z/OS ExplorerはMVS系の操作については、ほぼVSCode Extensionとできることは似通っていると思います。ただ、現状だと、z系の各種ツールのプラグインがEclipseベースで提供されているものがあるので(z/OS ConnectのAPI Toolkitや、CICS Explorerなど)、そういうもののプラットフォームとしてEclipseは一日の長があります。ただ、この辺ももしかすると、今後はZoweベースに向かっていく可能性はあるでしょう。
それから位置づけとしてはIDz(IBM Developer for z Systems)は"統合開発環境"、VSCodeは"テキストエディター"ということになりますし、IDzは有償版だけあって機能が豊富に提供されています。コードアシストもCOBOLだけではなくEXEC CICSやEXEC SQLなんかもサポートされたり、COPY句で取り込んでいる情報も見られたり、デバッグツールと連携できたりします。特に大規模開発になった場合、RTC(Rational Team Concert)やUrbanCode Deployなどのツールと連携しやすいといったところは重要な違いになってくるかもしれません。ただこの辺りも将来的にはZoweベースで機能が提供されていくかもしれません。
Zoweで一番大きなネックになりそうなのは、ホスト側のメンテナンスコストやH/Wリソースへの負荷(CPU, Memory, Disk)といった所が挙げられるでしょうか。特にUSS自体ほとんど利用実績が無いという所も多そうなので、そこの設計からきちんとやらなければならないというのは結構大きなハードルになるのではないかと。まぁそこはIDzとかでも同じかもしれませんが。

まとめるとこんな感じでしょうか。

|  | VSCode (Zowe) | z/OS Explorer (Eclipse) | IDz (Eclipse) | PCOM |
|:---------------|:-------------|:------------|:------------|:-----------|
| ライセンス | 無償 | 無償 | 有償 | 有償 |
| 操作感 | コマンド/ショートカットを駆使した操作が可能 | ある程度マウス操作が必要 |ある程度マウス操作が必要 | 新人:なんですかこれ？ / ベテラン:慣れれば早いよ  |
| 機能 | 少 | 少 | 多 | 少 |
| z系Plugin/他ツール連携 | 少 | 多 | 多 | 中? |
| ホスト側負荷 | 中 | 低 | 中 | 無 |

※あくまで個人の見解ですので念のため。