Help us understand the problem. What is going on with this article?

Service Worker の初歩の初歩

More than 3 years have passed since last update.

はじめに

ネイティブアプリの開発をしていて、Web アプリとの差がプッシュ機能くらいなのでは…と思いました。

じゃあ、「Webアプリでプッシュ機能を実装できればいいのにな」と思い、
いろいろ調べたら ServiceWorker に出会いました。

折角なので調査した内容を共有しようと、Qiita に投稿してみました。
主な内容は下記のとおりです。

  • ServiceWorker の概要
  • ServiceWorker を使ってできること
  • ServiceWorker の始め方
  • 他の似たようなサービス

※本記事は ServiceWorker を実際に使うにあたって、サービスの大まかなイメージを掴んでもらうための導入的な記事です。これから実装していく中での発見等を共有できたら幸いです。

ServiceWorker って何?

端的に言うと ユーザーの端末上でバックグラウンドで動くイベント駆動のJavaScript環境です。
ユーザーがブラウザで Webページを開いていないときでも、何かしらの処理を実行させることが出来ます。

※ServiceWorker の概要に関しては下記の記事を参考にさせていただきました。

Service Workerの基本とそれを使ってできること

何ができるか

バックグランドで動くイベントの種類によって色んなことができそうです。

  • ウェブのプッシュ通知
    GCMからプッシュ通知を受け取り、ブラウザに表示させる
  • バックグラウンド同期
    ブラウザを閉じていてもバックグラウンドでデータ受信したり、
    オフライン状態で受けた動作も通信可能になるとバックグラウンドで動作可能
  • データのキャッシュ
    指定したページや画像等をCache APIを使って保存、Fetchイベントハンドラで取り出す
  • リクエストの横取り
    ブラウザから投げられるリクエストを横取りして、サーバに投げる前に加工したり、
    サーバにリクエストを投げずに、固定のページをレスポンとして返したりすることが可能

ServiceWorker の始めかた

ServiceWorker を使いたいサイトの好きな場所に下記のスクリプトを埋め込む。

navigator.serviceWorker.register('/ServiceWorker.js',{scope: '/mysite'}); 
//scope プロパティで ServiceWorker.js が有効になるスコープの指定もできる。

register が完了すると、次回以降スコープ内のページにアクセスしたときに

ユーザーの環境上で ServiceWorker.js がブラウザをコントロールするようになります。
そして、ページにアクセスするたびに fetch イベントを発火するようになります。
あとは fetch イベントをキャッチするイベントリスナー内で好きな処理を書けばいいです。

self.addEventListener('fetch', (event) => {
    //fetch イベントに対してやりたい処理を書く
}

実現方法例

おわりに

次回は実際に ServiceWorker を使ってプッシュ通知などを実装してみる予定です!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした