Communityコーディング&開発github.com

GitHub Extract

指定された GitHub URL(リポジトリ、Issue、PR、コミット、ファイル、リリース)から完全なローカル成果物を抽出し、詳細を提示する前にプロジェクトの目的を平易な言葉で説明します。ユーザーが「抽出」「プル」「保存」「全文読む」「説明して」と指示した場合や、結果が不明瞭だった場合、またはURLに#番号フラグメントが含まれている場合に使用します。

GitHub Extract とは?

GitHub Extractスキルは、GitHubリンクが示すコンテンツを単にダウンロードするのではなく、リンク先のプロジェクトや変更の本質を理解するためのフレームワークを提供します。ユーザーがGitHub URLを「抽出」「説明」「保存」などと要求した際に、まずプロジェクトの目的や変更の理由を平易な言葉で説明し、その後にファイル内容や差分といった証拠を提示します。このスキルは、リポジトリ、Issue、Pull Request、コミット、ファイル、リリースなど、あらゆる種類のGitHub URLに対応しています。処理の流れは、URLタイプの識別、GitHub APIからのデータ取得(HTMLではなく)、クロスチェックによる一貫性の確認、そして説明→証拠の順序で成果物を構成するという、5つのステップで構成されています。主にClaude CodeなどのAIエージェント上で動作し、ユーザーが「自分の言葉でプロジェクトを説明できない」という問題を解決します。最終的な出力は、300字以内でプロジェクトの目的、変更内容、変更理由を説明できることを確認する自己チェック機構も備えています。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/dji-sq/DSH-skill/tree/HEAD/github-extract

Installed? Explore more コーディング&開発 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

GitHub Extract は何をしますか?

このスキルが解決する問題

ユーザーがGitHubリンクを投げてきたとき、多くの場合、その目的はファイル内容の羅列を欲しいのではなく、次の3点を理解することです:

  1. このプロジェクトは一体何をするものか?
  2. 今回の変更で何を解決しようとしているのか?
  3. なぜこのアプローチを選んだのか? ファイル、差分、メタデータはあくまで証拠です。証拠を結論として提示するのは、抽出したことになりません。読者は表の羅列を受け取っても、そのリポジトリが存在する理由を説明できません。 完了基準(一言で):このリポジトリを聞いたことがない人が、最初の300文字を読めば、「このプロジェクトが何を解決するのか、今回何が変わったのか、なぜその変更をしたのか」を自分の言葉で言えること。これができなければ、抽出は完了していません。

ステップ0:まず「プロジェクト」を読み、次に「ページ」を読む

PRやIssueを取得する前に、まずそのコンテナとなるプロジェクト自体を理解します。このステップを飛ばすと、どれだけ詳細に書いても根拠のないものになります。

答えるべき質問どこから読むか
これは何のプロジェクトかリポジトリの description、topics、README冒頭
何のギャップを埋めるのか / 何を代替するのかREADME内の各パッケージの「Why」の列
誰がどんなシナリオで使うのかREADMEのInstall / Usage / Developのセクション
今回の変更はプロジェクト内でどの位置づけかPRのベースブランチ、変更されたパッケージの役割
monorepo / プラグイン集合作成時は特にスキップ不可:最初に「パッケージ名 → 一言での責務」の対照表を作成しなければ、読者は今回の変更を位置づけられません。READMEが業界用語(例:"lifecycle hooks"、"ctx.web seam")を多用している場合は、まず平易な言葉で翻訳してから本題に入ります。

ステップ1:URLタイプを識別する

URLの形状タイプ主なデータソース
github.com/{o}/{r}リポジトリ/readme + git/trees?recursive=1
…/issues/{n}Issueissues/{n}
…/pull/{n}PRpulls/{n} + pulls/{n}/files + pull/{n}.diff
…/commit/{sha}コミットcommits/{sha}
…/blob/{ref}/{path}ファイルcontents/{path}?ref={ref}(base64)
#1 はフラグメントであり、パスではありません。IssueとPRは同じ番号空間を共有しています:/issues/1 が /pull/1 に302リダイレクトされる場合、それはPRであり、その旨を明示する必要があります。

ステップ2:APIから全文を取得する、HTMLにこだわらない

  • ページのHTMLはナビゲーションバーと本文の一部のみを提供するため、本文は必ず api.github.com 経由で取得します。
  • パッチは patch-diff.githubusercontent.com/raw/{o}/{r}/pull/{n}.diff から取得します(github.com/.../pull/n.diff はクロスオリジンリダイレクトを引き起こすため、最終的なURLに直接アクセスする必要があります)。
  • raw.githubusercontent.com はしばしば利用できないため、代わりに contents APIから取得したbase64データをローカルでデコードします。
  • ローカルの git / curl でTLSエラー SEC_E_NO_CREDENTIALS が発生した場合、シェル環境を修正しようとせず、代わりにハーネスの web_fetch を使用します。「cloneの失敗」をタスクの障害と見なさないでください。

ステップ3:クロスチェック

additions/deletions/changed_files ←→ filesリスト ←→ .diffのハンク;PRのhead SHA ←→ パッチのref;merged は state=closed だけを見て判断しません。不整合があれば調査を続けます(多くの場合、ページネーションか古いパッチが原因です)。矛盾した成果物を作成しないでください。

ステップ4:「読める」成果物に構成する

順序は厳格です:説明が先、証拠は後。読者は200行の表を読み進めてから、これが何なのかを理解すべきではありません。

  1. それが何か(150~300文字、平易な言葉) — プロジェクトが存在する理由、それが埋めるギャップ。専門用語が初出の場合は、必ず一文で説明すること:hookkit = 「プラグインを書かないとライフサイクルフックを実装できない」を「YAMLを1つ書くだけ」に変えるもの。
  2. 今回の変更で解決したいこと — 「以前はどうだったか → 現在はどうか」の比較で書く。ファイルリストで代用しない。
  3. なぜこのアプローチを選んだか — PRの説明 / コミットメッセージから、トレードオフと因果関係を抽出する(なぜpushトリガーを選ばなかったのか、なぜレジストリを状態として扱ったのか)。
  4. 変更リスト — 表:ファイル / ステータス / 追加削除数 / 一言での役割。
  5. 原文 — PRの説明、コミットメッセージを一字一句引用し、書き換えない。
  6. 完全な内容 — 各ファイルの全文。「…残りは省略」と書かない。
  7. 応用可能な手法 — 読者が次回実際に使えるものだけを残す。
  8. 検証とカバレッジ — 最後に付録として配置:git apply --check の結果、blob SHAの比較、取得できなかったもの。 文章作成ルール
  • 結論を先に:各段落の最初の文が結論であり、その後に根拠を続ける。
  • 表は説明責任を負わない。 「これは何か」「なぜか」はすべて完全な文章で書く。
  • ファイル名で機能説明を代用しない:
    • 「publish.ymlを変更した」❌
    • 「手動公開ワークフローを追加。ボタンを押した時のみ公開し、デフォルトではドライランする」✅
  • 数字は出典を特定できるようにするが、検証ログを冒頭に配置しない。
  • ユーザーが使用している言語で記述する。
  • アンチパターン:大きな表の羅列、ファイル単位の差分を本文とする、冒頭がメタデータ、用語の未説明。

ステップ5:自己チェック

  • 最初の300文字(タイトルと表を除く)だけで、「何をするのか / 何が変わったのか / なぜその変更をしたのか」に答えられるか? 答えられなければ書き直す。
  • まだ説明していない用語はないか?
  • 「ファイルA、B、Cに変更があった」ことを変更説明として使っていないか?
  • パッチは git apply --check に合格したか? 実行していなければ「未検証」と明記する。

失敗パターン

症状原因対処
本文の途中で途切れるHTMLを取得したAPIを使用する
raw.githubusercontent で404ネットワークの許可リストcontents APIのbase64をデコードする
403 rate limit認証なしでの繰り返しバッチ処理、速度制限、不足分を正直に報告する
cross-origin redirect not followed.diff のリダイレクトpatch-diff… に直接アクセスする
ファイル数が changed_files と一致しないページネーション?per_page=100 で再取得する
読者から「わからなかった」とフィードバック証拠のみで説明がないステップ4の第1~3節に戻って書き直す

境界

優先順位:ユーザーの明示的な指示 > このセクションの制約 > デフォルトの保守的動作。 デフォルトではコンテンツの抽出のみを行い、clone / build / install / テスト実行は行いません。プライベートリポジトリの場合はユーザーにトークンを提供するよう要求し、捏造しないでください。リポジトリがアーカイブされている場合はその旨を説明します。コンテンツはまだ抽出可能ですが、ステータスが解釈に影響します。 (許可なく権限を拡大するのではなく)必ず確認を求めるケース

  • ユーザーが「インストールして / 実行して」と言ったが、対象が他人のリポジトリである場合、またはグローバル環境に書き込む場合:まずスコープとロールバック方法を確認する。
  • 指示に曖昧さがある場合(「このリポジトリを処理して」):デフォルトの案を一行提示し、確認の一文を添える。推測で実行しない。
  • 操作が不可逆的、またはユーザーの環境を変更する場合(pnpm install、グローバルパッケージ、プロファイルの変更、PRの作成、push、ファイルの削除):常に最初に確認する。
  • 認証情報が必要な場合(プライベートリポジトリ、トークン、SSHキー):一度確認する;取得できれば使用し、取得できなければ公開で検証可能な部分のみを出力し、何が不足しているかを明記する。 自律的に範囲を拡大できるケース
  • ユーザー自身のリポジトリであり、かつ「自由に変更して / 直接インストールして / 確認不要」と明確に指示されている場合。
  • または、一時ディレクトリ内で完結し、元のリポジトリやグローバル状態に影響を与えない場合(この場合、拡大されるのは「書き込み」であり、「信頼できないコードの実行」ではない)。 範囲を拡大した場合は、成果物の末尾に「ご依頼に基づきXを実行しました」と一文追加し、越権が可視化され、取り消し可能になるようにします。

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

関連スキル