UniFFI for React Nativeは、Rustをモバイル共通ロジックへ押し出す橋渡しだ

Mozilla Hacks記事紹介シリーズのアイキャッチ画像

執筆者:

カテゴリ:

Mozilla Hacksの「Introducing Uniffi for React Native: Rust-Powered Turbo Modules」は、MozillaとFilamentが公開した「Uniffi for React Native」を紹介する記事です。公開日は2024年12月4日。React NativeアプリからRustで書いたコアロジックを使いやすくするための、かなり実務寄りの取り組みです。

React NativeはiOSとAndroidを同じ開発体験で扱える一方、重い処理をJavaScript側だけで担うと詰まりやすくなります。これまでは、性能が必要な部分をiOS向け、Android向けに別々に書いたり、C++を使ったりする選択肢がありました。この記事が紹介しているUniFFI for React Nativeは、そこにRustという別の選択肢を持ち込むものです。

何ができるのか

Uniffi for React Nativeは、RustコードをReact NativeのTurbo Modulesとして呼び出すためのバインディング生成ツールです。記事では、TypeScriptからRustを呼び出すためのTypeScriptとJSI C++、さらに実行中のReact Nativeライブラリへバインディングを組み込むTurbo Moduleを生成できると説明されています。

狙いは、アプリの中核ロジックをRustで1つだけ書き、それをiOSとAndroidの両方から使うことです。Mozillaはすでに、Firefox SyncのコアをRustで共通化するためにUniFFIを使ってきた背景があり、その延長としてReact Nativeにも適用範囲を広げています。

公式ガイドとリポジトリから見える位置づけ

UniFFI公式ガイドでは、UniFFIはRustライブラリ向けの外部言語バインディングを自動生成するツールとして説明されています。Kotlin、Swift、Pythonなどを対象にし、Rust側のAPIをIDLやproc macroで記述して、手書きのFFIコードを減らす設計です。

uniffi-bindgen-react-nativeのGitHubリポジトリでは、React NativeだけでなくWebページからもRustコードを使えるTypeScriptバインディング生成ツールとして整理されています。Rustを一度注釈づけすれば、Android、iOS、Webの複数ターゲットへ展開できるという説明は、単なるReact Native補助ツールより広い方向性を感じさせます。

実例とエコシステム

記事内では、UnomedがReact Native向けMatrix SDKを作るためにUniffi for React Nativeを使った例にも触れられています。これは、Rustで書かれたSDKやライブラリ資産を、モバイルアプリのUI層へどう接続するかという現実的なユースケースです。

また、crates.ioにあるRustクレートをReact Nativeアプリで活用できる可能性にも言及されています。計算量の多い処理や、既にRustで成熟している処理を、TypeScriptで再実装せずに持ち込めるのは大きな利点です。

気づき

この話で印象的なのは、Rustが「ネイティブ部分を速くするための言語」というだけでなく、「複数プラットフォームで同じロジックを保つための中間層」になっている点です。React NativeはUI開発の共通化に強い一方、ビジネスロジックや重い処理まで全部JavaScriptに寄せると限界が出ます。UniFFI for React Nativeは、その境目にRustを置く発想です。

つまり、UIはReact Nativeで素早く作り、アプリの核になる処理はRustで堅く共通化する。これは「全部を1つの技術で統一する」よりも、責務ごとに得意な技術を組み合わせる設計に見えます。長く運用するモバイルアプリほど、この分け方は効いてきそうです。

読んでおきたい人

  • React Nativeで重い処理や共通SDKを扱っている人
  • iOSとAndroidでビジネスロジックの二重実装を減らしたい人
  • Rustをモバイルアプリ開発に持ち込みたい人
  • FFIやTurbo Modulesまわりの実用例を知りたい人

参照記事

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です