Bank Python のオーラル・ヒストリー(2021 年)

2026/06/26 5:14

Bank Python のオーラル・ヒストリー(2021 年)

RSS: https://news.ycombinator.com/rss

要約

日本語訳:

投資銀行セクターは、オープンソースの標準よりも速度と厳格な内部統制を重視する固有のエコシステムである**「Minerva」を中心に据えた独自のプラットフォームとして「Bank Python」を開発しました。このシステムは、コードをディスクではなくデータベース内に直接保存するという「データファースト」**のアプローチを採用しており、4 つの中央サブシステムによって管理されています:

  • Barbara: データ用のグローバルキーバリューストア
  • Dagger: 金融インストルメントグラフの管理用
  • Walpole: デプロイとログ処理を担うモノリシックなジョブレアンナー
  • MnTable:
    pandas
    を代替する固有のテーブルライブラリ

このアプローチにより、**「vouch」**メカニズムによるインスタントデプロイなどの独自機能は実現できますが、外部からの統合をブロックする閉鎖的な「技術的モノカルチャー」を生み出しています。同時に、標準的な業界ツールに対する従業員の技術習熟度が低下する技能萎縮(スキルアトロフィ)も招いています。その結果、新入社員对于这些複雑な内部構造を習得するには急激な学習曲線に直面することになり、同セクターは規制がリスク制限を図る意図にも関わらず、オープンソースに対して一方通行の関係性を維持しています。自前のソリューションを輸出する一方で、グローバルなコミュニティから隔離されています。

本文

【Python】巨大投資銀行で使用される「バンク・Python」の奇妙な世界:ミネルバシステムの内側を探る

金融分野における Python の利用方法は、一般的な開発コミュニティとは全く異なる独自の生態系を形成しています。本稿では、大衆にはあまり知られていない巨大投資銀行内部で採用されている独自の実装体系、「バンク・Python」(通称:ミネルバ)について解説します。このシステムは既存の Python エコシステムとは異なり、事実上独自の派生版(フォーク)として進化しています。数千人が使用するこの閉じた環境では、外部からは情報を得ることは容易ではありませんが、その仕組みを覗くことで、従来の常識を覆すソフトウェア構造を知ることができます。

: 本文中の詳細は一部簡略化・改変された架空の統合システム「ミネルバ」に基づいています。すべての詳細を網羅することはできませんが、主要な構成要素と概念の大まかな輪郭を示します。


1. バーバラ:巨大なキーバリューストア(鍵付き値ストア)

ミネルバシステムの根幹を成すのは、Python オブジェクトのグローバルデータベース上に構築された**「バーバラ」**です。これは単純なピクルス(pickle)と ZIP の組み合わせで構成され、驚くほど堅牢な設計を持ちます。

基本構造と使い方

  • 機能: 階層型のキー空間を持つシンプルなキーバリューストア。
  • 接続方法:
    barbara.open()
    でデフォルトの「ring」に接続する。
  • データ保存方針: ミネルバ内ではファイルシステムを使用せず、すべてのデータ(取引データ、インスツルメントデータ、市場データ、アプリケーションの状態)をバーバラに保存する。

コード例:国債データの取得と評価

import barbara

# デフォルトのデータベース「ring」に接続
db = barbara.open()

# いくつかの国債を入手(Base64 エンコードされたパスを使用)
my_gilt = db["/Instruments/UKGILT201510yZXhhbXBsZQ=="]

# ボンド(国債)の現在価値を計算する(銀行的モデラーに従って)
current_value: float = my_gilt.value()

リング(ネームスペース)とオーバーレイ機能

  • デフォルトリング: 銀行全体の単一のグローバルなオブジェクトデータベースとして機能。
  • オーバーレイ: 複数のリングをリスト化して「スタック」のように重ね合わせられる。
    • 読み取り: 最初のリングから検索し、存在しない場合は次々に試す。
    • 書き込み: デフォルトは第一のリング、あるいは特定のキーが存在する上位リング(構成設定による)へ行う。

コード例:複数のリングへの接続と検索

# 複数のリングに接続:キーは提供されたリング名の順序で「重ね合わされる」
db = barbara.open("middleoffice;ficc;default")

# /Etc/Something を'Etc'リングから取得するが、そこにある場合は
# 'ficc'を試し、それでもなければデフォルトリングを試す
some_obj = db["/Etc/Something"]

データパスの例(バーバラ内)

パス説明
/Instruments
金融インスツルメント(債券、株式など)用のディレクトリ
/Deals
取引(発生した DEALS)用のディレクトリ
/FX
為替部門の一般的なエリア
/Equities/XLON/VODA/
ボダフォン株に関連する項目用のディレクトリ
/MIFID2/TR/20180103/01
一部のビジネスプロセスからの中継オブジェクト

制限と注意点

  • サイズ制限: ソフトな制限は約 16MB(ZIP 化されたピクルス)。大規模データセットの場合は SQL や kdb+ などの代替手段を検討する必要がある。
  • 整合性:
    barbara.open()
    は最も近い稼働インスタンスに接続し、強い整合性を保つ。他インスタンスからの読み書きは比較的すぐに反映されるが即座ではない。

2. ダガー:金融インスツルメントの有向非巡回グラフ(DAG)

投資銀行の重要な業務「資産価格付け」(評価額推定)を可能にするのが、金融インスツルメント間の依存関係を管理する**「ダガー」**です。

基本原理

  • 目的: 債券やデリバティブなどの価値を計算し、基礎インスツルメントの価格変動に応じて自動的に再評価を行う。
  • 構造: インスツルメント間の依存関係は**有向非巡回グラフ(DAG)**として形成される。
    • 例:クレジット・デフォルト・スワップ(CDS)は、元となる債券(Underlier)の価値に依存する。

クラス例:信用デフォルト・スワップ

class CreditDefaultSwap(Instrument):
    """信用デフォルト・スワップは債券が破綻した際に
    一定額の金銭を支払う"""

    def __init__(self, bond: Bond):
        super().__init__(underliers=[bond])
        self.bond = bond

    def value(self) -> float:
        # ある資産価格モデルに従って、(キャッシュされた)
        # 評価額を返す
        return ...

自動再評価の仕組み

  • トリガー: 基礎インスツルメント(例:債券)の評価が変更されると、ダガーは関連するすべての派生商品(CDS など数百種類)を自動的に再計算する。
  • 実装効果: 格付会社の格下げや企業のネガティブニュースにより債券価格が変わった場合、その影響が一連のモデルに即座に伝播します。

ポジションとブック(集合)

個々の評価値を集約する仕組みが以下のクラスで定義されます。

class Position:
    """ポジションとは、あるインスツルメントと、その数量のこと"""
    def __init__(self, inst: Instrument, quantity: float):
        self.inst = inst
        self.quantity = quantity

    def value(self) -> float:
        # 評価額を返す(キャッシュされた)。これは基本的には
        # self.inst.value() * self.quantity と同じ
        return ...

class Book:
    """ブックとは、ポジションの集合のこと"""
    def __init__(self, contents: Set[Valuable]):
        self.contents = contents

    def value(self) -> float:
        # またもや評価額を返す(キャッシュされた)。これは大まかに:
        # sum(p.value() for p in self.contents) と同じ
        return ...
  • ネスト構造: 銀行全体の価値を求めるには、最上位のブックを呼び出せば良い。
    bank = db["/Books/BigBankPlc"]
    print(bank.value()) # 銀行全体の評価額
    
  • Excel との類似点: Excel のセル依存関係と同様に、DAG 構造によりバージョン管理とテストが可能なプログラム言語での数値計算を可能にする。

リスク指標との親和性

  • 暴露度分析:ダガーを利用して、特定企業(例:倒産噂のある会社)に関連する全てのポジション(オプション、先物など)を「ネットアウト」して把握する。
  • これにより、サブプライム・ローンデフォルトなどのリスクを迅速に可視化できる。

3. ウォールポール:銀行全体向けのジョブランナー

ミネルバの特徴的な点は、ソースコード自体もバーバラというキーバリューストア内に格納されており、ディスク上のファイルシステムは存在しないことです。この環境を稼働させるためのジョブマネージャーが**「ウォールポール」**です。

機能と特徴

  • 位置付け: メガサイズ・Jenkins と systemd のような役割を持つ、単一の巨大な銀行全体向けインスタンス。
  • 管理対象: ソースコードのビルド、定期的なデータ更新ジョブ、メール送信など。
  • 堅牢性:
    • クラッシュ時の自動再始動およびアラート出力。
    • ジョブ間の依存関係理解(前段ジョブ失敗時は後続ジョブ起動を防止)。
    • ログの保存。

デプロイの利点

  • ハードル低下: 誰でも
    ini
    ファイル(設定ファイル)に時間、機能場所、デプロイ方法を記述するだけでジョブを追加可能。
  • 意思決定プロセス: 大規模銀行において交渉が長期化する中で、インフラ整備を迅速化するための重要な手段となる。
  • クラウドとの対比: クラウドネイティブ(K8s, Terraform など)は習熟曲線が急だが、ini ファイルなら誰でも扱えるという「低摩擦」な設計哲学を持つ。

4. MnTable:至る所に存在するテーブルライブラリ

Python や JavaScript に一般的なのはハッシュテーブル(辞書型データ)ですが、ミネルバではテーブル構造が好まれます。MnTableはこれを実現するための独自ライブラリです。

なぜテーブルなのか?

  • メモリ効率: ハッシュテーブルはインメモリのみであり大規模なデータセットで疎になります。MnTable はディスクとの転送に最適化されており、密集型のメモリ管理を行います。
  • アクセスパターン: 単一プライマリキーだけでなく、効率的な B-ツリーインデックスによる多様なアクセスに対応。
  • バッチ処理: 遅延評価(lazy evaluation)をサポートし、大規模データに対するパフォーマンスを最適化。

: オープンソースのパッケージ

pandas
はメモリ効率や API の複雑さなどの理由から、ミネルバ環境では MnTable が優先されます。

コード例:MnTable の使い方

# 提供された型の三つの列を持つ新しいテーブルを作成
t1 = mntable.Table([('counterparty', str),
                    ('instrument', str),
                    ('quantity', float)])

# テーブルにいくつかのデータを追加(テーブルはデフォルトで不変)
t1.extend(
    [
        ['Cleon Partners', 'xlon:voda', 1200.0],
        ['Cleon Partners', 'xlon:spd', 1200.0],
        ['Blackpebble', 'xlon:voda', 1200.0],
    ],
    in_place=True)

# 新しいテーブルを返します(元のテーブルを変更せず)
# vodafone のみを含むもの。これは遅延評価であり、
# 実際に表示するまで評価されません
t1.restrict(instrument='xlon:voda')
  • 実装: 一部の関数は C++ で書かれた高度なブロックを使用し、他の関数は SQLite3 上で構築されています。
  • 用途: 金融モデリングで広く使用される「中規模データ」(ギガバイト単位)の処理に適しています。

5. ミネルバシステムの特徴と課題

データファーストのアプローチ

ミネルバは**「コードファースト」ではなく「データファースト」**の設計思想を持っています。

  • オブジェクト指向(OOP)との違い: OOP ではクラス(行動)を中心に設計し、データを後から追加する傾向があります。一方、ミネルバはテーブル(データ)を先に定義し、コードがそれを操作します。
  • インピーダンスミスマッチ: この構造は従来のオブジェクト指向エンジニアには不自然に感じられることがありますが、データの整合性を保つ上で有効です。

統合された巨大さ

  • 一つの巨大なエコシステム: コードベース、データベース、ジョバンナーが単一の基盤(バーバラ)の上に統合されています。
    • ランタイムと環境の齟齬がないため、開発から本番環境への移行を即座に行えます(1 時間以内でのスクリプト動作)。
  • Excel の制約からの脱却: Excel のスプレッドシートワークフローに代わりつつ、その直感的なメリットを残すような「中庸」のソリューションとして機能しています。

痛みの度合いと文化的隔絶

  • 学習曲線: ミネルバ特有の IDE やライブラリを習熟するには長い時間を要します。外部環境(標準 Python)でのスキル(pip, virtualenv など)が通用しなくなります。
  • NIH 症候群(今あるものに固執する態度): 外部の革新なアイデアを取り入れるよりも、内部で完璧化した独自の体系を維持する傾向があります。
  • 一方向切符: 「外部からの入力はあるが、外部への出力は禁止」という方針により、GitHub プロフィールなどの開示も限定的です。

6. 異色な仕組みと学習の重要性

スキップされる要素(想像する余地あり)

ミネルバには以下のようなさらに奇妙な要素が含まれます:

  • プロプライエタリな時系列データ構造
  • コード変更承認用の「vouch」システム(権限を持つ者による手動確認でデプロイを通過)
  • ダガー内部での「タイムトラベル」(履歴データの操作機能)
  • Git に依存しないセミカスタマイズのバージョン管理
  • Prolog ベースの許可システム
  • 特定の OS/アプリケーション(Windows 7, Outlook 2010 など)との共存

「既存システムから学ぶ」ことの重要性

  • 未知の技術への偏重: 新しいテクノロジーに飛びつく前に、すでに実用されている異国のシステムを深く理解することが重要です。
  • vouch システムの実像: コード変更をデータベースとして保存するため、「デプロイステップ」という概念自体が消失します。重大な変更は責任者のサイン(vouch)または評判だけで承認されます。これは外部には信じがたい話ですが、数千人が利用している巨大システムです。

エクセルと Python のバランス

  • 多くのテック業界人が Excel を軽視しますが、金融現場では Excel が意思決定の根幹を成すことがあります。
  • ミネルバのようなシステムは、Excel ユーザーのビジネスロジックを理解しつつ、それを安全なコード環境(Python)に移植するための架け橋として機能します。

まとめ

巨大投資銀行における Python の世界は、一般的な「Gentle Python」とは異なる過酷かつ複雑な生態系です。

  • バーバラによるグローバルデータベース
  • ダガーによるグラフベースの自動計算
  • ウォールポールによるコード管理とジョブ実行
  • MnTableによるテーブル中心のデータ処理

この「ミネルバ」システムは、データの整合性と計算効率を最優先し、大規模な金融取引を支えるために構築された独自の金字塔です。外部からは理解しにくく、時には排他的に見えるかもしれませんが、そこにはExcel を凌駕する信頼性と、独自の論理が息づいています。

同じ日のほかのニュース

一覧に戻る →

2026/06/26 6:44

「パスポート查验」の時代におけるインターネットはあなたのプライバシーを破壊する

## Japanese Translation: **:16歳未満に対するオーストラリアの新しいSNS禁止措置は、2025年12月に施行されるものの、アクセスの大幅な抑制には至っておらず、調査では制限があるにもかかわらず退会せずにプラットフォームを利用し続ける子供が約70%いることが示されています。この法律は、主に学校の授業時間外におけるインターネット利用において機器の使用自体が禁止されている場合に適用され、年齢確認が不十分であることを踏まえ、退会を強制します。コンプライアンスの確保のために生体情報や政府発行の身分証の収集を義務付けていますが、曖昧なガイダンスにより、機密情報の過剰収集が生じ、結果としてオーストラリア人の個人データを約7万人に及ぶ大規模な漏洩を引き起こしました。連邦法に従うために当局は、シンガポール拠点の k-ID を含む第三者による検証ツールを利用しており、オーストラリアを同様の禁止措置を採用する英国、EU およびその他の国々に見られる世界的な潮流に合わせることになりました。高い回避率への対応として、公式は VPN の使用に対する「年齢制限ゲート」を導入を検討しています。しかし、これら厳格な対策には重大な欠点があり、広範な生体情報による検査を通じてオーストラリアが中国やイランと類似した権威主義的な監視モデルを採用するリスクがあります。結論として、未成年者を中毒性の高いフィードや成人向けコンテンツから守ろうとする一方、現在のアプローチはオンライン上の匿名性を脅かし、将来的なプライバシー侵害の可能性を増大させており、米国における各州レベルでの取り組みの違いに反映されるこの懸念も、連邦レベルの法案である「キッズ・オンライン・セーフティ法(KOSA)」を含む案にも見られます。

2026/06/26 0:48

エルコラネオの巻物が初めて全文解読された

## 日本語翻訳: 2026年6月25日、研究者は物理的に切断することなくシールされたエルコーラネオムの巻物PHerc. 1667のギリシャ語原文を仮想的に解開し、完全に読み解くという画期的成果を達成した。これらの炭化した巻物は過去2000年間、ヴェスビオ火山(西暦79年)の噴火から生き残ったのは、外層を開けるには極めて脆くなってしまったからである。19世紀、1969年および1980年代に行った以前の試みでは外層が損傷し、元の高さが19〜24cmあった中で、保存状態を保っていたのは高さわずか8cmの内核のみであった。 ヨーロッパシンクロトロン放射施設(ESRF)で実施された高分解能位相コントラストX線マイクロCT走査により、チームは巻物の幾何学的形状を再構成し、表面をデジタル的に平坦化し、機械学習を用いて微弱なインクの痕跡を回復させた。この非侵襲的アプローチにより、1.4メートルの完全な記述面上に存在する約22コラム分のテキストが成功裏に解読された。ブレント・シールス教授によるエデュクレボラブの研究成果や、ヴェスビウスチャレンジチーム(元参加者を含む)に基づくこの研究では、PHerc. 1667には紀元前2世紀のもう一人のアリストクロン(クリッソッポスの甥)に帰属する道徳哲学に関する論説が含まれていることが明らかとなった。また、巻物1(PHerc. パリ4)やPHerc. 139など、他の巻物も読めることが確認され、タイトルへの帰属のために改良されたものもある(例えばフィルデモスの『神について』第8巻)。 この拡張可能な手法は、脆弱な状態を保ちつつシールされたパピルスが完全に解読可能であることを証明し、古代のストア派およびエピックュレオス主義者の哲学、詩、プロザを含む数百の残存巻物へのアクセスを可能にした。scrollprize.org/data において、すべてのデータ、テキスト転写、コード(GitHub)、再構成された表面をオープンなクリエイティブ・コモンズライセンスの下で公開することで、このプロジェクトは代替不可能なこれらの遺物が新たな研究のために利用可能であり続ける一方で、さらなる損傷を引き起こさずアクセスできることを確保している。

2026/06/26 5:50

Un-0:結合振動子による画像生成

## Japanese Translation: Unconventional AI による Un-0 プロジェクトは、エネルギーを大量に消費する GPU 深層学習から、結合振子を用いた物理学に基づく計算への画期的な転換点を示しています。2026 年 6 月 25 日にリリースされ、このアプローチは従来のニューラルネットワークに依存せず、常微分方程式(ODE)を解くことで、およそ 1,000 倍のエネルギー効率を実現します。アーキテクチャは学習可能な振子パラメータ——具体的には Kuramoto フレームワーク内の結合強度と固有周波数——を活用し、明示的なオイラー積分スキームを使用してエンドツーエンドで訓練を行います。 パフォーマンスに関しては、ImageNet 64×64 モデル(Un-0.n16384)は FID スコア 6.74 を達成しました。この品質は DCGAN や BigGAN などの初期の従来型ジェネレーターと重なるものの、現在では EDM のような最新の最先端モデルには及びません。アブレーションの結果は、訓練されたダイナミクスが多様性と汎化能力を維持し、低パラメータの従来型デコーダーが画像の忠実度を担当することを確認しています。CIFAR-10 および ImageNet での訓練において、最大のモデル(学習可能なパラメータ 322.44M、6.21M パラメータのデコーダーを含む)には 640 B200 GPU アワーが使用されました。オープンソースツールのうち、重みおよびスクリプトも利用可能で、研究の促進に役立ちます。今後の展望として、チームは高度なアルゴリズムによって残りの品質ギャップを埋め、CMOS チップなどの物理ハードウェアでの展開に向けて準備を進める計画です。これは AI のエネルギー消費を大幅に削減することによって持続可能な未来を約束します。 ## Text to translate: The Un-0 project by Unconventional AI marks a pivotal shift from energy-intensive GPU deep learning to physics-based computation using coupled oscillators. On release on June 25, 2026, this approach achieves roughly 1,000 times better energy efficiency by solving Ordinary Differential Equations (ODEs) rather than relying on traditional neural networks. The architecture leverages learnable oscillator parameters—specifically coupling strengths and natural frequencies within a Kuramoto framework—and trains end-to-end using an explicit Euler integration scheme. Regarding performance, the ImageNet 64×64 model (Un-0.n16384) achieves an FID score of 6.74. While this quality overlaps with early conventional generators like DCGAN or BigGAN, it currently trails modern state-of-the-art models like EDM. Ablation results confirm that the trained dynamics preserve diversity and generalization, while a low-parameter conventional decoder handles image fidelity. Training on CIFAR-10 and ImageNet used 640 B200 GPU-hours for the largest model, which includes 322.44M trainable parameters and a 6.21M parameter decoder. Open-source tools, including weights and scripts, are available to accelerate research. Looking ahead, the team plans to close the remaining quality gap through advanced algorithms and prepare for deployment on physical hardware like CMOS chips, promising a sustainable future for AI by drastically reducing energy consumption.