API GitHub avec Claude Code
Découvrez aPI GitHub avec Claude Code. Conseils pratiques et exemples de code inclus.
GitHub API活用をClaude Codeで効率化する
GitHub APIを活用すれば、リポジトリ管理、PR作成、イシュー管理、リリースなど、開発ワークフローの多くを自動化できます。Claude Codeを使えば、Octokit SDKを活用した自動化スクリプトを素早く構築できます。
Octokitクライアントのセットアップ
> GitHub APIクライアントをセットアップして。
> 認証はGitHub AppとPersonal Access Tokenの
> 両方に対応して。
// src/lib/github.ts
import { Octokit } from '@octokit/rest';
import { createAppAuth } from '@octokit/auth-app';
// Personal Access Token認証
export function createOctokitWithPAT(token: string) {
return new Octokit({ auth: token });
}
// GitHub App認証
export function createOctokitWithApp(
appId: string,
privateKey: string,
installationId: number
) {
return new Octokit({
authStrategy: createAppAuth,
auth: {
appId,
privateKey,
installationId,
},
});
}
const octokit = createOctokitWithPAT(process.env.GITHUB_TOKEN!);
export default octokit;
PR自動化ツール
> PRの作成、レビュアー割り当て、ラベル付けを
> 自動化するツールを作って。
// src/services/pr-automation.ts
import octokit from '../lib/github';
interface CreatePROptions {
owner: string;
repo: string;
title: string;
body: string;
head: string;
base: string;
reviewers?: string[];
labels?: string[];
draft?: boolean;
}
export async function createPullRequest(options: CreatePROptions) {
// PR作成
const { data: pr } = await octokit.pulls.create({
owner: options.owner,
repo: options.repo,
title: options.title,
body: options.body,
head: options.head,
base: options.base,
draft: options.draft || false,
});
// レビュアー割り当て
if (options.reviewers?.length) {
await octokit.pulls.requestReviewers({
owner: options.owner,
repo: options.repo,
pull_number: pr.number,
reviewers: options.reviewers,
});
}
// ラベル付け
if (options.labels?.length) {
await octokit.issues.addLabels({
owner: options.owner,
repo: options.repo,
issue_number: pr.number,
labels: options.labels,
});
}
return pr;
}
// PRの変更ファイルを分析
export async function analyzePRChanges(
owner: string,
repo: string,
pullNumber: number
) {
const { data: files } = await octokit.pulls.listFiles({
owner,
repo,
pull_number: pullNumber,
per_page: 100,
});
const summary = {
totalFiles: files.length,
additions: files.reduce((sum, f) => sum + f.additions, 0),
deletions: files.reduce((sum, f) => sum + f.deletions, 0),
filesByType: {} as Record<string, number>,
};
for (const file of files) {
const ext = file.filename.split('.').pop() || 'other';
summary.filesByType[ext] = (summary.filesByType[ext] || 0) + 1;
}
return summary;
}
イシュー管理の自動化
> ステイルイシューの自動クローズと
> ラベル自動付与のスクリプトを作って。
// src/services/issue-management.ts
import octokit from '../lib/github';
export async function closeStaleIssues(
owner: string,
repo: string,
daysThreshold = 90
) {
const cutoffDate = new Date();
cutoffDate.setDate(cutoffDate.getDate() - daysThreshold);
const { data: issues } = await octokit.issues.listForRepo({
owner,
repo,
state: 'open',
sort: 'updated',
direction: 'asc',
per_page: 100,
});
const staleIssues = issues.filter(
(issue) =>
!issue.pull_request &&
new Date(issue.updated_at) < cutoffDate
);
for (const issue of staleIssues) {
// staleラベルを追加
await octokit.issues.addLabels({
owner,
repo,
issue_number: issue.number,
labels: ['stale'],
});
// コメントを追加してクローズ
await octokit.issues.createComment({
owner,
repo,
issue_number: issue.number,
body: `このイシューは${daysThreshold}日以上更新がないため、自動クローズします。再度対応が必要な場合はリオープンしてください。`,
});
await octokit.issues.update({
owner,
repo,
issue_number: issue.number,
state: 'closed',
state_reason: 'not_planned',
});
}
return { closedCount: staleIssues.length };
}
リリース自動化
// src/services/release.ts
import octokit from '../lib/github';
export async function createRelease(
owner: string,
repo: string,
tagName: string,
options?: { prerelease?: boolean; generateNotes?: boolean }
) {
const { data: release } = await octokit.repos.createRelease({
owner,
repo,
tag_name: tagName,
name: `Release ${tagName}`,
generate_release_notes: options?.generateNotes ?? true,
prerelease: options?.prerelease ?? false,
});
return release;
}
Webhook受信サーバー
// src/api/github-webhook.ts
import { Webhooks } from '@octokit/webhooks';
const webhooks = new Webhooks({
secret: process.env.GITHUB_WEBHOOK_SECRET!,
});
webhooks.on('pull_request.opened', async ({ payload }) => {
const { pull_request, repository } = payload;
console.log(`New PR: ${pull_request.title} in ${repository.full_name}`);
// 自動ラベル付け、レビュアー割り当てなど
});
webhooks.on('issues.opened', async ({ payload }) => {
const { issue, repository } = payload;
console.log(`New Issue: ${issue.title} in ${repository.full_name}`);
});
export default webhooks;
Summary
GitHub APIとClaude Codeを組み合わせれば、開発ワークフローの自動化を素早く実現できます。GitHub Actions活用ガイドやGit ワークフローも参考にしてください。
GitHub APIの詳細はGitHub REST APIドキュメントを参照してください。
Related Posts
Comment booster vos projets personnels avec Claude Code [Avec exemples]
Apprenez à accélérer considérablement vos projets de développement personnels avec Claude Code. Inclut des exemples concrets et un workflow pratique de l'idée au déploiement.
Comment automatiser le refactoring avec Claude Code
Apprenez à automatiser efficacement le refactoring de code avec Claude Code. Inclut des prompts pratiques et des patterns de refactoring concrets pour des projets réels.
Guide complet de configuration CORS avec Claude Code
Découvrez le guide complet de configuration CORS avec Claude Code. Conseils pratiques et exemples de code inclus.