Lambdaカクテル

京都在住Webエンジニアの日記です

Invite link for Scalaわいわいランド

Java(Scala)アプリどう配ってますか

自作の解説動画作成ツールがある程度形になってきたので、配布について考えている。

www.nicovideo.jp

zmmはScalaで書かれたアプリケーションなので、JVMで動作する。JVM言語の配布形式には色々あるのだけれど、zmmではとりあえずJARを配ることにした。

Scalaにはsbt-assemblyというUberjar*1を生成するプラグインや、リリースフローを自動化するsbt-releaseというプラグインがあるので、JARを生成させるところまでは割とすぐできた。

$ sbt
> release

とするとインタラクティブなリリースフローが始まり、自動でコミットとかバージョン修正とかタグ打ちとかをやってくれる。非常にありがたい。

JARファイルを生成したら僕がそれをGitHub Releasesに置く。

github.com

ユーザとしてはこれをダウンロードしたら実行できるはず。

Coursierとかを使う方法もある

という話を id:tanishiking24 にしていたら、coursierで配ってもいいねという話になった。Coursierというのは、JVMで動くアプリケーションをインストールするための便利ツールで、npxみたいなもんだと思ってもらったらよい。

Coursierを使うと以下のようなコマンドでMavenにpublishしたアプリケーションを起動できるようだ。

$ cs launch com.github.windymelt::zmm:0.2.0.2

このへんのURLを見るとcoursierでインストール可能にするための手順が書かれている:

get-coursier.io

とはいえ、この方法だとあたりまえだがcoursierをインストールしているのが前提になるので、このあたりの塩梅が難しい。動画生成ツール、どんなのかな〜みたいな感じのユーザにcouorsierをインストールしてください、日本語のマニュアルはありません、というのはなかなか酷。我々エンジニアは平然と英語のページを読むし、平然とコマンドをインストールすることをいとわないけれど、一般ユーザは英語だともう無理になると思う。この点、Windowsとかの実行可能ファイルでインストールするみたいなのはよくできているなと思った。

配布方法いろいろ

Scalaで書いたアプリケーションを配る方法をいろいろ考えてみる。上に行くほど簡単で、下に行くほどハードコア。

  • Webアプリ化する
    • これが一番素朴で良いけど、計算リソースも用意しなければならないので金がかかる。
  • JREが入っているかを判定するネイティブツールとJARを組合わせる
    • 単一のファイルではなくなるが、かなり丁寧。
  • ネイティブコンパイルして実行ファイルを配る
    • 今のScala Nativeだと結局動的リンクになるので、ただの出来の悪いJARになる可能性が高い。
  • JARファイルを配る
    • JARを実行さえできればいいのでかなりマシになる。JREのインストールくらいなら一般人にもできる。
  • coursierなどのツールでインストールさせる
    • coursierさえ入っていれば簡単。coursierは入っていない。
  • ソースコードをcloneしてきてsbt runさせる
    • もっともハードコア。コントリビュータになれる

Javaで作られて配られてる有名なツールとしてはマインクラフトとかがあるけれど、ああいうツールはインストールのためのウィザードページを用意しているので、かなり丁寧だと思う。

仕事でユーザにScala/Javaのアプリケーションを配っている人はどういう暮らしをしているのか気になる。

ミドルウェア

ちなみにzmmは単体では動作できなくて、VOICEVOXといった音声合成エンジンやchromium・ffmpegが必要になる。これもうインストールできている必要があるので、大変。VOICEVOXはライセンス的に同梱してもいいらしいとニコニコのコメントで教えてもらったので同梱することも考えているが、同梱したらしたで今度はPythonが依存に増えてしまう・・・。

*1:依存ライブラリをくっつけて単体で実行可能にしたJARファイルのことをUberjarとかFat JARという

★記事をRTしてもらえると喜びます
Webアプリケーション開発関連の記事を投稿しています.読者になってみませんか?