システム開発の本質を学んだらモダンかレガシーかなんてどうでもよくなった。

どうもです、わだっしーです。

 

インターネット上だとモダン技術を持ち上げて
レガシー技術を批判する傾向があります。

レガシー技術を批判する理由としては、

「古いし役に立たない」
「技術力が身につかない」
「将来性がない」
「開発効率が悪い」

などなど、
レガシー技術のデメリットに関する情報が
たくさん出てきます。

ですが、それだけをうのみにするのは、
ちょっと危険じゃないの?と思うのです。

 

僕もエンジニアになりたての頃は、
よく古い技術を触っていて、
「なんで古い技術やんといかんの?」
と思いながら仕事をしてました。

ですが、経験を積むにつれて、
「どっちが良いとかではなく、
使い分けが重要である」
ということが理解できました。

そこから、
僕の仕事のスケールが大きくなり、
より面白い仕事もできるようになり
収入にもつなげることが出来ました。

 

なので、今回の記事では、
「モダンとレガシーって結局何なの?」
「どういう風に考えればよいの?」
ということを話していきます。

上流工程の話も含んできますので、
やったことがない人は、
「こういう視点で技術を見ているんだな」
というイメージをつかんでくれると嬉しいです。

 

モダン・レガシーの定義と間違った理解

まずは、一般的によく知られている、
モダンとレガシーの意味について話します。

これには明確な定義はなく、
「違いは新しいか、古いかだけの違い」
になります。

インターネット上だと特になのですが、
なんとなくのイメージで語られることが多いです。

言ってしまえば、
良い悪いの話は考えられていません。

 

明確に定義することは難しいのですが、
僕が観測している範囲だと
「過去10年以内にリリースされ、流行っているもの」
をモダンと呼ぶ傾向が強いです。

プログラミングスクールが流行り始めたときは、
ウェブアプリ界隈のフレームワークが
流行り始めていたこともあり、
Ruby、JavaScript、PHPあたりを
モダンと呼ぶ人が非常に多かったです。

言語自体は新しくもなんともないのですが、
Ruby on Rails、Vue.js、React.js、Laravelなどの
比較的新しいフレームワークが流行ったことで
それらを総称してモダンと呼ぶようになりました。

 

でも、古くから使われている
レガシー技術の言葉の意味は、
ちょっと違うんですよね。

元々はメーカー系SIer(富士通、NEC、日立など)の
独自技術が使われた基幹システムに携わった人たち、
金融システムに携わった人たちが、
それらの技術に将来性がないこと、
広く使えないことをdisる言葉でした。

ですが、それ以外の古い技術がすべて悪なのか?
と言われれるとそうではないんですよね。

古くからある技術であっても
今でもアップデートされ続けていて、
広く使われている技術はたくさんあります。

JavaやC++、C#なんかは典型的な例で、
Javaはあらゆる分野で使われているし、
C系の技術は家電やゲーム、IoTの分野で
今もなお、広く頻繁に使われています。

なので、
「古い=レガシー」
「古くからある=レガシー」
ではないのは、
まず知っておいてほしいです。

のちに話しますが、
レガシーにも良いところはあるし、
使い道はいくらでもあるから、
今でもずっと使われているんですよね。

 

でも、過去に金融や機関などの
お堅い系のシステム開発で、
プログラムを書くこともなく、
ひたすらドキュメントを作ったり、
テストをやるだけの日々で、
不満を抱えている人が多かったのは事実です。

しかも、プログラムを書いたとしても
将来的には使い物にならなかったり、
ほかで全く通用しなかったりするので、
このdisは2010年前後に結構流行りました。

2008年のリーマンショックによって、
エンジニア職は大幅な人員カットをされたので、
怒髪天を衝く勢いで
ネットで不満を爆発させたのではないでしょうか。

その影響もあってなのか、
当時中学生の僕でも
「システムエンジニアの仕事はクソ、ブラック」
っていうのが耳に入ってくるぐらいでした。

 

で、インターネットの悪いところなのですが、
「正しいことよりも多数派が正義」
になる傾向が強いので、
「レガシー=悪いもの」
という理解が広まってしまいました。

嫌な経験をした古参エンジニアのトラウマは、
ネット上でも共感する人が多く、
「レガシー=悪いもの」
という意見が正しいかのように広まりました。

そして、さらに悪いことに、
2017年前後で
「IT転職しようぜ!フリーランスになろうぜ!」
という流行が訪れたことにより、
モダン技術に対する理解はよりねじ曲がり、
絶対悪のように語られるようになります。

これは、

  • 転職エージェント
  • フリーランスエージェント
  • プログラミングスクール
  • そのアフィリエイター

の人たちがウェブサービスを提供している、
いわゆるウェブ系と呼ばれる会社への
人の誘導を積極的に行った影響が大きいです。

いわゆる、ウェブマーケティングってやつですね。

転職エージェントやフリーランスエージェント、
プログラミングスクールなどが
ウェブマーケターとお手てをにぎにぎして組んだ
マーケティング戦略だったりします。

あーマジかーと思うようなところばかりです。

 

彼らが使ったマーケティングテクニックの一つに
『仮想敵』というものがあるのですが、
その対象としてSIerとレガシー技術が、
不名誉にも選ばれることになりました。

仮想敵とは、一言でいえば
「悪者を作って、自分の意見を正しく見せる」
ことを言います。

言い方を変えればスケープゴート、
ヒール役を作ったとも言えます。

ハリーポッターの悪役で有名なドラコ・マルフォイを
IT業界で作り出したともいえるでしょう。

もちろん、SIerやレガシー技術がマルフォイです。

マルフォイのような憎まれ役がいるから、
余計にハリー、ハーマイオニー、ロンなどの
正義の味方が際立つんです。

人材業界は仮想敵の手法を使って、
人をIT業界に移動させることにより、
移動した人の収入からマージンを取っても儲けたのです。

ちなみに、この仮想敵のテクニックは、
第二次世界大戦中にヒトラーが大衆扇動のために
富裕層が多かったユダヤ人をターゲットにして、
一般層の支持を得たことで有名だったりします。

ウェブマーケターの中では、
当たり前のように使われている手法です。

元々は一昔前にアメリカで流行った
マーケティング手法なのですが、
今は日本で飽和するぐらい使われてますね。

 

彼らのマーケティング戦略は見事に成功し、
何も実情を知らない人たちにも
「SIerは給料も低いし、技術もない」
「レガシー技術は悪いもの」
というイメージを根付かせることに成功しました。

SIerやレガシー技術の悪いところはありますが、
古参エンジニアのトラウマを上手く刺激したので、
マーケティング戦略としては大成功ですね。

「SIerはロクなトコロじゃない!」
「レガシーなんて勉強するもんじゃない!」
ってネットでみんなが言っていたら
なんとなく信じちゃうじゃないですか。

なので、それに合わせて
SIer企業やそれらのSES企業のイメージも下がり、
風評被害を受けることになりました。

人は入ってこないし、人は出ていく状態です。

SIer企業としてはこの状況は最悪で、
それらの経営者やマネージャークラスの人は
かなりお怒りのご様子でした。

僕もエンジニアを雇う立場なので、
かなり怒り心頭状態でした。

なので、ここではまず、
「SIerやレガシー技術は絶対悪ではない」
ことは押さえておいてください。

 

背景を知ってもらわないと
モダン、レガシーの話が理解しにくいので、
業界の話もしましたが、
ここからは技術に絞って話します。

ここまでの話を押さえたうえで、
モダン・レガシーのメリットとデメリットについて
話していきますね。

 

モダン技術のメリット・デメリット

次にモダン技術のメリットとデメリットを話します。

新しい技術というのは、
「古い技術での課題を解決したもの」
であることがほとんどなので、
古い技術よりも使い勝手が良いです。

ですが、そんな技術にも
メリットとデメリットがあります。

それらをざっくりと
表にまとめるとこんな感じになります。

メリット デメリット
開発の効率が上がる バグフィックスなどのバージョンアップが頻繁にあるので、運用にコストがかかる
一定以上の品質で早く作れる 深いレベルで触れないと難しい問題に対処するのがレガシーより難しい
勉強していて楽しい 新しすぎると情報が少ないので、勉強に苦労する

 

ウェブアプリの開発をするとなると
頻繁に新しい機能を追加したり、
スピード重視をするのであれば、
モダン技術を採用するのはメリットが大きいです。

それに、たとえ少し止まったとしても
大規模業務システムみたいに
数千万~数億円単位でお金が飛ぶわけじゃないので、
安定しないモダン技術を使うデメリットよりも
採用するメリットの方が大きいです。

アップデートが業務システムよりも多く、
リリースに合わせて言語やライブラリを
アップデートしやすいので、
デメリットは業務システムより全然小さいです。

 

業務システムだと動くお金が大きいので、
数年に1回の大きなプロジェクトになりかねません。

頻繁にバグフィックスが報告されるような
安定しない新しい技術を扱うのは、
ビジネス的にリスクが大きいので、
業務システムには向かないということになります。

 

とはいえ、最近のSIerでは、
モダン技術は全然採用してます。

いわゆるウェブ系よりは新しくないですが、
「一般的に実績が出始めている技術」
については採用されてます。

実際、ウェブアプリ部分であれば、
SIerの僕もフロントエンドはVue.js使ってるし、
バックエンドはNode.js/Express、Laravelが多いです。

インフラもマルチクラウドが基本です。

会社の仕組み的に新しい技術を使うには
色々手はずが必要なので、
超先端技術を使うのは難しいんですけど、
そこそこ新しいものは全然使えます。

なので、いわゆるウェブ系の人たちの
実績をありがたく拝借して、
上の人たちを納得させて、
新しい技術を使っていたりします。

ウェブ系の人たち、ありがとう。。

 

最後に学習の観点からも話します。

新しすぎる技術とかだと
世の中に本や情報が出回っていなくて
勉強に苦労することがあります。

僕はNode.jsは出たばかりの時に勉強したのですが、
JavaやPerlなどの古い技術を勉強するよりも
苦労した記憶があります。

そもそも日本語の情報や書籍がないし、
採用例もなかなか見つからないので、
一般的に使われている技術よりも
勉強には苦労しました。

なので、初心者やあまり経験のない方は
いきなり最先端の技術に手を出すと
挫折する可能性が高いのでおススメしません。

ただ、目新しいものを勉強するというのは、
技術好きからすると楽しいものなので、
より苦労してでも学びたい人は良いと思います。

 

レガシー技術のメリット・デメリット

次にレガシー技術のメリットとデメリットについて話します。

悪玉の親分として君臨するレガシー技術ですが、
デメリットだけでなくメリットも大いにあります。

それらをざっくりと
表にまとめるとこんな感じになります。

メリット デメリット
安定しているので運用コストが下がる 10年、20年もしないうちに消えるので将来性がない
収束させたいシステムやサービスを安定して稼働させられる サポートが切れたら自分たちで言語やアプリの修正しないといけない
一般的に使われていれば、勉強するための情報が多い 古すぎて廃れていたら情報が全く出てこない

 

レガシー技術の最大のメリットは
「安定している」
ということにつきます。

これまでいろんなシステムやサービスで、
「問題なく動く!」ことを確認されているので、
頻繁に言語やライブラリ、フレームワークの
アップデートが発生しないし、
運用のコストを下げることができます。

なので、止まることが許されない
ミッションクリティカルなシステムや
超大規模なシステムでは、
レガシー技術が採用されることが多いです。

そもそも、システムを作ることが目的ではなく、
「システムを作ることによって稼ぐこと」
が目的なので、
下げられるリスクやコストは下げたほうが賢明です。

ただ、その分開発効率はモダンよりも下がるし、
プログラミング以外の仕事も増えます。

なので、技術の移り変わりの激しいウェブ業界だと
早く新しく機能を追加したり、
アップデートを書けることを重要視されるので、
採用されにくいということになります。

 

ただ、最近のSIerだと大規模だったり、
ミッションクリティカルなシステムでも
部分的にモダンを取り入れるケースが増えています。

例えば、ウェブアプリなどの
ユーザーの目に触れるところだったり、
お金や個人情報にかかわらないところは
積極的にモダンを採用しているケースが多いです。

そして、実績が増えてきたら、
残りの部分もモダンに切り替えるという手法を
取る企業やプロジェクトは結構多いです。

かなりお堅い金融系のシステムでも
部分的にモダンを採用することは珍しくないです。

なので、SIerはレガシーしかやらない
というのはちょっと違うのが現状です。

 

最後に勉強の観点からも話します。

レガシー技術で実績があるものは、
日本語の書籍やネットの情報、
採用例も非常に多くあるので、
勉強するときに困ることは少ないです。

技術書も種類が豊富なので、
自分に合ったレベルのものを選べるのも
メリットが大きいといえます。

知っている人も多く、
仕事でも教えてもらえる可能性が高いので、
初心者こそメリットが大きいと思います。

ただ、逆に古すぎて廃れているものは
書籍もない、情報もないってなるので、
超最先端技術と同じレベルで苦労します。

下手すると紙に書かれた説明書しかない
なんてこともあり、
ここまでの化石技術については仕事でない限り、
勉強する意味はあまりないかなと思います。

 

モダン・レガシーの論争は不毛なのでやめよう

最後にまとめに入ります。

今回は
「モダンとレガシーって結局何なの?」
って話をしました。

 

どんな技術であっても
メリットとデメリットが存在するので、
作るものに合わせて使い分けることが大事です。

上流工程の話になるので、
やったことがない人にとっては、
この視点を知ることで、
現状使っている古臭い技術への不満が
少しは減るんじゃないかなと思います。

何の考えもなしに
レガシーを使っているわけじゃないってことですね。
(脳死で使っている人もいるでしょうけど。。。)

 

なので、レガシーを絶対悪とするのは、
イメージで物事をとらえているのと同じだし、
どんな分野であってもエンジニアとしては、
ナンセンスなのかなと思います。

事実に基づいて考えられないと
良いプログラムを書いたり、
良い設計することはできませんので、
よりレベルアップしたい人は
この視点も取り入れてみてください。

上流工程で仕事をしないとしても
考え方が柔軟になるし、
間違いなく仕事で活きてきます。

 

初心者の方であれば、
とりあえず下記のことを押さえていれば、
十分ですのでメモるなどして覚えておきましょう。

脳死でやみくもに勉強するよりも
絶対に伸びしろが大きいし、
成長スピードも速いです。

  • すべての技術にはメリットとデメリットがある
  • ケースによって使い分ける必要がある

 

僕は幸運にもハイレベルな
システムエンジニアから学んだり
システムを作る経験をしてきたので、
今の仕事ができています。

おかげさまでサービス作ったり、
システム開発でPMやったり、
自分でアプリ作って売ったりしてます。

なので、今回の記事で、
そのおすそ分けが少しでも出来たらうれしいです。

一緒によりハイレベルなエンジニアを目指していきましょー

 

今回は以上になります。

わだっしーでした。

 

P.S. 技術の使い分けのポイント

超カンタンにですが、
僕が技術を使い分けるときの
ポイントを紹介します。

僕が採用する技術を見極めるのに
一番最初に見るのは下記の2つです。

  • 規模
  • 機能の重要性

表にするとこんな感じですね。

重要性が高い 重要性が低い
大規模 レガシー モダン
小規模 レガシー or モダン モダン

 

必ずこの通りになるわけじゃないですが、
テンプレにするならこんな感じです。

結局、何をとり、何を捨てるか、
をじっくり考える必要があるので、
例外も全然あります。

ですが、ある一定のパターンはあるので、
身の回りのエンジニアの方の経験を聞いたり、
自分の経験を振りかえってみて、
判断材料を増やすことがキモです。

 

人間の脳は知識を材料にして、
物事を考える生き物なので、
知識がなければ考えることはできません。

なので、勉強で取り入れられるものは
積極的に取り入れたり、
経験者から聞けることは聞いた方が
成長スピードや幅も段違いです。

成長が早い人は、たくさん知識を蓄えるし、
選り好みせずいろんな人の話を参考にします。

より上のポジションを目指すのであれば、
勉強をするのはもちろんのこと
人の経験談からも学んでみてくださいね。

稼ぐエンジニアの考え方を凝縮した電子書籍をプレゼント中

僕はシステムエンジニアとして
年間6000万円以上売り上げています。


才能があったわけではないし、
昔から超がつくほど要領が悪いです。


そんな僕がプログラミングを習得したり、
心から尊敬する先輩や上司から影響を受けて、
エンジニアとして成長することができました。


酸いもあまいも経験してきましたが、
普通の人よりもたくさん失敗してきて、
それをガソリンにして結果にフォーカスしてきました。


その経験から
「ポンコツでもエンジニアになれる」
と思っているし、
成長して理想の自分を手に入れられると信じています。


そして、今は同じ道を志す仲間を
1人でも多く増やして、
エキサイティングでより生産性的な社会を
作っていこうと夢見ています。


そういった理念をもとに、
僕の知識や経験をふんだんに絞り出して、
エンジニアとして成長し、
結果を出すにはどうしたら良いかを
体系的にまとめた電子書籍を作りました。


僕のストーリーも交えて作っていて、
20分程度でサクッと読める内容なので、
もし興味があれば読んでみてください。


→電子書籍『エンジニアという生き方で人生をデザインする。』


メールアドレスを入力すれば、受け取れます。


最後まで読んでいただきありがとうございました。


もしこの記事が役に立った!と思われたら
SNS等でシェアしていただけるとすごく喜びます。
(すぐ下のボタンからシェアできます)