Google Drive上のMP4ファイル名をGASで一括変更!自動化の力でファイル整理を効率化しよう
Google Driveは、私たちのデジタルライフにおいて欠かせないストレージサービスです。写真、ドキュメント、動画など、あらゆるファイルを保存し、共有することができます。しかし、ファイルが増えてくると困るのが「整理」です。特に、動画ファイルのように数が多くなると、手作業での名前変更や分類は非常に手間がかかります。
この記事では、Google Apps Script(GAS)を使って、Google Drive上の特定のフォルダにあるMP4ファイルの名前を一括で自動変更するスクリプトを解説します。特定の条件に基づいてファイル名を変更することで、手作業では考えられないほど効率的にファイル整理を進めることができます。
もしあなたがGASを使ったことがなくても大丈夫です。コードの解説から実行方法、さらには応用例まで、分かりやすく丁寧に説明しますので、ぜひ最後まで読んで、あなたのGoogle Drive整理に役立ててください。
このGASスクリプトの概要と目的
今回扱うGASスクリプトは、Google Driveのあるフォルダを対象に、以下の処理を自動で行います。
- 指定されたフォルダ内のファイルを取得します。
- 取得したファイルの中から、MP4ファイル(
.mp4
拡張子を持つファイル)だけを選び出します。 - 選ばれたMP4ファイルのファイル名に、特定の文字列(例:「 #Shorts」)が含まれていないかを確認します。
- もし含まれていなければ、ファイル名に別の特定の文字列(例:「 受験頑張れ! #Shorts」)を追加して、ファイル名を変更します。
このスクリプトは、例えばYouTubeにショート動画をアップロードする際に、特定のキーワード(例: #Shorts
)をファイル名に含める必要がある場合に非常に役立ちます。大量の動画ファイルに対して、手動で一つ一つファイル名をチェックし、文字列を追加するのは大変な作業ですが、このスクリプトを使えば一瞬で完了します。
コードの主要な機能とロジック解説
それでは、提供されたGASスクリプトのコードを詳細に見ていきましょう。
/**
* 指定されたフォルダ内のMP4ファイルの名前を変更します。
* ファイル名に「 #Shorts」が含まれていない場合、
* 「 受験頑張れ! #Shorts」を拡張子の前に追加します。
*/
function renameMp4FilesWithCheerMessage() {
// ... (コード本体) ...
}
このコードは、renameMp4FilesWithCheerMessage
という名前の関数として定義されています。関数名から、MP4ファイル名を変更する目的であることが分かりますね。
1. 定義セクション
まず初めに、スクリプトが使用する重要な情報を定数として定義しています。
const FOLDER_ID = "1RvvASHME_qfDM8hq8TgT4c6bcNuMDPMf"; // 対象のフォルダID
const SUFFIX_TO_CHECK = " #Shorts"; // この文字列が既に存在するかチェック
const SUFFIX_TO_ADD = " 受験頑張れ! #Shorts"; // 追加する文字列(先頭にスペースあり)
const FILE_EXTENSION = ".mp4";
FOLDER_ID
: 処理対象となるGoogle DriveフォルダのIDを指定します。このIDは、ブラウザでGoogle Driveを開き、対象フォルダを選択した時のURLに含まれています(https://drive.google.com/drive/folders/
の後に続く文字列です)。この値をあなたが処理したいフォルダのIDに変更する必要があります。SUFFIX_TO_CHECK
: ファイル名にこの文字列が含まれているかを確認します。もし含まれていれば、名前変更は行いません。SUFFIX_TO_ADD
:SUFFIX_TO_CHECK
が含まれていない場合に、ファイル名の拡張子の前に追加する文字列です。FILE_EXTENSION
: 対象とするファイルの拡張子を指定します。ここでは.mp4
が指定されています。
これらの値を変更することで、異なるフォルダやファイルタイプ、異なる追加文字列に対応させることが可能です。
2. エラーハンドリングとフォルダの取得
スクリプト全体はtry...catch
ブロックで囲まれています。これは、処理中に予期せぬエラーが発生した場合に、スクリプトが停止するのではなく、エラー情報をログに出力して処理を終えるための重要な仕組みです。
try {
const folder = DriveApp.getFolderById(FOLDER_ID);
if (!folder) {
Logger.log(`フォルダが見つかりません。ID: ${FOLDER_ID}`);
return;
}
// ... (以降の処理) ...
} catch (e) {
Logger.log(`スクリプト実行中にエラーが発生しました: ${e.toString()}`);
if (e.stack) {
Logger.log(`スタックトレース: ${e.stack}`);
}
}
DriveApp.getFolderById(FOLDER_ID)
: 指定されたFOLDER_ID
に対応するフォルダオブジェクトを取得しようとします。DriveApp
は、Google Drive上のファイルやフォルダを操作するためのGASサービスです。if (!folder)
: フォルダが見つからなかった場合(例えば、IDが間違っている、またはアクセス権がない場合)は、エラーメッセージをログに出力し、関数を終了します。Logger.log()
は、GASのエディタ下部にあるログビューに情報を出力するために使われます。
3. 対象ファイルの取得
次に、フォルダ内のMP4ファイルを取得します。
// フォルダ内のMP4ファイルのみを取得
// MimeType.VIDEO_MP4 の代わりに文字列 "video/mp4" を使用
const mimeTypeString = "video/mp4"; // MIMEタイプを一度変数に入れる
Logger.log(`使用するMIMEタイプ: ${mimeTypeString}`); // 念のためログ出力
Logger.log(`対象フォルダ名: ${folder.getName()}`); // フォルダオブジェクトが取得できているか確認
const files = folder.getFilesByType(mimeTypeString); // ここでエラーが発生している箇所
Logger.log(`フォルダ「${folder.getName()}」内のMP4ファイルを処理します...`);
if (!files.hasNext()) {
Logger.log("対象フォルダにMP4ファイルが見つかりませんでした。");
return;
}
const mimeTypeString = "video/mp4";
: ファイルの種類を指定するためにMIMEタイプを使用します。動画MP4ファイルのMIMEタイプは一般的にvideo/mp4
です。コードのコメントに「MimeType.VIDEO_MP4 の代わりに文字列 “video/mp4” を使用」とあるのは興味深い点です。GASではMimeType
enumも提供されていますが、文字列で直接指定することも可能です。どちらが良いかはケースによりますが、文字列の方が特定の細かいMIMEタイプには対応しやすいかもしれません。const files = folder.getFilesByType(mimeTypeString);
:getFilesByType()
メソッドを使って、指定されたMIMEタイプのファイルリストを取得します。ただし、コードのコメントには「ここでエラーが発生している箇所」と示されています。 これは、環境や特定の状況下でこのメソッドの挙動に問題がある可能性を示唆しています。もしこの部分でエラーが発生する場合は、代替手段としてfolder.searchFiles('mimeType="video/mp4"')
のようにsearchFiles()
メソッドとクエリを使用することも検討できます。if (!files.hasNext())
: 取得したファイルリストにファイルが含まれていない場合(MP4ファイルが見つからなかった場合)、その旨をログに出力して関数を終了します。hasNext()
は、次に処理すべきファイルがあるかを確認します。
4. ファイルごとの処理
ファイルリストが取得できたら、while
ループを使ってリスト内の各ファイルを一つずつ処理します。
while (files.hasNext()) {
const file = files.next();
let originalName = file.getName();
if (!originalName.toLowerCase().endsWith(FILE_EXTENSION.toLowerCase())) {
Logger.log(`スキップ: ${originalName} (MP4ファイルではありません、または拡張子が異なります)`);
continue;
}
// ... (以降の処理) ...
}
while (files.hasNext())
: ファイルリストにまだ処理すべきファイルがある間、ループを続けます。const file = files.next();
: リストから次のファイルを取得します。let originalName = file.getName();
: 取得したファイルの現在のファイル名を取得します。if (!originalName.toLowerCase().endsWith(FILE_EXTENSION.toLowerCase()))
: この条件は、念のためファイル名が.mp4
で終わるかを確認しています。getFilesByType("video/mp4")
を使っているため通常はMP4ファイルだけが来るはずですが、MIMEタイプと拡張子が一致しないケースもあるため、追加のチェックとして機能します。.toLowerCase()
を使っているのは、大文字・小文字の違い(例:.MP4
)を無視して比較するためです。条件に一致しない(MP4ファイルでない、または拡張子が違う)場合は、このファイルをスキップし、continue
で次のファイルに進みます。
拡張子を除いたファイル名の取得とチェック文字列の判定を行います。
let nameWithoutExtension = originalName.substring(0, originalName.lastIndexOf(FILE_EXTENSION));
if (nameWithoutExtension.endsWith(SUFFIX_TO_CHECK)) {
Logger.log(`スキップ: ${originalName} (既に「${SUFFIX_TO_CHECK}」が含まれています)`);
continue;
}
let nameWithoutExtension = originalName.substring(0, originalName.lastIndexOf(FILE_EXTENSION));
: ファイル名から拡張子(.mp4
)を取り除く処理です。lastIndexOf(FILE_EXTENSION)
で拡張子が始まる位置を見つけ、substring(0, ...)
でその位置の手前までの文字列(拡張子なしのファイル名)を取り出しています。if (nameWithoutExtension.endsWith(SUFFIX_TO_CHECK))
: 拡張子を除いたファイル名が、チェックしたい文字列(#Shorts
)で終わっているかを確認します。.endsWith()
メソッドは文字列が特定の接尾辞で終わるか判定します。もし既に文字列が含まれている場合は、このファイルの名前変更はスキップされます。
5. 名前変更の実行
チェックをパスしたファイルに対して、新しいファイル名を生成し、名前変更を実行します。
let newName = nameWithoutExtension + SUFFIX_TO_ADD + FILE_EXTENSION;
try {
file.setName(newName);
Logger.log(`名前を変更しました: "${originalName}" -> "${newName}"`);
} catch (e) {
Logger.log(`ファイル名の変更に失敗: "${originalName}". エラー: ${e.toString()}`);
}
let newName = nameWithoutExtension + SUFFIX_TO_ADD + FILE_EXTENSION;
: 拡張子なしのファイル名に、追加したい文字列(受験頑張れ! #Shorts
)と元の拡張子(.mp4
)を結合して、新しいファイル名を生成します。try { file.setName(newName); ... } catch (e) { ... }
: ここでもtry...catch
ブロックが使われています。file.setName(newName)
はファイル名を実際に変更する処理です。ファイル名に使えない文字が含まれていたり、その他の原因で名前変更に失敗する可能性もあるため、個別のファイル変更処理もエラーハンドリングしています。成功した場合は変更前後のファイル名、失敗した場合はエラーメッセージをログに出力します。
ループ処理がすべて完了すると、最後に「処理が完了しました。」というメッセージがログに出力されます。
使用されている技術・ライブラリ
このスクリプトは、Google Apps Script (GAS) というプラットフォーム上で動作します。
- Google Apps Script (GAS): Googleが提供するJavaScriptベースのスクリプト環境です。Googleのさまざまなサービス(Drive, Spreadsheet, Gmail, Calendarなど)と連携し、それらを自動化したり、カスタマイズしたりすることができます。サーバーレスで動作するため、インフラを用意する必要がありません。
- DriveAppサービス: GASが提供する組み込みサービスの一つで、Google Drive上のファイルやフォルダをプログラムから操作するためのAPI(Application Programming Interface)を提供します。ファイルやフォルダの取得、作成、移動、削除、名前変更、権限設定など、さまざまな操作が可能です。
- JavaScript (ECMAScript): スクリプト自体はJavaScript(ECMAScript 5以降の構文を含む)で記述されています。変数の宣言(
const
,let
)、関数の定義(function
)、ループ処理(while
)、条件分岐(if
)、文字列操作(substring
,lastIndexOf
,endsWith
,toLowerCase
)、例外処理(try...catch
)など、基本的なJavaScriptの機能が活用されています。 - MIMEタイプ: ファイルの種類を示すために使われる標準的な識別子です。例えば、
video/mp4
はMP4形式の動画ファイルを示します。スクリプトではこのMIMEタイプを使って、処理対象のファイルを絞り込んでいます。
このスクリプトは、GASとDriveAppの基本的な機能を組み合わせて、実用的なファイル操作タスクを自動化する良い例と言えます。
セットアップと実行方法
このスクリプトを使うためのセットアップと実行方法を説明します。
-
GASプロジェクトの作成:
- Google Driveを開きます。
- 「新規」ボタンをクリックし、「その他」 > 「Google Apps Script」を選択します。
- 新しいスクリプトエディタが開かれます。
-
コードの貼り付け:
- 開いたエディタに、提供されたスクリプトコードをすべて貼り付けます。
- プロジェクト名を分かりやすいものに変更します(例:
MP4ファイル名変更スクリプト
)。
-
フォルダIDの設定:
- スクリプトコードの
FOLDER_ID
定数を、あなたが処理したいGoogle DriveフォルダのIDに書き換えます。フォルダIDは、ブラウザでそのフォルダを開いた時のURLのfolders/
の後に続く部分です。
javascript
const FOLDER_ID = "あなたのフォルダIDをここにペースト"; // ★ここを変更★ - スクリプトコードの
-
必要に応じた定数の変更:
- チェックしたい文字列(
SUFFIX_TO_CHECK
)や追加したい文字列(SUFFIX_TO_ADD
)を変更したい場合は、これらの定数も必要に応じて修正してください。
- チェックしたい文字列(
-
スクリプトの保存:
- フロッピーディスクのアイコン(保存ボタン)をクリックして、スクリプトを保存します。
-
実行:
- エディタの上部にある関数選択ドロップダウンから、
renameMp4FilesWithCheerMessage
関数が選択されていることを確認します。 - 再生ボタン(実行ボタン)をクリックします。
- エディタの上部にある関数選択ドロップダウンから、
-
権限の承認:
- 初回実行時には、スクリプトがあなたのGoogle Driveにアクセスするための許可を求める画面が表示されます。「権限を確認」をクリックし、表示される指示に従って承認を行ってください。Googleから警告が表示される場合がありますが、自身で作成・確認したスクリプトであれば「詳細」>「[プロジェクト名] に移動」と進んで承認できます。
-
ログの確認:
- 実行が完了したら、「表示」メニューから「ログ」を選択して、スクリプトの実行結果や出力されたメッセージを確認してください。ファイルがスキップされた理由や、名前変更が成功したか失敗したかなどが表示されます。
テストデータの活用
コードにはsetupTestData
という関数も含まれています。これは、実際に重要なファイルを処理する前に、テスト用のファイルを作成してスクリプトの動作を確認するのに非常に便利です。
// テストデータ作成関数
function setupTestData() {
const FOLDER_ID = "あなたのフォルダIDをここにペースト"; // ★ここも忘れずに変更★
const folder = DriveApp.getFolderById(FOLDER_ID);
if (!folder) {
Logger.log(`テストデータ作成失敗: フォルダが見つかりません ID ${FOLDER_ID}`);
return;
}
folder.createFile("テスト動画1.mp4", "dummy content", "video/mp4");
folder.createFile("テスト動画2 #Shorts.mp4", "dummy content", "video/mp4");
folder.createFile("Another Video.mp4", "dummy content", "video/mp4");
folder.createFile("Final Video #Shorts.mp4", "dummy content", "video/mp4");
folder.createFile("not_an_mp4.txt", "dummy text", MimeType.PLAIN_TEXT);
Logger.log("テストデータを作成しました。");
}
setupTestData
を実行すると、指定したフォルダ内にテスト用のファイルがいくつか作成されます。この関数で作成されたファイルを対象にrenameMp4FilesWithCheerMessage
を実行することで、実際のファイルに影響を与えることなくスクリプトの動作を確認できます。
使用例・応用例
このスクリプトの基本的な機能はファイル名の自動変更ですが、少し改変したり、他のGASの機能と組み合わせたりすることで、様々な応用が考えられます。
- ブログ用画像ファイルの一括リネーム: 例えば、ブログ記事に使う画像を
yyyyMMdd_keyword_NN.jpg
のような規則的な名前にしたい場合。ファイルのMIMEタイプを画像用に変更し、ファイル作成日や親フォルダ名などから情報を取得してファイル名を生成するロジックに修正すれば実現できます。 - 特定のファイル群の分類・移動: ファイル名を変更する代わりに、特定の文字列を含む(または含まない)ファイルを別のフォルダに移動させるスクリプトに改変できます。
file.moveTo(destinationFolder)
メソッドを使用します。 - 古いファイルのアーカイブ: 特定の日付より古いファイルを探し出し、ファイル名の先頭に日付を加えたり、別の「アーカイブ」フォルダに移動させたりする処理も自動化できます。
- 定期的なタスクとしての実行: GASのトリガー機能を使えば、このスクリプトを毎日、毎週、あるいは毎月特定の時間に自動実行させることができます。例えば、毎週金曜日の夜にその週に作成された動画ファイルを整理するといったことが可能です。
学習者向けのポイント・発展的なトピック
このスクリプトは、GASやGoogle Driveの操作を学ぶ上でいくつかの良い出発点となります。
- GASの基本的な構造: 関数定義、変数の使い方、組み込みサービスの利用方法など、GASスクリプトの基本的な書き方を学べます。
- DriveAppサービスの理解:
getFolderById
,getFilesByType
,getName
,setName
,hasNext
,next
など、DriveAppサービスを使ったファイル・フォルダ操作の基本を習得できます。 - 文字列操作:
substring
,lastIndexOf
,endsWith
,toLowerCase
といったJavaScriptの文字列操作メソッドの実践的な使い方が学べます。 - エラーハンドリングとロギング:
try...catch
ブロックを使ったエラー処理と、Logger.log()
を使ったデバッグ方法の重要性を理解できます。
さらに深く学ぶために
searchFiles()
メソッド: 提供されたコードでgetFilesByType()
に言及されていたエラーについてさらに調べたい場合、searchFiles()
メソッドとその検索クエリの書き方を学ぶと良いでしょう。より柔軟な条件でファイルを検索できます。(参考: Google Apps Script Developer Documentation – DriveApp)- GASのトリガー: 定期実行やイベント駆動(例えば、新しいファイルがフォルダに追加された時)でスクリプトを実行したい場合は、GASエディタの左メニューにある時計型アイコンから設定できる「トリガー」について学びましょう。(参考: Google Apps Script Developer Documentation – Installable Triggers)
- MIMEタイプ:
video/mp4
以外の様々なファイルタイプを扱いたい場合は、よく使われるMIMEタイプのリストや、GASでサポートされているMIMEタイプについて調べると役立ちます。
まとめ
この記事では、Google Apps Script (GAS) を使用して、Google Drive上のMP4ファイル名を条件付きで自動変更するスクリプトを解説しました。このスクリプトを使うことで、手作業では時間のかかるファイル整理タスクを効率化できます。
コードは、対象フォルダの指定、MP4ファイルのフィルタリング、ファイル名のチェック、そして条件に合うファイルの名前変更という一連の流れを、DriveAppサービスとJavaScriptの基本機能を使って実現しています。
今回紹介したスクリプトはあくまで一例ですが、これをベースに改変したり、他のGASサービス(例えばSpreadsheetAppでファイルリストを管理するなど)と組み合わせたりすることで、あなたのGoogle Drive上の様々なタスクを自動化する可能性が広がります。
ぜひ、このスクリプトを試してみて、GASによる自動化の世界に触れてみてください。そして、あなたのアイデアでさらに便利なスクリプトへと発展させていきましょう!