「速さ」と「安全性」の追求。ユニークビジョンがRustを標準採用する理由とその舞台裏

2026.02.13

ユニークビジョンがプログラミング言語「Rust」を本格的に採用し始めてから、数年が経過しました。今では当社のバックエンド開発において欠かせない存在となっているRustですが、その導入のきっかけは、ある「切実な課題」でした。今回は当社がRustを導入するに至った背景や当社の開発スタンスについて、CTOの青柳よりお話しします。

きっかけは、Ruby on Railsで限界を感じた「大量の帳票作成」

Belugaキャンペーンを提供する際、以前はSNSキャンペーンのデータを集計する帳票作成プログラムをRuby on Railsで実装していました。しかし扱うデータ量が膨大になり、処理が追いつかず動かなくなってしまう事態に直面しました。4GBのメモリを積んだサーバーがメモリを食いつぶし、サーバーごとダウンしてしまったのです。

そこで、当時プライベートで学んでいたRustを試験的に投入してみたところ、わずか6分ほどで14万件ものデータ処理とダウンロードが完了しました。しかもメモリ使用量はわずか10MB程度に収まったのです。この圧倒的なパフォーマンスの差を目の当たりにし「RailsとRustを適材適所で組み合わせれば極めて効率的なアプリケーションを構築できる」と確信しました。その後、大量データ処理や速度が必要なプログラムに利用を広げています。

なぜ、私たちはRustを選ぶのか?——3つの選定理由

上記のきっかけ以外にも、私たちがRustを高く評価している理由が3つあります。

1つ目は、Rustの「堅牢さ」です。
– 多人数開発を支える「強い型システム」: 複数のエンジニアが異なるコンポーネントを開発する際、タイプミスやデータの扱い方に対する認識の違いは避けられません。Rustのコンパイラはこうしたミスを事前に厳格にチェックするため、開発の初期段階で間違いに気づけます。
– 非同期処理の信頼性: 大量データを捌くための非同期プログラミングにおいて、最も厄介なのがデータ競合です。Rustは所有権システムによりコンパイラがメモリアクセスの安全性を保証してくれます。コンパイラが「どのデータがどこで使われているか」を厳格にチェックして実行時のメモリエラーを防ぐため、複雑な非同期ロジックも安心して実装できます。

2つ目は、ビジネスの安定性とコストに直結する「パフォーマンスの良さ」です。
– 速い実行速度による高品質なサービス提供:RustではC/C++に匹敵する速度で動作するプログラムを書けます。当社はSNSキャンペーンで大量のデータ処理や配信処理などを行うため、実行速度の速いプログラムが書けるのは大きなメリットです。
– インフラコストを押さえて高いパフォーマンスを発揮:RustはCPUもメモリも効率よく使えます。そのため、高い処理能力を維持しつつ、欲しいパフォーマンスを出すために必要なインフラコストを最小限に抑えられます。これは、ビジネスの観点からも大きなメリットです。

3つ目は、開発を支える「エコシステムが充実している」点です。
– 一貫した開発体験: 公式が提供するcargorustfmtclippy(Linter)といったツールの完成度が非常に高いのも特徴の一つです。これにより、プロジェクトごとにコーディング規約を細かく策定したり、開発環境の構築・維持にリソースを割いたりするコストを最小限に抑え、一貫性のある開発環境を迅速に整えたりできます。

エンジニアの間では「Rustでコンパイルが通ればバグがほとんどない」という言葉をよく聞きます。他の言語ではなかなか得られないこの安心感こそが、Rustを採用する最大のメリットかもしれません。

現場での実践。Rustが支える大規模SNSキャンペーンの裏側

実際の開発の現場では、高いパフォーマンスと信頼性が求められる領域でRustを活用しています。

– SNSクローラーとWebhook処理: SNSキャンペーンシステムでは、数百万規模の投稿をリアルタイムで収集・処理する必要があります。投稿の収集はREST APIだけではなくWebhookで収集するものもあります。SNSなど外部プラットフォームで発生したイベントに呼応して実行したい処理があり、イベントの発生がWebhookで通知される場合を想定してみます。受信側のサーバーは速やかにイベントを処理しなければなりませんが、Rustのようなパフォーマンスの良い言語で実装すれば即時のレスポンスができます。また能動的にデータを取得するクローラーにおいては、レートリミットを遵守しながら、最大限の効率で取得し続けるための精緻な並行実行制御が必要です。こうした「速度」と「複雑な状態管理」の高度なハンドリングをRustで実現しています。

– 即時性が求められる配信プログラム: キャンペーン参加者への即時返信など、一瞬の遅延も許されない配信処理をRustの速度が支えています。キャンペーン参加者にとって、自分のアクションに対する「即時返信」はユーザー体験の核心です。特に人気キャンペーンで参加が集中した際、大量の返信タスクを即座にさばき切る必要があります。収集フェーズと同様、配信時にも各プラットフォームの制限を考慮しつつ、最大限の効率でメッセージを送り出す必要があります。大量・即時というハードな要求に対し、Rustの実行速度が不可欠な要素となっています。

– 高負荷WebAPI: キャンペーン公開直後などの急激なアクセス集中(スパイク)が発生するWebAPIでも、Rustが活躍します。リクエストごとのオーバーヘッドが小さく、ガベージコレクション(GC)による一時的なパフォーマンス低下も発生しないため、過酷な状況下でも安定して稼働がします。一方で、私たちは「銀の弾丸」は存在しないとも考えています。機械学習の結果を利用する際にはPython、開発のスピード感を優先する管理画面のAPIサーバーにはTypeScriptといったように、要件に合わせた技術選定を徹底しています。

課題と向き合い、コミュニティと共に歩む

もちろん、Rustの導入には学習コストが高い、工夫しないとコンパイル時間が長くなってしまう、公式ライブラリが少ないなどの課題が伴います。
そのため、当社ではさまざまな取り組みを行っております。学習コストについて、Rustに詳しいエンジニアによるコードレビューやペアプログラミングをいつでも受けられるようにし、組織的に学習をサポートしています。また、Rustをテーマにした勉強会を継続的に開催することで、個人に閉じない形で組織全体のレベルアップを図っています。コンパイル時間についてはCI/CDでキャッシュを最適化をしています。また、足りないライブラリは自作してOSSとして公開しています。特に私はSNS関連のAPIのラッパーについて書くことが多いです。そのほか、Rust.Tokyoへのプラチナスポンサーとしての活動やRustをテーマにした社外勉強会の開催を通じて、コミュニティ発展への寄与を目指しています。

技術への飽くなき追求が、プロダクトの信頼を生む

ユニークビジョンにとってRustは、単なるプログラミング言語の一つではありません。「堅牢な設計」でバグを未然に防ぎ「高いパフォーマンス」でユーザー体験を最大化し「優れたエコシステム」で開発の質を維持し続ける。これらすべてを組み合わせて、初めてお客様に「絶対に落ちない、止まらないサービス」を届けられると考えています。

難解なコンパイラエラーと向き合う時間は、プロダクトの信頼性を積み上げる時間でもあります。私たちはこれからも、新しい技術への挑戦を楽しみながら、より強固なシステムを構築していきます。

SHARE

HOME MEMBER INTERVIEW

「速さ」と「安全性」の追求。ユニークビジョンがRustを標準採用する理由とその舞台裏