サイトアイコンmaita tomoya dev io

技術選定とは何か

introduction

技術選定とは何か

はじめに -- 技術選定はなぜ難しいのか

ソフトウェア開発において、「どの技術を使うか」という判断は、プロジェクトの成功を左右する最も重要な意思決定の一つです。適切な技術を選べば開発は加速し、誤った選択をすれば、後から多大なコストを払って修正することになります。

本記事では、技術選定の基本的な考え方から、実践的なプロセスまでを体系的に解説します。


技術選定の定義

技術選定(Technology Selection) とは、ソフトウェア開発プロジェクトにおいて、使用するプログラミング言語、フレームワーク、データベース、インフラなどの技術スタックを決定するプロセスです。

料理に例えると

技術選定は「料理の道具選び」に似ています。

料理の世界                    ソフトウェア開発の世界
---------------------------------------------------------
作りたい料理       ←→        実現したいプロダクト
包丁の種類         ←→        プログラミング言語
鍋・フライパン     ←→        フレームワーク
オーブン・コンロ   ←→        インフラ・クラウド
冷蔵庫             ←→        データベース
レシピ本           ←→        ドキュメント・ライブラリ
調理場の広さ       ←→        予算・リソース
料理人の技量       ←→        チームのスキルセット

和食を作るのに中華鍋を使っても料理はできますが、専用の道具を使った方が効率的です。しかし、新しい道具を買うにはコストがかかり、使い方を覚える時間も必要です。

技術選定も同じで、「最高の道具」ではなく「最適な道具」を選ぶことが重要です。


なぜ技術選定が重要なのか

技術選定が重要な理由を4つの観点から説明します。

1. コストへの影響

技術選定は直接的・間接的にコストに影響します。

+-----------------------------------------------------------+
|                    技術選定のコスト影響                      |
+-----------------------------------------------------------+
|                                                           |
|  直接コスト                    間接コスト                   |
|  +-------------------------+  +-------------------------+ |
|  | ライセンス費用           |  | 学習コスト              | |
|  | インフラ費用             |  | 採用コスト              | |
|  | ツール費用               |  | 技術的負債の蓄積        | |
|  | サポート費用             |  | 移行コスト(将来)      | |
|  +-------------------------+  +-------------------------+ |
|                                                           |
|  初期コスト                    運用コスト                   |
|  +-------------------------+  +-------------------------+ |
|  | 環境構築                 |  | 監視・保守              | |
|  | プロトタイプ開発          |  | セキュリティ対応        | |
|  | チームトレーニング        |  | バージョンアップ        | |
|  +-------------------------+  +-------------------------+ |
+-----------------------------------------------------------+

2. 採用への影響

選んだ技術によって、エンジニアの採用難易度が大きく変わります。

技術の人気度採用のしやすさ人件費
メジャー採用しやすい市場相場JavaScript、Python、Java
ニッチだが成長中やや難しいやや高いRust、Elixir
レガシー非常に難しい高いCOBOL、Perl
最先端すぎる極めて難しい非常に高い登場直後の言語

3. 保守性への影響

技術選定は長期的な保守性に直結します。プロダクトの寿命が5年、10年と続く場合、以下の点が問題になります。

  • ドキュメントの充実度: 情報が少ない技術は、後から参加するメンバーの理解を妨げる
  • コミュニティの活発さ: バグ修正やセキュリティパッチの提供速度に影響
  • 後方互換性: メジャーバージョンアップ時の移行コスト
  • 依存ライブラリの安定性: 依存先がメンテナンスされなくなるリスク

4. スケーラビリティへの影響

初期段階では問題なくても、ユーザー数やデータ量が増加したときに技術の限界が露呈する場合があります。

ユーザー数
  ^
  |                              /  技術Aの限界
  |                            /
  |                          / ← ここで技術移行が必要になる
  |                        /
  |                  ----+
  |                /     |
  |              /       | 技術Bならここまで対応可能
  |            /         |
  |          /           |
  |        /             |
  |      /               |
  |    /                 |
  |  /                   |
  | /                    |
  +----------------------+----> 時間

技術選定に関わるステークホルダー

技術選定は一人で行うものではありません。複数の立場の人間が関わります。

主要なステークホルダーと関心事

ステークホルダー主な関心事技術選定での役割
CTO / VP of Engineering企業全体の技術戦略、コスト、採用最終意思決定、技術ビジョンの提示
テックリード / アーキテクト技術的妥当性、チームのスキル技術調査、PoC実施、推薦
プロジェクトマネージャースケジュール、予算、リスク制約条件の提示、スケジュール調整
プロダクトマネージャーユーザー体験、ビジネス要件要件の明確化、優先順位の設定
開発メンバー開発体験、学習コストフィードバック提供、PoC参加
SRE / インフラチーム運用性、監視、デプロイ運用観点からの評価
セキュリティチームセキュリティリスクセキュリティ観点からの評価

ステークホルダー間の対立が起きやすいポイント

CTO: 「最新の技術を採用してイノベーションを推進したい」
         |
         v
テックリード: 「チームが使いこなせる技術にしたい」
         |
         v
PM: 「スケジュールに間に合う技術にしてほしい」
         |
         v
開発者: 「開発体験が良い技術を使いたい」
         |
         v
SRE: 「運用しやすい技術にしてほしい」

こうした対立を解消するためには、判断基準を事前に明確化し、関係者全員が合意した上で評価を進めることが不可欠です。


技術選定のタイミング

技術選定が必要になるのは、主に以下の3つのタイミングです。

1. 新規プロジェクト

ゼロからプロダクトを構築する場合、全ての技術スタックを決定する必要があります。

特徴:

  • 自由度が最も高い
  • 判断を誤ったときの影響も最も大きい
  • チームのスキルセットを考慮する必要がある

2. リプレース(技術移行)

既存システムの技術を置き換える場合です。レガシーシステムの刷新や、スケーラビリティの限界に達した場合に発生します。

特徴:

  • 既存データの移行を考慮する必要がある
  • 段階的な移行戦略が求められる
  • 既存機能の再現が必要

3. スケールアップ

ユーザー数やデータ量の増加に対応するため、部分的に技術を追加・変更する場合です。

特徴:

  • 既存システムとの互換性が重要
  • ボトルネックの特定が前提
  • 段階的な導入が可能

タイミング別の判断ポイント

+--------------------------------------------------------------+
|        新規プロジェクト        |  リプレース  |  スケールアップ |
+--------------------------------------------------------------+
| 自由度:      高               | 中          | 低              |
| リスク:      高               | 高          | 中              |
| コスト:      中               | 高          | 低〜中          |
| 期間:        中               | 長          | 短〜中          |
| 調査範囲:    広い              | 中          | 狭い            |
+--------------------------------------------------------------+

技術選定のプロセス

技術選定は以下の6つのステップで進めます。

プロセス全体像

+--------+    +--------+    +--------+    +--------+    +--------+    +--------+
|        |    |        |    |        |    |        |    |        |    |        |
| 要件   |--->| 調査   |--->| PoC    |--->| 評価   |--->| 決定   |--->| レビュー|
| 定義   |    |        |    |        |    |        |    |        |    |        |
+--------+    +--------+    +--------+    +--------+    +--------+    +--------+
    |              |              |              |              |              |
    v              v              v              v              v              v
  機能要件      候補技術の    プロトタイプ    スコアリング    最終選定      定期的な
  非機能要件    リストアップ   作成・検証     マトリクス     ドキュメント   見直し
  制約条件      比較調査                      作成          化

ステップ1: 要件定義

まず、プロジェクトの要件を明確にします。技術選定の前に「何を作るのか」「どんな制約があるのか」を整理します。

整理すべき項目:

  • 機能要件(何ができるべきか)
  • 非機能要件(パフォーマンス、可用性、セキュリティ)
  • 技術的制約(既存システムとの連携、社内標準)
  • ビジネス制約(予算、スケジュール、チームサイズ)

ステップ2: 調査

要件に基づいて候補となる技術をリストアップし、各技術について調査します。

調査のポイント:

  • 公式ドキュメントの質と量
  • GitHubのスター数、コミット頻度、Issue対応速度
  • Stack Overflowでの質問数と回答率
  • 導入企業の事例
  • ベンチマーク結果

ステップ3: PoC(Proof of Concept / 概念実証)

候補を2〜3に絞った後、実際に小規模なプロトタイプを作成して検証します。

PoCで確認すべきこと:

  • 要件を満たせるか
  • 開発速度はどうか
  • チームが理解できるか
  • パフォーマンスは十分か
  • 既存システムとの連携は問題ないか

ステップ4: 評価

PoCの結果を踏まえ、評価マトリクスを使って定量的に比較します。

ステップ5: 決定

評価結果を元に最終的な技術を選定し、ADR(Architecture Decision Record) として意思決定の記録を残します。

ADRの基本フォーマット:

# ADR-001: フロントエンドフレームワークの選定

## ステータス
承認済み(2026-03-28)

## コンテキスト
新規WebアプリケーションのフロントエンドフレームワークをReactかVueか選定する必要がある。

## 決定
Reactを採用する。

## 理由
- チームの80%がReactの経験がある
- 採用市場でReactエンジニアが多い
- 社内の他プロジェクトでもReactを使用している

## 結果
- 学習コストが低く抑えられる
- 社内のナレッジを共有できる
- Vue固有のメリット(小規模開発のシンプルさ)は享受できない

ステップ6: レビュー

技術選定は一度行ったら終わりではありません。定期的に見直しを行います。

  • 3ヶ月後: 初期の仮説が正しかったか検証
  • 半年後: パフォーマンスや開発生産性を測定
  • 1年後: 技術トレンドの変化を考慮して再評価

「銀の弾丸はない」

ソフトウェアエンジニアリングの世界には、フレデリック・ブルックスが1986年に提唱した有名な論文「No Silver Bullet(銀の弾丸はない)」があります。

これは、全ての要件を完璧に満たす万能な技術は存在しないということを意味しています。

理想: 全てが完璧な技術
+--------------------------------------------------+
| パフォーマンス:  ★★★★★                           |
| 学習コスト:      ★★★★★(低い)                    |
| エコシステム:    ★★★★★                            |
| 採用市場:        ★★★★★                            |
| スケーラビリティ: ★★★★★                           |
| コスト:          ★★★★★(安い)                    |
+--------------------------------------------------+
→ このような技術は存在しない

現実: トレードオフの中で最適解を探す
+----------------------------+  +----------------------------+
| 技術A                      |  | 技術B                      |
| パフォーマンス: ★★★★★     |  | パフォーマンス: ★★★☆☆     |
| 学習コスト:     ★★☆☆☆     |  | 学習コスト:     ★★★★★     |
| エコシステム:   ★★★☆☆     |  | エコシステム:   ★★★★★     |
+----------------------------+  +----------------------------+
→ 要件に応じてどちらが「より適しているか」を判断する

トレードオフの例

比較軸技術A(例: Rust)技術B(例: Python)
パフォーマンス非常に高い中程度
開発速度遅い速い
学習曲線急峻緩やか
メモリ安全性コンパイル時に保証実行時エラーの可能性
エコシステム成長中巨大
採用市場狭い広い

Rustはパフォーマンスとメモリ安全性で優れますが、Pythonは開発速度とエコシステムで勝ります。要件に応じて「何を優先するか」を決めることが技術選定の本質です。


技術選定で考慮すべき10の観点

以下の10の観点を網羅的に評価することで、偏りのない技術選定が可能になります。

#観点説明評価方法の例
1機能適合性要件を満たす機能があるか要件チェックリスト
2パフォーマンス速度、スループット、レイテンシベンチマークテスト
3スケーラビリティ成長に対応できるか負荷テスト、アーキテクチャレビュー
4開発生産性開発速度、DX(開発者体験)PoCでの開発時間測定
5学習コストチームが習得するまでの時間ドキュメント調査、トレーニング計画
6エコシステムライブラリ、ツール、プラグインパッケージマネージャーの統計
7コミュニティ活発さ、情報量、サポートGitHub統計、Stack Overflow
8採用市場エンジニアの採用しやすさ求人サイトの統計
9セキュリティ脆弱性対応、セキュリティ機能CVE履歴、セキュリティ監査
10コストライセンス、インフラ、運用TCO(総所有コスト)計算

評価テンプレート

各観点に対して1〜5のスコアを付け、重み付けを行います。

観点              重み    技術A    技術B    技術C
---------------------------------------------------
機能適合性        x3      4(12)    5(15)    3(9)
パフォーマンス    x2      5(10)    3(6)     4(8)
スケーラビリティ  x2      4(8)     3(6)     5(10)
開発生産性        x3      3(9)     5(15)    4(12)
学習コスト        x2      2(4)     4(8)     3(6)
エコシステム      x1      4(4)     5(5)     3(3)
コミュニティ      x1      3(3)     5(5)     4(4)
採用市場          x2      3(6)     5(10)    2(4)
セキュリティ      x2      5(10)    4(8)     4(8)
コスト            x2      3(6)     4(8)     4(8)
---------------------------------------------------
合計              20      72       86       72

この例では技術Bが最高スコアとなりますが、スコアだけで機械的に決めるのではなく、定性的な判断も加味して最終決定を行います。


まとめ

技術選定は、単に「何が流行っているか」で決めるものではありません。

  1. 要件を明確にする -- 何を作るのか、何が制約なのかを整理する
  2. 複数の観点で評価する -- 10の観点を網羅的にチェックする
  3. トレードオフを理解する -- 銀の弾丸はない。何を優先するかを明確にする
  4. プロセスに従う -- 要件定義→調査→PoC→評価→決定→レビューの6ステップ
  5. 記録を残す -- ADRとして意思決定の経緯を文書化する
  6. 定期的に見直す -- 技術は進化する。定期的な再評価が必要

次の記事では、技術選定の評価基準についてより詳しく掘り下げます。


参考資料