PYTHON

エレガント。柔軟。強力。

あなたのバックエンドの
トーテム・アニマルは
何になりますか?

安全でスケーラブル、パフォーマンスのために設計された堅牢なバックエンドシステムを構築します。

RUST

安全。高速。並行。

01 2つの言語。5つではありません。

意図的に選んだ単一のスタック。

多言語対応を謳うエージェンシーは、プレゼン資料では格好良く聞こえます。しかし実際の開発現場では、3つのビルド システム、4種類のnullの扱い、そして手入れが中途半端なサービスが山積みになることを意味します。私たちは 実際のワークロードの95%をカバーする2つの言語を選び、その両方で極めて高いレベルに達しました。

ホットパス・システム・安全性

Rust

9.6 内部適合度スコア

ガベージコレクタなしでメモリセーフ。コンパイル時にデータ競合なし。 これまでにないほど厳しいコードレビュー。そして一度承認されれば、 サービスが日曜日の朝にあなたを起こすことはもうありません。

それを手に入れようとしたとき

  • 決済インフラおよび金銭や個人識別情報(PII)に関わるあらゆるもの
  • 99.999%のSLAを保証する高可用性APIゲートウェイ
  • 低遅延のマッチングエンジン、取引、リアルタイム
  • ブラウザへ配信されるWebAssemblyモジュール
  • ミリ秒単位で起動する必要があるCLIツールおよびデーモン

目を背けられないトレードオフ

  • 新入社員の立ち上げ:実務開始まで約2~4週間
  • 大規模なワークスペースでのコンパイル時間(sccacheで対応済み)
  • Javaよりも若いエコシステム — 重要な部分では成熟している
グルー · データ · ML · ベロシティ

Python

9.3 内部適合度スコア

ホワイトボードから稼働システムへの最短ルート。データ、機械学習、自動化において 地球上で最も充実したエコシステム。モダンなPython — 3.12、uv、ruff、pydantic、FastAPI — は、必要なことのほとんどに対応できる、正確で型付き、かつ十分に高速な言語です。

それを手に入れようとする時

  • 社内ツール、ダッシュボード、管理パネル
  • ETL、データパイプライン、Airflow / Dagster / Prefect
  • 機械学習 — トレーニング、サービング、評価
  • 自動化およびベンダーAPIとの連携
  • 来年ではなく、四半期中にリリースされるMVP

見過ごせないトレードオフ

  • シングルコアのスループットはRustより20~50倍遅い
  • リクエストあたりのメモリ使用量が増加 — 一部のワークロードでは致命的
  • 厳格なmypy / pydanticがないと動的型付けが足を引っ張る
Rust:間違いが代償を伴う言語。 Pythonは、リリースが遅れると代償が大きい。 一つのチーム。教条はゼロ。
02 移行元 → 移行先

移行すると何が変わるか。

開始言語を選択してください。Rust または Python への移行による影響を確認できます。数値は直近 40 件の移行プロジェクトの中央値であり、マーケティング上の誇張ではありません。

Rust vs Python vs C / C++

選択した移行元スタックと比較した実際のエンジニアリング成果。

Rust Python C / C++ baseline

スタックレベルのシグナル

実行時の数値を超えて重要な、定性的なエンジニアリング要素。

灰色の破線は選択した移行元スタックを示します。Rust と Python はそのベースラインと比較して測定されており、互いに比較しているわけではありません。

この数値の測定方法

2023年から2026年の間に完了した40件の移行プロジェクトの中央値。スループットはアプリケーション層で測定(現実的な負荷下でのエンドツーエンド p50。マイクロベンチマークではありません)。メモリは定常状態でのRSS。コストはAWS/GCP上の月次オンデマンド料金(その他の条件は同一)。個々の結果は異なります。計画通りにいかなかったプロジェクトについても、ご要望に応じて公開しています。

03 アスタリスクなしの数値

実負荷における1秒あたりのリクエスト数。

同一のワークロード — JSON検証 → Postgresクエリ → レンダリング — を1台のAMD Ryzen 7マシンで計測したものです。マイクロベンチマークではありません。ソース & 測定方法 ↓

  1. 1 Rust · Axum
    21,030 req/s
  2. 2 C# .NET · ASP.NET Core
    14,707 req/s
  3. 3 Node.js · Fastify
    9,340 req/s
  4. 4 C++ · Drogon
    7,200 req/s
  5. 5 Go · Gin
    3,546 req/s
  6. 6 Python · FastAPI (Uvicorn)
    1,185 req/s
  7. 7 PHP · Laravel
    299 req/s

正しく解釈してください: Python はこのグラフの下位付近に位置しますが、それは問題ありません。私たちはホットパスで FastAPI を使用しません。1,185 req/s がすでにワークロードの必要量の ~10× を超えており、エンジニアの時間が CPU サイクルよりも価値がある場面で使用しています。測定方法: AMD Ryzen 7、Linux、Docker、シングルインスタンス、各言語につき1つの主要フレームワーク。数値は複数回の実行による平均値です。

05 不具合のあるコードがもたらす真のコスト

ダウンタイムが実際に与えるコスト。

「99.999%」は単なるマーケティング用語ではありません。以下は、業界別の1時間の予期せぬダウンタイムによるコストです。 出典も明記しています。私たちは、これらの数値が現実となる環境でRustを開発しています。

このセクションを開いてから発生したコスト
金融/医療 $0 ~83,000ドル/分 · 500万ドル/時
自動車 $0 約38,000ドル/分 · 230万ドル/時間
大企業 0 23,750ドル/分 · 140万ドル/時間
中堅企業 0 約5,000ドル/分 · 30万ドル/時間
金融・医療 1時間あたり500万ドル以上

最もリスクの高い業界。取引プラットフォーム、決済システム、および臨床 システムは、深刻な障害発生時に、規制当局への対応費用や訴訟費用を 含める前に、1時間あたり500万ドルを超える損失が発生する可能性があります。

出典:ガートナー「2024年フォーチュン500企業調査」、ITIC「2024年ダウンタイムの時間当たりコスト」。
自動車製造 1時間あたり230万ドル

生産ラインが停止すると、1秒あたり約640ドルの損失が発生する。2024年7月に発生したCrowdStrikeのシステム障害により、 デルタ航空だけで5日間で3億8000万ドルの損失を被った。

出典:Erwood Group 2025年業界別内訳;Antithesis CrowdStrike事後分析。
大企業(平均) 140万ドル /時間

BigPandaの2024年大企業向け数値:1分あたり23,750ドル。ITICの 報告によると、大企業の41%が1時間の停止につき100万ドルから500万ドルの損失を被っている。 。

出典:BigPanda 2024年調査;ITIC 第11回年次ダウンタイム時間当たりコスト調査。
グローバル2000(オックスフォード・エコノミクス) 年間4,000億ドル

オックスフォード・エコノミクスの2024年調査によると、世界の大手企業2,000社における予期せぬダウンタイムの隠れた総コストは、 売上高、生産性、復旧コストを合計すると、1社あたり平均2億ドルの影響がある。

出典:Oxford Economics 2024年、「ダウンタイムの隠れたコスト」。
中堅・大企業(1時間あたり) 1時間あたり30万ドル以上

ITICの2024年調査:現在、中堅・大企業の90%以上が、 予期せぬダウンタイム1時間あたりのコストをこの基準額以上に設定している — 法的、 民事、または規制上の罰金は含まない。

出典:ITIC 2024年「ダウンタイムの時間当たりコストに関するレポート」。
中小企業(SMB) 1時間あたり2万5千~15万ドル

2025年のITIC/Calyptix共同調査によると、多くの中小企業(SMB)が1時間あたりこの程度の損失を被っていることが判明。 シーメンスの報告では、停電被害を受けた中小企業(SME)の場合、1時間あたり最大15万ドルの損失が生じ得る。 平均的な停電事象の継続時間は87分である

出典:ITIC + Calyptix 2025;Siemens「ダウンタイムの真のコスト 2024」。
06 選りすぐりの実績

3つのプロジェクト。3つの異なる課題。

NDAで定められた箇所は匿名化し、成果が示す箇所は具体的に記載。これらは、 技術系バイヤーに真っ先に紹介したい案件です。

  1. 事例01 Python データベース 暗号資産 GDPR

    フィンテック向けデータ・ボールト:4分の1のサイズ、5.5倍の高速化、グローバルなコンプライアンス対応。

    クライアントは、7年間にわたって肥大化したレガシーカラム、無効な インデックス、インライン暗号化されたBLOBで膨れ上がった1.8 TBのPostgresクラスタを運用していました。暗号化処理は、 3つの別々の監査で非推奨と指摘されたライブラリ上で実行されていました。規制上のリスクは 現実のものであり、監査人が監視を強めていました。

    当社の対応

    • 完全なスキーマ+使用状況の監査、未使用のカラムとインデックスの削除、適切なパーティショニングの導入。
    • 暗号化パイプラインを、レガシーライブラリから、鍵のローテーション機能を備えた、監査可能な最新のAEADスタックへ移行する。
    • BLOBのインライン暗号化を、参照型エンベロープ暗号化と専用KMSへの変換。
    • データ保持および情報主体のアクセスフローを、GDPR、CCPA、およびAPPIに準拠させる。
    結果

    同じデータ量で、ストレージ費用は4分の1、スループットは5.5倍となり、 次に監査に来た規制当局に対しても、問題のない状態を維持できた。

  2. 事例 02 Rust C++ → Rust Rust ストレージ

    C++サービスをRustで書き換え:9週間で100件以上のCVEクラスのバグを解消。

    C++で実装されたユーザー向けファイル処理サービスは、4~5日ごとにクラッシュし、 その都度その場でパッチを当てていた。 当社の監査により100件以上の実在するバグが判明:サービス拒否 の経路、バッファオーバーフロー、無制限のリクエスト処理。ピーク時の503エラーは毎週の 恒例行事となっていた。ストレージ側では、ユーザーによるアップロードが重複ファイルの 沼と化し、バケットを食い尽くしていた。

    私たちの対応

    • Rust(axum + tokio)での完全な書き換えを行い、厳格な入力検証とリソース使用量の制限を実施。
    • すべてのパーサーおよびワイヤ形式の境界に対して、プロパティベースのテストとcargo-fuzzを実施。
    • 書き込み時に重複排除を行うコンテンツアドレス型ストレージ層。
    • 4時間の統合ウィンドウ内でのブルーグリーン展開により、ダウンタイムなし。
    成果

    サービスは「脆弱で毎週パッチを当てていた状態」から「ページャーを確認する必要がなくなった」状態へと変化した。 重複排除によりストレージコストが削減され、エラーや503エラーに関するサポートチケットは激減し、 リライトの費用は四半期以内に回収された。

  3. ケース 03 Rust Rust eBPF / XDP CRM · 4,000ユーザー

    エンタープライズCRMの再構築:18台→5台、コストを60%以上削減。

    IAM、SOC、一元化されたロギング、チャット、 ファイル共有、VoIP、エンドツーエンド暗号化データを扱う4,000人以上のユーザー向け社内CRM。18台のサーバー、Cloudflareを 併用し、従業員数に関係なく増え続けるクラウド利用料。 ホットパスをRustで再構築し、 統合およびレポート層にはPythonを維持したまま、 eBPF/XDPフィルターをインジェストの直前に配置しました。

    実施内容

    • 認証(IAM)、リアルタイムメッセージング、VoIPシグナリング、ファイル転送のためのRustサービス。
    • 管理画面、レポート、SOCイベントの相関分析、ベンダーAPIとの統合にはPythonを使用。
    • カーネルレベルでのeBPF/XDPボットおよび不正利用フィルタリング — このワークロードにおいてCloudflareに取って代わった。
    • ゼロコピースキーマに基づいて再構築された構造化ロギングパイプライン。
    成果

    サーバーが13台減り、Cloudflareの経費項目は消滅。SOCチームはロギングパイプラインを通じてより明確な シグナルを把握できるようになり、CFOはインフラ予算に関する気まずい質問を しなくなった。

07 実際の業務の流れ

調整を行い、計画の変化を見守ります。

どのプロジェクトも、スピード、コスト、信頼性のバランスを重視しています。以下の5段階の見積もりは、 業界の中央値に基づいて調整されています(ディスカバリー:2~6週間、アーキテクチャ:1~4週間、 実装:4~20週間、強化:2~8週間、引き渡し:1~2週間 — NIX United、Agilie、SOLTECH、OTG Labの スライダーを動かすと、 計画の比重がリアルタイムで再計算されます。

01

ディスカバリー

3週間

コードを読み、運用担当者にヒアリングし、不明点をリストアップし、コンポーネントごとに言語を選定する。

  • ドメインインタビューおよびコード監査
  • リスク登録簿およびSLA目標
  • サービスごとの言語決定
02

アーキテクチャ

2週間

コードより先に契約を。OpenAPI / protobuf、データモデル、デプロイトポロジー、ランブックの骨格。

  • すべての公共契約に対するRFC
  • データモデル + 移行計画
  • Infrastructure-as-Codeのベースライン
03

実装

8週間

小さなPR、初日からCIがグリーン、マージごとにデプロイ、別のシニアによるレビュー。

  • Rust: axum · tonic · sqlx
  • Python: FastAPI · Pydantic · SQLAlchemy
  • 毎週のデモ + 変更履歴
04

セキュリティ強化

3週間

ファジング、プロパティベーステスト、実環境のトラフィックを想定した負荷テスト、脅威モデル。

  • cargo-fuzz · proptest · hypothesis
  • SLOに紐づいたk6負荷テスト
  • セキュリティレビューおよび依存関係監査
05

引き渡し

1週間

ランブック、オンコールローテーション、ADR、そして過去に一度このシステムをリリースした経験のあるチーム。

  • ランブックおよびオンコールマトリックス
  • ADRログおよびアーキテクチャ図
  • リリース後30日間のサポート
08 同じ問題、2つの言語

各言語における同じエンドポイントの表示例。

ユーザーを取得、入力を検証、Postgresに永続化、JSONを返す。言語を切り替え — どちらも実際にリリースする実コードです。

SQL_CREATE_USER ="insert into users(email,name) values(lower($1),$2) returning id,email,name"
Name = Annotated[str, StringConstraints(strip_whitespace=True, min_length=1, max_length=120)]

class UserIn(BaseModel):
    email: EmailStr
    name: Name

class UserOut(UserIn):
    id:int

@router.post("/users", response_model=UserOut, status_code=201)
async def create_user(u: UserIn) -> UserOut:
    try:
        row =await pool.fetchrow(SQL_CREATE_USER,str(u.email), u.name)
   exceptUniqueViolationErrorasexc:
        raiseHTTPException(status_code=409, detail="email already exists")fromexc
    ifrowis None:
        raiseHTTPException(status_code=500, detail="insert failed")
    returnUserOut.model_validate(dict(row))
#[derive(Deserialize, Validate)]
#[serde(deny_unknown_fields)]
pub struct UserIn{
    #[validate(email)]
    pubemail: String,
    #[validate(custom(function ="valid_name"))]
    pubname: String,
}

pub async fn create_user(
    State(pool): State<PgPool>,
    ValidatedJson(u): ValidatedJson<UserIn>,
) ->Result<(StatusCode, Json<UserOut>), ApiError> {
   letuser = sqlx::query_as!(UserOut,
        "insert into users(email,name) values(lower($1),$2) returning id,email,name",
        u.email.as_str(),
        u.name.trim(),
    )
    .fetch_one(&pool)
    .await
    .map_err(ApiError::from_db)?;

    Ok((StatusCode::CREATED, Json(user)))
}
コード行数
16 22
スループット
1,185 リクエスト/秒 21,030 リクエスト/秒
P50レイテンシ
21.0 ms 1.6 ms
アイドル時のRAM使用量
41.2 MB 8.5 MB
1営業日以内に返信いたします。冗談ではありません。

最後までお読みいただきありがとうございます。
さあ、一緒に作りましょう

現在お使いのスタックの問題点や、一から構築したいものについて教えてください。 営業トークではなく、エンジニアとしての率直な意見をお伝えします。

  • ジュニアエンジニアは採用しません。オフショアリングも行いません。
  • 範囲を限定した作業に対する固定価格オプション。
  • ご依頼前にNDAを締結します。