sbtで独自のprotobufのoptionを定義し独自のprotoc pluginでそれを処理するsample

これ

qiita.com

をsbtで1つのrepositoryで実行するsampleを作った、というだけの話。

そもそもScalaでprotobufだとscalapbが完全にデファクトで、scalapbはかなり拡張性が高く色々とオプションが用意されてるため、普通に書く分には独自に拡張したいことはあまり多くありません。

それでも、一応なんとなく必要かもしれない場面が出てきて、興味本位で最低限のサンプルを作ったので貼っておきます。

一番のポイントは

「1つのrepositoryで」

と書いているように、通常は独自のoptionから生成されたJavaScalaのコードは、compile済みでmaven centralなどにpublish済みだと、話が簡単というか単純なのですが、 内部だけで使うoptionをその場で定義したい場合、わざわざpublishしたりrepositoryを分けること自体が面倒だと思います。

しかし、sbt-protocの仕組みで、普通にprotoc pluginを書く(sbt pluginではなくprotoc plugin)場合、結局sbtのbuildファイルから呼び出すことになり、 番号などを決めうちで直でコード内部に書く(ある意味2重管理する)のでなければ、そのbuildファイルのレベルでのprotoc pluginを書く時点で独自optionから生成されたコードが参照出来ないといけないため、そのための工夫が若干面倒です。

色々方法があると思いますが、今回は雑にsymlink使って定義するようにしてみました。

そのためのコード生成として project/plugins.sbt 以外にも project/project/plugins.sbt に設定が必要になる、というのもポイントです。

github.com