SlideShare a Scribd company logo
Copyright  (C) 2018 Toranoana Inc. All Rights Reserved.
Kotlinではじめる
Webアプリケーション入門
虎の⽳ 開発室
唐崎 蓉⼦
1
Copyright  (C) 2018 Toranoana Inc. All Rights Reserved.
タイムテーブル
2
時刻 内容
19:30 開会案内・会場説明 等
19:35 Kotlin について
20:00 開発環境セットアップ & 休憩
20:30 フレームワークとライブラリについて+ ハンズオン
20:50 演習
21:30 終了
はじめに
3
Copyright  (C) 2018 Toranoana Inc. All Rights Reserved.
自己紹介
‣ 唐崎蓉⼦ ( Yoko Karasaki )
‣ 株式会社 虎の⽳ 開発室
‣ PHP / Ionic (Angular) / Kotlin / (Ruby)
‣ 今期のアニメ
‣ ダリフラ / ゆるキャン△ / 宇宙よりも遠い場所
4
Copyright  (C) 2018 Toranoana Inc. All Rights Reserved.
対象
‣ Kotlinで何かWebサービスを作ってみたい
‣ Java⾔語開発経験者で、Kotlin⾔語も興味がある
‣ アニメ・漫画などオタク向けのWebサービスを

作ってみたい
5
Copyright  (C) 2018 Toranoana Inc. All Rights Reserved.
勉強会のゴール
‣ Kotlin の特徴を理解する
‣ Kotlin で簡単な Web アプリケーションが作れる
6
Copyright  (C) 2018 Toranoana Inc. All Rights Reserved.
進め方
7
‣ Kotlin の簡単な説明とハンズオン(+演習)
‣ 分からない部分は随時質問を受け付けます!
‣ 周りのスタッフに聞いてもOK!

(社員証をつけています)
Kotlin について
8
Copyright  (C) 2018 Toranoana Inc. All Rights Reserved.
Kotlin とは?
‣ Java VM ⾔語
‣ 100% interoperable with Java

(Javaと完全互換性があり、相互運⽤が可能)
‣ 型推論付き静的型付け
‣ セミコロンレス
9
Copyright  (C) 2018 Toranoana Inc. All Rights Reserved.
文法
10
class MyClass : BaseClass {
fun main(args: Array<String>) : Int {
var len = 0
for (arg in args) {
len = arg.length
}
return len
}
}
public class MyClass extends BaseClass {
public int main(ArrayList<String> args) {
int len = 0;
for (String arg : args) {
len = arg.length();
}
return len;
}
}
‣ Kotlin
‣ Java
Copyright  (C) 2018 Toranoana Inc. All Rights Reserved.
変数の定義(val / var)
11
fun main() {
val readOnly: String = "Read Only"
var writable: String = "Writable"
readOnly = "Can't change" // NG
writable = "Changed!" // OK
}
val 読み込み専⽤・変更不可
var 読み込み・書き換え可能
Copyright  (C) 2018 Toranoana Inc. All Rights Reserved.
Nullable/Null許容 (Optional)
12
fun getLength(str: String?): Int? {
return str?.length
}
‣ 型に ? をつけると Nullable(Null許容) になる
‣ ?. は safe call operator
‣ str が nullでない 場合のみ実⾏される
※ Java も標準ライブラリには Optional がある
Copyright  (C) 2018 Toranoana Inc. All Rights Reserved.
型
13
‣ Double
‣ Float
‣ Long
‣ Int
‣ Short
‣ Byte
‣ Char
‣ Boolean
‣ String
‣ Array
Copyright  (C) 2018 Toranoana Inc. All Rights Reserved.
特殊な型 Any
14
‣ 全ての型を代⼊可能
‣ null と Optional 型(Null許容)は⼊れられない
fun main() {
val optional: String? = "optional"
var value: Any
value = 1 // OK
value = "hoge" // OK
value = optional // NG
value = null // NG
}
Copyright  (C) 2018 Toranoana Inc. All Rights Reserved.
特殊な型 Unit
15
‣ Java で⾔うところの void
‣ 関数返り値の型を省略した場合は Unit になる
fun main(value: String?) {
println(value)
}
// ↑↓ 同じ
fun main(value: String?): Unit {
println(value)
}
Copyright  (C) 2018 Toranoana Inc. All Rights Reserved.
特殊な型 Nothing
16
‣ 値が存在しないことを表す
‣ 他の全ての型に代⼊可能な型
‣ 関数の返り値に指定すると、⼊ったら抜けない

関数になる
fun fail(message: String): Nothing {
logger.error("Error message : $message")
throw IllegalStateException(message)
}
Copyright  (C) 2018 Toranoana Inc. All Rights Reserved.
特殊な型 Nothing
17
fun getName(user: User) {
val name = user.name
?: throw Exception("User is required")
}
‣ エルビス演算⼦
‣ ?: 前が null でない時は

?: の前を評価
‣ null の時は ?: の後

を評価
Copyright  (C) 2018 Toranoana Inc. All Rights Reserved.
特殊な型 Nothing
18
fun getName(user: User) {
val name = user.name
?: throw Exception("User is required")
}
fun fail(message: String): Nothing {
logger.error("Error message : $message")
throw IllegalStateException(message)
}
fun getName(user: User) {
val name = user.name
?: fail("User is required")
}
Copyright  (C) 2018 Toranoana Inc. All Rights Reserved.
Data Class
// Java
public class User {
private String name;
private int age;
}
// Kotlin
data class User(
val name: String,
val age: Int
)
19
‣ データを保持するためのクラス
Copyright  (C) 2018 Toranoana Inc. All Rights Reserved.
Data Class
public class User {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
class MyClass {
public void main(args:Array<String>) {
User user = new User();
user.setName("My Name");
user.setAge(10);
System.out.println(user.getName());
}
}
20
‣ Java の場合
Copyright  (C) 2018 Toranoana Inc. All Rights Reserved.
Data Class
data class User(
val name: String,
val age: Int
)
class MyClass {
fun main(args: Array<String>) {
val user = User("My Name", 20)
println(user.name)
}
}
21
‣ Kotlin の場合
Copyright  (C) 2018 Toranoana Inc. All Rights Reserved.
参考リンク・ドキュメント
22
1. Kotlin 公式ドキュメント
‣ http://kotlinlang.org/docs/reference/
2. Kotlin ドキュメント⽇本語版(⾮公式)
‣ https://dogwood008.github.io/kotlin-web-site-ja/docs/reference/
3. Kotlin勉強会(第1回)の資料
‣ https://www.slideshare.net/toranoana-lab/kotlin-88458802
本⽇配った補⾜資料も是⾮ご活⽤ください!
開発環境の

セットアップ
23
https://toranoana.github.io/kotlin-webapp/
Copyright  (C) 2018 Toranoana Inc. All Rights Reserved.
今日作成するもの
‣ アニメ情報取得 API を使⽤して、

今期のアニメ⼀覧・詳細を表⽰
‣ http://api.moemoe.tokyo/anime/v1/master/2018/1?ogp=1
24
Copyright  (C) 2018 Toranoana Inc. All Rights Reserved.
手順
1. IntelliJ Idea のインストール
2. JDK のパスを確認 / gradle.properties 設定
3. プロジェクトのインポート
4. ビルド / 動作確認
25
※ 動作確認後に休憩をはさみます
Copyright  (C) 2018 Toranoana Inc. All Rights Reserved.
ドキュメント
26
1.リポジトリ
‣ https://github.com/toranoana/kotlin-webapp.git
2. ハンズオン⽤ドキュメント
‣ https://toranoana.github.io/kotlin-webapp/
Copyright  (C) 2018 Toranoana Inc. All Rights Reserved.
IntelliJ IDEA / JDK
‣ 以下のインストール
27
IntelliJ IDEA https://www.jetbrains.com/idea/
Java SE

Development Kit 

(JDK)
http://www.oracle.com/technetwork/
java/javase/downloads/jdk8-
downloads-2133151.html
Copyright  (C) 2018 Toranoana Inc. All Rights Reserved.
プロジェクトの準備
$ git clone https://github.com/toranoana/kotlin-webapp.git
28
‣ Git のリポジトリを clone
‣ または zip をダウンロードして解凍
Copyright  (C) 2018 Toranoana Inc. All Rights Reserved.
JDK のパスを確認(Mac)
$ /usr/libexec/java_home -V
Matching Java Virtual Machines (1):
9.0.4, x86_64:"Java SE 9.0.4" /Library/
Java/JavaVirtualMachines/jdk-9.0.4.jdk/
Contents/Home
/Library/Java/JavaVirtualMachines/
jdk-9.0.4.jdk/Contents/Home
29
‣ Mac の場合
Copyright  (C) 2018 Toranoana Inc. All Rights Reserved.
JDK のパスを確認(Win)
30
‣ 多くの場合は以下にインストールされている

( jdk1.8.0 はバージョンにより変わる)
‣ C:Program FilesJavajdk1.8.0binjavac
‣ C:Program Files(x_86)Javajdk1.8.0binjavac
Copyright  (C) 2018 Toranoana Inc. All Rights Reserved.
プロジェクトの準備
31
1. IntelliJ を起動
2. [ Import Project ] から

./kotlin-webapp/build.gradle を選択
Copyright  (C) 2018 Toranoana Inc. All Rights Reserved.
JDKのパス設定
32
※ ⾃分の環境の JDK を選択する

  (”Use Project SDK” の⽅ではありません)
Copyright  (C) 2018 Toranoana Inc. All Rights Reserved.
Gradle ツールウィンドウ
33
‣ Gradleのツールウィンドウを開く
‣ View -> Tool Windows -> Gradle
Copyright  (C) 2018 Toranoana Inc. All Rights Reserved.
ビルド
34
‣ Gradleツールウィンドウ内の

kotlin-webapp

-> Tasks

-> application

-> bootRun
Copyright  (C) 2018 Toranoana Inc. All Rights Reserved.
ビルド
‣ http://localhost:8080/
35
Copyright  (C) 2018 Toranoana Inc. All Rights Reserved.
ビルド
1. コード変更後、変更を反映するには再度

bootRun を実⾏
‣ kotlin-webapp

-> Tasks

-> application

-> bootRun
2. http://localhost:8080/ 

をリロード
36
フレームワーク / ライブラリ
について
37
Copyright  (C) 2018 Toranoana Inc. All Rights Reserved.
フレームワーク
38
要素
フレームワーク名
ライブラリ名
説明
Web
Framework
Spring Boot 2.0
Webアプリケーションを
開発する際のフレームワーク
テンプレート

エンジン
Thymeleaf
純粋な HTML として

テンプレートを記述できる
HTTP通信 Fuel
Kotlin で書かれた
HTTP 通信ライブラリ
JSONパース Gson
JSONデータと
Java オブジェクトを相互に変換
Copyright  (C) 2018 Toranoana Inc. All Rights Reserved.
アニメ情報取得 API
39
{
"title_short2": "",
"twitter_account": "milkyholmes",
"public_url": "https://sp.bushiroad.com/special_tv/",
"title_short1": "ミルキィホームズ",
"sex": 0,
"ogp": {
"og_title": "",
"og_type": "",
"og_description": "",
"og_url": "",
"og_image": "",
"og_site_name": ""
},
"twitter_hash_tag": "milkyholmes",
"id": 673,
"sequel": 5,
"created_at": "2018-01-07 20:29:38.0",
"city_name": "",
"cours_id": 17,
"title": "探偵オペラ ミルキィホームズ アルセーヌ 華麗なる欲望",
"city_code": 0,
"title_short3": "",
‣ http://api.moemoe.tokyo/anime/v1/master/2018/1?ogp=1
40
デモ
演習
41
Copyright  (C) 2018 Toranoana Inc. All Rights Reserved.
演習 詳細ページの作成・遷移
‣ http://localhost:8080/detail/?id=673 

42
NO IMAGE
解説(デモ)
43
Copyright  (C) 2018 Toranoana Inc. All Rights Reserved.
おさらい
44
‣ Kotlin の基本的な⽂法・特徴
‣ SpringBoot + Thymeleaf を使って Kotlin で

簡単な Web アプリケーションの作成
Copyright  (C) 2018 Toranoana Inc. All Rights Reserved.
参考リンク・ドキュメント
45
‣ Kotlin 公式ドキュメント
‣ http://kotlinlang.org/docs/reference/
‣ Try Kotlin: Simplest version
‣ https://try.kotlinlang.org

More Related Content

PDF
Redmineの画面をあなた好みにカスタマイズ - View customize pluginの紹介 - Redmine Japan 2020
PDF
View customize pluginを使いこなす
PPTX
このPHP QAツールがすごい!2019
PDF
View customize1.2.0の紹介
PDF
ノンプログラマでも今日から使える「Git」でバージョン管理
PPTX
講演資料: コスト最適なプライベートCDNを「NGINX」で実現するWeb最適化セミナー
PDF
Node RED で実現する製造業の DX
PPTX
インセプションデッキの紹介
Redmineの画面をあなた好みにカスタマイズ - View customize pluginの紹介 - Redmine Japan 2020
View customize pluginを使いこなす
このPHP QAツールがすごい!2019
View customize1.2.0の紹介
ノンプログラマでも今日から使える「Git」でバージョン管理
講演資料: コスト最適なプライベートCDNを「NGINX」で実現するWeb最適化セミナー
Node RED で実現する製造業の DX
インセプションデッキの紹介

What's hot (20)

PDF
ドメイン駆動設計 失敗したことと成功したこと
PDF
View customize plugin for Redmineの紹介 (2019年版)
PDF
デザイナのためのGit入門
PDF
GoによるiOSアプリの開発
PDF
ドメイン駆動設計のためのオブジェクト指向入門
PDF
エキスパートPythonプログラミング改訂3版の読みどころ
PDF
人生がときめくAPIテスト自動化 with Karate
PDF
New Features of DotNet 6 Blazor WASM
PDF
Redmineとgitの 連携利用事例
PDF
C言語なWebSocketの遊び方。
PPTX
心理的安全性と、Veinの紹介 Psychological safety and introduction of Vein
PDF
いつやるの?Git入門 v1.1.0
PPTX
2018/1/30 Django勉強会
PDF
うちのRedmineの使い方(2)
PDF
「情報」を「書く」ということ(仮) #RedmineJapan
PPTX
PHP AST 徹底解説
PDF
アジャイルジャーニー
PDF
45分間で「ユーザー中心のものづくり」ができるまで詰め込む
PDF
GoによるWebアプリ開発のキホン
PDF
はじめてのGit forデザイナー&コーダー
ドメイン駆動設計 失敗したことと成功したこと
View customize plugin for Redmineの紹介 (2019年版)
デザイナのためのGit入門
GoによるiOSアプリの開発
ドメイン駆動設計のためのオブジェクト指向入門
エキスパートPythonプログラミング改訂3版の読みどころ
人生がときめくAPIテスト自動化 with Karate
New Features of DotNet 6 Blazor WASM
Redmineとgitの 連携利用事例
C言語なWebSocketの遊び方。
心理的安全性と、Veinの紹介 Psychological safety and introduction of Vein
いつやるの?Git入門 v1.1.0
2018/1/30 Django勉強会
うちのRedmineの使い方(2)
「情報」を「書く」ということ(仮) #RedmineJapan
PHP AST 徹底解説
アジャイルジャーニー
45分間で「ユーザー中心のものづくり」ができるまで詰め込む
GoによるWebアプリ開発のキホン
はじめてのGit forデザイナー&コーダー
Ad

Similar to Kotlinではじめる Webアプリケーション入門 (20)

PPTX
2018/2/20 Kotlin勉強会
PDF
Kotlinアンチパターン
PPTX
Kotlin 使いになりました
PPTX
YJTC18 C-1 Kotlin導入の状況と展望
PPTX
Kotlin が公式サポートになったので Kotlin の話
PPTX
Java で書かれた Android アプリに Kotlin を適用させていく
PPTX
Java → Kotlin 変換 そのあとに。
PDF
KotlinでWebアプリ開発
PPTX
Java で書かれたAndroid アプリに Kotlin を適用させていく
PDF
Kotlinの紹介
PDF
Kotlin handson
PPTX
Java → Kotlin 変換 そのあとに。
PDF
[コデアル][Programming24]Androidアプリ勉強会01
PDF
Kotlinの紹介
PPTX
DroidKaigi アプリの内部を見る
PPTX
PDF
Kotlinことはじめ -まずは触って動かしてみよう-
PDF
【とらのあな主催】オタクがKotlinを追うライトニングトークイベント
PDF
Programming24 第2回androidアプリ勉強会
PDF
Kotlinのwebフレームワーク探訪
2018/2/20 Kotlin勉強会
Kotlinアンチパターン
Kotlin 使いになりました
YJTC18 C-1 Kotlin導入の状況と展望
Kotlin が公式サポートになったので Kotlin の話
Java で書かれた Android アプリに Kotlin を適用させていく
Java → Kotlin 変換 そのあとに。
KotlinでWebアプリ開発
Java で書かれたAndroid アプリに Kotlin を適用させていく
Kotlinの紹介
Kotlin handson
Java → Kotlin 変換 そのあとに。
[コデアル][Programming24]Androidアプリ勉強会01
Kotlinの紹介
DroidKaigi アプリの内部を見る
Kotlinことはじめ -まずは触って動かしてみよう-
【とらのあな主催】オタクがKotlinを追うライトニングトークイベント
Programming24 第2回androidアプリ勉強会
Kotlinのwebフレームワーク探訪
Ad

More from 虎の穴 開発室 (20)

PDF
FizzBuzzで学ぶJavaの進化
PDF
Railsのデバッグ どうやるかを改めて確認する
PDF
虎の穴ラボ エンジニア採用説明資料 .pdf
PDF
Deno Deployと組み合わせるのに Upstashをおすすめしたい.pdf
PDF
toranoana.deno #6 アジェンダ 採用説明
PDF
Deno 向け WEB 開発用のツールを作ったので 紹介します
PDF
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
PDF
GCPの画像認識APIの紹介
PDF
【エンジニアの勉強法ハックLT- vol.7】ゲームから学んだ勉強のこと
PDF
GitHub APIとfreshで遊ぼう
PDF
通販開発部の西田さん「通販開発マネジメントの5ルール」
PDF
社内DX推進!非エンジニア向けにプログラミング講座を実施してみた!
PDF
セキュリティを強化しよう!CloudArmorの機能解説
PDF
JavaScript LT会 〜 React.js Node.js歓迎 〜 Deno で やってみるweb開発
PDF
Amplify Studioを使ってみた
PDF
いいテスト会 (スプリントレビュー) をやろう!
PDF
【Saitama.js】Denoのすすめ
PDF
虎の穴ラボ Tech day#3 チームで戦う!とらのあな通販冬の大感謝祭でのフロント開発について
PDF
【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜
PDF
虎の穴ラボ TechDay#3 フルリモート率100%!リモートワークを可能にするマネージメント
FizzBuzzで学ぶJavaの進化
Railsのデバッグ どうやるかを改めて確認する
虎の穴ラボ エンジニア採用説明資料 .pdf
Deno Deployと組み合わせるのに Upstashをおすすめしたい.pdf
toranoana.deno #6 アジェンダ 採用説明
Deno 向け WEB 開発用のツールを作ったので 紹介します
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
GCPの画像認識APIの紹介
【エンジニアの勉強法ハックLT- vol.7】ゲームから学んだ勉強のこと
GitHub APIとfreshで遊ぼう
通販開発部の西田さん「通販開発マネジメントの5ルール」
社内DX推進!非エンジニア向けにプログラミング講座を実施してみた!
セキュリティを強化しよう!CloudArmorの機能解説
JavaScript LT会 〜 React.js Node.js歓迎 〜 Deno で やってみるweb開発
Amplify Studioを使ってみた
いいテスト会 (スプリントレビュー) をやろう!
【Saitama.js】Denoのすすめ
虎の穴ラボ Tech day#3 チームで戦う!とらのあな通販冬の大感謝祭でのフロント開発について
【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜
虎の穴ラボ TechDay#3 フルリモート率100%!リモートワークを可能にするマネージメント

Kotlinではじめる Webアプリケーション入門

  • 1. Copyright  (C) 2018 Toranoana Inc. All Rights Reserved. Kotlinではじめる Webアプリケーション入門 虎の⽳ 開発室 唐崎 蓉⼦ 1
  • 2. Copyright  (C) 2018 Toranoana Inc. All Rights Reserved. タイムテーブル 2 時刻 内容 19:30 開会案内・会場説明 等 19:35 Kotlin について 20:00 開発環境セットアップ & 休憩 20:30 フレームワークとライブラリについて+ ハンズオン 20:50 演習 21:30 終了
  • 4. Copyright  (C) 2018 Toranoana Inc. All Rights Reserved. 自己紹介 ‣ 唐崎蓉⼦ ( Yoko Karasaki ) ‣ 株式会社 虎の⽳ 開発室 ‣ PHP / Ionic (Angular) / Kotlin / (Ruby) ‣ 今期のアニメ ‣ ダリフラ / ゆるキャン△ / 宇宙よりも遠い場所 4
  • 5. Copyright  (C) 2018 Toranoana Inc. All Rights Reserved. 対象 ‣ Kotlinで何かWebサービスを作ってみたい ‣ Java⾔語開発経験者で、Kotlin⾔語も興味がある ‣ アニメ・漫画などオタク向けのWebサービスを
 作ってみたい 5
  • 6. Copyright  (C) 2018 Toranoana Inc. All Rights Reserved. 勉強会のゴール ‣ Kotlin の特徴を理解する ‣ Kotlin で簡単な Web アプリケーションが作れる 6
  • 7. Copyright  (C) 2018 Toranoana Inc. All Rights Reserved. 進め方 7 ‣ Kotlin の簡単な説明とハンズオン(+演習) ‣ 分からない部分は随時質問を受け付けます! ‣ 周りのスタッフに聞いてもOK!
 (社員証をつけています)
  • 9. Copyright  (C) 2018 Toranoana Inc. All Rights Reserved. Kotlin とは? ‣ Java VM ⾔語 ‣ 100% interoperable with Java
 (Javaと完全互換性があり、相互運⽤が可能) ‣ 型推論付き静的型付け ‣ セミコロンレス 9
  • 10. Copyright  (C) 2018 Toranoana Inc. All Rights Reserved. 文法 10 class MyClass : BaseClass { fun main(args: Array<String>) : Int { var len = 0 for (arg in args) { len = arg.length } return len } } public class MyClass extends BaseClass { public int main(ArrayList<String> args) { int len = 0; for (String arg : args) { len = arg.length(); } return len; } } ‣ Kotlin ‣ Java
  • 11. Copyright  (C) 2018 Toranoana Inc. All Rights Reserved. 変数の定義(val / var) 11 fun main() { val readOnly: String = "Read Only" var writable: String = "Writable" readOnly = "Can't change" // NG writable = "Changed!" // OK } val 読み込み専⽤・変更不可 var 読み込み・書き換え可能
  • 12. Copyright  (C) 2018 Toranoana Inc. All Rights Reserved. Nullable/Null許容 (Optional) 12 fun getLength(str: String?): Int? { return str?.length } ‣ 型に ? をつけると Nullable(Null許容) になる ‣ ?. は safe call operator ‣ str が nullでない 場合のみ実⾏される ※ Java も標準ライブラリには Optional がある
  • 13. Copyright  (C) 2018 Toranoana Inc. All Rights Reserved. 型 13 ‣ Double ‣ Float ‣ Long ‣ Int ‣ Short ‣ Byte ‣ Char ‣ Boolean ‣ String ‣ Array
  • 14. Copyright  (C) 2018 Toranoana Inc. All Rights Reserved. 特殊な型 Any 14 ‣ 全ての型を代⼊可能 ‣ null と Optional 型(Null許容)は⼊れられない fun main() { val optional: String? = "optional" var value: Any value = 1 // OK value = "hoge" // OK value = optional // NG value = null // NG }
  • 15. Copyright  (C) 2018 Toranoana Inc. All Rights Reserved. 特殊な型 Unit 15 ‣ Java で⾔うところの void ‣ 関数返り値の型を省略した場合は Unit になる fun main(value: String?) { println(value) } // ↑↓ 同じ fun main(value: String?): Unit { println(value) }
  • 16. Copyright  (C) 2018 Toranoana Inc. All Rights Reserved. 特殊な型 Nothing 16 ‣ 値が存在しないことを表す ‣ 他の全ての型に代⼊可能な型 ‣ 関数の返り値に指定すると、⼊ったら抜けない
 関数になる fun fail(message: String): Nothing { logger.error("Error message : $message") throw IllegalStateException(message) }
  • 17. Copyright  (C) 2018 Toranoana Inc. All Rights Reserved. 特殊な型 Nothing 17 fun getName(user: User) { val name = user.name ?: throw Exception("User is required") } ‣ エルビス演算⼦ ‣ ?: 前が null でない時は
 ?: の前を評価 ‣ null の時は ?: の後
 を評価
  • 18. Copyright  (C) 2018 Toranoana Inc. All Rights Reserved. 特殊な型 Nothing 18 fun getName(user: User) { val name = user.name ?: throw Exception("User is required") } fun fail(message: String): Nothing { logger.error("Error message : $message") throw IllegalStateException(message) } fun getName(user: User) { val name = user.name ?: fail("User is required") }
  • 19. Copyright  (C) 2018 Toranoana Inc. All Rights Reserved. Data Class // Java public class User { private String name; private int age; } // Kotlin data class User( val name: String, val age: Int ) 19 ‣ データを保持するためのクラス
  • 20. Copyright  (C) 2018 Toranoana Inc. All Rights Reserved. Data Class public class User { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } } class MyClass { public void main(args:Array<String>) { User user = new User(); user.setName("My Name"); user.setAge(10); System.out.println(user.getName()); } } 20 ‣ Java の場合
  • 21. Copyright  (C) 2018 Toranoana Inc. All Rights Reserved. Data Class data class User( val name: String, val age: Int ) class MyClass { fun main(args: Array<String>) { val user = User("My Name", 20) println(user.name) } } 21 ‣ Kotlin の場合
  • 22. Copyright  (C) 2018 Toranoana Inc. All Rights Reserved. 参考リンク・ドキュメント 22 1. Kotlin 公式ドキュメント ‣ http://kotlinlang.org/docs/reference/ 2. Kotlin ドキュメント⽇本語版(⾮公式) ‣ https://dogwood008.github.io/kotlin-web-site-ja/docs/reference/ 3. Kotlin勉強会(第1回)の資料 ‣ https://www.slideshare.net/toranoana-lab/kotlin-88458802 本⽇配った補⾜資料も是⾮ご活⽤ください!
  • 24. Copyright  (C) 2018 Toranoana Inc. All Rights Reserved. 今日作成するもの ‣ アニメ情報取得 API を使⽤して、
 今期のアニメ⼀覧・詳細を表⽰ ‣ http://api.moemoe.tokyo/anime/v1/master/2018/1?ogp=1 24
  • 25. Copyright  (C) 2018 Toranoana Inc. All Rights Reserved. 手順 1. IntelliJ Idea のインストール 2. JDK のパスを確認 / gradle.properties 設定 3. プロジェクトのインポート 4. ビルド / 動作確認 25 ※ 動作確認後に休憩をはさみます
  • 26. Copyright  (C) 2018 Toranoana Inc. All Rights Reserved. ドキュメント 26 1.リポジトリ ‣ https://github.com/toranoana/kotlin-webapp.git 2. ハンズオン⽤ドキュメント ‣ https://toranoana.github.io/kotlin-webapp/
  • 27. Copyright  (C) 2018 Toranoana Inc. All Rights Reserved. IntelliJ IDEA / JDK ‣ 以下のインストール 27 IntelliJ IDEA https://www.jetbrains.com/idea/ Java SE
 Development Kit 
 (JDK) http://www.oracle.com/technetwork/ java/javase/downloads/jdk8- downloads-2133151.html
  • 28. Copyright  (C) 2018 Toranoana Inc. All Rights Reserved. プロジェクトの準備 $ git clone https://github.com/toranoana/kotlin-webapp.git 28 ‣ Git のリポジトリを clone ‣ または zip をダウンロードして解凍
  • 29. Copyright  (C) 2018 Toranoana Inc. All Rights Reserved. JDK のパスを確認(Mac) $ /usr/libexec/java_home -V Matching Java Virtual Machines (1): 9.0.4, x86_64:"Java SE 9.0.4" /Library/ Java/JavaVirtualMachines/jdk-9.0.4.jdk/ Contents/Home /Library/Java/JavaVirtualMachines/ jdk-9.0.4.jdk/Contents/Home 29 ‣ Mac の場合
  • 30. Copyright  (C) 2018 Toranoana Inc. All Rights Reserved. JDK のパスを確認(Win) 30 ‣ 多くの場合は以下にインストールされている
 ( jdk1.8.0 はバージョンにより変わる) ‣ C:Program FilesJavajdk1.8.0binjavac ‣ C:Program Files(x_86)Javajdk1.8.0binjavac
  • 31. Copyright  (C) 2018 Toranoana Inc. All Rights Reserved. プロジェクトの準備 31 1. IntelliJ を起動 2. [ Import Project ] から
 ./kotlin-webapp/build.gradle を選択
  • 32. Copyright  (C) 2018 Toranoana Inc. All Rights Reserved. JDKのパス設定 32 ※ ⾃分の環境の JDK を選択する
   (”Use Project SDK” の⽅ではありません)
  • 33. Copyright  (C) 2018 Toranoana Inc. All Rights Reserved. Gradle ツールウィンドウ 33 ‣ Gradleのツールウィンドウを開く ‣ View -> Tool Windows -> Gradle
  • 34. Copyright  (C) 2018 Toranoana Inc. All Rights Reserved. ビルド 34 ‣ Gradleツールウィンドウ内の
 kotlin-webapp
 -> Tasks
 -> application
 -> bootRun
  • 35. Copyright  (C) 2018 Toranoana Inc. All Rights Reserved. ビルド ‣ http://localhost:8080/ 35
  • 36. Copyright  (C) 2018 Toranoana Inc. All Rights Reserved. ビルド 1. コード変更後、変更を反映するには再度
 bootRun を実⾏ ‣ kotlin-webapp
 -> Tasks
 -> application
 -> bootRun 2. http://localhost:8080/ 
 をリロード 36
  • 38. Copyright  (C) 2018 Toranoana Inc. All Rights Reserved. フレームワーク 38 要素 フレームワーク名 ライブラリ名 説明 Web Framework Spring Boot 2.0 Webアプリケーションを 開発する際のフレームワーク テンプレート
 エンジン Thymeleaf 純粋な HTML として
 テンプレートを記述できる HTTP通信 Fuel Kotlin で書かれた HTTP 通信ライブラリ JSONパース Gson JSONデータと Java オブジェクトを相互に変換
  • 39. Copyright  (C) 2018 Toranoana Inc. All Rights Reserved. アニメ情報取得 API 39 { "title_short2": "", "twitter_account": "milkyholmes", "public_url": "https://sp.bushiroad.com/special_tv/", "title_short1": "ミルキィホームズ", "sex": 0, "ogp": { "og_title": "", "og_type": "", "og_description": "", "og_url": "", "og_image": "", "og_site_name": "" }, "twitter_hash_tag": "milkyholmes", "id": 673, "sequel": 5, "created_at": "2018-01-07 20:29:38.0", "city_name": "", "cours_id": 17, "title": "探偵オペラ ミルキィホームズ アルセーヌ 華麗なる欲望", "city_code": 0, "title_short3": "", ‣ http://api.moemoe.tokyo/anime/v1/master/2018/1?ogp=1
  • 42. Copyright  (C) 2018 Toranoana Inc. All Rights Reserved. 演習 詳細ページの作成・遷移 ‣ http://localhost:8080/detail/?id=673 
 42 NO IMAGE
  • 44. Copyright  (C) 2018 Toranoana Inc. All Rights Reserved. おさらい 44 ‣ Kotlin の基本的な⽂法・特徴 ‣ SpringBoot + Thymeleaf を使って Kotlin で
 簡単な Web アプリケーションの作成
  • 45. Copyright  (C) 2018 Toranoana Inc. All Rights Reserved. 参考リンク・ドキュメント 45 ‣ Kotlin 公式ドキュメント ‣ http://kotlinlang.org/docs/reference/ ‣ Try Kotlin: Simplest version ‣ https://try.kotlinlang.org