Protocol Bufferのスキーマ定義からDartコードを生成する
前回はProtocol Bufferのスキーマ定義を単一のGithubリポジトリとして管理しましょうというお話をしました。
そちらが次のリポジトリになります。
このリポジトリにProtocol Bufferのスキーマ定義を集約させて、DartやJavaのインターフェイスとなるリポジトリでは、ここで管理された定義を元にコードを自動生成します。
そして今回は、Dartコードを生成する方法とGithubでバージョンニングする方法に関して記載していきます。
Dartコードを自動生成するために、次のように並列に各リポジトリを配置していくこととします。

自動生成されるDartコードを管理するリポジトリは、「mks-ex-dart-interfaces」としています。
Dartのコードを生成するために、事前準備として、Homebrew等でprotobufパッケージのインストールが必要です。
次に、Protocol BufferのDartプラグインをインストールします。
flutter pub add grpc
上記のコマンドを実行すると、$flutter_home/.pub-cache/binのディレクトリの下に「protoc-gen-dart」という実行ファイルがインストールされますので、ここにも環境変数のPATHを通します。
さて、準備が終わると、protocコマンドと、プラグイン指定のオプションで「-dart_out=grpc:」が使えるようになります。
今回は、シェルスクリプトを準備し、「mks-ex-proto-defs」プロジェクトのprotoファイルを全て走査して、Dart用のファイルをlibディレクトリの下に出力するようにしました。(なんとなくではあるのですが、サブディレクトリを切って管理されたprotoファイルも処理対象にしています)
運用としては、「mks-ex-proto-defs」でProtocol Bufferの定義を追加・変更し、上記のシェルスクリプトでDartファイルを自動生成したあと、オリジンにプッシュし、タグを打ってバージョニングをする想定です。
git push origin 0.0.1
現在は、自動生成したDartコードをGithubにプッシュして、「mks-ex-dart-interfaces」リポジトリに「0.0.1」のタグを打ってあります。
利用するFlutterプロジェクトのpubspec.yamlでは、以下のように依存関係を書きます。
flutter:
sdk: flutter
mks_ex_dart_interfaces:
git:
url: git@github.com:MUKEI-SOFT-LLC/mks-ex-dart-interfaces.git
ref: tags/0.0.1
Dartの依存関係でGithubのリポジトリを参照するには、Githubに対してSSHログインできる必要がありますので、キーペアを生成して、公開鍵をGithubに登録しておきます。
ここまでで、Protocol Bufferの定義の追加・変更にともない、クライアントとなるDartのコードを自動生成し、バージョンを管理できるところまでできました。
次回は、JavaのインターフェイスとなるArtifactを生成し、Github PackagesをMavenリポジトリとして利用する方法を記述していきます。
それでは!