第8回 アルゴリズム概論
2026.05.28
ブラウザの使い分けについて
Phase2の講義は、 Chrome の 「通常モード」 と 「シークレットモード」 の 2つ を同時に開いて、 用途で使い分けます。
Google ドライブ / Apps Script
今日の 作業はこっち
Google Meet (この講義)
Meet入室は こっち
※ Drive や GASエディタを シークレットモードで開かない ように注意 — シークレットモードはGoogleアカウントにログインしていないので、 今日の作業ファイルが見えません。ChatGPTなどのAIツールも通常のChromeで開くようにしてください!
先にここを揃えてから今日の本題に入ります
Phase2では Googleの世界(スプレッドシート・Drive・Gmail) を操作していきます。
少し「実務的」な内容になっていきます。まずは必要な準備をしていきます!
大前提として、 Googleアカウントがないと進められません。 まだの方は今すぐ作成してください。
フォルダ名 — 「2026アルゴリズム概論」
講義用フォルダの中に、 今後のためのフォルダを作ります
今日使う 「08_20260528」 フォルダの中に、 Google Apps Script を1つ作ります。 ファイルの名前は
08_20260528_gas です。
※ 09・10 のフォルダには、 次回・次々回の授業のときに作ります。今日は触らないでOK。
08_20260528_gas にする
「08_20260528」 フォルダの中に、「テスト用Docs」という名前でGoogleドキュメントを1つ作成してください
(中身は空でOK)。
Drive で 「08_20260528」 を開くと、 こんな見た目になっているはず。 違っていたらここで直しておきましょう。
この 2つのファイル が入っていれば、 今日の本題に入れます!
Phase1
Webアプリ
HTML / CSS / JavaScript
Phase2
Google系を使った自動化
Drive / スプレッドシート / Docs / Gmail
まずは画面構成の確認から
シンプルな操作をしてみよう
先ほど作った 「テスト用Docs」 を、 GASを使って 複製 してみまましょう
Before — 実行する前
08_20260528_gas
テスト用Docs
After — 実行したあと
08_20260528_gas
テスト用Docs
テスト用Docs のコピー
Phase1 と同じく、コンピューターへの指示を Where / What / How で言葉にしましょう。
※ Where(どこに) は今回 省略 しても大丈夫です。 省略時は、元のファイルと同じフォルダに自動で置かれます。
DriveApp.getFileById('テスト用DocsのID')
テスト用Docs を
.
makeCopy()
複製する
IDをコピーしたら、「テスト用DocsのID」の部分をコピーしたIDに置き換えましょう!
翻訳内容をGASエディタにある myFunction の中に書きましょう。ここに書いた内容がそのままコンピューターへの指示として伝わります。
function myFunction() {
DriveApp.getFileById('テスト用DocsのID').makeCopy();
}
コード中の テスト用DocsのID の部分を コピーしたDocsのIDに置き換えましょう!
コンピューターに指示をしたいときは、 GASエディタ上部のツールバーにある 「▶ 実行」 ボタンを押します。初回実行時だけ 「権限の確認画面」 が表示されます。次のスライドで詳しく説明します。
Cmd + S (Mac) / Ctrl + S (Win) で保存してください。 保存し忘れると 古いコードのまま実行 されることがあります。
GAS を使ってコンピューターに指示をするとき、初回に限り、 Google が 「このプログラムにあなたの Drive を触らせていいですか?」 と確認してきます。 これは大事なセキュリティの仕組みです。 「権限を確認」 をクリックして進みます。
なぜこの確認が必要?
悪意のあるプログラムにうっかり権限を渡すと、 自分の Drive のファイルを勝手に削除されたり、 Gmail からメールを勝手に送信されたりする可能性があるから。
1. 自分の Googleアカウント を選ぶ
2. 「Google で確認されていません」 → 左下の「詳細」を選択
3.「(安全ではないページ) に移動」をクリック
4. 「すべて選択」 にチェック (出る場合のみ)
5. 一番下までスクロール → 「許可」 をクリック
「安全ではない」 と表示されますが、 自分のアカウントで作った自分のコード なので大丈夫です。 1度承認すれば、 次回以降はこの画面は出ません。
承認が終わると、 myFunctionの中に書いた指示が実行されます。 Drive の 08_20260528 フォルダを開いて、変化を確認してみましょう。
動かなかった場合は、 ID の置き換え漏れや、 GASエディタの赤字のエラー文を確認してみてください。 困ったらチューターや講師に声をかけてください。
さっき準備運動1で複製した 「テスト用Docs のコピー」 を、GAS で「電波電波の怪電波」 に 名前変更 してみましょう。
※ 元の「テスト用Docs」 は触りません。
Before — 実行する前
テスト用Docs のコピー
After — 実行したあと
電波電波の怪電波
準備運動1と同じく、 やりたいことを日本語で言葉にしてから翻訳に入ります。
DriveApp.getFileById('コピーのID')
テスト用Docs のコピー を
.
setName('電波電波の怪電波')
名前を変える
今回は 「テスト用Docs のコピー」 の ID をコピーして、「コピーのID」の部分に置き換えましょう!
準備運動1で書いたmakeCopyの行は コメントアウト で残して (記録として)、 その下に今回の setName の行を 追加 しましょう。
// をつけること。 これでその行は実行されず、 メモ扱いになります。
※ コメントアウトをしないと、 後で const file などが重複して エラー が出るので注意。
function myFunction() {
// 準備運動1(記録として残す)
// DriveApp.getFileById('テスト用DocsのID').makeCopy();
// 準備運動2
DriveApp.getFileById('コピーのID').setName('電波電波の怪電波');
}
コピーのID の部分を 「テスト用Docs のコピー」 から取ったID に置き換えましょう!
準備運動1 と同じく、 GASエディタ上部の 「▶ 実行」 ボタンを押しましょう。
権限の承認画面は 1度承認済み なので、もう出ません。
「テスト用Docs」 を 別のフォルダ (backup_test) に 移動 させてみます。
Before — 実行する前
テスト用Docs
After — 実行したあと
テスト用Docs
「08_20260528」フォルダの中に、「backup_test」という名前で新しいフォルダを作っておいてください。これが移動先になります。(右クリック→新しいフォルダ、で作成可能)
これまでと同じく、 やりたいことを日本語で言葉にしてから翻訳に入ります。
DriveApp.getFileById('テスト用DocsのID')
テスト用Docs を
.
moveTo
移す
(
DriveApp.getFolderById('backup_testのID')
backup_test フォルダに
)
動きはしますが、 1行が長くて カッコの中にまたカッコ が入っていて、 どこで何をしているのか追いづらいですね。 さっきと同じく、 変数で分ける 出番です。
const file = DriveApp.getFileById('テスト用DocsのID');
const folder = DriveApp.getFolderById('backup_testのID');
file.moveTo(folder);
file という名前で 記憶folder という名前で 記憶file を folder に 「移して」 とお願い今までのコードは コメントアウト で残しておいて、 その下に今回の 3行を追加 しましょう。
function myFunction() {
// 準備運動2までのコード(記録として残す)
// const file = DriveApp.getFileById('コピーのID');
// file.makeCopy();
// file.setName('電波電波の怪電波');
// 準備運動3
const file = DriveApp.getFileById('テスト用DocsのID');
const folder = DriveApp.getFolderById('backup_testのID');
file.moveTo(folder);
}
backup_testのID の部分を 「backup_test」 フォルダから取ったID に置き換えましょう!
準備運動1・2 と同じく、 GASエディタ上部の 「▶ 実行」 ボタンを押しましょう。
ファイルを複製するときに、ファイル名にその日の日付を入れて複製できるようにしましょう。
2026-05-28_テスト用Docs
同じく、 やりたいことを日本語で言葉にしてから翻訳に入ります。
次のスライドから、 「どんな名前で」 の部分を どう書くか を見ていきます。
makeCopy に「名前」を渡すDriveApp.getFileById('テスト用DocsのID')
テスト用Docs を
.
makeCopy('複製したファイルの名前')
この名前で複製する
makeCopy のカッコの中に '名前' を入れると、 その名前で複製 してくれます。
この「カッコの中に渡すもの」 を 「引数 (ひきすう)」 と言います。
この引数に 今日の日付つきの名前 を入れるための方法を次から見ていきます。
new Date)const today = new Date();
console.log(today);
Thu May 28 2026 10:23:45 GMT+0900
ただ、 このままだとファイル名に使うには 長すぎますので、次の道具で短く整えます。
Utilities.formatDate)const today = new Date();
const dateStr = Utilities.formatDate(today, 'JST', 'yyyy-MM-dd');
console.log(dateStr);
2026-05-28のように、シンプルな形式で日時データが使えるようになります
'yyyy-MM-dd' の部分が 形式の指定。 yyyy=年4桁、 MM=月2桁、 dd=日2桁。
const file = DriveApp.getFileById('テスト用DocsのID');
const today = new Date();
const dateStr = Utilities.formatDate(today, 'JST', 'yyyy-MM-dd');
file.makeCopy(dateStr + '_テスト用Docs');
file という名前で記憶today という名前で記憶today を 「yyyy-MM-dd」 形の文字列に整えて dateStr に記憶file を 「dateStr + '_テスト用Docs'」 という名前で複製今までのコードは コメントアウト で残しておいて、 その下に今回の 4行を追加 しましょう。
function myFunction() {
// 準備運動3までのコード(記録として残す)
// const file = DriveApp.getFileById('テスト用DocsのID');
// const folder = DriveApp.getFolderById('backup_testのID');
// file.moveTo(folder);
// 準備運動4
const file = DriveApp.getFileById('テスト用DocsのID');
const today = new Date();
const dateStr = Utilities.formatDate(today, 'JST', 'yyyy-MM-dd');
file.makeCopy(dateStr + '_テスト用Docs');
}
準備運動1〜3 と同じく、 GASエディタ上部の 「▶ 実行」 ボタンを押しましょう。
準備運動の間に テスト用Docs は backup_test フォルダに移動 しています。 ワークに集中するために、 元の 08_20260528
フォルダに 戻しておきましょう。
backup_test フォルダを開く08_20260528 フォルダに ドラッグして戻すGoogle Docs には便利な 履歴機能 があります。 ただし一度過去のバージョンに戻すと、 それが最新 になり、 その先に書き足した内容は 消えます。
たとえば 「テスト用Docs」 を 自分の卒論原稿 だと思ってください。 ある日 「3日前の構成の方が良かった」 と戻したら、 その3日分の編集が全部消える。
どんなバックアップの方法なら、 自分にとってやりやすいでしょうか?
自分なりに考えてみましょう。
正解は1つではありません。 ただし 順番が大事 。 順番を間違えると違う結果になります。
お題を解くのに必要な道具は、 もうだいたい揃っています。
DriveApp.getFileById('...') — ファイルを持ってくるDriveApp.getFolderById('...') — フォルダを持ってくるfile.makeCopy() — ファイルを複製する('名前' を渡せば、 その名前で複製)file.setName('...') — ファイル名を変えるfile.moveTo(folder) — ファイルを別のフォルダに移すnew Date() — 今の日時を作るUtilities.formatDate(today, 'JST', 'yyyy-MM-dd') — 日付を文字列に整えるconst file = ... — 持ってきたものを記憶しておく(変数)これらを 順番に並べて組み合わせる と、 今日のお題が解けます。
5人1組のグループ に分かれて、 Notion ページ (ここをクリックして開いて自分のページに移動してね) に沿って 日本語で指示書 → GAS実装 → (余裕があれば) 応用編 の順で進めましょう!
15分
個人作業
Step1 — 日本語で指示書
30分
チューター 1巡目
指示書チェック
30分
チューター 2巡目
実装相談・チェック
15分
提出
共有URL発行
チューターさん
各グループを 2巡。 1巡目は指示書、 2巡目はコードを見てくれる小菅
常に色々回って合間を埋める。 詰まったら声かけてOK基礎編は必須。 応用編はできた分だけ評価します (やれたらぜひ)。
指示をGoogle Apps Scriptに翻訳する
Google Apps Scriptの道具を1個ずつ触った経験と、先ほどワークで行った指示書の手順を見ながら、 バックアップシステムを作るためのGoogle Apps Scriptを組み立ててください。
今日は、 AI相談を積極的には推奨しません。
理由
自分が触った道具を、 自分の言葉で組み立てる経験 そのものが大事だから。
ただし、 完全に禁止ではありません。 詰まったときの参考、 エラーの読み方 を聞く、 くらいは構いません。
次回までの課題 — 早く終わった人は授業内で着手OK
基礎編で「日付つきの名前で複製」 まで作りました。 でも、 こんな悩みが残ります。
これを解決するために、 バックアップを取るたびに 「いつ、 何を変えたか」 を記録する仕組みを作ってみましょう。バックアップのルールは自分で考えてみてください!
「08_20260528」 フォルダの中に、 「バックアップ履歴」 という名前で新しい Google スプレッドシートを作ってください!このシートを使うといいかも?
応用編は、 基礎編で書いたコードを 壊さずに残したまま 進めたいので、 同じGASプロジェクトの中に 新しいファイルを追加 して、 そこに書いていきます。
gas_new.gs にする
⚠️ 関数名の衝突に注意
gas_new.gs を作るとfunction myFunction() が自動で入ります。 そのまま使うと
コード.gs の myFunction と衝突 して、 どちらかが実行されなくなります。 必ず 別の関数名
(例: backupWithLog) に書き換えてください。
SpreadsheetApp.openById
準備運動の DriveApp.getFileById と同じ方向性。
IDを指定してスプレッドシートを持ってきます。こうすることで、指定したスプレッドシートに書き込みなどができるようになります。
const sheet = SpreadsheetApp.openById('バックアップ履歴のID');
sheet.appendRowスプレッドシートの一番下に、 1行追加する道具。 配列 [値1, 値2, 値3] を渡すと、 左から順にセルに入ります。
const sheet = SpreadsheetApp.openById('バックアップ履歴のID');
sheet.appendRow(['2026-05-28', 'テスト用Docs', 'お試しで書いてみた']);
Browser.inputBox画面の上に 入力欄 を出して、 入力された文字列を受け取る道具です。
const message = Browser.inputBox('この変更で何をした?');
console.log(message);
message に入って、 実行ログに表示される
今出てきた道具を3つ組み合わせて、応用編の内容に挑戦してみましょう!
gas_new.gsに書いて行きましょう!
基礎編を壊さずに進められます。 詰まったらチューターや講師に声をかけてください。
次回までの課題と提出物
今日の提出対象は以下の通りです
共有URLを発行し、URLを課題提出フォームから提出してください。

手順