TDIL

元大工が、GAS から AI エージェントまで来た道のり

大工をしていた頃から、新しい道具を見つけると真っ先に試す性分だった。それでもプログラミングだけは「理系の頭のいい人がやるもの」だと思い込み、長く手を出さなかった。

思い込みが崩れたのは、GAS で数行のコードを動かしたときである。A1 のセルに今日の日付が入るだけのものだったが、そこから毎週のトリガー、Gemini に書かせた週報のメール、AI エージェントへと進んだ。要ったのはコードを書く力ではなく、何をしてほしいのかを言葉にする力だった。この記事では、その順番と、各段で何に引っかかったかを書く。

道具には手が出るのに、コードには出なかった

建築学科を出て、しばらく大工として現場で働いた。大学では、同級生がまだ使っていないソフトを先に覚えて課題に持ち込み、自分だけの裏テーマを決めて取り組むのが好きだった。大工になってからは、その興味が手道具や電動工具、現場をラクにする小物に向いた。形は変わっても、新しいものを見つけたら触ってみるという根っこは同じである。

ところがプログラミングには、その性分が働かなかった。興味はあったが、どこから入ればいいのかが見えなかった。いま振り返ると、壁は二つあった。一つは、何かをインストールして設定を整える段階で、一行も書かないうちに分からないエラーが出るという入口の重さ。もう一つは、教科書のサンプルを写しても、それが自分の毎日のどこにつながるのか実感が湧かないことである。

最初の数行は GAS で書いた

最初の一歩に選んだのは GAS(Google Apps Script)だった。理由は、上の二つの壁がどちらも低かったからである。Google のアカウントがあればブラウザだけで書けて、インストールも設定も要らない。書いたコードは、毎日開いているスプレッドシートや Gmail、カレンダーの中で動く。直したい面倒が、書く場所のすぐ隣にある。しかも無料で、その日から触れる。

最初に動かしたのは、実行するとアクティブなシートの A1 に今日の日付を書き込むだけのものだった。

function 今日の日付を書く() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const today = new Date();
  sheet.getRange("A1").setValue(Utilities.formatDate(today, "Asia/Tokyo", "yyyy/MM/dd"));
}

関数の名前を日本語にしたのはわざとで、GAS は日本語の名前をそのまま使える。後から読み返したとき、何をする処理かがすぐ分かる。

手順そのものより、引っかかったのは初回の実行で出る確認の画面だった。「承認が必要です」に続いて、赤い三角の「このアプリは Google で確認されていません」が出る。自分で作ったばかりの、Google に登録していないスクリプトには必ず出る画面なのだが、知らなければここで手が止まる。許可する中身が「スプレッドシートの参照と編集」だけであることを確かめて先へ進むと、エディタの下に「実行完了」と出て、シートの A1 に日付が入った。二回目からはこの画面は出ない。

書いたのは数行でも、自分の書いたものが自分の意思で動いたという手ごたえは大きかった。コードが専門家だけのものではなくなったのは、このときである。

ボタンを押さなくても動くようにした

ただ、この時点ではまだ、エディタを開いて実行ボタンを押す人間が要った。毎週決まった曜日に勝手にやっておいてほしい作業があるなら、それでは足りない。先週の記録の集計や、毎週同じ形のメモづくりのように、難しくはないが繰り返すのが面倒な作業ほど、気づいたときには「今週もやっていなかった」となる。

GAS には、そのための「トリガー」がある。このタイミングになったらこの関数を動かす、という予約である。エディタ左の目覚まし時計のアイコンから「トリガーを追加」を開き、実行する関数に「今日の日付を書く」、イベントのソースに「時間主導型」、その下で「週ベースのタイマー」と曜日と時刻を選んで保存する。一覧に一行が増えれば、あとは指定した時刻に GAS が勝手に動かす。

ここで、仕組みとしてはひと通り分かった。実行ボタンで一度動かすことも、トリガーで毎週動かすことも、手順は驚くほど単純だった。それでも、動かしたいコードそのものをどう書けばいいのかという問いは残った。プログラミングをきちんと学んだことのない自分に、毎週使うコードをゼロから書けるとは思えなかった。

コードそのものは Gemini に書かせた

残った問いへの答えは、一人で書かないことだった。やりたいことを日本語で Gemini に伝え、コードを返してもらう。

最初は「A1 のセルに今日の日付を書きたい」をそのまま頼んだ。専門用語は使っていない。返ってきたのは、そのまま貼って使えるコードだった。

一度できると欲が出る。次は、別のシートに毎日の作業を記録しているとして、先週一週間分をまとめ、毎週月曜の朝に自分あてにメールで送るコードを頼んだ。これも日本語だけである。シートから読み、先週の分だけを選び、文章に整え、メールで送る。手でやれば何工程もある処理が、ひとまとまりのコードで返ってきた。

function sendWeeklyLog() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName("作業ログ");
  if (!sheet) {
    console.error("「作業ログ」という名前のシートが見つかりません。");
    return;
  }
  const today = new Date();
  const lastMonday = new Date(today.getFullYear(), today.getMonth(), today.getDate() - 7);
  const lastSunday = new Date(today.getFullYear(), today.getMonth(), today.getDate() - 1);
  lastMonday.setHours(0, 0, 0, 0);
  lastSunday.setHours(23, 59, 59, 999);
  const lastRow = sheet.getLastRow();
  if (lastRow < 2) {
    return;
  }
  const data = sheet.getRange(2, 1, lastRow - 1, 2).getValues();
  let emailBody = "先週の作業ログをまとめました。\n\n";
  let hasData = false;
  for (let i = 0; i < data.length; i++) {
    const rowDate = new Date(data[i][0]);
    const content = data[i][1];
    if (rowDate >= lastMonday && rowDate <= lastSunday) {
      const formattedDate = Utilities.formatDate(rowDate, "Asia/Tokyo", "yyyy/MM/dd");
      emailBody += `【${formattedDate}】\n${content}\n\n`;
      hasData = true;
    }
  }
  if (!hasData) {
    emailBody += "先週の記録はありませんでした。";
  }
  const myEmail = Session.getActiveUser().getEmail();
  MailApp.sendEmail(myEmail, "【週報】先週の作業ログまとめ", emailBody);
}

貼って動かすと、自分あてに週報が届いた。この間、自分では一行も書いていない。エラーが出たときも、赤い文字をそのまま Gemini に貼れば、どこをどう直すかを一緒に考えてくれた。

ここで分かったのは、入口に立つのに要ったのがコードをすらすら書く力ではなかったことである。何を、どうしてほしいのかを自分の言葉ではっきりさせられれば、あとは一人で抱えなくていい。

チャットで足りていたのに、エージェントに移った

正直に言えば、この時点でかなり満足していた。Gemini や ChatGPT のような AI チャットは、いまは質問に答えるだけの相手ではない。Gemini の Gem や Canvas、ChatGPT の GPTs やプロジェクトのように、役割や決まりごと、参考にするファイルを渡しておけば、同じ調子で繰り返し手伝ってくれる。週報のコードも、その延長で書いてもらったものである。

それでも、いつからか AI エージェントという言葉に惹かれるようになった。Claude Code、Codex、Antigravity といった道具である。違いを一言で言えば、チャットは相談すると答えやコードを返してくれる相手で、エージェントは目的を渡すと、そこから先をひと続きで引き受けてくれる相手だった。何をしたいかの壁打ちから始まり、実装し、それを動かす環境の用意まで進める。

GAS でやっていたのは、スプレッドシート一枚の中の決まった作業を自動にすることだった。エージェントでやりたかったのは、その自動化を一枚の表の外へ、いくつもの道具をまたいで広げることである。作業を一つずつお願いしてコードを貼るのではなく、仕事そのものを任せる。その景色に惹かれていた。

どちらが優れているという話ではない。とっつきやすさはチャットが断然で、会話の延長でその日から役に立つ。エージェントは最初の一歩が重いが、使えるようになると任せられる範囲が大きく広がる。自分は後者に向かった、というだけである。

振り返って

順番を踏んだことには意味があった。いきなりエージェントの話をされても遠く感じたはずのものが、GAS で数行を動かし、チャットにコードを書かせた後だと「あの延長にあるのか」と分かる。最初は「教えて」と尋ねるだけの相手だった AI が、コードを書く相棒になり、やがて仕事を任せる相手になった。その距離の縮まり方は、地続きだった。

その延長で、仕事や日常で使う道具をいくつも作り、自分の結婚式で使うゲスト管理アプリまで作った。ただ、AI がいなければ今でも作れない。それは隠さず書いておく。変わったのは、自分にコードが書けるようになったことではなく、作る側に回れるようになったことである。

この記事は、note に 5 回に分けて書いた記事を、一本の経緯として書き直したものである。手順を画面つきで追いたい場合は、元の記事のほうが細かい。

記事の一覧へ