---
title: "Webシステムのカイゼン(Cloud Tasks編) | grasys blog"
url: "https://blog.grasys.io/post/nishino/cloud-tasks/"
description: "〜随時データを処理する仕組みからバッチ処理へ〜 実行ボタン押した後の処理時間が長くてWebページのローディングが長いどうしよう😩🌀というときに見てください！ とある物語のあらすじ 今、あなたは文章ファイルの校正を自動化するプロジェクトに参加しています。 システムを構築出来たのはよかったものの、もっとたくさんのファ…"
---

# Webシステムのカイゼン(Cloud Tasks編)

-   ![](/_astro/noicon.CTHOhNiB_1HMs6A.webp)[nishino](/authors/nishino/)
-   公開日：2020年10月31日
-   カテゴリー：[Tech](/categories/tech/)
-   タグ：[#Google Cloud](/tags/google-cloud/)

![Webシステムのカイゼン(Cloud Tasks編)](/_astro/og-image.DDSiu2Ny_XHpDd.webp)

〜随時データを処理する仕組みからバッチ処理へ〜  
実行ボタン押した後の処理時間が長くてWebページのローディングが長いどうしよう😩🌀というときに見てください！

とある物語のあらすじ

> 今、あなたは文章ファイルの校正を自動化するプロジェクトに参加しています。  
> システムを構築出来たのはよかったものの、もっとたくさんのファイルを一度に自動化したいと言われたのでその通りシステムを改修しました。  
> しかし、今度はファイルを登録するたびに待ち時間発生するのが面倒！！文章ファイルをぽんぽん登録していきたい！！と言われて困ってしまいました。  
> 自分が作ったプログラムが悪いのでしょうか…どうすれば…

現状のシステムはこのようなイメージです。  
４つのファイルをプログラムにわたすと４０秒かかっています。

![Webシステムのカイゼン(Cloud Tasks編)の画面](/_astro/01-02-4-338820bf.i8xsViax_1UJAUl.webp)

１ファイル当たり１０秒の処理時間が必要ということですね。  
ということは１０ファイル処理しようとすると１分４０秒。  
では、１００ファイル処理しようと思うと１６分４０秒…

この場合だといくら最高のプログラムが作れたとしても結局ファイル数に応じて処理時間が長くなってしまうのでは根本的な解決にはならないでしょう。

## Cloud Tasksとは

> Cloud Tasks は、大量の分散タスクの実行、ディスパッチ、配布を管理できるフルマネージド サービスです。ユーザー リクエストの外部で作業を非同期で処理できます。タスクは App Engine または任意の HTTP エンドポイントで実行できます。

[https://cloud.google.com/tasks/docs?hl=ja](https://cloud.google.com/tasks/docs?hl=ja)

ではCloud Tasksを使えばどのようになるのかイメージ図に書き起こすとこのようになります。

![Cloud Tasksで文章ファイルの校正処理を非同期化する流れ](/_astro/02-03-5-1ee968bb.DOl8Sruo_2sEDG7.webp)

ここでは1つの処理をCloud Tasksに登録するのに0.5秒かかっている想定です。(実際はもっと早いけどあくまでもイメージ)

以前の図と違うところは文章ファイルの校正を全ファイル処理する前にWebブラウザに完了通知を出しているところです。  
この仕事やっておきますね〜というような完了通知になると思います。

人間の言う「やっておきますね〜」はまあやってくれないかもしれないけど機械は設定しだいでやってくれるので大丈夫！！

## で、結局どうすればいい？

Cloud Tasksを使って処理を分散したのはよいけど、分散した処理がいつ終わるのかわからないですよね。  
そこで進行状況をCloud SQLやCloud Datastore/Firestoreに記録するのがよいです。

なので最終的には下記のイメージになります。 進行状況がわかる画面は別途作らないとだめだけどね！

![App EngineからCloud Tasksへ処理を分散し進行状況をCloud Firestoreに記録する構成図](/_astro/03-04-2-1024x791-eaf95f55.BST3rKi__ZAt6Ig.webp)

分散しなきゃいけないほどのデータを処理しなきゃいけないということはその分だけ存在的なエラーがあるということです。  
汎用的なエラーへの対処をする仕組みは用意しておいたほうがよさそうですね。

## この記事を書いた人

[![](/_astro/nishino.qi9pzvtD_ZQ8ElO.webp)](/authors/nishino/)

### [nishino](/authors/nishino/)

食材も設計もコードもたくさん調理しますよ。

[プロフィールと記事一覧](/authors/nishino/)