Slide 1

Slide 1 text

Kotlinの歴史を可視化する

Slide 2

Slide 2 text

自己紹介 2 Ayana Murakami HOT PEPPER Beauty スマホアプリ バックエンドエンジニア (Kotlin歴 1年) 大学院の研究:情報可視化

Slide 3

Slide 3 text

可視化 とは 「見えないもの、見えにくいもの」を見やすくするための技術 目的 ● データ分析の支援 ● データから得た知見を他者に伝え共有するプロセスの支援 人工知能学会 私のブックマーク「情報可視化」 3

Slide 4

Slide 4 text

身の回りの可視化 https://www.kotlinfest.dev/timetable 4 KotlinFest 2024 発表内容

Slide 5

Slide 5 text

身の回りの可視化 5 GitHub

Slide 6

Slide 6 text

Software Evolution Visualization 「ソフトウェアの進化」を可視化のアプローチで分析 分析対象 ● Source Code Change ● Developers Acttivity ● Defects ● Software Architecture 6 A systematic literature review of software visualization evaluation [ L.Merio et al., 2013 ]

Slide 7

Slide 7 text

今日のメッセージ 7 今回の発表 ● git logコマンドで取得できるデータのみ利用 ● 可視化・解釈の一例を紹介 物事を可視化することで... 目線のそろった議論のきっかけ が生まれる 可視化結果

Slide 8

Slide 8 text

では、本題 8

Slide 9

Slide 9 text

可視化の流れ 9 可視化結果 と 考察 データの取得 データの加工・可視化表現

Slide 10

Slide 10 text

可視化の流れ 10 可視化結果 と 考察 データの取得 データの加工・可視化表現

Slide 11

Slide 11 text

Kotlin の歴史を可視化 https://github.com/JetBrains/kotlin 11

Slide 12

Slide 12 text

データの取得 12 1. 1ヶ月ごとのcommitを全量取得 2. ファイルごとに集約 → 指定された期間のファイルごとのコミット数 ※ マージ方法 (merge / squash merge) で増減はあるが許容

Slide 13

Slide 13 text

データの取得 13 filename 201401 201402 201403 … 202405 core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/ lazy/descriptors/LazyJavaClassMemberScope.kt 22 1 5 … 0 core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/ lazy/descriptors/LazyJavaPackageFragmentScope.kt 21 0 0 … 0 … → 約27万行(277,326)

Slide 14

Slide 14 text

可視化の流れ 14 可視化結果 と 考察 データの取得 データの加工・可視化表現

Slide 15

Slide 15 text

情報可視化 の設計指針 15 The Eyes Have It: A Task by Data Type Taxonomy for Information Visualizations [ B. Shneiderman, 1996 ] Visual Information Seeking Mantra Overview first, zoom and filter, then details-on-demand (まずは全体像を俯瞰し、一部分に着目、不要な要素は取り除き、 必要に応じて詳細情報を見る) Overview Zoom&Filter Details

Slide 16

Slide 16 text

可視化表現 全体が俯瞰できる可視化表現 今回のデータ ● 時系列 ● 数値的な変化 ● 多くの項目 → ヒートマップ を採用 16 Overview first, zoom and filter, then details-on-demand

Slide 17

Slide 17 text

(余談) 時系列データ可視化手法 の比較 17 数値の表現 正確な読み取り 要素が多い時 折れ線グラフ 高さ ⭕ できる ❌ 重なりがある ヒートマップ 色 🔺 難しい ⭕ 重なりなし 視覚協創学(5): マッピング技術 ~特に時系列データ可視化技術の体系化に向けて~ [伊藤, 2012] その他、3次元の可視化表現や連携型可視化表現も存在 可視化の研究では、複数のグラフを組み合わせて表現する ex. ヒートマップの一部を選択したら対応する箇所が折れ線グラフで表示

Slide 18

Slide 18 text

ヒートマップ の作り方 18 filename 202401 201402 201403 202404 202405 A 0 0 0 10 30 B 10 15 0 0 0 C 0 20 11 0 0 時間変化 A B C 数値は commit数

Slide 19

Slide 19 text

Zoom & Filter の詳細 19 Overview first, zoom and filter, then details-on-demand

Slide 20

Slide 20 text

Zoom & Filter の詳細 20 Overview Zoom&Filter Details 本来: 可視化結果を元に対象を絞る 絞る Overview

Slide 21

Slide 21 text

Zoom & Filter の詳細 21 本来: 可視化結果を元に対象を絞る Overview 絞る 今回は データを絞る さらに絞る Overview Zoom&Filter Details 絞られたデータ を可視化

Slide 22

Slide 22 text

データを絞っていく 22

Slide 23

Slide 23 text

使用データを絞る 23 約27万行 (277,326) 直近10年間分に絞る (2014年5月~2024年5月) 約14万行 (143,243)

Slide 24

Slide 24 text

使用データを絞る 24 約27万行 (277,326) 直近10年間分に絞る (2014年5月~2024年5月) 約14万行 (143,243) 約5万行 (54,791) 現在のrepositoryに残るファイルのみ抽出

Slide 25

Slide 25 text

使用データを絞る 25 約27万行 (277,326) 直近10年間分に絞る (2014年5月~2024年5月) 約14万行 (143,243) 約5万行 (54,791) 現在のrepositoryに残るファイルのみ抽出 約1万行 (10,688) 文字列testをパスに含まないファイルのみ抽出

Slide 26

Slide 26 text

データの加工 パスの2階層以下を集約 filename 201401 201402 … aaa/bbb/xxxx.kt 22 1 … aaa/bbb/yyyy.kt 21 0 … aaa/ccc/zzzz.kt 0 10 … filename 201401 201402 … aaa/bbb 43 1 … aaa/ccc 0 10 …

Slide 27

Slide 27 text

使用データを絞る 27 約27万行 (277,326) 直近10年間分に絞る (2014年5月~2024年5月) 約14万行 (143,243) 約5万行 (54,791) 現在のrepositoryに残るファイルのみ抽出 パスの2階層以下を集約 約1万行 (10,688) 139行 文字列testをパスに含まないファイルのみ抽出

Slide 28

Slide 28 text

使用データを絞る 28 約27万行 (277,326) 直近10年間分に絞る (2014年5月~2024年5月) 約14万行 (143,243) 約5万行 (54,791) 現在のrepositoryに残るファイルのみ抽出 約1万行 (10,688) 139行 文字列testをパスに含まないファイルのみ抽出 もう少し絞りたい ... パスの2階層以下を集約

Slide 29

Slide 29 text

注目ポイントを絞る KotlinConf 2024で話題になった2つのテーマに注目 29 KotlinConf 2024 Keynote K2 Compiler 1 Direct Kotlin to Swift Export 2

Slide 30

Slide 30 text

可視化の流れ 30 可視化結果 と 考察 データの取得 データの加工・可視化表現

Slide 31

Slide 31 text

K2 Compiler 31

Slide 32

Slide 32 text

コンパイラに関するモジュール Overview Zoom&Filter Details link 最初のcommitが早い順 2014/05 2024/05

Slide 33

Slide 33 text

コンパイラに関するモジュール 33 Overview Zoom&Filter Details compiler/backend compiler/frontend compiler/ir compiler/fir 今回の発表では ・compiler/ir ・compiler/fir  を深掘り

Slide 34

Slide 34 text

その前に... Kotlin のコンパイラについて 34

Slide 35

Slide 35 text

Kotlin の コンパイラ の概要 3段階の進化 1. リリース重視! 超初期 Compiler 2. 多様なプラットフォームに対応! 過渡期 Compiler 3. NEW! K2 Compiler 35 詳しい解説: ・What Everyone Must Know About The NEW Kotlin K2 Compiler ・K2への道。コンパイラを作り直すってどういうこと? 2つのキーワード IR, FIR

Slide 36

Slide 36 text

36 Kotlin ソースコード コンパイラ ターゲットコード

Slide 37

Slide 37 text

37 Kotlin ソースコード Frontend ターゲットコード Backend Syntax Tree + Semantics

Slide 38

Slide 38 text

38 Kotlin ソースコード JVM Frontend JVM Backend JavaScript JS Backend ① 超初期 Compiler

Slide 39

Slide 39 text

39 Kotlin ソースコード JVM Frontend JVM Backend JavaScript JS Backend Native Native Backend

Slide 40

Slide 40 text

40 Intermediate Representation … Kotlin ソースコードと   ターゲットコードの中間表現 Kotlin ソースコード JVM Frontend JVM Backend JavaScript JS Backend Native Native Backend IR ② 過渡期 Compiler

Slide 41

Slide 41 text

41 Kotlin ソースコード JVM Frontend JVM Backend JavaScript JS Backend Native Native Backend IR ② 過渡期 Compiler Intermediate Representation … Kotlin ソースコードと   ターゲットコードの中間表現

Slide 42

Slide 42 text

42 Kotlin ソースコード JVM Frontend JVM Backend JavaScript JS Backend Native Native Backend IR FIR Frontend Intermediate Representation … 高速化のための新しい   Frontend表現 ③ K2 Compiler

Slide 43

Slide 43 text

可視化結果を読み解く ・compiler/ir ・compiler/fir 43

Slide 44

Slide 44 text

可視化結果を読み解く ・compiler/ir ・compiler/fir 44

Slide 45

Slide 45 text

コンパイラに関するモジュール 45 compiler/ir Overview Zoom&Filter Details

Slide 46

Slide 46 text

コンパイラに関するモジュール 46 compiler/ir 2016年10月に 最初のcommit Overview Zoom&Filter Details

Slide 47

Slide 47 text

IRの開発時期 47 Kotlin 1.2 Multiplatform projects are a new experimental feature in Kotlin 1.2, allowing you to reuse code between target platforms supported by Kotlin – JVM, JavaScript, and (in the future) Native. Overview Zoom&Filter Details compiler/ir 2016/10 初commit 2024/5 2016/2 Kolin 1.1 2017/5 AndroidのKotlin公式サポート発表 2017/11 Kolin 1.2, KolinConf2017 https://kotlinlang.org/docs/whatsnew12.html

Slide 48

Slide 48 text

IRの開発時期から読み取れる考察 Kotlin Anywhere You Need It - KotlinConf 2017 48 KotlinConf 2017 Keynote Kotlinの初期リリースから、 理想の世界に向けて動き出した一歩目なのか....?

Slide 49

Slide 49 text

可視化結果を読み解く ・compiler/ir ・compiler/fir 49

Slide 50

Slide 50 text

コンパイラに関するモジュール 50 compiler/fir Overview Zoom&Filter Details

Slide 51

Slide 51 text

コンパイラに関するモジュール 51 直近commit数が多い Overview Zoom&Filter Details compiler/fir

Slide 52

Slide 52 text

コンパイラに関するモジュール 52 compiler/fir 2018年11月に 最初のcommit Overview Zoom&Filter Details

Slide 53

Slide 53 text

FIRの開発 53 Overview Zoom&Filter Details compiler/fir 2020/8 Kotlin 1.4 2024/5 2018/10 Kotlin 1.3 2018/11 初 commit 2018/12 KotlinConf 2019

Slide 54

Slide 54 text

KotlinConf 2019 54 KotlinConf2019 Opening Keynote

Slide 55

Slide 55 text

KotlinConf 2019 55 KotlinConf2019 Opening Keynote

Slide 56

Slide 56 text

FIRの開発 56 Overview Zoom&Filter Details compiler/fir 2018/10 Kotlin 1.3 2020/8 Kotlin 1.4 2024/5 2018/11 初 commit 2018/12 KotlinConf 2019 KotlinConf 2019 新しいコンパイラについて言及 ・Frontend speed … Not in 1.4 ・ReWork Type inference … Coming 1.4

Slide 57

Slide 57 text

FIRの開発時期から読み取れる考察 2018年末ごろには すでに K2 Compilerの構想が固まっていた..? 2018年10月から2020年10月の2年間弱で マイナーアップデートなし => コンパイラ開発に力を入れていた...? 57

Slide 58

Slide 58 text

まとめ: 可視化からわかる K2 Compilerの変遷 58 日付 公式発表 イベント 2016/ 2 Kotlin 1.1 2016/10 compiler/ir 配下にcommit開始 2017/ 5 Android: Kotlin公式サポート発表 2017/11 Kotlin 1.2 JSとJVMのコード共通化が可能に 2018/10 Kotlin Conf 2018 Kotlin 1.3 2018/11 compiler/fir 配下にcommit開始 2019/12 Kotlin conf 2019 「Kotlin 1.4から早いコンパイラが導入」 2020/ 8 Kotlin 1.4 新しい型推論

Slide 59

Slide 59 text

Direct Kotlin to Swift Export 59

Slide 60

Slide 60 text

native 配下のモジュール 60 Overview Zoom&Filter Details

Slide 61

Slide 61 text

native 配下のモジュール 61 native/swift 2023年11月に 最初のcommit Overview Zoom&Filter Details

Slide 62

Slide 62 text

native/swift配下 最初のcommit 62 commit [Swift Export] Swift IR Overview Zoom&Filter Details

Slide 63

Slide 63 text

本当に最初の commit…? 63

Slide 64

Slide 64 text

これまでのデータ 1. 現在のrepositoryに残っているファイルに絞る 2. 文字列 test をパスに含むファイルを削除 3. パスの2階層以下は集約 データの加工フェーズに戻る 64 1. 現在 残っていないファイルに絞る 2. 文字列 test をパスに含むファイルを削除 3. パスの2階層以下は集約

Slide 65

Slide 65 text

sir を含むディレクトリを発見 65 Overview Zoom&Filter Details

Slide 66

Slide 66 text

sir を含むディレクトリを発見 66 generators/sir-tests-generator generators/sir-analysis-api-generator Overview Zoom&Filter Details → 詳しく見てみる

Slide 67

Slide 67 text

sir 最初のcommit 67 commit Add a sir-compiler-bridge module 2023年11月29日: swift/native配下の最初のcommitと同日 Overview Zoom&Filter Details

Slide 68

Slide 68 text

推測: Swift への変換をサポート 68 Direct Kotlin-to-Swift export の発表 It’s already in progress. KotlinConf2024 Keynote → Swift IRを さしていたのでは..?

Slide 69

Slide 69 text

69 Kotlin ソースコード JVM Frontend JVM Backend JavaScript JS Backend Native Native Backend IR FIR Swift SIR Kotlin → Swift

Slide 70

Slide 70 text

まとめ: 可視化からわかる Kotlin to Swift Export 70 日付 公式発表 イベント 2023/11/1 Kotlin 1.9.20 2023/11/29 Swift IRに関するcommit開始 2024/5/21 Kotlin 2.0 2024/5/22 KotlinConf 2024 Direct Kotlin-to-Swift export の発表

Slide 71

Slide 71 text

まとめ 71

Slide 72

Slide 72 text

言語 Kotlin 可視化 の 流れ 72 可視化結果 と 考察 データの取得 データの加工・可視化表現 全体の流れ Overview Zoom&Filter Details

Slide 73

Slide 73 text

可視化: KotlinConf 2024で話題のテーマに注目 73 K2 Compiler FIR, IR 1 Direct Kotlin to Swift Export 2 6年も前からFIRの開発が始まっていた AndroidのKotlin公式サポート発表の 半年も前からIRの導入は進められていた Swift IRの開発が始まってまだ半年

Slide 74

Slide 74 text

可視化の意義 74

Slide 75

Slide 75 text

可視化結果がない場合 ... 75 詳しい人 詳しくない人 Kotlin Conf 2019で 話していたような... 調べてみる やっぱり

Slide 76

Slide 76 text

可視化結果があれば! 76 詳しい人 詳しくない人 Kotlin Conf 2019で 話していたような... 調べてみる やっぱり 2018年あたりに 何かありそう 調べてみる なるほど! 議論

Slide 77

Slide 77 text

普段の開発で “可視化” するなら ● エラー発生数 ● 機能ごとのKPI寄与率 ● 開発が活発な機能 ● モジュールの依存関係 など... 77

Slide 78

Slide 78 text

可視化結果は 議論のタネ 78 可視化 結果 新しい知見 知識 新しい知見 知識 視点・知識が異なると 得られる”知見”も異なる

Slide 79

Slide 79 text

Kotlinに詳しい皆さんであれば .. 全く異なる解釈・可視化の見方もあるはず... 可視化結果を公開します! ● 発表中デモに用いた可視化結果: link ● Kotlin organization配下のrepositoryのコミット数:link 79 https://github.com/Kotlin

Slide 80

Slide 80 text

まとめ Software Evolution Visualization … ソースコードを分析・可視化する 80 議論の活性化・意思決定のサポート の支援 → ぜひ他のOSSやプロダクトコードを可視化・分析してみては!