post Image
CLI作成支援パッケージ Cobra を使い、Go 言語でコマンドラインツールを作ってみる

はじめに

Go 言語でコマンドラインツールを作ることができる Cobra というパッケージがあります。僕が最近愛用している hugo も採用したという非常に優れたパッケージです。

Cobra
https://github.com/spf13/cobra

今回はこの Cobra を使って、2つの数字を指定すると足し算を行ってくれる go-keisan というコマンドラインツールを作ってみました。

go-keisan の仕様

本稿で作ろうとしている go-keisan の仕様はこんな感じ。

//バージョン番号を表示
>go-keisan version

//使い方を説明
>go-keisan help

//サブコマンド add で足し算の結果を返す
>go-keisan add 12 34
46

ではさっそく作ってみましょう。

Cobra をゲット

まず go get コマンドで Cobra をゲットします。

go get -v github.com/spf13/cobra/cobra

プロジェクトフォルダを作成

mkdir go-keisan

フォルダ構成

フォルダ構成は以下の通り。

go-keisan/
├ cmd/
│ ├ root.go
│ └ add.go
└ go-keisan.go

go-keisan.go を作成

まず最初に基本的な実行ファイルとなる go-keisan.go ファイルを作成します。

go-keisan.go
package main

import "go-keisan/cmd"

func main() {
    if err := cmd.RootCmd.Execute(); err != nil {
        fmt.Println(err)
        os.Exit(-1)
    }
}

cmd/root.go を作成

次に root.go ファイルを作成します。version などの基本的なサブコマンドはこの中に記述します。

root.go
package cmd

import (
    "fmt"

    "github.com/spf13/cobra"
    "github.com/spf13/viper"
)

var RootCmd = &cobra.Command{
    Use:   "go-keisan",
    Short: "This tool is pretty cool.",
    Long:  "This tool is a great convenience.",
    Run: func(cmd *cobra.Command, args []string) {

    },
}

func init() {
    cobra.OnInitialize()
    RootCmd.AddCommand(versionCmd)
}

var versionCmd = &cobra.Command{
    Use:   "version",
    Short: "Print the version number of go-keisan",
    Long:  `All software has versions. This is go-keisan's`,
    Run: func(cmd *cobra.Command, args []string) {
        fmt.Println("go-keisan v1.0")
    },
}

足し算の処理を作成

次に add というサブコマンドを実行する処理を記述します。

cmd/add.go
package cmd

import (
    "fmt"
    "strconv"

    "github.com/spf13/cobra"
)

func init() {
    RootCmd.AddCommand(addCmd)
}

var addCmd = &cobra.Command{
    Use:   "add",
    Short: "Calculator of addition.",
    Long:  "Calculator to perform the addition.",
    Run: func(cmd *cobra.Command, args []string) {
        var n1 int
        var n2 int
        n1, _ = strconv.Atoi(args[0])
        n2, _ = strconv.Atoi(args[1])
        fmt.Println(n1 + n2)
    },
}

ビルド

いったんビルドします。

go build go-keisan.go

実行

作成したツール go-keisan を実行してみます。

go-keisan help

以下のように、ヘルプの内容が表示されます。

002.png

次に足し算の処理を実行してみましょう。

go-keisan add 7 21

7 + 21 の計算結果である 28 が正しく表示されたはずです。

004.png

おわりに

これで本稿は終わりです。

さて、今回作ったこの足し算ツールには実は大きな欠点があります。
Atoi 関数は変換不能な文字列については 0 を返すので、例えば go-keisan add abcdefg 7 のようにコマンドを打つと、エラーを吐かずに 7 という結果が返ってきてしまうのです。
後で突っ込まれないよう念のため書きました。それではまた。


『 Go 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。