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
Gratis

PDF Gratis: Cheatsheet Claude Code dalam 5 Menit

Cukup masukkan emailmu dan kami akan langsung mengirim cheatsheet PDF A4 satu halaman.

Kami menjaga data pribadimu dengan aman dan tidak pernah mengirim spam.

Masa

Tentang Penulis

Masa

Engineer yang aktif menggunakan Claude Code. Mengelola claudecode-lab.com, media teknologi 10 bahasa dengan lebih dari 2.000 halaman.