こんにちは!オルターブースのエンジニア はっしーです!
オルターブース アドベントカレンダー2024 3日目を担当します!
概要
この記事ではGitHub Milestonesを使用して、毎日のタスクを管理できないか試してみたので紹介したいと思います。
GitHubのMilestones
Milestonesはリポジトリ中のIssueやプルリクエストをグループ化し、進捗の追跡などに使用できる機能です。 docs.github.com
主な特徴として以下の点が挙げられます。
- Issueやプルリクエストをグループ化できる
- マイルストーンの期限日が設定できる
- マイルストーンの完了状況がパーセンテージで表示される
- マイルストーン内のIssueとプルリクエストをドラッグ&ドロップで優先順位付けできる
タスク管理におけるMilestonesのいいところ
- 並び替えが容易なので差し込みタスクが来た際にも優先順位の整理が簡単に行える
- マイルストーンの完了状況が一目でわかるので進捗が分かりやすい
- 完了状況が100%になったときの達成感が心地いい
試したこと
一日の初めに当日用のMilestoneを作成することにしました。
Milestoneは自動で作成されるようにGitHub Actionsのワークフローを作成します。
name: Create Milestone on: workflow_dispatch: schedule: - cron: '0 23 * * 0-4' # 平日の8時にトリガー(日本時間) jobs: create-milestone: runs-on: ubuntu-latest steps: - name: Get current date in JST id: date run: | date=$(TZ=Asia/Tokyo date +'%Y-%m-%d') echo "date=$date" >> $GITHUB_ENV datetime=$(TZ=Asia/Tokyo date --iso-8601=seconds) echo "datetime=$datetime" >> $GITHUB_ENV - name: Create milestone uses: actions/github-script@v6 with: script: | const date = process.env.date; const datetime = process.env.datetime; const response = await github.rest.issues.createMilestone({ owner: context.repo.owner, repo: context.repo.repo, title: date, due_on: datetime }); console.log(response.data);
毎日、Milestoneが作成されるようになったので始業してすぐタスクの登録を行い、タスク管理を試してみました。
結果
タスクの登録が面倒臭すぎる!!! Milestoneの「New Issue」からIssueを作成するとMilestoneを自動で登録し作成してくれるのですが、毎日10個ほどのIssueを作成するのは面倒で続かなかったですw 使わなくなりました。
改良する
Convert Issue機能を使う
「New Issue」から作ると面倒なので、Convert Issue機能を使用するようにしました。
Convert Issue機能はIssue内でIssueを作成する機能です。
- [ ] タスク
のようにマークダウン形式でIssueに記載し保存すると、Convert Issueボタンが表示され、Issueを作成することができます。
これだとタスクを書きだしてConvert Issueすると連続で作成できるのでとても楽です。
ただ1つ問題があります。 マイルストーンが紐づかないので自動で登録されません。
Milestoneの割り当てを行うActionsのワークフローを追加
Issueが作成されたとき自動的に最新のマイルストーンに登録するGitHub Actionsのワークフローを作成します。
name: Assign Latest Milestone to New Issues on: issues: types: [opened] jobs: assign-milestone: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v2 - name: Get latest milestone id: get_milestone uses: actions/github-script@v6 with: script: | const milestones = await github.rest.issues.listMilestones({ owner: context.repo.owner, repo: context.repo.repo, state: 'open', sort: 'created', direction: 'desc' }); const latestMilestone = milestones.data[0]; core.setOutput('latest_milestone', latestMilestone.number); - name: Set milestone number run: echo "latest_milestone=${{ steps.get_milestone.outputs.latest_milestone }}" >> $GITHUB_ENV - name: Assign milestone to issue uses: actions/github-script@v6 with: script: | const milestone_number = process.env.latest_milestone; await github.rest.issues.update({ owner: context.repo.owner, repo: context.repo.repo, issue_number: context.issue.number, milestone: milestone_number });
このワークフローにより、Milestoneが登録されるようになりました。
Milestone作成ワークフローの修正
Convert Issueを使うためには、マークダウン形式でタスクを記述するIssueが必要なので、こちらもあらかじめ作るようにMilestone作成ワークフローを修正します。
name: Create Milestone and Issue on: workflow_dispatch: schedule: - cron: '0 23 * * 0-4' # 平日の8時にトリガー(日本時間) jobs: create-milestone-and-issue: runs-on: ubuntu-latest steps: - name: Get current date in JST id: date run: | date=$(TZ=Asia/Tokyo date +'%Y-%m-%d') echo "date=$date" >> $GITHUB_ENV datetime=$(TZ=Asia/Tokyo date --iso-8601=seconds) echo "datetime=$datetime" >> $GITHUB_ENV - name: Create milestone id: create_milestone uses: actions/github-script@v6 with: script: | const date = process.env.date; const datetime = process.env.datetime; const response = await github.rest.issues.createMilestone({ owner: context.repo.owner, repo: context.repo.repo, title: date, due_on: datetime }); console.log(response.data); core.setOutput('milestone_number', response.data.number); - name: Set milestone number run: echo "milestone_number=${{ steps.create_milestone.outputs.milestone_number }}" >> $GITHUB_ENV - name: Create issue and assign milestone uses: actions/github-script@v6 with: script: | const milestone_number = process.env.milestone_number; const response = await github.rest.issues.create({ owner: context.repo.owner, repo: context.repo.repo, title: '本日のタスクを登録する', body: '本日のタスクをここに記入してください。', milestone: milestone_number }); console.log(response.data);
修正した結果
毎日以下のようなタスク管理用のMilestoneが作成されるようになりました。
タスク登録用のIssueでConvert Issueを使用してタスクを追加します。
Milestoneにも登録され一覧で確認することができます。
まとめ
ひとまずはこちらで使ってみて都度改良していきたいと思います。 また良い使い方が見つかれば共有していきたいと思います。
最後まで読んでいただきありがとうございました。
サービス一覧 www.alterbooth.com www.alterbooth.com www.alterbooth.com