[総務 × GAS] Googleドライブのファイル名を一括で変更してみた

[総務 × GAS] Googleドライブのファイル名を一括で変更してみた

「[総務 × GAS] 非エンジニアがGASで効率化を叶えるその日まで」シリーズ、やっとPart3まで来ました!
2026.01.21

こんにちは!総務の徐(Seo)です。

「総務なのにプログラミング?」
はい、クラスメソッドグループの総務は非エンジニアでもGASを使いこなします
今回は「Googleドライブ内のファイル名一括取得・変更」をご紹介します!

GoogleドライブにアップロードしたPDF100件を、1件ずつファイル名変更…なんてしていませんか?
その作業、数分で終わっちゃいます!!

↓↓↓↓手順はこちら↓↓↓↓

①ドライブ操作用スプレッドシートの作成

新しいスプレッドシートを作成し、以下の通りタイトル行を作成しておきます。
A1:ファイルID
B1:ファイルURL
C1:ファイル名
D1:新しいファイル名
kaizen3-1

②GASの設定

拡張機能 → Apps Scriptと進み、自動で最初に入力されているスクリプトを削除し、以下スクリプトを貼り付けて保存します。

/**
 * カスタムメニューを作成
 */
function onOpen() {
  // スプレッドシートのUIを取得
  const UI = SpreadsheetApp.getUi();

  // カスタムメニューを作成
  UI.createMenu('メニュー')
    .addItem('ファイル情報取得', 'FILE_INFO_GET')
    .addItem('ファイル名変更', 'FILE_NAME_CHANGE')
    .addToUi();
}

/**
 * 指定フォルダ配下のファイル情報を取得してシートに出力
 */
function FILE_INFO_GET() {
  const SHEET = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート1');

  // A2:D列をクリア
  SHEET.getRange('A2:D').clear();

  // ポップアップでフォルダURLを入力
  const FOLDER_LINK = Browser.inputBox(
    'フォルダURLを入力', 
    'GoogleドライブのフォルダURLを入力してください', 
    Browser.Buttons.OK_CANCEL,
  );

  // キャンセルされた場合は処理を中断
  if (FOLDER_LINK === 'cancel') return;

  // フォルダIDを抽出
  const FOLDER_ID = EXTRACT_FOLDER_ID_FROM_LINK(FOLDER_LINK);

  // フォルダIDが無効な場合はエラーメッセージを表示
  if (!FOLDER_ID) {
    Browser.msgBox('無効なフォルダURLです。正しいリンクを入力してください。');
    return;
  }

  try {
    // フォルダIDからフォルダオブジェクトを取得
    const FOLDER = DriveApp.getFolderById(FOLDER_ID);

    // 確認ダイアログを表示
    const CONFIRMED = Browser.msgBox(
      '以下フォルダからファイルを取得します', 
      `${FOLDER.getName()}\n\n間違いなければ【OK】を押してください`, 
      Browser.Buttons.OK_CANCEL,
    );

    // キャンセルされた場合は処理を中断
    if (CONFIRMED === 'cancel') return;

    // フォルダ内のファイルを取得して配列化
    const FILES = FOLDER.getFiles();
    const FILE_ARRAY = [];

    // 全ファイルをループ処理
    while (FILES.hasNext()) {
      const FILE = FILES.next();
      FILE_ARRAY.push([FILE.getId(), FILE.getUrl(), FILE.getName()]);
    }

    // ファイルが存在しない場合
    if (FILE_ARRAY.length === 0) {
      Browser.msgBox('フォルダ内にファイルが見つかりませんでした。');
      return;
    }

    // ファイル名(C列)で昇順にソート
    FILE_ARRAY.sort((a, b) => a[2].localeCompare(b[2]));

    // ソート済みのデータをシートに書き込む
    SHEET.getRange(2, 1, FILE_ARRAY.length, 3).setValues(FILE_ARRAY);

    // 完了メッセージを表示
    Browser.msgBox(`${FILE_ARRAY.length}件のファイルを取得し、ファイル名順にソートしました。`);

  } catch (error) {
    // エラーが発生した場合はメッセージを表示
    Browser.msgBox(`エラーが発生しました: ${error.message}`);
  }
}

/**
 * フォルダURLからフォルダIDを抽出
 * @param {string} LINK - GoogleドライブのフォルダURLまたはID
 * @return {string|null} - 抽出されたフォルダID、または null
 */
function EXTRACT_FOLDER_ID_FROM_LINK(LINK) {
  // 異なる形式のリンクに対応するパターン配列
  const PATTERNS = [
    /\/folders\/([a-zA-Z0-9\-_]+)/,
    /id=([a-zA-Z0-9\-_]+)/,
    /^([a-zA-Z0-9\-_]+)$/,
  ];

  // 各パターンでマッチングを試行
  for (const PATTERN of PATTERNS) {
    const MATCH = LINK.match(PATTERN);
    if (MATCH?.[1]) return MATCH[1];
  }

  return null;
}

/**
 * D列の値を使用してファイル名を一括変更
 */
function FILE_NAME_CHANGE() {
  const SHEET = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート1');
  const LAST_ROW = SHEET.getLastRow();

  // データが2行未満の場合は処理しない
  if (LAST_ROW < 2) {
    Browser.msgBox('変更するデータがありません。');
    return;
  }

  // A列(ファイルID)とD列(新しいファイル名)のデータを取得
  const RENAMES = SHEET.getRange(2, 1, LAST_ROW - 1, 4).getValues();
  let SUCCESS_COUNT = 0;
  let ERROR_COUNT = 0;

  // 各行をループ処理
  for (const RECORD of RENAMES) {
    const ID = RECORD[0];
    const RENAME = RECORD[3];

    // 空白や未入力の行をスキップ
    if (!ID || !RENAME) continue;

    try {
      // ファイルIDからファイルオブジェクトを取得してファイル名を変更
      DriveApp.getFileById(String(ID)).setName(String(RENAME));
      SUCCESS_COUNT++;
    } catch (error) {
      // エラーが発生した場合はログに記録
      Logger.log(`ファイル名変更エラー: ${ID} - ${error.message}`);
      ERROR_COUNT++;
    }
  }

  // 完了メッセージを表示
  Browser.msgBox(`ファイル名の変更が完了しました。\n成功: ${SUCCESS_COUNT}件\nエラー: ${ERROR_COUNT}`);
}

kaizen3-2 (2)

③GAS実行(ファイル情報取得)

一度スプレッドシートをリロード(再読み込み) し、表示されたメニューから「ファイル情報取得」を実行します。
ポップアップが表示されるので、対象のGoogleドライブリンクを入力してOKをクリックします。
kaizen3-3

④新しいファイル名を入力

スプレッドシートA~C列に情報が入力されているので、D列にそれぞれの変換したいファイル名を入力します。
kaizen3-5

⑤GAS実行(ファイル名変更)

③同様のメニューから「ファイル名変更」を実行します。
「ファイル名の変更が完了しました。」というポップアップが表示されるので
該当のGoogleドライブを確認すると、指定通りにファイル名が書き換わっているはずです!
kaizen3-7

次回からは③~⑤のみの実行で完了するので、かなりの時間短縮になります!

⏱ 作業時間の比較(100件の場合)

【従来の手動作業】
1件あたり約30秒 × 100件 = 約50分
①ファイル名を1件ずつ変更

【GAS導入後】
• 初回のみ : ①②の設定(約10分)
①ドライブ操作用スプレッドシートの作成
②GASの設定

• 2回目以降: ③④⑤の実行のみ(約3分)
③ GAS実行(ファイル情報取得):約30秒
④ 新しいファイル名を入力   :約30秒
⑤ GAS実行(ファイル名変更) :約2分

🎯 2回目以降の効果
50分 → 3分(約94%削減)

最後に

🚀 非エンジニアの総務が、ここまでできる理由

「総務がプログラミング?」と驚かれるかもしれません。
でも、クラスメソッドグループの総務はIT企業ならではの環境を最大限に活かして、日々進化しています。

💡 私たちが実践していること

・エンジニアに頼らず、自分たちで解決する文化
 「これ、自動化できないかな?」と思ったら、まず自分で調べて試す
・失敗を恐れない挑戦
 最初は関数から。次はGAS。少しずつステップアップ
・社内の技術資産を活用
 弊社エンジニアが書いたブログやドキュメントが最高の教材に
・成果をすぐに業務に反映
 学んだ翌日には実務で使える即戦力スキル

🎯 「IT企業の総務」として目指すもの

私たちは単なる「バックオフィス」ではなく、テクノロジーを武器にする総務です。

✅ 定型業務は徹底的に自動化
✅ 空いた時間でより価値の高い業務に集中
✅ 学んだ知識を社内外に発信し、他の総務の方々の参考に

「総務だから技術はわからない」ではなく、
「総務だからこそ、現場の課題を技術で解決できる」
そんな新しい総務のカタチを、これからも発信していきます!

📚 過去の業務改善記事もぜひご覧ください

[総務 × GAS] 非エンジニアがGASで効率化を叶えるその日までシリーズ
Part1:https://dev.classmethod.jp/articles/soumu-kaizen/
Part2:https://dev.classmethod.jp/articles/soumu-kaizen2/

この記事をシェアする

FacebookHatena blogX

関連記事