2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

LTS Group(エル・ティー・エス グループ)Advent Calendar 2024

Day 17

GASでGoogle Driveにファイルをあげたことをトリガーにしたかったけど、できなかった話

Last updated at Posted at 2024-12-16

はじめに

連日の投稿となります。@keisuke_0503です!
本日もよろしくお願いいたします!

突然ですが、皆さんはクラウド上にデータを保存するときに何を使ってらっしゃいますか?
Google Driveに保存している方も多いのではないかと思います。

今回の記事では、私が個人的に開発しているアプリでGoogle Driveにファイルをアップロードしたことをトリガーにできないか、と悩んだので、その問題の解決策を共有できればと考えています。

結論

結論、アップロードそのものをトリガーにはできなかったです。

その代わりに、一定間隔で起動するトリガーを設定し、そのトリガーが最後に処理を完了した後にアップロードされたファイルが存在すれば処理を進める、という形で代用しました。

使用環境

Google Apps Script(GAS)

GASとは

Google Apps Script(GAS)は、ひとことで言えばGoogleが提供する各種サービスの自動化/連携を行うためのローコード開発ツールです。GASを使うと、Gmailやカレンダー、Googleスプレッドシート、Googleドライブなど、Googleが提供する様々なサービス上で処理を自動化したり、複数のサービスを連携させたりできます。
参照 : https://satori.marketing/marketing-blog/gas-introduction/

ローコードツールとありますが、個人的には、ゴリゴリjsでカスタマイズしていくこともできるので、Googleのサービスをかなり自由度高く扱えるようになる便利なツールだと思っています。

問題提起

作りたい機能

Google Driveと連携して、ファイルをアップロードしたときに、特定の処理を実行したい

課題

GASにはさまざまなトリガーが用意されていますが、Google Driveにファイルをアップロードしたとき、というトリガーは存在しませんでした。
現状は、Google FormsやGoogleスプレッドシート、Googleドキュメントに関するトリガーが多く用意されているようです。Google Driveではなく、スプレッドシートを編集したときなら簡単にイベント発火させることができます!

解決策

アップロードされた時ではなく、対象のディレクトリ内を一定間隔で監視するトリガーを作成し、前回更新よりも後に作成されたファイルがあったら処理に進む、という流れで実現しました。

GAS
// フォルダIDを指定
// 定期的にcheckForNewFilesを呼び出す時間ベースのトリガーを作成
function createTimeDrivenTrigger() {
    ScriptApp.newTrigger('checkForNewFiles')
        .timeBased()
        .everyMinutes(10) // 10分ごとに実行
        .create();
}

function checkForNewFiles() {
    const FOLDER = DriveApp.getFolderById(SCRIPT_PROPERTIES.getProperty('FOLDER_ID'));
    const files = FOLDER.getFiles();
    const lastCheck = new Date(SCRIPT_PROPERTIES.getProperty('lastCheckTime'));
    const now = new Date();

    while (files.hasNext()) {
        let file = files.next();
        let fileDate = file.getDateCreated();

        // 前回のチェック以降に作成されたファイルを処理
        if (fileDate > lastCheck) {
            // 処理を記載
        }
    }

    // 最後のチェック時間を更新
    SCRIPT_PROPERTIES.setProperty('lastCheckTime', now);
}

まとめ

作成当初は便利なイベントが存在するだろうと思ったのですが、自力では見つけられませんでした。かなり力技ですが、同じようなイベントを求めている方が多いのではないかと思い、共有させていただきました!

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?