Upgrade to Pro — share decks privately, control downloads, hide ads and more …

kotlinx.cliで始めるCLIアプリ開発

 kotlinx.cliで始めるCLIアプリ開発

CAMPHOR- LT 2020 Summer にて発表

3c7020b33ae8880dd9514b6469a28ae0?s=128

Yuta Tomiyama

August 08, 2020
Tweet

Transcript

  1. kotlinx.cliで始める CLIアプリ開発 CAMPHOR- LT 2020 Summer

  2. 自己紹介 HN: マヤミト 会津大学26期 (学部3年) Zli 現代表 Twitter: @yt8492 GitHub:

    https://github.com/yt8492 好きな技術: Kotlin https://yt8492.com Facebookのすがた Twitterのすがた
  3. もくじ 1. そもそもKotlinでCLIアプリの開発ができるのか? 2. kotlinx.cli の紹介 a. プロジェクトへの導入 b. ArgParser

    c. Argument d. Option e. Subcommand 3. デモ
  4. 1. そもそもKotlinでCLIアプリ開発ができるのか?

  5. 1. そもそもKotlinでCLIアプリ開発ができるのか? A. できます。(できなかったらそもそも今日登壇してない)

  6. 前提: KotlinでCLIアプリを開発するには - 実行可能なjarファイルにする - 実行可能なバイナリにする - nodeで実行可能なjsにする

  7. 2. kotlinx.cliとは - Kotlinのコマンドラインパーサーライブラリ - Kotlin公式が出している - コマンドやパラメータを宣言的に書ける - マルチプラットフォーム対応

    - Kotlin/JVM, Kotlin/JS, Kotlin/Native (公式リポジトリのReadmeより適当に和訳) https://github.com/Kotlin/kotlinx-cli
  8. 使用例1

  9. 使用例2

  10. kotlinx.cliの導入 方法その1 build.gradleに依存を追加

  11. kotlinx.cliの導入 方法その2(Kotlin/Nativeの場合のみ) build.gradleのターゲットの設定でenableEndorsedLibsをtrueにする

  12. ArgParser コマンドライン引数をパースしてくれるやつ コンストラクタにプログラム名を渡す parseメソッドにコマンドライン引数のString型の配列を渡してパース

  13. Argument そのCLIアプリの主要な引数 例: catで渡すファイル名 type: 引数のタイプ(String, Int, Double, Boolean, Choice)

    description: 引数の説明 変数名がそのままargumentの名前になる
  14. Option コマンドのオプション 例: git commit --amend type, description: Argumentと同じ shortName:

    -が1つの省略形 Argumentと同じく、変数名がそのままオプション名(fullName)になる デフォルト値や必須のオプションなどを設定可能
  15. Subcommand CLIアプリのサブコマンド 例: git add, git commit Subcommandクラスを継承して実装する Subcommandクラスのコンストラクタに名前と説明を渡す ArgumentとOptionの使い方はほぼ同じ

    executeメソッドに実行時の処理を実装する
  16. デモ

  17. 使ってみた感想 - めちゃくちゃ楽 - 宣言的に書けるので読みやすい - helpを自動で設定してくれるのが良い - MPP対応なのでいろいろな使い方ができそう -

    サーバーの起動時のオプションをkotlinx.cliを使って渡すなど - CLIアプリの場合バイナリにできるKotlin/Nativeと相性が良い
  18. リンク集 kotlinx.cli https://github.com/Kotlin/kotlinx-cli 今回のサンプルアプリ https://github.com/yt8492/CliSample catをKotlin/Nativeで実装しようとしてるやつ(WIP) https://github.com/yt8492/CatKt