この記事では、2019年8月28日に開催したイベント「Androidアプリ開発とKotlin~Androidアプリ開発のプログラミング言語はJavaからKotlinへ~」をレポートします。書籍『作ればわかる!Androidプログラミング Kotlin対応』の著者である金宏 和實さんを講師にお迎えし、Kotlinの基礎を学んだほか、Android Studioを使って実際に簡単なアンドロイドアプリを作りました。
・KotlinはJavaよりも、簡潔に書けることを目標にした言語
・Javaのライブラリを利用する際にとても有効な、SAM変換
・Android Studioはさまざまなリソースを統合管理し、開発できるプログラミング環境
・アンドロイドアプリを作ったら、人に見せて意見や感想を聞いてみよう
【講師プロフィール】
金宏 和實さん
株式会社イーザー代表取締役副社長。アプリケーション開発とライター活動を行う。プログラミングの楽しさを伝えることをテーマとしており、NPO法人NATで小中学生を相手にロボット・プログラミングを教えたりもしている。平成30年、31年前期富山大学芸術文化学部非常勤講師(プログラミング・リテラシー)。主な著書に『作ればわかる! Android プログラミング Kotlin対応』『作ればわかる! Android プログラミング』『ベテランが丁寧に教えてくれる データベースの知識と実務』(ともに翔泳社)、『はじめるPython! ゼロからのゲームプログラミング』『エクセルだけで手軽に楽しむプログラミング超入門』(ともに日経BP社)などがある。
Kotlin(コトリン)とは?言語の特徴
今回のイベントはハンズオン形式で、実際に自分の手でアンドロイドアプリを作るというもの。受講者は各自ノートPCを持ち込み、あらかじめKotlinやAndroid Studioをインストールして臨みました。
Kotlinは開発したプログラムがJava仮想マシン上で動作する、いわゆる「JVM言語」に分類されます。そのため、Javaとの間に文法的な互換性はありませんが、互いのプログラムを呼び出せるなど、相互運用が可能です。
そして重要なのが、KotlinはJavaよりも“簡潔に書けることを目標にした言語”ということ。具体例を3つ挙げてくださいました。
Kotlinでは、変数の宣言にvalとvarを使います。valはイミュータブル(変更不可能)、varはミュータブル(変更可能)であることを示します。
var b = "Hello" // 変数bは値を変更できる
valで宣言した変数はあとから値を変更することができません。Javaでfinal修飾子を付けた場合と同様です。一方のvarは、あとから値を変更できます。
従来の言語のように定数と変数で使い分けるのではなく、「その変数は本当にvarで宣言する必要がありますか? valでいい場合は、なるべくvalを使ってね!」というのが、Kotlinの考え方だそうです。
ちなみにKotlinでは、末尾のセミコロン(;)も省略できます。これも書きやすさの一つかもしれません。
Javaでは、誤ってNULLポインタ(何のオブジェクトも参照しないポインタ)を叩く(参照する)、いわゆるヌルポ(ヌルポインタ例外:Null Pointer Exception)という実行時エラーが発生してしまい、プログラムが停止してしまいます。一方Kotlinでは、null許容型と安全呼び出し演算子というものがあり、これによりヌルポを事前に検出したり、実行時に回避したりすることができます。
nullを入れる場合には、型名の後ろに「?」を付けることでコンパイルエラーや実行時エラーを回避させることができます。
str?.toUpperCase() // 関数は実行されず戻り値NULLを返す
Javaでは関数型インターフェイスを引数として渡すとき、ラムダ式で渡すことができます。Kotlinでも同様に、Javaインターフェイスでメソッドを1つしか持たない「SAM型のメソッド」を呼び出す際に、引数をラムダ式で渡すことができます。これをSAM変換と呼び、Javaのライブラリを利用する際などに、とても有効だそうです。
Android Studioを使って、簡単なアプリを作ってみよう
Kotlinの特長について知ったあとは、Android Studioを使ったハンズオン形式で、実際にプログラミングを進めていきます。題材は金宏さんの著書でも紹介されている「ハイ&ローゲーム」です。
まずAndroid Studioを起動し、あらかじめ金宏さんが用意してくださったトランプの画像を読み込ませます。
そして金宏さんの著書を参照しながら、テキストビューやボタンの配置、背景色を変更していきます。
ちなみに、このときレイアウトエディタ上に表示される波線を「制約」と呼びます。「制約」を使うことで、アプリを実行する端末の画面サイズやアスペクト比が異なっていても、常に右上隅や左右中央に表示するといった、相対的なバランスを保ったレイアウトを可能にします。
このプログラムでは、テキストビューに表示させる文字列をstrings.xmlにリソースとしてまとめて記述しています。これは多言語対応を容易にするためだそうです。
画面レイアウトが出来上がったら、次にメインとなるソースコードを記述していきます。こちらもあらかじめ用意してくださったものだったため、指定の場所にコピー&ペースト。その内容を、金宏さんが説明してくださいました。
アンドロイドからアプリを起動すると、最初のアクティビティ(画面)が前面に表示されます。アクティビティは、同じアプリからの別画面呼び出しや他のアプリの起動などにより、別のアクティビティが前面表示になったり、非表示になったりする場合もあります。さらに、その状態から再び前面表示に戻ることもあります。こうしたアクティビティの状態変化によって呼び出されるメソッドを、ライフサイクルコールバックメソッドと呼ぶそうです。
ゲームのソースコードは、基本的にライフサイクルコールバックメソッドのうち、onResumeメソッドをオーバライドして記述していきます。こうすることでアプリ起動時や、他アプリによる中断から復帰したときにも、アクティビティが常に前面に表示されるようになります。
アクティビティの中には、ライフサイクルに関係のないメソッドもあります。そうしたメソッドはライフサイクルメソッドをオーバライドせず、独自に作成していきます。
そして、開発の途中過程にエミュレータで実行してみたいといったときに役立つのが、logメソッドです。logメソッドは途中でログを吐き出します。そのため、プログラム開発中であっても、各種の検証が行えて便利だということを教えていただきました。
金宏さんは「コードの中身は思い切り駆け足でした」と言いながらも、イベントの限られた時間内で、Kotlinの文法なども含め、サンプルプログラムがどのような処理をしているかも一通り説明してくださいました。
また、「アンドロイドアプリを作ったら、自分のアンドロイド端末に入れてどこにでも持ち歩けるため、人に見せて自慢をしたり、感想を聞けるのも魅力。いろいろなものにチャレンジしてほしいですね」と、Kotlinプログラマにエールを送ってくださいました。
Android StudioとKotlinによるアンドロイドアプリ開発は、初心者であっても理解しやすく、今回のサンプルに限らず、いろいろなアプリを作ってみようと思わせてくれたかと思います。株式会社リクルートスタッフィングが運営するITSTAFFINGでは、弊社に派遣登録いただいている皆さまのスキル向上を支援するこのようなイベントを、定期的に開催しています。皆さまのご参加をお待ちしております。