Use Cases

GitHub API dengan Claude Code

Pelajari tentang github api menggunakan Claude Code. Dilengkapi tips praktis dan contoh kode.

GitHub APIpemanfaatan dengan Claude Code: efisiensi

GitHub API pemanfaatanすれば、repositorymanajemen、PRpembuatan、イシューmanajemen、release dll.、pengembanganworkflow 多く otomatisasi bisa dilakukan.Claude Code 使えば、Octokit SDK pemanfaatan otomatisasiscript 素早くpembangunan bisa dilakukan.

セットアップ Octokitclient

> GitHub APIclient セットアップして。
> 認証 GitHub App dan Personal Access Token 
> 両方 support.
// 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;

PRotomatisasitools

> PR pembuatan、レビュアー割り当て、ラベル付け 
> otomatisasiするtools buatkan.
// 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) {
  // PRpembuatan
  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;
}

otomatisasi イシューmanajemen

> ステイルイシュー 自動クローズ dan 
> ラベル自動付与 script buatkan.
// 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ラベル penambahan
    await octokit.issues.addLabels({
      owner,
      repo,
      issue_number: issue.number,
      labels: ['stale'],
    });

    // コメント penambahan クローズ
    await octokit.issues.createComment({
      owner,
      repo,
      issue_number: issue.number,
      body: `こ イシュー ${daysThreshold}日以上pembaruan tidakため、自動クローズします。再度dukungan diperlukanな場合 リオープン ください。`,
    });

    await octokit.issues.update({
      owner,
      repo,
      issue_number: issue.number,
      state: 'closed',
      state_reason: 'not_planned',
    });
  }

  return { closedCount: staleIssues.length };
}

releaseotomatisasi

// 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;
}

Webhookpenerimaanserver

// 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 dan Claude Code 組み合わせれば、pengembanganworkflow otomatisasi 素早く実現 bisa dilakukan.GitHub ActionspemanfaatanpanduanGit workflow juga bisa dijadikan referensi.

Untuk GitHub APIの詳細, lihat GitHub REST APIドキュメント.

#Claude Code #GitHub API #automation #CI/CD #pengembanganefisiensi