1. yoshimikeisui

    Posted

    yoshimikeisui
Changes in title
+Google SpreadSheetでタスク管理しろと言われたけど、僕はGitHubが好き
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,106 @@
+すごい適当に書いたコードを、綺麗に使いやすくすることもなく、出しちゃいます。
+GitHubのAPIを確認して、カスタマイズしてみてください。
+
+## 入れ方
+スプレッドシートをひらく
+
+ツール
+
+スクリプトエディタ
+
+以下のコードを入れる
+
+保存&実行、権限許可してください
+
+トリガーも設定できます。
+
+## code
+
+※access_tokenはここで発行してください
+https://github.com/settings/tokens
+
+※ガーッと書いたので、動作の保証はできません。。
+
+```js
+
+GITHUB_OWNER = 'owner_name'; // レポジトリのオーナー名を入れてください
+GITHUB_ACCESS_TOKEN = 'access_token'; // 上記で発行したaccess tokenを入れてください
+REPOSITORIES = ['repository_name'] // 出したいレポジトリ名を入れてください
+
+var getIssues = function(repository){
+ var url = 'https://api.github.com/repos/' + GITHUB_OWNER + '/' + repository + '/issues?state=all&sort=created&direction=asc&access_token=' + GITHUB_ACCESS_TOKEN;
+ var response = UrlFetchApp.fetch(url);
+
+ var json = response.getContentText();
+ return JSON.parse(json);
+}
+
+var getAttributesOfIssue = function(issue){
+ var milestone = "";
+ if(issue["milestone"]){
+ milestone = issue["milestone"]["title"];
+ }
+
+ var labels = "";
+ if(issue["labels"]){
+ labels = issue["labels"].map(function(label){
+ return label["name"]
+ }).join(",");
+ }
+
+ var assignee = "";
+ if(issue["assignee"]){
+ assignee = issue["assignee"]["login"];
+ }
+
+ var due_on = "";
+ if(issue["milestone"] && issue["milestone"]["due_on"]){
+ due_on = issue["milestone"]["due_on"].substring(0, 10);
+ }
+
+ var opend_at = "";
+ if(issue["created_at"]){
+ opend_at = issue["created_at"].substring(0, 10);
+ }
+
+ var closed_at = "";
+ if(issue["closed_at"]){
+ closed_at = issue["closed_at"].substring(0, 10);
+ }
+
+ var url = '=HYPERLINK("' + issue["html_url"] + '","' + issue["number"] + '")';
+
+ return [milestone, issue["title"], assignee, issue["state"], labels, due_on, opend_at, closed_at, url]
+}
+
+var sortByValueOfIndex = function(ary, index){
+ return ary.sort(function(a,b){
+ if( a[index] < b[index] ) return -1;
+ if( a[index] > b[index] ) return 1;
+ return 0;
+ });
+}
+
+function myFunction() {
+ var ss = SpreadsheetApp.getActive()
+ REPOSITORIES.forEach(function(repository){
+ var issues = getIssues(repository).map(function(issue){
+ return getAttributesOfIssue(issue);
+ });
+ issues = sortByValueOfIndex(issues, 5);
+ var titles = ["Milestone", "Title", "Assignee", "Status", "Labels", "期日", "opened_at", "closed_at", "Issue URL"];
+ issues.unshift(titles);
+
+ var sheet = ss.getSheetByName(repository);
+ if(sheet == null) {
+ ss.insertSheet(repository);
+ sheet = ss.getSheetByName(repository);
+ }
+ sheet.getRange("A1:I" + (issues.length).toString()).setValues(issues);
+ });
+}
+```
+
+
+すっごく気が向いたら、適当に済ませている部分とかを直します。
+編集リクエストも大歓迎です。