codex/profiles/hm-m1-mac/skills/solve-issue/SKILL.md
Issue を作成(または既存 Issue を指定)し、実装して PR を作成する。Claude command /solve-issue 相当を Codex CLI で実行する。
npx skillsauth add seika139/dotfiles solve-issueInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
この skill は Claude command /solve-issue から変換した Codex 用 command skill です。
Codex CLI では /solve-issue ではなく、$solve-issue または /skills からこの skill を呼び出してください。
引数は $solve-issue の後ろに自然文として続けます。
$solve-issue <arguments>
元 prompt 内の $ARGUMENTS や slash command 表記は、$solve-issue の後ろに書かれた引数として解釈してください。
Claude 専用の allowed-tools メタデータや ! command interpolation は Codex では自動適用されないため、必要な情報は通常の shell command で確認してください。
会話のコンテキストや既存の Issue に基づいて、ブランチ作成 → 実装 → PR 作成を一連で行います。
以下は設定ファイルから読み込まれたデフォルト値です。 引数で上書きされない場合、この値を使用してください。
!`cat ~/.codex/custom-config/create-issue-config.json 2>/dev/null || echo '{"repo":"","project":{"owner":"","number":0,"status":"","done_status":"Done","start_date":"today"},"labels":[],"assignee":""}'`
repo の指定がない場合、カレントリポジトリを対象とします。
custom-config/create-issue-config.json が存在しない場合は、ユーザーに以下の内容でファイルを作成するよう促してください。
{
"repo": "org/repo",
"project": {
"owner": "org-or-user-name",
"number": 1,
"status": "",
"done_status": "Done",
"start_date": "today"
},
"labels": [],
"assignee": ""
}
repo: Issue を起票するリポジトリ(形式: owner/repo)project.owner: GitHub Projects のオーナー(Organization 名またはユーザー名)project.number: GitHub Projects の番号project.status: Issue 起票時に設定する Status の値project.done_status: Issue クローズ時に設定する Status の値project.start_date: "today" の場合、起票時に今日の日付を Start Date に設定/solve-issue [Issue 番号 or URL] [--repo <owner/repo>]
--repo: 対象リポジトリを指定(省略時はデフォルト設定 → カレントリポジトリの順で決定)/solve-issue
→ 会話のコンテキストから Issue を新規作成し、実装、PR 作成まで行う
/solve-issue 42
→ Issue #42 の内容を取得し、ブランチ作成 → 実装 → PR 作成
/solve-issue 42 --repo other-org/other-repo
→ other-org/other-repo の Issue #42 を解決
Step 1 で整理した内容をもとに、Issue を作成するか既存 Issue を指定するかユーザーに確認する 新規 Issue を作成する場合は、タイトル・概要・完了条件をユーザーに提示して確認を取る
Issue 内に他の Issue やプルリクエストへのリンクを記載する場合は、以下の形式で記述してください。 以下のようにリスト形式で URL を記載することで、GitHub が自動的にリンクを変換して表示します。 同じ行内に他の文字を混ぜるとリンクが正しく認識されない可能性があるため、URL は行を分けて記載してください。
- <完全なURL>
#123 のようにリポジトリ内の Issue やプルリクエスト番号だけを記載する方法もありますが、
複数のリポジトリを横断している場合に間違ったリポジトリの Issue を参照してしまう可能性があるため、完全な URL を記載してください。
以下のコマンドで Issue を起票する
gh issue create \
--repo {repo} \
--title "{タイトル}" \
--label "{label1}" --label "{label2}" \
--assignee {assignee} \
--body "$(cat <<'EOF'
## 概要
{概要}
## 完了条件
{完了条件}
## プルリク
(なし)
## 依頼元
(なし)
EOF
)"
起票後、project 設定が存在する場合は GitHub Projects のフィールドを設定する
project.owner と project.number で対象の GitHub Project を特定するproject.status の値に設定project.start_date が today の場合は date +%Y-%m-%d で今日の日付を取得して設定GitHub Projects のフィールド設定には以下の手順で行う。
a. Issue 側から projectItems でプロジェクトアイテムを取得する。Issue がまだプロジェクトに追加されていない場合は gh project item-add で追加する。
# Issue がプロジェクトに追加されていない場合
gh project item-add {project.number} --owner {project.owner} --url {IssueのURL}
b. Issue の projectItems から対象プロジェクトのアイテム ID とフィールド情報を取得する。
gh api graphql -f query='
{
repository(owner: "{owner}", name: "{repo}") {
issue(number: {番号}) {
projectItems(first: 10) {
nodes {
id
project { id number title }
fieldValues(first: 20) {
nodes {
... on ProjectV2ItemFieldSingleSelectValue {
name
field { ... on ProjectV2SingleSelectField { id name options { id name } } }
}
... on ProjectV2ItemFieldDateValue {
date
field { ... on ProjectV2Field { id name } }
}
}
}
}
}
}
}
}'
c. フィールド ID のフォールバック: 新規 Issue では Start Date 等の Date フィールドは未設定のため fieldValues に含まれない。その場合はプロジェクト自体の fields を別途クエリして field ID を取得する。
gh api graphql -f query='
{
node(id: "{project-id}") {
... on ProjectV2 {
fields(first: 30) {
nodes {
... on ProjectV2Field {
id
name
dataType
}
... on ProjectV2SingleSelectField {
id
name
options { id name }
}
}
}
}
}
}'
d. 取得したフィールド ID を使って Status と Start Date を更新する。
# Status の更新
gh project item-edit --project-id {project-id} --id {item-id} --field-id {status-field-id} --single-select-option-id {option-id}
# Start Date の更新(未設定の場合のみ)
gh project item-edit --project-id {project-id} --id {item-id} --field-id {start-date-field-id} --date "$(date +%Y-%m-%d)"
注意: Start Date は b. で取得した fieldValues 内の ProjectV2ItemFieldDateValue を確認し、date が既に設定されている場合は更新をスキップする。Start Date の上書きは行わない。
会話のコンテキストから親 Issue が特定できる場合は、ユーザーに確認の上、親子関係を設定する
# 親 Issue の node ID を取得
gh issue view {親Issue番号} --repo {repo} --json id --jq '.id'
# 子 Issue(今起票した Issue)を親に紐づけ
gh api graphql -f query='
mutation {
addSubIssue(input: {
issueId: "{親IssueのnodeID}"
subIssueUrl: "{起票したIssueのURL}"
}) {
issue { number title }
subIssue { number title }
}
}'
gh issue view {番号} --repo {repo} で Issue の内容を取得するproject 設定が存在する場合は GitHub Projects のフィールドを設定する(パターン A の手順 1 と同様)
project.start_date が "today" の場合でも、既存 Issue では Issue の作成日(createdAt)を使用する。gh issue view {番号} --repo {repo} --json createdAt --jq '.createdAt[:10]' で取得するデフォルトブランチを自動検出する
gh repo view --json defaultBranchRef --jq '.defaultBranchRef.name'
デフォルトブランチの最新状態を取得する
git switch {デフォルトブランチ}
git pull
Issue 番号とタイトルからブランチ名を生成する(すでにブランチが存在する場合はそのブランチを使用する)
feature/{issue-number}-{slug}feature/42-add-login-featureブランチを作成する
git switch -c feature/{issue-number}-{slug}
特に mise.toml などのタスクランナーにはコードフォーマット・リンティング・ユニットテストのタスクが含まれていることが多いので、これらを活用してコード品質を担保してください。
mise.toml に Markdown 用のフォーマットタスクが定義されている場合は、生成・編集した Markdown ファイルをそのタスクで整形してください。 存在しない場合は、一般的な Markdown フォーマッタ(例: Prettier)を使用して整形してください。その際に .markdownlint.json などの設定ファイルが存在する場合は、それに従って整形してください。
mise.toml に Shell Script 用のフォーマットタスクが定義されている場合は、生成・編集した Shell Script ファイルをそのタスクで整形してください。 存在しない場合は、一般的な Shell Script フォーマッタ(例: shfmt)を使用して整形してください。
mise.toml に YAML 用のフォーマットタスクが定義されている場合は、生成・編集した YAML ファイルをそのタスクで整形してください。 存在しない場合は、yamllint を使用して整形してください。その際に .yamllint.yml などの設定ファイルが存在する場合は、それに従って整形してください。
実装完了後、変更内容をコミットする
git add <適切なファイルパス>
git commit -m "{コミットメッセージ}"
ブランチをリモートにプッシュする
git push -u origin feature/{issue-number}-{slug}
PR を作成する
gh pr create \
--repo {repo} \
--base {デフォルトブランチ} \
--title "{PR タイトル}" \
--body "$(cat <<'EOF'
## Summary
{Issue の内容と実際の変更内容に基づく要約}
## Related Issues
- <issue-url-1>
- <issue-url-2>
- ...
## Changes
{変更内容の箇条書き}
## Test Plan
{テスト手順}
EOF
)"
Closes <issue-url> 形式で Issue を自動クローズ可能にする(クロスリポジトリでも機能する)<issue-url> 形式を使用する(一貫性のため)実行結果をユーザーに報告する。
✅ Issue → 実装 → PR の一連のワークフローが完了しました。
- Issue: {Issue URL}
- Branch: feature/{issue-number}-{slug}
- PR: {PR URL}
tools
git worktree で隔離された作業環境を作成する。Claude command /worktree 相当を Codex CLI で実行する。
tools
AI ペルソナで Playwright MCP 経由の UX レビューを実施する。Claude command /ux-review 相当を Codex CLI で実行する。
tools
汎用的なフォントを避け、デザイン性の高いタイポグラフィを選択してフロントエンドの質を向上させるスキル。UI制作やLP作成時に使用します。
tools
Issue を作成(または既存 Issue を指定)し、実装して PR を作成する。Claude command /solve-issue 相当を Codex CLI で実行する。