YJTC18 C-1 Kotlin導入の状況と展望

129 Views

January 29, 18

スライド概要

Yahoo! JAPAN Tech Conference 2018 C-1 セッションのスライドです。

profile-image

2023年10月からSpeaker Deckに移行しました。最新情報はこちらをご覧ください。 https://speakerdeck.com/lycorptech_jp

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

Kotlin導入の 状況と展望 森 洋之 Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

2.

自己紹介 ・Androidアプリ黒帯 ・ヤフオク!開発本部アプリ開発部 Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

3.

自己紹介 ・Androidアプリ黒帯 ・ヤフオク!開発本部アプリ開発部 ・本配ってます Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

4.

セッションの内容 Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

5.

セッションの内容 • Kotlinはすばらしい Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

6.

セッションの内容 • Kotlinはすばらしい • チーム内でのコミュニケーション大事 Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

7.

セッションの内容 • Kotlinはすばらしい • チーム内でのコミュニケーション大事 • 社内横断的なコミュニケーションも大事 Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

8.

セッションの内容 • Kotlinはすばらしい • チーム内でのコミュニケーション大事 • 社内横断的なコミュニケーションも大事 • Kotlinはすばらしい Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

9.

Kotlinについて Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

10.

• 2011年7月にJetBrainsから発表されたJVM言語 Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

11.

• 2011年7月にJetBrainsから発表されたJVM言語 Cédric Beust 「 Five reasons why you should rejoice about Kotlin」 http://beust.com/weblog/2011/07/20/five-reasons-why-should-rejoice-about-kotlin/ (2018年1月25日)

12.

• 2012年にオープンソース化 • AndroidとKotlinの関係もこの頃から JetBrains「 Kotlin and Android」 https://discuss.kotlinlang.org/t/kotlin-and-android/50 (2018年1月25日)

13.

• 2016年ごろから徐々にユーザーを伸ばし始めた • Androidの公式開発言語になり、爆発的に利用者を増やした JetBrains「 KotlinConf 2017 - Opening Keynote by Andrey Breslav」 https://www.youtube.com/watch?v=pjnHDXkeK-4 (2018年1月25日)

14.

Kotlinの特徴 Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

15.

Kotlinの言語的思想 ・実用主義 ・簡潔 ・安全 ・相互運用性 Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

16.

Kotlinの言語的思想 ・実用主義 ・簡潔 ・特定の考え方を押し付けない (Javaの書き方のままでも使える) ・安全 ・他言語からいろんな機能をもってきた ・相互運用性 ・IDE等のツールサポートも手厚い Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

17.

Kotlinの言語的思想 ・実用主義 ・簡潔 ・安全 ・コードの意図が明確に読みとれること ・実現するための手続きではなく、 実現したいことが表現されていること ・相互運用性 Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

18.
[beta]
Kotlinの言語的思想
・実用主義

Java

public List<String> readTextFile(File file) {
List<String> contents = new ArrayList<>();

BufferedReader reader = null;

・簡潔

try {
reader = new BufferedReader(new FileReader(file));
String line = reader.readLine();

・安全

while(line != null) {
contents.add(line);
line = reader.readLine();
}

・相互運用性

}

} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return contents;

Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

19.

Kotlinの言語的思想 ・実用主義 ・簡潔 ・安全 Kotlin fun readTextFile(file : File) = BufferedReader(FileReader(file)).readLines() ・相互運用性 Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

20.

Kotlinの言語的思想 ・実用主義 ・簡潔 ・安全 ・実装コストと安全性はトレードオフ ・Javaより高い安全性を、 より低い実装コストで実現している ・相互運用性 ・NullableやSafe Castなど Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

21.

Kotlinの言語的思想 ・実用主義 ・簡潔 ・安全 ・相互運用性 ・ほぼ完全な相互運用性 ・既存のJavaライブラリも問題なし ・ツールサポートも問題なし Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

22.

導入前の検討 Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

23.

なぜKotlinを導入するか Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

24.

① desugar問題 Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

25.

desugar問題 ・Androidは、Java8の機能を使用するために、 コンパイル時にdesugarを行う Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

26.

desugar問題 ・Androidは、Java8の機能を使用するために、 コンパイル時にdesugarを行う ・特定のライブラリを使用している場合、 desugarは無効化される Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

27.

desugar問題 ・Androidは、Java8の機能を使用するために、 コンパイル時にdesugarを行う ・特定のライブラリを使用している場合、 desugarは無効化される ・そのライブラリを使っている Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

28.

desugar問題 ・Androidは、Java8の機能を使用するために、 コンパイル時にdesugarを行う ・特定のライブラリを使用している場合、 desugarは無効化される ・そのライブラリを使っている ・Java7でコード書きたくない Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

29.

② Swiftとの親和性 Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

30.

Swiftとの親和性 ・SwiftとKotlinのコードは似ている Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

31.
[beta]
Swiftとの親和性
・SwiftとKotlinのコードは似ている
class Person {
let name:String

var age:Int
init(name: String, age: Int) {
self.name= name
self.age= age

}
func isAdult() -> Bool {
return age>=20
}

}
Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

32.
[beta]
Swiftとの親和性
・SwiftとKotlinのコードは似ている
class Person {

class Person(val name: String, var age: Int) {

let name:String

fun isAdult() = age >= 20

var age:Int

}

init(name: String, age: Int) {
self.name= name
self.age= age

}
func isAdult() -> Bool {
return age>=20
}

}
Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

33.
[beta]
Swiftとの親和性
・SwiftとKotlinのコードは似ている
class Person(name: String, age: Int) {

class Person {
let name:String

val name: String

var age:Int

var age: Int

init(name: String, age: Int) {

init {

self.name= name

this.name = name

self.age= age

this.age = age

}

}

func isAdult() -> Bool {

fun isAdult() : Boolean {
return age >= 20

return age>=20
}

}

}

}
Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

34.

Swiftとの親和性 ・SwiftとKotlinのコードは似ている ・弊社のほぼすべてのiOSアプリは、Swiftを導入している Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

35.

Swiftとの親和性 ・SwiftとKotlinのコードは似ている ・弊社のほぼすべてのiOSアプリは、Swiftを導入している ・互いのコードが読めるようになり お互いの仕事に興味を持つきっかけになってくれれば Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

36.

③ 開発をもっと楽しく Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

37.

開発をもっと楽しく アプリ開発の主要な3要素は ・イベントハンドリング ・非同期処理 ・通信処理 これらに関係するボイラープレートを大きく減らせる Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

38.

開発をもっと楽しく ・イベントハンドリング Java7 Button button = (Button)findViewById(R.id.button); button.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(SampleActivity.this, "button clicked", Toast.LENGTH_SHORT).show(); } } ); Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

39.

開発をもっと楽しく ・イベントハンドリング Java7 Button button = (Button)findViewById(R.id.button); button.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(SampleActivity.this, "button clicked", Toast.LENGTH_SHORT).show(); } } ); Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

40.
[beta]
開発をもっと楽しく
・イベントハンドリング
Kotlin
val button = findViewById<Button>(R.id.button)

button.setOnClickListener {
Toast.makeText(this, "button clicked", Toast.LENGTH_SHORT).show()
}

Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

41.

危惧したリスク Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

42.

・チームの学習コスト Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

43.

・チームの学習コスト ・ビルド時間の増加 Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

44.

・チームの学習コスト ・ビルド時間の増加 ・CIパイプライン Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

45.

・チームの学習コスト ・ビルド時間の増加 ・CIパイプライン ・採用可能な人を狭めないか Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

46.

導入にあたって Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

47.

個人での学習 Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

48.

・参考書は赤べこ本を挙げる人が多かった ・個人的にはKotlinイン・アクションおすすめ Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

49.

・Kotlin Koansは、クイズ形式で学べる チームで楽しみながら学ぶのに良い Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

50.

チームへの導入 Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

51.

ルール ・新規クラスはKotlinで書く Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

52.

ルール ・新規クラスはKotlinで書く ・Kotlinに置き換えるだけのタスクは積まない Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

53.

ルール ・新規クラスはKotlinで書く ・Kotlinに置き換えるだけのタスクは積まない ヤフオク!アプリのアーキテクチャ担当として 見直しをしていた時期だったので、ちょうどよかった Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

54.

1日合宿 ・1日かけてTODOアプリを開発 Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

55.

1日合宿 ・1日かけてTODOアプリを開発 ・リスト表示、非同期処理、通信処理、 ローカルDBキャッシュなど アプリ開発でよく使う要素をだいたい含む Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

56.

1日合宿 ・1日かけてTODOアプリを開発 ・リスト表示、非同期処理、通信処理、 ローカルDBキャッシュなど アプリ開発でよく使う要素をだいたい含む ・典型的な処理をどう書くか コードイメージの共有ができる Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

57.

エクストリーム・プログラミング ・ペア・プログラミングとペアのローテーションを行う Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

58.

エクストリーム・プログラミング ・ペア・プログラミングとペアのローテーションを行う ・知見の共有と技術レベルの平準化がされる Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

59.

エクストリーム・プログラミング ・ペア・プログラミングとペアのローテーションを行う ・知見の共有と技術レベルの平準化がされる ・16:30〜のセッションもお願いします Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

60.

全社への普及 Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

61.

そもそも… Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

62.

Yahoo! JAPANとKotlinの出会いは 2015年末 社内LT会で Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

63.

LT会以降のコミュニティ活動 Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

64.

社内でKotlinを認知してもらう → キックオフセミナー Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

65.

社内LT Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

66.

会社の支援 ・トップカンファレンス参加支援制度 KotlinConfへの参加と社内セミナー See: https://techblog.yahoo.co.jp/advent-calendar-2017/kotlinconfdroidconsf/ Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

67.

さまざまなレイヤーでの コミュニケーション Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

68.

Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

69.

Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

70.

Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

71.

Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

72.

Kotlin導入状況 Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

73.

2017/09 DevFest Tokyo Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

74.

280000 275000 270000 265000 260000 255000 250000 245000 240000 2017年1月 2月 3月 4月 5月 6月 Java 7月 8月 Kotlin Copyright 2018 Yahoo Japan Corporation. All Rights Reserved. 9月 10月 11月 12月 2018年1月

75.

25000 20000 15000 10000 5000 0 2017年1月 2月 3月 4月 5月 6月 7月 Java 8月 9月 Kotlin Copyright 2018 Yahoo Japan Corporation. All Rights Reserved. 10月 11月 12月 2018年1月

76.

35000 30000 25000 20000 15000 10000 5000 0 2017年1月 2月 3月 4月 5月 6月 7月 Java 8月 Kotlin Copyright 2018 Yahoo Japan Corporation. All Rights Reserved. 9月 10月 11月 12月 2018年1月

77.

導入した結果 Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

78.

チームの反応 Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

79.

・みんなKotlin大好き Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

80.

• みんなKotlin大好き • みんな読める Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

81.

• みんなKotlin大好き • みんな読める • 書いていて楽しい!もうJavaに戻りたくない… Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

82.

懸念していたリスクについて Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

83.

• チームの学習コスト • 採用の幅を狭めないか • ビルド時間の増加 • CIパイプラインの安定性 Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

84.

• チームの学習コスト • 採用の幅を狭めないか • ビルド時間の増加 • CIパイプラインの安定性 Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

85.

• チームの学習コスト → 楽しく学べた • 採用の幅を狭めないか • ビルド時間の増加 • CIパイプラインの安定性 Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

86.

• チームの学習コスト • 採用の幅を狭めないか → 楽しく学べた → そもそも大したことない • ビルド時間の増加 • CIパイプラインの安定性 Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

87.

• チームの学習コスト • 採用の幅を狭めないか → 楽しく学べた → そもそも大したことない • ビルド時間の増加 • CIパイプラインの安定性 Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

88.

• チームの学習コスト • 採用の幅を狭めないか → 楽しく学べた → そもそも大したことない • ビルド時間の増加 → ほぼ変わらない※ • CIパイプラインの安定性 Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

89.

• チームの学習コスト • 採用の幅を狭めないか → 楽しく学べた → そもそも大したことない • ビルド時間の増加 → ほぼ変わらない※ • CIパイプラインの安定性 Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

90.

• チームの学習コスト • 採用の幅を狭めないか → 楽しく学べた → そもそも大したことない • ビルド時間の増加 → ほぼ変わらない※ • CIパイプラインの安定性 → 何も問題ない Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

91.

• チームの学習コスト • 採用の幅を狭めないか → 楽しく学べた → そもそも大したことない • ビルド時間の増加 → ほぼ変わらない※ • CIパイプラインの安定性 → 何も問題ない Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

92.

• チームの学習コスト • 採用の幅を狭めないか → 楽しく学べた → そもそも大したことない → 皆さま次第! • ビルド時間の増加 → ほぼ変わらない※ • CIパイプラインの安定性 → 何も問題ない Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

93.

• チームの学習コスト • 採用の幅を狭めないか → 楽しく学べた → 皆さま次第! → そもそも大したことない → Kotlin経験者で縛ってない • ビルド時間の増加 → ほぼ変わらない※ • CIパイプラインの安定性 → 何も問題ない Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

94.

この先 Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

95.

他のサービスへの展開 Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

96.

他のサービスへの展開 ・無理に強制しない Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

97.

他のサービスへの展開 ・無理に強制しない ・人の異動に合わせて、自然と広がっていく Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

98.

他のサービスへの展開 ・無理に強制しない ・人の異動に合わせて、自然と広がっていく サーバサイドKotlin Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

99.

他のサービスへの展開 ・無理に強制しない ・人の異動に合わせて、自然と広がっていく サーバサイドKotlin ・社内コミュニティが生まれつつある Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

100.

他のサービスへの展開 ・無理に強制しない ・人の異動に合わせて、自然と広がっていく サーバサイドKotlin ・社内コミュニティが生まれつつある ・Spring使えるし、おすすめ Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

101.

まとめ Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

102.

まとめ • Kotlinはすばらしい • チーム内でのコミュニケーション大事 • 社内横断的なコミュニケーションも大事 • Kotlinはすばらしい Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.

103.

Copyright 2018 Yahoo Japan Corporation. All Rights Reserved.