0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Go言語のflagパッケージで簡単CLI作成

Last updated at Posted at 2025-07-12

はじめに

Go言語でコマンドラインツールを作る際、引数の処理で悩んだことはありませんか?Go標準ライブラリのflagパッケージを使えば、コマンドライン引数を簡単に処理できます。

この記事では、実際のコードを通してflagパッケージの基本的な使い方を学びます。

flagパッケージとは

flagパッケージは、Go言語の標準ライブラリの一つで、コマンドライン引数を簡単に処理するためのツールです。

特徴

  • --name=値-name 値 形式の引数を自動解析
  • デフォルト値の設定が可能
  • ヘルプメッセージの自動生成
  • 型安全な引数処理

実装例:挨拶CLIツール

実際にflagパッケージを使った簡単なCLIツールを作ってみましょう。

package main

import (
	"flag" // コマンドライン引数を簡単に処理するための標準ライブラリ
	"fmt"
)

func main() {
	// フラグ定義(--name=xxx 形式で使える)
	// (--${引数名},デフォルト値,説明文)
	name := flag.String("name", "ゲスト", "挨拶する相手の名前")

	// フラグ解析
	// コマンドライン引数を実際に解析する
	// これを呼ばないとフラグが機能しない
	flag.Parse()

	// 出力
	// *name 
	// ポインタから実際の値を取得
	fmt.Printf("こんにちは、%sさん!\n", *name)
}

コードの詳細解説

1. フラグの定義

name := flag.String("name", "ゲスト", "挨拶する相手の名前")
  • 第1引数: フラグ名(--nameとして使用)
  • 第2引数: デフォルト値(引数が指定されない場合の値)
  • 第3引数: 説明文(ヘルプで表示される)
  • 戻り値: *string(文字列のポインタ)

2. フラグの解析

flag.Parse()

コマンドライン引数を実際に解析します。この関数を呼ばないとフラグが機能しません。

3. 値の取得

fmt.Printf("こんにちは、%sさん!\n", *name)

*nameでポインタから実際の値を取得します(デリファレンス)。

実行例

引数を指定した場合

$ go run main.go --name=太郎
こんにちは、太郎さん!

引数を指定しない場合(デフォルト値使用)

$ go run main.go
こんにちは、ゲストさん!

ヘルプの表示

$ go run main.go --help
Usage of main:
  -name string
        挨拶する相手の名前 (default "ゲスト")

その他のフラグタイプ

flagパッケージは文字列以外にも様々な型をサポートしています:

// 整数
age := flag.Int("age", 0, "年齢")

// 真偽値
verbose := flag.Bool("verbose", false, "詳細出力")

// 浮動小数点
price := flag.Float64("price", 0.0, "価格")

まとめ

  • flagパッケージを使えば簡単にCLIツールが作れる
  • flag.String()でフラグを定義し、flag.Parse()で解析
  • デフォルト値とヘルプメッセージが自動で設定される
  • ポインタを返すので*でデリファレンスが必要
0
0
1

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?