🪛
GASで開発する際、だいたい使用する系の処理をまとめたライブラリ「shomin」をつくった
きっかけ
GASでなにかツールなどを作成するときは、だいたい以下の処理を使用する。
- スプレッドシート操作
- slack通知
そこでその処理をまとめた共通ライブラリを作成した。
code&導入方法
GitHubを参照
ライブラリ設定方法
- Apps Script画面で画面左のライブラリの部分の+を押下
- スクリプトIDに以下を入力して検索を押す。ShominというIDが現れるので追加をクリック
1ujXvi5yWiAFvwsMIcCAQ0WjR_hkXAGBDAkfm4wQhlFgppH6Wb2WUnT7D
sheet.jsの使い方
ルール1 シートの情報はjsonで記載する
sheet.gs
const SHEET = {
member : {
name : '従業員情報',
row : {
// 実際にデータが何行目からあるかを定義しています。共通処理の中でここの情報を取得しています。
data : 2,
},
column : {
// 何列目になんの情報があるかを定義してます。後ほどクラスに設定するときに使います。
id : 1,
name : 2,
status : 3,
},
},
form : {
name : 'フォーム',
row : {
data : 2,
},
column : {
time : 1,
id : 2,
text : 3,
},
},
};
ルール2 シートの情報をとるときはライブラリの処理を作成する
例.gs
function getMemberList(){
// ここでクラスに入れておくと楽
return getSheetData(SHEET.member).map(row => new Member(row));
}
ライブラリの処理はこんな感じ
sheet.gs
// シートからの情報を取得する処理(見出しを省く)
function getSheetData(sheetConfig, spreadSheetId){
let data = getSheetDataFull(sheetConfig, spreadSheetId);
[...Array(sheetConfig.row.data - 1)].forEach(_ => data.shift());
return data;
}
// シートからの情報を取得する処理(見出しを省かず、シートの情報全体をとる)
function getSheetDataFull(sheetConfig, spreadSheetId){
const ss = (spreadSheetId !== undefined)
? SpreadsheetApp.openById(spreadSheetId)
: SpreadsheetApp.getActive();
const sheet = ss.getSheetByName(sheetConfig.name);
return ss.getSheetByName(sheetConfig.name).getDataRange().getValues();
}
// 1つのセルに対して情報を設定
function setText(sheetConfig, row, column, text){
setList(sheetConfig, row, column, [[text]]);
}
// 複数のセルに対して情報を設定
function setList(sheetConfig, row, column, list){
if(!list.length) return;
const sheet = SpreadsheetApp.getActive().getSheetByName(sheetConfig.name);
sheet.getRange(row, column, list.length, list[0].length).setValues(list);
}
// シート全体を更新
function refreshSheet(sheetName, list, startColumn, startRow){
if(!list[0].length) return;
const sheet = SpreadsheetApp.getActive().getSheetByName(sheetName);
startRow = startRow ? startRow : 2;
startColumn = startColumn ? startColumn : 1;
sheet.getRange(startRow, startColumn, sheet.getLastRow(), list[0].length).clear();
sheet.getRange(startRow, startColumn, list.length, list[0].length).setValues(list);
}
仕様&ロードマップ
- sheet関連処理
- slack関連処理
- claspによるGitHubとの接続
- Notion処理?
Discussion