技術選定の決め手を27件のofficial sourceから抽出して8軸+6問チェックリストにした


TL;DR

技術選定は「速いか」「流行っているか」の直接比較より、まずworkload / failure mode / existing assets / migration shapeで候補を強く絞り、そのあとにiteration speed / performance economics / operational standardization / strategic leverageで順位づけする方が再現性が高い。ビッグテックとスタートアップ27件のofficial sourceを横断して抽出した8軸モデルと、実務で先に問うべき6問のチェックリストを紹介する。

なぜこの記事を書いたか

技術選定の議論は「Rustは速い」「TypeScriptはエコシステムが広い」のような単一軸の比較に陥りやすい。しかし実際にビッグテックやスタートアップのofficial blog / engineering blogを読むと、決め手になっているのは単純なベンチマーク結果ではなく、もっと複合的な判断だった。

たとえばDiscordがgo→Rustに移行した理由は単に「Rustが速いから」ではなく、GCのtail latency spikeがワークロードに合わなかったからだ。StripeがTypeScriptに移行した理由も「型があると便利」ではなく、大規模コードベースのrefactor safetyとmigration toolingが決め手だった。

こうした事例を27件集めて横断的に分析した結果、技術選定の決め手は8つの軸に正規化でき、実務では6問のチェックリストを順に回すことで再現性の高い判断ができることがわかった。

8軸モデル

27件の事例から抽出した技術選定の判断軸を、重複を潰して8つに正規化した。

graph LR
    subgraph "順位をつける(下流)"
        E["5. Iteration speed<br>変更速度"]
        F["6. Performance economics<br>性能と経済性"]
        G["7. Operational standardization<br>運用の標準化"]
        H["8. Strategic leverage<br>戦略的てこ"]
    end
    subgraph "候補を絞る(上流)"
        A["1. Workload fit<br>ワークロードの形"]
        B["2. Safety & reliability<br>一番痛いfailure mode"]
        C["3. Ecosystem & asset reuse<br>既存資産の再利用"]
        D["4. Migration shape<br>移行の形"]
    end

上流4軸:候補を強く絞る

1. Workload fit — その技術はワークロードの形に合っているか。high-QPS + low-latencyなのか、long-running orchestrationなのか、CPU-bound batchなのかで、適する技術は根本的に異なる。DiscordがGoからRustに移行したのは、GCのtail latencyがリアルタイム通信のワークロードに合わなかったからだ。

2. Safety and reliability model — 一番痛いfailure modeは何か。Cloudflareがnginxの代わりにRust製のPingoraを作ったのは、メモリ安全性がインフラの信頼性に直結するからだ。DropboxもRustを選んだ理由に、sync engineでのデータ破損リスクの最小化を挙げている。

3. Ecosystem and existing asset reuse — 既存資産をどこまで捨てられないか。FaireがKotlinを採用したのは、既存のJavaコードベースとシームレスに共存できるからだ。新しい言語がどれだけ優れていても、既存のライブラリ・ツールチェーン・チームの知識を活かせなければ導入コストが上回る。

4. Migration shape — 移行は一気か、共存か、config-changeレベルで済むか。MetaのJava→Kotlin大規模移行では、言語選択そのものよりcodemod / translation pipelineが決定因子になった。Vercelのturborepo Go→Rust移行でも、full rewriteよりincremental portを選んだ理由として、機能出荷の継続とinteroperability surfaceの最小化が重要だった。

下流4軸:最終的な順位づけ

5. Iteration and workflow speed — 実行速度だけでなく、editor startup / typecheck latency / hot reloadを含む開発ループ全体の速度。TypeScriptのnative portが注目されたのは、ランタイム性能ではなくエディタのフィードバック速度が主な動機だ。ShopifyのProject References導入も、型チェックのインクリメンタル化による開発体験改善が決め手だった。

6. Performance economics — 絶対性能だけでなく、インフラコストとの兼ね合い。Figmaがc++→WebAssemblyに移行したのは、ブラウザ上でのロード時間3倍改善がユーザー体験に直結したからだ。LinkedInがProtobufを導入したのも、serialization効率がインフラコスト削減に効いたからだ。

7. Operational standardization — mixed toolchainのコストをどう評価するか。MetaのJava→Kotlin移行では、Java/Kotlin混在コードベースを長く抱えるとparallel toolchainsとbuild speed penaltyが乗るため、言語adoption自体が運用標準化の問題になった。AirbnbのBazel移行でも、speedだけでなくhermeticity / repeatability / uniform build layerが決定因子だ。

8. Strategic leverage — この選択は次の標準化やplatform strategyに効くか。SwiftのIDE support拡張がOpen VSX対応でCursor / VSCodium / Kiroまで広がる動きは、editor compatibility自体がstrategic leverageになりうることを示す。MoonBitのWasm-first設計も、cloud-edge / AI-native workflowという将来の基盤を見据えた戦略的選択だ。

ビッグテック vs スタートアップ:重くなる軸の違い

8軸の重みは組織の文脈で大きく変わる。27件の事例を横断すると、以下のパターンが安定して見えた。

graph LR
    subgraph "Big tech が重視"
        BT1["Migration shape"]
        BT2["Operational standardization"]
        BT3["Existing asset reuse"]
    end
    subgraph "共通して重い"
        CM1["Safety & reliability"]
        CM2["Performance economics"]
    end
    subgraph "Startup が重視"
        ST1["Workload fit"]
        ST2["Iteration speed"]
        ST3["Strategic leverage"]
    end
  • Big tech は、mixed-codebase cost / shared toolchain / standardization penaltyを強く気にする。新しい技術の導入は「良い技術か」より「既存の数百万行とどう共存するか」が先に来る
  • Startup は、workload fit / shipping speed / leverageを強く気にする。既存資産が少ない分、ワークロードへの適合度と開発速度のトレードオフが直接的になる
  • 共通して safety / reliability modelとperformance economicsは、規模を問わず強い判断軸になる。ただしbig techはblast radius / compatibility / org-scale reliabilityを、startupはlatency / infra cost / shipping confidenceをより重く見る

代表事例ファミリー28件

8軸モデルの裏付けとなる事例を、6つのファミリーに分類した。各事例にはofficial sourceのURLを付けている。

A. 言語移行 / 型付け導入

事例何を選んだか何から移ったか主な決め手主軸
Meta / Java→Kotlin at scaleKotlinJavanull-safety, codemod pipelineMigration shape, Operational standardization
Meta / Translating Java→KotlinKotlin (automated)Javaheadless translator + lintersMigration shape
Faire / Kotlin adoptionKotlinJavaJava interop, gradual migration, hiringEcosystem reuse, Migration shape
Expedia / server-side KotlinKotlinJavanull-safety, concisenessSafety, Iteration speed
Stripe / TypeScript migrationTypeScriptJavaScript (Flow)refactor safety, migration toolingSafety, Migration shape
Slack / TypeScript at SlackTypeScriptJavaScript大規模保守, type safetySafety, Operational standardization

B. ビルドツール / 開発基盤

事例何を選んだか何から移ったか主な決め手主軸
TypeScript native portGo (native)TypeScript (self-hosted)editor startup, typecheck latencyIteration speed, Performance economics
Shopify / Project ReferencesTS Project Referencesmonolithic tsconfigincremental typecheckIteration speed
Airbnb / Bazel migrationBazelGradlehermeticity, repeatabilityOperational standardization
Vercel / Turborepo Go→RustRustGoincremental port, behavior preservationMigration shape, Performance economics
Swift / IDE support expansionOpen VSXXcode onlyeditor compatibility拡大Strategic leverage

C. システム / ランタイム / インフラ

事例何を選んだか何から移ったか主な決め手主軸
Discord / Go→RustRustGoGC tail latency eliminationWorkload fit, Performance economics
Dropbox / Rust in CaptureRustPythonmemory safety, sync engine reliabilitySafety
Cloudflare / PingoraRust (自社製)nginx (C)memory safety at proxy scaleSafety, Performance economics
LinkedIn / ProtobufProtobufJSONserialization効率, 既存framework統合Performance economics, Ecosystem reuse
Bun / Zig runtimeZigsingle binary, low-level controlWorkload fit, Performance economics
Ghostty / Zig terminalZignative統合, explicit controlWorkload fit, Strategic leverage
TigerBeetle / Zig methodologyZigdeterministic memory, reproducibilitySafety, Operational standardization

D. フロントエンド / プロダクト基盤

事例何を選んだか何から移ったか主な決め手主軸
Figma / C++→WebAssemblyWebAssemblyasm.jsロード時間3x改善, runtime fitWorkload fit, Performance economics
Shopify / React NativeReact NativeNative (iOS/Android)mobile-web共有, iteration speedIteration speed, Strategic leverage
MoonBit / Wasm-first設計MoonBit (新言語)Wasm-first, cloud-edge/AI-nativeStrategic leverage, Workload fit

E. AI / データ / サービング基盤

事例何を選んだか何から移ったか主な決め手主軸
Uber / Michelangelo自社ML platformtraining-serving consistency, release decouplingOperational standardization, Strategic leverage
NVIDIA Triton / TensorRT-LLMTritonmulti-framework substrate, batching/schedulingWorkload fit, Performance economics
Modal / Physical IntelligenceModalremote inference, topology最適化Performance economics, Operational standardization
Spotify / ChartifyPython (Chartify)data scientist workflow fitWorkload fit, Iteration speed

F. 信頼性重視バックエンド / オーケストレーション

事例何を選んだか何から移ったか主な決め手主軸
Remote / ElixirElixirreliability, orchestrationSafety, Workload fit
V7 / Elixir for AI infraElixirfault tolerance, fewer moving partsSafety, Operational standardization
Heroku / ElixirElixirNode.js, Rubyconcurrency model, reliabilityWorkload fit, Safety
Slab / Elixir & PhoenixElixirproductivity + reliability両立Iteration speed, Safety

6問チェックリスト

8軸を実務で使いやすくするために、6問に圧縮した。各問が主に束ねている軸を併記する。

  1. この仕事のワークロードは何か? → Workload fit
  2. 一番痛いfailure modeは何か? → Safety and reliability model
  3. 既存資産をどこまで捨てられないか? → Ecosystem and existing asset reuse
  4. 移行は一気か、共存か、config-changeレベルで済むか? 自動変換/codemod/build-fixで支えられるか? → Migration shape
  5. 最適化したいのは何か? 実行性能 / editor-build feedback / 開発速度 / 運用再現性 / ramp-upのどれか? → Iteration speed / Performance economics / Operational standardization
  6. この選択は次の標準化やplatform strategyに効くか? → Strategic leverage

適用例:3つのワークロード類型

チェックリストは抽象的に見えるが、ワークロード類型ごとに問いの優先順位が変わる。以下の3例で具体的に示す。

A. high-QPS backend / infraサービス

  1. Workload fitとfailure modeを先に問う — GC tail latency / memory safety / concurrency modelがワークロードに合うか
  2. 次にMigration shapeexisting asset reuse — 既存サービスとの共存期間をどう安全に切り抜けるか
  3. 最後にPerformance economicsOperational standardizationで順位づけ

代表事例:Discord (Go→Rust)、Cloudflare (Pingora)、LinkedIn (Protobuf)

B. 大規模プロダクトUI / アプリケーション

  1. Iteration speedを先に問う — runtime speedより、editor/build feedback loop / refactor safety / hot reloadが効くか
  2. Migration shapeとinteropの良さを重く見る — 既存コードベースとの共存コスト
  3. Strategic leverageはdesign system / shared tooling / mobile-web横断整合まで含めて見る

代表事例:Stripe (TypeScript)、Shopify (React Native, Project References)、Figma (WebAssembly)

C. AI / データ / MLプラットフォーム

  1. model名ではなくsystem workloadとしてWorkload fitを見る — バッチ処理なのかリアルタイム推論なのかストリーミングなのか
  2. Operational standardizationSafety / reliabilityを早めに問う — training-serving consistencyとrelease decoupling
  3. Strategic leverageはtraining-serving consistency / team reuse / deployment topologyまで含める

代表事例:Uber (Michelangelo)、NVIDIA (Triton)、Modal (Physical Intelligence)

Tooling / 言語移行に特有の発見

事例を横断して、tooling / language migration固有の知見がいくつか浮かんだ。これは上の8軸モデルでは見えにくい、横断的なパターンだ。

  • runtime benchmarkだけで判断すると見誤る — TypeScript native portの動機はランタイム性能ではなくeditor startup / typecheck latency / memory usageだった。Airbnb Bazelも速度よりhermeticity / repeatabilityが決め手
  • migration shapeには「toolchain replatforming」も含まれる — アプリケーションコードの書き換えだけでなく、ビルドシステム・エディタ・CIパイプラインの移行も独立した選定観点になる
  • mixed-codebase costは時間とともに増大する — MetaのJava/Kotlin混在は、parallel toolchains / build speed penalty / onboarding complexityとして累積した。移行の「共存期間」をどう設計するかが、最終的なROIに大きく効く
  • Zig系の選択はRust比較そのものより「制約の束」で語られる — single binary / deterministic memory / low-level control / native統合 / 高速起動という束が、特定のワークロードに刺さる

まとめ

技術選定の再現性を上げるために必要なのは、「どの技術が最強か」を決めることではない。まず自分のワークロード・failure mode・既存資産・移行形で候補を絞り、そのあとに開発速度・性能経済性・運用標準化・戦略的てこで順位をつけるという問いの順番を持つことだ。

この記事で紹介した6問チェックリストの使い方をまとめる。

  1. まず6問を順に回して候補を絞る
  2. 各問で迷ったところだけ事例に戻ってrepresentative evidenceを引く
  3. 最後に8軸へ戻して、抜けている比較観点がないか点検する

この順番なら、事例を増やしても判断が散らばりにくい。

以上。