GitHub コネクタ

GitHub リポジトリを Brevo に接続し、Tajo を介して開発者エンゲージメントのトラッキング、リリース通知ワークフロー、コミュニティアクティビティの監視を実現します。

概要

プロパティ
プラットフォームGitHub
カテゴリカスタム
セットアップの複雑さ
公式統合いいえ
同期データイベント、ユーザー、リポジトリ
API タイプREST API、GraphQL API
認証GitHub App / Personal Access Token / OAuth 2.0
ベース URLhttps://api.github.com
API バージョン2022-11-28(ヘッダーベースのバージョニング)

機能

  • Issue と PR のトラッキング - Issue およびプルリクエストのイベントを Brevo 連絡先タイムラインに同期
  • リリース通知 - 新しいリポジトリリリース時に Brevo キャンペーンをトリガー
  • コントリビューター同期 - コミュニティエンゲージメントのために GitHub コントリビューターを Brevo 連絡先にマッピング
  • スターとフォークのトラッキング - リポジトリの人気指標を監視
  • Webhook イベント転送 - GitHub イベントを Brevo 自動化に転送
  • リポジトリカタログ - リポジトリメタデータを Brevo カタログ項目として同期

前提条件

開始する前に、以下を準備してください。

  1. 対象リポジトリへのアクセス権を持つ GitHub アカウント
  2. GitHub App または Personal Access Token(fine-grained 推奨)
  3. Webhook 設定のためのリポジトリへの管理者アクセス
  4. API アクセス可能な Brevo アカウント
  5. 有効なサブスクリプションを持つ Tajo アカウント

認証

GitHub は複数の認証方法をサポートしています。Tajo では組織レベルのアクセスには GitHub Apps の使用を推奨します。

オプション 1: GitHub App(推奨)

  1. Settings > Developer settings > GitHub Apps に移動
  2. New GitHub App をクリック
  3. 以下の権限でアプリを設定:
Repository permissions:
Issues: Read
Pull requests: Read
Contents: Read
Metadata: Read
Organization permissions:
Members: Read
Subscribe to events:
Issues
Pull request
Push
Release
Star
Fork

オプション 2: Fine-Grained Personal Access Token

  1. Settings > Developer settings > Personal access tokens > Fine-grained tokens に移動
  2. Generate new token をクリック
  3. 対象リポジトリを選択
  4. 以下の権限を付与:
Repository access: Selected repositories
Permissions:
Issues: Read-only
Pull requests: Read-only
Contents: Read-only
Metadata: Read-only

トークンセキュリティ

Fine-grained トークンには有効期限があります。期限前にトークンローテーションを設定してください。GitHub App インストールトークンは自動的に更新され、本番使用で推奨されます。

Tajo への接続

Terminal window
# GitHub App を使用
tajo connectors install github \
--app-id $GITHUB_APP_ID \
--private-key-path ./github-app-key.pem \
--installation-id $GITHUB_INSTALLATION_ID
# Personal Access Token を使用
tajo connectors install github \
--token $GITHUB_TOKEN

設定

基本セットアップ

connectors:
github:
enabled: true
auth_type: "github_app" # または "token"
repositories:
- owner/repo-1
- owner/repo-2
sync:
issues: true
pull_requests: true
releases: true
contributors: true
stars: true
lists:
contributors: 20
stargazers: 21

フィールドマッピング

GitHub ユーザーデータを Brevo 連絡先属性にマッピングします。

field_mapping:
# 標準フィールド
login: GITHUB_USERNAME
email: email
name: FIRSTNAME
# 開発者メトリクス
contributions: GITHUB_CONTRIBUTIONS
repositories_count: GITHUB_REPOS
followers: GITHUB_FOLLOWERS
created_at: GITHUB_JOINED
# カスタム属性
company: COMPANY
location: LOCATION
bio: GITHUB_BIO

API エンドポイント

Tajo は以下の GitHub REST API エンドポイントと統合します。

エンドポイントメソッド目的
/repos/{owner}/{repo}/issuesGETリポジトリの Issue を一覧取得
/repos/{owner}/{repo}/pullsGETプルリクエストを一覧取得
/repos/{owner}/{repo}/releasesGETリリースを一覧取得
/repos/{owner}/{repo}/contributorsGETコントリビューターを一覧取得
/repos/{owner}/{repo}/stargazersGETスターしたユーザーを一覧取得
/repos/{owner}/{repo}/forksGETフォークを一覧取得
/repos/{owner}/{repo}/eventsGETリポジトリイベントを一覧取得
/users/{username}GETユーザープロファイルを取得
/orgs/{org}/membersGET組織メンバーを一覧取得
/repos/{owner}/{repo}/hooksPOSTWebhook を作成

コード例

コネクタの初期化

import { TajoClient } from '@tajo/sdk';
const tajo = new TajoClient({
apiKey: process.env.TAJO_API_KEY,
brevoApiKey: process.env.BREVO_API_KEY
});
await tajo.connectors.connect('github', {
appId: process.env.GITHUB_APP_ID,
privateKey: process.env.GITHUB_PRIVATE_KEY,
installationId: process.env.GITHUB_INSTALLATION_ID
});

コントリビューターを Brevo に同期

await tajo.connectors.sync('github', {
type: 'full',
resources: ['contributors'],
repositories: ['owner/repo-1', 'owner/repo-2']
});
const status = await tajo.connectors.status('github');
console.log(status);
// {
// connected: true,
// lastSync: '2024-03-15T11:00:00Z',
// contributorsCount: 245,
// issuesTracked: 1890,
// releasesTracked: 34
// }

Webhook イベントの処理

app.post('/webhooks/github', async (req, res) => {
const signature = req.get('X-Hub-Signature-256');
const event = req.get('X-GitHub-Event');
// Webhook 署名を検証
if (!verifyGitHubSignature(req.body, signature)) {
return res.status(401).send('Unauthorized');
}
await tajo.connectors.handleWebhook('github', {
event,
payload: req.body
});
res.status(200).send('OK');
});

リリースキャンペーンをトリガー

// 新しいリリースをリッスンして Brevo キャンペーンをトリガー
tajo.connectors.on('github', 'release.published', async (event) => {
await tajo.campaigns.trigger('release-announcement', {
listId: 21,
params: {
version: event.release.tag_name,
release_notes: event.release.body,
download_url: event.release.html_url
}
});
});

レート制限

GitHub は認証方法に基づいてレート制限を適用します。

認証主要レート制限Search API
未認証60 リクエスト/時間10 リクエスト/分
Personal Access Token5,000 リクエスト/時間30 リクエスト/分
GitHub App(インストール)5,000 リクエスト/時間30 リクエスト/分
GitHub App(ユーザー to サーバー)5,000 リクエスト/時間30 リクエスト/分

条件付きリクエスト

Tajo は条件付きリクエスト(If-None-Match / If-Modified-Since ヘッダー)を使用して API 消費を削減します。304 Not Modified のレスポンスはレート制限にカウントされません。

追加の制限:

  • セカンダリレート制限: 同時リクエスト 100 件以下。REST API エンドポイントは 1 分あたり 900 ポイント以下。
  • GraphQL: 1 時間あたり 5,000 ポイント(クエリコストは複雑度により変動)。

トラブルシューティング

一般的な問題

問題原因解決策
401 Unauthorizedトークン期限切れまたは資格情報の誤りトークンを再生成するか GitHub App を再インストール
403 Forbidden権限不足トークンのスコープまたは App の権限を確認
404 Not Foundアクセス権のないプライベートリポジトリトークンまたは App にリポジトリアクセスを付与
レート制限超過API 呼び出し過多条件付きリクエストを有効化して同期頻度を下げる
Webhook を受信できない不正な URL またはファイアウォールWebhook URL が公開アクセス可能か確認

デバッグモード

connectors:
github:
debug: true
log_level: verbose
log_webhooks: true

接続テスト

Terminal window
tajo connectors test github
# ✓ API 認証に成功
# ✓ リポジトリアクセスを確認
# ✓ Issue データ読み取り可能
# ✓ Webhook 配信有効
# ✓ レート制限は正常(4,850/5,000 残り)

ベストプラクティス

  1. PAT よりも GitHub Apps を使用する - GitHub Apps は細かい権限と自動更新トークンを提供
  2. Webhook シークレットを有効化する - 常に HMAC-SHA256 で Webhook 署名を検証
  3. 条件付きリクエストを使用する - ETag を活用してレート制限の無駄を防止
  4. 大きなレスポンスをページネーションする - GitHub はページあたり最大 100 アイテムを返します。Link ヘッダーで反復処理
  5. 低アクティビティ時間中に同期する - ピーク開発時間外にフル同期をスケジュール
  6. レート制限ヘッダーを監視する - X-RateLimit-Remaining を確認して事前にスロットリング

セキュリティ

  • GitHub App 認証 - RSA キーベースの JWT と短期インストールトークン
  • Webhook 署名 - すべての Webhook ペイロードで HMAC-SHA256 署名検証
  • Fine-Grained トークン - 特定のリポジトリと権限にスコープ
  • HTTPS のみ - すべての API 通信は TLS 1.2 以上で暗号化
  • 暗号化されたストレージ - プライベートキーとトークンは Tajo で保存時に暗号化
  • トークンの有効期限 - Fine-grained トークンは自動的に期限切れ。ローテーションアラートを設定

関連リソース

Subscribe to updates

developer-docs

Drop your email or phone number — we'll send you what matters next.

auto-detect
AIアシスタント

こんにちは!ドキュメントについて何でもお聞きください。