プロジェクトの進捗タイムラインをGASで作成

GASスプレッドシートプロジェクト管理
プロジェクトの進捗タイムラインをGASで作成のサムネイル

プロジェクトの進捗タイムラインをGASで作成


はじめに:プロジェクト管理にGASを活用しよう

おじさんだ。中小企業やフリーランスの皆さん、プロジェクトの進捗管理、うまくできてるかい?エクセルやスプレッドシートは便利だけど、手作業での更新が多いとミスも増えるし、時間もかかる。そこでGAS(Google Apps Script)を使って、自動的に進捗タイムラインを作成・管理する方法を紹介しよう。

GASはGoogleアカウントの利用枠内で追加の専用SaaS料金なし。Apps Scriptのquota・実行上限はあるものの、うまく使えば手間もコストも削減できるぞ。ただし、既存データの無差別な削除は避けて、慎重に扱うのがポイントだ。


GASで進捗タイムラインを作成する流れ

おじさんが提案するのは、既存のデータをその場で更新せず、新しい日時付きシートを作成して結果をまとめる方法だ。こうすることで、元データは安全に保管できるし、何かあってもバックアップから復元しやすい。

大まかな流れは以下の通り。

  1. プロジェクト情報が入った既存スプレッドシートを読み込む
  2. 入力内容のバリデーション(入力検証)を行う
  3. 新しい日時付きシートを作成し、ここに進捗タイムラインをバッチ書き込み
  4. 元データは変更しない
  5. バックアップとして元データのコピーも作成可能

初期設定と必要権限

  • Googleスプレッドシートの編集権限(スクリプトがシートにアクセス・作成するため)
  • Google Apps Script エディタでのプロジェクト作成
  • installable triggerは今回は不要。手動またはメニューから実行で十分

個人情報の取り扱いについては、このスクリプトではプロジェクト名・日付・進捗内容のみ扱う想定。必要に応じてアクセス権限の管理と共有設定を厳格に行うことを推奨する。


コード例:進捗タイムラインを新規シートに書き出す

以下は、既存シート「Projects」から進捗データを取得し、バリデーションしたうえで新しい日時付きシートを作成し、そこに一括書き込みする例だ。バックアップも同時に作成している。

function createProjectTimeline() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sourceSheet = ss.getSheetByName("Projects");
  if (!sourceSheet) {
    throw new Error("Projectsシートが見つかりません。");
  }

  // 元データ範囲取得(ヘッダー含む)
  const dataRange = sourceSheet.getDataRange();
  const data = dataRange.getValues();

  // 入力検証(例:日付フォーマットと必須項目チェック)
  const header = data[0];
  const requiredColumns = ["プロジェクト名", "開始日", "終了日", "進捗状況"];
  const colIndexes = requiredColumns.map(col => header.indexOf(col));
  if (colIndexes.includes(-1)) {
    throw new Error("必須カラムが見つかりません: " + requiredColumns.join(", "));
  }

  // データチェック&整形
  const timelineData = [header]; // 新シート用データ配列にヘッダー追加
  for (let i = 1; i < data.length; i++) {
    const row = data[i];
    // 必須項目の空チェック
    if (colIndexes.some(idx => !row[idx])) {
      // 空欄がある行はスキップ(またはログ記録)
      continue;
    }
    // 日付形式チェック(簡易、Dateオブジェクトかどうか)
    const startDate = row[colIndexes[1]];
    const endDate = row[colIndexes[2]];
    if (!(startDate instanceof Date) || !(endDate instanceof Date)) {
      continue; // 日付不正ならスキップ
    }
    timelineData.push(row);
  }

  if (timelineData.length === 1) {
    throw new Error("有効なデータがありません。");
  }

  // 新しい日時付きシート名を作成
  const timestamp = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "yyyyMMdd_HHmmss");
  const newSheetName = `Timeline_${timestamp}`;

  // 新シート作成(既存シートを変更しない)
  const newSheet = ss.insertSheet(newSheetName);

  // バッチ書き込み
  newSheet.getRange(1, 1, timelineData.length, timelineData[0].length).setValues(timelineData);

  // バックアップとして元シートを複製(任意)
  const backupSheetName = `Backup_Projects_${timestamp}`;
  sourceSheet.copyTo(ss).setName(backupSheetName);

  // 完了メッセージ
  SpreadsheetApp.getUi().alert(`進捗タイムラインを新規シート「${newSheetName}」に作成しました。バックアップは「${backupSheetName}」です。`);
}

復元方法と運用上のポイント

  • 新しいシートに書き出すので、誤って既存のデータを消すリスクが減る
  • 万が一トラブルがあっても「Backup_Projects_yyyymmdd_hhmmss」シートから復元可能
  • 定期的にバックアップシートを整理し、スプレッドシートの容量管理を行うこと
  • 実行は手動またはGASメニューに組み込む形で運用可能
  • installable triggerを追加したい場合は、例えば日次で実行する設定もできるが、その場合はスクリプトの実行時間とquotaに注意

コスト削減の試算例

仮に、手動更新にかかっていた時間が月20時間、時給2,000円とすると、

20時間 × 2,000円 = 40,000円/月

このうち、GAS自動化で作業時間が50%削減できれば、

40,000円 × 0.5 = 20,000円/月の削減

年間では約24万円の工数削減効果が期待できる計算になる。ただし、これはあくまで仮定の数字であり、実際の効果はプロジェクト規模や運用状況によって異なる。GASはGoogleアカウントの利用枠内で追加の専用SaaS料金なしで使える点も大きなメリットだ。


まとめ

  • GASでプロジェクト進捗タイムラインを自動生成できる
  • 既存データを直接編集せず、新しい日時付きシートに書き出すことで安全性アップ
  • 入力検証やバックアップも組み込み、運用しやすく設計
  • Googleアカウントの利用枠内で追加料金なし(ただしquota・実行上限あり)
  • 中小企業やフリーランスの負担軽減に役立つツールとしてぜひ活用してほしい

GASおじラボで500ツール使い放題 →