sbt-dependency-graphをherokuで実行するやつ作った

https://github.com/xuwei-k/dependency-graph


あけましておめでとうございました。つくりました。

http://dependency-graph.herokuapp.com/com.typesafe.play/play_2.11/2.4.6

最低限の使い方としては、URLにそのままgroup idとartifact idとversion入力するだけなので、かなり手軽に使えるはずです。


苦労した点やサイト自体の簡単な説明

  • いい感じのsvg出力のためには、graphvizというの(たぶんC++製のやつ)インストールしないといけない
  • 最初雑にsbtそのものを外部コマンドで呼び出していたが、heroku上だとかなりな高確率でメモリ足りなかったりタイムアウトで失敗する(ローカルではどうにかなる)
    • 同じJVM上で呼びだそうとしても、呼び出し方法が難しい
    • 試行錯誤のうえ、*1sbtのlauncherのgithubを直で参照することによってどうにか同じJVM上での呼び出しを達成*2
  • エラーをユーザーに返すのに、std outを差し替えたり、synchronizedしてて色々酷い。試行錯誤の残骸であって、最終的な結果としてはもっといい感じにできた気がするし、エラーに関してはまずlogger使うべきであるけど、もう面倒になった
  • 内部のtimeoutのためだけにFuture使った箇所あってつらい
  • sbtのbuild.sbt自体を動的に作成して一から実行したり、外部コマンドでgraphviz呼び出ししてるので、頑張ったけどまだ結構な確率でタイムアウトやメモリ足りなくなる
  • なので、キャッシュとか入れないとつらいので、雑なキャッシュ機能入れた


追記:

*1:sbt-launchがproguard済みのものしか無くて呼びたかったメソッドが消されていたので

*2:だがしかしまだ無駄な処理あって、頑張ればもっと時間短縮やメモリの消費量削減できるかも?