はじめに
Google Apps Script(GAS)は、Googleドライブ内のファイル名を自動で変更するスクリプトを作成するのに便利なツールです。例えば、「ファイル名に日付を追加したい」「特定の条件に一致するファイル名を一括で変更したい」といったニーズに応えられます。本記事では、GASを使ってGoogleドライブ内のファイル名を簡単に変更する方法を紹介します。
最近仕事で「ドライブ内の大量のファイル名を特定のルールに沿って変更してほしい」と頼まれて「超絶めんどくせーーー。」って思ったんですけど
手作業でひとつひとつ名前を変えるのはあまりに手間がかかるので、「これを自動化できないだろうか?」と考え、Google Apps Script(GAS)での実装に挑戦してみました。
GASのセットアップや基本的な開発環境の整え方については、別記事
「エンジニアでなくてもOK!ビジネスパーソン向けGoogle Apps Script(GAS)の使い方」
で詳しく解説しています。初めてGASを使う方は、まずそちらをご参照いただければ、スムーズに開発を始めることができると思います。
ファイル名を変更する基本スクリプト
Step 1: フォルダとファイルを取得
ここでは、フォルダIDを指定して、その中にある特定のファイル名を変更する基本的なスクリプトを紹介します。
testフォルダ内に旧.pngというファイルがある設定にします。
function renameFile() { let folderId = "FOLDER_ID"; // フォルダIDを設定 let oldFileName = "旧.png"; // 変更前のファイル名 // フォルダを取得し、特定のファイルを検索 let folder = DriveApp.getFolderById(folderId); let file = folder.getFilesByName(oldFileName).next(); }
コード解説:
- folderId:GoogleドライブのURLから取得したフォルダIDを指定してください。
- oldFileName:変更したい元のファイル名を指定します。
DriveApp.getFolderById(folderId)
で指定フォルダを取得し、folder.getFilesByName(oldFileName).next()
で該当するファイルを取得します。
ここまでで、指定したフォルダから特定のファイルを取得する準備が完了です。
フォルダIDの確認方法
googleドライブ内のフォルダを開くと、ブラウザのURLバーにフォルダのURLが表示されます。
このURLのうち、folders/
の後に続く文字列がフォルダIDです。
Step 2: ファイル名の変更
次に、取得したファイルの名前を変更する部分を説明します。
// ファイル名を変更 file.setName("新.png"); // 変更後のファイル名を設定 Logger.log("ファイル名が '" + oldFileName + "' から '新.png' に変更されました。"); }
コード解説:
- file.setName(newFileName):取得したファイルの名前を新しいファイル名に変更します。
Logger.log
で、ファイル名が変更されたことを確認するメッセージをコンソールに出力します。
実行後ファイル名が変更されていることが確認してください。
大量のファイル名を一括で変更する方法
ここまでの基本スクリプトでは、指定した1つのファイル名を変更するのみです。このように、数が少ない場合は手作業でファイル名を変更する方がかえって早いかもしれません。
しかし、ファイルが大量にある場合や、一定のルールに基づいて一括で変更したい場合には、このスクリプトの応用が役立ちます。次に、フォルダ内の全ファイルを指定のルールに沿って変更する方法をご紹介します。
複数のファイル名を一括で変更する方法を紹介するには、以下のようにすべてのファイルを順番に取得して処理するスクリプトにすると良いでしょう。特定のパターンで変更したい場合や、複数のファイルを一度に自動化して管理する場合に役立ちます。
以下のスクリプトでは、指定したフォルダ内のすべてのファイルを対象に、「旧」という文字列を「新」に置き換える例を示しています。
Step 1:フォルダとファイルの取得
function renameFilesInFolder() { let folderId = "YOUR_FOLDER_ID"; // フォルダIDを設定 let oldText = "旧"; // 変更前の文字列 let newText = "新"; // 変更後の文字列 // フォルダを取得し、すべてのファイルを取得 let folder = DriveApp.getFolderById(folderId); let files = folder.getFiles(); }
- folderId:ファイル名を変更したいファイルが入っているフォルダのIDを指定します。GoogleドライブのURLからIDをコピーして、
YOUR_FOLDER_ID
と置き換えてください。 - oldText / newText:変更対象の文字列と、新しい文字列を指定します。例えば、「旧」を「新」に変更する設定です。
DriveApp.getFolderById(folderId)
:指定したフォルダを取得します。folder.getFiles()
:指定フォルダ内のすべてのファイルを取得し、変数files
に保存します。この後、取得したファイルを順次処理していきます。
Step 2:ファイル名の変更処理
次に、フォルダ内のすべてのファイル名をループで処理し、指定した文字列を含むファイル名を変更します。
// 各ファイルに対して処理を実行 while (files.hasNext()) { let file = files.next(); let fileName = file.getName(); // ファイル名に変更前の文字列が含まれているか確認 if (fileName.includes(oldText)) { let newFileName = fileName.replace(oldText, newText); // ファイル名を置き換え file.setName(newFileName); // 新しいファイル名を設定 Logger.log("ファイル名が '" + fileName + "' から '" + newFileName + "' に変更されました。"); } }
コード解説
while (files.hasNext())
:files
に含まれるファイルを1つずつ取り出して処理します。file.getName()
:現在のファイル名を取得し、変数fileName
に保存します。fileName.includes(oldText)
:ファイル名に指定した変更前の文字列(例:「旧」)が含まれているか確認します。fileName.replace(oldText, newText)
:変更前の文字列を新しい文字列に置き換え、新しいファイル名を作成します。file.setName(newFileName)
:ファイルの名前を新しいファイル名に変更します。Logger.log
:変更後のファイル名をログに出力し、実行結果を確認できるようにします。
実行結果
実行結果に書きかわった内容が出力されます。
実際にフォルダを見ると…..
しっかり名前が変わってますね!
こんな感じで、大量のファイル名の変更も行うこともできるのです。
応用編:スプレッドシートを使って大量のファイル名を一括変更する方法
function renameFileForSpreadsheet() { let folderId = "YOUR_FOLDER_ID"; // フォルダIDを設定 let sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); let data = sheet.getRange(2, 1, sheet.getLastRow(), 2).getValues(); // A列とB列のデータを取得 // フォルダを取得し、すべてのファイルを取得 let folder = DriveApp.getFolderById(folderId); let files = folder.getFiles(); }
コード解説
- let data = sheet.getRange(2, 1, sheet.getLastRow(), 2).getValues()
このコードはスプレッドシートの2行目以降、A列とB列のデータを取得しています。getRange(2, 1, sheet.getLastRow(), 2)
で範囲を指定し、getValues()
で2次元配列としてデータを取得します。
Step 2:ファイル名の変更
// 各ファイルに対して処理を実行 while (files.hasNext()) { let file = files.next(); let fileName = file.getName(); // 現在のファイル名を取得 // スプレッドシートのデータを1行ずつ確認 data.forEach(function(row) { let oldText = row[0]; // A列(変更前の文字列) let newText = row[1]; // B列(変更後の文字列) // A列またはB列が空の場合はスキップ if (!oldText || !newText) return; // ファイル名に変更前の文字列が含まれている場合 if (fileName.includes(oldText)) { let newFileName = fileName.replace(oldText, newText); // ファイル名を置き換え file.setName(newFileName); // 新しいファイル名を設定 Logger.log("ファイル名が '" + fileName + "' から '" + newFileName + "' に変更されました。"); } }); }
コード解説
data.forEach(function(row)
スプレッドシートから取得したデータを1行ずつ処理するためのループです。if (!oldText || !newText) return;
スプレッドシートのデータに空のセルがある場合、その行をスキップするための条件です。
if (fileName.includes(oldText))
現在のファイル名に変更前の文字列(oldText)が含まれているかを確認する条件です。
(oldText)が含まれている場合にif文内のファイル名変更処理を行います。
実行結果
セルA列(A2行目以降)にファイル名の変更したいテキストをセット
セルB列(B2行目以降)に変更後に置き換えたいテキストをセット
実行後4つのファイルのテキストが変更されたことが分かります!
まとめ
Google Apps Scriptを活用することで、Googleドライブ内の大量のファイル名変更を簡単に自動化できます。スプレッドシートを使えば、変更ルールを柔軟に設定でき、手作業の手間を大幅に削減可能です。特定の文字列の置換やパターン変更など、多様なニーズに応じたスクリプトを簡単に構築できるので、ぜひ業務の効率化に活用してみてください。