🧑‍💻

技術選定とは何なのか

2024/08/31に公開

最近技術選定に関して考えることがあったので考えをまとめる

この記事の技術選定のスコープ

この記事ではwebエンジニアとしての視点で話を進めます
この記事では技術選定の対象は言語、FWを指します
本来は他にも選ぶべきもの色々はありますが、全部やろうとすると大変なので割愛します

技術選定とは何なのか

技術選定とはそのビジネスを最も成長させることができる技術を選ぶことをだと思っています

たまに見る流行りだから、こっちのほうが簡潔に書ける、古い言語は使わないみたいなのは技術選定の一面ではあると思っていますが、それが技術選定の決定的な理由にはなり得ないと思っています

では、ビジネスを最も成長させることができる技術とは何を持って決めることができるのか
主に2点だと思っています

  • ビジネスモデルが持っている現在起きている課題、もしくは将来起こるであろう課題を解決できるか否か
  • ビジネスモデルの強みを最大限活かすことできるか否か

toB向けの勤怠管理システムを作るスタートアップの技術選定を例に考えてみましょう
スタートアップの強みは大企業ではできない圧倒的な速度感で市場を取っていくことができる点だと思っています
また、toB向けのシステムなので、企業別にカスタマイズが容易にできる拡張性が求められると思います
今回は簡単のため、この拡張性がビジネス的な強みにします

以上を踏まえると技術選定の判断基準として下記ようなものがありそうだと想像できます

  • 開発速度に寄与できるような技術
  • 人をスケールし易い技術
  • 高い拡張性を持つ技術

各々なぜ重要か見ていきます
開発速度に寄与できる技術は、強みを最大限活かすための観点で選んでいます
スタートアップの強みである速度感を最大限活かすために重要です
人がスケールし易い技術は、近い将来起こり得る課題を解決できる技術です
会社が成長してきて人を増やしたいとなったときに増やせないとそこで事業の成長も止まってしまう可能性があるので重要なものです
高い拡張性を持つ技術は、強みを最大限活かすための観点で選んでいます
ビジネスの強みとしてるのでもちろん重要です

開発速度に寄与できるような技術

もう少し具体的に考えてみましょう

まずは開発速度に寄与できるような技術について考えていきます

はじめにどういう技術が開発速度を早くするのかを具体化していきます
例えばこんなことが考えられます

  • 楽にシンプルに作れる技術
  • 多くの知見がある技術

楽にシンプルに作れる技術はちょっと古いですが、railsが思いつきます
railsが楽にシンプルにに作れるを満たす技術として初めて登場してめちゃくちゃ流行った印象です
コマンドで様々な機能が追加でき、大枠はだれが作って同じような作りになるため、ビジネスロジックのみに集中できるFWという特徴が環境に刺さったと思っています

最近は高機能なfwが流行ってる反動なのか、シンプルなfwがよく作られてる印象があるので、そういったものも候補にはいると思います

次は多くの知見がある技術ですが、長年存在しておりネットに知見が多くあることや、利用者自体が多いこと、社内に利用者が多いなどいろんな観点があります
railsやspring bootのような言語のデファクトスタンダード的なfw主に候補に上がってくると思います

人をスケールし易い技術

次に人をスケールし易い技術も具体化していきます

ぱっと思いつくのだと求人市場に人材が多くいる技術が考えられます
他にも利用にあたって覚えることが少ない技術だったりも人がスケールし易い技術かもしれません

ここで重要なのは、流れを読むことだと思っています
技術にも流行り廃りがあったり、シンプルな技術だったのにコミュニティが大きくなって複雑な技術になっていくなど時間とともに技術の特徴も変わって行きます
こういった流れを読みつつ、中長期間で人がスケールし易い言語を選ぶ必要があります

goなんかはシンプルな言語という設計思想を持ち、高度な機能要求も思想に合わないとキックしている印象があるのでシンプルで覚えやすい技術として今後も特徴を保ってくれそうです
javaは日本国内だと人材はかなり多いのではないでしょうか(個人の質に大きなはあるかもしれないですが)
ruby、phpあたりはレガシーのイメージを持っている人が少なくないと思うので、あまり人材がいないのかもしれません

何を重要視するか

ここまでスタートアップを例に技術選定に関して考えてきましたが、これしかないという技術はありませんでした
現実世界の課題はもっと複雑でいろんな観点があるので、こっちの技術だとこの課題は解決できるけど、あの課題は解決できないなどすべての要望に当てはまる技術がないこともあります
逆にどの技術でも解決できるなという場面もあります

こういった決めきれないときはどうすればいいのでしょうか?
自分はビジネス的に何を優先するのか決めの問題だと思っています

冒頭に述べたようにビジネスをもっとも成長させることが技術選定の目的です
世界を取るみたいなとんでもない野望を持っているビジネスならば、それ相応の組織規模を目指しているはずなので、人がスケールし易い技術のほうが重要視されるかと思います
まだ誰やっておらずとにかく市場を取ることが大事なビジネスならば、開発速度に寄与できる技術のほうが重要視されるでしょう

これらの答えを持っているのビジネスのトップの人です
エンジニアのみで技術選定をするのではなく、ビジネスの人間も巻き込んで技術選定をしていきましょう

まとめ

技術選定をするにあたってどんな観点で選定していけばいいのかをここまで見てきました

課題を解決できない技術を選んでしまって、ビジネスの成長が止まってしまうような自体を避けるためにちゃんと現状と未来を分析して技術を選びましょう

Discussion