メインフレーム資産保守から学んだ体当たり開発学習 ＆ DXが叫ばれている中で感じていること

# はじめに
当記事は、Advent Calendar 2022[『「レガシー」を保守したり、刷新したりするにあたり得られた知見・ノウハウ・苦労話 by Works Human Intelligence Advent Calendar 2022』](https://qiita.com/advent-calendar/2022/works-hi-3)を見つけてレガシーの総本山であるメインフレームを主体とした開発現場にいる中で思っていることを共有したいと思い、投稿しました。

キャリアのスタートしてからずっとメインフレーム（汎用機）をメインアーキテクチャとしている現場で、JCL、EASY PLUSやCOBOLで業務システムを開発しています。
レガシーの総本山のような環境で日々開発しています。
思い返すと、社会人デビューするに当たり、『これから、ワイもイケイケなWebシステムを世の中に出していくぜ！』と思っていました。
新人研修でも、JavaでWebシステムを構築する題材で開発手法を学んでいました。

***そして、いざ現場配属！***　←心躍ったのを今でも覚えていますよ:laughing:

***現場に行ってみると、見たこともないエミュレータや聞き慣れないCOBOLやJCL、EASYという単語が飛び交っていました:sweat_smile:***

#### 当記事は、そんな現場で感じたことや知見を記せたらと思います。
メインフレームをメインアーキテクチャとしている現場に配属となった方の参考になればと思います。
↑レガシーの総本山にいる若い１～５年目エンジニアはモチベーションが低下しやすいようなので・・・・
メインフレームでの開発によらない普遍的に言えるのではないかと思っているTipsを記しているつもりです。

# レガシーの総本山へ入山直後・・・
恐らくこの１０年以内にメインフレームを扱うレガシー総本山な現場に入山したエンジニアの多くの方が思うと思うのですが、「オワコンな技術を扱うところに来ちまった・・・:confounded:。」と。
私も御託に漏れず、真っ先に思いました（笑）

仕事なので、とりあえず頑張るか・・・・と、COBOLやJCL、EASYのソースを睨めっこ:eyes:
___分からん！！！特に、JCLとEASYが全くわからん！___

年の近い先輩に聞くと・・・、 ___「見様見真似で書けばいいよ！」___ という答え。
往年のエンジニア（メインフレームバリバリエンジニア）に聞くと、 ___「汎用機のマニュアル調べて、試してみて！」___ 
:point_up_2:この環境って今でもレガシーな現場だと多いと思います。

マニュアル？？、何ページあるの？？、説明の内容分かりづらいよ・・・・:sweat_smile:。


***ヤバイな。このまま仕事続けていくは難しいかも・・・・。就職したばかりで転職活動？？？***
:point_up:本気で3ヶ月間悶々と本気で考え続けました。

___『何もしていないこの段階で諦めたらこの先の人生も諦めグセが付いて終わる』___
___『やれることをやってみよう:triumph:！』___

ということで、メインフレームを扱えるように勉強するぞ！

# 体当たり開発で習得
どんな方法で学習したかというと・・・
1. インターネットで情報収集
1. 書籍を使った写経
1. 先人が書いたコードを読んで試す
1. 製品マニュアルを読んで試す
1. 実践で腕を磨く

という５つが主なものだと思う。
目新しいものは何もないじゃないと思う方も多いことでしょう。
私が思うに、レガシーで枯れた技術であろうと自分にとって新しい知識を習得するのは地道に時間をかけて取り組むしかない。***枯れた技術だから一足飛びに習得できる銀の弾丸があるわけではない***のだということを実感しました。

私が習得過程で感じたそれぞれの学習方法の特徴等を書きます。
### インターネットで情報収集
COBOLの情報はそれなりに出てきてきたけど、初見だと内容が今一つピンとこない・・・。
COBOLの情報が載っているサイトは、断片コードが載っているだけだったりオプション等の専門情報が淡白に載っているでけだったりして初心者（初見）だとこれを解釈して知見とするのは難しい。
自前で書くときに、どう活用したら良いか分からないぞということに陥りやすい。

JCLやEASYなんて、ネットに情報が少ない・・・・・・。
出ているのは、マニアックなものだったり、専門性が高い・・・。

この状況はモダンな言語や技術でもあると思う。

さらっと全体像を把握したりするのには、役立つ。
ある程度学習が進んだときに、マニアックな情報や実践の中で出てきた課題解決のために使用するには持ってこいな方法だなという感じ。

### 書籍を使った写経
これは、基礎を身に着けるのに最適であると思う。
レガシー技術だけでなく、モダンな技術を習得する場合も有効であると思う。
私は、Web系やインフラ系の技術についてもこの方法で基礎的な知識習得を図っている。

写経することで、基本的な”形”を見つけることができると思う。
写経せず、読むだけとなかなか”形”を身に着けられないと思う。
開発言語であれば、何か１つ写経で身につけたあとに別の言語を短期間で習得したい場合はある程度読み飛ばす方法は効果的かなと思う・・・。私は、その場合もなるたけ写経すべきと思います！

COBOLとJCLはなかなか良い書籍が見つからないと思いますので、私の押しの書籍を紹介します。
- [［改訂新版］ 実践COBOLプログラミング入門](https://gihyo.jp/book/2011/978-4-7741-4537-2)
- [MVS JCL逆引きリファレンス](https://www.amazon.co.jp/MVS-JCL%E9%80%86%E5%BC%95%E3%81%8D%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9-OS%E3%82%AA%E3%83%9A%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%BB%E3%83%8F%E3%83%B3%E3%83%89%E3%83%96%E3%83%83%E3%82%AF-%E7%A5%9E%E5%B1%85-%E4%BF%8A%E5%93%89/dp/4990506200)
両書籍とも実践で活用できる基本的な内容が書かれていて、基礎固めに最適だと思います。
メインフレームをメインアーキテクチャとしている現場に入山した若いエンジニアの方の参考になればと思います。


### 先人が書いたコードを読んで試す
書籍で基礎固めをした後に、実践的なコードの書き方を身についけるのに持って来いの学習方法だと思います。
私の場合は、先輩が書いたコードを読んでちょっと修正して実行してみる。
思った通り動いたとなったら、大成功！思った通り動かなかったとしてもなぜ動かなかったかを考えることで、より実践的な技量が身につく。

そう言えば、入山直後に先輩に聞いたときに、[「見様見真似で書けばいいよ！」](#レガシーの総本山へ入山直後・・・)と言っていた。
***先輩が言っていたのは、これか:bulb:*** となった瞬間だよね:grin:

JCLやEASYの書き方を学ぶのに最適でした！EASYは、私が知る限り一般販売されている書籍ないので、習得するにはこの方法しかないと思う。

***現代は、GitHub等で凄腕エンジニアが書いたコードをすぐ読めるので最高ですよね！***

### 製品マニュアルを読んで試す
これは、今となっては最も効率が良い学習方法だと思っています。
なぜなら、製造元が出している１次情報であり最も正確な情報だからです。
ただ、初見でここに行くと挫折して撃沈しやすい（私だけかもしれませんが・・・）ので、書籍や先人のコードを見て特に知りたいと思ったときに参照するのが良いと思います。
メインフレームの製品マニュアルは内容が濃くて、サンプルコードも濃いので読み解くのが難しいです:sweat_smile:。
ただ、効率良く処理するためのノウハウ等々が詰まっているのでマニュアルを読んで試すことは大事だなと思います。


### 実践で腕を磨く
本番運用しているとどうしてもエラー等で処理が止まる等の事象が発生します。
こういうときに率先して対応することで腕が磨かれていくと思います。
その際に役立つのが製品マニュアルです！
マニュアルを読んで何がダメなのかのメッセージを解読する！すごく辛くて地道な作業ですが、対応を完了すると腕上がったなと感じる瞬間です。
これは、メインフレームに限った話ではないと思います。
私はWebシステムでも同じことを実感しています。

***全ての学習方法に共通していると思いますが、とりあえずやってみるという体当たりで挑むことが大事ということをノウハウ（知見）としてお伝えできればと思います。***

# DXが叫ばれている中で感じていること
## 世の中の動き
世の中の基幹システムの多くが、メインフレームをメインアーキテクチャとして稼働しています。
それらシステムをリビルドであったりリプレースする動きが激しくなっています。
- [1度は諦めた“脱メインフレーム”で、内製化と販売変革を実現　京王百貨店のチームプレー戦略](https://www.itmedia.co.jp/enterprise/articles/2202/10/news003.html)
- [基幹システムはローコードで作れる　40年稼働のメインフレームを刷新](https://xtech.nikkei.com/atcl/nxt/mag/nc/18/020600004/112800118/)
- [沖縄電力がメインフレームを脱却　マイグレーションによる最新IT基盤の活用でDXを推進](https://prtimes.jp/main/html/rd/p/000000665.000001375.html)
- [本社のメインフレームを撤廃したJFEスチール、オープン系移行でどう無駄を抑えたか](https://xtech.nikkei.com/atcl/nxt/column/18/02264/111700002/)

これは、レガシーの総本山と言われるメインフレーム上で稼働する資産を開発・保守運用できる人材を確保できないから起こっている動きだと思う。

しかし、このリビルドやリプレースにはとてつもないコストがかかります。
そのため、メインフレームアーキテクチャとして維持する戦略を取る企業もあります。
- [クラウド全面移行は正しいのか？ 7割がDXに「失敗」する理由と最新メインフレームの再評価](https://www.sbbit.jp/document/sp/19581)
- [メインフレーム継続は必然　内製でDXコンサルに脱皮](https://xtech.nikkei.com/atcl/nxt/mag/nc/18/020600003/092000060/)
- [SMBCの次期DX推進基盤にも採用　NECがメインフレーム新製品を発表【訂正あり】](https://www.itmedia.co.jp/enterprise/articles/2206/30/news036.html)

***私は、メインフレームはレガシーの骨頂で人材を確保できないからモダンなアーキテクチャにすべきという意見はいかがと思う。***
私自身、クラウドとメインフレームのハイブリッドなアーキテクチャなシステムの開発を行っている。メインフレームはモダンだとは言わないが、レガシーとして塩漬けするのは違うと思う。
***モダンなアーキテクチャとどうやって組み合わせるかがエンジニアの腕の見せ所なのではと思う。***
このハイブリッドな考え方をしているのは、私だけではなさそう。
- [三菱UFJ銀行が勘定系システムのモダナイズなどに750億円、メインフレームは継続](https://xtech.nikkei.com/atcl/nxt/news/18/14270/)
- [メインフレームを作り続けるIBM、クラウドシフトを進める富士通、それぞれの思惑とは](https://japan.zdnet.com/article/35186356/)

## ブルーオーシャン
***レガシー資産をメンテナンスできるエンジニアは、貴重であり需要はある！***
***特に、メインフレームアーキテクチャでの開発できるエンジニアはこの先重宝されると思う。***

レガシー資産をリビルドやリプレースしたりするにも、既存のレガシーコードを読める人材が必要になる。
また、レガシー資産を温存する場合も当然レガシーコードを読める人材が必要になる。

しかし、レガシーコードを読める人材、特にメインフレームアーキテクチャで開発できる人材は高齢化している。
そのため、人材確保が難しくこの先、人材確保が激化するのは間違いない。
- [“レガシー人材”求む　「メインフレーム管理者」がかつてないほど貴重な理由](https://techtarget.itmedia.co.jp/tt/news/2203/10/news08.html)

### 若いエンジニアでレガシーなコードやメインフレームアーキテクチャで開発できる人材は、ものすごく貴重であり重宝されるだろう！

### このブルーオーシャンに飛び込む若いエンジニアが今後増えてくることを願って本記事の結びとしたいと思います。

***:red_circle:拙い文章を最後まで読んでいただきありがとうございました:bow_tone1:***