1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

GitHubのリポジトリ一覧を取得してスプレッドシートに転記

Posted at

経緯

リポジトリの必要・不必要の判断をしてもらうためGitHubのリポジトリ一覧を作成する必要がありました。
一覧はスプレッドシートで共有して判断をしてもらうという形式をとりました。
また、数百というリポジトリがあったので手動でやるには無理があったので簡単なスクリプトを作成しました。

事前準備

GitHubのAPIを利用するのでトークンを発行する必要があります。
GitHubの【Personal settings】から【Developer settings】を選択します。
スクリーンショット 2019-04-12 21.36.35.png

【Personal access tokens】に遷移後、【Generate new token】を押下します。
スクリーンショット 2019-04-12 21.44.00.png

【Token description】に任意のトークン名を入力して以下の【repo】にチェックを入れてください。
チェックを入れないとPrivateリポジトリの取得ができません。
スクリーンショット 2019-04-12 21.50.45.png

【Generate token】を押下すればトークンが発行されますので控えておいてください。

前提

A1列にカラム名、A2列以降にリポジトリ名を記載することをイメージしております。
今回はパッと出したかったので転記するセルをガチガチに決めています。

実装

main.gs
function getRepositoryList() {
  
  // スプレッドシートの取得
  // スプレッドシートとプロジェクトを分けたかったのでスプレッドシートを取得
  var spreadsheet = SpreadsheetApp.openById('対象スプレッドシートのID');
  
  // 対象シートの取得
  var sheet = spreadsheet.getSheetByName('シート名');
  
  // 記載済みのリポジトリ一覧をクリアにする
  sheet.getRange(2, 1, sheet.getLastRow(), 1).clear();
  
  // 一度に取得できるリポジトリ数が100なのでAPIを複数回実行する
  var page = 1;
  while(true) {
    // :org部分は自分のOrganizationを指定
    // Public・Private両方のリポジトリを取得
    var apiUrl = "https://api.github.com/orgs/:org/repos?per_page=100&page=" + page +"&type=all&sort=full_name";
    var repoList = exeGetGitHubAPI(apiUrl);
    // リポジトリが取得できなくなったらループを抜ける
    if(repoList.length == 0) {
      break;
    } else {
      page++;
      for(var i = 0; i < repoList.length; i++) {
        // API実行結果からリポジトリ名を取り出す
        sheet.getRange(sheet.getLastRow()+1, 1).setValue(repoList[i]['name']);
      }
    }
  }

}


function exeGetGitHubAPI(apiUrl) {
  
  var token = '先ほど取得したGitHubトークン';
  
  var header = {
    "Authorization" : "token " + token
  };
  
  var options = {
    "method" : "get",
    'contentType' : 'application/json',
    'headers' : header
  };
  
  try {
    var result = UrlFetchApp.fetch(apiUrl, options);
  } catch(e) {
    Logger.log("処理に失敗しました。エラー内容は以下です。\n" + e);
  }
  
  return JSON.parse(result);
  
}

トークンを直書きしているのでいけてないのですが、上記ソースコードが格納されたプロジェクトに権限を割り当てることで閲覧者を限定させています。

参考資料

GitHub APIリファレンス

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?