0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Claude共有メモリ導入前に業務ルールを棚卸しするGAS

0
Posted at

Claude の Chat と Cowork をまたいで前提を持てる共有メモリが、8月25日に話題になりました。営業や企画の仕事では便利です。ただ、先にやるべきなのは「何を覚えさせるか」より、古くなったルールを見つける仕組みづくりでした。

見積書の税率、失注理由の分類、案件名の付け方。こういう前提は一度メモリに入ると、会話を閉じても残ります。期限切れのまま残ったルールは、正しい文章を速く作るほど広がります。

そこで、共有メモリに登録する候補を Google スプレッドシートで管理し、見直し期限が14日以内の行だけを別シートへ出す GAS を作りました。API キーは使いません。スプレッドシートだけで動きます。

先に結論

共有メモリ用の台帳には、内容の横に「見直し期限」と「利用状態」を必ず置きます。期限がないルールは、便利なナレッジではなく、いつの間にか残る前提です。

8月25日の共有メモリのニュースを見て、僕も最初は「過去の指示を繰り返さなくて済む」と受け取りました。でも見積もり条件が変わった月に、古い条件まで引き継がれたら困ります。メモリの精度は、文章のうまさより台帳の更新で決まります。ここ地味に効きます。

シートは5列で足ります

まず 業務ルール という名前のシートを作ります。1行目は次の5列です。

ルール名 内容 担当 見直し期限 利用状態
見積書の税率 標準税率を使う 営業企画 2026/08/20 利用中
失注理由の分類 競合・予算・時期に分ける 営業企画 2026/09/01 利用中

利用状態は 利用中廃止 にそろえます。日付は YYYY/MM/DD 形式です。ここを自由入力にすると、来月末9月ごろ が混ざり、スクリプト側で判定できません。

担当が変わったときは、内容だけでなく担当欄も更新します。誰に確認するかが消えると、期限通知は結局放置されます。月初の定例で見れば十分です。

シートの列を、共有メモリの中身ではなく「見直しの台帳」として使います。

コピペで動くGAS

スプレッドシートで「拡張機能」→「Apps Script」を開き、下のコードを貼り付けて保存します。シートを再読み込みすると、メニューに「メモリ台帳」が出ます。

function onOpen() {
  SpreadsheetApp.getUi()
    .createMenu('メモリ台帳')
    .addItem('期限が近いルールを点検', 'makeMemoryAudit')
    .addToUi();
}

function makeMemoryAudit() {
  const ss = SpreadsheetApp.getActive();
  const source = ss.getSheetByName('業務ルール');
  if (!source) {
    throw new Error('「業務ルール」シートが見つかりません。');
  }

  const warnings = collectMemoryWarnings(
    source.getDataRange().getValues(),
    new Date()
  );
  const target = ss.getSheetByName('メモリ点検') || ss.insertSheet('メモリ点検');
  const rows = [
    ['ルール名', '内容', '担当', '見直し期限', '判定'],
    ...warnings.map(row => row.slice(0, 5))
  ];

  target.clearContents();
  target.getRange(1, 1, rows.length, rows[0].length).setValues(rows);
  target.setFrozenRows(1);
}

function collectMemoryWarnings(values, baseDate) {
  const today = toDayNumber(baseDate);

  return values.slice(1).map((row, index) => {
    const deadline = toDayNumber(row[3]);
    if (row[4] !== '利用中' || deadline === null) return null;

    const days = Math.round((deadline - today) / 86400000);
    if (days > 14) return null;

    const status = days < 0
      ? `期限切れ(${Math.abs(days)}日)`
      : `更新まで${days}日`;
    return [row[0], row[1], row[2], dateLabel(row[3]), status, index + 2];
  }).filter(Boolean);
}

function toDayNumber(value) {
  if (Object.prototype.toString.call(value) === '[object Date]' && !isNaN(value)) {
    return Date.UTC(value.getFullYear(), value.getMonth(), value.getDate());
  }
  const match = String(value).match(/^(\d{4})[\/-](\d{1,2})[\/-](\d{1,2})$/);
  if (!match) return null;

  const [year, month, day] = match.slice(1).map(Number);
  const time = Date.UTC(year, month - 1, day);
  const check = new Date(time);
  return check.getUTCFullYear() === year && check.getUTCMonth() === month - 1 && check.getUTCDate() === day
    ? time
    : null;
}

function dateLabel(value) {
  if (Object.prototype.toString.call(value) === '[object Date]') {
    return `${value.getFullYear()}/${String(value.getMonth() + 1).padStart(2, '0')}/${String(value.getDate()).padStart(2, '0')}`;
  }
  return String(value);
}

メモリ点検 には、期限切れと14日以内に見直す行だけが出ます。元の 業務ルール は書き換えません。共有メモリへ貼り直す前に、人がこの一覧を確認する運用です。

日付を文字列のまま比べない理由

ここは少しだけ気をつけどころです。日付を 2026/9/12026/10/1 の文字列のまま並べると、見た目どおりに比較できないケースがあります。コードでは年月日を UTC の日数に直してから、今日との差を計算しています。

無効な日付も除外します。たとえば 2026/02/30 は入力ミスとして点検表に出しません。空欄や壊れた日付を「期限なし」として通すと、古いルールを見落とすためです。運用では、条件付き書式で空欄を赤くしておくと扱いやすいです。

手元では、2026年8月26日を基準に4件のサンプル行で collectMemoryWarnings を実行しました。利用中 の2件だけが対象になり、8月20日の行は 期限切れ(6日)、9月1日の行は 更新まで6日 になりました。9月30日の行と 廃止 の行は出ません。GAS に貼る前に、この判定部分を Node.js でも同じ入力で動かして確認しています。

途中でシート名を ルール一覧 としていて、実行時に次のエラーが出ました。コードを疑う前に、まずシート名をそろえると直ります。

Error: 「業務ルール」シートが見つかりません。

で、現場でどう使うか

月初に1回だけ点検メニューを押し、出てきた行を担当者に渡します。確認後に更新した内容だけを共有メモリへ反映します。急ぎの提案書づくりで前提を探す時間も減ります。

共有メモリを導入する仕事ほど、古いルールの棚卸しを後回しにしないほうがいいです。情報が残る期間を決める。それだけで、会話に毎回同じ注意書きを足す仕事がかなり減ります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?