devcontainer で Kotlin 入門
初めての Zenn での投稿で、2022年最初で最後のブログです。
お正月休みの課題として今までちゃんと触ったことがなかった Kotlin に入門することにしました。
ローカル環境に色々と入れたくなかったので devcontainer を使ったのですが、まとまった日本語の記事がなかったのでブログを書きました。
※ちなみに記事は Obisidian を使ってまとめました
事前準備
この記事は VSCode・Dev Containers Extension がインストール済みであることを想定しています。
$ mkdir demo && cd demo
適当なフォルダを作成して Kotlin Project を作成します。
Kotlin Dev Container
.devcontainer/devcontainer.json
を作成して下記を記述。
VSCode がデフォルトで用意している Java 用の devcontainer に Kotlin Compiler の kotlinc を追加して Gradle を使うように設定しています。
// For format details, see <https://aka.ms/devcontainer.json>. For config options, see the
// README at: <https://github.com/devcontainers/templates/tree/main/src/java>
{
"name": "Java",
"image": "mcr.microsoft.com/devcontainers/java:0-17-bullseye",
"features": {
"ghcr.io/devcontainers/features/java:1": {
"version": "none",
"installMaven": "false",
"installGradle": "true"
},
"ghcr.io/mikaello/devcontainer-features/kotlinc:1": {}
},
"extensions": [
"mathiasfrohlich.kotlin",
"vscjava.vscode-java-pack"
],
// Use 'forwardPorts' to make a list of ports inside the container available locally.
// "forwardPorts": [],
// Use 'postCreateCommand' to run commands after the container is created.
// "postCreateCommand": "java -version",
"postStartCommand": "git config --global --add safe.directory ${containerWorkspaceFolder}",
"customizations": {
"vscode": {
"extensions": [
"fwcd.kotlin",
"vscjava.vscode-java-pack",
"vscjava.vscode-gradle"
]
}
}
// Configure tool-specific properties.
// "customizations": {},
// Uncomment to connect as root instead. More info: <https://aka.ms/dev-containers-non-root>.
// "remoteUser": "root"
}
記述できたらコマンドパレットで Reopen in Container
を入力して暫く待つ
Gradle で Kotlin Project の作成
VSCode のターミナルをアクティブにして下記コマンドで Kotlin の Gradle プロジェクトを作成。
gradle init
Select type of project to generate:
1: basic
2: application
3: library
4: Gradle plugin
Enter selection (default: basic) [1..4] 2
Select implementation language:
1: C++
2: Groovy
3: Java
4: Kotlin
5: Scala
6: Swift
Enter selection (default: Java) [1..6] 4
Split functionality across multiple subprojects?:
1: no - only one application project
2: yes - application and library projects
Enter selection (default: no - only one application project) [1..2] 1
Select build script DSL:
1: Groovy
2: Kotlin
Enter selection (default: Kotlin) [1..2] 2
Generate build using new APIs and behavior (some features may change in the next minor release)? (default: no) [yes, no]
Project name (default: test-kotlin-project):
Source package (default: test.kotlin.project):
> Task :init
Get more help with your project: https://docs.gradle.org/7.6/samples/sample_building_kotlin_applications.html
BUILD SUCCESSFUL in 10m 17s
2 actionable tasks: 2 executed
プロジェクトが作成されると以下のような構成になっている。
.
├── app
│ ├── build.gradle.kts
│ └── src
│ ├── main
│ │ ├── kotlin
│ │ │ └── demo
│ │ │ └── App.kt
│ │ └── resources
│ └── test
│ ├── kotlin
│ │ └── demo
│ │ └── AppTest.kt
│ └── resources
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
└── settings.gradle.kts
12 directories, 9 files
参考ページ
Makefile でコマンド管理
ビルドやテストは VSCode の tasks を使ってもいいんですが、慣れている Makefile で用意。
.PHONY: build
build:
./gradlew build -x test
run:
./gradlew run
.PHONY: test
test:
./gradlew test
run
でアプリケーションが実行されることを確認。
$ make run
./gradlew run
> Task :app:run
Hello World!
BUILD SUCCESSFUL in 781ms
2 actionable tasks: 1 executed, 1 up-to-date
このプロジェクトのリポジトリ
まとめ
短い記事になりましたが、以上になります。
個人的な目標で2023年はアウトプットを増やしていきたいと思っています。
この流れで Kotlin で C コンパイラを作る予定なので、また記事にできればと思います。
Discussion