概要
- Mercury社で 200万行規模のHaskellコード を運用する実例紹介
- Haskellの型システム を活用した信頼性・知識伝達の工夫
- 純粋性(purity) を「境界」として捉える現場視点
- 新人エンジニア でも運用可能な仕組み作り
- 運用現場での教訓 とベストプラクティスの共有
Mercuryにおける大規模Haskell運用の現実
- Mercuryは フィンテック企業、30万以上の事業者にバンキングサービスを提供
- 年間約 2億4800億ドル の取引処理、従業員約1,500名体制
- 全エンジニアの多くがHaskell未経験 で入社、現場で習得
- 約200万行のHaskellコードベース を運用、コメント等を除外した実数
- 急成長・高頻度な人材入れ替え環境下での 知識伝達・システム保守性 の重要性
Haskellが大規模運用で機能する理由
- APIに運用知識を組み込む ことで、危険な操作を安全な境界内に封じ込め
- 型システム を通じて「安全な道」を「簡単な道」にする設計
- システムの 理解容易性 を重視し、新人でもコードの意図を把握可能に
- SVB危機 などの非常時にも、堅牢なシステム運用を実現
- ドキュメントより型定義 で知識を残すことで、異動・退職時の知識喪失を防止
信頼性への考え方
- 従来の「失敗を防ぐ」思考から、「 適応力を持たせる」へ転換
- システムが 変動を吸収し、段階的に劣化する 設計を重視
- 新人や短期間の在籍者が多い環境では、 組織的知識の伝達 が課題
- 型システムを運用支援ツール と捉え、正しさ証明以上の価値を見出す
- 安定性エンジニアリングチーム による事前の運用検討・リスク対策
純粋性(purity)は「境界」の設計指針
- Haskellの 純粋性は「性質」ではなく「インターフェースが守る境界」 という現場観点
- 内部で危険な操作(ミューテーション等)があっても、 型で外部から遮断 できれば許容
- 例: runST の型(rank-2型)による安全なスコープ管理
- 危険な操作は閉じ込め、外部からの誤用を防ぐ ことが本質
- 新人にとって「 純粋性は維持すべき境界」という説明が実践的
「正しいこと」を楽にする仕組み
- 大規模コードでは 操作順序や手順の遵守 が重要な場合が多い
- 例: トランザクションごとに監査ログをflushする、通知をDBトランザクション内でenqueueする等
- これらの「 作法」はドキュメントや口伝、Slackスレッド等に埋もれやすい
- Haskellの型で 運用上の作法や制約を強制 できる
- 例: 必須ステップを型で表現し、忘れや誤用を防止
- 組織の知識半減期が短い中、 型による知識の永続化 が有効
まとめ
- Mercuryでは Haskellを大規模・高頻度変化の現場 で運用し、成功体験を積み重ね
- 型システム・純粋性の境界設計・知識伝達 が、システムの信頼性と運用容易性に直結
- 現場で役立つHaskellの実践知 を、今後も発信予定