ストーリー
田
田中VPoE
技術標準を策定する前に、まず「今、何がどこで使われているか」を正確に把握する必要がある。棚卸しだ
田
田中VPoE
ヒアリングは重要だが、それだけでは不十分だ。人は自分が使っている技術を正確に把握していないことが多い。依存ライブラリの数、使われなくなったサービス、シャドーITで使われている技術…体系的なアプローチが必要だ
田
田中VPoE
3つのアプローチを組み合わせる。自動収集、ヒアリング、そしてコードベースの分析だ
技術スタック棚卸しの全体像
3つのアプローチ
| アプローチ | 概要 | 精度 | カバレッジ |
|---|
| 自動収集 | リポジトリ・インフラから技術情報を自動抽出 | 高い | 高い |
| ヒアリング | チームリーダーへのインタビューとアンケート | 中程度 | 中程度 |
| コードベース分析 | ソースコード・設定ファイルの直接分析 | 非常に高い | 非常に高い |
棚卸しプロセス:
Phase 1: 自動収集(1-2日)
├── リポジトリ一覧の取得
├── package.json / go.mod / requirements.txt の解析
├── Dockerfileの解析
└── インフラ構成の確認(Terraform / CloudFormation)
Phase 2: ヒアリング(3-5日)
├── チームリーダーへの技術スタックヒアリング
├── 技術選定の理由と経緯
├── 現在の課題・不満
└── 今後の技術的展望
Phase 3: コードベース分析(2-3日)
├── 依存ライブラリの詳細分析
├── バージョン情報の確認
├── セキュリティ脆弱性のスキャン
└── 非推奨APIの使用状況
Phase 1: 自動収集
リポジトリスキャン
組織が管理するリポジトリをスキャンし、技術情報を自動収集します。
| 収集対象 | 情報ソース | 抽出できる情報 |
|---|
| 言語 | GitHub Linguist / ファイル拡張子 | 使用言語と割合 |
| フレームワーク | package.json, go.mod 等 | フレームワークとバージョン |
| データベース | docker-compose, Terraform | 使用DB種別とバージョン |
| クラウドサービス | Terraform, CloudFormation | 利用AWSサービス一覧 |
| CI/CD | .github/workflows, Jenkinsfile | パイプライン構成 |
| 監視ツール | 設定ファイル、依存関係 | Datadog, Prometheus 等 |
インフラ情報の収集
収集すべきインフラ情報:
コンピュート:
├── EC2 / ECS / EKS / Lambda
├── インスタンスタイプ・サイズ
└── オートスケーリング設定
データストア:
├── RDS(エンジン種別・バージョン)
├── DynamoDB テーブル
├── ElastiCache(Redis / Memcached)
├── S3 バケット
└── Elasticsearch / OpenSearch
ネットワーク:
├── VPC構成
├── CDN(CloudFront等)
└── API Gateway
メッセージング:
├── SQS / SNS
├── Kafka / MSK
└── EventBridge
Phase 2: ヒアリング
ヒアリングシートの設計
チームリーダーに対して以下の項目をヒアリングします。
| カテゴリ | 質問項目 | 目的 |
|---|
| 技術選定の経緯 | なぜこの技術を選んだか? | 意思決定プロセスの把握 |
| 満足度 | 現在の技術スタックに満足しているか(1-5)? | 変更の必要性の評価 |
| 課題 | 技術的に困っていることは何か? | ペインポイントの特定 |
| 依存関係 | 他チームの技術に依存しているか? | 相互依存性の把握 |
| 人材 | この技術を扱えるメンバーは何人か? | バス係数の評価 |
| 将来展望 | 技術を変更したい意向はあるか? | 移行計画への入力 |
ヒアリング時の注意点
| 注意点 | 理由 |
|---|
| 批判的にならない | 「なぜそんな技術を使っているのか」という姿勢は反発を招く |
| 経緯を尊重する | 当時の判断には当時の合理性があったことを認識する |
| 本音を引き出す | 「本当はこう変えたい」という声を拾う |
| 定量的に記録する | 「困っている」ではなく「月に何時間の工数がかかっているか」 |
Phase 3: コードベース分析
依存関係の深堀り
依存関係分析で確認すべきポイント:
バージョン鮮度:
├── 最新バージョンとの乖離
├── サポート切れのバージョンの使用
└── セキュリティパッチの適用状況
依存の深さ:
├── 直接依存の数
├── 間接(transitive)依存の数
└── 重複依存の有無
ライセンス:
├── OSSライセンスの種別
├── 商用利用制限の有無
└── コピーレフト型ライセンスの検出
メンテナンス状態:
├── 最終コミット日
├── メンテナ数
├── Issue / PR の対応状況
└── 後継ライブラリの有無
技術スタック分類テンプレート
棚卸しの結果を整理するためのテンプレートです。
| カテゴリ | 技術名 | バージョン | 使用チーム数 | 状態 | バス係数 | 備考 |
|---|
| 言語 | TypeScript | 5.x | 8 | Active | 高 | フロントエンド全チーム |
| 言語 | Go | 1.22 | 3 | Active | 中 | APIサービス |
| 言語 | Python | 3.11 | 2 | Active | 低 | データパイプラインのみ |
| 言語 | Java | 11 | 1 | Legacy | 低 | レガシーサービス1つ |
| FW | React | 18.x | 6 | Active | 高 | |
| FW | Vue.js | 2.x | 2 | Deprecated | 中 | 移行計画なし |
| DB | PostgreSQL | 15 | 7 | Active | 高 | メインDB |
| DB | MongoDB | 6.x | 2 | Active | 低 | 特定サービスのみ |
| DB | MySQL | 5.7 | 1 | Legacy | 低 | EOL間近 |
状態の定義
| 状態 | 定義 | 対応 |
|---|
| Active | 積極的に使用中。新規採用も可 | 維持・強化 |
| Stable | 使用中だが新規採用は推奨しない | 現状維持 |
| Deprecated | 非推奨。段階的に移行を計画 | 移行計画策定 |
| Legacy | レガシー。早期の移行が望ましい | 移行実行 |
| Experimental | 実験的に導入。評価中 | 評価継続 |
棚卸し結果の可視化
技術スタックマップ
棚卸し結果を一覧表だけでなく、アーキテクチャの観点から可視化します。
技術スタックマップ(例):
┌─────────────── クライアント ───────────────┐
│ Web: React + TypeScript │
│ Mobile: React Native │
│ Admin: Vue.js(Deprecated) │
└────────────────────────────────────────────┘
↕ API Gateway(Kong)
┌─────────────── バックエンド ───────────────┐
│ User Service: Go + gRPC │
│ Product Service: Go + gRPC │
│ Order Service: TypeScript + REST │
│ Legacy Service: Java + REST │
│ Data Pipeline: Python + Airflow │
└────────────────────────────────────────────┘
↕
┌─────────────── データストア ───────────────┐
│ Primary DB: PostgreSQL 15 │
│ Search: OpenSearch 2.x │
│ Cache: Redis 7.x │
│ Queue: Amazon SQS │
│ Object Store: Amazon S3 │
└────────────────────────────────────────────┘
↕
┌─────────────── インフラ ──────────────────┐
│ Container: ECS on Fargate │
│ CI/CD: GitHub Actions │
│ IaC: Terraform │
│ Monitoring: Datadog │
│ Logging: CloudWatch Logs │
└────────────────────────────────────────────┘
棚卸し結果からの洞察
分析の観点
| 観点 | 確認すべきこと | リスク指標 |
|---|
| 集中度 | 特定技術に過度に依存していないか | 1つの技術に依存チーム80%以上 |
| 分散度 | 同じ用途に技術が乱立していないか | 同一レイヤーに3種類以上 |
| 鮮度 | EOL/サポート切れの技術がないか | サポート終了まで6ヶ月以内 |
| バス係数 | 特定の人しか扱えない技術がないか | バス係数1の技術が存在 |
| セキュリティ | 既知の脆弱性を持つバージョンがないか | CVSSスコア7以上の脆弱性 |
「棚卸しの結果は組織の技術的な健康診断書だ。数字で語れなければ改善もできない」 — 田中VPoE
まとめ
| ポイント | 内容 |
|---|
| 3つのアプローチ | 自動収集、ヒアリング、コードベース分析を組み合わせる |
| 自動収集 | リポジトリ・インフラからの技術情報の自動抽出 |
| ヒアリング | 選定経緯、満足度、課題、人材状況を定量的に把握 |
| コードベース分析 | 依存関係、バージョン鮮度、ライセンス、メンテナンス状態 |
| 可視化 | 技術スタックマップで全体像を一目で把握できるようにする |
チェックリスト
次のステップへ
次は「テクノロジーレーダーの構築」を学びます。棚卸し結果を元に、組織の技術戦略を可視化するテクノロジーレーダーを構築する方法を身につけましょう。
推定読了時間: 30分