z/OS利用時の文字コード変換 - 動作検証(2) Git利用時のコード変換

# はじめに
動作検証(1)で使用したPDSメンバー(各種文字列が含まれたもの)を使用し、GitHubとファイルの送受信を行った場合にどうなるかをみてみます。

## 関連記事

[z/OS利用時の文字コード変換 - 動作検証(1) 各ツールでの文字列表示](https://qiita.com/tomotagwork/items/3960cd4d8c16a0092670)
[z/OS利用時の文字コード変換 - 動作検証(2) Git利用時のコード変換](https://qiita.com/tomotagwork/items/83896dcf83239cc2e4af)
[z/OS利用時の文字コード変換 - 動作検証(3) DBBユーザー・ビルド時のコード変換](https://qiita.com/tomotagwork/items/15e848ca296ece336f18)
[z/OS利用時の文字コード変換 - 動作検証(4) カタカナ系文字コードにおけるPDSメンバー名](https://qiita.com/tomotagwork/items/183b4109ec1f9ae49de4)

# 環境情報
z/OS V2.4
Windows11
PCOM V14
IDz V15.0.5
VS Code V1.77.3
GitHub Enterprise

# 動作検証

## 1. Rocket Gitでのコード変換

### (1)z/OS ⇒ GitHub

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/2daf2394-26d9-76f2-6744-555d4e16f160.png)

PDSメンバーを一旦USS上のファイルとしてコピーし、それをRocket GitでGitHub上にPushします。

USSへのファイルコピー、および、エンコーディングの指定例は以下の通り

```
cp "//'TAGUCHI.TEST01.COBOL.SOURCE(TSUB04)'" TSUB04.cbl
chtag -tc IBM-1399 TSUB04.cbl
```

念のため、USS上にコピーしたファイルを`ish`(ISPF Shell)から確認しておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/6a8a3d16-455a-148e-5ef8-4ed0f3018ae4.png)

このUSS上のファイルをGitHubにPushする際、.gitattributesに指定した文字コードによってコード変換が行われます。今回使用する.gitattributesの指定例はこちらです。

```.gitattributes
# line endings
* text eol=lf

# file encodings
.gitattributes zos-working-tree-encoding=ibm-1399 git-encoding=utf-8
*.cpy zos-working-tree-encoding=ibm-1399 git-encoding=utf-8
*.cbl zos-working-tree-encoding=ibm-1399 git-encoding=utf-8
```

GitHub上のリモート・リポジトリーにPushされたファイルの中身をブラウザで確認

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/5a2e29a6-05c0-0dbc-0033-6ed47bd87b5a.png)

特に問題なく表示できています。

### (2)GitHub ⇒ z/OS

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/88283863-9d16-a308-aaf3-3fe8badd2862.png)

上にアップしたGitHub上のリモート・リポジトリーを、USSの別の場所にクローンし、それをPDSメンバーとしてコピーします。

上と同じリポジトリーなので、使用する.gitattibutesも同じです。
クローンされたファイル

```
TAGUCHI : /u/TAGUCHI/temp/zosgittest01/cobol : > ls -laT
total 96
                    drwxr-xr-x   2 TAGUCHI  SYS1        8192 Apr 13 11:22 .
                    drwxr-xr-x   9 TAGUCHI  SYS1        8192 Apr 13 11:22 ..
t IBM-1399    T=on  -rw-r--r--   1 TAGUCHI  SYS1        2951 Apr 13 11:22 TMAIN01.cbl
t IBM-1399    T=on  -rw-r--r--   1 TAGUCHI  SYS1         485 Apr 13 11:22 TSUB02.cbl
t IBM-1399    T=on  -rw-r--r--   1 TAGUCHI  SYS1         485 Apr 13 11:22 TSUB03.cbl
t IBM-1399    T=on  -rw-r--r--   1 TAGUCHI  SYS1         706 Apr 13 11:22 TSUB04.cbl
```

ishで確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/e77bcfbe-fd44-ab19-83da-ff2d2f055504.png)

このファイルをcpコマンドでPDSデータセットにコピーする際には`chtag -r`でタグをクリアしてから実施してください。
※textのタグ付け、およびIBM-1399がセットされたままDBCSを含むファイルをコピーしようとするとうまくいきません(コピーのコマンドはエラーメッセージも出力されないので正常に完了したと思ったら、実際にはPDS上にはメンバーが作成されません)。

```
TAGUCHI : /u/TAGUCHI/zosgittest01/cobol : > chtag -r TSUB04.cbl
TAGUCHI : /u/TAGUCHI/zosgittest01/cobol : > ls -laT | grep TSUB04
- untagged    T=off -rw-r--r--   1 TAGUCHI  SYS1         706 Apr 13 11:52 TSUB04.cbl
TAGUCHI : /u/TAGUCHI/zosgittest01/cobol : > cp TSUB04.cbl "//'TAGUCHI.TEST02.COBOL.SOURCE(TSUB04)'"
```

コピーされたPDSメンバー確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/5202e307-8802-28bb-6d0a-2ca675c81512.png)

特に問題なく表示できています。


## 2. GiHubのリモート・リポジトリーをPCにクローンして参照

1-2.(1) でPushしたGitHub上のリポジトリをPC(Windows11)上にクローンしてエディターでみてみます。
ここではコード変換は発生しないはずなので、UTF-8のまま参照できるはず。

### (1) VS Code

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/03f76d29-12ab-8280-ded7-4f49c6deba1a.png)

VS CodeでGit Cloneして取得したファイルをUTF-8としてエディターで表示
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/af386a64-a2cc-5537-619f-fd0de5190693.png)

特に問題なく表示できています。

### (2) IDz

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/325923f5-317d-0982-9bea-f60c39b5fc31.png)

Eclipse上のGitでCloneして取得したリポジトリーをz/OSプロジェクトとして追加し、UTF-8としてエディターで表示
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/05b2695c-1376-6eff-b857-14a61b6f535b.png)

ちなみにIDzの場合、ファイルのプロパティーでローカルDBCSオプションのSO/SIの使用にチェックを入れると...
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/ea1b99cc-586b-6d4c-0fd4-e9ddfb4b1156.png)

EBCDIC(IBM-1399)にした場合にSO/SIが挿入される位置にマークが付き、UTF-8の状態でも桁連れをチェックすることができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/2a0b4f02-6aa1-aab9-fd30-945f9538a8dd.png)

<font color="red">
ただ、第3水準、第4水準の文字でうまく機能していないようです。(おそらくサロゲートペアの文字がうまくハンドリングできてなさそう...)
</font>