はじめに
AIを用いて開発するにあたって仕様やタスクのドキュメントをフォルダ毎にまとめて管理したいことがあります。
フォルダを管理するためのIDをGithub Actionsを使用して行ってみました。
IDの条件は以下の通りです。
- 番号がユニークであること
- 一定順序であること
- 人間が分かりやすいこと
spec-kitでは[通し番号]-[機能名]
となっていて複数人で開発を行う場合に通し番号が被ってしまいます。
IDはrun_number
を使用してspec-[run_number]
(spec-1, spec-2 ...)という形のフォルダにしました。
run_number
はワークフローが実行される度に1ずつ数が増えていきます。
実装
以下のコードは同時に実行すると同じIDが返ってくる問題があります。
# .github/workflows/generate-spec-id.yml
name: Generate Spec ID
on:
workflow_dispatch:
jobs:
generate-spec-id:
runs-on: ubuntu-latest
steps:
- name: Generate Spec ID from run number
id: generate
run: |
# GitHub Actionsが自動管理する実行回数を使用
SPEC_ID=${{ github.run_number }}
FOLDER_NAME="spec-$SPEC_ID"
echo "spec_id=$SPEC_ID" >> $GITHUB_OUTPUT
echo "folder_name=$FOLDER_NAME" >> $GITHUB_OUTPUT
- name: Output result
run: |
echo "::notice::Generated Spec ID: ${{ steps.generate.outputs.spec_id }}"
echo "::notice::Folder name: ${{ steps.generate.outputs.folder_name }}"
#!/bin/bash
# spec_id.sh
echo "Starting workflow..."
# ワークフローを実行
gh workflow run generate-spec-id.yml
echo "Waiting for workflow to start..."
sleep 3
# 最新の実行を取得
LATEST_RUN=$(gh run list --workflow=generate-spec-id.yml --limit=1 --json databaseId,number,status -q '.[0]')
RUN_ID=$(echo $LATEST_RUN | jq -r '.databaseId')
RUN_NUMBER=$(echo $LATEST_RUN | jq -r '.number')
echo "Generated Spec ID: $RUN_NUMBER"
echo "Folder name: spec-$RUN_NUMBER"
# フォルダを作成
mkdir -p ".project/works/spec-$RUN_NUMBER"
echo "Created folder: .project/works/spec-$RUN_NUMBER"
結果
run_number
が返ってきてユニークなフォルダが生成されるようになりました。
$ ./spec_id.sh
Starting workflow...
✓ Created workflow_dispatch event for generate-spec-id.yml at main
To see runs for this workflow, try: gh run list --workflow=generate-spec-id.yml
Waiting for workflow to start...
Generated Spec ID: 1
Folder name: spec-1
Created folder: spec-1