tl;dr GoでCLIのツールを作るとき、皆さんフラグをどう実装しますか? 標準のflagパッケージでシンプルにしますか? それともCLIコマンドライブラリで複雑でリッチなモダンコマンドにしますか? 今回はいくつもあるCLIコマンドライブラリから、フラグを制御するライブラリに着目しようと思います。 まず手始めに標準のflagパッケージを見た上で、各ライブラリは何を解決したいのか。どのような方法で解決しようとしているのか。 この機会にちょっと眺めて遊んでみようと思います。 Go標準flagパッケージ Go製のCLIツールを見ていくと、どうもサードパーティライブラリを使っている方が多く印象を受けます。 このコマンド、中身どうなっているかな。 と見に行くと、ほとんどのツールは標準flagパッケージではなく、サードパーティライブラリをつかっています。 Go公式ツールや、古くに作られたツールなどは
![Go標準のflagパッケージと比べてみようサードパーティflagライブラリ - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/80326ed1da73a9f70797b585fe7cfaadf33f7a1f/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Fadvent-calendar-ogp-background-7940cd1c8db80a7ec40711d90f43539e.jpg%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9R28lRTYlQTglOTklRTYlQkElOTYlRTMlODElQUVmbGFnJUUzJTgzJTkxJUUzJTgzJTgzJUUzJTgyJUIxJUUzJTgzJUJDJUUzJTgyJUI4JUUzJTgxJUE4JUU2JUFGJTk0JUUzJTgxJUI5JUUzJTgxJUE2JUUzJTgxJUJGJUUzJTgyJTg4JUUzJTgxJTg2JUUzJTgyJUI1JUUzJTgzJUJDJUUzJTgzJTg5JUUzJTgzJTkxJUUzJTgzJUJDJUUzJTgzJTg2JUUzJTgyJUEzZmxhZyVFMyU4MyVBOSVFMyU4MiVBNCVFMyU4MyU5NiVFMyU4MyVBOSVFMyU4MyVBQSZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZ0eHQtY29sb3I9JTIzM0EzQzNDJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTU2JnM9ZjQ5MjlmZjNlZDI0MzE3OGI1NTZhZWEyODc2MGIyYzE%26mark-x%3D120%26mark-y%3D96%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9OTcyJnR4dD0lNDBsaWdodHRpZ2VyMjUwNSZ0eHQtY29sb3I9JTIzM0EzQzNDJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTM2JnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnM9YzM0OGU4Mjc5MDVhYTU3OWIwMDc3OTI1MTM1ZDJmNmY%26blend-x%3D120%26blend-y%3D500%26blend-mode%3Dnormal%26s%3Dfb13f5bb248dc03c66421e72fc69e011)