無料でお手軽Cron!Google Apps Scriptを使ってみる

Googleが提供する「Google Apps Script」にある「UrlFetch」を使って、Cronのように時間指定で任意のURLをリクエストできちゃう、ってやつです。

Cron使いたいけど、レンタルサーバーにその機能がない、またはCronつきレンタルサーバー借りる余裕がない。 そんなことないですかね。ないですかそうですか。いや個人的にあったんでメモ。

Google Apps Script」というのがあって、JavaScriptに似たコードを書けばなんかいろいろ動くみたいなんですよ。動く時間も指定できて。無料で。

「Google Apps」とついてるけど、別に企業アカウントとか独自ドメインとかが必要なわけじゃない。 必要なのはリクエスト先URLとGoogleアカウントだけ。

まずGoogleにログインして「Google Apps Script」にアクセスすると、下のような画面になるので「Start Scripting」をクリック。 ここは英語だけどその先は日本語。 「Start Scripting」をクリック

すると以下の画面に遷移するので、とりあえず「空のプロジェクト」をクリックして、プロジェクトを作成。 「空のプロジェクト」をクリック

いきなりコードを書く画面になるので、ここに書いていく。 今回は「指定時間(または定期的)に、単にURLをリクエストするだけ」という要件のものなので、最低限の書き方でいく。 例えば「http://example.com/cron.php」というURLリクエストしたいなら、以下のように記述する。 (エラー処理とかしてない最低限のコード)

function myFunction() {
UrlFetchApp.fetch("http://example.com/cron.php");
}

こんだけ!

Google Apps Scriptに「UrlFetch」という機能があって、指定したURLをリクエストするというもの。 必要ならリクエスト先URLの結果の文字列も取得できる。

で、重要なのは指定時間に上記のスクリプトを実行すること。 Google Apps Scriptではこれを「トリガー」と読んでるみたい。

コード編集画面のメニューにある時計マークをクリック。 コード編集画面のメニューにある時計マークをクリック

プロジェクトをまだ保存してなければ、「プロジェクト名の変更」という画面が表示されるので、好きな名前をつける。(その名前でGoogleドライブに保存される)

「現在のプロジェクトのトリガー」という画面が表示されるので、「今すぐ追加するには・・・」のところをクリック。 「今すぐ追加するには・・・」のところをクリック

そしたら出てきた。Cronぽいものが。

ここで自由に時間を指定する。 「今すぐ追加するには・・・」のところをクリック 選択肢の右にある「通知」では、失敗時の通知をメールで受信できる。 ここはどうやらログインユーザーのメールアドレスか、Googleドライブでそのプロジェクトを共有しているメールアドレスしか選べないっぽい。 時間帯を「保存」して、プロジェクトも保存すると、すぐに動きはじめる模様。

リクエスト結果をメールで受け取ってみる

単にURLをリクエストしただけだと、リクエスト先のプログラムの生死がわからない。 リクエスト結果をメールで受け取ってみる。

結果の文字列をメール送信するには、前述のコードを以下のように修正。

function myFunction() {
    var response = UrlFetchApp.fetch("http://example.com/cron.php");
    MailApp.sendEmail(
        "[email protected]",// 送信先メール
        "Cronの実行結果ですよ",// メール件名
        "",
        {
            htmlBody: response.getContentText()
        }
    );
}

コード2行目でURLをリクエストし、その結果を「response」にセット。 Mail機能を使ってメール送信。 送信先メールアドレスは4行目、その下の5行目はメールの件名になる。

これでGoogleドライブに保存しておけば、指定時間にせっせと動いてくれる。

ちなみにGoogleドライブに保存されたプロジェクトを編集する時は、Googleドライブを「Google Apps Scriptアプリ」と「接続」する必要があるみたい。 要するにGoogleドライブ内へのアクセス許可ということかな。

あと、注意点として、トリガー設定済みのプロジェクトを削除してもトリガーは止まらなかった。
ゴミ箱にある状態だと動き続けるみたい。
プロジェクトを削除する場合は、念のためトリガーを削除してからの方がよさそう。

Google Apps Scriptをもっと知りたいなら公式リファレンスを。(まだ英語のみ)

で、気になる制限系だけど、公式リファレンスにはなにも書いてない・・・? 英語だし、指定時間もいくらでも設定できるようだし・・・よくわからない。 以前はGoogle App EngineでわざわざPythonでcron.yaml書いてやってたけど、これならデプロイとかエディタすらも不要。 まだお試し検証中だけど、カジュアルなbot系とかなら良さそうかな。 もちろんUrlFetch機能はGETもPOSTもできるので、Yahoo!PipesとかYQLとかも使うとわりと夢がひろがりそう。 (ちなみに公式リファレンスにもOAuthが必要なTwitter用サンプルコードがある)

comments powered by Disqus