# 課題作成のスケジューリング

GitHub Actions を使用して、毎日の会議や四半期ごとのレビューなどの Issue を定期的に作成できます。

## はじめに

このチュートリアルでは、GitHub CLIを使用して定期的にissueを作成する方法を示します。 たとえば、毎週課題を作成して、チーム会議のアジェンダとして使用できます。 GitHub CLI について詳しくは、「[ワークフローでの GitHub CLI の使用](/ja/actions/using-workflows/using-github-cli-in-workflows)」をご覧ください。

このチュートリアルでは、まず GitHub CLI を使用するワークフロー ファイルを作成します。 次に、ニーズに合わせてワークフローをカスタマイズします。

## ワークフローの作成

1. このプロジェクト管理ワークフローを適用したいリポジトリを選択してください。 書き込みアクセス権を持つ既存のリポジトリを利用することも、新しいリポジトリを作成することもできます。 リポジトリの作成について詳しくは、「[新しいリポジトリの作成](/ja/repositories/creating-and-managing-repositories/creating-a-new-repository)」をご覧ください。

2. リポジトリに `.github/workflows/YOUR_WORKFLOW.yml` というファイルを作成します (`YOUR_WORKFLOW` は任意の名前に置き換えます)。 これがワークフローファイルです。 GitHub での新しいファイルの作成について詳しくは、「[新しいファイルの作成](/ja/repositories/working-with-files/managing-files/creating-new-files)」をご覧ください。

3. 次の YAML コンテンツをワークフローファイルにコピーします。

   ```yaml copy
   name: Weekly Team Sync
   on:
     schedule:
       - cron: 20 07 * * 1

   jobs:
     create_issue:
       name: Create team sync issue
       runs-on: ubuntu-latest
       permissions:
         issues: write
       steps:
         - name: Create team sync issue
           run: |
             if [[ $CLOSE_PREVIOUS == true ]]; then
               previous_issue_number=$(gh issue list \
                 --label "$LABELS" \
                 --json number \
                 --jq '.[0].number')
               if [[ -n $previous_issue_number ]]; then
                 gh issue close "$previous_issue_number"
                 gh issue unpin "$previous_issue_number"
               fi
             fi
             new_issue_url=$(gh issue create \
               --title "$TITLE" \
               --assignee "$ASSIGNEES" \
               --label "$LABELS" \
               --body "$BODY")
             if [[ $PINNED == true ]]; then
               gh issue pin "$new_issue_url"
             fi
           env:
             GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
             GH_REPO: ${{ github.repository }}
             TITLE: Team sync
             ASSIGNEES: monalisa,doctocat,hubot
             LABELS: weekly sync,docs-team
             BODY: |
               ### Agenda

               - [ ] Start the recording
               - [ ] Check-ins
               - [ ] Discussion points
               - [ ] Post the recording

               ### Discussion Points
               Add things to discuss below

               - [Work this week](https://github.com/orgs/github/projects/3)
             PINNED: false
             CLOSE_PREVIOUS: false
   ```

4. ワークフローファイルのパラメータをカスタマイズします。
   * `on.schedule` の値を変更して、このワークフローを実行する日時を指定します。 上記の例では、ワークフローは毎週月曜日の 7:20 UTC に実行されます。 スケジュールされたワークフローについて詳しくは、「[ワークフローをトリガーするイベント](/ja/actions/using-workflows/events-that-trigger-workflows#scheduled-events)」をご覧ください。
   * `ASSIGNEES` の値を、Issue に割り当てる GitHub のユーザー名のリストに変更します。
   * `LABELS` の値を、問題に適用するラベルのリストに変更します。
   * `TITLE` の値を、課題の希望するタイトルに変更します。
   * `BODY` の値を、Issue の本文のテキストに変更します。
     `|` 文字を使用すると、このパラメーターに複数行の値を使用できます。
   * この Issue をリポジトリにピン止めする場合は、`PINNED` を `true` に設定します。 ピン留めされた課題について詳しくは、「[Issue をリポジトリにピン止めする](/ja/issues/tracking-your-work-with-issues/pinning-an-issue-to-your-repository)」をご覧ください。
   * 新しい Issue が作成されるたびにこのワークフローで生成された以前の Issue をクローズする場合は、`CLOSE_PREVIOUS` を `true` に設定します。 ワークフローにより、`labels` フィールドで定義されているラベルを持つ最新の Issue が閉じられます。 間違った Issue をクローズしないようにするには、一意のラベルまたはラベルの組み合わせを使用します。

5. ワークフローファイルを、リポジトリのデフォルトブランチにコミットしてください。 詳しくは、「[新しいファイルの作成](/ja/repositories/working-with-files/managing-files/creating-new-files)」をご覧ください。

## 予想される結果

```
          `schedule` パラメーター (たとえば、毎週月曜日の 7:20 UTC) に基づき、ワークフローにより、指定した担当者、ラベル、タイトル、本文を使用して新しい Issue が作成されます。 
          `PINNED` を `true` に設定すると、ワークフローによって Issue がリポジトリにピン留めされます。 
          `CLOSE_PREVIOUS` を true に設定すると、ワークフローによりラベルが一致する最新の Issue がクローズされます。
```

> \[!NOTE]
> GitHub Actions のワークフローの実行によって高い負荷がかかっている間、`schedule` イベントが遅延する可能性があります。 高負荷の時間帯には、毎時の開始時点が含まれます。 負荷が十分に高い場合、キューに登録されたジョブの一部が削除される可能性があります。 遅延の可能性を減らすために、Ⅰ時間の中の別の時間帯に実行されるようワークフローをスケジューリングしてください。

ワークフローの実行履歴を表示して、このワークフローが定期的に実行されているかどうかを確認できます。 詳しくは、「[ワークフロー実行の履歴を表示する](/ja/actions/monitoring-and-troubleshooting-workflows/viewing-workflow-run-history)」をご覧ください。

## 次のステップ

* 問題テンプレートの使用など、GitHub CLI で実行できるその他の操作の詳細については、[`gh issue create` ドキュメント](https://cli.github.com/manual/gh_issue_create)を参照してください。
* [GitHub Marketplace](https://github.com/marketplace?category=\&type=actions\&verification=\&query=schedule+issue) で 、スケジュールされた問題に関連するアクションを検索します。