【前編】KotlinでWebアプリケーションを開発してみようハンズオン

イベント
仙台市をフィールドに先端技術と様々な産業を掛け合わせ、新事業の創出や先端IT人材の育成・交流によりイノベーションを生み出し、都市体験のアップデートを目指すプロジェクト「SENDAI X-TECH Innovation Project」。その一環として2019年11月2日から3日にかけて、仙台市で「KotlinでWebアプリケーションを開発してみよう!ハンズオン」が開催されました。その取り組みとイベントの様子をご紹介します。
【前編】KotlinでWebアプリケーションを開発してみようハンズオン

仙台で最新技術やトレンドを学び、新たな出会いを掴んでほしい

まずは同じテーブルに座った参加者同士で、「名前・何をしている人なのか・ハンズオンで学びたいこと」について自己紹介をし合い、親交を深めます。

2

オープニングトークは、本イベント主催者である、仙台市経済局産業振興課 荒木田理さんから「SENDAI X-TECH Innovation Project」のプロジェクト背景と概要・実績などについて。荒木田さんは、仙台市の課題である少子高齢化と人材流出を、IoTやAI、VR/AR、5Gなどの先端技術と様々な産業を掛け合わせて新事業を創出し、IT人材の育成・交流を支援することで仙台市をアップデートしていきたいと語りました。


▲仙台市経済局産業振興課 荒木田 理さん

まずは、Kotlinの基礎知識について学ぼう

今回の「KotlinでWebアプリケーションを開発してみようハンズオン」の講師を務めていただいたのは、日本Kotlinユーザグループ代表の長澤太郎さんです。

5 ▲Ubie株式会社 長澤 太郎さん 
早稲田大学基幹理工学部を卒業後、株式会社日立システムズ、エムスリー株式会社を経て、AI問診プロダクトを展開する医療スタートアップのUbie株式会社に入社。業務外の活動として、日本Kotlinユーザグループ代表、日本Javaユーザグループ幹事を務める事実上のKotlinエバンジェリスト。著書に「Kotlinスタートブック」など、共同訳書に「Kotlinイン・アクション」がある。

チューターとして参加者をサポートしてくれたのは、仙台市出身でKotlin Festスタッフも務めている星川貴樹さん。

6 ▲エムスリー株式会社 星川 貴樹さん
東北大学工学部、東北大学大学院情報科学研究科を卒業後、エムスリー株式会社に入社。仙台市出身。社外の活動として、Kotlin Festスタッフなど。

ハンズオン1日目のゴールは、「Kotlinで簡単なプログラムを実装することができる」こと。まずは、開発環境を構築するところからスタートしました。今回のハンズオンで必要となるツールは、「JDK」「IntelliJ IDEA + プラグイン」の2つです。

Kotlinはネイティブで動くものもありますが、基本的にはJavaの上で動くプログラミング言語。今回もターゲットをJavaとしているため、JDK(Java Development Kit)が必要になります。IntelliJ IDEAはJava用の統合開発環境で、2日目の課題アプリをスムーズに進めるために活用します。

7

JDK、IntelliJ IDEAをダウンロードし、インストールする作業を進める参加者の皆さん。同じテーブル同士でサポートし合うなど、なごやかな雰囲気の中でハンズオンが進められていきます。

8

「Kotlin」「Ktor」のプラグインインストールまで完了したところで、長澤太郎さんから、Kotlinの基礎知識について説明されました。

  • KotlinはJetBrainsにより開発されたプログラミング言語で、IntelliJ IDEAとも相性が良い
  • Javaと同じく、静的型付けオブジェクト指向言語に分類されている
  • コンパイルする前に型が解決されているので、エラーが少ない
  • オブジェクト指向言語で、関数型言語などのいいところを取り入れている
  • JVMやAndroidを主要なターゲットとして登場したが、現在はJavaScriptやNativeも重要な ターゲットとしている
  • 2011年に発表され、2016年に1.0がリリースされたまだ若い言語。

9

続いて、IntelliJ IDEAでHello Worldを表示される手順も説明されました。

10

Kotlinの文法や表現について学ぶ「Kotlin文法入門」

そして、長澤太郎さんいわく、Kotlinを語る上で一番アツいところだという「Kotlin文法入門」。リテラルや変数・型などについて、Kotlinの文法や表現について、わかりやすく解説。valやvarによって変数宣言を行い、宣言された型と矛盾するような値を代入するとコンパイルエラーとなることや、型を指定しなくても内部で判断してれる「型推論」という機能などが紹介されました。

11

12

休憩をはさみ、続いての講義は条件分岐について。テストの点数で「合格」「不合格」を条件分岐されるコードを例に、if-elseの式の使い方などが解説されました。

さらにif-elseに慣れるための課題が出され、実際にコードを書いてみるハンズオンに取り組みます。0以上500以下の中からランダムに選択された整数に対して、「nが選ばれました」と出力すること、偶数なら「これは偶数です」と出力し、奇数なら「これは奇数です」と出力するようにコードを書く問題です。

この日初めて手を動かすハンズオンに、質問なども積極的にしながら、皆さん真剣に取り組んでいました。

15

それぞれ課題に取り組んだ後は、解答とそのコードに対する解説が行われました。

16

ハンズオン後は、TECH PLAY運営が用意したお弁当とお茶でランチタイム。参加者同士で談笑する方や、午前中の課題や午後からに備えて予習に取り組む方たちも見られました。

「FizzBuzz」問題にKotlinで挑戦!

午後はKotlinの文法について、さらに深く学んでいきます。「条件分岐」について簡単に復習した後、制御構文の一つである「繰り返し」の構文について解説されました。

いくつかある中から、今回紹介されたのは「for」についての構文です。「listOf」というリスト生成関数を使った繰り返し構文なども紹介されました。

課題として出されたのは、「FizzBuzz」問題。0から100までの整数を、3で割り切れる場合は「Fizz」、5で割り切れる場合は「Buzz」、両者で割り切れる場合は「Fizz Buzz」と出力することを条件にプログラミングする問題です。

約20分で「FizzBuzz」問題に真剣に取り組む参加者の皆さん。時間が余った人はさらに、1から100まで、3の倍数と3の付く数字のみ、後ろに「!」を付ける「世界のナベアツ問題」に挑戦。課題タイム後は長澤さんから解答例や応用例などが紹介されました。

Kotlinでいろんな関数を作って遊ぼう

続いては、Kotlinの「関数」について。ここまではメインの関数を見てきましたが、関数を自分で作って使うところを学んでいきます。独自のadd関数を題材に、キーワードfun、引数の取り方、戻り値の返し方などの構文例が紹介されました。

そして、以下の5つの関数を定義する課題に取り組みます。

  • 引数として与えられた整数を2乗した数を返す関数「square」
  • 引数として与えられた2つの整数のうち、大きい方を返す関数「max」
  • 引数として与えられた整数が偶数ならrueを、それ以外はfalseを返す関「isEven」
  • 引数として与えられた整数の階乗を返す関数「factorial」
  • 引数として与えられた整数に、3が含まれるかどうかを返す関数「containsThree」

課題の解答と制御構文と関数に対してまとめが解説された後、Kotlinに対する質疑応答が行われ、積極的に質問が寄せられました。

Kotlinの「クラス」について学ぶ

次のトピックは「クラス」。クラスの定義やインスタンスの生成、プロパティなどを例文で紹介。また、メソッドの説明と使い方などが解説されました。

22

クラスの定義に関する課題は、以下の2つのプロパティと3つのメソッドを持つ「IntPair」というクラスを作ること。20分という制限時間内で取り組みます。

  • 2つのプロパティ
     first: Int
     second: Int
  • 3つのメソッド
     sum: firstとsecondの和を返す
     max: firstとsecondのうち大きい方を返す
     swap: firstとsecondが逆になったIntPairオブジェクトを返す

既存のクラスを継承して新しいクラスを定義する

休憩をはさみ、既存のクラスを継承して新しいクラスを定義するプログラミングについて、講義が行われました。新しいクラスには、継承元のクラスのプロパティやメソッドを受け継ぐことが可能です。その「継承」の仕組みについて、継承元から継承先のコードを分けて、詳しく説明されました。

さらに、Javaとの仕組みの違いや、その経緯や思想についてなどの解説、継承を前提とした「抽象クラス」、インタフェースの定義などについての講義が続きます。

Kotlinには、既存の型にメソッドを追加することができる「拡張関数」という機能があります。クラスの外に定義することができ、他人が作ったクラスに対してもメソッドが追加できます。

そして、拡張関数「meets」を定義する課題に取り組みます。

参加者からの質問にも丁寧に答えてくれる長澤太郎さん。

関数リテラルを使ってみよう

関数はオブジェクトなので、数や文字列と同じく関数に関数を渡したり、関数が関数を返したりできます。数や文字列と同様に、関数オブジェクトにもリテラルがあり、「ラムダ式」と「無名関数」が関数リテラルの記法として提供されています。

とにかくラムダ式を使ってみようということで、同じ繰り返し処理を行うコードをfor文をメソッド呼び出し+ラムダ式で説明があり、リストが提供するメソッド+ラムダ式のコード例や、関数オブジェクトと関数リテラルについての解説しました。

課題は、プログラムで解く数学の問題集「Project Euler」Problem 1から、以下の問題が出題されました。

  • 10未満の自然数のうち、3または5の倍数は3, 5, 6, 9であるが、その総和は23である
  • 1000未満の自然数のうち、3または5の倍数の総和を求めよ

Null安全を理解して、使いこなそう

長澤太郎さんいわく、従来JavaではNullをカジュアルに扱えるがゆえに、Nullに起因するバグが出やすいという問題がありました。そこでKotlinでは、Nullの可能性のあるものと、そうでないものを厳格に区別することでケアレスミスを防ぐ「Null安全」という機能があります。

Nullの可能性のある型(Nullable)は?をつけて表現することで、Nullの可能性のない型(NotNull)と区別します。Nullableの扱いはとことん慎重にする必要があると前置きしながら、if文などによるNullチェックや安全呼び出し、if文によるNullチェックを省略できる便利な記法、任意のオブジェクトに対して呼び出せる拡張関数「let」などが紹介されました。

1日目のハンズオン終了後は、ビールとピザで乾杯!

ハンズオン終了後は、講師の長澤太郎さん、星川貴樹さん、仙台市役所・佐藤伸洋さん、TECH PLAY 運営事務局・スタッフを交えて懇親会が開催されました。

仙台市役所・佐藤伸洋さんの音頭で乾杯。参加者の皆さんと、今後仙台でもこうしたハンズオンやコミュニティをアップデートしていこうと、楽しく盛り上がりました。

28

●仙台市主催のイベント

【12/7(土)~12/8(日)】SwiftでiPhoneアプリ作り体験!
【1/18(土)~1/19(日)】アプリUIデザイン実践ハンズオン
【2/7(土)~2/8(日)】デザインシンキング体験講座
【2/29(土)~3/1(日)】ビジネスプラン構築ワークショップ

後編はこちら! 【後編】KotlinでWebアプリケーションを開発してみようハンズオン

関連するイベント

おすすめのイベント

タグからイベントをさがす

おすすめのコラム