溜まったバックアップを整理する

第10回 アルゴリズム概論

2026.06.11

はじめに

ブラウザの使い分けについて

準備

Chrome を 「2つ」 開いて使い分けます

Phase2の講義は、 Chrome の 「通常モード」「シークレットモード」2つ を同時に開いて、 用途で使い分けます。

通常のChrome

Google ドライブ / Apps Script

今日の 作業はこっち

シークレットモード

Google Meet (この講義)

Meet入室は こっち

※ Drive や GASエディタを シークレットモードで開かない ように注意 — シークレットモードはGoogleアカウントにログインしていないので、 今日の作業ファイルが見えません。ChatGPTなどのAIツールも通常のChromeで開くようにしてください!

今日の準備

先にここを揃えてから今日の本題に入ります

準備

下準備の全体像

Google Driveの 「10_20260611」 フォルダの中に、 今日使う 2種類のもの を揃えます。

  1. GASファイル 10_20260611_gas を作る
  2. 講義ページ から 10_20260611_data.zip をダウンロード
  3. ダウンロードした zip を解凍する(中に 4つのフォルダ が入っています)
  4. 解凍した 4つのフォルダを、 Google Drive の 「10_20260611」 フォルダの中に アップロードする
手順1

GASファイル「10_20260611_gas」 を作る

ファイルの名前は 10_20260611_gas にします

「10_20260611」 フォルダの中に、Google Apps Scriptファイルを1つ作ります。

  1. 「10_20260611」 フォルダをダブルクリックで開く
  2. 「新規」「その他」「Google Apps Script」 をクリック
  3. ファイル名を 10_20260611_gas に設定
手順2

配布素材を Drive にアップロード

講義ページから 10_20260611_data.zip をダウンロードし、 解凍した 4つのフォルダ「10_20260611」 の中にアップロードします。 各フォルダの中身(画像・PDF・テキスト等)も一緒に入ります。

1コマ目 — 検索練習用(3フォルダ)

  • 練習1_画像の束
  • 練習2_雑多なファイル群
  • 練習3_名前で検索

2コマ目 — ワーク用

  • バックアップ蓄積
  • 2〜3ヶ月分・45件のファイルが入った状態

フォルダごとドラッグ&ドロップで OK。 各フォルダを開いて URL から フォルダID をメモしておくと、 準備運動のコードに貼りやすいです。

確認

準備の完成形

Drive で 「10_20260611」 を開くと、 こんな見た目になっているはず。 違っていたらここで直しておきましょう。

マイドライブ 2026アルゴリズム概論 10_20260611
名前 ↑
10_20260611_gas
練習1_画像の束
練習2_雑多な…
練習3_名前で…
バックアップ蓄積

第8〜10回の流れ

自分が作ったバックアップを題材に、 仕組みを完成させる

振り返り

ここまでに作ってきたもの

第8回

バックアップを作る
複製 + 日付名 + 移動

第9回

バックアップを強化
自動化 + 履歴記録

第10回(今日)

溜まったバックアップを整理
検索 + 月別フォルダ振り分け

前回までの結果、バックアップデータが無駄に溜まる状況になりましたよね。
今回は溜まったデータを整理するのを目指します!

まずは準備運動

今日の新しい道具を1つずつ触ってみよう

準備運動

今日の主役は「検索」 — searchFiles

フォルダの中から、 条件に合うファイルを 検索するための道具が searchFiles です。

準備運動

GAS に翻訳 — 指定フォルダの中から条件に合うものを検索する

const files =
DriveApp.getFolderById('フォルダID')

検索対象フォルダから

.
searchFiles('mimeType contains "image/"')

画像ファイルを検索

フォルダのID の部分は、検索したい対象のフォルダのIDを指定します。

searchFiles を実行すると、 条件に合うファイルが 複数見つかる ことがあります。 1個だけ見つかっても、 同じやり方で1個ずつ確認します。

準備運動

検索の条件の書き方

searchFiles('...')カッコの中 には、 どんなファイルを探すかの条件を書きます。

名前で絞る

'title contains "請求書"'

ファイル名に「請求書」を含むもの

種類で絞る

'mimeType contains "image/"'

画像ファイル(jpg / png など)

更新日で絞る

'modifiedDate > "2026-06-01"'

2026年6月1日以降に更新されたもの

作成日で絞る

'createdDate < "2026-01-01"'

2026年1月1日以前に作られたもの

準備運動

GAS に翻訳 — 見つかったファイルに1個ずつ同じ処理をする

searchFiles で検索した結果見つかったファイルに、 1個ずつ同じ処理 を繰り返します。

while (files.hasNext()) {

検索結果として見つかったファイルに対して、 1個ずつ順番に処理する(全部終わるまで繰り返す)

const file = files.next();

今回処理したいファイルを指定

file.setName("電波電波の" + file.getName());

ファイル名の先頭に「電波電波の」をつける(第8回と同じ)

}
準備運動

翻訳内容をエディタに書く

function myFunction() {
  const folder = DriveApp.getFolderById("検索したいフォルダのID");
  const files = folder.searchFiles('mimeType contains "image/"');

  while (files.hasNext()) {
    const file = files.next();
    file.setName("電波電波の" + file.getName());
  }
}

下準備で作った 10_20260611_gas を開きます。 最初から入っている function myFunction() { ... }中身 を、 上記のように書き換えましょう。

準備運動

準備運動1 — 画像の束 / 「種類」 で検索する

特定の種類のファイルのみを検索して指示をしましょう!今回は画像だけに絞ってみます。

準備運動

準備運動1 — 翻訳内容をエディタに書く

10_20260611_gasmyFunction の中身を、 以下に 書き換え ます。

function myFunction() {
  const folder = DriveApp.getFolderById("練習1_画像の束のID");
  const files = folder.searchFiles('mimeType contains "image/"');

  while (files.hasNext()) {
    const file = files.next();
    const fileName = file.getName();
    file.setName("電波電波の" + fileName);
  }
}

練習1_画像の束のID練習1_画像の束 フォルダを Drive で開き、 URL からコピーした ID に置き換えます。

準備運動

「▶ 実行」 ボタンを押す

GASエディタの実行ボタン

コードを書き終えたら、 GASエディタ上部の 「▶ 実行」 ボタンを押します
初回実行時だけ 「権限の確認画面」 が表示されます。

その前に必ず保存! — コードを書き換えたら、 まず Cmd + S (Mac) / Ctrl + S (Win) で保存してください。 保存し忘れると 古いコードのまま実行 されることがあります。
権限承認

「権限の確認画面」 が出たら (初回のみ)

第8回と同じ画面です。 「権限を確認」 をクリックして進みます。 手順の詳細は第8回スライドを参照してください。

権限の確認ダイアログ

第8回スライド — 権限承認の手順

第8・9回ですでに承認済みなら、 この画面は出ないこともあります。

準備運動

動作確認 — ファイル名が変わりましたか?

第8回と同じく、 Drive を開いて 変化を確認します。 練習1_画像の束 フォルダを開きましょう。

画像ファイルの先頭に「電波電波の」がついていれば大成功!
メモ.txt種類が違うので変わっていない はず — 絞り込みも動いています。
準備運動

準備運動2 — 雑多なファイル群 / 「名前」 で仕分ける

特定の名前が含まれるファイルのみを検索して指示をしましょう!

準備運動

準備運動2 — 準備運動1をコメントアウトする

準備運動1のコードは、行の先頭に//をつけてメモ化します。

  // 準備運動1(記録として残す)
  // const folder = DriveApp.getFolderById("練習1_画像の束のID");
  // const files = folder.searchFiles('mimeType contains "image/"');
  // while (files.hasNext()) {
  //   const file = files.next();
  //   const fileName = file.getName();
  //   file.setName("電波電波の" + fileName);
  // }
準備運動

準備運動2 — 翻訳内容を追加する

メモ化したコードの下に、準備運動2のコードを追加します。

  // 準備運動2
  const folder = DriveApp.getFolderById("練習2_雑多なファイル群のID");
  const files = folder.searchFiles('title contains "議事"');

  while (files.hasNext()) {
    const file = files.next();
    const fileName = file.getName();
    file.setName("電波電波の" + fileName);
  }

練習2_雑多なファイル群のID
練習2_雑多なファイル群 フォルダを Drive で開き、 URLからコピーしたIDに置き換えます。

準備運動

「▶ 実行」 ボタンを押す

準備運動1と同じく、保存してからGASエディタ上部の「▶ 実行」ボタンを押しましょう

権限の承認画面は 1度承認済み なので、 もう出ません。

準備運動

動作確認 — 「議事」のファイル名が変わりましたか?

練習2_雑多なファイル群 フォルダを開いて、 議事録.pdf議事メモ.txt の名前が変わっているか確認しましょう。

2件とも先頭に「電波電波の」がついていれば大成功!
見積書.pdf名前に「議事」がないので変わっていない はず — 絞り込みも動いています。
準備運動

余力があれば — 種類でも試す

準備運動2の 検索の条件 だけ PDF用 に書き換えてもう1回試してみましょう mimeType = "application/pdf"見積書.pdf も対象になる)

名前で絞った行は // でコメントアウトして残します。

準備運動

準備運動3 — ファイル名に年月が入っているフォルダ

練習3_名前で検索 フォルダには、 ファイル名の先頭に 年月日 が入ったファイルがあります。

2026-06-01_テスト用Docs / 2026-04-12_テスト用Docs / 請求書_4月分.txt など

準備運動1は 種類、 準備運動2は 名前 で絞り、 setName で名前を変えました。 準備運動3では 月別フォルダを作って、 中身を移す 流れを、 1つずつ試します。

準備運動

第8回との違い — 移動先フォルダを誰が作る?

第8回の moveTo では、 移動先の backup_test を Drive で 手動 で作りました。

今日は GAS でフォルダを作ってから、 ファイルを移します。
そのための新しい道具が createFolder です。
準備運動

GAS に翻訳 — フォルダを新しく作る

月別フォルダは事前に作りません。 createFolder必要なときに 作ります。

DriveApp.getFolderById("練習3_名前で検索のID")

整理したいフォルダを指定

.
createFolder("2026-05")

その中に新フォルダ

createFolder のカッコの中が、 新しいフォルダの名前 です。 中身は のフォルダができます。

準備運動

準備運動3 — 準備運動2をコメントアウトする

準備運動2のコードを // でコメントアウトします。 準備運動1のコメントアウトはそのまま残します。

  // 準備運動2(記録として残す)
  // const folder = DriveApp.getFolderById("練習2_雑多なファイル群のID");
  // const files = folder.searchFiles('title contains "議事"');
  // while (files.hasNext()) {
  //   const file = files.next();
  //   const fileName = file.getName();
  //   file.setName("電波電波の" + fileName);
  // }
準備運動

createFolder だけ — 翻訳内容を書く

まず createFolder だけ 書いて、 フォルダが作れることを確認します。 検索や moveToまだ書きません

  // 準備運動3 — createFolder だけ
  const baseFolder = DriveApp.getFolderById("練習3_名前で検索のID");
  baseFolder.createFolder("2026-05");

練習3_名前で検索のID練習3_名前で検索 フォルダを Drive で開き、 URL からコピーした ID に置き換えます。

準備運動

「▶ 実行」 ボタンを押す

保存してから 「▶ 実行」 ボタンを押しましょう。

準備運動

動作確認 — 空のフォルダができましたか?

練習3_名前で検索 フォルダを Drive で開いて確認しましょう。

2026-05 という名前のフォルダが 新しく1つ あれば大成功!
中身が でも問題ありません — createFolder が動いています。
復習

moveTo を思い出す — 第8回

第8回で学んだ moveTo で、 ファイルを別フォルダへ移します。

見つけたファイル を、 作ったフォルダ に、 移す
準備運動

5月分を検索する — 条件を決める

練習3_名前で検索 から、 ファイル名に 2026-05 を含むものを探します。

title contains "2026-05"
2026-05-03_テスト用Docs / 2026-05-19_テスト用Docs の2件)
準備運動

search と moveTo を足す — 翻訳内容を書き換える

createFolder だけの2行は // でコメントアウトして残し、 下に まとめて 書き直します。

  // 準備運動3
  const baseFolder = DriveApp.getFolderById("練習3_名前で検索のID");
  const monthFolder = baseFolder.createFolder("2026-05");
  const files = baseFolder.searchFiles('title contains "2026-05"');

  while (files.hasNext()) {
    const file = files.next();
    file.moveTo(monthFolder);
  }
  • createFolder — さきほど試した「フォルダを作る」(今回は返り値を monthFolder に記憶)
  • moveTo — 第8回の「移動先フォルダへ移す」

使う ID は 練習3_名前で検索 の1つだけ — 月別フォルダはこの中に作り、 この中で移動します。

準備運動

「▶ 実行」 ボタンを押す

保存してから 「▶ 実行」 ボタンを押しましょう。

2026-05 フォルダがもう1つできることがあります — 中にファイルが入っていればOKです。

準備運動

動作確認 — 5月分が移動しましたか?

練習3_名前で検索 フォルダを開いて確認しましょう。

2026-05 フォルダができていて、 中に2ファイル
2026-05-03_テスト用Docs / 2026-05-19_テスト用Docs があれば 大成功

フォルダの直下には 6月分がまだ残っている はずです。 4月・請求書なども残ったまま。

ただし — "2026-05" を直書きしているので、 6月になっても 5月分しか動きません。 今月(6月)分を動かすには、 次で formatDate を使います。

復習

今月を動的に取ろう — 第9回の道具を思い出す

毎月コードを書き換えるのは大変。 第9回で使った formatDate を使えば、 「今月の年月」 を自動で取れます。

new Date()

今の日時を作る

Utilities.formatDate(today, "JST", "yyyy-MM")

「2026-06」 形に整える

第9回は yyyy-MM-dd でした。 今日は 月まで 欲しいので yyyy-MM にします。 授業日は6月なので、 monthStr"2026-06" になります — さきほど直書きしなかった 6月分 が動くはずです。

準備運動

準備運動3 — 翻訳内容を書き換える(formatDate)

フォルダ名と検索の行 を書き換えます。 固定の "2026-05" を、 formatDate で作った変数 monthStr に置き換えます。

  // 準備運動3(formatDate)
  const baseFolder = DriveApp.getFolderById("練習3_名前で検索のID");
  const today = new Date();
  const monthStr = Utilities.formatDate(today, "JST", "yyyy-MM");
  const monthFolder = baseFolder.createFolder(monthStr);
  const files = baseFolder.searchFiles('title contains "' + monthStr + '"');

  while (files.hasNext()) {
    const file = files.next();
    file.moveTo(monthFolder);
  }

黄色変わった/追加された部分。 固定の "2026-05" のブロックは // でコメントアウトして残します。

準備運動

「▶ 実行」 ボタンを押す

保存してから 「▶ 実行」 ボタンを押しましょう。

準備運動

動作確認 — 6月分が移動しましたか?

練習3_名前で検索 フォルダを開いて確認しましょう。

2026-06 フォルダが新しくでき、 中に 2026-06-01_テスト用Docs / 2026-06-11_テスト用Docs が入っていれば 大成功
コードに "2026-06" を書いていないのに 今月分だけ 動いた — これが formatDate の効果です。

再実行すると 2026-06 フォルダがもう1つできることがあります — 動けばOKです。 これで1コマ目の準備運動は完了です。

準備運動

2コマ目への橋渡し — 同じ型をバックアップ蓄積へ

準備運動3で、 検索 → createFolder → moveTo と、 formatDate の型が揃いました。 2コマ目のワークでは 整理対象フォルダを バックアップ蓄積 に変える だけです。

新しい関数を作り、 45件のバックアップを同じ要領で月別フォルダへ — 最後に 月1トリガー を足します。

ワーク

整理

ワーク前の整理

ワークに入る前に、 1コマ目の状態を確認しておきましょう。

  1. 1コマ目の myFunction はそのまま残してOK — ワーク用の関数は、 その下に新しく追加していきます
  2. バックアップ蓄積 フォルダはまだ触っていないか確認 — 2コマ目の整理対象はここ
お題

今日のお題 — 溜まったバックアップを月別整理する

第8・9回で作ってきた バックアップの仕組み。 今日はその蓄積版を題材に、 月別フォルダへ自動振り分ける GAS を作ります。

目的 — バックアップが溜まっても、 月1で自動的に整理され、
後から見たときに いつでも誰でも思い出せる状態 にする
お題

なぜ月別整理が必要か

第9回までのバックアップは、 こんな弱点を抱えていました:

  • ファイルが1つのフォルダに溜まる — 増えるほど探しにくくなる
  • いつのバックアップか一目で分からない — ファイル名だけでは時期の把握が大変

これを解決するために、 今日は 「検索で今月分を取り出す」 + 「月別フォルダに自動で振り分ける」 を1つの仕組みにします。

お題

配布フォルダについて

自分のバックアップフォルダには、 実際には 2日分くらい しか溜まっていません。 「月別に分ける」 が意味のある作業になるよう、 「もし1年続いていたら」 の状態を配布しています。

  • ファイル数 30〜60個程度、 月をまたいで存在
  • ファイル名フォーマットは、 第8・9回で書いてきた形式と同じ
  • 中身は空でOK — 名前と日付が重要
お題

整理の3つのポイント

1. 動的にフォルダを作る

月別フォルダは事前に作らない — GAS で必要なときに作る

2. 今月分だけ整理

全部まとめて移さない — 1ヶ月分だけ 検索して移動する

3. 月1トリガー

毎月自動で走らせて、 溜まったバックアップを放置しない

お題

進め方 — 2段階で進める

検索と formatDate は準備運動3で触りました。 ワークでは moveToトリガー を足していきます。

まず — 手動で6月分が移動すればOK

準備運動3と同じ型で、 整理対象を バックアップ蓄積 に変えて6月分が移るまで。

▶ 実行 で、 バックアップ蓄積から6月分が移るまで

次に — 月1トリガーで自動化

手動実行が動いたら、 月1トリガー を設定。 第9回と同じく、 まず1分トリガーで確認してから月1に切り替えます。

提出目標はトリガー設定まで

具体的な書き方はスライドでは載せません — 第9回のコード・指示書・AI相談・チューターで。 手動実行で止まった人も、 トリガー設定から進められます。

お題

自分で考えるルール (4つの問い)

日本語の指示書を書く順番に、 4問を並べています。 自分なりに答えてみましょう。

  1. どのフォルダを「整理対象」にする? (バックアップを置いているフォルダ? 親フォルダと同じ場所?)
  2. 検索条件はどうする? (準備運動3の formatDate + title contains をそのまま使う?)
  3. 月別フォルダの名前はどうする? (2026-06? 2026年06月? 並んで見やすい形式は?)
  4. トリガーをいつ走らせる? (毎月1日の何時? 自分が作業しない時間帯は?)

正解は1つではありません。 なぜそうしたか を自分の言葉で説明できることが大事です。

振り返り

準備運動でこれだけ触りました

今回の新しい道具

  • 準備運動1 — 種類mimeType contains "image/"
  • 準備運動2 — 名前title contains "議事"
  • 準備運動3 — formatDate + createFolder + moveTo(月別フォルダへ移動)
  • folder.searchFiles('条件') — フォルダ内のファイルを検索
  • files.hasNext() / files.next() — 検索結果のループ
  • baseFolder.createFolder('名前') — 新しいフォルダを作る

第8・9回からの道具 (ワークでも使う)

  • DriveApp.getFolderById('...') / file.moveTo(folder)
  • new Date() / Utilities.formatDate(..., 'yyyy-MM')
  • トリガー設定
ワーク

ワークの進め方

5人1組のグループ に分かれて、 Notion ページ (ここをクリックして開いて自分のページに移動してね) に沿って 日本語で指示書 → GAS実装 → 動作確認 の順で進めましょう!

15分

個人作業

Step1 — 日本語で指示書

60分

チューター回遊

指示書 + コードをチェック

15分

提出

共有URL発行

あなた

日本語で指示書 → GAS翻訳 → 動作確認 → 提出

チューターさん

各グループを 回遊。 指示書もコードもまとめて見てくれる

小菅さん

常に色々回って合間を埋める。 詰まったら声かけてOK

実装について

指示書を Google Apps Script に翻訳する

個人作業

指示書に書いた手順を翻訳する

ワークで書いた日本語の指示書を、 GAS のコードに1行ずつ翻訳していきます。 1コマ目の searchFiles + 第8・9回の道具 を組み合わせて、 月別整理の関数を組み立ててください。

  • 関数名 — 好きな名前をつけましょう (例: organizeBackups)。 準備運動の myFunctionそのまま残して、 その下に 新しい関数を作って 書いていきます
  • 1個書いたら 「▶ 実行」 で動きを確認 → Drive のフォルダ構成を見にいく
  • まず — 準備運動3と同じ型で、 整理対象を バックアップ蓄積 に変えて6月分が移るまで。 次に — 月1トリガーを設定(第9回と同じ要領で1分トリガーで確認 → 月1に切り替え)
  • トリガーを設定するのは 手動実行が動いてから。 まずは ▶ 実行 で関数が完成しているか確かめる
大事なこと

AI相談について — 今日は OK

今日は AI相談OK です。 1コマ目で道具の触り方を体験したので、 ここからは 「組み合わせを AI に相談しながら作る」 段階に進みます。

ただし「丸投げ」 は NG

  • まず 自分で日本語の指示書を書く (ワークの Step1) — これは自分でやる
  • その上で「この日本語を GAS に翻訳するには?」 を AI に相談 — OK
  • 「いい感じの整理システム作って」 みたいな丸投げは ✕

AI に投げたやり取りは、 後で 共有URL を提出物として出してもらいます。 自分の問いかけが綺麗に出ているかも見てください。

提出物について

次回までの課題と提出物

やること

やること

今日の提出対象は以下の通りです

  • GASコード + 月別整理が動いている Drive フォルダ (= 10_20260611 フォルダの中身)
  • Notionページの内容 (自分の指示書 / コードのメモ / 振り返り)
  • AI とのやり取りスレッドの共有URL
提出方法

GASコードは — 「フォルダの共有URL」 で提出

共有URL を発行し、 URLを課題提出フォームから提出してください。

手順

  1. Drive で 「10_20260611」 フォルダを右クリック → 「共有」「共有」
  2. 「一般的なアクセス」 を 「リンクを知っている全員」 に変更
  3. 役割は 「閲覧者」 のままでOK
  4. 「リンクをコピー」 をクリックして提出

以上! おつかれさまでした!