【ナレッジ共有】初心者が考える「技術選定の進め方・マインドセット」

いつも記事を読んでいただきありがとうございます！
モブエンジニア（[@mob-engineer](https://qiita.com/mob_engineer))です！

担当しているプロジェクト内で「技術選定」を行う機会がありましたので、
初心者視点で「技術選定を行うポイント」を整理したいと思います。

:::note info
本記事は「技術選定」に関する基本的な進め方・マインドセットを取り上げています。読み物として気軽に楽しんでいただければ幸いです。
:::

# 目次
1. 本記事を活用してもらいたい方
1. 技術選定とは何か？
1. 技術選定の進め方
    1. As-Is（現状）,To-Be（あるべき姿）を考える
    1. 必要項目を整理する
    1. 技術調査
    1. 技術に触ってみる
    1. ドキュメント作成・レビュー
1. 技術選定のマインドセット
    1. 「何が目的か」を考えてみる
    1. 開発体制にあっているか考えてみる
    1. 導入後の開発チームの動き方を考えてみる
    1. 腹落ちするまで調べてみる
    1. 新しい技術に触れてみる
1. さいごに


## 本記事を活用してもらいたい方
- 技術選定を任されて何をすればいいかよくわからない方
- 上流工程に携わっていきたい方
- 技術選定の勘所のヒントを探している方

## 技術選定とは何か？
技術選定とは**開発プロジェクト内で利用する技術を選定すること**となります。
読者の皆さんにイメージしやすいように料理で例えてみましょう。

例えば、今日の夜ご飯にカレーを作ろうと決めたら、カレーの具材を買い出しに行くと思います。その時、**どんなカレーを作りたいか**といったイメージに合わせて具材を選ぶと思います。（例えば、夏なので夏野菜を入れたいのであれば、ナスやズッキーニなどを入れるなど）

分かりやすく料理で例えましたが、料理が**成果物**だとしたら、技術選定は**具材選び**と思っていただければわかりやすいかと思います。

## 技術選定の進め方
私が技術選定を行ってみたなかで、以下の進め方がより良いのかなぁと思っています。（もちろん、技術選定の進め方はプロジェクトに応じて変わってくるため、ひとえに正解はないと思いますが...）

### 1.As-Is（現状）,To-Be（あるべき姿）を考える
私が好きな考え方で**As-Is,To-Be**という考え方があります。内容は読んで字のごとくですが**あるべき姿と現状のギャップを分析し、浮き彫りになった課題に対してどのようなアクションを講じていくか**といった意味になります。

技術選定はあくまで「開発プロジェクトで利用する技術を選ぶ」という手段となります。そのため、技術選定を行う前に、**なんで、この開発プロジェクトを行っているんだっけ？**といったことを要素分解して考えてみることが、第一歩かと思います。

### 2.必要項目を整理する
As-Is,To-Beを通じて、**開発プロジェクトが目指す姿**について落とし込むことができたかと思います。そのうえで、技術選定を行う上で**開発メンバー、ユーザが技術に対して気にしていること**を整理してみることが大切です。

例えば、開発プロジェクトの**品質・コスト・納期（QCD）**のなかで、**コスト**が最も求められているのであれば、**ライセンス料、運用コストやサポート問い合わせの料金有無**などが必要になりますね。

また、**品質**が求められているのであれば、**有名企業のプロダクトの利用実績**も必要かもしれませんね。

### 3.技術調査
必要項目を整理できたので、技術調査を行っていくフェーズに入っていきましたね。ただ、やみくもにインターネットで調査しても、あまり良い結果にならない場合があります。技術調査を行う前に、生成AI（ChatGPTなど）へ**技術要件に関するプロンプト**を投げてみると、効率的に調べることができると思います。

また、技術調査するうえで、公式ドキュメントは必ず目を通しておきましょう。技術ブログで分かりやすく書かれている場合もありますが、情報の正確性は公式ドキュメントに勝るものはないからです。

もし、技術調査を行うなかで困った場面があれば、開発メンバーの知恵を借りることもよいと思います。

### 4.技術に触ってみる
技術調査を行うなかで、公式ドキュメントを眺めることも大切ですが、実際に触ってみることが大切です。触ってみるなかで感じた、**技術の使用感（シンプルで分かりやすい、認証まわりが使いづらいななど）**を知っておくことが大切になります。

### 5.ドキュメント作成・レビュー
技術選定を行ううえで、**なぜ、この技術を選んだのか**を開発メンバー、ユーザに説明する必要があります。スゴ腕エンジニアであれば、口頭説明のみで**技術を通じたプロジェクトの未来像**を共有させることができるといわれているそうですが、後々**なんで、この技術選定したの？**といった「言った言わない問題」を防ぐ必要があります。

言った言わない問題を防ぐために、技術選定の結果をドキュメントなどにまとめておきましょう。また、ユーザへ説明する前に、他の開発メンバーにレビューしてもらうことで、「この考えがあったか」といった新たな発見があると思います。

簡単ですが、私が良いと思った**技術選定の進め方**をまとめました。今回、初めて技術選定を行いましたが、上記方法で進めたら、**技術に対する理解**だけでなく、**開発プロジェクトの解像度を高く持つことができた**と考えています。

## 技術選定のマインドセット
技術選定の進め方については関単にまとめましたが、そのうえで、**技術選定を行うときのマインドセット**も大切だと考えています。

簡単ですが、次のようなマインドセットを持っていると、**スムーズに技術選定を行えるのではないか**と考えています。

### 1.「何が目的か」を考えてみる
技術選定は**技術を選ぶこと**が目的ではありません。
いくら一般的に広く活用されている技術を導入したとしても、**プロジェクト内容**に合致していなければ、開発が進んでから「この技術を使ったことで遅延しそう......」といった状況が発生してしまいます。

**先端技術を選ぶ**ではなく、**プロジェクトにあった技術を選ぶ**といった心構えが大切だと思います。

### 2.開発体制にあっているか考えてみる
技術選定では、**モダンな技術、なんにでも対応できる技術**が選ばれるように感じています。ただ、開発体制の大多数が**ジュニアクラスの開発エンジニア**だと、モダンな技術を選んだことで、学習コストが思いのほか掛かってしまい、開発が遅延してしまうリスクがあります。

もし、開発プロジェクトが小規模であれば、**シンプルで使いやすい技術**を使うことをお勧めします。（開発言語だと、Pythonは初学者でもとっつきやすい印象を持っています）

### 3.導入後の開発チームの動き方を考えてみる
「2.開発体制にあっているか考えてみる」と少し被るかもしれませんが、技術を導入することで**開発チームがどのように開発を進めていけるか**を考えてみることも大切だと思います。

選定した技術が**モダンな技術だが、日本語版の公式ドキュメント・技術ブログがほとんとない**状況だと、開発チームは思うように開発がすすめられないかもしれませんね。

### 4.腹落ちするまで調べてみる
**とりあえず利用実績が多数あるからこの技術を使おう**という選定理由は、開発プロジェクトにおいてあるある（？）かもしれません。しかしながら、開発が進むにつれて「この要件って、この技術で実現できないのではないか？」といった状況になると、手戻りが発生してしまいます。

そのため、技術選定を行う段階で**開発プロジェクトで利用する技術について自身が腹落ちするまで調べてみる**ことが大切だと考えています。

### 5.新しい技術に触れてみる
フレームワーク、アプリケーション、ソフトウェアなど、日々新しい技術が生まれています。そのため、日々の生活の中で、新しい技術に触れる習慣を身に着けておくとよいと思います。（技術に触れるのは楽しいですからね）

技術に触れている習慣があることで、技術選定を依頼されたとき、**このプロジェクトは小規模だから、シンプルな技術を利用しよう。最近だと、●●の技術が使いやすかったから、候補に入れてもいいかもしれないな**といった発想になると思います。

## さいごに
今回は**技術選定の進め方・マインドセット**について取り上げてみました。
私自身、技術選定の経験が浅いため、より具体的な提案については触れられなかったですが、基本的な流れとマインドセットはお伝えできたかなぁと思っています。

本記事を通じて、**技術選定に悩んでいる開発者**が１人でも救われれば幸いです。
また、本記事を読んで「良かった」と思った方は、**いいね**と**ストック**を行っていただければ、筆者の記事を書くモチベーションにつながります。

最後まで記事を読んでいただきありがとうございました_(._.)_

## 参考サイト
[未来は予測不能！技術選定の意思決定において一番大切なこと](https://zenn.dev/bicstone/articles/technology-selection)
[技術選定/アーキテクチャ設計で後悔しないためのガイドライン](https://qiita.com/hirokidaichi/items/a746062917595619720b)
[【ポエム版】新規開発のときの技術選定の考え方](https://qiita.com/newta/items/f3036b33dc097988d551)