Google Cloud API Client Libraries for Rustにコントリビュートした話

こんにちは、Drawer Growthグループ所属エンジニアの中山です。 今回は、先月から個人的に始めたOSSへのコントリビューション活動についてご紹介します。

※ 会社としての取り組みではなく、あくまで個人の取り組みになります。

背景

弊社が開発している図面データ活用クラウド「CADDi Drawer」では、バックエンドの一部にRustを利用しています。また、クラウドプラットフォームとしてGoogle Cloudを利用しています。 現状、RustでGoogle Cloudのリソースを操作する際には課題があります。それは正式版(GA)のRust向けGoogle Cloud公式ライブラリがまだ存在しないということです。よってサードパーティライブラリを使うか、自前で実装する必要があります。弊社でも、サードパーティライブラリと自前実装を組み合わせて運用している状況ですが、サードパーティライブラリが今後もメンテされ続けるという保証はなく、自前実装は何かとコストがかかるため公式のライブラリを使いたいという思いがあります。

上記で「正式版」と書いたのは、実はExperimentalな公式ライブラリがあるからです。 github.com

このライブラリは現在開発中で、本番環境での使用は推奨されていません(link)。

The APIs are not stable, they are not ready for use in production code.

このライブラリが正式版(GA)になれば、弊社を含め多くのRustユーザーが恩恵を受けられるはずです。そこで「このライブラリ開発に少しでも関わって、サードパーティ/自前実装をいずれ置き換えられる道を探りたい」という動機からコントリビューション活動を始めました。

Google Cloud API Client Libraries for Rustとは

Google Cloud API Client Libraries for Rustとは、Googleが開発中のRust向けGoogle Cloud APIクライアントライブラリです。リポジトリを見ると、初回のコミット自体は2021年ですが、実際に開発が活発化し始めたのは2024年10月頃からで比較的最近開発が活発になってきています。

Commits over time

また、READMEには「Contributions to this library are always welcome and highly encouraged.」と明記されており、外部からのコントリビューションを大いに歓迎しています。コントリビュートの流れもシンプルで、Contributor License Agreement(CLA)にサイン→PRを送る→レビュー→マージという手順で進むようになっています。

コントリビュートまでの流れ

まず、社内でサードパーティや自前で実装している部分のライブラリを実装できないか、Issueを立ててリクエストしてみました。しかし、現在Google側でデザインを検討中でまだ対応できる段階ではないという返答をいただき断念することにしました。 一方、リポジトリには既に多くのIssueがあり、初心者向けとしてgood first issueラベルが付いているものもあります。まずはそちらから着手してみることにしました。

私が今回取り組んだIssueは以下です。

github.com

このIssueの目的は、認証レイヤーに異常系のUnit Testを追加することでした。このIssueに取り組んでいいことを確認し、OKをもらったうえでやるべき内容を詳しく教えていただきました。やることは主に以下の2点でした。

  • 全てのエラーをリトライしているのを、エラー内容に応じてリトライするように変更する
  • 認証の異常系に関するUnit Testを追加実装する

対応のフローとしては、リポジトリをFork → Fork先のリポジトリで実装 → 本家リポジトリへPull Request → レビュー後にマージ、という一般的な手順でした。私の出したPRは以下です。

github.com

コントリビュートしてみた感想

想像していたよりもあっさりできた

私はこれまでOSSを利用することはあっても、コントリビュートする機会はほとんどありませんでした。Rustは比較的新しい言語で、活発なコミュニティが魅力ですが、実際にコントリビュートするとなると少しハードルが高いように感じていました。 今回、思い切ってIssueにコメントを残してみたところ、1~2日以内に返信してくれ、かつPRもすぐにレビューしてくれるなど、非常にオープンでフレンドリーな雰囲気を感じました。「OSSコミュニティ」というと敷居が高いイメージを抱いていましたが、とても取り組みやすかったです。 かかった時間は、Issueでのやりとりが1~2日、実装が1日、PRのレビューも1~2日で終わり、トータルで1週間ほどでマージまで進めることができました。

勉強になった

さらに大きな収穫だったのが、社外のコードを読む機会が得られたことです。Rustは今のチームに異動してから触り始め、ほとんど社内のコードしか経験がない状態でした。実際にGoogleが管理/運用しているコードベースや、他のコントリビューターの実装・レビューのやりとりを見ることで、これまで知らなかった設計パターンやテストの書き方など、多くの学びを得ました。

うれしい

余談です。Google公式リポジトリに自分のアイコンがあるとやっぱりテンション上がりますね。

まとめ

本記事では、Googleが開発中のGoogle Cloud API Client Libraries for Rustにコントリビュートした体験を紹介しました。このプロジェクトはまだ開発初期であり、貢献できそうなIssueもたくさんありそうです。 READMEにもある通り、外部からのコントリビューションを歓迎しているため、誰でも参加しやすい状況でコントリビューションチャンスです。 ひとまず1st contributionを達成できましたが、当初の目的である自社実装の置き換えはまだ実現していません。今後も継続的にコントリビューション活動を行い、機能拡充をサポートしていきたいと思います。興味ある人はぜひ一緒にやりましょう!

最後に、キャディでは現在エンジニアを絶賛採用中です。本記事を読んで興味を持ってくれた方はぜひご連絡ください。一緒にRustのエコシステムを充実させていきましょう!

recruit.caddi.tech