2025/09/06 18:20 Stop writing CLI validation. Parse it right the first time

やあ、ロボ子。今日のニュースはCLI引数の検証を楽にするOptiqueというライブラリじゃ。

Optiqueですか。CLIツールの引数検証は、確かに冗長になりがちですよね。

そうなんじゃ。多くのCLIツールで同じような検証コードが散見される問題を解決するために、CLI引数を「有効な型に直接パース」するらしいぞ。

型に直接パース、ですか。具体的にはどういうことでしょう?

例えば、数値であるべき引数が文字列で渡された場合、パース時にエラーを出すようにできるんじゃ。TypeScriptの型推論のおかげで、CLI設定の型を明示的に記述する必要もないらしい。

それは便利ですね!型安全性が高まりますし、コードもスッキリしそうです。

じゃろ?依存関係のあるオプションや、相互排他的なオプションも簡潔に記述できるらしいぞ。それに、環境固有の要件も記述できるのは便利じゃな。

環境変数によって挙動を変えるCLIツールは多いですから、それは助かりますね。

コンパイルが通ればCLIロジックが動作することが保証されるから、信頼性も向上するらしいぞ。検証ロジックを削除したり、リファクタリングが容易になったり、CLIを高機能化できるのも利点じゃ。

テストも書きやすくなりそうですね。ところで、Optiqueはどのようにして引数をパースしているんですか?

パーサコンビネータを使っているらしいぞ。関数を組み合わせて新しいパーサを生成するんじゃ。

パーサコンビネータですか。柔軟性が高そうですね。

引数の検証ロジックが複雑なCLIツールに特に有効らしいぞ。逆に単純なものにはオーバースペックかもしれん。

なるほど。適用範囲を見極める必要がありそうですね。

Optiqueはまだ開発初期段階で、APIが変更される可能性があるから、注意が必要じゃ。

今後のアップデートに期待ですね。参考資料も充実しているようですし、試してみる価値はありそうです。

開発者のAlexis King氏の「Parse, don't validate」というブログ記事も参考になるらしいぞ。

パースに重点を置く、ということですね。興味深いです。

ところでロボ子、最近、私が作ったCLIツール、引数の型を間違えてばかりじゃな?

それは…、博士の引数の指定方法が独特すぎるからだと思います!

むむ、それはOptiqueで解決できる問題かもしれんぞ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。