GASでGoogle DriveのMP4ファイル名を自動変更!【効率化】
Google Driveを日常的に使っていると、ファイルの整理は避けられない作業です。特に、同じ種類のファイルが大量にある場合、手作業での名前変更は非常に手間がかかります。例えば、YouTube Shorts用の動画ファイルをたくさん作成している場合、ファイル名に特定のタグを付けたいことがあるかもしれません。
この記事では、Google Apps Script(GAS)を使って、Google Drive上の特定のフォルダにあるMP4ファイルに対し、特定の文字列がファイル名に含まれていない場合に、指定した文字列を自動的に追加する方法を解説します。提供されたスクリプトコードを基に、その仕組み、使い方、そして応用方法まで詳しく見ていきましょう。
GASを使ったファイル操作の自動化は、一度設定すれば手作業から解放される強力な手段です。プログラミング初心者の方でも理解できるように、丁寧に解説していきますので、ぜひ最後までお読みください。
今回扱うGASスクリプトは、以下の目的を達成します。
#Shorts
)が既に含まれているか確認する。受験頑張れ! #Shorts
)をファイル名の拡張子前に追加して、ファイル名を変更する。このスクリプトは、例えば「YouTubeにアップロードする前に、特定のキャンペーンを示すタグをファイル名に一括で追加したい」「Shortsとして認識させるための #Shorts
を漏れなくファイル名に入れたい」といった場合に役立ちます。手作業では面倒な繰り返し作業を、スクリプトに任せることで、効率化とミスの削減が期待できます。
以下に、今回の解説で使用するGoogle Apps Scriptのコードを示します。このコードをGASエディタに貼り付けて使用します。
/**
* 指定されたフォルダ内のMP4ファイルの名前を変更します。
* ファイル名に「 #Shorts」が含まれていない場合、
* 「 受験頑張れ! #Shorts」を拡張子の前に追加します。
*/
function renameMp4FilesWithCheerMessage() {
const FOLDER_ID = "YOUR_FOLDER_ID_HERE"; // 対象のフォルダIDに置き換えてください
const SUFFIX_TO_CHECK = " #Shorts"; // この文字列が既に存在するかチェック
const SUFFIX_TO_ADD = " 受験頑張れ! #Shorts"; // 追加する文字列(先頭にスペースあり)
const FILE_EXTENSION = ".mp4";
try {
const folder = DriveApp.getFolderById(FOLDER_ID);
if (!folder) {
Logger.log(`エラー: 指定されたフォルダが見つかりません。ID: ${FOLDER_ID}`);
return;
}
// フォルダ内のMP4ファイルのみを取得
const mimeTypeString = "video/mp4"; // MIMEタイプを指定
Logger.log(`対象フォルダ「${folder.getName()}」内の${mimeTypeString}ファイルを処理します...`);
const files = folder.getFilesByType(mimeTypeString);
if (!files.hasNext()) {
Logger.log(`対象フォルダに${mimeTypeString}ファイルが見つかりませんでした。`);
return;
}
while (files.hasNext()) {
const file = files.next();
let originalName = file.getName();
Logger.log(`処理中のファイル: ${originalName}`);
// 拡張子が指定のものであるかチェック(大文字小文字を区別しない)
if (!originalName.toLowerCase().endsWith(FILE_EXTENSION.toLowerCase())) {
Logger.log(`スキップ: ${originalName} (拡張子が${FILE_EXTENSION}ではありません)`);
continue;
}
// 拡張子を除いたファイル名を取得
let nameWithoutExtension = originalName.substring(0, originalName.lastIndexOf(FILE_EXTENSION));
// 追加したい文字列が既に含まれているかチェック
if (nameWithoutExtension.endsWith(SUFFIX_TO_CHECK)) {
Logger.log(`スキップ: ${originalName} (既に「${SUFFIX_TO_CHECK}」が含まれています)`);
continue;
}
// 新しいファイル名を生成
let newName = nameWithoutExtension + SUFFIX_TO_ADD + FILE_EXTENSION;
try {
// ファイル名を変更
file.setName(newName);
Logger.log(`名前を変更しました: "${originalName}" -> "${newName}"`);
} catch (e) {
Logger.log(`ファイル名の変更に失敗: "${originalName}". エラー: ${e.toString()}`);
}
}
Logger.log("すべてのファイルの処理が完了しました。");
} catch (e) {
Logger.log(`スクリプト実行中に予期せぬエラーが発生しました: ${e.toString()}`);
if (e.stack) {
Logger.log(`スタックトレース:\n${e.stack}`);
}
}
}
// 実行前に上の FOLDER_ID を適切なフォルダIDに置き換えてください。
// テストデータ作成関数(必要に応じて使用してください)
function setupTestData() {
const FOLDER_ID = "YOUR_FOLDER_ID_HERE"; // 対象のフォルダIDに置き換えてください
const folder = DriveApp.getFolderById(FOLDER_ID);
if (!folder) {
Logger.log(`テストデータ作成失敗: フォルダが見つかりません ID ${FOLDER_ID}`);
return;
}
// 既にファイルが存在する場合は実行に注意
try {
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); // MP4ではないファイル
Logger.log("テストデータを作成しました。");
} catch (e) {
Logger.log(`テストデータ作成中にエラーが発生しました: ${e.toString()}`);
}
}
重要: 上記コードの FOLDER_ID
を、実際に処理したいGoogle DriveフォルダのIDに置き換えてください。フォルダIDは、Google Driveで対象フォルダを開いたときのURLの /folders/
の後ろにある文字列です。
例: https://drive.google.com/drive/folders/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
の xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
の部分。
このスクリプトの主要な部分を分解して見ていきましょう。
定数の定義:
javascript
const FOLDER_ID = "YOUR_FOLDER_ID_HERE";
const SUFFIX_TO_CHECK = " #Shorts";
const SUFFIX_TO_ADD = " 受験頑張れ! #Shorts";
const FILE_EXTENSION = ".mp4";
ここで、対象フォルダのID、チェックしたい文字列、追加したい文字列、対象のファイル拡張子を定数として定義しています。コードの変更が必要になったときに、この部分だけを修正すれば済むため、管理しやすくなります。
フォルダの取得:
javascript
const folder = DriveApp.getFolderById(FOLDER_ID);
if (!folder) {
Logger.log(`エラー: 指定されたフォルダが見つかりません。ID: ${FOLDER_ID}`);
return;
}
DriveApp.getFolderById()
メソッドを使って、指定したIDのフォルダを取得します。もしIDが間違っている、または存在しない場合、folder
は null
になります。したがって、取得できなかった場合にエラーメッセージをログに出力して処理を終了するエラーハンドリングが行われています。
MP4ファイルの取得:
javascript
const mimeTypeString = "video/mp4";
const files = folder.getFilesByType(mimeTypeString);
ここで、フォルダ内のファイルからMIMEタイプが "video/mp4"
のものだけを絞り込んで取得します。getFilesByType()
は、取得されたファイルを一つずつ取り出すためのイテレーターを返します。これは大量のファイルを扱う際にメモリ効率が良い方法です。
ファイルのイテレーションと処理:
javascript
while (files.hasNext()) {
const file = files.next();
let originalName = file.getName();
// ... ファイル名チェックと変更のロジック ...
}
while (files.hasNext())
ループは、取得したファイルのリスト(イテレーター)に次のファイルがある限り繰り返されます。files.next()
で次のファイルオブジェクトを取得し、その名前を取得します。
ファイル名と拡張子のチェック:
javascript
if (!originalName.toLowerCase().endsWith(FILE_EXTENSION.toLowerCase())) {
// ... スキップ処理 ...
continue;
}
ここで、取得したファイル名が指定した拡張子で終わっているかを確認します。toLowerCase()
を使っているのは、例えばファイル名が Video.MP4
のように大文字の場合でも正しく判定できるようにするためです。拡張子がない、あるいは違う場合は処理をスキップします。
既存文字列のチェック:
javascript
let nameWithoutExtension = originalName.substring(0, originalName.lastIndexOf(FILE_EXTENSION));
if (nameWithoutExtension.endsWith(SUFFIX_TO_CHECK)) {
// ... スキップ処理 ...
continue;
}
まず、substring()
と lastIndexOf()
を使ってファイル名から拡張子を取り除きます。次に、拡張子を除いたファイル名の末尾が、追加したい文字列(SUFFIX_TO_CHECK
)と一致するかを確認します。既に含まれている場合は、二重に追加しないようにスキップします。
新しいファイル名の生成と変更:
javascript
let newName = nameWithoutExtension + SUFFIX_TO_ADD + FILE_EXTENSION;
try {
file.setName(newName);
Logger.log(`名前を変更しました: "${originalName}" -> "${newName}"`);
} catch (e) {
Logger.log(`ファイル名の変更に失敗: "${originalName}". エラー: ${e.toString()}`);
}
ファイル名の変更が必要な場合、元のファイル名(拡張子なし)に指定した文字列 (SUFFIX_TO_ADD
) と拡張子を結合して新しいファイル名を生成します。そして、file.setName()
メソッドでファイル名を変更します。この操作中にエラーが発生する可能性もあるため、ここでも try...catch
ブロックを使って個別のエラーを補足し、ログに出力しています。
全体のエラーハンドリング:
スクリプト全体も try...catch
ブロックで囲まれています。これにより、ファイル取得やその他の予期せぬエラーが発生した場合でも、スクリプトが突然停止するのではなく、エラーメッセージをログに出力して終了することができます。
このスクリプトは、主に以下の技術要素から構成されています。
DriveApp
クラスとそのメソッド(getFolderById
, getFilesByType
)を主に使用しています。const
, let
)、ループ (while
)、条件分岐 (if
)、文字列操作メソッド (toLowerCase
, endsWith
, substring
, lastIndexOf
)、エラーハンドリング (try...catch
) など、JavaScriptの基本的な構文と組み込み関数が使用されています。Logger.log()
を使うことで、スクリプトの実行中に変数の中身や処理の進捗を確認できます。実行後、「ログを表示」から確認できます。GASとGoogle Drive Serviceを組み合わせることで、Google Drive上での定型的なファイル管理作業を簡単に自動化できることがわかります。
スクリプトを実行するための手順は以下の通りです。
Google Apps Script プロジェクトの作成:
コードの貼り付け:
myFunction
など)は削除して構いません。フォルダIDの置き換え:
const FOLDER_ID = "YOUR_FOLDER_ID_HERE";
の部分を、実際にファイル名変更を行いたいGoogle DriveフォルダのIDに置き換えます。この手順は必ず行ってください。 間違ったIDやデフォルトのままではスクリプトは動作しません。SUFFIX_TO_CHECK
と SUFFIX_TO_ADD
の値も、目的に合わせて変更してください。テストデータの作成(任意):
setupTestData
関数もコードに含めておき、GASエディタの関数選択ドロップダウンから setupTestData
を選んで一度実行してみてください。指定したフォルダ内にテスト用のファイルがいくつか作成されます。ただし、この関数はフォルダ内に同名のファイルが存在するとエラーになる場合がありますので注意してください。スクリプトの実行:
renameMp4FilesWithCheerMessage
を選択します。実行結果の確認:
このスクリプトで実現できることや、少し変更するだけで可能になる応用例をいくつか紹介します。
#Shorts
タグが漏れなく付いているかを確認し、必要に応じて追加する作業を自動化できます。Summer2024_Promo_
)をファイル名の先頭に追加するなど、ファイル名による分類・識別を強化できます。FILE_EXTENSION
と mimeTypeString
の値を変更すれば、MP4ファイルだけでなく、画像ファイル (.jpg
, .png
, image/jpeg
, image/png
) や音声ファイル (.mp3
, audio/mpeg
) など、他の種類のファイルに対しても同様のファイル名変更処理を適用できます。endsWith()
の代わりに indexOf()
や正規表現 (match()
, test()
) を使えば、ファイル名の中に特定のキーワードが含まれているファイルを抽出して処理する、といったより複雑な条件設定も可能です。GASやGoogle Drive Serviceをこれから学びたいという方にとって、このスクリプトは良い出発点となります。以下の点に着目して学習を進めると良いでしょう。
DriveApp
クラスの他にも、ファイルやフォルダを操作する様々なメソッドがあります。ファイル作成 (createFile
)、コピー (makeCopy
)、移動 (moveTo
)、削除 (setTrashed
) など、公式ドキュメントを参照して他の機能も試してみてください。MimeType
enum を使うこともできますが、今回のコードのように文字列で指定する場合も多いです。hasNext()
と next()
を使ったイテレーターの扱いは、GASでファイルやスプレッドシートのセルなどを大量に処理する際によく使われるパターンです。toLowerCase
, endsWith
, substring
, lastIndexOf
など)は、ファイル名だけでなく様々なテキストデータを処理する上で非常に重要です。try...catch
ブロックの使い方を学び、スクリプトがエラーで停止しないように堅牢性を高めましょう。特定のエラーに応じて処理を分岐させることも可能です。この記事では、Google Apps Scriptを使ってGoogle Drive上のMP4ファイル名を自動的に変更するスクリプトを解説しました。特定のフォルダからMP4ファイルを抽出し、ファイル名に特定の文字列がなければ指定した文字列を追加するという、比較的単純ながらも実用的な処理を自動化できることを示しました。
GASとGoogle Drive Serviceを組み合わせることで、Google Driveでの定型的なファイル管理作業を効率化し、手作業によるミスを減らすことが可能です。今回紹介したスクリプトをベースに、ファイルの種類、追加・チェックする文字列、処理の条件などを変更することで、様々なファイル名規則の適用や整理作業に応用できます。
ぜひ、このスクリプトを試してみて、GASによる自動化の世界に触れてみてください。最初は小さなスクリプトから始めて、徐々に複雑な処理に挑戦していくことで、Google Workspaceをさらに便利に活用できるようになるはずです。