GASの時間トリガー設定 〜スプレッドシートのデータ正規化は俺に任せろ(探偵編)〜
またクライアントからだ。スプレッドシートに山積みのデータをぶち込んで「このデータを自動的に整理してくれ」っていう依頼。分かってるよ、手作業でなんかやってられないだろうさ。だからこそ、俺たちが必要なんだ。いやまてよ、これって本当に探偵に依頼する仕事なのか・・・?まあいいだろう。猫を探すのもデータを探すのも共通するコツってものがあるものさ。
さて、スプレッドシートでデータを正規化――つまり、同じフォーマットに揃えて整理するためには、Google Apps Script(GAS)の「時間トリガー」を仕込むのがベストだ。時間が来たら、俺たちのスクリプトが自動で動き出すってわけだ。簡単そうに聞こえるか? まぁ、実際はそうでもないが、ここではその手順を教えてやる。
ステップ1:GASエディタを開く
まずは、GASエディタにアクセスしなきゃ話が始まらない。スプレッドシートの拡張機能 > Apps Script
から行ける。この操作くらいは簡単だろ?探偵稼業でも、まずは現場に向かうところから始まる。手順はこうだ:
- データが入ったスプレッドシートを開け。
- メニューから「拡張機能」をクリック。
- 「Apps Script」を選択。
ステップ2:スクリプトを書く
さて、クライアントのスプレッドシートに放り込まれたデータは、まるで乱雑に積み上げられた書類の山だ。俺たちがやるのは、それを自動で整理するスクリプトを書いてやることだ。今回のケースでは、重複するデータを消して、空白を埋めて、何とかクライアントが使える形に整える。
たとえば、こんな感じのスクリプトだ。
function normalizeData() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const data = sheet.getDataRange().getValues();
// 重複を取り除いて、データを整形
const normalizedData = [];
const uniqueCheck = new Set();
for (let i = 1; i < data.length; i++) {
const row = data[i];
const key = row.join('-'); // 行データを一意に識別するためのキーを作る
if (!uniqueCheck.has(key)) {
uniqueCheck.add(key);
normalizedData.push(row.map(item => item || '不明')); // 空白なら「不明」に置き換える
}
}
// 正規化されたデータを新しいシートに書き出す
const newSheet = SpreadsheetApp.getActiveSpreadsheet().insertSheet('NormalizedData');
newSheet.getRange(1, 1, normalizedData.length, normalizedData[0].length).setValues(normalizedData);
}
このスクリプトは、スプレッドシートからデータを取り出し、重複をチェックしながら空白を「不明」に置き換えていく。そして、整理されたデータを新しいシートに書き出す。データの正規化ってのは、雑用みたいなもんだが、これができればクライアントは喜ぶだろう。
ステップ3:時間トリガーを設定する
スクリプトを手動で実行してるようじゃ、俺たちの仕事は楽にならない。だから「時間トリガー」ってやつを仕込む。これで、指定した時間に自動でスクリプトが動き出すってわけだ。いちいち自分で押す必要なんてない。手順はこうだ:
- 「トリガーの設定」画面が開くから、右下にある「トリガーを追加」ボタンを押せ。
-
設定する内容はこうだ:
-
関数を選択:実行する関数を選べばいい。この場合、
normalizeData
が適切だ。 - イベントの種類:スプレッドシートでコンテナバインド型のGASを作成した場合、以下の3種類から選ぶことになる。今回は時間ベースで動かすから、「時間主導型」を選ぶ。
- スプレッドシートから:スプレッドシートで発生するイベントをトリガーとして実行する。これを選択した場合、さらにイベントの種類として「起動時」「編集時」「変更時」「フォーム送信時」から選択する。
- 時間主導型:特定の日時を指定して実行可能な他、最短で1分毎、最長で1ヶ月毎の実行タイミングを設定できる。
- カレンダーから:カレンダーが更新されたタイミングで実行させることも可能だ。
- 実行タイミング:ここで「毎日」とか「1時間おき」みたいに、好きな間隔で動かす設定にする。
-
関数を選択:実行する関数を選べばいい。この場合、
- 設定が終わったら「保存」をクリックだ。
ステップ4:確認する
トリガーを設定しただけじゃ、安心しちゃいけない。何事もうまくいかないってのが世の常だ。スクリプトがちゃんと動いてるか確認する必要がある。失敗したらどうするか?もちろん、Logger.log()
でログを見てくれ。これで何が起こってるのか分かる。
Logger.log('データ正規化が動いたぜ');
トリガー設定の注意事項
自動化なんて夢のような話だが、現実は制限だらけだ。GASのトリガーにもいくつか厄介な制限があるから、気を付けるんだ。
-
実行回数の制限:Googleは俺たちのボスじゃない。1日に実行できる回数には限界がある。時間トリガーなら1時間に1回、1日に最大数十回までしか動かせない。無茶をするとトリガーが作動しなくなるぞ。
-
エラーとログ:自動化は簡単に聞こえるが、エラーは付き物だ。トリガーが動かなかった場合はエラーメッセージを確認し、定期的にログを見て問題がないかチェックしろ。
-
認証が必要:スクリプトがGoogleのAPIにアクセスする際、認証が必要になる。トリガーが動くたびに認証を求められることがないよう、最初にちゃんと認証を済ませておくんだ。
まとめ
スプレッドシートのデータ正規化は、クライアントが面倒な作業から逃れたいときに頼む仕事だ。時間トリガーを設定しておけば、毎日自動でスクリプトが動いてデータが整理される。クライアントは、何もしなくても整ったデータを手に入れることができる。だが、トリガーを仕込むには注意が必要だ。制限やエラーに気を付けながら、少しでも手間を減らせるようにしてやれ。
次回は、もっと高度な自動化のトリックについて話してやる。だがな、手間が減った分、別の問題が発生するのが世の常だ。自動化の裏には、いつも予期せぬトラブルが潜んでるもんさ。
コメント
コメントを投稿