概要
- 依存関係 には見落とされがちな コスト が存在
- TigerBeetleのような ゼロ依存方針 の事例紹介
- 依存関係評価のための 5つのフレームワーク 提示
- 良い依存例とその評価基準の具体的解説
- 依存選択時は 批判的思考 と慎重な判断が必要
コーディングにおける依存関係の誤解
- 依存関係 は「無料の機能」と誤解されがち
- 実際は 学習コスト や 導入コスト が発生
- 複雑な依存 は自作よりも導入・習得が困難な場合も
- インターフェース変更 による自前コードの大幅修正リスク
- クライアント環境への配布 や デプロイの複雑化 問題
- コンテナ化 や バンドル 設定の煩雑化
- 本来の機能とは無関係な「新しい車輪」の再発明に繋がることも
TigerBeetleのゼロ依存アプローチ
- TigerBeetle は Vanilla Zig のみで構築、 ゼロ依存方針
- 依存関係は サプライチェーン攻撃 や 安全性・性能リスク、 インストール遅延 の原因
- インフラ基盤では 依存コスト がスタック全体に波及
- 少数精鋭の標準ツール 運用によるシンプルな開発環境維持
- Zig への投資で 新規課題 にも迅速対応
依存関係評価フレームワーク
-
「自作シリコンウエハー論」等の極論は置いておく
-
すべての依存が同等ではないという前提
-
5つの評価軸 を提案
- 普及性 (Ubiquity)
- 対象環境に 既に存在 するか
- 導入やデプロイ の複雑化有無
- 安定性 (Stability)
- 破壊的変更 や 非推奨化 の頻度
- 深さ (Depth)
- API・インターフェースの 裏に隠れた機能量
- 自作困難度
- 使い勝手 (Ergonomics)
- 宣言的抽象化 か、APIの 快適さ
- 水密性 (Watertightness)
- 抽象化の漏れ の有無
- 基盤技術 を意識する頻度
- 普及性 (Ubiquity)
-
依存推奨者は 使い勝手 のみを強調しがち。他の観点も重要
良い依存関係の例と評価
-
POSIXシステムコール
- 普及性 :Linux, Android, macOS, BSD等で利用可
- 安定性 :極めて高い
- 深さ :open一つで数十万行のカーネルコード
- 使い勝手 :やや古いが許容範囲
- 水密性 :高いがストレージ仕様差に注意
-
ECMA-48ターミナル制御コード
- 普及性 :ほぼ全ての主要ターミナルエミュレータで対応
- 安定性 :1991年以降変更なし
- 深さ :自作標準作成は現実的でない
- 使い勝手 :エスケープ文字の煩雑さはあるが許容範囲
- 水密性 :非常に高い
-
Webプラットフォーム(Web API, HTML, JS, CSS等)
- 普及性 :地球上で最も普及したアプリ・ドキュメントプラットフォーム
- 安定性 :後方互換性維持に注力
- 深さ :ブラウザ自作は非現実的
- 使い勝手 :多少の古さはあるがドキュメントとツールが充実
- 水密性 :ファイル・音声・動画以外はほぼ水密
依存関係選択の心得
- 悪い依存関係 の例は読者の練習問題として残す
- コスト と 便益 を常に批判的に評価
- 賢明な選択 の重要性