Kotlinエバンジェリストが解説!『Kotlinスタートブック』著者による「Kotlin」習得のススメ
「日本Kotlinユーザグループ」代表を務め、2020年3月からシェアフル株式会社で技術顧問に就任した長澤太郎さんに、KotlinとJavaの相違点やKotlinを学ぶには?といった内容を解説していただきました。
長澤太郎さんは、Kotlin登場直後からKotlinの良さを世に広めようとさまざまな活動を行っており、技術顧問の仕事も含め、更にKotlin業界の発展を推進されています。
目次
1. プログラミング言語「Kotlin」の魅力に迫る!
Kotlinとは?まず知っておこう
Kotlinとはプログラミング言語の一つで、開発元はJetBrainsという、IntelliJ IDEAなどの開発者向けツールで有名な会社です。Kotlinに関する最初の発表があったのは、2011年の7月です。
「JVM向けにKotlinという言語を作っています」というアナウンスがあり、その半年後くらいにKotlinが登場しました。
開発元であるJetBrainsとしては、当時Javaが抱えていたいくつかの課題を克服するためにKotlinという新しい言語を作って、Javaから乗り換えを図りたいと思っていたようです。
「JVMで動く=Javaの代わりに使える」と考えると、分かりやすいかと思います。
2. Kotlinとの出会い
私とKotlinとの最初の出会いは、偶然ネットニュースで知ったことからです。
読んだ記事の中でKotlinの特徴が紹介されていて、元々Javaを長く使用していたので「Javaの経験を生かせるなら簡単に始められそうだ」と思いました。
実は、そのころすでにJVMの上で動く言語をいくつか試してみてはいたのですが、あまり馴染めなかった経験があったんです。ちょうどそのタイミングで、第三の選択肢としてよりシンプルな静的型付け言語であるKotlinが入ってきたことは絶好の巡り合わせだったと思っています。
Kotlinを知った当時、勉強会などに通い始めたばかりで、いつか登壇者としてプログラミングについて発表したいという思いを持っていました。とはいっても、「他の人と同じような内容では面白いと思ってもらえないな」という気持ちも同時にあったんです。
そこで、「自分といえば○○」と呼べるようなコンテンツを用意したいと考えていたときに、ちょうどKotlinに出会いました。自分に合ったコンテンツが見つかった!と思ったことで、自身がまずKotlinに詳しくなり発信して行こうと思ったことは大きなきっかけでした。
そこで最初は、Kotlinについて調べたことを自分のブログで公開していく形で発信を始めました。それと並行して、勉強会でも「Kotlinが良いですよ」という内容の発表を数多く続けていきました。たくさんの発表やイベント参加などを通じて「Kotlinといえば太郎」といってもらえるようになったのではないかと思っています。
また感慨深かったのが、Androidの開発言語としてKotlinが採択され、「Kotlin=Androidの公式言語」となったことです。 Google I/O 2017でこの件が発表されて以降は、Kotlinの導入企業も次第に多くなりました。
「Kotlinに関わってきて本当に良かった」と、このとき心底嬉しく思いましたし、Kotlinに親しんできた中ではおそらくもっとも喜んだ出来事でした。
3. Kotlinの特徴、KotlinとJavaの相違点を解説
1. コードが短く書ける
当時のJavaには課題がいくつかありましたが、最も大きな課題は「コードが冗長になりがち」という点だと考えられます。その一方、Kotlinでは短いコードで書けます。
ごく単純なところではデータクラスやプロパティ、型推論といった部分です。
Javaではid,name を持った Person クラスの定義を記述する際に、getId(), getName(),setName(String name), toString(), hashCode(), equals(Object) メソッドが必要です。
その一方Kotlinでは、 dataクラスを用いた一行の記述ですべての実装を Kotlin が生成してくれます。またシングルトンの実装についても、Kotlinでは classを object と書き換えるだけで完了させられます。
以下に、例をご紹介します。まずは、Javaの場合です。
// Java
public class Person {
private final Long id;
private final String name;
public Person(Long id, String name) {
this.id = id;
this.name = name;
}
public Long getId() {
return id;
}
public String getName() {
return name;
}
public String toString() {
…
}
public boolean equals(that: Object) {
…
Kotlinですと、以下のようになります。
// Kotlin
data class Person(val id: Long, val name: String)
2. Kotlinにはnull安全機能がある
Kotlinには「null安全」という機能が備わっています。
Kotlinでは型により「nullになり得るか否か」が明確に区別されていて、nullになり得る参照に普通にアクセスしようとするとコンパイルエラーが発生します。nullになり得る参照のメンバにアクセスする際には、ifなどでその参照がnullでないことを保証した状況で行う必要があります。このように言語組み込みでnullに関する扱いを厳しくすることで、Javaで頻繁に発生していたnullに関するエラーをKotlinでは起こりにくくしています。
3. Javaのエコシステムに相乗りできる
Kotlinは2010年代に生まれたとても新しい言語です。新しい言語は一般にエコシステムが醸成されていないのですが、KotlinはJavaのエコシステムに相乗りできるという意味でのアドバンテージがあります。
Javaで書かれたライブラリやフレームワークなどは、Kotlinからも使うことができます。中には使えないものもあるとはいえ、大抵の場合はシームレスに使うことができる良さがあります。
JVM(Java仮想マシン)だけではなくAndroid上でも動かすことができます。現在は、Androidの上でKotlinが動くことがAndroidの開発元であるGoogleのお墨付きになっている状況です。それだけに「これからAndroidで開発を行うなら、Kotlinを使う選択肢がアリだろう」という流れになってきています。
4. iOSの開発も可能
現在ではJavaの代わりとしてだけではないといえるほど活用範囲が拡がっています。たとえば iOS のアプリを作ることもできますし、ブラウザ上で JavaScript の代わりに使うことができるなど、さまざまなプラットフォームで活躍しています。
4. Kotlinの今後について
現在KotlinはVer1.3で、次の1.4が予告されている状況です。バージョンが変わることによる言語自体の変更はとても小さいものになっていて、言語そのものがもう完成に近づいてきている表れともいえるでしょう。
Kotlin1.4の大きな変更点は、更なるプラットフォームの拡充となる見込みです。先ほどKotlinは現状でもiOSで動くと述べていますが、今後はApple WatchやApple TVでも動かせるようになるなど、どんどんプラットフォームが増えていくことが予告されています。Kotlinを習得することで、今後はさらに多くの領域でその知識の活用が可能となるでしょう。
またコンパイラの性能も向上されるといわれています。言語にさまざまな機能が備わっていると、どうしてもコンパイルに長い時間を要してしまいます。それについて可能な限り短時間化が図れるよう、課題解決に向け努力をしています。
開発元であるJetBrainsも、Kotlinには非常に力を入れています。それだけに、言語のパフォーマンス向上やコードの高品質化がもっと図られ、言語として扱いやすいものとなっていくと考えられるでしょう。
5. Kotlinを学ぶには?習得したい方のために
Kotlinを始めるにも、さまざまな始め方があります。その中でも最も簡単な学び方は、ブラウザ上でKotlinのコードを編集したり実行したりできる環境を利用することでしょう。URLへアクセスすることで簡単にその画面を開くことができるため、非常に気軽に学べる方法だと思います。何かをインストールする、設定するという手間がありません。
以下に、初めて学ぶ方へのハンズオンをご紹介します。
1. Kotlinのシンプルなコード記述を体験してみよう
初めてKotlinを学ぶ方は、まず https://try.kotlinlang.org へアクセスすることをおすすめします。
Kotlinのコード記述のシンプルさを知るには、このサイト上で ”Hello, World!” のサンプルプログラムを動作させてみてください。
上記の画面のとおり、 https://try.kotlinlang.org にアクセスすると初めに ”Hello, World!” のサンプルプログラムが表示されます。
画面右上部に「▶Run」というボタンがありますので、こちらを押してみてください。プログラムが実行され、画面下部のConsoleタブに以下のとおり出力されます。
【画像】Java の “Hello, world!” プログラム
ちなみにJavaの “Hello, world!” プログラムは、以下のとおり5行のコード記述が必要となります。
Kotlin の”Hello, world!”プログラムは3行のみですから、 https://try.kotlinlang.org の冒頭を試すだけでもKotlinのコード記述の簡潔さが分かるかと思います。
2. 本格的に学びたい場合は、専用のIDEを持つことがお勧め
もし本格的にKotlinを学びたいのであれば、ツールを導入して専用の IDEを持った方が良いでしょう。Androidでやるのであれば AndroidStudio、Android以外であればIntelliJ IDEAを使うことが個人的にはおすすめです。
特に、IntelliJ IDEA はKotlinの習得に有用な機能を多く備えていると思っています。なんといっても、Kotlinの開発元でもあるJetBrains が開発していますから機能面では申し分ないでしょう。
たとえばKotlinのバージョンが更新されれば、新バージョン対応のプラグインも即リリースされます。Kotlinの旧バージョンから新バージョンに自動でマイグレーションする機能も備わっているなど、Kotlin習得に際し非常に好相性なツールです。
JavaのコードをそのままKotlinのソースにコピー&ペーストすれば、Kotlinのコードに自動変換してくれる機能もIntelliJ IDEAには備わっています。あとで修正が必要な箇所も多少は発生しますので過信は禁物ですが、それができるだけでも相当に便利だと感じられるはずです。
またIntelliJ IDEAは、「Kotlinらしいコードの書き方」を随時提案してくれる機能も持っています。表示されるガイダンスに則ってコードの修正を行いながらリファクタリングの方法を習得していけるため、特段難しさも感じにくいかと思います。
JavaからKotlinへの移行を図っていて、できるだけ早くKotlinに慣れたいという方には、ぜひIntelliJ IDEAの活用をおすすめしたいです。
3. ハンズオンのエクササイズ、お勧めのサイト
ー Kotlin Koans “Kotlin Koans”という、Kotlinのプログラミング演習(練習問題)を集めた公式エクササイズがあります。
ー JetBrains 先ほど、JetBrainsも、初歩から順を追って学習ができます。
計50個ほどある問題をすべてこなせる頃には、かなりKotlinに関して詳しくなっているのではないかと思います。
6. Kotlinユーザのためのイベント
定期的に開催しているイベントについて
1. 「日本Kotlinユーザグループ」 Kotlinユーザのために定期的なイベントを開催しています。「日本Kotlinユーザグループ」は日本最大のKotlinに関するインターネットコミュニティで、現在1,464名の参加ユーザがいます。
日本Kotlinユーザグループは「KotlinFest」というイベントを主催しています。Kotlinだけに絞ったテーマを設け、1日かけて15個ぐらいの講演を行うような内容となっています。
日本Kotlinユーザグループ: https://kotlin.connpass.com/
2. 「KEEP」 GitHub上には「KEEP」という世界規模のKotlinコミュニティがあります。
3. Kotlin公式による「KotlinConf」 Kotlin公式による「KotlinConf」というオフラインでのカンファレンスも毎年開催されています。KotlinConfに実際に参加することは難しくても、ライブストリーミングが行われるためどこにいてもオンライン参加が可能です。ご自身でプログラミングを学ぶことに加え、コミュニティに積極参加して情報を追って行けば、さらにKotlinを楽しみながら習得できるかと思います。 ※今年の開催はコロナウイルスのため中止というアナウンスがありました。
Kotlinを始めてみたいとお考えの方なら、コミュニティに参加することでよりKotlinを深く理解できますし、面白さも感じられると思います。
最後に
Kotlinに触っていてお悩みが出てきたときには、Kotlinの公式サイトをまめにご覧になることがおすすめです。公式だけになんといっても情報のリリースが速いですし、言語の解説や文法の解説のみならず、新たな機能が入った背景なども詳しく説明してくれています。
そのため、公式サイトに記載されている内容が最も理解しやすいのではないかと思います。
公式サイト以外では、手前味噌ではありますが私の著書『Kotlinスタートブック』もおすすめです。現在ですと若干情報が古くなっている部分もありますが、学習に使える箇所はまだまだ豊富にあると考えています。
■関連記事のご紹介: