アサイン管理を、考えなくていい仕事にする。Google Apps Script × Vertex AIの実装例
はじめに
クーシーでは、Webディレクターが日々アサイン管理を行っています。
「誰がどの案件を担当していて、明日の予定はどうなっているか」
「この工数で本当に回るのか」
「無理が出そうなら、早めに声をかけられるか」
ディレクターにとって、アサイン管理と工数確認は、チームを守るために欠かせない仕事です。一方で、その確認や連絡に、思った以上の時間と集中力が使われていました。その様子を見ていた開発チーム内で、
「この確認作業、仕組みで支えられないだろうか」
「負荷に気づくタイミングを、もっと早くできないだろうか」
そんな会話が生まれました。
そこで今回は、Google Apps Scriptの最新アップデートで利用できるVertex AIを使い、ディレクターが行っているアサイン管理と工数判断の一部を自動化できないかを試してみました。
※本記事は2026年1月時点の情報をもとにしています。
今回つくった仕組みの全体像
今回のデモ用ワークフローは、ディレクターが日々行っているアサイン調整を分解し、順番に仕組みへ置き換える形で設計しました。
ディレクターは、日々次の流れでアサインを確認しています。
- メンバーそれぞれの予定を見る
- その日の工数を把握する
- 無理が出そうな人がいないかを判断する
- 必要に応じて関係者に連絡する
今回つくった仕組みは、この流れをそのまま自動で回すためのものです。ただし、自動でアサインを決めるわけではありません。ディレクターの判断に必要な「確認」と「連絡」を裏側で支える仕組みです。
具体的には、毎日次の処理を行います。
- チーム全員の翌日の予定を集める
- 工数を整理し、負荷の兆しを見つける
- 状況に合わせた連絡文を作る
- Chatworkに送信する
今回の実装に使用したツール
今回の実装では、ディレクターが日々行っているアサイン管理の流れを、そのまま仕組みに落とし込むことを意識し、次のツールを組み合わせました。
Google Apps Script
Google Apps Scriptは、Googleカレンダーやスプレッドシートなど、複数のGoogleサービスを横断して処理を自動化できる実行環境です。
ディレクターが毎日行っている「予定を確認する」「工数を整理する」といった作業を、そのままコードとして置き換えられる点が特徴です。
Vertex AI(Gemini)
Vertex AIは、数値やタスク情報をもとに、状況に応じた文章を生成するために利用します。今回の実装では、工数の合計値そのものではなく、それを「どう伝えるか」という部分を担っています。
Google Apps Scriptの自動で動かす力と、Vertex AIの伝え方を整える力を組み合わせることで、単なる通知ではなく、業務状況に応じた連絡までを自動化します。
実際の実装の流れ
ここからは、この仕組みをどのように実装したのかを、3つのステップで説明します。
- アサイン管理ツールがチーム全体の予定を扱える状態にする
- Google Apps Scriptで自動化処理を書く
- アサイン管理ツールを毎日自動で動かす(トリガー設定)
手順① アサイン管理ツールがチーム全体の予定を扱える状態にする
最初に行うのは、アサイン管理ツールがチーム全体の予定に安全にアクセスできる状態をつくることです。
現場でよく出てくる質問があります。
「一つのスクリプトで、全員のカレンダーを読み取ることはできないのか」
結論から言うと、通常のユーザー権限では、自分自身のカレンダーしか読み取れません。そこで使用するのが、Google Cloudのサービスアカウントです。人ではなく、システムのために用意された専用のアカウントを使うことで、チーム全体のデータを安定して扱えるようにします。
マスターキーとなるサービスアカウントの設定手順
サービスアカウントの設定手順は以下の通りです。
1. Google Cloudコンソールでプロジェクトを新規作成
2. Google Calendar APIを有効化
3. 作成したプロジェクト内でサービスアカウントを作成(これはいわば「ロボットユーザー」のようなものです)
4. サービスアカウントのキーをJSON形式で発行(サービスアカウントのキーをJSONファイルとしてダウンロードします)
5. Apps Scriptの「スクリプト プロパティ」にキー情報を保存
Apps Scriptエディタの「プロジェクトの設定」から「スクリプト プロパティ」へ進み、SERVICE_ACCOUNT_KEY などの名前でプロパティを追加し、ダウンロードしたJSONの中身を保存します。
手順②:Google Apps Scriptで自動化処理を書く
次に、ディレクターが行うアサイン管理の流れを、Google Apps Scriptで処理として書いていきます。
1. メイン関数
これはいわば「スタート」ボタンです。チームメンバーのリストを取得し、一人ずつ順番に翌日の予定を確認していきます。ディレクターが毎日行っている「全員の予定を順に見る」作業を、そのままコードに置き換えています。
JavaScript
function main() {
// 全従業員のリストとKintoneのアサインデータベースを取得
var teams = getTeam();
var kintoneData = getKintoneAssigns();
// チーム内の各メンバーに対してループ処理を実行
for (var i = 0; i < teams.length; i++) {
var email = teams[i].email;
// 特定の個人の処理を開始
processEmployeeSchedule(email, kintoneData, teams);
}
}
2. 認証とエラー処理
次に、認証処理とエラー対応を行います。この関数は「交通整理係」のような役割を果たします。メールアドレスが有効か確認し、Google認証を行い、カレンダーデータの取得を試みます。一部のメンバーで権限エラーや取得失敗が起きても、全体の処理が止まらないようにするための設計です。問題が発生した場合は、ログとして記録します。
JavaScript
// 1. ユーザーのカレンダーに対して認証を行う
var service = getCalendarService(targetEmail);
if (service.hasAccess()) {
// 2. アクセスが許可された場合、API経由で明日の予定を取得
var eventsData = fetchEvents(service.getAccessToken(), targetEmail);
// 3. 結果をChatworkに送信
sendToChatwork(eventsData, kintoneData, teams);
}
3. 予定の取得と工数の整理
ここは「計算」を担当するセクションです。翌日のカレンダー予定を取得し、その日の稼働状況を数値として整理します。特定の24時間(=「明日」)のカレンダーを確認します。イベント名に含まれる「1.5h」「2h」といった工数表記を正規表現で拾い、合計工数を算出します。
ディレクターが感覚的に行っていた「明日はどれくらい埋まっていそうか」という判断材料を、機械が扱える形にするパートです。
JavaScript
// 「明日」を定義
var tomorrowStart = new Date(now);
tomorrowStart.setDate(now.getDate() + 1);
// タイトル内の "0.5h" や "2h" のようなパターンを探すための定義
var durationRegex = /(\d+(?:\.\d+)?)h/;
content.items.forEach((event) => {
// タイトルから時間を抽出
let match = event.summary.match(durationRegex);
let hours = match ? parseFloat(match[1]) : 0;
// 有効な業務タスクであればリストに追加
processedEvents.push({
summary: event.summary,
hr: hours
});
});
// 合計時間を算出
const totalHours = processedEvents.reduce((sum, event) => sum + event.hr, 0);
4. AIコミュニケーター
ここが今回の実装の中核です。
「合計:8時間」という生の数字での合計工数を出すだけであれば、条件分岐でも実現できます。しかし実務では、相手や状況に応じて「どう伝えるか」を毎回考えています。生の数値を送るのではなく、状況に応じた伝え方を整えるために、Vertex AIを使って連絡文を生成します。
業務負荷が高そうな場合には、工数やタスクの情報をプロンプトとして渡し、マネージャー宛ての調整依頼文を作成させます。自動化しているのは判断そのものではなく、文脈に合った伝え方の部分です。
プロンプト戦略: AIに対して特定の「ペルソナ」とデータを以下のように与えます。
| 「あなたは丁寧なアシスタントです。タスク一覧はこれです。合計で8時間です。残業を減らすために優先順位を見直すよう、マネージャーに依頼してください」 |
JavaScript
function generateManagerNote(events, totalHours) {
const summaryLines = events
.map ((evt) => - ${evt.summary} (${evt.hr}#, ${evt.date}) ')
•join ("\n") ;
const prompt = [
"あなたは丁寧なアシスタントです。残業を減らすために優先順位を見直すよう、マネージャーに依頼してください",
合計作業時間:${totalHours}時間,
"作業一覧:",
summaryLines || "- 該当作業なし",
"3文以内で丁寧にフォロー協力を依頼してください。",
]. join("\n") ;
const note = callVertexAI(prompt) ;
return typeof note === "string" ? note.trim() : "";
}
5. Chatworkへ送信する
生成された文章を、Chatwork API を通じて指定したルームへ送信します。アサイン調整が必要そうなタイミングで、連絡が自動で届くようになります。
JavaScript
let url = `https://api.chatwork.com/v2/rooms/${roomId}/messages`;
UrlFetchApp.fetch(url, options); // メッセージがチャットに届きます!
最終的な結果は以下のようになります。
手順③:アサイン管理ツールを毎日自動で動かす(トリガー設定)
最後に、ツールを毎日自動で実行するため、時間主導型のトリガーを設定します。担当者が翌日の計画を立てやすいように、毎日午後3時に自動的に実行されるように設定します。
1. 左側のサイドバーにある 「目覚まし時計のアイコン(トリガー)」 をクリック
2. 画面右下の 「+ トリガーを追加」 をクリック
3. 設定画面で、以下のように構成:
| 項目 | 内容 |
| 実行する関数 | main |
| イベントのソース | 時間主導型 |
| 時間ベースのトリガーのタイプ | 日付ベースのタイマー |
| 時刻 | 午後3時〜4時 |
4. 「保存」 をクリックします。
これにより、毎日午後3時に自動で実行され、翌日の計画を立てる前にアサイン状況へ気づけるようになります。
従来のやり方と比べて何が変わったか
【従来のアサイン管理】
- カレンダーを一人ずつ目視で確認
- 工数を手作業で計算
- 関係者に個別で連絡
- 手動でスケジュールを調整
確認と調整に時間がかかり、見落としが発生するリスクもありました。
【自動化後のアサイン管理】
- 予定取得と工数整理を自動化
- 調整が必要な場合の連絡文を自動生成
- 人は最終判断と調整に集中
結果として、アサイン管理にかかる作業負担を大きく削減できています。
まとめ
アサイン管理(リソース管理)は、単に予定を整理するだけの業務ではありません。チームの負担の偏りにいち早く気づき、健全にプロジェクト進行を行うために必要な業務です。
今回の取り組みでは、Google Apps Script(GAS)と生成AI(Vertex AI)を連携させ、ディレクターが日々行っていたリソースの確認や連絡業務の一部を仕組み化しました。「最終的な判断」は人が担い、「考えなくていい作業」のみをシステムに任せる。この役割分担をした結果、チームの状態をより迅速に察知できる環境を整えることができました。
今回ご紹介した内容は、まだ初期開発段階のためチューニングが必要ですが、一部のメンバーにこのツールを共有したところ、確認作業が減ることに加え、数値も正確なので見間違いや調整漏れのリスクが減ると喜んでいました。
クーシーでは、ツール導入の際に、導入だけで終わりにはせず、まず業務フローを徹底的に分解し、負荷の集中点や判断のボトルネックを整理することからヒアリングを行っています。
- 「今のフローをどう変えればいいか分からない」
- 「まずは課題を整理したい」
こういった、検討初期の段階からのご相談も大歓迎です。貴社のチームが本来の力を発揮できるよう、最適な形を一緒に探っていければ幸いです。ぜひお気軽にご相談ください。
この記事を書いた人
クーシーブログ編集部
1999年に設立したweb制作会社。「ラクスル」「SUUMO」「スタディサプリ」など様々なサービスの立ち上げを支援。10,000ページ以上の大規模サイトの制作・運用や、年間約600件以上のプロジェクトに従事。クーシーブログ編集部では、数々のプロジェクトを成功に導いたメンバーが、Web制作・Webサービスに関するノウハウやハウツーを発信中。
お問い合わせはこちらから
Web制作デザイン、丸ごとお任せ
お問い合わせする
テキスト:アイヴァン デザイン:ピョータント
COOSYの
制作実績
UIUXと美しさを両立させた、クーシーが誇る成功事例一覧。
課題解決のアイデア満載です。
