Skip to content

[# CLI を書いてみる

kotlin 公式が出している kotlinx.cli がありましたが、今はもうメンテナンスされていません。

clikt を使うことにします。 clikt はサブコマンドにも対応しており、機能的には十分と思います。

設定

build.gradle.kts に以下のように追記します。

kotlin
plugins {
    kotlin("multiplatform") version "2.0.21"
}

kotlin {
    macosX64 {
        binaries {
            executable()
        }
    }
    macosArm64 {
        binaries {
            executable()
        }
    }
    linuxX64 {
        binaries {
            executable()
        }
    }

    sourceSets {
        commonMain {
            dependencies {
                implementation("com.github.ajalt.clikt:clikt:4.4.0")
            }
        }
    }
}

実装

kotlin
import com.github.ajalt.clikt.core.CliktCommand
import com.github.ajalt.clikt.parameters.arguments.argument
import com.github.ajalt.clikt.parameters.options.option

class Tool : CliktCommand() {
    val opt: String? by option(help = "an option")
    val arg: String by argument(help = "an argument")

    override fun run() {
        println("opt=$opt, arg=$arg")
    }
}

fun main(args: Array<String>) {
    Tool().main(args)
}

非常に簡単に使えるとともに、一通りのパースができるので機能的には十分と思います。

自動的に --help オプションも設定されます。

Usage: tool [<options>] <arg>

Options:
  --opt=<text>  an option
  -h, --help    Show this message and exit

Arguments:
  <arg>  an argument