概要
KotlinでAtCoderのコンテストに参加するための最低限の環境構築メモです。
環境
- Windows 11
- IntelliJ IDEA Community Edition 2023.2
- AtCoder 2023/1 Language Updateの取り込み後の内容
- Kotlin 1.8.20
- JVM 19
方針
- 手元でKotlinコードを書いて実行やデバッグをするための最低限の環境を構築する
- 非公式の便利な機能はとりあえずは使わない
- なので考えてみたらAtCoderとかあんまり関係ないかも… でも面倒なのでこのまま書く
- WSLはとりあえず使わず、ホスト(Windows)側で構築する
登場するツールとそれらの雑な説明
- Kotlin
- プログラミング言語。かわいい
- IntelliJ IDEA
- 統合開発環境(IDE)
- JavaでおなじみのIDEだったが、Kotlinでも使える
- というかIntelliJ IDEAの開発元が作った言語がKotlin
- 有償のUltimate Editionと無償のCommunity Editionがあるが、少なくとも今回の用途だとCommunity Editionで十分
- Java仮想マシン(JVM)
- 基本的にはKotlinのコード(をコンパイルしたバイナリ)はこいつの上で動くので必要
- Gradle
- ビルドツール。Kotlinのコードのコンパイル、実行を担当
- 依存ライブラリの管理などの重要な役割が他にもあるけど、今回はあまり関係ない
- 独立したツールだが、IntelliJ IDEAに統合されて使える
- ビルドツール。Kotlinのコードのコンパイル、実行を担当
内容
IntelliJ IDEAの導入
Kotlinの処理系、JVM、Gradleなどは一通りIntelliJ IDEAを経由して導入できるため、とにかくまずIntelliJ IDEAを導入する。
導入方法は大きく分けるとIntelliJ IDEAを直接インストールする方法、JetBrains Toolboxを使ってインストールする方法の2つがある。JetBrains Toolboxをインストールして、その画面からIntelliJ IDEA Community Editionを選ぶのが簡単。
プロジェクトの作成
IntelliJ IDEAがインストールできたら、「New Project」を押してプロジェクト作成を開始する。
プロジェクト作成のモーダルが表示されるので、以下のように設定する。
- Name
- 自分がわかりやすい名前なら何でもOK
- Location
- なんでもいいけど、基本デフォルトのままでよいと思う
- Create Git repository
- Gitで管理したければチェックを入れる
- よくわかんなければチェックしなくていい
- Language
- Kotlinを選択
- Build system
- 今回はGradleにする
- JDK
- バージョン19を選ぶ
- インストールされていない場合、プルダウンを選んで「Add SDK」 -> 「Download JDK...」 を押してIntelliJ IDEAにダウンロードさせるとよい
- Versionは19
- VendorはAmazon Corretto、Azul Zulu、Eclipse temurinなどいくつかあるが、どれでもよい
- Gradle DSL
- どっちでもいいけど今回はKotlinにする
- Add sample code
- どっちでもいいけどとりあえずチェックが入ったままにする
上記の設定で「Create」を押下でプロジェクトの作成が開始される。画面が切り替わった後に自動ダウンロードやビルドなどの処理が実行されていくのでしばらく待つ。
画面の下にこんな感じのインジケータが表示されているうちはまだ実行中なので、これが完全に消えるまで待つ。
build.gradle.ktsを編集
動作が落ち着いたら、画面の左から「build.gradle.kts」を開く。
このファイルを以下のように書き換える。
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
kotlin("jvm") version "1.8.20"
idea
}
group = "org.example"
version = "1.0-SNAPSHOT"
repositories {
mavenCentral()
}
dependencies {
testImplementation(kotlin("test"))
}
tasks.test {
useJUnitPlatform()
}
tasks.withType<KotlinCompile> {
kotlinOptions.jvmTarget = "19"
}
あまり関係ない記述もあるが、特に重要なのは以下の記述。
plugins {
kotlin("jvm") version "1.8.20" // 執筆時点でAtCoderで使えるKotlinのバージョンを指定
idea
}
tasks.withType<KotlinCompile> {
kotlinOptions.jvmTarget = "19" // 執筆時点でAtCoderでKotlinを実行する際に指定している -jvm-target
}
ファイルを編集したら、反映させるための操作を行う。
右端の縦書きの「🐘 Gradle」みたいなところを押すと上記の画面が出るので、この左上の🔄みたいなやつを押す。
すると内容を反映させるためにGradleがあれこれ処理するので、終わるまで待つ。
ここまでやればソースを書いて実行できるようになっているはず。
上記の設定で「Add sample code」にチェックを入れていた場合は「Main.kt」というファイルが表示されているはずなので、これをそのまま実行してみる。
右クリックして「Run 'Mainkt'」を押すか、もしくは「Ctrl + Shift + F10」を押すかすると実行できる。
このような表示が出ればちゃんと環境構築できている。(画面下に出る)
動作確認
とりあえず簡単な問題を解いてみる。
https://atcoder.jp/contests/language-test-202301/tasks/practice_1
fun main() {
val a = readln().toInt()
val (b, c) = readln().split(" ").map { it.toInt() }
val s = readln()
println("${a + b + c} $s")
}
今回は動作確認やテストを支援するツールを何もインストールしていないので、動作確認も提出もコピペで行う。
実行すると画面下で入力待ちのコンソールが出るので、そこにペーストして動作確認する。
コピペで提出なので、Main.ktを毎回書き換えてもいいし、別途ファイルを作っていくのでもよい。(ファイル名は適当でもいい)
ただ、別途ファイルをつくる場合、main以外のpublicな関数名がバッティングするとコンパイルエラーになるとか、他のファイルにあるpublicな関数に依存してしまって手元だとコンパイルエラーにならないが、提出するとCEになるとかのトラブルがあり得るので要注意。
その他
Live template(いわゆるスニペット)
val (b, c) = readln().split(" ").map { it.toInt() }
とかをいちいち手動で入力するのは面倒なので、Live templateを使って自動補完させるようにしておくと少し楽になる。
Live templateは、略語を入力すると本来必要なコードを自動で補完してくれる機能。
たとえば main
と入力してEnterで
fun main() {
}
が入力補完されるLive templateなどが最初から定義されている。
Live templateは自分で登録することもでき、上記の val (b, c) = readln().split(" ").map { it.toInt() }
を自動補完させるためのLive templateを登録するといい。
Live templateの登録方法はこちら。
https://pleiades.io/help/idea/creating-and-editing-live-templates.html
私はとりあえず入力周りだけ以下のような感じでLive templateを登録している。本当はもっと充実させたい…
初回実行の遅さについて
今回の手順の通り環境構築した場合、実行はGradleによって行われる。初回実行時はGradleがあれこれ初期化処理を実行するらしく、かなり起動が遅いので注意。一度起動すると高速化のためにGradleのプロセスが常駐し、2回目以降の実行はけっこう速い。なのでコンテスト前に一度適当に何か実行しておくとよい。
また、原因は別かもしれないがLive templateによる補完も初回は遅いことがあるので、これもコンテスト前に適当に入力して補完させておくとよい。