こんにちは、鵜野(うの)です。
前回に続いて、実務で考えたことを書いていきます。
(記事を書くのに慣れていきたい...!)
今回のテーマは、チームで共通のテンプレートとして使われているスプレッドシートに、GASで機能を追加した経験です。
案件の進行を管理するシートに、過去の月の行を自動で折りたたむ機能と、チェックを入れると右隣に日付が入る機能を足しました。
機能そのものは小さなものです。
ただ、すでに多くの人が使っているファイルに手を入れる場合は、何を作るか以上に、どう足すかを考える必要がありました。
この記事では、その過程で大切にした3つの視点を紹介します。
なお、業務上の非公開情報を含むため、個別案件の画面やコード、詳細な仕様は載せず、考え方を一般化して書いています。
1. 共通で使っているものには、手を入れずに横から足す
今回のスプレッドシートには、組織全体で共通のスクリプトがすでに入っていました。
多くの人が同じテンプレートをコピーして使っているため、そこに書き足すと、自分の変更が全員の環境に影響します。
そこで、共通のスクリプトには一切触れず、別のファイルに別名の関数を作って機能を追加しました。
起動時と編集時の処理も、共通側の仕組みを使わずに、独自のトリガーとして登録しています。
こうしておけば、共通側が更新されても私の追加機能は壊れませんし、不具合が出たときに原因がどちらにあるのかも切り分けやすくなります。
ただし、同じタイミングで動く処理が2つあると、実行の順番によって結果が変わることがあります。
共通側のグループ化と競合した場合に備えて、こちらの処理を少し遅らせる調整もできるようにしてあります。
作る側は、つい既存のコードに足したくなります。
でも、自分の担当範囲の外にあるものは、直す前にまず「触らずに済む方法はないか」を探すようにしています。
共通のものを守ることも、設計の仕事だと考えています。
2. 導入する人の負担を、ほとんどゼロにする
トリガーの登録は、GASに慣れていない人にとっては難しい作業です。
エディタを開いて、関数を選んで、権限を承認して、という手順を毎回説明するのは現実的ではありません。
そこで、シート上に「初期設定」というボタンを置き、クリックするだけで必要なトリガーが登録されるようにしました。
二重登録を防ぐために、同じ名前のトリガーが残っていれば先に消してから作り直します。
登録が終わると、その場で一度グループ化も実行し、画面に完了のメッセージが出ます。
動作確認を兼ねているので、押した人はその場で結果を見られます。
ひとつ気をつけたのは、トリガーは実行した人の権限で動くという点です。
誰かが代わりにボタンを押すと、その人の権限が変わったときに仕組みが止まってしまいます。
そのため、手順書には「スプレッドシートの持ち主本人が押す」と明記しました。
配布のしかたも、スプレッドシートごとコピーする方法と、管理シートのタブとスクリプトのファイルだけを移す方法の2通りを用意し、相手の環境に合わせて選べるようにしています。
仕組みが動くことと、導入した人が安心して使い続けられることは、別の話です。
導入の手順は短く、間違えやすい箇所は先に書いておく。
手順書の最後には確認項目として、先月以前の行が折りたたまれていること、チェックを入れると日付が入り外すと消えることを載せ、導入した本人が正しく動いているかを判断できるようにしました。
作った人がいなくても再現できる形にして、はじめて機能として渡せると思っています。
3. 使う人の操作を、想定より広く受け止める
チェックを入れると日付が入る機能では、最初から「一つのセルを編集した場合」だけを前提にしないようにしました。
実際のスプレッドシートでは、複数のチェックをまとめて入れたり、別の場所からコピーして貼り付けたりします。
編集された値を見て判定すると、こうした操作を取りこぼします。
そこで、編集された範囲に含まれるすべてのセルについて、実際のチェックの状態を確認してから日付を入れるか消すかを決める形にしました。
一括で操作しても、一つずつ操作しても、結果が同じになります。
月ごとに行をまとめる処理でも、同じことを考えました。
見出しが日付の形式で入っているセルは、画面上は「2026年6月」と見えていても、内部では別の値として扱われます。
そのため、見えている文字列をそのまま読んで判定するようにしました。
折りたたむのは先月以前だけで、今月以降の行は常に開いたままにしています。いま見るべき行を隠さないためです。
実行のたびにグループをいったん解除してから作り直すので、月が変われば自動で先月分が折りたたまれます。
さらに、新しい案件のシートが増えたときに、管理シートへ自動で追加する処理も加えました。
すでに載っているものは追加しない、空いている行があればそこに入れる、なければ行を足して直上の書式を引き継ぐ、といった細かい決まりを入れています。
テンプレートや説明用のシートなど、案件ではないものは対象から外す一覧を持たせ、間違って管理シートに載らないようにしています。
今月の見出しが見つからないときは、黙って失敗するのではなく、画面にその旨を表示します。
こうした細かい部分は、使う人にはほとんど意識されません。
けれど、何も起きないこと、勝手に増えたり消えたりしないことが、安心して使ってもらうための条件だと考えています。
小さな機能ほど、前提を丁寧に
どれも一つひとつは小さな機能でした。
それでも、共通の仕組みとの関係、導入する人の負担、使う人の自然な操作を考えると、決めることは意外と多くあります。
私が目指しているのは、作って終わりではなく、現場の人が気づかないうちに助けられている状態です。
制作ディレクションで現場の流れに関わってきた経験は、どこで人が迷い、どこで操作が想定から外れるのかを考えるときにも活きています。
「共通のテンプレートに機能を足したいが、既存の仕組みを壊すのが怖い」。
そんな場面でも、整理から実装、導入後の改善まで一緒に考えていくことに、やりがいを感じています。