数日前からjavaでコマンドライン引数を解析するやつを書いています。
Javaにはcommons cliというコマンドライン引数を解析するライブラリがあるのですが、自前で作ってみる方向で行きます。
どんなやつ?
ターゲットとしてはgitとかrailsみたいに、最初の引数にコマンドを取って、それ以降にオプションが続く形式のコマンドです。git status -sみたいなやつです。
まともに使えるようになったらGlacierToolsに使うつもりです。
なんでつくったの?
GlacierToolsでコマンドライン引数を解析する部分の処理がめちゃくちゃになって、可読性が悪くなってきたからです。下のリンクのコードを見てもらうとわかるのですが、色々とダメな所が盛り沢山です。
https://github.com/mironal/GlacierTools/blob/master/src/jp/mironal/java/aws/app/glacier/cmd/VaultControllerCmd.java
- コマンドとコマンドの処理の記述箇所が離れていて、可読性が悪い
- コマンドライン引数を登録してる所は、もはや無いに等しい
- どのオプションがどのコマンドに紐付いているのが分からない
- helpもどれがどれなのか分かりにくい
- エラー処理も分かりにくい
- そもそもバグってる
これらを解決出来るように色々考えてみました。
どんな風に書けるの?
下のように書けます。それぞれコマンドはのCommandクラスのインスタンスで閉じた形になるので、オプションの種類が増えてもなんとかなるような気がします。
また、オプションの解析そのものは裏側に隠して、実行すべき処理に集中できるようにしました。
読みづれぇ!!
ごめんなさい。僕的には読みやすいと思ったんです。
まだ動く状態まで行ってないので、色々変更するかもしれないです。
動く状態になったらgithubに公開してみる予定です。
なかなか奥が深くて楽しいです。
つかScalaで書けよ・・・
0 件のコメント:
コメントを投稿