このページは、親コンテンツである「Kotlin」の中から {{:Kotlin/実行方法}} の形式で展開されることを意図して書かれています。

この手法は

  1. ページ分割すると、[[#inline|inline]] のようなページ内リンクが大量に切れる。
  2. ページ分割すると、<ref name=foobar /> のような名前のついた参照引用情報が大量に切れる。
  3. スマートフォンやタブレットではページ遷移は好まれない。
  4. MediaWikiは、圧縮転送に対応しているので1ページのサイズが大きくなるのはトラフィック的には問題が少なく、ページ分割によりセッションが多くなる弊害が大きい。
  5. 編集はより小さなサブパート(このページ)で行える。

という技術的背景があります。

Kotlinのサブページ

実行方法 編集

Kotlin/JVM 編集

Kotlin/JVM では、Kotlin のソースファイルからJARファイルをコンパイルします。 Kotlin のソースファイルの拡張子は .kt です。

hello.kt をコンパイルして hello.jar を得るのであれば

コンパイル
kotlinc hello.kt -include-runtime -d hello.jar
とします。

生成された hello.jar を実行するには

kotlinから生成したJARファイルの実行
java -jar hello.jar
とします。
-jar を忘れると
$ java hello.jar 
Error: Could not find or load main class hello.jar
Caused by: java.lang.ClassNotFoundException: hello.jar
とエラーになります

別のKotlinのソースファイル universe.kt をコンパイル/実行するには hellofilename に読替えて同じ手順を行えばいいのですが、このような単純作業はコンピューターに任せましょう。

make の利用 編集

ビルド手順の自動化を行うツールに make があります。 make にはいくつかの方言がありますが、BSD-make と GNU-make に共通した構文を紹介します。

Makefile
# Makefile for Kotlin

.SUFFIXES: .kt .jar .run

.kt.jar:
        kotlinc $^ -include-runtime -d $@

.jar.run:
        java -jar $^

all:
この内容をカレントディレクトリーに Makefile の名前で保存します(カレントディレクトリーに hello.kt がある場合)。
タブと空白には区別され、先頭の空白8つ分はタブです。

コマンドラインでの操作は

tcshの場合
% cat hello.kt 
fun main() {
    println("Hello world!")
}
% make hello.jar
kotlinc hello.kt -include-runtime -d hello.jar
% make hello.run
java -jar hello.jar
Hello world!
% sed -e s/world/universe/ hello.kt > universe.kt
% cat universe.kt 
fun main() {
    println("Hello universe!")
}
% make universe.run
kotlinc universe.kt -include-runtime -d universe.jar
java -jar universe.jar
Hello universe!
rm universe.jar
% make universe.jar
kotlinc universe.kt -include-runtime -d universe.jar
% make universe.run
java -jar universe.jar
Hello universe!
make hello.jar とすると
ルール
.kt.jar:
        kotlinc $^ -include-runtime -d $@
が適用され
アクション
kotlinc hello.kt -include-runtime -d hello.jar
が実行されます。
make hello.run とすると
ルール
.jar.run:
        java -jar $^
が適用され
アクション
java -jar hello.jar
が実行されます。
universe.jar がない状態で make universe.run とすると。
ルール
.kt.jar:
        kotlinc $^ -include-runtime -d $@

.jar.run:
        java -jar $^
が連鎖的に適用され
アクション
java -jar universe.jar
Hello universe!
rm universe.jar
となります。
もともと universe.jar はなかったので最後に rm universe.jar して消しています。

この様に、make を使うとファイルのタイムスタンプから必要な処理を判断し実行します。


make と同じくビルドツールに gradle があり、gradle のビルドルールは Kotlin Script で書けるので、Kolin の学習には gradle が適しているとも言えますが、ビルドルールを書くためにKotlinのコードを読み書きする必要があるという「鶏卵問題」に陥るので、より一般的な make を紹介しました。

ここでは、kotlinソースからJARファイルをコンパイルし実行する最小限のルールを書きましたが、機会をみて、make のチュートリアルを書こうと思います。