SlideShare a Scribd company logo
1 of 45
Download to read offline
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

What's hot

Deno で始めるフロントエンド
Deno で始めるフロントエンドDeno で始めるフロントエンド
Deno で始めるフロントエンド虎の穴 開発室
 
【20211202_toranoana.deno#3】denoでFFI
【20211202_toranoana.deno#3】denoでFFI【20211202_toranoana.deno#3】denoでFFI
【20211202_toranoana.deno#3】denoでFFI虎の穴 開発室
 
【20220120 toranoana.deno#4】denoでffiの続き
【20220120 toranoana.deno#4】denoでffiの続き【20220120 toranoana.deno#4】denoでffiの続き
【20220120 toranoana.deno#4】denoでffiの続き虎の穴 開発室
 
サーバサイドKotlinへの入門 Ktor編
サーバサイドKotlinへの入門 Ktor編サーバサイドKotlinへの入門 Ktor編
サーバサイドKotlinへの入門 Ktor編虎の穴 開発室
 
【Saitama.js】Denoのすすめ
【Saitama.js】Denoのすすめ【Saitama.js】Denoのすすめ
【Saitama.js】Denoのすすめ虎の穴 開発室
 
ドリコムを支える課金ライブラリを支えるJenkins
ドリコムを支える課金ライブラリを支えるJenkinsドリコムを支える課金ライブラリを支えるJenkins
ドリコムを支える課金ライブラリを支えるJenkinsGo Sueyoshi (a.k.a sue445)
 
社内ツールが支えるドリコムの社内勉強会文化 #metabenkyokai
社内ツールが支えるドリコムの社内勉強会文化 #metabenkyokai社内ツールが支えるドリコムの社内勉強会文化 #metabenkyokai
社内ツールが支えるドリコムの社内勉強会文化 #metabenkyokaiGo Sueyoshi (a.k.a sue445)
 
【20211027_toranoana.deno#2】とりあえずDenoを CloudRunで動かしてみる
【20211027_toranoana.deno#2】とりあえずDenoを CloudRunで動かしてみる【20211027_toranoana.deno#2】とりあえずDenoを CloudRunで動かしてみる
【20211027_toranoana.deno#2】とりあえずDenoを CloudRunで動かしてみる虎の穴 開発室
 
Introduction to JIT Compiler in JVM
Introduction to JIT Compiler in JVMIntroduction to JIT Compiler in JVM
Introduction to JIT Compiler in JVMKoichi Sakata
 
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能Yoshifumi Kawai
 
爆速でAndroidアプリを ビルドするための仕組み DeNA TechCon #denatechcon
爆速でAndroidアプリを ビルドするための仕組み DeNA TechCon #denatechcon爆速でAndroidアプリを ビルドするための仕組み DeNA TechCon #denatechcon
爆速でAndroidアプリを ビルドするための仕組み DeNA TechCon #denatechconYosaku Toyama
 
iOSレガシーコード改善ガイド〜マンガボックス開発における事例〜
iOSレガシーコード改善ガイド〜マンガボックス開発における事例〜iOSレガシーコード改善ガイド〜マンガボックス開発における事例〜
iOSレガシーコード改善ガイド〜マンガボックス開発における事例〜Kentaro Matsumae
 
Resemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコム
Resemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコムResemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコム
Resemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコムGo Sueyoshi (a.k.a sue445)
 
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践Yoshifumi Kawai
 
NextGen Server/Client Architecture - gRPC + Unity + C#
NextGen Server/Client Architecture - gRPC + Unity + C#NextGen Server/Client Architecture - gRPC + Unity + C#
NextGen Server/Client Architecture - gRPC + Unity + C#Yoshifumi Kawai
 
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現Yoshifumi Kawai
 

What's hot (20)

Deno で始めるフロントエンド
Deno で始めるフロントエンドDeno で始めるフロントエンド
Deno で始めるフロントエンド
 
【20211202_toranoana.deno#3】denoでFFI
【20211202_toranoana.deno#3】denoでFFI【20211202_toranoana.deno#3】denoでFFI
【20211202_toranoana.deno#3】denoでFFI
 
【20220120 toranoana.deno#4】denoでffiの続き
【20220120 toranoana.deno#4】denoでffiの続き【20220120 toranoana.deno#4】denoでffiの続き
【20220120 toranoana.deno#4】denoでffiの続き
 
サーバサイドKotlinへの入門 Ktor編
サーバサイドKotlinへの入門 Ktor編サーバサイドKotlinへの入門 Ktor編
サーバサイドKotlinへの入門 Ktor編
 
【Saitama.js】Denoのすすめ
【Saitama.js】Denoのすすめ【Saitama.js】Denoのすすめ
【Saitama.js】Denoのすすめ
 
ドリコムを支える課金ライブラリを支えるJenkins
ドリコムを支える課金ライブラリを支えるJenkinsドリコムを支える課金ライブラリを支えるJenkins
ドリコムを支える課金ライブラリを支えるJenkins
 
社内ツールが支えるドリコムの社内勉強会文化 #metabenkyokai
社内ツールが支えるドリコムの社内勉強会文化 #metabenkyokai社内ツールが支えるドリコムの社内勉強会文化 #metabenkyokai
社内ツールが支えるドリコムの社内勉強会文化 #metabenkyokai
 
GCPの画像認識APIの紹介
GCPの画像認識APIの紹介 GCPの画像認識APIの紹介
GCPの画像認識APIの紹介
 
【20211027_toranoana.deno#2】とりあえずDenoを CloudRunで動かしてみる
【20211027_toranoana.deno#2】とりあえずDenoを CloudRunで動かしてみる【20211027_toranoana.deno#2】とりあえずDenoを CloudRunで動かしてみる
【20211027_toranoana.deno#2】とりあえずDenoを CloudRunで動かしてみる
 
ドリコムのインフラCI
ドリコムのインフラCIドリコムのインフラCI
ドリコムのインフラCI
 
Introduction to JIT Compiler in JVM
Introduction to JIT Compiler in JVMIntroduction to JIT Compiler in JVM
Introduction to JIT Compiler in JVM
 
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
 
爆速でAndroidアプリを ビルドするための仕組み DeNA TechCon #denatechcon
爆速でAndroidアプリを ビルドするための仕組み DeNA TechCon #denatechcon爆速でAndroidアプリを ビルドするための仕組み DeNA TechCon #denatechcon
爆速でAndroidアプリを ビルドするための仕組み DeNA TechCon #denatechcon
 
iOSレガシーコード改善ガイド〜マンガボックス開発における事例〜
iOSレガシーコード改善ガイド〜マンガボックス開発における事例〜iOSレガシーコード改善ガイド〜マンガボックス開発における事例〜
iOSレガシーコード改善ガイド〜マンガボックス開発における事例〜
 
Resemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコム
Resemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコムResemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコム
Resemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコム
 
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
 
ヤフーにおけるHadoop Operations #tdtech
ヤフーにおけるHadoop Operations #tdtechヤフーにおけるHadoop Operations #tdtech
ヤフーにおけるHadoop Operations #tdtech
 
NextGen Server/Client Architecture - gRPC + Unity + C#
NextGen Server/Client Architecture - gRPC + Unity + C#NextGen Server/Client Architecture - gRPC + Unity + C#
NextGen Server/Client Architecture - gRPC + Unity + C#
 
Aerospike deep dive LDTs
Aerospike deep dive LDTsAerospike deep dive LDTs
Aerospike deep dive LDTs
 
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
 

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

俺が好きなのはJavaだけどJavaじゃない 〜虎の穴でのJava活用について〜
 俺が好きなのはJavaだけどJavaじゃない 〜虎の穴でのJava活用について〜 俺が好きなのはJavaだけどJavaじゃない 〜虎の穴でのJava活用について〜
俺が好きなのはJavaだけどJavaじゃない 〜虎の穴でのJava活用について〜虎の穴 開発室
 
Dockerで始める開発環境構築
Dockerで始める開発環境構築Dockerで始める開発環境構築
Dockerで始める開発環境構築虎の穴 開発室
 
はじめようVue3!ハンズオンでとらのあなラボのフロントエンドを学ぶ_20210611_TechDay#1
はじめようVue3!ハンズオンでとらのあなラボのフロントエンドを学ぶ_20210611_TechDay#1はじめようVue3!ハンズオンでとらのあなラボのフロントエンドを学ぶ_20210611_TechDay#1
はじめようVue3!ハンズオンでとらのあなラボのフロントエンドを学ぶ_20210611_TechDay#1虎の穴 開発室
 
Rails on GKEで運用するWebアプリケーションの紹介
Rails on GKEで運用するWebアプリケーションの紹介Rails on GKEで運用するWebアプリケーションの紹介
Rails on GKEで運用するWebアプリケーションの紹介Makoto Haruyama
 
Amplify Studioを使ってみた
Amplify Studioを使ってみたAmplify Studioを使ってみた
Amplify Studioを使ってみた虎の穴 開発室
 
JavaOne 2015 JDK Update (Jigsaw) #j1jp
JavaOne 2015 JDK Update (Jigsaw) #j1jpJavaOne 2015 JDK Update (Jigsaw) #j1jp
JavaOne 2015 JDK Update (Jigsaw) #j1jpYuji Kubota
 
Terraform with Bitbucket pipeline
Terraform with Bitbucket pipelineTerraform with Bitbucket pipeline
Terraform with Bitbucket pipelineMasatomo Ito
 
最新ゲームを支える文言
最新ゲームを支える文言最新ゲームを支える文言
最新ゲームを支える文言miki koganei
 
Cryogenでサイトつくろーじぇん
CryogenでサイトつくろーじぇんCryogenでサイトつくろーじぇん
CryogenでサイトつくろーじぇんKazuhiro Hara
 
アトリエ秋葉原 Choregraphe WS#4
アトリエ秋葉原 Choregraphe WS#4アトリエ秋葉原 Choregraphe WS#4
アトリエ秋葉原 Choregraphe WS#4Atelier Akihabara
 
(Tech DeepDive #1) Java Flight Recorder を活用した問題解決
(Tech DeepDive #1) Java Flight Recorder を活用した問題解決(Tech DeepDive #1) Java Flight Recorder を活用した問題解決
(Tech DeepDive #1) Java Flight Recorder を活用した問題解決オラクルエンジニア通信
 
React+TypeScriptもいいぞ
React+TypeScriptもいいぞReact+TypeScriptもいいぞ
React+TypeScriptもいいぞMitsuru Ogawa
 
Sparkコミュニティに飛び込もう!(Spark Meetup Tokyo 2015 講演資料、NTTデータ 猿田 浩輔)
Sparkコミュニティに飛び込もう!(Spark Meetup Tokyo 2015 講演資料、NTTデータ 猿田 浩輔)Sparkコミュニティに飛び込もう!(Spark Meetup Tokyo 2015 講演資料、NTTデータ 猿田 浩輔)
Sparkコミュニティに飛び込もう!(Spark Meetup Tokyo 2015 講演資料、NTTデータ 猿田 浩輔)NTT DATA OSS Professional Services
 
ES6 はじめました
ES6 はじめましたES6 はじめました
ES6 はじめましたNet Kanayan
 
JDK Mission Control: Where We Are, Where We Are Going [Groundbreakers APAC 20...
JDK Mission Control: Where We Are, Where We Are Going [Groundbreakers APAC 20...JDK Mission Control: Where We Are, Where We Are Going [Groundbreakers APAC 20...
JDK Mission Control: Where We Are, Where We Are Going [Groundbreakers APAC 20...David Buck
 
KotlinConf 2018 から見る 最近の Kotlin サーバーサイド事情
KotlinConf 2018 から見る 最近の Kotlin サーバーサイド事情KotlinConf 2018 から見る 最近の Kotlin サーバーサイド事情
KotlinConf 2018 から見る 最近の Kotlin サーバーサイド事情Hirotaka Kawata
 
LoRaWANとAzure IoT Hub接続ハンズオン
LoRaWANとAzure IoT Hub接続ハンズオンLoRaWANとAzure IoT Hub接続ハンズオン
LoRaWANとAzure IoT Hub接続ハンズオンTomokazu Kizawa
 
JavaからAkkaハンズオン
JavaからAkkaハンズオンJavaからAkkaハンズオン
JavaからAkkaハンズオンTIS Inc.
 

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

俺が好きなのはJavaだけどJavaじゃない 〜虎の穴でのJava活用について〜
 俺が好きなのはJavaだけどJavaじゃない 〜虎の穴でのJava活用について〜 俺が好きなのはJavaだけどJavaじゃない 〜虎の穴でのJava活用について〜
俺が好きなのはJavaだけどJavaじゃない 〜虎の穴でのJava活用について〜
 
Dockerで始める開発環境構築
Dockerで始める開発環境構築Dockerで始める開発環境構築
Dockerで始める開発環境構築
 
はじめようVue3!ハンズオンでとらのあなラボのフロントエンドを学ぶ_20210611_TechDay#1
はじめようVue3!ハンズオンでとらのあなラボのフロントエンドを学ぶ_20210611_TechDay#1はじめようVue3!ハンズオンでとらのあなラボのフロントエンドを学ぶ_20210611_TechDay#1
はじめようVue3!ハンズオンでとらのあなラボのフロントエンドを学ぶ_20210611_TechDay#1
 
Rails on GKEで運用するWebアプリケーションの紹介
Rails on GKEで運用するWebアプリケーションの紹介Rails on GKEで運用するWebアプリケーションの紹介
Rails on GKEで運用するWebアプリケーションの紹介
 
Amplify Studioを使ってみた
Amplify Studioを使ってみたAmplify Studioを使ってみた
Amplify Studioを使ってみた
 
Kubernetes Cluster Adminやってました #con_rider
Kubernetes Cluster Adminやってました #con_riderKubernetes Cluster Adminやってました #con_rider
Kubernetes Cluster Adminやってました #con_rider
 
YJTC18 A-1 大規模サーバの戦略
YJTC18 A-1 大規模サーバの戦略YJTC18 A-1 大規模サーバの戦略
YJTC18 A-1 大規模サーバの戦略
 
JavaOne 2015 JDK Update (Jigsaw) #j1jp
JavaOne 2015 JDK Update (Jigsaw) #j1jpJavaOne 2015 JDK Update (Jigsaw) #j1jp
JavaOne 2015 JDK Update (Jigsaw) #j1jp
 
Terraform with Bitbucket pipeline
Terraform with Bitbucket pipelineTerraform with Bitbucket pipeline
Terraform with Bitbucket pipeline
 
最新ゲームを支える文言
最新ゲームを支える文言最新ゲームを支える文言
最新ゲームを支える文言
 
Cryogenでサイトつくろーじぇん
CryogenでサイトつくろーじぇんCryogenでサイトつくろーじぇん
Cryogenでサイトつくろーじぇん
 
アトリエ秋葉原 Choregraphe WS#4
アトリエ秋葉原 Choregraphe WS#4アトリエ秋葉原 Choregraphe WS#4
アトリエ秋葉原 Choregraphe WS#4
 
(Tech DeepDive #1) Java Flight Recorder を活用した問題解決
(Tech DeepDive #1) Java Flight Recorder を活用した問題解決(Tech DeepDive #1) Java Flight Recorder を活用した問題解決
(Tech DeepDive #1) Java Flight Recorder を活用した問題解決
 
React+TypeScriptもいいぞ
React+TypeScriptもいいぞReact+TypeScriptもいいぞ
React+TypeScriptもいいぞ
 
Sparkコミュニティに飛び込もう!(Spark Meetup Tokyo 2015 講演資料、NTTデータ 猿田 浩輔)
Sparkコミュニティに飛び込もう!(Spark Meetup Tokyo 2015 講演資料、NTTデータ 猿田 浩輔)Sparkコミュニティに飛び込もう!(Spark Meetup Tokyo 2015 講演資料、NTTデータ 猿田 浩輔)
Sparkコミュニティに飛び込もう!(Spark Meetup Tokyo 2015 講演資料、NTTデータ 猿田 浩輔)
 
ES6 はじめました
ES6 はじめましたES6 はじめました
ES6 はじめました
 
JDK Mission Control: Where We Are, Where We Are Going [Groundbreakers APAC 20...
JDK Mission Control: Where We Are, Where We Are Going [Groundbreakers APAC 20...JDK Mission Control: Where We Are, Where We Are Going [Groundbreakers APAC 20...
JDK Mission Control: Where We Are, Where We Are Going [Groundbreakers APAC 20...
 
KotlinConf 2018 から見る 最近の Kotlin サーバーサイド事情
KotlinConf 2018 から見る 最近の Kotlin サーバーサイド事情KotlinConf 2018 から見る 最近の Kotlin サーバーサイド事情
KotlinConf 2018 から見る 最近の Kotlin サーバーサイド事情
 
LoRaWANとAzure IoT Hub接続ハンズオン
LoRaWANとAzure IoT Hub接続ハンズオンLoRaWANとAzure IoT Hub接続ハンズオン
LoRaWANとAzure IoT Hub接続ハンズオン
 
JavaからAkkaハンズオン
JavaからAkkaハンズオンJavaからAkkaハンズオン
JavaからAkkaハンズオン
 

More from 虎の穴 開発室

Railsのデバッグ どうやるかを改めて確認する
Railsのデバッグ どうやるかを改めて確認するRailsのデバッグ どうやるかを改めて確認する
Railsのデバッグ どうやるかを改めて確認する虎の穴 開発室
 
虎の穴ラボ エンジニア採用説明資料 .pdf
虎の穴ラボ エンジニア採用説明資料 .pdf虎の穴ラボ エンジニア採用説明資料 .pdf
虎の穴ラボ エンジニア採用説明資料 .pdf虎の穴 開発室
 
Deno Deployと組み合わせるのに Upstashをおすすめしたい.pdf
Deno Deployと組み合わせるのに Upstashをおすすめしたい.pdfDeno Deployと組み合わせるのに Upstashをおすすめしたい.pdf
Deno Deployと組み合わせるのに Upstashをおすすめしたい.pdf虎の穴 開発室
 
toranoana.deno #6 アジェンダ 採用説明
toranoana.deno #6 アジェンダ 採用説明toranoana.deno #6 アジェンダ 採用説明
toranoana.deno #6 アジェンダ 採用説明虎の穴 開発室
 
Deno 向け WEB 開発用のツールを作ったので 紹介します
Deno 向け WEB 開発用のツールを作ったので 紹介しますDeno 向け WEB 開発用のツールを作ったので 紹介します
Deno 向け WEB 開発用のツールを作ったので 紹介します虎の穴 開発室
 
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –虎の穴 開発室
 
【エンジニアの勉強法ハックLT- vol.7】ゲームから学んだ勉強のこと
【エンジニアの勉強法ハックLT- vol.7】ゲームから学んだ勉強のこと【エンジニアの勉強法ハックLT- vol.7】ゲームから学んだ勉強のこと
【エンジニアの勉強法ハックLT- vol.7】ゲームから学んだ勉強のこと虎の穴 開発室
 
社内DX推進!非エンジニア向けにプログラミング講座を実施してみた!
社内DX推進!非エンジニア向けにプログラミング講座を実施してみた!社内DX推進!非エンジニア向けにプログラミング講座を実施してみた!
社内DX推進!非エンジニア向けにプログラミング講座を実施してみた!虎の穴 開発室
 
セキュリティを強化しよう!CloudArmorの機能解説
セキュリティを強化しよう!CloudArmorの機能解説セキュリティを強化しよう!CloudArmorの機能解説
セキュリティを強化しよう!CloudArmorの機能解説虎の穴 開発室
 
いいテスト会 (スプリントレビュー) をやろう!
いいテスト会 (スプリントレビュー) をやろう!いいテスト会 (スプリントレビュー) をやろう!
いいテスト会 (スプリントレビュー) をやろう!虎の穴 開発室
 
虎の穴ラボ Tech day#3 チームで戦う!とらのあな通販冬の大感謝祭でのフロント開発について
虎の穴ラボ Tech day#3 チームで戦う!とらのあな通販冬の大感謝祭でのフロント開発について虎の穴ラボ Tech day#3 チームで戦う!とらのあな通販冬の大感謝祭でのフロント開発について
虎の穴ラボ Tech day#3 チームで戦う!とらのあな通販冬の大感謝祭でのフロント開発について虎の穴 開発室
 
虎の穴ラボ TechDay#3 フルリモート率100%!リモートワークを可能にするマネージメント
虎の穴ラボ TechDay#3 フルリモート率100%!リモートワークを可能にするマネージメント 虎の穴ラボ TechDay#3 フルリモート率100%!リモートワークを可能にするマネージメント
虎の穴ラボ TechDay#3 フルリモート率100%!リモートワークを可能にするマネージメント 虎の穴 開発室
 
【20220120 toranoana.deno#4】deno を使って「ログイン」するサービスを作る
【20220120 toranoana.deno#4】deno を使って「ログイン」するサービスを作る【20220120 toranoana.deno#4】deno を使って「ログイン」するサービスを作る
【20220120 toranoana.deno#4】deno を使って「ログイン」するサービスを作る虎の穴 開発室
 
虎の穴ラボ エンジニア採用説明資料
虎の穴ラボ エンジニア採用説明資料 虎の穴ラボ エンジニア採用説明資料
虎の穴ラボ エンジニア採用説明資料 虎の穴 開発室
 
虎の穴ラボにおけるリモートワークの働き方
虎の穴ラボにおけるリモートワークの働き方虎の穴ラボにおけるリモートワークの働き方
虎の穴ラボにおけるリモートワークの働き方虎の穴 開発室
 
Deno を aws fargate で動かす
Deno を aws fargate で動かすDeno を aws fargate で動かす
Deno を aws fargate で動かす虎の穴 開発室
 
【コードレビューLT資料】コード規約の策定会を実施した話
【コードレビューLT資料】コード規約の策定会を実施した話【コードレビューLT資料】コード規約の策定会を実施した話
【コードレビューLT資料】コード規約の策定会を実施した話虎の穴 開発室
 
ワーケーションを 体験してみて〜富山 ワーケーションモニターツアーに参加しました
ワーケーションを 体験してみて〜富山 ワーケーションモニターツアーに参加しましたワーケーションを 体験してみて〜富山 ワーケーションモニターツアーに参加しました
ワーケーションを 体験してみて〜富山 ワーケーションモニターツアーに参加しました虎の穴 開発室
 
はじめてのわーけーしょん
はじめてのわーけーしょんはじめてのわーけーしょん
はじめてのわーけーしょん虎の穴 開発室
 

More from 虎の穴 開発室 (20)

FizzBuzzで学ぶJavaの進化
FizzBuzzで学ぶJavaの進化FizzBuzzで学ぶJavaの進化
FizzBuzzで学ぶJavaの進化
 
Railsのデバッグ どうやるかを改めて確認する
Railsのデバッグ どうやるかを改めて確認するRailsのデバッグ どうやるかを改めて確認する
Railsのデバッグ どうやるかを改めて確認する
 
虎の穴ラボ エンジニア採用説明資料 .pdf
虎の穴ラボ エンジニア採用説明資料 .pdf虎の穴ラボ エンジニア採用説明資料 .pdf
虎の穴ラボ エンジニア採用説明資料 .pdf
 
Deno Deployと組み合わせるのに Upstashをおすすめしたい.pdf
Deno Deployと組み合わせるのに Upstashをおすすめしたい.pdfDeno Deployと組み合わせるのに Upstashをおすすめしたい.pdf
Deno Deployと組み合わせるのに Upstashをおすすめしたい.pdf
 
toranoana.deno #6 アジェンダ 採用説明
toranoana.deno #6 アジェンダ 採用説明toranoana.deno #6 アジェンダ 採用説明
toranoana.deno #6 アジェンダ 採用説明
 
Deno 向け WEB 開発用のツールを作ったので 紹介します
Deno 向け WEB 開発用のツールを作ったので 紹介しますDeno 向け WEB 開発用のツールを作ったので 紹介します
Deno 向け WEB 開発用のツールを作ったので 紹介します
 
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
 
【エンジニアの勉強法ハックLT- vol.7】ゲームから学んだ勉強のこと
【エンジニアの勉強法ハックLT- vol.7】ゲームから学んだ勉強のこと【エンジニアの勉強法ハックLT- vol.7】ゲームから学んだ勉強のこと
【エンジニアの勉強法ハックLT- vol.7】ゲームから学んだ勉強のこと
 
社内DX推進!非エンジニア向けにプログラミング講座を実施してみた!
社内DX推進!非エンジニア向けにプログラミング講座を実施してみた!社内DX推進!非エンジニア向けにプログラミング講座を実施してみた!
社内DX推進!非エンジニア向けにプログラミング講座を実施してみた!
 
セキュリティを強化しよう!CloudArmorの機能解説
セキュリティを強化しよう!CloudArmorの機能解説セキュリティを強化しよう!CloudArmorの機能解説
セキュリティを強化しよう!CloudArmorの機能解説
 
いいテスト会 (スプリントレビュー) をやろう!
いいテスト会 (スプリントレビュー) をやろう!いいテスト会 (スプリントレビュー) をやろう!
いいテスト会 (スプリントレビュー) をやろう!
 
虎の穴ラボ Tech day#3 チームで戦う!とらのあな通販冬の大感謝祭でのフロント開発について
虎の穴ラボ Tech day#3 チームで戦う!とらのあな通販冬の大感謝祭でのフロント開発について虎の穴ラボ Tech day#3 チームで戦う!とらのあな通販冬の大感謝祭でのフロント開発について
虎の穴ラボ Tech day#3 チームで戦う!とらのあな通販冬の大感謝祭でのフロント開発について
 
虎の穴ラボ TechDay#3 フルリモート率100%!リモートワークを可能にするマネージメント
虎の穴ラボ TechDay#3 フルリモート率100%!リモートワークを可能にするマネージメント 虎の穴ラボ TechDay#3 フルリモート率100%!リモートワークを可能にするマネージメント
虎の穴ラボ TechDay#3 フルリモート率100%!リモートワークを可能にするマネージメント
 
【20220120 toranoana.deno#4】deno を使って「ログイン」するサービスを作る
【20220120 toranoana.deno#4】deno を使って「ログイン」するサービスを作る【20220120 toranoana.deno#4】deno を使って「ログイン」するサービスを作る
【20220120 toranoana.deno#4】deno を使って「ログイン」するサービスを作る
 
虎の穴ラボ エンジニア採用説明資料
虎の穴ラボ エンジニア採用説明資料 虎の穴ラボ エンジニア採用説明資料
虎の穴ラボ エンジニア採用説明資料
 
虎の穴ラボにおけるリモートワークの働き方
虎の穴ラボにおけるリモートワークの働き方虎の穴ラボにおけるリモートワークの働き方
虎の穴ラボにおけるリモートワークの働き方
 
Deno を aws fargate で動かす
Deno を aws fargate で動かすDeno を aws fargate で動かす
Deno を aws fargate で動かす
 
【コードレビューLT資料】コード規約の策定会を実施した話
【コードレビューLT資料】コード規約の策定会を実施した話【コードレビューLT資料】コード規約の策定会を実施した話
【コードレビューLT資料】コード規約の策定会を実施した話
 
ワーケーションを 体験してみて〜富山 ワーケーションモニターツアーに参加しました
ワーケーションを 体験してみて〜富山 ワーケーションモニターツアーに参加しましたワーケーションを 体験してみて〜富山 ワーケーションモニターツアーに参加しました
ワーケーションを 体験してみて〜富山 ワーケーションモニターツアーに参加しました
 
はじめてのわーけーしょん
はじめてのわーけーしょんはじめてのわーけーしょん
はじめてのわーけーしょん
 

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