Webサイトを最も簡単にアプリ化する方法 | OJapp PWA Code

PWA



当サイト、オリジナルWordPressプラグイン「OJapp PWA Marketing」を使用しています。

各記事は専用アイコンでホーム画面に追加できます。ぜひお試しください。

WebサイトをPWAとしてホーム画面に追加できるようにしたい。

でも、そのために manifest.json を作って、アイコンを用意して、各種設定を書いて……となると、正直ちょっと面倒ですよね。

アッピン
これが簡単にできて、登録不要、無料です

OJappでは、HTMLにJavaScriptを1行追加するだけでWeb App Manifestを動的に生成できます。

サイト全体を1つのアプリにする

サイト全体を1つのアプリとしてホーム画面へ追加したい場合は、1S1A(One Site. One App.)を使います。

HTMLの <head> にこれを追加します。

<script src="https://ojapp.app/js/ojapp_1s1a.js"></script>

これだけです。

サイト内のどのページからホーム画面へ追加しても、サイトトップを起点とする1つのWebアプリとして扱われます。

1S1Aでは内部的に、サイトのOriginから、

https://example.com/

を作り、このURLをManifestの idstart_urlscope に設定しています。

つまり、

One Site. One App.

という構成です。

ページごとに別のアプリにする

商品ページ、記事、プロフィール、予約ページなどを、それぞれ別のアプリとしてホーム画面へ追加したい場合は、1P1A(One Page. One App.)を使います。

<script src="https://ojapp.app/js/ojapp_1p1a.js"></script>

これも、置くだけです。

1P1Aでは現在開いているページのURLから、

window.location.origin + window.location.pathname

を取得し、そのページ専用のManifestを生成します。

たとえば、

https://example.com/product/wallet/
https://example.com/product/bag/
https://example.com/product/shoes/

という3つの商品ページがあれば、それぞれを別のホーム画面アイコンとして追加できる構造になります。

商品A → アプリA
商品B → アプリB
商品C → アプリC

これが One Page. One App. です。

1S1Aと1P1Aの違い

違いはかなりシンプルです。

1S1Aは、

サイト = 1アプリ

1P1Aは、

ページ = 1アプリ

です。

普通の企業サイトやサービスサイトなど、サイトそのものを1つのアプリとして扱いたい場合は1S1A。

ECの商品ページ、ブログ記事、プロフィール、予約ページなど、「このページをホーム画面に残してほしい」という使い方なら1P1Aが向いています。

どちらも使っているのは同じWeb App Manifestです。

違うのは、「何を1つのアプリとして定義するか」だけです。

manifest.jsonを作らなくてもいい

一般的なPWAでは、HTMLから次のようなファイルを読み込みます。

<link rel="manifest" href="/manifest.json">

そしてサーバーには、

/manifest.json

というファイルを用意します。

OJappでは、このManifestをJavaScriptがブラウザ上で動的に生成します。

大まかな流れはこうです。

Webページを開く
↓
OJappのJavaScriptを実行
↓
URL・タイトル・アイコンを取得
↓
Web App Manifestを生成
↓
<link rel="manifest"> をHTMLへ追加

そのため、manifest.json を直接設置できないサービスでも、HTMLへJavaScriptを追加できればPWA用のManifestを生成できます。

もちろん、自由にファイルを設置できるWebサイトでも使えます。

タイトルやアイコンも自動で取得する

1P1Aでは、基本的に現在のページの <title> がアプリ名として使用されます。

そのため、

<title>レザーミニウォレット</title>

という商品ページなら、そのタイトルをそのままホーム画面のアプリ名として使えます。

さらに、明示的に指定したい場合はOJapp独自のmetaタグも使えます。

<meta name="ojapp:title" content="ミニウォレット">

アイコンも同様です。

<meta name="ojapp:icon" content="https://example.com/wallet.png">

と書けば、その画像をホーム画面用アイコンとしてManifestへ設定できます。

現在の1P1Aでは、指定がない場合に既存の画像情報やfaviconなどからアイコン候補を取得する仕組みになっています。

つまり最低限、

<script src="https://ojapp.app/js/ojapp_1p1a.js"></script>

だけでも動き、必要なページだけ後からタイトルやアイコンを調整できます。

アプリ化したくないページは除外できる

1P1Aをサイト共通の <head> に入れると、サイト内のすべてのページでスクリプトが読み込まれます。

ただし、トップページやカテゴリ一覧など、「ここはページ単位のアプリにしたくない」という場所もあります。

この『アプリにしたくないページ』というのが少しPWAの罠というか癖があります。
詳しくはPWAの二極化:トップへ還る「1S1A」と、全ページをアプリ化する「1P1A」をご覧ください。

ページを除外する場合は、そのページだけ次のmetaタグを追加します。

<meta name="ojapp:exclude" content="true">

このタグを検出すると、1P1AはManifest生成処理そのものを停止します。

そのため、

トップページ → 除外
カテゴリページ → 除外
商品ページ → 1P1A
記事ページ → 1P1A

といった使い分けもできます。

Service Workerを用意しなくても、ホームに追加するだけでメリットがある

「PWA」というと、Service Workerまで必ず自分で書かなければいけないイメージがあるかもしれません。

しかし、OJappのこの仕組みが担当しているのは、Webページをホーム画面から起動できる形にするためのWeb App Manifestの生成です。

1S1Aも1P1Aも、中心になっているのはManifestです。

実は、Service Workerによる複雑なキャッシュ制御を書かなくても、ホーム画面に追加されたWebアプリはOS(ブラウザ)標準の強力なキャッシュ領域で管理されます。そのため、2回目以降のアクセスではアセットが瞬時に読み込まれ、事故リスクゼロで爆速のアプリ体験を提供できます。

なのでOJappは、Manifestだけを1行のJavaScriptから生成しています。

まとめ

Webサイトをホーム画面から起動できる形にしたいだけなら、かなり小さな実装で始められます。

サイト全体を1つのアプリにするなら、

<script src="https://ojapp.app/js/ojapp_1s1a.js"></script>

ページごとにアプリ化するなら、

<script src="https://ojapp.app/js/ojapp_1p1a.js"></script>

基本はこれだけです。

1S1Aは、

One Site. One App.

1P1Aは、

One Page. One App.

Web App Manifestそのものは同じでも、「何を1つのアプリとして扱うか」でPWAの使い方は大きく変わります。

PWAを大掛かりな機能として考えるのではなく、まずはWebサイトに「ホーム画面から開ける入口を作る」くらいの感覚で導入してみるのが、一番分かりやすい使い方です。

関連記事やリンク

>OJapp Tips  -  PWA・ホーム画面追加の実機検証ブログ

OJapp Tips  -  PWA・ホーム画面追加の実機検証ブログ

OJapp Tipsは、 公式ドキュメントをなぞるだけでは分かりにくい挙動を、実際にiPhone・Android・PCで検証しながら記録しています。

特に、manifest.json、Service Worker、Web App Manifest、WebClip、アイコンキャッシュ、ホーム画面追加の挙動など、 Webサイトを「アプリのような入口」として使うためのノウハウを中心に扱っています。

OJapp Tipsの記事は、PWA LABでの実機検証や、OJapp・Petal・OJ-Passなど自作ツールの開発で詰まったことを元にしています。 きれいな理論だけではなく、「実際にはここでハマる」という現場寄りの知識を残すための場所です。