社員が書いた目標設定シートを、測れる書き方か・期限があるかの観点で校正し、書き直しの例を本人と上司に返す
社員が提出した目標設定シートを、達成の基準が測れる書き方か、期限があるか、本人の行動として書かれているかの観点で校正します。直したほうがよい目標には、数値を空欄にした書き直しの例を付けて本人と上司に返します。
- 生成AI
- ChatGPT/Claude/Gemini
- 連携・自動化
- Google Apps Script/Make/Power Automate/Python
- 対象業界
- IT・SaaS/その他/商社/製造/金融
- 対象部門
- 人事
- 対象業務
- 内容確認・チェック/書類作成
- 主な課題
- 人手が足りない/属人化している/確認ミスが多い
- AIで行う処理
- 校正
- 主な効果
- 品質標準化/工数削減/教育コスト削減
- 導入難易度
- ★★☆☆☆
- 実装レベル
- 半自動化
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 社員が上司と面談したうえで、Google フォームから目標設定シートを提出する
- 人事の担当者が回答のスプレッドシートを開き、提出された1枚を読む
- 目標ごとに、達成の基準が測れるか、期限が書かれているか、あいまいな語が無いかを見る
- ウェイトの合計が100%か、目標の数が3〜5個かを数える
- 直したほうがよい目標があれば、どう直すかのコメントを書く
- コメントを本人に送り、上司を CC に入れる
- 直したシートが出し直されたら、もう一度読む
- 【社員】 上司と面談したうえで、Google フォームから目標設定シートを提出する
- 自動提出をきっかけにスクリプトが動き、ウェイトの合計・目標の数・期限の日付を規則で確かめる
- 自動社員の職種と等級、制度の書き方の基準をそろえて、OpenAI API に目標の文を渡す
- 自動目標ごとに、観点ごとの判定と、直す理由と、数値を空欄にした書き直しの例が返る
- 自動スクリプトが、書き直しの例に数値が入っていないかを確かめる
- 自動本人あて(上司を CC)のメールの下書きを、人事の担当者の Gmail に作る
- 人人事の担当者が、点検の一覧と下書きを見て、送るか直すかを決める
- 人下書きを送る。直しの無いシートは「受け付けました」の下書きを送る
- 【社員・上司】 書き直しの例を参考に、面談で数値と期限を決めて出し直す
- 自動出し直されたシートにも同じ点検をかけ、前の回との違いを一覧に出す
各工程の詳しい説明を読む
- 社員が上司と面談したうえで、Google フォームから目標設定シートを提出する
- 人事の担当者が回答のスプレッドシートを開き、提出された1枚を読む
- 目標ごとに、達成の基準が測れるか、期限が書かれているか、あいまいな語が無いかを見る
- ウェイトの合計が100%か、目標の数が3〜5個かを数える
- 直したほうがよい目標があれば、どう直すかのコメントを書く
- コメントを本人に送り、上司を CC に入れる
- 直したシートが出し直されたら、もう一度読む
(a)差し戻しの基準が担当者ごとに違う。 人事の3名のうち、ある担当者は「〜に努める」を必ず差し戻し、別の担当者は通します。同じ書き方のシートが、担当者によって通ったり戻されたりします。 社員の側から見ると、何を直せば通るのかが分かりません。
(b)コメントを書くのに時間がかかる。 「測れる書き方にしてください」とだけ返すと、本人は何を直せばよいか分からず、同じような書き方で出し直してきます。書き直しの例まで付けると1件のコメントが長くなり、時間がかかります。
(c)中途入社の社員ほど直しが多い。 前の会社と目標の書き方の慣習が違うため、「売上に貢献する」「チームを支える」のような、期末に判定できない目標が多くなります。 入社した月は上司も忙しく、面談で書き方まで見られていないことがあります。
(d)あいまいなまま期末を迎える。 忙しい月には、コメントを書く手間を惜しんで通してしまうことがあります。期末の評価面談で「達成したのかどうか」を本人と上司が言い合うことになり、その時点では直しようがありません。
- 【社員】 上司と面談したうえで、Google フォームから目標設定シートを提出する
- 【自動】 提出をきっかけにスクリプトが動き、ウェイトの合計・目標の数・期限の日付を規則で確かめる
- 【自動】 社員の職種と等級、制度の書き方の基準をそろえて、OpenAI API に目標の文を渡す
- 【自動】 目標ごとに、観点ごとの判定と、直す理由と、数値を空欄にした書き直しの例が返る
- 【自動】 スクリプトが、書き直しの例に数値が入っていないかを確かめる
- 【自動】 本人あて(上司を CC)のメールの下書きを、人事の担当者の Gmail に作る
- 【人】 人事の担当者が、点検の一覧と下書きを見て、送るか直すかを決める
- 【人】 下書きを送る。直しの無いシートは「受け付けました」の下書きを送る
- 【社員・上司】 書き直しの例を参考に、面談で数値と期限を決めて出し直す
- 【自動】 出し直されたシートにも同じ点検をかけ、前の回との違いを一覧に出す
7番目が、この設計の分かれ目です。 メールを自動で送らないのは、目標設定シートが社員と上司のあいだで話し合った結果だからです。人事から機械的な指摘が直接届くと、上司の頭越しになります。人事の担当者が目を通し、言い回しを整えてから送ります。
5番目でスクリプトが数値を確かめるのは、指示だけでは数値が入ることがあるからです。 書き直しの例は「〔 〕件」のように空欄で返させますが、念のため、例の中に数字が入っていれば一覧で目立たせます。
02今回想定するシステム構成
社員(Googleフォームで目標設定シートを提出) ▼【トリガー】フォーム送信時 Google Apps Script ├──▶ 規則で確かめる(目標の数・ウェイトの合計・期限が評価期間の中か) ├──▶ 社員の一覧から職種・等級・上司のアドレスを引く ▼ OpenAI API(Responses API・構造化出力) │ 目標ごとに、測れるか・期限があるか・本人の行動か・あいまいな語 │ 直す理由と、数値を空欄にした書き直しの例 ▼ Google Apps Script ── 書き直しの例に数字が無いかを確かめる ├──▶ 点検の一覧のシートへ書き出す └──▶ 人事の担当者の Gmail に、本人あて(上司CC)の下書きを作る ▼ 【人事の担当者が確かめて送る】
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 実行環境 | Google Apps Script | Power Automate、Make、Python |
| 生成AI | OpenAI API(Responses API、構造化出力) | Claude API、Gemini API |
| フォーム | Google フォーム(目標設定シート) | Microsoft Forms |
| シート | Google スプレッドシート(回答・社員の一覧・点検の一覧) | Microsoft 365 のブック |
| メール | Gmail(人事の担当者の下書き) | Outlook |
新しく足すのは、スクリプトと OpenAI API の契約だけです。 フォームも回答のスプレッドシートも、今あるものを使います。回答のシートにも人事システムにも書き込みません。 スクリプトが書き込むのは、人事が持つ点検の一覧のシートと Gmail の下書きだけです。
土台になるのは、Google Apps Script のインストール型トリガーです。 フォームの送信時に動くトリガーを、回答のスプレッドシートに紐づけて作ります。インストール型トリガーは作成した人のアカウントで実行されます。 下書きは、トリガーを作った人事の担当者の Gmail にできます。担当者が複数いる場合は、評価制度の担当の共用アカウントで作るのが扱いやすくなります。
スクリプトの実行時間には上限があります。 1回の実行は6分まで、トリガーの合計の実行時間は Google Workspace のアカウントで1日6時間までとされています。目標設定シートは1件ずつ提出されるので、1回の実行で扱うのは1人分です。 上限に近づくことはまずありません。
生成AIには OpenAI API の Responses API を使います。 構造化出力で、指定した JSON スキーマに沿った応答を受け取れます。OpenAI の説明では、API に送ったデータは、本人が明示的に共有を選ばない限りモデルの学習や改善に使われません。
03どうやって実装するのか
処理の起点を決める
フォームの送信を起点にします。 回答のスプレッドシートに、フォーム送信時のインストール型トリガーを1つ置きます。提出のたびに1回動き、その1人分を点検します。
毎日まとめて処理する形にはしません。 中途入社の社員は入社した週に目標を書くことが多く、上司との面談の記憶が新しいうちに書き直しの例が届くほうが、出し直しが早く終わります。 1日待つだけで、上司が出張に入って面談が1週間延びることがあります。
出し直しも同じトリガーで受けます。 フォームに「初回の提出/出し直し」の設問を置き、出し直しのときは前の回の点検結果を引いて、直った目標と、まだ直っていない目標を区別して一覧に出します。
送信時のトリガーは、何らかの理由で失敗することがあります。 失敗した実行はメールで通知されますが、取りこぼしを防ぐために、毎朝1回、時間主導型のトリガーで「回答はあるのに点検の一覧に無い」行を探して処理し直します。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 目標設定シート | 社員番号、提出の区分、目標ごとの「目標の内容」「達成の基準」「期限」「ウェイト」 | 回答のスプレッドシート |
| 社員の一覧 | 社員番号、職種、等級、上司の社員番号とアドレス、入社日・異動日 | 人事が持つ社員の一覧のシート |
| 書き方の基準 | 制度で決めている書き方のルール、あいまいな語の一覧、良い書き方の例 | 人事が用意する基準のシート |
| 評価期間 | 今期の開始日と終了日 | 基準のシート |
| 前の回の点検結果 | 出し直しのときだけ | 点検の一覧のシート |
AIに渡すのは、目標の文と、職種・等級と、書き方の基準だけです。 氏名や社員番号は渡しません。目標の文の中に顧客名や案件名が書かれていることがあるため、第13章で扱いを決めます。
書き方の基準のシートが、この構成の質を決めます。 「〜に努める」「〜を強化する」「〜を推進する」「〜に貢献する」のような、期末に判定できない語の一覧と、職種ごとの良い書き方の例を3〜5個ずつ用意します。この一覧は人事の3名で1つにそろえます。 第3章の(a)の、担当者ごとの差をなくすのはこの一覧です。
データの取得方法を決める
フォーム送信時のトリガーは、イベントの情報として、設問の名前と値の組(namedValues)と、シートに並んだ順の値(values)を渡してきます。 1人分の回答はこれで取れるので、回答のシートを読み直す必要はありません。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 1人分の目標 | 送信時のイベント(namedValues) | 点検の材料 |
| 職種・等級・上司 | 社員の一覧のシートを社員番号で引く | AIへの文脈、下書きの宛先 |
| 書き方の基準 | 基準のシート | AIへの指示に入れる |
| 前の回の結果 | 点検の一覧のシートを社員番号で引く | 出し直しのときの比較 |
社員の一覧は、社員番号で引きます。 氏名で引くと、同姓同名や旧姓で引けない社員が出ます。社員番号が一覧に無い場合は、中途入社の登録がまだ済んでいない可能性が高いので、点検はせずに人事へ知らせます。
AIへ渡す前に整形する
- 目標の数の確認 … 3〜5個の範囲かを数えます。範囲外なら「目標の数」として一覧に出します
- ウェイトの合計の確認 … 合計が100%かを計算します。AIには計算させません
- 期限の日付の確認 … 期限の欄が日付として読めるか、評価期間の中にあるかを確かめます。「期末」「随時」などの文字は、規則で「日付ではない」と印を付けます
- 空欄の確認 … 「達成の基準」が空の目標は、AIに渡す前に印を付けます
- あいまいな語の確認 … 基準のシートの語の一覧と照らし、該当する語に印を付けます
- 固有名の置き換え … 社員の一覧にある氏名と一致する文字列を「(社員)」に置き換えます
2番目と3番目をAIに任せないのが、この構成の決まりです。 ウェイトの合計を生成AIに足させると、まれに合わない計算をします。数えれば分かることを、判断の仕組みに通しません。
5番目の印は、AIの判定と別に持ちます。 一覧の語があっても、文全体として測れる書き方になっていることがあります(「品質を強化するため、障害件数を月〔 〕件以下にする」など)。印があるかどうかと、直すべきかどうかは別で、後者はAIに判定させます。
AIに処理させる
させるのは、目標ごとに4つの観点で判定し、直す理由を書き、書き直しの例を作ることです。
| 観点 | 判定の仕方 | 判断できないときの扱い |
|---|---|---|
| 測れるか | 達成の基準に、数・割合・回数・状態(「〜が完成している」)のどれかが書かれているか | 職種の特性で判断がつかなければ unclear |
| 期限があるか | 期限の欄か達成の基準のどちらかに、いつまでかが書かれているか | 前処理で日付として読めた場合は規則の結果を使う |
| 本人の行動か | 本人が何をするかが書かれているか。他の部署や顧客の行動だけで決まる書き方になっていないか | 判断できなければ unclear |
| あいまいな語 | 期末に判定できない語が、達成の基準の中心になっていないか | 前処理の印を参考にする |
書き直しの例は、元の目標の意図を変えずに、測れる形にした1文です。 数値・日付・割合の具体的な値は「〔 〕」の空欄にし、何を数えるのか(件数か、割合か、日数か)だけを示します。
| させないこと | 理由 |
|---|---|
| 目標の水準の判断(高い・低い) | 本人と上司が面談で決めること |
| 数値・期限の具体的な値の提案 | AIが目標を決めたことになる |
| 目標の追加・削除の提案 | 何を目標にするかは上司との合意事項 |
| 部署の方針との整合の判断 | AIは部署の方針を知らない |
| ウェイトの合計や日付の計算 | スクリプトが規則で計算する |
| 本人の能力や意欲の評価 | 目標の書き方の点検と関係がない |
2行目がいちばん起きやすい失敗です。 「書き直しの例を作って」とだけ頼むと、AIは親切に「前年比110%」「月5件」と具体的な数字を入れます。その数字に根拠はありませんが、例として示されると、本人も上司もそこから話を始めてしまいます。
指示内容を固定する
あなたは人事部で、社員が書いた目標設定シートの「書き方」を点検する立場です。
目標の中身の良し悪しや、水準の高さは判断しません。
期末に本人と上司が「達成したかどうか」を同じ物差しで判断できる書き方に
なっているかだけを見てください。
【入力】
- 職種と等級
- 目標ごとの「目標の内容」「達成の基準」「期限」
- 前処理の結果(期限が日付として読めたか、あいまいな語の印)
- 会社の書き方の基準と、職種ごとの良い書き方の例
【目標ごとに判定する観点】
1. measurable … 達成の基準に、数・割合・回数・日数・完成した状態のどれかがあるか
2. has_deadline … いつまでかが書かれているか
3. own_action … 本人が何をするかが書かれているか
4. vague_words … 期末に判定できない語が、達成の基準の中心になっていないか
それぞれ ok / needs_fix / unclear で答えてください。
【厳守事項】
- 書き直しの例では、数値・日付・割合・件数の具体的な値を書かないでください。
必ず「〔 〕」の空欄にしてください。何を数えるか(件数、割合など)は書いてください。
- 目標の意図を変えないでください。元の目標にない業務を足さないでください。
- 目標の水準が高い・低いと書かないでください。
- 目標を増やす・減らす・入れ替える提案をしないでください。
- ウェイトの合計や日付の計算はしないでください。前処理の結果を使ってください。
- 本人の能力・姿勢・意欲について書かないでください。
- 直す理由は、どの語・どの欄のどこが問題かを具体的に1〜2文で書いてください。
- すべての観点が ok の目標には、書き直しの例を書かないでください。
- 判断がつかないときは unclear とし、理由に何が分からないかを書いてください。
【職種と等級】{role}
【書き方の基準と良い例】{guideline}
【目標】{goals}
【前処理の結果】{precheck}
「〔 〕の空欄にする」を明記しても、例の中に数字が入ることがあります。 「月〔 〕件以上、うち新規を3社」のように、空欄と数字が混ざる形です。そのためスクリプトの側でも、書き直しの例の中に数字があれば一覧で目立たせます。 指示とスクリプトの両方で止めます。
「すべて ok の目標には例を書かない」も大事です。 書かせると、問題の無い目標まで言い回しを変えた例が返り、本人は「直せと言われた」と受け取ります。 直す必要のない目標には何も返しません。
出力形式を固定する
次の形のJSONで受け取ります。 Responses API の構造化出力で、text.format に json_schema の型、strict を true にしてスキーマを渡します。厳密モードでは、すべてのオブジェクトに additionalProperties: false を付け、すべての欄を required に並べます。
{
"goals": [
{
"goal_index": 1,
"measurable": "ok | needs_fix | unclear",
"has_deadline": "ok | needs_fix | unclear",
"own_action": "ok | needs_fix | unclear",
"vague_words": "ok | needs_fix | unclear",
"reason": "",
"rewrite_example": ""
}
],
"overall_comment": ""
}
rewrite_example は、すべての観点が ok の目標では空の文字列にします。overall_comment は、本人あてのメールの冒頭に置く1〜2文です。
1つ目の理由は、観点ごとの判定を数えられることです。 「measurable が needs_fix の目標が多い職種」が分かれば、その職種の良い書き方の例を基準のシートに足す、という改善ができます。自由文の講評では数えられません。
2つ目は、rewrite_example を機械的に確かめられることです。 欄が分かれていれば、スクリプトはその欄だけを見て、半角・全角の数字が含まれていないかを確かめられます。
3つ目は、メールの下書きをスクリプトが組み立てられることです。 needs_fix の目標だけを並べ、理由と書き直しの例を差し込みます。文面の型は人事が決め、AIが埋めるのは目標ごとの部分だけです。 担当者ごとに文面の調子が変わることもなくなります。
モデルが要求を断った場合、応答にはスキーマの形ではなく断りの内容が入ります。 スクリプトは応答の中身の種類を見て、断りであれば点検の一覧に「AIの点検なし」として出し、人事の担当者が読みます。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 回答のスプレッドシート | 送信時のトリガー | 1人分の目標を受け取る |
| 社員の一覧・基準のシート | 読み取り | 職種・等級・上司、書き方の基準 |
| OpenAI API | UrlFetchApp.fetch() で POST | 観点ごとの判定と書き直しの例 |
| 点検の一覧のシート | 書き込み | 規則の結果、AIの判定、送ったかどうか |
| Gmail | GmailApp.createDraft() | 本人あて・上司 CC の下書き |
UrlFetchApp.fetch() は、method に post、contentType に JSON、headers に API キー、payload に要求の本文を入れて呼びます。muteHttpExceptions を true にすると、失敗の応答でも例外を投げずに応答を返します。 状態コードを見て、翌朝の処理し直しに回すかを決めます。
API キーはコードに書かず、スクリプト プロパティに置きます。 スクリプト プロパティはスクリプトのすべての利用者で共有されます。スクリプトの編集権限は、評価制度の担当者に限ります。
GmailApp.createDraft() は、宛先・件名・本文に加えて、cc や name、replyTo を取ります。cc に上司のアドレスを入れ、replyTo を評価制度の担当の共用アドレスにします。 本人からの質問が、送った担当者個人ではなく共用の窓口に届きます。
人が確認する
人事の担当者が見るのは、点検の一覧の1行と、Gmail の下書きです。 シートの全文を読み直すのは、判定に unclear がある場合だけです。
- 規則の結果を見る … ウェイトの合計、目標の数、期限の日付。ここで外れていれば、AIの判定より先に本人へ直しを頼みます
needs_fixの目標と書き直しの例を読む … 例が元の意図から外れていないか、数字が入っていないかを見ますunclearの目標を読む … 職種によっては、研究開発の目標のように数で表しにくいものがあります。状態で書けば十分な場合は、そのまま通します- 下書きを整えて送る … 言い回しを直し、上司との関係で配慮が要るものは一文足します
- 送ったことを一覧に記録する … 送った日と、直しを頼んだ観点の数を残します
2番目で例を読むのは、意図のずれを見つけるためです。 「新人の育成を担う」を「新人の〔 〕名が独り立ちする」と直すのは書き方の改善ですが、育成の対象が新人だけなのか、チーム全体なのかは、本人にしか分かりません。 人事が見て迷うものは、「例です。意図と違えば上司とご相談ください」と添えます。
目標は、1件あたり5分です。 直しの無いシートは一覧で確かめて受付の下書きを送るだけで、直しのあるシートでも、書き直しの例ができているので書く時間はほとんどかかりません。
例外に対処する
| 起きること | 対応 |
|---|---|
| 社員番号が社員の一覧に無い | 点検せずに人事へ知らせる。中途入社の登録待ちのことが多い |
| 上司のアドレスが一覧に無い | 本人あてだけの下書きを作り、一覧に「上司不明」と出す |
| ウェイトの合計が100%でない | 規則で検出。AIの判定とは別に、最初に直しを頼む |
| 期限が「期末」「随時」など | 規則で「日付ではない」と印。AIの has_deadline と並べて出す |
| 書き直しの例に数字が入っている | 一覧で目立たせる。送る前に人事が空欄に直す |
| OpenAI API がエラーを返す | 一覧に「未点検」と出し、翌朝の処理し直しに回す |
| モデルが要求を断る | 「AIの点検なし」として人事が読む |
| 送信時のトリガーが動かなかった | 毎朝の処理し直しで、回答はあるのに一覧に無い行を拾う |
| 同じ社員が1日に2回提出する | 後の提出だけを点検し、前の下書きは削除の候補として一覧に出す |
上から2行目までは、社員の一覧の整備の問題です。 中途入社や異動の直後は、人事システムから一覧への反映が遅れることがあります。目標の提出のほうが先に来るので、一覧の更新の頻度を上げるほうが効きます。
記録を残す
- 提出された目標の文(固有名を置き換える前と後)
- 規則の結果(目標の数、ウェイトの合計、期限の日付の判定)と、そのときの評価期間
- AIに渡した要求と、返ってきたJSONの全文
- 人事の担当者が送った文面と、AIの下書きとの違い
- 出し直しの回数と、観点ごとに直ったかどうか
- 職種ごとの、観点別の
needs_fixの件数
4つ目は、指示を直す材料になります。 担当者が毎回同じ言い回しを書き換えているなら、その言い回しを文面の型か指示に入れます。
5つ目と6つ目は、制度の側を見直す材料になります。 特定の職種で measurable の needs_fix が続くなら、その職種に合った良い書き方の例が足りていません。書き方の研修や、シートの欄の説明文を直すきっかけになります。
目標設定シートは人事評価に関わる記録です。 点検の一覧とログの閲覧は、評価制度の担当者に限ります。保存の期間は、評価の記録の保存の規程に合わせます。
04実装レベルの3段階
本記事の想定は半自動化です。 1件20分が5分になる計算は、この段階で置いています。 本格構成で足すのは、期初の一斉提出への対応です。 全社員分が数日のうちに届くため、送信時のトリガーで1件ずつ処理しても下書きが人事の Gmail にあふれます。期初は、上司ごとに部下の点検結果をまとめた1通にするなど、返し方を変えます。ここは件数が大きいので、半自動化で月60件を数か月回してから作ります。
05工数削減シミュレーション
導入後 60件 × 5分 ÷ 60 = 5 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 社員数が数百〜数千名で、目標管理の制度があり、中途入社・異動・昇格のたびに目標設定シートが人事に届くIT企業・製造業・商社・金融機関など。人事が「達成の基準があいまい」「期限が無い」といった書き方の不備を1枚ずつ読んで差し戻しており、差し戻しの文面が担当者ごとに違う場合。目標設定シートを Google フォームまたは Google スプレッドシートで集めている場合。
- 社員数が少なく、上司と本人の面談だけで目標を固めており、人事が書き方を点検していない場合。目標の中身(水準の高さ、組織目標とのつながり)の良し悪しをAIに判断させたい場合(この構成が見るのは書き方だけです)。目標設定シートが紙や評価システムの中にあり、外から読み出せない場合。
07最小構成で試す方法
- 先月提出された目標設定シートから10枚を選ぶ(人事が実際に差し戻したものを半分入れる)
- 氏名・社員番号・顧客名を消し、職種と等級だけを残す
- 会社が契約しているAIサービスの画面に、1枚ずつ貼り付ける
- 「目標ごとに、達成の基準が測れるか、期限があるか、本人の行動か、期末に判定できない語が中心になっていないかを点検し、直す理由と書き直しの例を書いてください。数値と日付は必ず〔 〕の空欄にしてください。目標の水準は判断しないでください」と指示する
- 出てきた結果を、当時の人事の差し戻しのコメントと突き合わせる
| 出てきた内容 | 判断 |
|---|---|
当時差し戻した目標が needs_fix になった | スクリプトとの連携に進む |
| 書き直しの例に数字が入った | 指示の書き方とスクリプトの確認で直る。構成は有効 |
当時通した目標まで needs_fix になった | 書き方の基準のシートが先。 何を通すかを人事で決める |
3行目は失敗ではありません。 AIのほうが厳しいのか、当時の人事が見逃していたのかを、3名で話し合うきっかけになります。その結論を基準のシートに書くことが、第3章の(a)を解く作業そのものです。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 書き直しの例に具体的な数字が入る | 空欄と明記し、スクリプトでも数字の有無を確かめる |
| 問題の無い目標まで言い回しが変えられる | すべて ok の目標には例を書かせない |
| 目標の水準について意見を書いてくる | 指示で禁じ、スキーマに水準の欄を作らない |
| ウェイトの合計をAIが誤って計算する | 計算はスクリプトで行い、AIには結果だけを渡す |
研究開発職の目標が全部 needs_fix になる | 「完成した状態」も測れる書き方として例に入れる |
| 人事から上司の頭越しに指摘が届く | 上司を CC に入れ、下書きを人事が整えてから送る |
| 書き直しの例の意図が元の目標からずれる | 「意図と違えば上司とご相談ください」を文面の型に入れる |
| 中途入社の社員が社員の一覧に無い | 一覧の更新の頻度を上げる。無ければ人事へ知らせる |
| 送信時のトリガーが動かない回がある | 毎朝の処理し直しで取りこぼしを拾う |
| 本人からの質問が担当者個人に届く | replyTo を共用のアドレスにする |
上の2行が、この構成の失敗のほとんどです。 どちらも、AIが親切に「完成した目標」を返そうとすることから起きます。この構成が返すのは、本人と上司が話し合うための材料で、答えではありません。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 社員が書いた目標の文、職種・等級、上司との関係です。目標の文には、担当する顧客名・案件名・売上の数字が書かれていることがあります。 人事評価に直結する情報です。
- AIに渡す範囲を絞る … 氏名と社員番号は渡しません。社員の一覧にある氏名は置き換えます。顧客名は置き換えきれないことを前提に、契約の条件を確かめます
- API の契約の条件を確かめる … OpenAI の説明では、API に送ったデータは明示的に共有を選ばない限りモデルの学習や改善に使われません。不正利用の監視のための記録は最大30日保持されます。Responses API は既定で応答を保存するため、保存を望まない場合は
storeをfalseにして呼びます - AIに評価をさせない … この構成が見るのは書き方だけです。目標の水準、本人の能力、意欲についての判断を、AIの出力に含めないでください
- 自動で送らない … 本人と上司に届く文面は、人事の担当者が確かめてから送ります
- 閲覧の範囲を限る … 点検の一覧とログは評価制度の担当者だけが読めるようにします。上司は自分の部下の分だけを、メールで受け取ります
- 書き直しの例を評価に使わない … AIが返した例は、本人と上司の面談の材料です。期末の評価で「AIの例どおりに書いたか」を見ることはしません
誤りが起きた場合のリスクは、AIの例の数字がそのまま目標になることと、書き方の点検が中身の評価に見えてしまうことの2つです。 前者は空欄とスクリプトの確認で、後者は観点を書き方に限ることで防ぎます。
10まず何から始めるか
1週目:書き方の基準のシートを作る
人事の3名で、期末に判定できない語の一覧と、職種ごとの良い書き方の例を3〜5個ずつ書き出します。過去に差し戻したシートと通したシートを並べ、どこで判断が分かれていたかを確かめます。
2週目:10枚で試す
先月のシートから10枚を選び、会社が契約しているAIサービスに貼り付けて点検させます。書き直しの例に数字が入っていないかと、当時の差し戻しと同じ目標が拾われたかを見ます。
3週目:規則の確認を作る
送信時のトリガーで、目標の数・ウェイトの合計・期限の日付を確かめ、点検の一覧に書き出すところまで作ります。この時点ではAIを呼びません。 規則だけで差し戻せるシートがどのくらいあるかを数えます。
4週目:AIの点検と下書きを足す
OpenAI API を呼び、観点ごとの判定と書き直しの例を一覧に出し、Gmail の下書きを作ります。最初の2週間は、下書きを送らずに人事の担当者が自分で書いたコメントと比べます。
2か月目: 下書きを整えて送る運用に切り替え、出し直しの回数を数えます。3か月目以降: 職種ごとの needs_fix の傾向を見て、基準のシートとフォームの欄の説明文を直します。1件20分が何分になったかと、出し直しの回数が減ったかを実測した時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| インストール型トリガーにフォーム送信時のトリガーと時間主導型のトリガーがあること。インストール型トリガーは作成した人のアカウントで実行されること。失敗した実行はメールで通知されること | Google for Developers: Installable triggers | 2026-10-07 |
スプレッドシートの送信時のイベントが namedValues(設問の名前と値)と values(シートの並び順の値)を渡すこと | Google for Developers: Event objects | 2026-10-07 |
| 1回の実行が6分まで。トリガーの合計実行時間が Google Workspace で1日6時間 | Google for Developers: Quotas for Google Services | 2026-10-07 |
UrlFetchApp.fetch() の method・contentType・payload・headers・muteHttpExceptions | Google for Developers: UrlFetchApp | 2026-10-07 |
| スクリプト プロパティがスクリプトのすべての利用者で共有されること | Google for Developers: Properties Service | 2026-10-07 |
GmailApp.createDraft(recipient, subject, body, options) が cc・bcc・name・replyTo・htmlBody などのオプションを取ること | Google for Developers: GmailApp | 2026-10-07 |
Responses API の構造化出力で text.format に json_schema・name・schema・strict を指定すること。厳密モードでは additionalProperties: false とすべての欄の required が必要なこと。断った場合は断りの内容が返ること | OpenAI for Developers: Structured model outputs | 2026-10-07 |
API に送ったデータが、明示的に共有を選ばない限り学習・改善に使われないこと。不正利用の監視の記録が最大30日保持されること。Responses API の store が true のとき応答が保存されること | OpenAI for Developers: Data controls in the OpenAI platform | 2026-10-07 |
目標設定シートの書き方の基準と、どこまでを差し戻すかは、自社の評価制度に合わせて人事で決めてください。 本記事は Google for Developers と OpenAI for Developers で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0635)についてのご相談はこちらから。
