Labels - BoxPistols/nuxt3-boilerplate GitHub Wiki


title: "GitHub ラベル管理ツール - クロスプラットフォーム対応" emoji: "🏷️" type: "tech" topics: ["github", "bash", "cli", "label", "git"] published: true

GitHub ラベル管理ツール

GitHubのプロジェクト管理に欠かせないラベルを簡単に作成・管理するためのBashスクリプトです。MacとLinux(WSL含む)の両方で動作するクロスプラットフォーム対応で、チーム内でラベル設定を統一したい場合に最適です。

機能概要

  • ラベル一覧表示: 現在のリポジトリのラベルを色付きで表示
  • ラベル情報取得: 既存ラベルの設定をJSONファイルに保存
  • ラベル作成/更新: JSONファイルからラベルを一括作成・更新
  • ラベル削除: 特定のラベルを対話的に削除
  • バックアップ/復元: ラベル設定のバックアップと復元
  • Mac・Linux対応: OSを自動検出し最適な処理を実行

環境要件

  • GitHub CLI (gh)
  • jq(JSONパーサー)
  • Git
  • Base64コマンド
  • Bash 4.0以上

インストール方法

1. 依存ツールのインストール

GitHub CLI

# MacOS
brew install gh

# Ubuntu/Debian
curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null
sudo apt update
sudo apt install gh

jq

# MacOS
brew install jq

# Ubuntu/Debian
sudo apt install jq

2. GitHub CLIの認証設定

gh auth login

画面の指示に従ってGitHubアカウントの認証を完了させてください。

3. スクリプトのインストール

# リポジトリのクローン(または単一ファイルのダウンロード)
git clone https://github.com/your-username/github-tools.git
cd github-tools

# 実行権限の付与
chmod +x github_labels.sh

# shellsディレクトリに配置する場合
mkdir -p shells
cp github_labels.sh shells/
chmod +x shells/github_labels.sh

使い方

対話型メニュー

引数なしでスクリプトを実行すると、対話型メニューが表示されます:

./shells/github_labels.sh

表示されるメニュー:

GitHub ラベル管理ツール v1.0.0
リポジトリ: your-username/your-repo

操作を選択してください:
1) ラベル一覧表示
2) ラベル情報取得(JSON保存)
3) ラベル作成/更新
4) ラベル削除
5) ラベルバックアップ
6) ラベル復元
q) 終了

選択:

コマンドライン実行

特定の機能を直接実行することもできます:

# ラベル一覧表示
./shells/github_labels.sh list

# ラベル情報をJSONに保存
./shells/github_labels.sh pull

# カスタムファイル名で保存
./shells/github_labels.sh pull my_labels.json

# JSONからラベルを作成
./shells/github_labels.sh create

# カスタムJSONファイルからラベルを作成
./shells/github_labels.sh create my_labels.json

# ラベルをバックアップ
./shells/github_labels.sh backup

# バックアップから復元
./shells/github_labels.sh restore

# ヘルプを表示
./shells/github_labels.sh help

各機能の詳細

1. ラベル一覧表示

現在のリポジトリに設定されているラベルを色付きで一覧表示します:

名前                           カラー     説明
================================================================================
bug                            #d73a4a   Something isn't working
documentation                  #0075ca   Improvements or additions to documentation
duplicate                      #cfd3d7   This issue or pull request already exists
enhancement                    #a2eeef   New feature or request
good first issue               #7057ff   Good for newcomers
help wanted                    #008672   Extra attention is needed
invalid                        #e4e669   This doesn't seem right
question                       #d876e3   Further information is requested
wontfix                        #ffffff   This will not be worked on

2. ラベル情報取得(JSON保存)

リポジトリの現在のラベル設定をJSONファイルに保存します:

[
  {
    "name": "bug",
    "color": "d73a4a",
    "description": "Something isn't working"
  },
  {
    "name": "documentation",
    "color": "0075ca",
    "description": "Improvements or additions to documentation"
  },
  ...
]

3. ラベル作成/更新

JSONファイルからラベルを一括作成または更新します。既存のラベルは更新され、新しいラベルは作成されます:

読み込んだラベル数: 9
リポジトリ your-username/your-repo にラベルを作成しています...
[1/9] ラベル 'bug' を処理中...
  既存ラベル 'bug' を更新します
  ✓ ラベル 'bug' を作成しました
[2/9] ラベル 'documentation' を処理中...
  ✓ ラベル 'documentation' を作成しました
...
成功: 9/9 個のラベルを処理しました

4. ラベル削除

対話形式で特定のラベルを削除します:

削除するラベルを選択してください
ラベル一覧を取得中...
1. bug
2. documentation
3. duplicate
4. enhancement
...
削除するラベル番号を入力してください(複数選択可、スペース区切り):
3 4
ラベル 'duplicate' を削除中...
✓ ラベル 'duplicate' を削除しました
ラベル 'enhancement' を削除中...
✓ ラベル 'enhancement' を削除しました

5. ラベルバックアップ

現在のラベル設定をタイムスタンプ付きのJSONファイルにバックアップします:

ラベル情報を取得中...
成功: 9 個のラベル情報を labels_backup_20250309_123045.json に保存しました
ラベルを labels_backup_20250309_123045.json にバックアップしました

6. ラベル復元

バックアップしたラベル設定を復元します。バックアップファイルを指定するか、利用可能なバックアップから選択できます:

バックアップファイルを検索中...
利用可能なバックアップ:
1. labels_backup_20250308_153012.json
2. labels_backup_20250309_123045.json
復元するバックアップ番号を選択してください: 2
バックアップファイル labels_backup_20250309_123045.json からラベルを復元します
読み込んだラベル数: 9
...

ラベルJSONのフォーマット

ラベル定義のJSONファイル形式は次のとおりです:

[
  {
    "name": "bug",
    "color": "d73a4a",
    "description": "バグ報告"
  },
  {
    "name": "enhancement",
    "color": "a2eeef",
    "description": "機能改善・追加"
  }
]
  • name: ラベル名(必須)
  • color: 6桁の16進数カラーコード(#なし)(必須)
  • description: ラベルの説明(任意)

よくある質問

Q: チーム全体でラベル設定を統一するには?

A: 以下の手順で簡単に統一できます:

  1. 基準となるリポジトリからラベル情報を取得: ./github_labels.sh pull standard_labels.json
  2. 他のリポジトリで同じラベルを作成: ./github_labels.sh create standard_labels.json

Q: GitHubのデフォルトラベルを保持したまま新しいラベルを追加できますか?

A: はい。まず現在のラベルをバックアップし、新しいラベルをJSONファイルに追加してから作成を実行してください。ラベル名が重複しない限り、既存のラベルは維持されます。

Q: GitHub Enterpriseでも使えますか?

A: はい。GitHub CLIがGitHub Enterpriseに接続できるよう設定されていれば利用可能です。

Q: エラーが発生した場合はどうすればいいですか?

A: 以下の点を確認してください:

  • GitHub CLIが正しく認証されているか
  • jqがインストールされているか
  • 現在のディレクトリがGitHubリポジトリであるか

実用例:プロジェクト用カスタムラベルの作成

以下は、一般的なプロジェクト管理用ラベルセットの例です:

[
  {"name": "優先度:高", "color": "b60205", "description": "優先的に対応すべき課題"},
  {"name": "優先度:中", "color": "d93f0b", "description": "標準的な優先度の課題"},
  {"name": "優先度:低", "color": "fbca04", "description": "時間がある時に対応する課題"},
  {"name": "種別:バグ", "color": "ee0701", "description": "不具合の報告"},
  {"name": "種別:機能", "color": "0e8a16", "description": "新機能・機能改善の要望"},
  {"name": "種別:デザイン", "color": "cc317c", "description": "UI/UXに関する課題"},
  {"name": "種別:ドキュメント", "color": "0052cc", "description": "ドキュメント関連の課題"},
  {"name": "種別:リファクタリング", "color": "5319e7", "description": "リファクタリングや技術的改善"},
  {"name": "状態:未着手", "color": "c5def5", "description": "未着手の課題"},
  {"name": "状態:対応中", "color": "bfdadc", "description": "現在取り組んでいる課題"},
  {"name": "状態:要レビュー", "color": "fef2c0", "description": "レビュー待ちの課題"}
]

このJSONをファイルに保存して、createコマンドで一括作成できます。

技術的な詳細

このスクリプトはMacとLinuxの環境の違いを自動検出し、適切な処理を行います。特にbase64デコードの処理はOS間で異なるため、環境に応じた最適な方法で処理します。

GitHub APIへのアクセスにはghコマンドを使用し、JSONの処理にはjqを使用しています。

ライセンス

MITライセンスの下で公開されています。詳細はLICENSEファイルをご覧ください。