note記事の公開漏れを予定日前に発見|GASで企画表をdry-run検査

note記事の公開漏れを予定日前に発見|GASで企画表をdry-run検査

Gasおじ|GoogleアカウントをAIエージェント化

Gasおじ|GoogleアカウントをAIエージェント化

「公開予定日は入れたのに、タイトルや原稿が空欄のまま当日になった」。noteを継続すると、企画数よりも入力漏れと期限超過の見落としが負担になります。この記事では、企画表を変更せず、問題のある行だけをログへ出す無料GASを紹介します。

先に知っておきたい制限

  • シートの値は変更せず、検査結果を実行ログへ出すだけです。
  • noteへの投稿、下書き作成、予約公開は行いません。
  • 原稿本文はログへ出さず、行番号と不足項目だけを記録します。
  • 日付判定はスプレッドシートのタイムゾーンを使います。

準備するシート

スプレッドシートに「記事企画」シートを作り、1行目へ次の列名を入れます。

  • A列: 記事タイトル
  • B列: 公開予定日
  • C列: ステータス(企画中、執筆中、公開準備、公開済み)
  • D列: 原稿確認(OKなら TRUE)
  • E列: 画像確認(OKなら TRUE)

最初は実データではなく、コピーしたシートへ3〜5行だけ入力して試してください。

コピーして使える最小コード

次のコードは `DRY_RUN: true` 固定です。企画表を更新せず、不足項目と期限超過候補だけを確認します。

function previewNoteContentCalendarFree() {
  const DRY_RUN = true;
  const SHEET_NAME = '記事企画';
  const MAX_ROWS = 200;
  if (!DRY_RUN) throw new Error('この無料例はdry-run専用です');

  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName(SHEET_NAME);
  if (!sheet) throw new Error('「記事企画」シートが見つかりません');

  const lastRow = sheet.getLastRow();
  if (lastRow < 2) {
    console.log(JSON.stringify({ checked: 0, issues: 0 }));
    return;
  }
  if (lastRow - 1 > MAX_ROWS) {
    throw new Error('検査対象が200行を超えています。範囲を分けてください');
  }

  const values = sheet.getRange(2, 1, lastRow - 1, 5).getValues();
  const tz = ss.getSpreadsheetTimeZone();
  const todayKey = Utilities.formatDate(new Date(), tz, 'yyyy-MM-dd');
  const issues = [];

  values.forEach((row, index) => {
    const rowNumber = index + 2;
    const title = String(row[0] || '').trim();
    const publishDate = row[1];
    const status = String(row[2] || '').trim();
    const draftOk = row[3] === true;
    const imageOk = row[4] === true;
    const missing = [];

    if (!title) missing.push('記事タイトル');
    if (!(publishDate instanceof Date) || Number.isNaN(publishDate.getTime())) {
      missing.push('公開予定日');
    }
    if (!['企画中', '執筆中', '公開準備', '公開済み'].includes(status)) {
      missing.push('ステータス');
    }
    if (status === '公開準備' && !draftOk) missing.push('原稿確認');
    if (status === '公開準備' && !imageOk) missing.push('画像確認');

    let overdue = false;
    if (publishDate instanceof Date && !Number.isNaN(publishDate.getTime())) {
      const dateKey = Utilities.formatDate(publishDate, tz, 'yyyy-MM-dd');
      overdue = dateKey < todayKey && status !== '公開済み';
    }
    if (missing.length || overdue) {
      issues.push({ row: rowNumber, missing, overdue });
    }
  });

  console.log(JSON.stringify({ checked: values.length, issues }, null, 2));
}

実行手順

1. 検証用スプレッドシートで「拡張機能」からApps Scriptを開きます。

2. コードを貼り付け、`previewNoteContentCalendarFree` を選びます。

3. 初回権限を内容まで確認してから実行します。

4. 実行ログの `row`、`missing`、`overdue` を確認します。

5. 修正はシート上で人が行い、もう一度dry-runします。

失敗しやすい点

  • 日付が文字列だと「公開予定日」の不足として扱われます。日付形式で入力してください。
  • TRUEを文字で入力した場合は確認済みになりません。チェックボックスを使うと安全です。
  • 200行を超えると停止します。先に対象期間を分けてください。
  • 時刻まで厳密に管理する用途には、この日単位の例だけでは足りません。

公開前チェックリスト

  • 元データを変更しないdry-runになっている
  • タイトルや原稿本文をログへ出していない
  • 期限超過を自動公開や自動削除につなげていない
  • 検証用コピーで少量テストした
  • タイムゾーンを確認した

まとめ

投稿を続けるほど、企画を増やす前に「不足項目」「期限超過」「公開準備の未確認」を同じ基準で見つける仕組みが役立ちます。まずは変更を伴わないdry-runで、直すべき行だけを把握してください。

note記事作成・運用シートを見る

GasおじのTips商品一覧を見る

※学習・検証用の例です。実データへ適用する前にコピー環境で確認してください。Google公式・Google公認の商品ではありません。


あなたも記事の投稿・販売を
始めてみませんか?

Tipsなら簡単に記事を販売できます!
登録無料で始められます!

Tipsなら、無料ですぐに記事の販売をはじめることができます Tipsの詳細はこちら
 

この記事のライター

Gasおじ|GoogleアカウントをAIエージェント化

おう、Gasおじだ。 AIツールとSaaSに散々突っ込んで遠回りした結果、最後に強かったのは「今あるGoogleアカウント」だった。 今ではAIエージェントであらゆるタスクを自動化して無双してるぞ。 GAS、スプレッドシート、フォーム、Gmail、AIエージェントを組み合わせれば、個人でも小さな会社でも、手作業だらけの業務はかなり自動化できる。 ここでは机上のAI論じゃなく、現場で動くテンプレ、コード、手順だけを置いていくぞ。 高いツールを増やす前に、まずお前さんのGoogleアカウントを仕事するエージェントに変えようじゃないか。

このライターが書いた他の記事

  • Gmailの定型連絡を「送信せず」まとめて下書き化する|Gmail下書きテンプレGAS Pro

    ¥2,980
    1 %獲得
    (29 円相当)
  • GASのtry-catch入門|元データを守るエラー処理とログの実装例

  • Gasおじ式 X投稿キュー自動実行GAS Pro|危ない時だけ止まる

    ¥2,980
    1 %獲得
    (29 円相当)

関連のおすすめ記事

  • Gmailの定型連絡を「送信せず」まとめて下書き化する|Gmail下書きテンプレGAS Pro

    ¥2,980
    1 %獲得
    (29 円相当)
    Gasおじ|GoogleアカウントをAIエージェント化

    Gasおじ|GoogleアカウントをAIエージェント化

  • USBメモリで持ち運べるLinux Mint 22.1と永続的な書き込み領域の作成法【Rufus だけで作成する方法を初心者向けに徹底解説】

    ¥500
    1 %獲得
    (5 円相当)
    SmartSenior

    SmartSenior

  • 【Python】 Con-Que 【データベース接続】

    ¥3,000
    1 %獲得
    (30 円相当)
    GoGorilla

    GoGorilla