8
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Go言語でCLIツールを実装する【Cobra】

Posted at

はじめに

最近業務でGolangを使ったCLIツールを実装する機会があったので、調べた内容を簡単に記載していきます!

【前談】GoでCLIを実装するためのライブラリ

まずはざっくりGoでCLIツールを実装する際に使用するライブラリを調べていきます。GoでCLIツールを作成するためのライブラリとして、以下のものがあるようです。

Cobra

Cobraは、強力なモダンCLIアプリケーションを作成するためのライブラリです。CobraはKubernetes、Hugo、GitHub CLIなど、多くのGoプロジェクトで使用されています。

cli

cli は、Go でコマンドラインアプリケーションを構築するための、シンプルで、高速で、楽しいパッケージです。目標は、開発者が表現力豊かに、高速で配布可能なコマンドラインアプリケーションを書くことができるようにすることです。

go-flags

各ライブラリのスター数

各ライブラリのスター数は以下のような感じ。今回はCobraを使用することにします。

Cobra:30.7kスター
Cli:19.8kスター
Go-flags:2.4kスター

Cobraを使用してCLIツールを実装する

実際にCobraを導入して、CLIツールを実装するまでを解説していきます。

cobra・cobra-cliのインストール

まずはcobraとcobra-cliをインストールしていきます。cobra-clicobra アプリケーションとコマンドファイルを生成するためのコマンドライン・プログラムです。これは雛形をブートストラップして、Cobraベースのアプリケーションを迅速に開発することができます。

下記2つのコマンドを実行することで、インストール可能です。

$ go get -u github.com/spf13/cobra@latest
$ go install github.com/spf13/cobra-cli@latest

雛形をブートストラップ

続いて、下記のコマンドを実行してください。

$ cobra-cli init

実行完了すると、下記のようになディレクトリやファイルが自動的に生成されます。

├── cmd
│   └─ root.go
├── go.mod
├── go.sum
├── LICENSE
├── main.go

サブコマンドを追加

cobra-cli add <サブコマンド名>を実行し、サブコマンドを追加します。今回はinitというサブコマンドを作成します。

$ cobra-cli add init

このコマンドを実行すると、下記のようにinit.goファイルが自動的に作成されます。

├── cmd
│   └─ root.go
│   └─ init.go

ファイルの中身は下記のようになっています。(簡略化するためにコメントなどは削除してあります。)

cmd/init.go
package cmd

import (
	"fmt"
	"github.com/spf13/cobra"
)

var initCmd = &cobra.Command{
	Use:   "init",
	Short: "A brief description of your command",
	Long: `A longer description that spans multiple lines and likely contains examples
and usage of using your command. For example:

Cobra is a CLI library for Go that empowers applications.
This application is a tool to generate the needed files
to quickly create a Cobra application.`,
	Run: func(cmd *cobra.Command, args []string) {
        // サブコマンドinitを叩くと実行したい処理をこちらに記載します
		fmt.Println("init called")
	},
}

func init() {
	rootCmd.AddCommand(initCmd)
}

ファイルを作成した段階ではfmt.Println("init called")しか記載されていないので、実行しても「init called」と表示されるだけですが、確認のために実行してみます

$ go run main.go init
init called

うまく動いていることが確認できますね!あとはご自身で必要な処理をどんどん追加で実装していってください。

最後に

今回は簡単にCLIツールを実装するための手段と、Cobraの実装の進め方を解説しました。何かご指摘等あればお気軽にコメントください!

8
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?