GoogleがAndroidの開発にRustを使った事例を解説するRust Dayを開催

2023年2月8日(水)
松下 康之 - Yasuyuki Matsushita
Googleは2022年8月に「Google Open Source Live」でRustに特化したオンラインセミナーを開催。
プレゼンテーションを行ったのはWedson Almeida Filho氏

プレゼンテーションを行ったのはWedson Almeida Filho氏

ここでも、どうしてRustをLinuxに採用するのか? という問いに対しては、メモリーセーフ関連の脆弱性を性能を犠牲にせずに抑止するためと説明している。

採用するには技術的な問題もあるが、ここでは技術的ではない問題についても解説を行っている。

デベロッパーが懐疑的であること、コードのスタイルが読みづらいなどが挙げられている

デベロッパーが懐疑的であること、コードのスタイルが読みづらいなどが挙げられている

これからはRustのUpstreamをサポートする必要があること、メンテナーと協力する必要があること、Rustを書くLinuxデベロッパーをサポートする必要があることなどを挙げて、LinuxコミュニティがRustを使ってコードを書くことを支援する必要性を説明した。

次はRustのツールチェーンに関するセッションとして、ここでもAndroidの開発チームのエンジニアが登場。パッチの適用、ライブラリーの利用、最適化などについて詳細な解説を行った。

Android開発におけるツールチェーンの解説

Android開発におけるツールチェーンの解説

最後は、既存のC++プログラムをRustで書き直した事例の解説だ。

WOFF2をC++からRustで書き直したFelipe de Albuquerque Mello Pereira氏

WOFF2をC++からRustで書き直したFelipe de Albuquerque Mello Pereira氏

Pereira氏はフォントの圧縮プログラムであるWOFF2をC++からRustに書き直したというのがこのセッションの中身だが、まずは最初にWOFF2について説明を行った。

フォント圧縮のためのプログラムWOFF2とは?

フォント圧縮のためのプログラムWOFF2とは?

WOFF2はW3Cのリファレンスにも記載されているフォントのパッケージング(圧縮/非圧縮)の仕様であり、それをGoogleが実装してAndroidで使っているということになる。

WOFF2の仕様:https://www.w3.org/TR/WOFF2/

WOFF2のC++のコードは約6,700行という規模だが、ポイントは単体テストがWOFF2に特化しした実装の部分に存在しなかったという部分だろう。

C++によるWOFF2には単体テストが存在しないコードが多数存在した

C++によるWOFF2には単体テストが存在しないコードが多数存在した

そしてRustによる実装では、単体テスト、エンドツーエンドのテストを含んで約6,200行という規模になったという。またBrotilという圧縮アルゴリズムやLog、arghという外部プログラムも使われていることが紹介された。

RustによるWOFF2実装の概要

RustによるWOFF2実装の概要

また、移植については約20日間が必要だったと説明。機械的な移植が12日間、リファクタリングとRustらしいコードに整形するために8日間というのが内訳だ。

C++からRust移植に必要だったのは20日間

C++からRust移植に必要だったのは20日間

テストについては単体テストが最大のプログラムのエンコード、デコードのソースコードに存在しなかったことが移植のための時間が掛かった原因であると説明。

テストに関しての考察。単体テストが無いコードが存在したことがポイント

テストに関しての考察。単体テストが無いコードが存在したことがポイント

移植と同時に約20個のバグも発見して修正を行ったことを説明し、特にボロウチェッカーがちゃんと仕事をしてくれたという。

移植に伴ってバグも発見し修正した

移植に伴ってバグも発見し修正した

ここでも、ちゃんと書かれた単体テストによって多くのバグが発見できること、C++からRustに変換するツールがあればもっと良い結果が出ただろうなどと説明した。ベンチマークについてもほぼC++に比類する性能が出ているとして結果には満足しているという。

移植を経験した今となってはC++よりもRustでコードを書く方が生産的と感じるようになったこと、Rustの持つコンセプトは他の言語に無いため学習コストは存在したが、それを上回る利点があることなどを紹介した。

RustのほうがC++よりも生産的になれると総括

RustのほうがC++よりも生産的になれると総括

また、コードの品質に関してもRustに慣れていないプログラマーがボロウチェッカーと格闘する状態になったとすれば、コードがデータを変に操作しようとしていることに気が付いた方が良いとコメントし、Rustのコンセプトとコンパイラーの優秀さを高く評価していることを説明した。

最後に、ClippyというLinterについても高く評価してセッションを終えた。

C++とRustには性能の違いが無い、LinterであるClippyが優秀

C++とRustには性能の違いが無い、LinterであるClippyが優秀

Androidの開発を支えるチームが少しづつとは言え、Rustを使って新規機能の実装に進んでいこうとするGoogleの意図は十分に伝わったセッションとなった。Microsoft、AWSに続いてGoogleがRustを高く評価しているだけではなく実際にAndroid関連のソフトウェアの移植を行っていることはこれからAndroidのアプリを開発しようと計画している企業にとっては参考になるだろう。

著者
松下 康之 - Yasuyuki Matsushita
フリーランスライター&マーケティングスペシャリスト。DEC、マイクロソフト、アドビ、レノボなどでのマーケティング、ビジネス誌の編集委員などを経てICT関連のトピックを追うライターに。オープンソースとセキュリティが最近の興味の中心。

連載バックナンバー

OSSイベント

Open Source Summit Japan 2022開催。車載からストレージ、Kubernetesまで幅広いトピックをカバー

2023/4/26
2022年12月、横浜でOpen Source Summit Japanが開催された。リアルでは約500名が参加し、車載システムからSBoM、AIまで広範なセッションが行われた。
開発言語イベント

WASM Meetup@ByteDanceで垣間見たWebAssemblyの静かな広がり

2023/4/11
ByteDanceのシリコンバレーオフィスで開催されたWebAssemblyのミートアップを紹介。

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています