ことさら−古都プログラマーの更級日記

京都でお寺を回りながら御朱印集めをしていたり、LoLをしたり試合を見に行ったりしているエンジニアのブログです。技術的なはなしとか日常的なはなし、カメラやLoLや競馬の話も書きます。右メニューに検索やらカテゴリーやらがあるので、見たい記事だけ見てね!

Kotlinをコマンドラインでコンパイルして動かす(Working with the Command Line Compiler の日本語版)

f:id:yoshiki_utakata:20180125113427j:plain
小鳥(Kotlin)

はじめに

これは以下のKotlinのチュートリアルページのざっくり日本語訳です。ところどころ意訳しています。

kotlinlang.org

Kotlinをコマンドラインコンパイルして動かす

このチュートリアルではコマンドラインコンパイラでKotlinをコンパイルしてHello Worldをしてみます。

コンパイラのダウンロード

コンパイラGitHubのReleasesページ でダウンロードできます。この記事執筆時の最新バージョンは 1.2.21 です。

GitHub からダウンロードしてインストールする方法

上記GitHubのからkotlin-compilerをダウンロードして解凍して、PATHに bin ディレクトリを追加します。 bin ディレクトリはWindows, Mac OS X, LinuxでKotlinをコンパイルするのに必要なスクリプトが入っています。

SDKMAN!を使う方法

もっと簡単なのは SDKMAN! を使う方法です。OS X, Linux, Cygwin, FreeBSD, SolarisなどUNIXベースのシステムならSDKMAN!が使えます。以下のコマンドでSDKMAN!がインストールできます。

$ curl -s https://get.sdkman.io | bash

そして、新しくターミナルを開いて、以下のコマンドでKotlinをインストールできます。

$ sdk install kotlin

Homebrewを使う方法

OS Xであれば Homebrew を使う方法があります。

$ brew update
$ brew install kotlin

MacPortsを使う方法

MacPorts を使っていれば、以下でコンパイラをインストールできます。

$ sudo port install kotlin

はじめてのKotlinアプリケーション

  1. Hello World を表示するだけの簡単なことりんアプリケーションを作ります。お好きなエディタを使って、hello.kt というファイルを作ります。内容は以下の通りです。
fun main(args: Array<String>) {
    println("Hello, World!")
}
  1. Kotlinコンパイラーでこれをコンパイルします。
$ kotlinc hello.kt -include-runtime -d hello.jar

-d オプションは出力するクラスファイルが置かれるディレクトリ名や、や .jar ファイルの名前を指定します。

-incliude-runtime は、結果の.jarファイルに、Kotlinの実行環境ライブラリなどを含めて、.jarがそれ単体で動くようにします。

全てのオプションを知りたい場合は以下のコマンドで見られます。

$ kotlinc -help
  1. コンパイルしたアプリケーションを実行します。
$ java -jar hello.jar

ライブラリをコンパイルする

ライブラリを開発している場合は、Kotlinの実行環境をコンパイル結果に含める必要はありません。Kotlin実行環境ライブラリを含めずに.jarファイルを生成する場合は以下のコマンドを実行します。

$ kotlinc hello.kt -d hello.jar

このようにコンパイルしたバイナリは、Kotlin実行環境が含まれていないため、javaコマンドでは実行できません。後述のようにclasspathの情報を与えてkotlinコマンドで実行してあげる必要があります。

$ kotlin -classpath hello.jar HelloKt

HelloKthello.kt という名前のファイルをコンパイルして作られたメインクラスの名前です。

REPLを使って実行する

コンパイラを引数なしで実行すると対話型シェルが起動します。ここでKotlinのコードを書くとすぐに結果が見られます。

$ kotlinc-jvm
Welcome to Kotlin version 1.2.21 (JRE 1.8.0_60-b27)
Type :help for help, :quit for quit
>>> 2+2
4
>>> println("Welcome to the Kotlin Shell")
Welcome to the Kotlin Shell

コマンドラインスクリプト言語のように動かす

Kotlinはスクリプト言語のようにも使えます。Kotlinスクリプトのファイル(.kts)は、(ファンクションの中にではなく)トップレベルに実行可能なコードをそのまま書きます。

import java.io.File

val folders = File(args[0]).listFiles { file -> file.isDirectory() }
folders?.forEach { folder -> println(folder) }

このスクリプトを実行するには、Kotlinコンパイラ-script引数を付けて実行するだけです。

$ kotlinc -script list_folders.kts <list_folders.ktsに渡したい引数>