Slide 1

Slide 1 text

Sansan株式会社 部署 名前 Gradleまなびなおし Sansan技術本部 Sansan技術本部 Bill One Engineering Unit 江川 綾

Slide 2

Slide 2 text

写真が入ります 江川 綾 Sansan株式会社 技術本部 Bill One Engineering Unit 2021年 Sansan新卒⼊社。 ⼊社以来、Webアプリケーション開発エンジニアとして インボイス管理サービス「Bill One」の開発に従事。 現在は、Bill Oneにおける請求書受領領域の開発に加えて、 フロントエンドの技術的な改善をリードしている。 @erm1116_ @erm1116

Slide 3

Slide 3 text

Kotlin Festに参加して、 Server-Side Kotlinをやりたくなった!! そんな⽅も多いのではないでしょうか

Slide 4

Slide 4 text

Ktorのサンプルプロジェクトを作る 3 Ktor: Project Generator

Slide 5

Slide 5 text

すると、⼤量のコードが⽣成される 4

Slide 6

Slide 6 text

俺たちは雰囲気でGradleを使っている 5

Slide 7

Slide 7 text

- Gradleの基礎をおさえる - Gradleの読み⽅を理解して、 ⾃⾝で簡単なプロジェクトを構築できるようになる 本⽇のLTのゴール

Slide 8

Slide 8 text

- Gradleとは - Gradleの基本的な概念 - Gradleのビルドを理解する - Gradleの構成⽅法を学ぶ アジェンダ

Slide 9

Slide 9 text

Gradleとは

Slide 10

Slide 10 text

“Gradle Build Tool is a fast, dependable, and adaptable open-source build automation tool with an elegant and extensible declarative build language.” Gradle User Manual - オープンソースのビルド⾃動化ツール - JVM系の⾔語(Java, Kotlinなど)のビルドツールとして利⽤される - プラグインシステムが充実しており、任意のビルドフローを構築できる - 設定ファイルをKotlin DSL / Groovy DSLにて記述できる - インクリメンタルビルド、ビルドキャッシュ、並列実⾏などにより ビルドを⾼速化できる Gradleとは

Slide 11

Slide 11 text

Gradleの基本的な概念

Slide 12

Slide 12 text

Gradleの基本的な概念 - Projects - Build Scripts - Dependency Management - Tasks - Plugins

Slide 13

Slide 13 text

Gradleの基本的な概念 - Projects - Gradleによるビルド対象となるアプリケーション・ライブラリのこと - ビルド対象は単⼀・複数のいずれでもOK - Build Scripts - Dependency Management - Tasks - Plugins

Slide 14

Slide 14 text

Gradleの基本的な概念 - Projects - Build Scripts - build.gradle(.kts)のこと - 各プロジェクトは1つ以上のBuild Scriptを含んでいる - Dependency Management - Tasks - Plugins

Slide 15

Slide 15 text

Gradleの基本的な概念 - Projects - Build Scripts - Dependency Management - プロジェクトにおける外部への依存を管理する - 依存とはプラグイン・ライブラリなどのことを指す - Version Catalogを利⽤してマルチモジュール構成や パッケージ間のバージョン同期などの管理を実現しやすくする - Tasks - Plugins

Slide 16

Slide 16 text

Gradleの基本的な概念 - Projects - Build Scripts - Dependency Management - Tasks - コンパイル、テスト、ビルドなどの実⾏単位 - 各プロジェクトにおいてはプラグインを利⽤するか、⾃⾝でタスクの定義を ⾏うなどする - Plugins

Slide 17

Slide 17 text

Gradleの基本的な概念 - Projects - Build Scripts - Dependency Management - Tasks - Plugins - プロジェクトに任意のタスクを組み込むことができる - 例) - `application` : アプリケーションの起動 (run) タスクなどを組み込める - `detekt` : detektを⽤いた静的解析タスクを組み込める

Slide 18

Slide 18 text

Gradleのビルドを理解する

Slide 19

Slide 19 text

3つのフェーズに分けて実⾏される 1. Initialization - settings.gradle(.kts)の特定 → Settings インスタンスを作成 - ビルド対象となるプロジェクトの特定 → Projectインスタンスを作成 1. Configuration - Projectにおけるビルドスクリプト(build.gradle(.kts))の評価 → タスクの依存グラフを構築 1. Execution - 依存グラフに則り、並列でタスク実⾏ Gradleのビルドライフサイクル

Slide 20

Slide 20 text

buildタスク⾃体は Base プラグイン にて登録されている ここに Java Plugin や Kotlin JVM Plugin が必要なタスクを追加することで ビルドを実現している buildタスクを理解する Java Pluginによるタスクの依存グラフ(The Java Plugin)

Slide 21

Slide 21 text

- Gradleは、前回のタスク実⾏から⼊⼒が変化していない場合に タスク実⾏⾃体をskipしてくれる(前回ビルド時の結果をリプレイする) - --console=verboseオプションで各タスクの実⾏結果が確認できる インクリメンタルビルド (Incremental Build) インクリメンタルビルドにより出⼒を復元できている(UP-TO-DATE)

Slide 22

Slide 22 text

- Cache keyに対してタスクの実⾏結果を保持しており、 結果の復元が可能な場合はタスク実⾏をskipする - 例えば、ブランチ切り替えでローカルの状態が変わるときに実⾏skipできる - CLIオプション or gradle.propertiesから明⽰的に有効にする必要あり ビルドキャッシュ (Build Cache) ビルドキャッシュから出⼒を復元できている(FROM-CACHE)

Slide 23

Slide 23 text

- Configurationフェーズで⽣成されるタスクの依存グラフに関する情報を キャッシュとして保存し、その後の実⾏時にConfigurationフェーズをskip する - CLIオプション or gradle.propertiesから明⽰的に有効にする必要あり - ⼀部未対応のプラグインがあるので有効にできない場合もある コンフィギュレーションキャッシュ (Configuration Cache) Incremental Buildに加え、Configuration Cacheを有効にすることでタスクの実⾏時間が減っている

Slide 24

Slide 24 text

Gradleの構成⽅法を学ぶ

Slide 25

Slide 25 text

- Kotlin / Ktorのサーバーアプリケーション(app)と 共通ライブラリ(lib)のマルチモジュール構成 - Gradleの設定ファイルにはKotlin DSLを利⽤ - サンプルリポジトリ: gradle-relearning-sample-repo 今回構成するアプリケーション

Slide 26

Slide 26 text

全体の構成 Root Project: ktor-sample setting.gradle.kts app lib build.gradle.kts build.gradle.kts 依存

Slide 27

Slide 27 text

全体の構成 Root Project: ktor-sample setting.gradle.kts app lib build.gradle.kts build.gradle.kts プロジェクトの全体構成を管理 ビルドスクリプトを管理 タスクや依存関係はここで管理される 依存

Slide 28

Slide 28 text

全体の構成 Root Project: ktor-sample setting.gradle.kts app lib build.gradle.kts build.gradle.kts 依存

Slide 29

Slide 29 text

settings.gradle.kts Root Project: ktor-sample setting.gradle.kts app lib build.gradle.kts build.gradle.kts 依存 読み込むプロジェクトを宣⾔

Slide 30

Slide 30 text

app/build.gradle.kts Root Project: ktor-sample setting.gradle.kts app lib build.gradle.kts build.gradle.kts 依存 libを依存先として指定

Slide 31

Slide 31 text

アプリケーションコード

Slide 32

Slide 32 text

- appモジュールからlibモジュールを利⽤する、Ktorアプリケーションが起 動できた - 実際には、各モジュールのタスクをどう定義するかだったり、 マルチモジュールにおいて共通のロジックをどう定義するかなどは 考える必要がある Ktor Serverを動かしてみる

Slide 33

Slide 33 text

まとめ

Slide 34

Slide 34 text

- Gradleの基本的な概念と構成をおさえることでGradleファイルの読み⽅ を理解した - 今回の内容は Authoring Guide にまとまってあるので、Gradleの環境構築 する⼈は⼀度⽬を通しておくと良さそう - Gradleを理解して、みんなでKotlinはじめていきましょう!! まとめ

Slide 35

Slide 35 text

Sansan 技術本部 募集ポジション紹介 https://media.sansan-engineering.com/

Slide 36

Slide 36 text

No content