くりにっき

フルスタックキュアエンジニアです

plant_erd v0.2.0をリリースした

sue445.hatenablog.com

github.com

リリースノート

https://github.com/sue445/plant_erd/blob/master/CHANGELOG.md#v020

v0.2.0のトピックスはOracle対応です。ブコメとかでちょいちょいOracle対応してほしいっていうのは観測してたんですが、なんやかんやで作り切るのに1ヶ月くらいかかってました

ただし実行に Oracle Instant Client のsoファイルやDLLファイルが必要になる関係で、Oracle専用の実行ファイル( plant_erd-oracle)を用意しています

苦労点

https://github.com/sue445/plant_erd/pull/50 からかいつまんで説明。

実はOracle対応だけなら3日くらいで実装できたのですが、実装以外の部分で大半の時間を使いました。

ロスコンパイルができない

Oracle Instant Clientを含んだ実行ファイルのビルドにはOracle Instant Clientが必要になります。

しかし https://www.oracle.com/database/technologies/instant-client/downloads.html を見てもらえれば分かるようにOracle Instant Clientは対応OSが限定されているため、さすがのGoでもUbuntu上でWindowsMacの実行ファイルはビルドできませんでした。*1

幸いにもGitHub ActionsではUbuntu, Windows, MacのRunnerが提供されていたため、それぞれのOS上でビルドすることができて非常に助かりました。

初めてのWindows上でのCI

UbuntuMacであればビルドスクリプトbashでいいのですが、Windows上でのCIは今回初めてだったので試行錯誤しました。

https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idstepsrun にあるようにWindowsだとPowerShell, cmd, Git Bashが使えます。

最初Git Bashでビルドスクリプトを書いてたもののWindows固有の問題にぶつかってうまく動かずにPowerShellで書き直しつつ、PowerShellでもうまくいかなくて結局Git Bashでビルドスクリプトで書きました。

ここのWindowsビルドだけで1〜2週間くらいかかったと思います。

途中で実行ファイルを分けた

Oracle対応ができていざ動作確認をしようとしたところ、plant_erd mysqlplant_erd postgresql のようにOracleと関係ない機能を使うだけでもInstant Clientが必要なことが判明したので苦肉の策でOracleだけ実行ファイルを分けました。

ライセンスをどうするか

Oracle Instant Clientは OTNライセンス です。

Oracle Instant Clientは再配布可能 *2 なので実行ファイルに含めて配布することは問題ありません。

しかしその場合リポジトリ上でのライセンスの表記を

  1. MITライセンスのままでいい
  2. MITライセンスをやめてOTNライセンスにする
  3. MITライセンスとOTNライセンスのデュアルライセンスにする

のどれにすればいいかで悩みました。

OTNのサポートに問い合わせたところ、MITライセンスとInstant Clientに付随するOTNライセンスは別に扱ってほしいとの回答をもらったのでREADMEにも「The program is available as open source under the terms of the MIT License. But plant_erd-oracle contains Oracle Instant Client. Oracle Instant Client is under OTN License.」(本ソフトウェアにはMITライセンスが適用されるが、実行ファイルに内包されているInstant ClientにはOTNライセンスが適用される)のような書き方になりました。

*1:余談ですがここに気づくまでに数日かかりました

*2:https://www.oracle.com/technetwork/jp/database/features/ic-faq-094177-ja.html#A4379