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

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

> \[!NOTE]
> GitHub Enterprise Server ホステッド ランナーは、現在 GitHub ではサポートされていません。

## はじめに

このチュートリアルでは、 GitHub CLI を使用して定期的に問題を作成する方法について説明します。 たとえば、毎週課題を作成して、チーム会議のアジェンダとして使用できます。
GitHub CLI の詳細については、「[ワークフローでの GitHub CLI の使用](/ja/enterprise-server@3.22/actions/how-tos/write-workflows/choose-what-workflows-do/use-github-cli)」を参照してください。

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

## ワークフローの作成

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

2. リポジトリに `.github/workflows/YOUR_WORKFLOW.yml` というファイルを作成します (`YOUR_WORKFLOW` は任意の名前に置き換えます)。 これがワークフローファイルです。 GitHub での新しいファイルの作成について詳しくは、「[新しいファイルの作成](/ja/enterprise-server@3.22/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/enterprise-server@3.22/actions/reference/workflows-and-actions/events-that-trigger-workflows#schedule)」をご覧ください。
   * `ASSIGNEES`の値を、問題に割り当てるGitHubユーザー名の一覧に変更します。
   * `LABELS` の値を、問題に適用するラベルのリストに変更します。
   * `TITLE` の値を、課題の希望するタイトルに変更します。
   * `BODY` の値を、Issue の本文のテキストに変更します。
     `|` 文字を使用すると、このパラメーターに複数行の値を使用できます。
   * この Issue をリポジトリにピン止めする場合は、`PINNED` を `true` に設定します。 ピン留めされた課題について詳しくは、「[Issue をリポジトリにピン止めする](/ja/enterprise-server@3.22/issues/tracking-your-work-with-issues/administering-issues/pinning-an-issue-to-your-repository)」をご覧ください。
   * 新しい Issue が作成されるたびにこのワークフローで生成された以前の Issue をクローズする場合は、`CLOSE_PREVIOUS` を `true` に設定します。 ワークフローにより、`labels` フィールドで定義されているラベルを持つ最新の Issue が閉じられます。 間違った Issue をクローズしないようにするには、一意のラベルまたはラベルの組み合わせを使用します。

5. ワークフローファイルを、リポジトリのデフォルトブランチにコミットしてください。 詳しくは、「[新しいファイルの作成](/ja/enterprise-server@3.22/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/enterprise-server@3.22/actions/how-tos/monitor-workflows/view-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)します。