EY-Office ブログ

GitHubのIssuesとDiscussionsをエクスポートするに手間取った

あるプロジェクトで使っていたGitHubが訳あって使えなくなりそうです。リポジトリーはCloneすれば良いのですが、そのプロジェクトではコミュニケーションとしてIssuesとDiscussionsを使っていました。IssuesとDiscussionsは、継続は出来なくても良いので記録として残しておきたいと思いました。

Github 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を使うには、

  1. GraphQLを知らない方は、GraphQLを学ぶ
  2. ネットを検索しGitHub GraphQL APIのサンプルコードを眺める
  3. 公式ページ:クエリを眺め上でみたサンプルコードの理解を深める
  4. 公式ページ:エクスプローラーを使い、2のサンプルコードを実行してみる
    • 最初は簡単なコード(クエリ)から始める
    • クエリ(例: repository)にカーソルを持って行くとクエリや取得されるオブジェクトのドキュメントが表示されるので見ながら、色々と試す
  5. 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
          }
        }
      }
    }
  }
}

まとめ

今回も公式ドキュメント最強な感じの内容になりましたが、公式ドキュメントは分かりにくいものもありますが、今回の公式ドキュメントは良いものでしたし日本語に翻訳されていて最強です。

私も手早く作ろうと、ネットを検索して出てきたコードのある記事を眺めて試すのを繰り返し、時間を浪費してしまいました。またエクスプローラーを早めに試さなかったのも敗因でしたね。😅

- about -

EY-Office代表取締役
・プログラマー
吉田裕美の
開発者向けブログ