sgcOpenAPI 経由の GitHub REST API Delphi クライアント

GitHub は公開されている最大の OpenAPI 記述を保守しています — リポジトリ、Issue、プルリクエスト、Actions、Checks、Packages、GraphQL ゲートウェイにわたる 1,000 を超えるエンドポイント。これを sgcOpenAPI に供給して、REST API が公開する任意の GitHub ワークフローをアプリケーションから駆動するために使用できる型付き Delphi ユニットを出力します。

GitHub + sgcOpenAPI

GitHub は MIT ライセンスの下、完全に保守された OpenAPI 3 記述を出荷しています。sgcOpenAPI はこれをパースし、Delphi 7 から RAD Studio 13 でコンパイルする単一の Pascal ユニットを出力します。

ソース仕様

github/rest-api-description

認証

個人アクセストークン、GitHub App JWT、OAuth

生成ユニット

sgcOpenAPI_GitHub

プラットフォーム

Windows、macOS、Linux、iOS、Android

クライアントを生成

GitHub は 2 種類の仕様を公開しています — 公開ホスト型サービス向けの api.github.com.json と GitHub Enterprise Server 向けの ghes-3.x.json。対象とするものにパーサーを向けてください。

uses
  sgcOpenAPI_Parser, sgcOpenAPI_Generator;

var
  vParser: TsgcOpenAPIParser;
  vGen: TsgcOpenAPIGenerator;
begin
  vParser := TsgcOpenAPIParser.Create(nil);
  try
    vParser.LoadFromFile('C:\specs\github\api.github.com.json');
    Memo1.Lines.Add(Format('GitHub spec: %d paths, %d schemas',
      [vParser.Paths.Count, vParser.Schemas.Count]));

    vGen := TsgcOpenAPIGenerator.Create(nil);
    try
      vGen.Parser := vParser;
      vGen.OutputUnit := 'sgcOpenAPI_GitHub';
      vGen.OutputFolder := 'C:\Generated\GitHub';
      vGen.GroupBy := gbTag;        // one class per tag
      vGen.Generate;
    finally
      vGen.Free;
    end;
  finally
    vParser.Free;
  end;
end;

ジェネレーターは GitHub タグごとに 1 つのクラス — TsgcGitHub_ReposTsgcGitHub_IssuesTsgcGitHub_PullsTsgcGitHub_ActionsTsgcGitHub_ChecksTsgcGitHub_PackagesTsgcGitHub_OrgsAdmin など — を出力します。すべてトップレベルの TsgcGitHub ファサードが所有します。

リポジトリを一覧表示

個人アクセストークンで認証し、現在のユーザーのリポジトリを列挙します。ページネーションは生成された列挙可能ラッパーが処理します — 結果を for...in するだけで、クライアントは必要に応じて追加ページを取得します。

uses sgcOpenAPI_GitHub;

var
  vGH: TsgcGitHub;
  vRepo: TsgcGitHubRepository;
begin
  vGH := TsgcGitHub.Create(nil);
  try
    vGH.Token := 'ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxx';
    vGH.UserAgent := 'sgcDelphi/1.0';

    for vRepo in vGH.Repos.ListForAuthenticatedUser(
      Visibility := 'private', PerPage := 100) do
    begin
      Memo1.Lines.Add(Format('%s — %s',
        [vRepo.FullName, vRepo.Description]));
    end;
  finally
    vGH.Free;
  end;
end;

Issue を作成しプルリクエストをレビュー

2 つの短い呼び出し — 1 つは変更、1 つは読み取り。両ルートとも仕様が記述する強く型付けされた同じオブジェクトを返します。

// Create an issue in repo "octocat/Hello-World"
var
  vIssue: TsgcGitHubIssue;
begin
  vIssue := vGH.Issues.Create(
    Owner := 'octocat',
    Repo  := 'Hello-World',
    Title := 'Memory leak in HTTP/2 reader',
    Body  := 'Repro steps: ...',
    Labels := ['bug', 'http2']);
  ShowMessage('Filed issue #' + IntToStr(vIssue.Number));

  // List open PRs and inspect the head ref
  for vPR in vGH.Pulls.List(
    Owner := 'octocat', Repo := 'Hello-World',
    State := 'open', Sort := 'updated') do
  begin
    Memo1.Lines.Add(Format('PR #%d %s — %s',
      [vPR.Number, vPR.Title, vPR.Head.Ref]));
  end;
end;

生成ユニットが提供するもの

公式 OpenAPI 記述のすべてのタグが型付きクラスになります。文書化されたすべてのパラメーターが型付き引数になります。

リポジトリとコンテンツ

ReposGitContentsBranchesTagsReleasesForks。ファイルの読み取り、書き込み、削除。ブランチの作成、保護ルールの管理、リリースの下書きと公開。

Issue とプルリクエスト

IssuesPullsReviewsCommentsReactionsLabelsMilestonesAssignees。完全な共同作業面。

Actions と Checks

ActionsWorkflowRunsWorkflowJobsArtifactsSecretsVariablesChecksCheckRunsCheckSuites — GitHub Actions データをもとにダッシュボードを構築したり自動化を実行したり。

Packages とコンテナレジストリ

PackagesPackageVersions — Delphi から npm、NuGet、Maven、RubyGems、コンテナパッケージを管理。

組織とチーム

SCIM プロビジョニングなどオーナー限定操作向けの OrgsTeamsMembersMembershipsOrgsAdmin

GitHub Apps

AppsInstallationsAppManifests — GitHub App をプログラム的にインストールし、短寿命のインストールトークンを発行。

注意すべき 3 点

レート制限と条件付きリクエスト

GitHub は時間あたりレート制限を強制します(トークンありで 5,000 リクエスト/時間、未認証で 60)。生成クライアントは各 GET レスポンスの最後の ETag を保存します — 次の呼び出しで IfNoneMatch を設定して再利用すると、無料の 304 レスポンスを得られます。

GitHub App には短寿命トークンが必要

GitHub App インストールでは、JWT(アプリの秘密鍵で署名)を 1 時間のインストールトークンと交換します。Apps.CreateInstallationAccessToken メソッドを使用し、有効期限前にトークンを更新してください。

多態タイムラインイベント

Issues.ListEventsForTimeline エンドポイントは数十のイベント型の判別ユニオンを返します。生成ユニットは基底クラスとバリアントごとに 1 つの子孫を出力します — Event プロパティに基づいてダウンキャストしてください。

ブログから

OpenAPI Delphi パーサー

背後のパーサーが実世界の OpenAPI 3.x 仕様をどう扱うか。

投稿を読む →

OpenAPI クライアント + パーサー

クライアントラッパーとパーサー内部の両方を紹介する姉妹ブログ投稿。

投稿を読む →

sgcOpenAPI 2026.6

最新リリースノート — 新しいジェネレーターオプションとパーサー修正。

投稿を読む →

今日 GitHub 自動化を構築

sgcOpenAPI には、パーサー、コードジェネレーター、OpenAPI サーバー、Amazon、Google、Microsoft、Azure SDK バンドルが同梱されています — 1 製品、3 ティア。