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?

【GitHub Actions】Issue作成時にiOS/AndroidチームからランダムにAssigneeを自動設定する方法(トークン作成手順つき)

Posted at

📝 はじめに

GitHub Issueの運用で「誰が担当するか」を毎回手動で決めるのは手間です。
この記事では、以下のような自動アサインワークフローをGitHub Actionsで実装する方法を紹介します:

  • Issue作成 or ラベル追加がトリガー
  • iOS・Androidチームから1名ずつランダムに抽出
  • 除外リストを考慮(休職中・退職済みなど)

さらに、必要なPersonal Access Tokenの作成手順も画像付きで解説しています。

⚙️ 実現すること

  • GitHub CLI (gh) を使って組織のチームメンバーを取得
  • 除外リストにマッチしないメンバーからランダムで1名ずつ選出
  • その2名をIssueにAssigneeとして自動追加

🧪 事前準備:トークン(PAT)の作成

GitHub CLIでチームメンバーを取得するには、以下のようにPersonal Access Token (classic) を発行し、権限を適切に付与する必要があります。

🔧 ステップ1:設定画面へ移動

サイドバーのメニューから SettingsDeveloper settingsPersonal access tokens を選びます。


🔧 ステップ2:「Generate new token (classic)」を選択

🔧 ステップ3:必要なスコープを付与

  • repo(リポジトリ操作)
  • read:org(組織メンバーの読み取り)
    ⬇️ これが必要!

✅ トークン作成後は、GitHub SecretsISSUE_TOKEN_COMMON などわかりやすい名前で保存しておきましょう。

📄 実際のYAMLファイル(コメント付き)

name: Issue assignment

on:
  issues:
    types: [opened, labeled]

env:
  EXCLUDE_LIST: |
    user1
    user2
    ...

jobs:
  assign-random:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3
        with:
          token: ${{ secrets.ISSUE_TOKEN_COMMON }}
          repository: my-org/my-repo

      - name: Setup Exclude Pattern
        id: setup
        run: |
          PATTERN=$(echo "$EXCLUDE_LIST" | grep -v '^$' | tr '\n' '|' | sed 's/|$//')
          echo "exclude_pattern=^($PATTERN)$" >> $GITHUB_OUTPUT

      - name: Load Teams
        id: load_teams
        env:
          GH_TOKEN: ${{ secrets.ISSUE_TOKEN_COMMON }}
        run: |
          EXCLUDE_PATTERN="${{ steps.setup.outputs.exclude_pattern }}"
          IOS_MEMBER=$(gh api orgs/my-org/teams/team-ios/members --jq '.[].login' | grep -v -E "$EXCLUDE_PATTERN" | shuf -n 1 || true)
          echo "teamiOS=${IOS_MEMBER}" >> $GITHUB_OUTPUT

          ANDROID_MEMBER=$(gh api orgs/my-org/teams/team-android/members --jq '.[].login' | grep -v -E "$EXCLUDE_PATTERN" | shuf -n 1 || true)
          echo "teamAndroid=${ANDROID_MEMBER}" >> $GITHUB_OUTPUT

      - name: Assign Users
        env:
          GH_TOKEN: ${{ secrets.ISSUE_TOKEN_COMMON }}
        run: |
          gh issue edit ${{ github.event.issue.number }} \
            --add-assignee "${{ steps.load_teams.outputs.teamiOS }}" \
            --add-assignee "${{ steps.load_teams.outputs.teamAndroid }}"

🔁 応用アイデア

  • labeled イベント時に特定のラベルがついたら実行する条件分岐を入れる
  • Assigneeの選出ロジックに重みづけ(最近担当していない人を優先)を追加
  • Botの投稿を除外(例: if: github.actor != 'github-actions[bot]'

🏁 おわりに

GitHub Actionsでの自動化はCI/CDだけではなく、チーム運用にも活用できます
小さな手間を減らして、開発体験を改善していきましょう!

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