Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
86 changes: 86 additions & 0 deletions .claude/skills/pr-create/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
---
name: pr-create
description: 現在のブランチの変更内容を確認し、GitHub CLIを使ってPR作成を支援してください。
---

# PR作成

現在のブランチの変更内容を確認し、`.github/PULL_REQUEST_TEMPLATE.md`に準拠したフォーマットでPRを作成するスキル。

## PRテンプレート

PRの本文は `.github/PULL_REQUEST_TEMPLATE.md` のフォーマットに従うこと。

**重要:** PR作成前に、必ず `.github/PULL_REQUEST_TEMPLATE.md` を読み取り、最新のフィールド構造を確認してください。テンプレートが更新されている可能性があります。

## ワークフロー

### 1. マージ先ブランチの確認

ユーザーの指示からマージ先ブランチを特定する。指示に含まれていない場合は、必ずユーザーに確認する。推測してデフォルトを使わないこと。

### 2. 現在のブランチの状態を確認

以下のコマンドを並列で実行し、マージ先ブランチとの差分を把握する:

```bash
# 未コミットの変更を確認
git status

# マージ先ブランチとの差分を確認
git diff <マージ先ブランチ>...HEAD

# マージ先ブランチからの全コミット履歴を確認
git log --oneline <マージ先ブランチ>..HEAD

# リモートとの同期状態を確認
git branch -vv
```

### 3. 関連Issueの確認

オープン中のIssueを確認し、このPRに関連するIssueがないか調べる:

```bash
gh issue list --state open
```

関連Issueがあれば、PR本文の経緯セクションに `#XX` でリンクする。

### 4. テンプレートの確認とPR本文の作成

`.github/PULL_REQUEST_TEMPLATE.md` を読み取り、そのフォーマットに従ってPR本文を作成する。

**各セクションの記載ガイドライン:**

- **経緯**: なぜこのPRが必要になったか。関連Issueがあれば `#XX` でリンクする
- **実装内容**: 「何をしたか」だけでなく「なぜその実装を選んだか」の理由を重視して記載する
- **確認内容**: 修正が正しく動作することの確認方法をチェックボックス形式で記載する

### 5. PRの作成

未pushの場合はpushした上で、`gh pr create`コマンドでPRを作成する:

```bash
gh pr create \
--base <マージ先ブランチ> \
--head <現在のブランチ> \
--title "タイトル" \
--body "$(cat <<'EOF'
[テンプレートに準拠した本文]
EOF
)"
```

### 6. ユーザーへの報告

PR作成後、URLを報告する。

## 注意事項

1. **マージ先ブランチは必ずユーザーから受け取る** - 不明な場合は推測せず確認する
2. **差分はマージ先ブランチとの比較で確認する** - `<マージ先>...HEAD` を使う
3. **関連Issueを確認する** - オープン中のIssueと照合する
4. **全コミットを確認** - 最新コミットだけでなく、マージ先からの全コミットを分析する
5. **理由を重視** - 実装内容セクションでは「何をしたか」より「なぜそうしたか」を重視する
6. **テンプレート準拠** - 独自フォーマットではなく、必ずテンプレートのセクション構造に従う
8 changes: 8 additions & 0 deletions LocalPackage/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
.DS_Store
/.build
/Packages
xcuserdata/
DerivedData/
.swiftpm/configuration/registries.json
.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata
.netrc
23 changes: 23 additions & 0 deletions LocalPackage/Package.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
// swift-tools-version: 6.2
// The swift-tools-version declares the minimum version of Swift required to build this package.

import PackageDescription

let package = Package(
name: "LocalPackage",
products: [
.library(
name: "LocalPackage",
targets: ["LocalPackage"]
),
],
targets: [
.target(
name: "LocalPackage"
),
.testTarget(
name: "LocalPackageTests",
dependencies: ["LocalPackage"]
),
]
)
2 changes: 2 additions & 0 deletions LocalPackage/Sources/LocalPackage/LocalPackage.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
// The Swift Programming Language
// https://docs.swift.org/swift-book
6 changes: 6 additions & 0 deletions LocalPackage/Tests/LocalPackageTests/LocalPackageTests.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import Testing
@testable import LocalPackage

@Test func example() async throws {
// Write your test here and use APIs like `#expect(...)` to check expected conditions.
}
5 changes: 4 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
.PHONY: help lint deploy emulator test-e2e setup-project
.PHONY: help lint deploy emulator test-e2e test-packages setup-project

.DEFAULT_GOAL := setup-project

Expand All @@ -17,6 +17,9 @@ emulator: ## エミュレーターを起動
test-e2e: ## E2Eテストを実行
cd firebase/functions && npm run test:e2e && cd ../..

test-packages: ## LocalPackageのテストを実行
swift test --package-path LocalPackage

setup-project: ## iOSプロジェクトのセットアップ
@bash scripts/setup_ruby.sh
@echo "Bundler依存関係をインストール中..."
Expand Down
2 changes: 2 additions & 0 deletions homete.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
/* End PBXContainerItemProxy section */

/* Begin PBXFileReference section */
04B371962F404CBF00820C62 /* LocalPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; path = LocalPackage; sourceTree = "<group>"; };
BC1BB2682E909B8C001D168F /* hometeSnapshotTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = hometeSnapshotTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
BC1BB4912E90FE4B001D168F /* snapshotTesting.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; path = snapshotTesting.xctestplan; sourceTree = "<group>"; };
BC4703632E9CF66D006CC530 /* CI.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; path = CI.xctestplan; sourceTree = "<group>"; };
Expand Down Expand Up @@ -123,6 +124,7 @@
BCC853EC2DB74BBC00C9A44B = {
isa = PBXGroup;
children = (
04B371962F404CBF00820C62 /* LocalPackage */,
BC4703632E9CF66D006CC530 /* CI.xctestplan */,
BC1BB4912E90FE4B001D168F /* snapshotTesting.xctestplan */,
BC7469462DBCBE71007E4222 /* PrivacyInfo.xcprivacy */,
Expand Down
Loading