ストーリー
技術戦略とは
// 技術戦略の構成要素
interface TechStrategy {
// ビジョン: 3-5年後にどうなっていたいか
vision: string;
// 原則: 技術判断の基準となるルール
principles: TechPrinciple[];
// 技術レーダー: 採用・評価中・保留・廃止の技術一覧
techRadar: TechRadar;
// ロードマップ: いつ何をどの順序で実行するか
roadmap: TechRoadmapItem[];
// ガバナンス: 戦略の遵守と評価の仕組み
governance: GovernanceModel;
}
interface TechPrinciple {
name: string;
description: string;
rationale: string;
implications: string[];
}
const EXAMPLE_PRINCIPLES: TechPrinciple[] = [
{
name: "Buy over Build",
description: "コア競争力でない部分はSaaSやOSSを活用する",
rationale: "限られたエンジニアリングリソースをコアビジネスに集中",
implications: [
"認証はAuth0を使用(自前実装しない)",
"監視はDatadogを使用",
"独自ORMを作らない",
],
},
{
name: "API First",
description: "全てのサービスはAPIを通じてのみ通信する",
rationale: "疎結合な設計により、独立したデプロイと進化を可能にする",
implications: [
"DB共有を禁止",
"OpenAPI仕様を先に定義",
"後方互換性を維持",
],
},
{
name: "Boring Technology",
description: "実績のある技術を優先し、新技術の導入は慎重に行う",
rationale: "運用の安定性と開発者の採用のしやすさ",
implications: [
"新技術の導入には Innovation Token(年に2-3個)を使う",
"PoC → 小規模導入 → 本番適用の段階を踏む",
],
},
];
技術レーダー
// ThoughtWorks式の技術レーダー
interface TechRadar {
adopt: TechItem[]; // 積極的に採用すべき
trial: TechItem[]; // 試験的に使い始めてよい
assess: TechItem[]; // 評価中(PoC段階)
hold: TechItem[]; // 新規採用しない(既存は維持)
}
interface TechItem {
name: string;
quadrant: 'languages' | 'frameworks' | 'tools' | 'platforms';
description: string;
}
const EXAMPLE_RADAR: TechRadar = {
adopt: [
{ name: "TypeScript", quadrant: "languages", description: "全新規プロジェクトで使用" },
{ name: "PostgreSQL", quadrant: "platforms", description: "RDBMSの標準選択肢" },
{ name: "Docker", quadrant: "tools", description: "全環境のコンテナ化" },
{ name: "GitHub Actions", quadrant: "tools", description: "CI/CDの標準" },
],
trial: [
{ name: "Deno", quadrant: "platforms", description: "小規模ツールで試行" },
{ name: "OpenTelemetry", quadrant: "tools", description: "分散トレーシングの標準化" },
],
assess: [
{ name: "WebAssembly", quadrant: "platforms", description: "パフォーマンス要件の高い処理で評価中" },
],
hold: [
{ name: "jQuery", quadrant: "frameworks", description: "新規採用禁止。React/Vueに移行" },
{ name: "MongoDB", quadrant: "platforms", description: "新規採用禁止。PostgreSQLを使用" },
],
};
技術的負債の管理
// 技術的負債の分類と対応
interface TechDebt {
category: 'intentional' | 'unintentional';
type: string;
impact: 'high' | 'medium' | 'low';
effort: 'high' | 'medium' | 'low';
strategy: string;
}
const TECH_DEBT_MANAGEMENT: TechDebt[] = [
{
category: "intentional",
type: "レガシーフレームワークの継続使用",
impact: "high",
effort: "high",
strategy: "Strangler Figパターンで段階的移行(6ヶ月計画)",
},
{
category: "unintentional",
type: "テストカバレッジの不足(30%)",
impact: "medium",
effort: "medium",
strategy: "新機能開発時に関連コードのテストも追加(ボーイスカウトルール)",
},
{
category: "intentional",
type: "モノリスのままでの運用",
impact: "medium",
effort: "high",
strategy: "ドメイン境界を整理し、優先度の高いサービスから分離",
},
];
// 技術的負債の可視化: 四象限マトリクス
// High Impact, Low Effort → 即座に対応(Quick Wins)
// High Impact, High Effort → 計画的に対応(Strategic)
// Low Impact, Low Effort → 余裕があれば対応
// Low Impact, High Effort → 対応しない(Accept)
技術ロードマップ
const TECH_ROADMAP = {
q1: {
theme: "基盤強化",
items: [
"CI/CDパイプラインの改善(デプロイ頻度を週1→日次に)",
"監視基盤の統一(Datadog導入)",
"テストカバレッジ50%達成",
],
},
q2: {
theme: "モダナイゼーション",
items: [
"認証基盤をAuth0に移行",
"レガシーAPIのv2設計とOpenAPI仕様策定",
"コンテナ化(Docker + ECS)",
],
},
q3: {
theme: "スケーラビリティ",
items: [
"キャッシュ層の導入(Redis Cluster)",
"データベースのリードレプリカ追加",
"CDN導入によるフロントエンド高速化",
],
},
q4: {
theme: "イノベーション",
items: [
"マイクロサービス第1弾(検索サービスの分離)",
"AI/ML基盤のPoC",
"次年度の技術戦略策定",
],
},
};
まとめ
| ポイント | 内容 |
|---|---|
| 技術原則 | Buy over Build、API First、Boring Technology |
| 技術レーダー | Adopt/Trial/Assess/Holdで技術を分類管理 |
| 負債管理 | 影響度と工数のマトリクスで優先順位付け |
| ロードマップ | 四半期ごとのテーマと具体的なアクション |
チェックリスト
- 技術戦略の構成要素を理解した
- 技術レーダーの4カテゴリを説明できた
- 技術的負債の管理方法を把握した
- 技術ロードマップの策定プロセスを理解した
次のステップへ
次は「設計者としてのキャリアパス」を学びます。技術者としてのキャリアの進め方を考えましょう。
推定読了時間: 30分