GitHub操作スクリプトで、Issue一覧の表示方法を改善した。当初、すべてのIssueデータをコマンドシートの結果カラムに出力していたが、これがスプレッドシートを混雑させていた。
改善前の動作:
Command: list_issues
Result:
#123: Bug in parser
#124: Feature request for export
#125: Documentation update needed
...(数十行)
これでは、他のコマンドの結果が見づらくなる。
改善後の動作:
Command: list_issues
Result: Issue index updated in 'Issue_Index' sheet. 15 issues found.
実際のIssueデータは、専用のIssue_Indexシートに書き込まれる:
| Issue # | Title | State | Created | Author |
|---|---|---|---|---|
| 123 | Bug in parser | open | 2025-09-14 | itako999 |
| 124 | Feature request | open | 2025-09-13 | mn-dict-bot |
実装の鍵:
function listIssues(repo, state) {
const issues = fetchIssuesFromGitHub(repo, state);
// Issue_Indexシートを取得または作成
const ss = SpreadsheetApp.getActiveSpreadsheet();
let sheet = ss.getSheetByName('Issue_Index');
if (!sheet) {
sheet = ss.insertSheet('Issue_Index');
}
// シートをクリアしてヘッダーを書き込む
sheet.clear();
sheet.getRange(1, 1, 1, 5).setValues([[
'Issue #', 'Title', 'State', 'Created', 'Author'
]]);
// Issueデータを書き込む
const data = issues.map(issue => [
issue.number,
issue.title,
issue.state,
issue.created_at,
issue.user.login
]);
if (data.length > 0) {
sheet.getRange(2, 1, data.length, 5).setValues(data);
}
// 確認メッセージだけを返す
return `Issue index updated. ${issues.length} issues found.`;
}
同様の改善をfile読み取りにも適用:
ファイルの内容を結果カラムに出力する代わりに、新しいGoogle Docに保存し、そのURLを返す:
function readFile(repo, path) {
const content = fetchFileFromGitHub(repo, path);
// 新しいGoogle Docを作成
const doc = DocumentApp.create('GitHub_' + path.replace('/', '_'));
doc.getBody().setText(content);
return `File saved to: ${doc.getUrl()}`;
}
テキストフォーマットのバグ修正:
当初、改行が正しく処理されず、すべてのテキストが1行に表示されていた。複数の改行タイプ(\n, \r, \r\n)に対応する堅牢な正規表現を実装した:
function normalizeLineEndings(text) {
return text.replace(/\r\n|\r|\n/g, '\n');
}
現在、GitHubスクリプトはクリーンなコントロールパネルとして機能している。複雑な操作は実行するが、ユーザーインターフェース(コマンドシート)は整理されたまま保たれる。