「またか…」
画面に表示された砂時計マークを、私は何度見つめただろうか。Google Apps Script(GAS)で業務自動化ツールを開発した当初は、その便利さに感動したものだ。だが、データ量が増えるにつれて、スクリプトの実行速度は泥沼にはまり込んだかのように遅くなった。5分、10分と待たされるたびに、PCの前で腕を組み、深いため息をつく日々。「こんなはずじゃなかった…」心の声が、オフィスに響くキーボードの音に掻き消されていく。隣の席の同僚からの「これ、本当に速くなるんですか?」という冷たい視線が、私の胸を深く抉った。
私自身、かつてはGASの「setValue」を何の疑いもなくループの中で使っていた。1行ずつ、1セルずつデータを書き込む。一見、丁寧で確実な処理に見える。しかし、それがまさか、業務効率化の大きな「見えない壁」になっているとは、夢にも思わなかったのだ。データが100行、1000行と増えるたびに、スクリプトはまるで重い鎖につながれたかのように動きが鈍くなった。朝一番に実行しても、昼休みを過ぎても終わらない処理に、焦燥感と絶望感が募る。「このままでは、せっかく作ったツールが使われなくなる…」そんな恐怖が、私の心を蝕んでいった。
なぜ、たった1行の「setValue」が、ここまで処理を遅くするのか?その根源は、GASの裏側にあるGoogleのAPI(Application Programming Interface)の仕組みにある。想像してみてほしい。あなたは郵便配達員だ。そして、100枚のハガキを100軒の家に届けなければならない。もし、あなたが「1枚のハガキを届けるたびに、一度郵便局に戻って次のハガキを受け取る」というルールに縛られていたらどうだろう?100軒回るのに、100回も郵便局と家を往復しなければならない。これこそが「setValue」がループ内で繰り返される時に起きていることなのだ。1セル書き込むたびに、GASはGoogleのサーバーに「このセルにこの値を書き込んでください」とリクエストを送り、その応答を待つ。この「往復」が、ネットワークの遅延や認証処理のオーバーヘッドを含め、毎回発生しているのだ。データ量が増えれば増えるほど、この「往復」の回数も増え、結果として膨大な時間が消費される。まるで、見えない「渋滞」に巻き込まれているようなものだ。
そんな泥沼から私を救い出してくれたのが、「配列処理」という概念だった。ある日、たまたま読んだ技術ブログで、GASのパフォーマンス改善には「getValues」と「setValues」が必須だと知ったのだ。最初は「配列…?難しそうだな…」と尻込みした。だが、あの遅延の日々から抜け出したい一心で、藁にもすがる思いで試してみることにした。
その結果は、まさに「劇的」としか言いようがなかった。これまで5分かかっていた処理が、たった数秒で完了したのだ。あの時の衝撃と、心の底から湧き上がった解放感は、今でも鮮明に覚えている。まるで、重い足枷が外れ、急に空を飛べるようになったような感覚だった。「こんなに簡単なことで、こんなにも変わるのか…!」私のGASに対する認識は、この日を境に180度変わった。
配列処理とは、先ほどの郵便配達の例で言えば、こうだ。あなたは郵便配達員。100枚のハガキを100軒の家に届ける。今度は、全てのハガキを「一度に郵便局で受け取り」、それを「大型トラックに積み込み」、100軒の家を「一気に回って手渡し」していく。そして、最後に「まとめて郵便局に戻る」。これなら、郵便局との往復はたったの2回で済む。これが、GASにおける「getValues」でスプレッドシートの全データを一度に配列として取得し、JavaScriptの配列内で必要な処理を行い、「setValues」でその配列を一括でスプレッドシートに書き戻す、という一連の流れなのだ。
この「一度に大量のデータを受け渡しする」という考え方が、処理速度を劇的に向上させる。体感で10倍、いや、データ量によっては100倍以上の速度差が生まれることもある。もはや、魔法ではない。これは、GASのパフォーマンスチューニングにおける「常識」なのだ。あなたのスクリプトは、まだ「手渡し」で消耗しているだろうか?
配列処理を導入することで、あなたは遅延に悩まされるストレスから完全に解放される。スクリプトはまるでF1カーのように軽快に走り出し、あなたの仕事は劇的にスマートになるだろう。ユーザーからの不満は感謝の声に変わり、あなたの開発者としての評価も飛躍的に向上するはずだ。あの時の私のように、もう二度と「こんなはずじゃなかった…」と後悔することはない。今こそ、その「呪縛」から解き放たれる時だ。
GASの真の力を引き出し、あなたの業務を次のステージへと押し上げる。配列処理は、そのための最も強力な武器となるだろう。
