皆様、あけましておめでとうございます。
今年も、よろしくお願いしまScala。
Scalaは便利ですよ
Scalaという言語は非常に便利なので、コマンドラインのツールを実装する場合でももちろん活用できます。
よく利用するのは例えばpicture-showというツールで、これはスライドを作るためのツールです。
また、giter8はsbtなどのビルドツールを利用したプロジェクトのテンプレートを作るツールです。
そもそも、ScalaはJavaのライブラリを利用することができるので利用できるシーンは広そうですね。
そんなわけでScalaでコマンドラインのツールの実装を行おう!と思った際に、どうするべきでしょうか。
- sbt使ってjarに固める
- sbtのタスクを作る
- 適切なツールを使う←せいかい!
まあ、面倒なのでサクッと
conscriptを利用します。実は先ほど紹介したpicture-showやgiter8もconscriptを利用しています。
conscriptの詳細については、conscript - Scala で作られたソフトウェアをインストールするためのツールを参照するのが速いと思います。
conscript-pluginという形式でアプリを実装することで、conscriptを利用してインストールできるツールを実装することができます。
それでは、手順をまとめます。ただし、今回はGithubを利用する前提で記述をしています。conscriptはGithubからプロジェクトを参照するのですが、Github以外のリポジトリも設定可能です。
その辺りの詳細は公式ドキュメントを読むのが正解ですね。
手順
1.giter8を使ってconscript-pluginプロジェクトを作る
予めgiter8のインストールを行う必要がありますが、方法についてはReadmeを見るべきだと思います。日本語もありますしね。
Giter8 - Scala アプリケーションの雛形を作るためのコマンドラインツール
giter8がインストールされたら、プロジェクトを作ります。
$g8 n8han/conscript # アプリ名、組織名(パッケージになる)などを聞かれるので答える $cd my_app $sbt
2,3アプリの実装をする,テストをする
src/main/scala/App.scala
のApp#run
がエントリポイントとなるので、アプリの実装を行います。標準でコンパニオンクラスの名称はApp
ですが、好きなものに変更することができます。
また、標準ではテストコードはないのでsrc/test/
以下にテストコードを起き、適当なテスト用ライブラリを利用してテストを記述することができます。
次にsrc/main/conscript/app/launchconfig
を編集します。
エントリポイントのクラス名を変更した場合、[app]
のclass
を変更する必要があります。また、launchconfig
を格納するディレクトリも、標準ではapp
となっていますがこれはコマンドの名称となるので、適切なものに変更する必要があります。
4.バイナリをMavenリポジトリに登録する
バイナリの登録を行う必要があります。オープンソースにするならMaven Centralでいいと思います。
ここの手順が正直一番面倒くさい。とりあえずsbt publish-local
でローカルリポジトリにしてしまうのもありかもしれません。
5.インストールする
ようやくconscriptを使ってインストールできます。
$cs [github user name]/[github proejct name]
あとはコマンドを使います。お疲れ様でした。
まとめ、これから
Scalaでコマンドラインを実装する手順をまとめました。Scalaそのものよりも、sbtに関する知識が必要ですね。
広く公開するツールを作成する場合、バイナリをMavenリポジトリへ登録する必要があるわけですが、Maven centralは手順が面倒だなぁと思ってます。
そこで、Github-Pagesを利用する方法が存在するらしいので、そっちを調査しようと思います。
おわり