🌏

Gradleの世界を25分のぞいてみた

に公開

What build.gradle & build.gradle.kts?

Flutterを仕事で2年ぐらい触りKotlinを仕事で少しだけ触り個人開発で、Jetpack Composeを使ってメモアプリを作ったことがありました。

今回は、build.gradle & build.gradle.ktsにフォーカスするので、Flutter/Dartは出てこないです。内部のAndroidの知識を知るのが目的で書いた記事です。

android/ディレクトリを開くといつも眺めるのが嫌だなと思うファイルが沢山ある😱
xmlとかbuild.gradle今だとbuild.gradle.ktsですかね。新しくなっている!

Androidアプリの開発を続けてきたが知らないのは罪だなと思い深掘りするというところまではいかないですが、Gradleの世界を知りたいと思いのぞいてみることにしました👀

Udemyの動画見てみるが上手くいかない💦
「どうする?。動く環境と基本的なことを学びたい!」

公式ドキュメントがあった!
解説によれば25分で読み終えることができるらしい?
基礎学習の方は、55分らしい?

記事の対象者

  • build.gradleについて知りたい
  • build.gradle.ktsについて知りたい
  • どこのサイト見ればいいのか?

👀25分の世界をのぞいてみる

いや25分以上見ていた💦

https://docs.gradle.org/current/userguide/getting_started_eng.html

  1. Gradle Basics
    The learning the basics section goes through the Gradle core concepts so that you can quickly understand how to invoke tasks, turn on features, apply plugins, add dependencies to your project, and more.

  2. グラードルの基本
    Basicsセクションの学習は、Gradle Coreの概念を通過して、タスクを呼び出し、機能をオンにし、プラグインを適用し、プロジェクトに依存関係を追加する方法などをすばやく理解できるようにします。

The basics covers:

Part 1. Core Concepts
Part 2. Wrapper Basics
Part 3. Command Line Interface Basics
Part 4. Settings File Basics
Part 5. Build Files Basics
Part 6. Dependencies and Dependency Management Basics
Part 7. Tasks Basics
Part 8. Plugins Basics
Part 9. Incremental Builds and Build Caching Basics
Part 10. Build Scans

翻訳すると
パート 1.コア概念
パート 2.ラッパーの基本
パート 3.コマンドラインインターフェースの基本
パート 4.設定ファイルの基本
パート 5.ビルドファイルの基本
パート 6.依存関係と依存関係管理の基本
パート 7.タスクの基本
パート 8.プラグインの基本
パート 9.増分ビルドとビルドキャッシュの基本
パート 10.ビルドスキャン

コア概念から読んでいくか。。。

Core Concepts

Gradleは、ビルドスクリプトの情報からソフトウェアの構築、テスト、展開を自動化します。

図が書いてありますがこれは公式のリンクを見てください!
https://docs.gradle.org/current/userguide/gradle_basics.html#gradle

コアコンセプト

プロジェクト:

Gradleプロジェクトは、アプリケーションやライブラリなど、ビルド可能なソフトウェアです。

単一プロジェクトビルドには、ルート プロジェクトと呼ばれる単一のプロジェクトが含まれます。

マルチプロジェクトビルドには、1 つのルート プロジェクトと任意の数のサブプロジェクトが含まれます。

ビルド スクリプト:

ビルド スクリプトは、プロジェクトをビルドするために実行する手順を Gradle に詳細に指示します。

各プロジェクトには 1 つ以上のビルド スクリプトを含めることができます。

依存関係と依存関係の管理:

依存関係管理は、プロジェクトに必要な外部リソースを宣言および解決するための自動化された手法です。

通常、各プロジェクトには、ビルド中に Gradle が解決するいくつかの依存関係が含まれています。

タスク:

タスクは、コードのコンパイルやテストの実行などの基本的な作業単位です。

各プロジェクトには、ビルド スクリプトまたはプラグイン内で定義された 1 つ以上のタスクが含まれています。

プラグイン:

プラグインはGradle の機能を拡張するために使用されます。

プラグインはオプションでプロジェクトにタスクを提供します。

プロジェクト構造

多くの開発者は、既存のプロジェクトを通じて初めて Gradle を操作します。

プロジェクトのルート ディレクトリにgradlewおよびファイルが存在することは、 Gradle が使用されていることを明確に示しています。gradlew.bat

Gradle プロジェクトは次のようになります。

project
├── gradle                   ①       
│   ├── libs.versions.toml   ②           
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew                        ③
├── gradlew.bat                    ③    
├── settings.gradle(.kts)          ④
├── subproject-a
│   ├── build.gradle(.kts)         ⑤     
│   └── src                        ⑥
└── subproject-b
    ├── build.gradle(.kts)         ⑤     
    └── src                        ⑥
  1. ラッパーファイルなどを保存するための Gradle ディレクトリ
  2. 依存関係管理のためのGradleバージョンカタログ
  3. Gradleラッパー スクリプト-これは Gradle プロジェクトです。
  4. ルートプロジェクト名とサブプロジェクトを定義するGradle設定ファイル
  5. 2つのサブプロジェクトのGradleビルドスクリプトsubproject-a-そしてsubproject-b
  6. プロジェクトのソースコードおよび/または追加ファイル

Gradleの呼び出し

IDEで
Gradle は、Android Studio、IntelliJ IDEA、Visual Studio Code、Eclipse、NetBeans など多くの IDE に組み込まれています。

IDE でアプリをビルド、クリーン、または実行すると、Gradle が自動的に呼び出されます。

Gradle の使用方法と構成方法の詳細については、選択した IDE のマニュアルを参照してください。

コマンドライン
Gradle はインストールされるとコマンドラインから呼び出すことができます。

gradle build

ほとんどのプロジェクトでは、インストールされたバージョンの Gradle ではなく、Gradle Wrapper を使用します。

Gradleラッパーを使う
ラッパーは、宣言されたバージョンの Gradle を呼び出すスクリプトであり、Gradle ビルドを実行するための推奨される方法です。

./gradlew build

IntelliJ IDEAで練習用のプロジェクトを作って実験してみた!

build.gradle.ktsではない方で構築したものですが、コマンドは一緒。

./gradlew build

logの英語を翻訳するとこのようなことが書かれておりました!

Gradle 8.10.2へようこそ!

このリリースのハイライトは次のとおりです。

  • Java 23のサポート
  • 構成キャッシュが高速
  • より良い構成キャッシュレポート

詳細については、https://docs.gradle.org/8.10.2/release-notes.htmlを参照してください

466msで成功しました
2つの実用的なタスク:1つの実行、1つの最新のタスク

最後に

Part1を読んでみた感想ですが、ゆっくり読む。そして翻訳ツールを使って日本翻訳すれば意味はわかったので少し抵抗が減りました。

わからない技術や避けている技術を学ぶには、全体像やどのような背景で作られたのか歴史を知ることや長いと見るの大変なので、必要な機能のリファレンスだけ時間をかけて読んでみると良いと思いました。

生成AIが登場しましたが、iOSやAndroidといったOSは複雑なのでAIが代わりに設定などしてくれなかったりします😇

人間が自ら考え知見を得ることが大事です。
Flutterのコード書くのならやってくれるんですけどね💦

Discussion