⚠️⚠️これはただのファンタジー小説です笑⚠️⚠️
ただの読み物です笑。あまり深く考えないで笑いながら読んでいただけると嬉しいです笑
202X年、システム開発の世界は混沌としていた。
あらゆる技術が進化し、プログラミング言語は乱立していた。ライブラリやフレームワークは玉石混交で、GitHub上では人気を博したライブラリはある日、忽然とメンテナンスモードに突入することも日常茶飯事となっている。X(Twitter)上では日々発生する新技術やトレンドが散発的に議論され、メディアサイト上では毎年人気プログラミング言語のランキングが発表される。AI技術の発展はエンジニアを解放する福音と思われたが、OpenAI、Perplexity AI、Anthropicなどの多数のプレイヤーが世界の覇権を目指して血で血を洗う戦いを続けていた。
CMS業界では業界1の人気を博していたWordPressですらWP Engineとの戦争が勃発しており、有名なプラグインであったACFですら、容易にアップデートしづらい状況となってきている。(参考:ただの個人ブログ)
フロントエンド界隈を見渡すと各地で戦闘が繰り広げられている。Reactの誕生を機に勃発したフロントエンド10年戦争は終結を迎えることはなく、AngularやVueによる三つ巴の戦いから、Remix、qwikなどの派生系にとどまらず、SvelteやElm、Imbaなどの独立国家も誕生しており各地で局地的な戦闘が繰り広げられていた。被害者となったjQueryは一方的な戦犯として
フロントエンド戦争から逃れた民は、平穏を求めバックエンド地帯に移住を試みた。しかしバックエンド平原ではサーバレス一身教やコンテナ派閥、物理サーバ原理主義者などによる骨肉の争いが繰り広げられ、世界に平穏が訪れることは当面先になることが予想されている状況であった。プログラミング言語においても約束されたJavaやC#、PHPからの決別を求め、GolangやElixir、Rustを求める新興勢力との争いも絶えない状況となっていた。フットプリントを意識せずにバックエンドを構築できる技術進化を遂げた結果、純粋関数型原理主義の勢力も無視できないものとなってきていた。
一方その頃、データベースを巡る脱Oracle紛争もいよいよ和平の道からは遠ざかってきている。MySQLやPostgreSQLとの対話のフェーズは終わりを見せるどころか、LevelDBやMongoDB、CouchbaseといったNoSQL勢どころか、CockroachDBといった次世代(と言われている)分散データベースまで戦線に乱入してきている状況となっている。
クラウド全盛となった昨今、コンピューティングプラットフォームとしてはAWS一択の世界かと思いきや、Azure、Google Cloudの他にも、Oracle CloudやIBM Cloudなどがかつて見た栄光を取り戻すために奮闘している。
スマホアプリ、HTTPサーバやProxyサーバ、ツールチェインについては・・・(以下略)
ということで
スイマセン、めっちゃ適当に書いてしまいました。結局技術選定ってどうやって進めていくのか?という話ですが、個人的に重要だと考えていることは
そのプロジェクトにとって「最適」(最新ではない)な技術なのか?
ということです。
最近、「Javaはレガシーだ、好きじゃない」と仰るような方も一定数いらっしゃる印象ですが、個人的にはJavaは極めて優れたプログラミング言語だと思いますし、情報量や言語としての洗練さも十分以上という印象です。F#でWebを書くことはもちろんできるでしょう。クールな関数型プログラミング言語を利用してパイプラインを使ったり関数合成してエレガントなコードを書きたくなる気持ちはわかります。
ただ、システム開発は初期開発よりも運用・保守時の方がはるかに長い時間と工数を使うことになります。あなたが離任した後にコードベースを維持できるのか?ジュニアエンジニアが機能追加しやすい技術を選定できているのか?将来その技術が腐る可能性が少しでも低い技術を選定できているか?ただただトレンドを追っていないか?など色々な観点がそこにはあります。
私のようなお客様のためのシステムを開発する立場の場合、やはり「できるだけ長い間維持管理をしやすい技術」をできる限り選定すべきと思っていますし、その方が総合的に良いプロダクトになる可能性が高い、と勝手に思っています。
例えば
私は個人的にはLispをこよなく愛しています。手元で何らかの計算や小さい処理をしたいときはほぼLispを使います。LispでWebを書くことももちろんできますが、お客様のシステムをLispで構築する予定は多分ありません笑。趣味や個人のプログラミングの局面ではTypeScriptよりもJavaScriptを選んでしまいます。ただ、型の重要性も十分理解しています。大規模なアプリケーションを平準化されたエンジニアチームで完遂するには静的型付けの力が必要なことは自明だと考えています。
アプリケーションの規模や開発に必要とされるスピード感、コンテキストやチーム力、お客様の期待値などあらゆる属性を考慮して技術を選定していく必要があると考えています。ただし、あなたが使いたい技術であることももちろん重要な要素です。
終わりに
「最適な技術選定」は極めて困難な道のりですが、色々な手段の中からひとつづつ選定していく道のりは非常に刺激的で魅力のある作業とも考えています。おそらく、技術選定に「確実な答え」は一つもありません。あなたが意思決定した技術選定の結果は確実にあなたの血肉になるでしょう。小さないくつもの失敗を乗り越えて得られる成果は必ず、未来の自信につながると考えています。
毎日の素振りを忘れずに。自信を持って技術選定ができるようになる日が来ますように!
おわり。