今回取り上げるのは、2017年にAndroidの公式開発言語になったKotlinです。Kotlinは2011年に発表された比較的新しい言語ですが、Androidの公式開発言語になったことで、人気に火がつきました。Kotlinで作ったアプリは基本的にJava仮想マシン上で動きます。今回は、オブジェクト指向に加え、型推論やクロージャなど、モダンな言語のエッセンスも持つKotlinについて見ていきましょう。

Kotlinについて

Kotlinは、ロシアのJetBrains社の研究所で開発され、2011年7月に公開されました。JetBrains社といえば、Javaの統合開発環境IntelliJ IDEAの開発元として有名です(なお、同社は、チェコのプラハに本社がありますが、ロシアやドイツ、米国に研究開発拠点を持っています)。同社は、それまでの経験を活かし、Javaをより簡潔に記述できるような汎用言語を目指して、Kotlinを開発しました。

Kotlinは、Javaとの相互運用も考慮されています。KotlinからJavaのライブラリを呼び出すこともできます。その仕組みですが、Kotlinのプログラムは、Javaのバイトコードにコンパイルされます。そして、Javaの仮想マシン上で実行されます。そのため、Kotlinのプログラムは、Javaと同等の速度で実行することができます。そして、静的型付けのオブジェクト指向プログラミング言語である点は、Javaと同じですが、Javaよりも簡潔にプログラムを書くことができるよう配慮されています。また、JavaのプログラムをKotlinのプログラムに変換するツールも存在します。これを使うと、Javaで作ったプロジェクトをKotlinへ移行するのが容易です。それから、Java仮想マシン上で動作する他のプログラミング言語である、GroovyやScalaなどの言語からも影響を受けて、モダンなプログラミング言語になっています。

ちなみに、2018年10月に公開されたKotlin1.3では、Java仮想マシンに依存せず、ネイティブバイナリを生成する機能もついています。それ以前に、KotlinをJavaScriptに変換する機能もあり、脱Javaの流れもあります。

Kotlinをインストールしよう

それでは、実際にKotlinをインストールして、動かしてみましょう。Windows、macOSともに、パッケージマネージャーを使うと、比較的簡単にインストールができます。

【Windowsの場合】

Windowsでは、Chocolateyというパッケージマネージャーを使います。Webブラウザで、Chocolateyのページを開き、クリップボードにコマンドをコピーします。

  • インストールコマンドをコピー

    インストールコマンドをコピー

そして、Windowsメニューから[Windowsシステムツール > コマンドプロンプト]を起動します。その際、右クリックして、[その他 > 管理者として実行]をクリックして、管理者権限でコマンドプロンプトを起動してください。そして、先ほどコピーしたコマンドを実行します。

  • 管理者権限でコマンドプロンプトを起動

    管理者権限でコマンドプロンプトを起動

その後、改めて、管理者としてコマンドプロンプトを開き直します。そして、以下のコマンドを実行します。

choco install kotlinc

すると、以下のようにKotlinがインストールされます。

  • Kotlinをインストールしているところ

    Kotlinをインストールしているところ

【macOSの場合】

macOSの場合は、パッケージマネージャーのHomebrewを利用してインストールします。Homebrewは64ビットのmacOS10.12以降で動作します。Homebrewをインストールするには、画面右上にあるSpotlightで「ターミナル.app」を開きます。そして、以下のコマンドを実行します。

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

次いで、Kotlinをインストールします。

brew install kotlin

Kotlinを使うには、Javaが必要です。もし、インストールされていなければ、Javaをインストールしましょう。

brew cask install java

コマンドラインを操作するのに少し慣れが必要ですが、コマンドを数回実行すればインストールが完了するので楽ができます。

一番簡単なプログラム

それでは、画面に「Hello, World!」と表示する一番簡単なプログラムを作ってみましょう。以下のプログラムを「hello.kt」という名前で保存します。

// Hello, World! のプログラム
fun main(args: Array<String>) {
  println("Hello, World!")
}

そして、コマンドラインから、以下のコマンドを実行して、プログラムをコンパイルします。

kotlinc hello.kt -include-runtime -d hello.jar

コンパイルができたら、jarファイルをJava仮想マシン上で実行しましょう。

java -jar hello.jar

すると、「Hello, World!」と表示されます。

  • プログラムを実行したところ

    プログラムを実行したところ

プログラムを確認してみましょう。このプログラムでは、main関数を定義します。funと書くと関数を定義できます。そして、画面(標準出力)に文字を出力するには、printlnを利用します。

FizzBuzz問題を解くプログラム

それでは、本連載で恒例となっている、FizzBuzz問題を解くプログラムを作ってみましょう。FizzBuzz問題とは、1から100までの数を出力するプログラムです。ただし、3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」と、3と5の倍数の時は「FizzBuzz」と表示するというものです。

さっそく、Kotlinで作ってみましょう。以下のプログラムを「fizzbuzz.kt」という名前で保存します。

// FizzBuzzを出力する関数 --- (*1)
fun fizzbuzz(n: Int): String {
  when {
    n % 3 == 0 && n % 5 == 0 -> return "FizzBuzz"
    n % 3 == 0 -> return "Fizz"
    n % 5 == 0 -> return "Buzz"
    else -> return Integer.toString(n) 
  }
}

// メイン関数 --- (*2)
fun main(args: Array<String>) {
  (1..100).forEach {
    println(fizzbuzz(it))
  }
}

プログラムをコンパイルし、実行してみましょう。コマンドラインに以下のコマンドを入力します。

kotlinc fizzbuzz.kt -include-runtime -d fizzbuzz.jar
java -jar fizzbuzz.jar

実行すると、以下のように表示されます。

  • FizzBuzzのプログラムを実行したところ

    FizzBuzzのプログラムを実行したところ

プログラムを確認してみましょう。プログラムの(*1)の部分では、fizzbuzz関数を定義します。ここでは、when構文を利用して、3と5で割れるか、3で割れるか、5で割れるか、その他...と判定していきます。このwhen構文は、フロー制御のif ... else ... 構文を連続で記述するのに近いものです。そして、プログラムの(*2)の部分では、メイン関数を定義します。ここでは、1から100までの数をforEach構文を利用して順に実行します。ここでは、変数itに繰り返しの際の数が代入される仕組みになっています。

まとめ

以上、ここまで、Kotlinについて紹介し、簡単なプログラムを作ってみました。Kotlinは、オブジェクト指向プログラミング言語ですが、今回のFizzBuzzのプログラムをみれば分かるとおり、Javaのようにクラス定義を強要されることはありません。それが良い例ですが、同じように、Kotlinでは、様々な面でプログラムが簡潔に記述できるよう工夫されています。

今後、Androidのアプリを作る場合には、JavaよりもKotlinが好まれて使われることになるでしょう。そして、Androidアプリに留まらず、Webアプリなど、これまで、Javaが使われていた場面でKotlinが使われていく可能性があります。Kotlinの今後の動向が楽しみです。

自由型プログラマー。くじらはんどにて、プログラミングの楽しさを伝える活動をしている。代表作に、日本語プログラミング言語「なでしこ」 、テキスト音楽「サクラ」など。2001年オンラインソフト大賞入賞、2005年IPAスーパークリエイター認定、2010年 OSS貢献者章受賞。技術書も多く執筆している。