CAMPHOR- LT 2020 Summer にて発表
kotlinx.cliで始めるCLIアプリ開発CAMPHOR- LT 2020 Summer
View Slide
自己紹介HN: マヤミト会津大学26期 (学部3年)Zli 現代表Twitter: @yt8492GitHub: https://github.com/yt8492好きな技術: Kotlinhttps://yt8492.com FacebookのすがたTwitterのすがた
もくじ1. そもそもKotlinでCLIアプリの開発ができるのか?2. kotlinx.cli の紹介a. プロジェクトへの導入b. ArgParserc. Argumentd. Optione. Subcommand3. デモ
1. そもそもKotlinでCLIアプリ開発ができるのか?
1. そもそもKotlinでCLIアプリ開発ができるのか?A. できます。(できなかったらそもそも今日登壇してない)
前提: KotlinでCLIアプリを開発するには- 実行可能なjarファイルにする- 実行可能なバイナリにする- nodeで実行可能なjsにする
2. kotlinx.cliとは- Kotlinのコマンドラインパーサーライブラリ- Kotlin公式が出している- コマンドやパラメータを宣言的に書ける- マルチプラットフォーム対応- Kotlin/JVM, Kotlin/JS, Kotlin/Native(公式リポジトリのReadmeより適当に和訳)https://github.com/Kotlin/kotlinx-cli
使用例1
使用例2
kotlinx.cliの導入方法その1build.gradleに依存を追加
kotlinx.cliの導入方法その2(Kotlin/Nativeの場合のみ)build.gradleのターゲットの設定でenableEndorsedLibsをtrueにする
ArgParserコマンドライン引数をパースしてくれるやつコンストラクタにプログラム名を渡すparseメソッドにコマンドライン引数のString型の配列を渡してパース
ArgumentそのCLIアプリの主要な引数例: catで渡すファイル名type: 引数のタイプ(String, Int, Double, Boolean, Choice)description: 引数の説明変数名がそのままargumentの名前になる
Optionコマンドのオプション例: git commit --amendtype, description: Argumentと同じshortName: -が1つの省略形Argumentと同じく、変数名がそのままオプション名(fullName)になるデフォルト値や必須のオプションなどを設定可能
SubcommandCLIアプリのサブコマンド例: git add, git commitSubcommandクラスを継承して実装するSubcommandクラスのコンストラクタに名前と説明を渡すArgumentとOptionの使い方はほぼ同じexecuteメソッドに実行時の処理を実装する
デモ
使ってみた感想- めちゃくちゃ楽- 宣言的に書けるので読みやすい- helpを自動で設定してくれるのが良い- MPP対応なのでいろいろな使い方ができそう- サーバーの起動時のオプションをkotlinx.cliを使って渡すなど- CLIアプリの場合バイナリにできるKotlin/Nativeと相性が良い
リンク集kotlinx.clihttps://github.com/Kotlin/kotlinx-cli今回のサンプルアプリhttps://github.com/yt8492/CliSamplecatをKotlin/Nativeで実装しようとしてるやつ(WIP)https://github.com/yt8492/CatKt