この記事はHRBrain Advent Calendar 2022の2日目の記事です。
はじめに
バックエンドエンジニアをやっている入中です。
この記事ではGoogle Apps Scriptとスプレッドシートを使用して、アドベントカレンダーの何日目の担当かをサクッと決められるスクリプトを作成したので紹介します。
誰に向けた記事
- GASを使ってみたい方
- 開発環境構築せずに、プログラムを動かしてみたい方
- アドベントカレンダーの日程割に困っている方
経緯
私の発案で2022年のHRBrainアドベントカレンダーの担当日を決める際に、くじ引きで日にちを決めようと決意し、みんなにくじを引いてもらいました。(アナログな手作りくじ)くじを引いてもらったのはいいのですが。。。その後、自分が引いてたくじ番号をNotionに書いてもらったり、リモートで就業している方がくじをひけなかったり、自分自身もアドベントカレンダーの日程管理に時間を取られたりと、なかなか反省の多い施策でした。。。
やりたかったことはアドベントカレンダーに参加してくれる人にランダムで日程が割り付けられること
なので、スプレッドシートの日付に参加者を充てるスクリプトを作成し、在宅・出社問わずアドベントカレンダーの日程決めに参加できる
、誰が何日の担当かの確認の煩わしさが起こらない
ようにしようと考えました。
作ったものの動き
- 空白行があった場合に除外することを確認するため、1行空白を入れています。
- 2022年のHRBrainアドベントカレンダーは参加者が25名以上になりました。参加者が25名以上の場合、スプレッドシート
結果
ページの1列目には25
以降に1
を入力し、カレンダー2の1日
に割り当たるようにしました。 - シートに記載している名前は名前生成APIで作成したものです。
コード
function assignCalendar() {
const spreadSheetId = 'xxxxxxxxxxxxxxxxxxxxxxxxxx'
const sheet = SpreadsheetApp.openById(spreadSheetId)
const memberSheet = sheet.getSheetByName('参加者')
const resultSheet = sheet.getSheetByName('結果')
const membersList = memberSheet.getRange(1,1,memberSheet.getLastRow())
const members = membersList.getValues()
const m = []
let num = 0
for (let i = 1; i < members.length; i++) {
if (members[i][0]== "") {
// 空白セルがあったときにスキップする
continue
}
num++
m.push([members[i][0]])
}
const shuffleMembers = shuffleItems(m)
const memberRow = resultSheet.getRange(2,2,num)
memberRow.setValues(shuffleMembers)
}
function shuffleItems(items){
l = items.length
while (l) {
j = Math.floor( Math.random() * l );
t = items[--l];
items[l] = items[j];
items[j] = t;
}
return items
}
まとめ
1~1.5hくらいで簡単にできたので、アドベントカレンダー日程決めの前に用意できていたらなと改めて思いました。来年、もし機会があればこのスクリプトで日程決めができたらいいなと思います。
最後まで読んでいただきありがとうございます。
補足
GASの始め方
【Gas開発環境にアクセスするまでの手順】
※ Gasを使用して開発するにはGoogleアカウントが必要です。
1. GoogleDriveにアクセス
2. Google Apps Scriptにアクセス
3. コードを書いて ▶実行
を押下して動かす
参考: