あるプロジェクトで使っていたGitHubが訳あって使えなくなりそうです。リポジトリーはCloneすれば良いのですが、そのプロジェクトではコミュニケーションとしてIssuesとDiscussionsを使っていました。IssuesとDiscussionsは、継続は出来なくても良いので記録として残しておきたいと思いました。
Bing Image Creatorが生成した画像を使っています
GitHub API
GitHubはAPIをサポートしています、昔からあるREST APIと後から追加されたGraphQL APIの2つがあります。 EY-OfficeでもGitHubのバックアップを取るのにREST APIを使っています、また昔使っていた独自Gitリポジトリーのインポートするツールを使った事がありました。
IssuesはREST APIをcurlコマンドでアクセスする事で簡単に取得できました。
DiscussionsにもREST APIがあったようですが終了しているようです(→ココ)、GraphQL APIを使って取得する必要があるようです。
GitHub GraphQL API
GitHub GraphQL APIは以前に少しふれた程度でした。そこでネットを検索し色々と試しましたが難航しました。そして一度は読み飛ばした 公式ページのGitHub GraphQL API に関するドキュメント に戻ってきました。
GitHub GraphQL APIを使うには、
- GraphQLを知らない方は、GraphQLを学ぶ
- ネットを検索しGitHub GraphQL APIのサンプルコードを眺める
- 公式ページ:クエリを眺め上でみたサンプルコードの理解を深める
- 公式ページ:エクスプローラーを使い、2のサンプルコードを実行してみる
- 最初は簡単なコード(クエリ)から始める
- クエリ(例:
repository
)にカーソルを持って行くとクエリや取得されるオブジェクトのドキュメントが表示されるので見ながら、色々と試す
- 2.や3. に戻って繰り返し学習する
エクスプローラーの結果をコピーしてファイルに書いてもよいですが、データ量が大きいと大変なのでコマンド等で実行したくなります。
そういときは GitHub CLI (gh) を使うとよいです、Macならbrew
で簡単にインストールできます。以下のようにしてGRAPHQLファイルに書いたクエリを実行できます。
$ gh api graphql -F query=@GRAPHQLファイル
成果物
今回作ったクエリを書いておきます。
1. 全Issuesと、その全コメントを取得するクエリ
取得項目は、
- Issue
- 番号
- タイトル
- 作者
- 作成日時
- Issueのコメント
- 投稿者
- 内容
- 作成日時
query {
repository(owner:"ユーザー名", name:"リポジトリー名") {
issues(first: 100){
totalCount
nodes {
number
title
author {
login
}
body
createdAt
comments(first: 100){
nodes {
author {
login
}
body
createdAt
}
}
}
}
}
}
2. 全Discussionsと、その全コメントを取得するクエリ
Issuesとほぼ同じです。取得項目は、
- Discussion
- 番号
- タイトル
- 作者
- 作成日時
- Discussionのコメント
- 投稿者
- 内容
- 作成日時
query {
repository(owner:"ユーザー名", name:"リポジトリー名") {
discussions(first: 100) {
totalCount
nodes {
number
title
author {
login
}
body
createdAt
comments(first: 100) {
nodes {
author {
login
}
body
createdAt
}
}
}
}
}
}
まとめ
今回も公式ドキュメント最強な感じの内容になりましたが、公式ドキュメントは分かりにくいものもありますが、今回の公式ドキュメントは良いものでしたし日本語に翻訳されていて最強です。
私も手早く作ろうと、ネットを検索して出てきたコードのある記事を眺めて試すのを繰り返し、時間を浪費してしまいました。またエクスプローラーを早めに試さなかったのも敗因でしたね。😅