GASの時間トリガー設定 〜スプレッドシートのデータ正規化は俺に任せろ(探偵編)〜

またクライアントからだ。スプレッドシートに山積みのデータをぶち込んで「このデータを自動的に整理してくれ」っていう依頼。分かってるよ、手作業でなんかやってられないだろうさ。だからこそ、俺たちが必要なんだ。いやまてよ、これって本当に探偵に依頼する仕事なのか・・・?まあいいだろう。猫を探すのもデータを探すのも共通するコツってものがあるものさ。

さて、スプレッドシートでデータを正規化――つまり、同じフォーマットに揃えて整理するためには、Google Apps Script(GAS)の「時間トリガー」を仕込むのがベストだ。時間が来たら、俺たちのスクリプトが自動で動き出すってわけだ。簡単そうに聞こえるか? まぁ、実際はそうでもないが、ここではその手順を教えてやる。


ステップ1:GASエディタを開く

まずは、GASエディタにアクセスしなきゃ話が始まらない。スプレッドシートの拡張機能 > Apps Scriptから行ける。この操作くらいは簡単だろ?探偵稼業でも、まずは現場に向かうところから始まる。手順はこうだ:

  1. データが入ったスプレッドシートを開け。
  2. メニューから「拡張機能」をクリック。
  3. 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:時間トリガーを設定する

スクリプトを手動で実行してるようじゃ、俺たちの仕事は楽にならない。だから「時間トリガー」ってやつを仕込む。これで、指定した時間に自動でスクリプトが動き出すってわけだ。いちいち自分で押す必要なんてない。手順はこうだ:

  1. GASエディタで右側にある「時計アイコン」(トリガー設定)をクリックしろ。


  1. トリガーの設定」画面が開くから、右下にある「トリガーを追加」ボタンを押せ。

  1. 設定する内容はこうだ:
    • 関数を選択:実行する関数を選べばいい。この場合、normalizeData が適切だ。
    • イベントの種類:スプレッドシートでコンテナバインド型のGASを作成した場合、以下の3種類から選ぶことになる。今回は時間ベースで動かすから、「時間主導型」を選ぶ。
      • スプレッドシートから:スプレッドシートで発生するイベントをトリガーとして実行する。これを選択した場合、さらにイベントの種類として「起動時」「編集時」「変更時」「フォーム送信時」から選択する。
      • 時間主導型:特定の日時を指定して実行可能な他、最短で1分毎、最長で1ヶ月毎の実行タイミングを設定できる。
      • カレンダーから:カレンダーが更新されたタイミングで実行させることも可能だ。
    • 実行タイミング:ここで「毎日」とか「1時間おき」みたいに、好きな間隔で動かす設定にする。

  1. 設定が終わったら「保存」をクリックだ。

ステップ4:確認する

トリガーを設定しただけじゃ、安心しちゃいけない。何事もうまくいかないってのが世の常だ。スクリプトがちゃんと動いてるか確認する必要がある。失敗したらどうするか?もちろん、Logger.log()でログを見てくれ。これで何が起こってるのか分かる。

Logger.log('データ正規化が動いたぜ');

トリガー設定の注意事項

自動化なんて夢のような話だが、現実は制限だらけだ。GASのトリガーにもいくつか厄介な制限があるから、気を付けるんだ。

  • 実行回数の制限:Googleは俺たちのボスじゃない。1日に実行できる回数には限界がある。時間トリガーなら1時間に1回、1日に最大数十回までしか動かせない。無茶をするとトリガーが作動しなくなるぞ。

  • エラーとログ:自動化は簡単に聞こえるが、エラーは付き物だ。トリガーが動かなかった場合はエラーメッセージを確認し、定期的にログを見て問題がないかチェックしろ。

  • 認証が必要:スクリプトがGoogleのAPIにアクセスする際、認証が必要になる。トリガーが動くたびに認証を求められることがないよう、最初にちゃんと認証を済ませておくんだ。


まとめ

スプレッドシートのデータ正規化は、クライアントが面倒な作業から逃れたいときに頼む仕事だ。時間トリガーを設定しておけば、毎日自動でスクリプトが動いてデータが整理される。クライアントは、何もしなくても整ったデータを手に入れることができる。だが、トリガーを仕込むには注意が必要だ。制限やエラーに気を付けながら、少しでも手間を減らせるようにしてやれ。


次回は、もっと高度な自動化のトリックについて話してやる。だがな、手間が減った分、別の問題が発生するのが世の常だ。自動化の裏には、いつも予期せぬトラブルが潜んでるもんさ。

コメント

このブログの人気の投稿

桃太郎電鉄ワールド、初の大型アップデート。その名も『ムー大陸浮上!』

GASのさらに高度なテクニック:非同期処理、プロパティサービス、Webhookチェーン

GASでスクレイピング 〜天才ア○バ様の教え〜