数百万行のHaskell:マーキュリーにおけるプロダクションエンジニアリング
11時間前原文(blog.haskell.org)
概要
- 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の実践知を、今後も発信予定