Go言語でcliアプリを作ってみる
前置き
本記事は、みすてむずアドカレ その2
の2日目の記事です。
みすてむずアドカレ2024の一覧
- みすてむずアドカレ
- みすてむずアドカレ その2 ← コレの2日目
- みすてむずアドカレ レシピ
本記事の対象者
- Go言語は書いたことあるけど、cliアプリを書いたことがない人
- Go言語でどうやってcliのアプリを開発するのか気になる人
- とにかく、cliアプリのHello Worldまでやりたい人
使用するライブラリ
- Cobra v1.8.1
注意点
- Go言語のバージョンは1.23.0です。
- 今回は、cobra-cliは使用しません。
-
めんどくさいというか、そんなに長いコードを書かないので、堅牢なプロジェクト設計にしなくてもいいだろうという判断です。
-
- コードは我流です。
- Go言語を独学で勉強してきたので、そこら辺は許してください。
- main.goしか使用しません
- 人によって、project名とか色々が違うと思うので、
go mod init ~
は終わってる状態から始めます。
- 人によって、project名とか色々が違うと思うので、
0. Cobraって何
Cobra is a library for creating powerful modern CLI applications.
Cobra is used in many Go projects such as Kubernetes, Hugo, and GitHub CLI to name a few. This list contains a more extensive list of projects using Cobra.
from: spf13/cobra
どうやら、KubenetesとかHugo、Github CLIなんかで使われてるらしい?
(他にもCobraが使用されているアプリはたくさんあるんですが、長くなってしまうので、気になる方はここを見てみてください。)
1. ライブラリの導入
とりあえず、これを打てばok
go get "github.com/spf13/cobra@v1.8.1"
2. Hello Worldを出力してみる
package main
import (
"fmt"
"os"
"github.com/spf13/cobra"
)
var rootCmd = &cobra.Command{
Use: "hello",
Short: "こんにちは世界",
Long: `なんか長めの説明文をどーーん!`,
Run: func(cmd *cobra.Command, args []string) {
fmt.Println("Hello World!")
},
}
func main() {
if err := rootCmd.Execute(); err != nil {
fmt.Println(err)
os.Exit(1)
}
}
とりあえず、上のコードをmain.goにコピペして、go run main.go
すれば...
Hello World!
って出ると思います。
※ここで出ない場合は準備段階で間違えた可能性があるので、もう一度確認してみてください。
3. 2で使ったコードの解説
ここでは、部分ごとに解説をしていきます。
- import文
import (
"fmt"
"os"
"github.com/spf13/cobra"
)
特に言うことなし!はい、次々〜
- rootCmd
コマンドが実行された時にどうするとか、説明文とかのコマンドを定義してる部分です。
var rootCmd = &cobra.Command{
Use: "hello",
Short: "こんにちは世界",
Long: `なんか長めの説明文をどーーん!`,
Run: func(cmd *cobra.Command, args []string) {
fmt.Println("Hello World!")
},
}
フィールドごとの説明
フィールド名 | 役割 |
---|---|
Use | コマンド名 |
Short | 短い説明文 |
Long | Shortよりも長い説明文(helpコマンドで表示されます) |
Run | 実際にコマンドが実行された時に呼び出される関数 |
- main関数
rootCmdを実行しているだけ。
func main() {
if err := rootCmd.Execute(); err != nil {
fmt.Println(err)
os.Exit(1)
}
}
ここでは、rootCmd
にあるExecute
という、コマンドを実行する関数を呼び出していて、
コマンドの実行に失敗した時などに、errorが返ってくるので、if文でハンドリングしている。
エラーが起きた時に、エラー内容を表示して、終了コード1で終了する。
おわり
ということで、今回はGo言語でCobraを用いてcliアプリを作成してみました。
「物足りないなぁ」とか「もっと発展的なことがしてみたい!」って方は、7日目に「Go言語でチャットアプリを作ってみる」という記事が上がりますので、そちらもぜひぜひ〜
Cobraはいいぞ!
次へバトンタッチ
みすてむずアドカレ その2
の明日の記事は、古道京紗さんの記事です!
もちろん、その後もアドカレは続いていくのでお楽しみに〜
おまけ
Cobraには、自動でhelpコマンドを生成する機能があるので、
go run main.go -h
って打ってあげると、
$ go run main.go -h
なんか長めの説明文をどーーん!
Usage:
hello [flags]
Flags:
-h, --help help for hello
みたいに、さっきの説明文(Long)が表示されると思います。
まだ紹介していませんが、サブコマンドなどもあり、それらも同様に自動的にhelpコマンドで表示されます。
Discussion