Pythonを業務効率化に使う——GAS・スプレッドシート・SQLとの役割分担
業務の自動化は、全部をPythonで書かなくても進められます。私がスプレッドシート・GAS・SQL・Pythonをどう使い分けているか、道具を選ぶ基準と、置き換えるタイミングの見極め方を書きます。
業務効率化で最初に決めるのは言語ではなく、「データがどこにあって、誰が触るか」 です。私は、人が見て直すものはスプレッドシート、Googleのサービスどうしをつなぐ定期処理はGAS、件数が増えて集計が重くなったらSQL、手元で大量のファイルや複雑な変換を扱うときはPython、という分け方をしています。1つの道具で全部やろうとしないほうが、結果的に長く動きます。
4つの道具を「置き場所」で分ける
私が頭の中で使っている整理はこの表です。
| 道具 | 向いている仕事 | 主に触る人 |
|---|---|---|
| スプレッドシート | 入力・確認・目視での修正、小さな集計 | 現場の担当者 |
| GAS(Google Apps Script) | フォーム回答の転記、定時のメール送信、Googleサービス間の連携 | 作った人+少し読める担当者 |
| SQL | 件数の多いデータの抽出・集計・結合 | データを持つ側 |
| Python | ファイルの一括変換、外部APIからの取得、込み入った整形 | 作った人 |
ポイントは「主に触る人」の列です。クライアントの担当者が毎日開くのはスプレッドシートなので、そこを入口と出口にしておくと、自動化の中身が変わっても使う側の手順は変わりません。Pythonのスクリプトがどれだけ便利でも、担当者のパソコンで動かせなければ、私が不在の日に止まります。
GASで足りる範囲と、その上限
Googleの中で完結する定期処理なら、私はまずGASを選びます。サーバーを用意しなくてよく、トリガーで時刻実行もできるからです。
ただし上限があります。公式の割り当てのページでは、1回の実行時間は6分まで、トリガーによる実行の合計は無料の個人アカウントで1日90分、Google Workspaceのアカウントで1日6時間とされています(値は改定されうるので、使う前に確認しています)。
実務でこの上限に当たるのは、たいてい次の場面です。
- 1行ずつセルを読み書きしていて、行数が増えたら6分を超えた
- 外部APIを何百回も呼ぶ処理を毎時動かしている
前者は、範囲をまとめて読み、配列で処理して、まとめて書き戻すだけでかなり縮みます。それでも収まらないなら、道具を替える合図だと考えています。
スプレッドシートを「データベース」にしない
スプレッドシートにも上限があります。Googleのヘルプでは、Googleスプレッドシートは最大2,000万セルまでとされていて、上限の前に動作が重くなるのが実感です。私の経験では、上限よりも「どの行が正しいのか分からなくなる」問題が先に来ます。複数人が同じシートに追記し、関数とコピペが混ざると、集計結果を誰も説明できなくなるのです。
そうなったら、データの置き場所をSQLで扱えるデータベースに移し、スプレッドシートは「抽出した結果を見る場所」に戻します。いきなりサーバーを立てなくても、Pythonには標準ライブラリに sqlite3 があり、別のサーバープロセスなしでファイル1つのデータベースを使えます。私は、CSVをSQLiteに取り込んでSQLで集計を確かめ、結果だけをシートに書き出す、という段階を挟むことが多いです。
Pythonに任せる仕事の見極め
Pythonを出すのは、次のどれかに当てはまるときです。
- 扱うのがGoogleの外にあるファイル(CSV、Excel、画像、PDFなど)で、数が多い
- 変換の手順が長く、途中経過を確かめながら直したい
- GASの実行時間の上限に収まらない
反対に、「毎朝シートの内容をメールで送る」程度ならGASのほうが運用が軽いと感じています。Pythonで書くと、どこで動かすか、誰が止まったことに気づくかを別に決める必要があるからです。ディレクションの目線では、この「動かす場所と見張る人」を決めるまでが自動化の設計だと思っています。
明日から試せる一手
いま手作業でやっている定型業務を1つ選び、「データはどこにあるか」「誰が触るか」「毎回何件か」の3つを紙に書き出してください。件数が少なくGoogleの中で完結するならGAS、件数が多く集計が中心ならSQL、ファイルの変換が中心ならPython。この3行を書くだけで、道具選びで迷う時間はかなり減るはずです。