リリースノート
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上でWindowsやMacの実行ファイルはビルドできませんでした。*1
幸いにもGitHub ActionsではUbuntu, Windows, MacのRunnerが提供されていたため、それぞれのOS上でビルドすることができて非常に助かりました。
初めてのWindows上でのCI
UbuntuとMacであればビルドスクリプトは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 mysql
や plant_erd postgresql
のようにOracleと関係ない機能を使うだけでもInstant Clientが必要なことが判明したので苦肉の策でOracleだけ実行ファイルを分けました。
ライセンスをどうするか
Oracle Instant Clientは OTNライセンス です。
Oracle Instant Clientは再配布可能 *2 なので実行ファイルに含めて配布することは問題ありません。
しかしその場合リポジトリ上でのライセンスの表記を
- MITライセンスのままでいい
- MITライセンスをやめてOTNライセンスにする
- 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