バックアップシステムを強化する

第9回 アルゴリズム概論

2026.06.04

はじめに

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

準備

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

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

通常のChrome

Google ドライブ / Apps Script

今日の 作業はこっち

シークレットモード

Google Meet (この講義)

Meet入室は こっち

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

今日の準備

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

準備

下準備の全体像

Google Driveの中の「09_20260604」 フォルダの中に今日使う 3つのもの を揃えます。

  1. GASファイル 09_20260604_gas を作る
  2. 「テスト用Docs」 (Google ドキュメント) を作る
  3. 「バックアップ履歴」 (Google スプレッドシート) を作る

※ 保存先フォルダ (バックアップを置く場所) は、 ワークで 自分で決めて 用意します。 ここではまだ作りません。

手順1

GASファイル「09_20260604_gas」 を作る

ファイルの名前は09_20260604_gasにします

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

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

「テスト用Docs」 を作る

ファイルの名前は「テスト用Docs」にします

「09_20260604」 フォルダの中に、Google ドキュメントを1つ作ります。 これが今日の卒論原稿として想定するファイル (中身は空でOK)。

  1. 「09_20260604」 フォルダをダブルクリックで開く
  2. 「新規」「Google ドキュメント」 をクリック
  3. ファイル名を 「テスト用Docs」 に設定
  4. (自由に1〜2行、 本文に文字を入れてもOK)
手順3

「バックアップ履歴」 シートを作る

「09_20260604」 フォルダの中に、Google スプレッドシートを1つ作ります。 そして1行目に見出しを設定します。

ファイル名は「バックアップ履歴」にします

  1. 「09_20260604」 フォルダをダブルクリックで開く
  2. 「新規」「Google スプレッドシート」 をクリック
  3. ファイル名を 「バックアップ履歴」 に設定
  4. 1行目に見出しを書いてください — A1「日付」 / B1「ファイル名」 / C1「コメント」
確認

準備の完成形

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

マイドライブ 2026アルゴリズム概論 09_20260604
名前 ↑
09_20260604_gas
テスト用Docs
バックアップ履歴

変数について

変数を改めてつかもう

振り返り

先週のワークで気づいたこと

先週のみなさんのNotion入力内容を見ていて、 こんな書き方を多く見かけました

よくある書き方の例

  1. テスト用Docs のファイルを複製する
  2. ファイルの名前を 日付_ファイル名 に変える
  3. ファイルを backup フォルダに移動する
振り返り

解釈が人によって分かれる 可能性がある表現

「2. ファイルの名前日付_ファイル名 に変える」
振り返り

解釈ミスがあると、 こんな 事故 が起きる

振り返り

何を示すのかを常に明示 しよう

未来の自分・他人・AI — 誰が読んでも 同じ理解にたどり着ける書き方を意識!

振り返り

「1で複製したファイル」 に 名前 をつける

毎回「1で複製したファイル」 と書くのは長くて もったいない。 そこで 1度だけ 短い名前 を決めて、 以降はその名前で呼ぶことにします。

  1. テスト用Docs のファイルを複製する
  2. 1で複製したファイル → 「コピー」 と呼ぶことにする
  3. コピー の名前を 日付_ファイル名 に変える
  4. コピー を backup フォルダに移動する

実はこれ、 みなさん 普段から無意識にやってる ことと同じ仕組みです。 → 次のスライドへ

振り返り

これは ニックネーム と同じ仕組み

「短い呼び名」 と 「中身 (長い名前)」 を つなぐ — みなさんも 日常で やってるはず。

日常

「ミセス」

Mrs. GREEN APPLE

グループ内で 通じる 短い呼び名

コードで (今日のテーマ)

「コピー」

1で複製したファイル

自分とコンピューターの間で 通じる 短い呼び名

この 「ニックネームをつけて、 後で短く呼ぶ」 が、 コードでいう 変数

振り返り

指示の書き方によるコンピューターの解釈の違い・Before

振り返り

指示の書き方によるコンピューターの解釈の違い・After

振り返り

コードに翻訳すると、こんな違いになる

元ファイルを触ってしまうコード

file.makeCopy();
file.setName(backupName);
file.moveTo(backupFolder);

file は元のファイルのまま。
卒論本体の名前が変わって、移動してしまう

コピーを名前付きで使うコード

const copy = file.makeCopy(); // コピーと呼ぶ
copy.setName(backupName); // コピーの名前を変える
copy.moveTo(backupFolder); // コピーを移動する

copy = コピー (= 1で複製したファイル)
→ 安全に名前変更 → 安全に移動

日本語で 「コピー」 という ニックネーム をつけることが、 コードでは const copy = ... にあたります。

振り返り

これが 今日の主役 — 変数

変数 = 前の工程で出てきたものに、 後で使える ニックネーム をつける書き方

日本語で言うと

1で複製したファイルに
「コピー」 という ニックネームをつける

コードで言うと

const copy = file.makeCopy();
「あとでまた使いたいもの」 には、 ニックネームをつけておく

この 「ニックネームをつけておく」 考え方が、 コードでは 変数 になります。

まずは準備運動

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

準備運動

準備運動1 — シートに 1行追記してみる

「バックアップ履歴」 シートに、 今日の日付 / ファイル名 / 空のコメント の 1行を、 GAS で追記してみます。

Before — 実行する前

バックアップ履歴
日付 ファイル名 コメント
(空) (空) (空)

After — 実行したあと

バックアップ履歴
日付 ファイル名 コメント
20260604 テスト用Docs (空)
準備運動

GAS に翻訳 — まずは固定値で動かす

まずは 動かす感覚 をつかむために、 固定の文字列 を渡して1行追記してみます。

SpreadsheetApp.openById('履歴シートID').getActiveSheet()

バックアップ履歴シート を

.
appendRow(["20260604", "バックアップ", ""])

この3つの値で1行追加する

appendRow に渡すのは 値の配列。 まずは 固定の文字列 を入れて、 シートに書ける感覚を確かめましょう。

準備運動

翻訳内容をエディタに書く (Stage 1)

GASエディタの myFunction の中に、 以下のコードを書きましょう。

function myFunction() {
  const logSheet = SpreadsheetApp.openById("バックアップ履歴のID").getActiveSheet();
  logSheet.appendRow(["20260604", "テスト用Docs", ""]);
}

コード中の バックアップ履歴のID の部分は、 自分が作ったシートの ID に置き換えましょう
(IDの確認方法はここをクリックして見てね)

保存 (Cmd + S) → ▶ 実行。 初回実行時は 権限承認 が出ます
手順は 第8回スライドの権限承認のページ を参照してください。
準備運動

動作確認 (Stage 1) — シートに 1行追加されましたか?

バックアップ履歴シート を開いて、 変化を確認しましょう。

シートに 「20260604 / テスト用Docs / (空)」 の 1行 が増えていれば 大成功

ただし — "20260604" を直書きしているので、 いつ実行しても記録される日付は20260604のまま になります。 ここを次の Stage で「記録した日の日付を入力できる(動的)」します。

復習

日付を動的にしよう — 先週の道具を思い出そう

第8回で覚えた `formatDate` を使えば、 「今日の日付」 を自動で取れます。

new Date()

今の日時を作る

Utilities.formatDate(today, 'JST', 'yyyy-MM-dd')

「yyyy-MM-dd」 形に整える

const today = new Date() で 今の日時を作って、 formatDate で文字列に整えると、 "20260604" 相当の値が得られます。

準備運動

翻訳内容をエディタに書く (Stage 2)

Stage 1 のコードを書き換えて、 日付を formatDate で動的に取れるようにします。 保存 → 実行 しましょう。

function myFunction() {
  const today = new Date();
  const dateStr = Utilities.formatDate(today, "JST", "yyyy-MM-dd");
  const logSheet = SpreadsheetApp.openById("バックアップ履歴のID").getActiveSheet();
  logSheet.appendRow([dateStr, "テスト用Docs", ""]);
}

黄色のところ が Stage 1 から 変わった/追加された部分。 固定値 "20260604" が変数 dateStr に置き換わっただけ。

準備運動

動作確認 (Stage 2) — 動的な日付になっていますか?

シートを開くと、 2行目 が追加されているはず。

今度は コードに日付を書いていないのに、 ちゃんと今日の日付が入っている
これが「動的に取る」 ということです。

明日もう一度実行すれば、 自動的に「2026-06-05」 で1行追加されます。

ヒント

もっと細かく — 時刻まで 取りたいときは

formatDate の 3つ目の引数 (フォーマット文字列) を変えるだけで、 取れる粒度が変わります。

準備運動でやったやつ — 日付のみ

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

"2026-06-04"

時刻まで欲しいなら

Utilities.formatDate(today, "JST", "yyyy-MM-dd HH:mm:ss")

"2026-06-04 02:00:15"

ワークの履歴シートで 時刻まで残したい人 は、 ここを応用すればOK。 ファイル名は日付のみ / シートには時刻まで、 のように 用途で粒度を変える 使い分けも可能です。

準備運動

準備運動2 — トリガーで 自動実行する

さっきは 「▶ 実行」 を 自分で押して 動かしていました。
今度は 「設定した時刻になると 自動で走る」 仕組み (= トリガー) を試します。

今回は コードは触りません。 GASエディタの トリガー画面 を触って、 設定するだけ。
手順1

左サイドバーの 「トリガー」 をクリック

GASエディタ左サイドバーの トリガー(時計アイコン)

GASエディタの 左サイドバーから 「トリガー」 (時計アイコン) をクリックして、 トリガー設定の画面を開きます。

手順2

「+ トリガーを追加」 をクリック

トリガー画面(空)で 新しいトリガーを作成 リンク または +トリガーを追加 ボタン

トリガー画面が開きます。 「新しいトリガーを作成します」 のリンク or 右下の 「+ トリガーを追加」 ボタン、 どちらかをクリックしてください。

手順3

ダイアログが開く — デフォルトのままでほぼOK

トリガー追加ダイアログ(デフォルト状態)

「時間単位で自動実行」 したいので、 ほとんどの設定はデフォルトのまま で大丈夫です。

実行する関数myFunction

実行するデプロイ — Head

イベントのソース — 時間主導型

手順4

「分ベースのタイマー」 / 「1分おき」 に変更 → 保存

時間ベースのタイマーを 分ベース に変更、 1分おき に設定

上の 2箇所だけ 変更して、 下の 「保存」 をクリックします。

時間ベースのトリガーのタイプ分ベースのタイマー

時間の間隔を選択 (分)1分おき

本来は「毎日 X時」 のような長い間隔で設定しますが、 今は 動作確認のため 1分おき にします。

準備運動

動作確認 — 自動で動きますか?

トリガーを保存したら、 何もしないで バックアップ履歴シートを開いて待ちます。 1分後くらいに、 シートに新しい1行が追加されるはず。

「自分が ▶ を押してないのに、 勝手にシートに行が増えた!」
これがトリガーで自動実行された体験です。

確認できたら、 必ず このトリガーを削除 します (放っておくと永遠に1分おきに走り続けます)。 次のスライドで削除手順を確認しましょう。

削除1

「⋮」 メニュー → 「トリガーを削除」

トリガー一覧の右端 ⋮ メニューから トリガーを削除

トリガー一覧で、 削除したい行の 右端の「⋮」 をクリック → メニューから 「トリガーを削除」 を選びます。

削除2

確認モーダルで 「完全に削除」

完全に削除しますか? の確認モーダル

「完全に削除しますか?」 の確認モーダルが出ます。 右下の 「完全に削除」 をクリックしてください。

※ 削除しないと 1分おきに走り続けて、 履歴シートの行が無限に増えていきます。 必ず削除を。

ワーク

整理

ワーク前の整理 — 準備運動の後片付け

ワークに集中する前に、 準備運動の痕跡を片付けます。

  1. 準備運動2 で設定した「1分ごと」 のトリガーを削除 — 放置すると永遠に走り続けます (トリガー画面で当該行の右の「⋮」 → 「削除」)
  2. 履歴シートは 1行目 (見出し) だけ残して、 他の行は全部削除
お題

今日のお題 — バックアップシステムをさらに強化しよう

第8回で作った「バックアップを取る仕組み」 を、 今日はさらに強化します。

目的
いつバックアップが取られたのか / その時点で何をしていたのかをしっかり記録することで、 後から見たときに いつでも誰でも思い出せる状態 にする
お題

なぜ強化が必要か

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

  • バックアップを忘れる可能性 — 自分でボタン押して実行しないと、バックアップはされない
  • 日毎の違いが不明瞭 — ファイルを開かないとファイルごとの違いがわからない

これを解決するために、 今日は 「自動で動く」 + 「いつ何をしていたかをシートに残す」 を1つの仕組みに統合します。

お題

強化の3つの中身

1.自動で動かす

毎日自動で実行して、バックアップの取り忘れを防ぐ

毎日 深夜2時に 勝手に走る

2.バックアップ時刻を記録

どの時点のバックアップなのか、後から分かるようにする

2026-06-04 02:00:15

3. コメント欄の用意

その時点で何をしていたかを、後から書き残せるようにする

「序章の構成変えた」

お題

自分のバックアップルールを決める

どんな仕組みなら、あとで見返しやすく、続けやすいでしょうか。 以下の4つを、自分なりに決めてみましょう。

  1. バックアップファイルの名前をどうする?
    例: 日付だけ / 日付+元のファイル名 / 並べたときに分かりやすい順番
  2. どのフォルダに保存する?
    例: 先週の backup フォルダ / 新しく作ったフォルダ / 自分が見つけやすい場所
  3. トリガーをいつ実行する?
    例: 深夜 / 朝 / 数時間ごと / 自分が作業していない時間帯
  4. コメント欄には何を書く?
    例: その日に進めたこと / 迷ったこと / 後で思い出したいメモ

正解は1つではありません。 なぜそのルールにしたのか を説明できることが大事です。

振り返り

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

今回の新しい道具

  • SpreadsheetApp.openById('...').getActiveSheet() — シートを取ってくる
  • sheet.appendRow([...]) — シートに 1行追記する
  • トリガー設定 — 関数を 自動で走らせる

第8回からの道具 (バックアップ用)

  • DriveApp.getFileById('...') / DriveApp.getFolderById('...')
  • file.makeCopy() / file.setName('...') / file.moveTo(folder)
  • new Date() / Utilities.formatDate(today, 'JST', 'yyyy-MM-dd')
  • const ... = ... (変数)
ワーク

ワークの進め方

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

作業開始

日本語で指示書 → GAS実装

チューターさんチェック

指示書・コード を見てもらう

提出

共有URL発行

あなた

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

チューターさん

各グループを 回って 指示書 や コードを見てくれる

小菅さん

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

実装について

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

個人作業

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

ワークで書いた日本語の指示書を、 GAS のコードに 1行ずつ翻訳していきます。 第8回の道具 + 今日の新道具 を組み合わせて、 自動バックアップ + 履歴記録の関数を組み立ててください。

  • 関数名 — 好きな名前をつけましょう (例: dailyBackup)。 準備運動で動かした myFunctionそのまま残して、 その下に 新しい関数を作って 書いていきます。 動いたものを消さずに済むので、 つまずいても安心です
  • 1個書いたら 「▶ 実行」 で動きを確認 → Drive と バックアップ履歴シート を見にいく
  • トリガーを設定するのは 動作確認が終わってから。 まずは ▶ 実行 で 関数が完成しているか確かめる
大事なこと

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

第8回で道具の触り方を1つずつ体験したので、 今日はAI相談を非推奨にはしません

ただし「丸投げ」 は NG

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

提出物について

次回までの課題と提出物

やること

やること

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

  • GASコード + 履歴シート + 動いてるトリガー (= 09_20260604 フォルダの中身)
  • Notionページの内容 (自分の指示書 / コードのメモ / 振り返り)
提出方法

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

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

手順

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

フォルダごと共有することで、 講師・チューターが GASコード + 履歴シート + バックアップファイル + トリガー設定 を全部見られます。

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