Claude Code के साथ GitHub API
Claude Code का उपयोग करके github api सीखें। Practical tips और code examples शामिल हैं।
GitHub APIutilizationको Claude Code से Efficient बनाएं
GitHub APIをutilizationすれば、repositorymanagement、PRcreate、イシューmanagement、リリース आदि、developmentworkflowの多くをautomationでき है।Claude Code का उपयोग करके、Octokit SDKをutilizationしたautomationスクリプトを素早くbuild किया जा सकता है。
Octokitclientのsetup
> GitHub APIclient setupして。
> authenticationはGitHub AppとPersonal Access Tokenの
> 両方にsupportして。
// src/lib/github.ts
import { Octokit } from '@octokit/rest';
import { createAppAuth } from '@octokit/auth-app';
// Personal Access Tokenauthentication
export function createOctokitWithPAT(token: string) {
return new Octokit({ auth: token });
}
// GitHub Appauthentication
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;
PRautomationツール
> PRのcreate、レビュアー割り当て、ラベル付けを
> automationするツールを作って。
// 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) {
// PRcreate
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の変更fileを分析
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;
}
イシューmanagementのautomation
> ステイルイシューの自動クローズと
> ラベル自動付与のスクリプトを作って。
// 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ラベルをadd
await octokit.issues.addLabels({
owner,
repo,
issue_number: issue.number,
labels: ['stale'],
});
// コメントをadd करोクローズ
await octokit.issues.createComment({
owner,
repo,
issue_number: issue.number,
body: `इसイシューは${daysThreshold}日以ऊपरupdateがないため、自動クローズし है।再度supportがज़रूरीなcase मेंリオープンして करें।`,
});
await octokit.issues.update({
owner,
repo,
issue_number: issue.number,
state: 'closed',
state_reason: 'not_planned',
});
}
return { closedCount: staleIssues.length };
}
リリースautomation
// 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受信server
// 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を組み合わせれば、developmentworkflowのautomationを素早く実現でき है।GitHub ActionsutilizationガイドやGit workflowभी reference के लिए देखें。
GitHub APIके details के लिएGitHub REST APIドキュメントをदेखें。
Related Posts
Claude Code से अपने Side Projects को Supercharge कैसे करें [Examples के साथ]
Claude Code से personal development projects को dramatically speed up करना सीखें। Real-world examples और idea से deployment तक practical workflow शामिल है।
Claude Code से Refactoring कैसे Automate करें
Claude Code से efficiently code refactoring automate करना सीखें। Real-world projects के लिए practical prompts और concrete refactoring patterns शामिल हैं।
Claude Code के साथ Complete CORS Configuration Guide
Claude Code का उपयोग करके complete CORS configuration guide सीखें। Practical tips और code examples शामिल हैं।