バックグラウンドで動かすサービス「cron job」!

記事
IT・テクノロジー

バックグラウンドで動かすサービス「cron job」!

Web アプリや Web サービスを作っていると毎日とか毎週定期的に動かしたい処理がある場合があります。そんな時に役に立つのが「cron job」です。この記事では「cron job」についてまとめて見ました。
「cron job」とは何か?
「cron job」というのは余り耳にしない言葉ですが、一言で言えば定期的に実行する処理です。 「毎日何時に」とか「毎週何曜日に」とか「毎月何日に」など必要な処理を予約しておいて、その時間が来ると自動的に実行してくれるというものです。そうした処理の中で「Unix 系」の OS で使われる処理の名前です。

Unix 系の OS というと余り身近ではありませんが、無料の OS の代表格である Linux も Unix 系の OS の一つです。

今日の話は、多くの人が利用している端末側(PC やスマホ)ではなくて主に Web サーバーなどの話が中心です。 もちろん、こうした端末側(PC やスマホ)でも Unix 系の OS を利用していれば使える機能ですが、今回の記事ではサーバー側での「cron job」の利用方法についてまとめています。

「cron job」はどのような時に使うか?
では、この「cron job」はどんな時に使うかです。 いろいろな利用がありますが、例えばバックアップなどに利用することが多くなります。

クラウド(インターネット)上にいろいろなデータを保存する機会は、スマホがインターネット利用の主流になってよく行われるようになりました。このようなインターネット上に置いたデータは、利用者から見るとバックアップを取らなくても良いと思ってしまいますが、こうしたサービスを提供する方では、バックアップを含めたサービスを提供しているのが普通です。

このバックアップの処理を例えば、毎日深夜の午前 2 時に行うなどの処理を予めサーバーで予約しておいて自動でバックアップを取る場合などに使われます。

この例はわかりやすい利用例ですが、Web サービスなどでは別の使われ方をする場合がたくさんあります。

Web サイトのホスティングの処理
別の使われ方の話をする前に簡単に Web サイトの動きの仕組みを説明します。 Web サイトのホスティングの処理が起動するのは、実は Web サイトにアクセスされた時になります。 どういう事かと言うと、Web サイトをホスティングするサーバーでは特定のネットワークのポートを監視していて、そこにアクセスがあるとリクエストに応じたデータを返すという仕組みになっています。

例えば、いろいろなオンラインショッピングで販売されている特定の商品の一覧を提供しているようなサービスを考えてみてください。 販売している商品の価格は同じではなくて、同業者の価格情報を基に変わる場合があるのはご存知の通りです。

こうしたサイトでは、他の Web サイトの情報を集めて価格を表示する場合がほとんどですが、これを全部手動でやっていると手間もかかるしサイト(サービス)の維持も簡単ではありません。そこで、通常はプログラムを作成して、必要なサイトの情報を自動で集めると言う仕組みを作るのが普通です(Web scraping)この情報収集をこのページのリクエストが発生した時に行うことは当然可能ですが、複数のサイトにアクセスして、情報を取得して表示データを作るという処理が必要になります。これをリクエスト時に実行する場合、ページが表示されるまでに時間がかかってしまう事は容易に想像できるかと思います。

そこでよく利用されるのが、「cron job」です。他のサイトに行ってデータを集めると言う処理を作っておいて、この処理を定期的にページのリクエストとは別に行うようにします。例えば 1 時間おきにデータを収集すると言う感じで設定します。このようにすると、ページのリクエストがきた時に毎回、他のサイトのデータを集めないでも、予め収集したデータを使ってページを作ることができるので高速に表示ができるようになります。

当然、どれくらいの頻度で裏方でデータの更新を行うということを考える必要がありますが、利用者の待ち時間は劇的に少なくすることが可能になります。

Web アプリや Web サービスでは、このように利用者の実際のアクセスとは切り離して実行した方が良い処理が結構たくさんあります。そのような場合に処理を起動する方法として「cron job」は便利な方法です。

どうやって「cron job」を設定するか?
さて、ようやく今回の記事の本題に入るわけですが、どうやって「cron job」を起動するかが問題になるかと思います。

Web のホスティングを Linux 系のサーバーで行っていて、OS にアクセスできる場合は、OS のコマンドを使って簡単に設定できます。 詳しくは「cron job の設定のやり方」などで検索すれば、どのように Linux 上で設定するかの記事がたくさん出てきます。

しかし、例えば、この連載で取り上げて来た、Firebase などを利用してホスティングやバックエンドのサービスを作成している場合はこの方法を利用することはできません。基本的に Firebase の実装では OS のコマンドラインにアクセスできないからです。

そこで、今回紹介する方法は、GCP(Google Cloud Platform)のサービスを利用する方法です。

GCP(Google Cloud Platform)の提供するサービスの中に「Cloud Scheduler」と言うサービスがあります。 このサービスは、「cron job」を設定して実行する機能を提供するサービスです。この機能を利用すれば、定期的に裏方で実行する処理を Firebase を利用した場合でも簡単に実現できます。

このサービスを利用するのに必要なことは、Google にアカウントを持っていて、必要な設定をする必要があります。 このサービスは、無料ではなく有料サービスなので、GCP(Google Cloud Platform)のコンソールに行って支払いの設定をしたり、プロジェクトの作成を行う必要があります。プロジェクトに関しては、Firebase のプロジェクトを作成している場合は、そのプロジェクトにサービスを追加する形で行うことができます。

「cron job」の設定は、Google Cloud Platform ConsoleかCloud SDKをインストールして行います。 一応 REST API からの設定もできるようですが、設定自体はコンソールか SDK を利用する方が簡単です。基本的に Unix の cron job のフォーマットと同じ形式で設定できるので簡単です。詳しい設定の方法はこちらのリンクにあります。

後は、REST API で実際に裏方で動かしたい処理の API を作成しておいて、「cron job」からその API を指定します。

こうすることで、サーバー側で定期的に実行したい処理をスケジュールして実行できるようになります。

まとめ
この記事では、Google Cloud Platform のサービスの一つの「Cloud scheduler」を利用して、Firebase などを利用した Web サービスや Web アプリでも、裏方で必要な処理を定期的に起動する方法を紹介してみました。

Firebase によるデプロイメントでは、通常は OS にアクセスできないため、こうした機能は利用できないと思っていましたが、GCP(Google Cloude Platform)に新しい機能が追加されており、Cloud scheduler などが利用できるようになったので、通常の Web アクセスとは別に API を作成して処理を起動できるようになったので、さらに便利になりました。

こうした機能を取り込んでサービスを開発するとさらに、価値のあるサービスの開発が簡単に実現できます!
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す