ストーリー
田
田中VPoE
標準化のスコープが決まった。次は具体的な中身に入る。まずは最も議論を呼ぶ「言語・フレームワーク戦略」だ
あなた
言語の選定はエンジニアの間で宗教戦争になりがちですよね
あ
田
田中VPoE
だからこそ感情ではなく、データと基準で判断する必要がある。「自分が好きだから」ではなく「組織として最適だから」という論理で語れなければならない
田
田中VPoE
5つの基準がある。エコシステム、採用市場、チーム内実績、パフォーマンス特性、学習コスト。これを組み合わせて、組織に最適な言語ポートフォリオを設計する
言語ポートフォリオの考え方
なぜ1つの言語に絞らないのか
| 理由 | 説明 |
|---|
| 用途の多様性 | フロントエンド、バックエンド、データ処理、インフラで最適な言語が異なる |
| パフォーマンス要件 | 高スループットが必要な処理とスクリプティングでは求められる特性が違う |
| 採用市場 | 1言語のみでは採用対象が限定される |
| 技術の進化 | 新しい言語・パラダイムを取り込む余地を残す必要がある |
ポートフォリオ戦略
言語ポートフォリオの構造:
Primary Languages(主要言語: 1-2個)
├── 組織の大半のサービスで使用
├── 最も深いナレッジが蓄積
├── 社内ライブラリ・テンプレートが充実
└── 新規プロジェクトの第一候補
Secondary Languages(副言語: 1-2個)
├── 特定の用途で主要言語より優れる
├── 十分なナレッジと人材がある
└── 用途を明確に限定して使用
Specialist Languages(専門言語: 0-1個)
├── 極めて特定の用途(データサイエンス等)
├── 限られたチームのみが使用
└── 採用・教育の独自パスが必要
Legacy Languages(レガシー言語: 0-n個)
├── 新規での使用は禁止
├── 既存サービスの維持のみ
└── 移行計画が策定されている
言語選定の5つの基準
評価マトリクス
| 基準 | 重み | 評価ポイント |
|---|
| エコシステム成熟度 | 25% | ライブラリの充実度、コミュニティの活発さ、ドキュメントの質 |
| 採用市場 | 25% | 日本国内の求人数、候補者数、人件費水準 |
| 組織内実績 | 20% | 本番環境での稼働実績、チーム内の習熟度 |
| 技術的特性 | 20% | パフォーマンス、型安全性、並行処理、ツーリング |
| 学習コスト | 10% | 既存エンジニアが習得するまでの時間 |
主要言語の比較例
| 言語 | エコシステム | 採用市場 | 型安全性 | パフォーマンス | 学習コスト |
|---|
| TypeScript | 5 | 5 | 4 | 3 | 4 |
| Go | 4 | 4 | 4 | 5 | 4 |
| Python | 5 | 5 | 2 | 2 | 5 |
| Java | 5 | 4 | 5 | 4 | 3 |
| Rust | 3 | 2 | 5 | 5 | 2 |
| Kotlin | 4 | 3 | 5 | 4 | 3 |
用途別の推奨マッピング
| 用途 | 推奨言語 | 理由 |
|---|
| Webフロントエンド | TypeScript | React/Next.jsエコシステムの充実 |
| バックエンドAPI | Go or TypeScript | Goは高パフォーマンス、TSはフロントとの共通化 |
| データパイプライン | Python | データサイエンスライブラリの充実 |
| インフラ/CLIツール | Go | シングルバイナリ、クロスコンパイル |
| モバイル | Kotlin / Swift | プラットフォームネイティブの最適解 |
フレームワーク選定戦略
フレームワーク選定の基準
| 基準 | 内容 |
|---|
| 安定性 | メジャーバージョンアップの頻度、破壊的変更の有無 |
| コミュニティ | GitHub Stars、NPMダウンロード数、Stack Overflowの活発さ |
| 企業の後ろ盾 | Meta(React)、Google(Angular)、Vercel(Next.js)等 |
| パフォーマンス | ベンチマーク、起動時間、メモリ使用量 |
| 開発者体験 | ツーリング、デバッグ、ホットリロード |
フレームワークの標準化レベル
フレームワーク標準化の推奨アプローチ:
Webフロントエンド:
├── React(Adopt): UIライブラリとして統一
├── Next.js(Adopt): Reactアプリケーションフレームワーク
└── Vue.js(Hold): 新規採用停止、React移行を推奨
バックエンド(Go):
├── Echo(Adopt): Web API フレームワーク
└── gRPC-Go(Trial): サービス間通信
バックエンド(TypeScript):
├── NestJS(Adopt): エンタープライズ向けフレームワーク
├── Hono(Trial): 軽量API向け
└── Express(Hold): メンテナンスモードへ
テスト:
├── Vitest(Adopt): フロントエンドテスト
├── Go testing(Adopt): Goの標準テストパッケージ
└── Playwright(Adopt): E2Eテスト
言語戦略のコミュニケーション
伝え方のポイント
| ポイント | 説明 |
|---|
| 理由を明確に | 「なぜこの言語か」をデータで説明 |
| 自由の範囲を明示 | 「ここは自由、ここは推奨、ここは必須」を明確に |
| 移行パスを提示 | 既存技術からの移行方法と支援を具体的に |
| 例外を認める | 正当な理由があれば推奨外の選択もOKという姿勢 |
| 定期的な見直し | 「この判断は永久ではない」と伝える |
言語戦略ドキュメントの構成例
| セクション | 内容 |
|---|
| 目的 | なぜ言語戦略が必要か |
| 言語ポートフォリオ | Primary / Secondary / Specialist / Legacy の分類 |
| 用途別マッピング | 各用途での推奨言語 |
| フレームワーク推奨 | 言語ごとの推奨フレームワーク |
| 例外プロセス | 推奨外の言語を使いたい場合の手順 |
| テンプレート | 各言語のプロジェクトテンプレート |
| 更新履歴 | 変更の記録と根拠 |
「言語戦略は”制限”ではなく”投資の集中”だ。限られたリソースをどこに投下すれば最大のリターンが得られるか。それを組織として判断する」 — 田中VPoE
まとめ
| ポイント | 内容 |
|---|
| ポートフォリオ戦略 | Primary/Secondary/Specialist/Legacyの4分類 |
| 5つの選定基準 | エコシステム、採用市場、組織内実績、技術的特性、学習コスト |
| フレームワーク | 用途別に推奨フレームワークを明示 |
| コミュニケーション | データで語り、例外を認め、定期的に見直す |
チェックリスト
次のステップへ
次は「アーキテクチャ標準」を学びます。言語・フレームワーク戦略の上位に位置するアーキテクチャレベルの標準を設計する方法を身につけましょう。
推定読了時間: 30分