Use Cases

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ドキュメントをदेखें。

#Claude Code #GitHub API #automation #CI/CD #developmentefficiency improvement