萌えハッカーニュースリーダー

2025/04/30 00:03 Ensure public interface reliability: Tracking API compatibility for Android

出典: https://www.revenuecat.com/blog/engineering/binary-compatability/
hakase
博士

やっほー、ロボ子!今日はAPIの変更を追跡するお話をするのじゃ。

roboko
ロボ子

APIの変更追跡ですか、博士。それは重要なテーマですね。よろしくお願いします。

hakase
博士

APIの変更って、うっかりやっちゃうと大変なことになるのじゃ。依存しているプロジェクトを壊しちゃったり、開発者の時間を無駄にしたり…。

roboko
ロボ子

そうですね。大規模プロジェクトだと、手動での追跡は難しいですし、見落としがちです。

hakase
博士

そこで登場するのが、API変更を追跡するツールなのじゃ!

roboko
ロボ子

具体的には、どんなツールがあるんですか?

hakase
博士

まずは、JetBrainsが開発した「Binary Compatibility Validator」!これはKotlin Gradleプラグインで、公開APIのスナップショットを生成して追跡してくれるのじゃ。

roboko
ロボ子

Gradleプラグインとして簡単に統合できるのは便利ですね。

hakase
博士

そうなのじゃ!例えば、RevenueCatのKotlin Multiplatform SDKで実際に使われているらしいぞ。

roboko
ロボ子

コマンドも紹介されていますね。`./gradlew apiDump`で.apiファイルを生成して、現在の公開APIを表示する、と。

hakase
博士

`apiCheck`コマンドでプロジェクトをビルドして、現在の公開APIが生成された.apiファイルと一致するか検証するのじゃ。

roboko
ロボ子

なるほど。でも、制限事項もあるんですね。プロダクトフレーバーが設定されたモジュールはサポートしていない、と。

hakase
博士

そう、そこがちょっと残念なのじゃ。でも、大丈夫!そんな時は「Metalava」の出番じゃ!

roboko
ロボ子

Metalavaですか?

hakase
博士

Googleが開発したJVMベースのプロジェクト向けのメタデータジェネレーターで、公開APIの抽出、APIスタブファイルの生成、APIの差分比較ができるのじゃ。

roboko
ロボ子

metalava-gradleプラグインを使うことで、Metalavaの全機能にアクセスできるんですね。

hakase
博士

そう!RevenueCatのAndroid SDKでも使われているらしいぞ。

roboko
ロボ子

`./gradlew metalavaGenerateSignature`でapi.txtファイルを生成して、現在の公開APIを反映させるんですね。

hakase
博士

そして、`metalavaCheckCompatibility`でプロジェクトをビルドして、現在の公開APIが生成されたapi.txtファイルと一致するか検証するのじゃ。

roboko
ロボ子

どちらのツールも、GitフックやCIパイプラインと連携させることが重要ですね。

hakase
博士

その通り!Gitフックでコミット前にチェックしたり、CIパイプラインに組み込んで自動的に検出したりするのじゃ。

roboko
ロボ子

APIチェックをCIパイプラインに統合することで、破壊的な変更を早期に検出できるのは大きなメリットですね。

hakase
博士

まとめると、KotlinライブラリならBinary Compatibility Validator、プロダクトフレーバーをサポートする必要があるならMetalavaを使うのがおすすめなのじゃ。

roboko
ロボ子

マルチモジュールプロジェクトにも適用して、クリーンなAPI境界を維持することも重要ですね。

hakase
博士

APIの変更を自動的に追跡して、意図しない破壊を防ぐ!これ、エンジニアの基本なのじゃ!

roboko
ロボ子

RevenueCat SDKの例を参考に、実際のセットアップを確認してみます。

hakase
博士

よし、今日もロボ子は賢くなったのじゃ!

roboko
ロボ子

ありがとうございます、博士。ところで、APIの変更で一番怖いのは、変更したこと自体を忘れてしまうことですよね。

hakase
博士

確かに!まるで冷蔵庫を開けたこと自体を忘れて、また開けちゃうみたいなものじゃな!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search