SlideShare a Scribd company logo
1 of 65
Download to read offline
© Opt, Inc. All Rights Reserved.
フレームワークも使っていない
WebアプリをLaravel+PWAで
モバイルアプリっぽくしてみちゃう
PHPカンファレンス仙台 2019
© Opt, Inc. All Rights Reserved.
自己紹介
萩野 輝(はぎの あきら)
株式会社オプト
仙台テクノロジー開発部
普段の業務:
広告運用の自動化・効率化を図る社内プロダクトを開発
メインスキルセット:
PHP(FuelPHP)、jQuery、MySQL
© Opt, Inc. All Rights Reserved.
自己紹介 その2
勉強中!:
インフラ関連、フロント関連、Kotlin、PHP
好フレーズ:
大盛、無料、クーポン、キャンペーン、API
© Opt, Inc. All Rights Reserved.
自己紹介 その3
クーポンサイト
情報ポータル
記念日管理
複数ショップサイト
まとめて検索
宿簡易検索
店舗検索&
マッピング
高ポイントおむつ
販売情報ブログ投稿
豚肉レシピツイート
BOT
© Opt, Inc. All Rights Reserved.
© Opt, Inc. All Rights Reserved.
目次
● はじめに
● PWAとは
● 昔作ったWebアプリについて
● 今回のGOAL
● 対応概要
● 対応実施
© Opt, Inc. All Rights Reserved.
はじめに
© Opt, Inc. All Rights Reserved.
昔作った愛着のあるWebアプリを、
Laravel+PWAを組み込みつつ
モバイルアプリ風に仕上げた過程の話
はじめに
© Opt, Inc. All Rights Reserved.
私自身、初の試み
ベストプラクティスではないものの、
手段の1つとして参考になれば
はじめに
© Opt, Inc. All Rights Reserved.
PWAとは
© Opt, Inc. All Rights Reserved.
「Progressive Web Apps」の略称
ざっくりというとWebサイトを
GooglePlayストアで提供されている
モバイルアプリのようにする仕組み
PWAとは
© Opt, Inc. All Rights Reserved.
PWAの詳細は、
タガヤスというIT勉強会にて、
グレープシティ株式会社の瀬川様が
発表されていました
PWAとは
http://bit.ly/2U9GJg4
© Opt, Inc. All Rights Reserved.
昔作ったWebアプリについて
© Opt, Inc. All Rights Reserved.
[ アプリ機能概要 ]
・店舗の情報を検索
・店舗位置を地図へマッピング
・店舗間の距離&移動時間表示
・作成した地図の共有
昔作ったWebアプリについて
© Opt, Inc. All Rights Reserved.
[ 環境 ]
・サーバ:無料レンタルサーバ
・SSL:なし
・PHP:5.6
・DB:MySQL(5.7.22)
・フレームワーク:なし
・その他:Smarty
昔作ったWebアプリについて
© Opt, Inc. All Rights Reserved.
[ 利用API ]
・Yahoo!ローカルサーチAPI
  (全国の店舗、イベント、クチコミ情報などの地域・拠点情報を検索)
・Yahoo!ジオコーダAPI
  (住所をキーワードとして検索し、その位置情報取得)
・GoogleMapsAPI
  (距離&時間を取得)
  (地図へのマッピングおよび表示)
昔作ったWebアプリについて
© Opt, Inc. All Rights Reserved.
ちょっと紹介
(デモ)
昔作ったWebアプリについて
© Opt, Inc. All Rights Reserved.
今回のGOAL
© Opt, Inc. All Rights Reserved.
・URLからファイル名を消す
・ネイティブアプリのようにインストール
できるようにする
・サーバアクセス頻度を減らす
今回のGOAL
© Opt, Inc. All Rights Reserved.
対応概要
© Opt, Inc. All Rights Reserved.
対応内容は3点
対応概要
© Opt, Inc. All Rights Reserved.
1. Laravelインストール
2. PWA化
3. IndexedDB導入
対応概要
© Opt, Inc. All Rights Reserved.
Laravelインストール
⇓
URLからファイル名を消す
対応概要
© Opt, Inc. All Rights Reserved.
PWA化
⇓
ネイティブアプリのように
インストールできるように
する
対応概要
© Opt, Inc. All Rights Reserved.
IndexedDB導入
⇓
サーバアクセス頻度を減らす
対応概要
© Opt, Inc. All Rights Reserved.
対応実施
© Opt, Inc. All Rights Reserved.
対応実施
1. Laravelインストール
2. PWA化
3. IndexedDB導入
© Opt, Inc. All Rights Reserved.
なぜLaravelなのか?
対応実施:Laravelインストール
© Opt, Inc. All Rights Reserved.
Laravelには、routeヘルパがある!!
対応実施:Laravelインストール
© Opt, Inc. All Rights Reserved.
https://{ドメイン}/XXX/XXX/login.php
       ↓↓↓ 
https://{ドメイン}/login
対応実施:Laravelインストール
© Opt, Inc. All Rights Reserved.
開発環境構築も含め、Laravelが公式公
開しているHomeSteadを利用
対応実施:Laravelインストール
© Opt, Inc. All Rights Reserved.
・各種必要ソフトウェアインストール
・HomeSteadインストール
・composerでプロジェクト作成
対応実施:Laravelインストール
© Opt, Inc. All Rights Reserved.
正常起動に至った各種バージョン
・Windows10 Pro(64bit)
・Git:2.20
・VirtualBox:6.0
・Vagrant:2.2.2
・Laravel:5.5.44
対応実施:Laravelインストール
© Opt, Inc. All Rights Reserved.
・URLからファイル名を消す
・ネイティブアプリのようにインストール
できるようにする
・サーバアクセス頻度を減らす
対応実施:Laravelインストール
© Opt, Inc. All Rights Reserved.
・URLからファイル名を消す
・ネイティブアプリのようにインストール
できるようにする
・サーバアクセス頻度を減らす
対応実施:Laravelインストール
© Opt, Inc. All Rights Reserved.
対応実施
1. Laravelインストール
2. PWA化
3. IndexedDB導入
© Opt, Inc. All Rights Reserved.
PWAを進めるにあたり
必須となってくるのが
SSL
対応実施:PWA化
© Opt, Inc. All Rights Reserved.
[ 環境 ]
・サーバ:無料レンタルサーバ
・SSL:なし
・PHP:5.6
・DB:MySQL(5.7.22)
・フレームワーク:なし
・その他:Smarty
対応実施:PWA化
© Opt, Inc. All Rights Reserved.
[ 環境 ]
・サーバ:無料レンタルサーバ
・SSL:なし
・PHP:5.6
・DB:MySQL(5.7.22)
・フレームワーク:なし
・その他:Smarty
対応実施:PWA化
© Opt, Inc. All Rights Reserved.
2018年
借りていた無料レンタルサーバにて無
料SSL開始していた!!
対応実施:PWA化
© Opt, Inc. All Rights Reserved.
1.マニフェストファイル作成
(アイコンなど各種設定を記載した JSON形式のファイル)
2.ServiceWorkerの設置
(キャッシュのコントロール処理を記載した jsファイル)
(制御しないのなら適当な fetchイベントくらい)
3.1と2の読み込み記述追加
(マニフェストファイルは全ページの headerにてリンク記載)
対応実施:PWA化
© Opt, Inc. All Rights Reserved.
(例)manifest.json
対応実施:PWA化
{
"name" : "location plan",
"short_name" : "LocationPlan",
"description" : "make your travel plan",
"start_url" : "/m_mail_pwa/php/login.php",
"display" : "standalone",
"orientation" : "any",
"background_color" : "#ACE",
"theme_color" : "#ACE",
"icons": [
{
"src" : "/m_mail_pwa/map_book.png",
"sizes" : "144x144",
"type" : "image/png"
}]
}
© Opt, Inc. All Rights Reserved.
対応実施:PWA化
self.addEventListener('fetch', function(event) {
});
(例)serviceworker.js
© Opt, Inc. All Rights Reserved.
対応実施:PWA化
var CACHE_NAME = "lp-cache-v1";
var urlsToCache = [
"https://tokyo2020.world/m_mail_pwa/docroot/js/commonFunc.js"
, “XXXXXXXXX”
];
self.addEventListener('install', function(event) {
event.waitUntil(
caches.open(CACHE_NAME )
.then(
function(cache){
return cache.addAll(urlsToCache);
})
);
});
(例)serviceworker.js
© Opt, Inc. All Rights Reserved.
対応実施:PWA化
ホーム画面に追加
の表記がぬるっと
© Opt, Inc. All Rights Reserved.
対応実施:PWA化
追加確認の表示
© Opt, Inc. All Rights Reserved.
対応実施:PWA化
マニフェストファイル
で指定した
画像とアプリ名
© Opt, Inc. All Rights Reserved.
対応実施:PWA化
通常のWeb画面
© Opt, Inc. All Rights Reserved.
対応実施:PWA化
PWA版の画面
© Opt, Inc. All Rights Reserved.
・URLからファイル名を消す
・ネイティブアプリのようにインストール
できるようにする
・サーバアクセス頻度を減らす
対応実施:PWA化
© Opt, Inc. All Rights Reserved.
・URLからファイル名を消す
・ネイティブアプリのようにインストール
できるようにする
・サーバアクセス頻度を減らす
対応実施:PWA化
© Opt, Inc. All Rights Reserved.
対応実施
1. Laravelインストール
2. PWA化
3. IndexedDB導入
© Opt, Inc. All Rights Reserved.
IndexedDBとは
© Opt, Inc. All Rights Reserved.
ウィキペディアによると
値とオブジェクトをローカルデータベー
スに保持するウェブブラウザの標準イ
ンターフェース
対応実施:IndexedDB導入
参照:https://ja.wikipedia.org/wiki/Indexed_Database_API
© Opt, Inc. All Rights Reserved.
オンライン時にログイン/閲覧した情
報を保持しておき、サーバ(DB)アクセ
スの頻度を減らす
対応実施:IndexedDB導入
© Opt, Inc. All Rights Reserved.
1.ログイン情報保持
(最後にログインしたユーザならログインをスキップする)
2.対象ユーザのスポット情報保持
(サーバリクエストすることなく、ロケーション一覧の閲覧を可能に)
対応実施:IndexedDB導入
© Opt, Inc. All Rights Reserved.
対応実施:IndexedDB導入
function initIDPW(){
// DBに接続(新規作成)
var openReq = indexedDB.open(‘userDB’, 1);
openReq.onupgradeneeded = function (event) {
var db = event.target.result;
const objectStore = db.createObjectStore(‘user’, {keyPath : 'id'})
objectStore.createIndex("id", "id", { unique: true });
objectStore.createIndex("onflg", "onflg", { unique: false });
objectStore.createIndex("userid", "userid", { unique: true });
objectStore.createIndex("password", "password", { unique: true });
}
};
(例)indexecDBの初期化
© Opt, Inc. All Rights Reserved.
・URLからファイル名を消す
・ネイティブアプリのようにインストール
できるようにする
・サーバアクセス頻度を減らす
対応実施:IndexedDB導入
© Opt, Inc. All Rights Reserved.
・URLからファイル名を消す
・ネイティブアプリのようにインストール
できるようにする
・サーバアクセス頻度を減らす
対応実施:IndexedDB導入
© Opt, Inc. All Rights Reserved.
総括
© Opt, Inc. All Rights Reserved.
ファイル名が含まれないURLは、
スマートで良い
(萩野の所感)
© Opt, Inc. All Rights Reserved.
最小限のPWA化だけでも、Webアプリがイ
ンストールできるというのは新鮮
かつ
配布用途には良さげ
(萩野の所感)
© Opt, Inc. All Rights Reserved.
APIを多用している場合、その点の高速化
は望めず通信も発生してしまう
(萩野の所感)
© Opt, Inc. All Rights Reserved.
全体最適はできずとも、
部分最適で使い勝手は向上する。
他のアプリも対応させない手はない
(萩野の所感)
© Opt, Inc. All Rights Reserved.
皆さんも、ぜひお試しください!
© Opt, Inc. All Rights Reserved.
ご清聴
ありがとうございました

More Related Content

What's hot

What's hot (20)

ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
 
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
 
リッチなドメインモデル 名前探し
リッチなドメインモデル 名前探しリッチなドメインモデル 名前探し
リッチなドメインモデル 名前探し
 
ちいさなオブジェクトでドメインモデルを組み立てる
ちいさなオブジェクトでドメインモデルを組み立てるちいさなオブジェクトでドメインモデルを組み立てる
ちいさなオブジェクトでドメインモデルを組み立てる
 
ドメイン駆動設計とは何か 【入門編】
ドメイン駆動設計とは何か 【入門編】ドメイン駆動設計とは何か 【入門編】
ドメイン駆動設計とは何か 【入門編】
 
ドメイン駆動設計 分析しながら設計する
ドメイン駆動設計 分析しながら設計するドメイン駆動設計 分析しながら設計する
ドメイン駆動設計 分析しながら設計する
 
Laravelでfacadeを使わない開発
Laravelでfacadeを使わない開発Laravelでfacadeを使わない開発
Laravelでfacadeを使わない開発
 
実践的な設計って、なんだろう?
実践的な設計って、なんだろう?実践的な設計って、なんだろう?
実践的な設計って、なんだろう?
 
凝集度と責務
凝集度と責務凝集度と責務
凝集度と責務
 
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解するドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
Rest ful api設計入門
Rest ful api設計入門Rest ful api設計入門
Rest ful api設計入門
 
オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門
 
Laravelを用いたゲームサーバーのチューニング
Laravelを用いたゲームサーバーのチューニングLaravelを用いたゲームサーバーのチューニング
Laravelを用いたゲームサーバーのチューニング
 
ある工場の Redmine 2022 〜ある工場の Redmine 5.0 バージョンアップ〜 ( Redmine of one plant 2022 ...
ある工場の Redmine 2022 〜ある工場の Redmine 5.0 バージョンアップ〜 (  Redmine of one plant 2022 ...ある工場の Redmine 2022 〜ある工場の Redmine 5.0 バージョンアップ〜 (  Redmine of one plant 2022 ...
ある工場の Redmine 2022 〜ある工場の Redmine 5.0 バージョンアップ〜 ( Redmine of one plant 2022 ...
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
 
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
 
正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース
 
Laravel×DevOps -インフラ構築の自動化から運用ログの監視まで-
Laravel×DevOps -インフラ構築の自動化から運用ログの監視まで-Laravel×DevOps -インフラ構築の自動化から運用ログの監視まで-
Laravel×DevOps -インフラ構築の自動化から運用ログの監視まで-
 
3週連続DDDその1 ドメイン駆動設計の基本を理解する
3週連続DDDその1  ドメイン駆動設計の基本を理解する3週連続DDDその1  ドメイン駆動設計の基本を理解する
3週連続DDDその1 ドメイン駆動設計の基本を理解する
 

Similar to フレームワークも使っていないWebアプリをLaravel+PWAでモバイルアプリっぽくしてみちゃう

オフラインファーストの思想と実践
オフラインファーストの思想と実践オフラインファーストの思想と実践
オフラインファーストの思想と実践
Shumpei Shiraishi
 
Html5 seminar 1_pac
Html5 seminar 1_pacHtml5 seminar 1_pac
Html5 seminar 1_pac
1PAC. INC.
 

Similar to フレームワークも使っていないWebアプリをLaravel+PWAでモバイルアプリっぽくしてみちゃう (20)

Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...
Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...
Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...
 
オフラインファーストの思想と実践
オフラインファーストの思想と実践オフラインファーストの思想と実践
オフラインファーストの思想と実践
 
ヤフー発のメッセージキュー「Pulsar」のご紹介
ヤフー発のメッセージキュー「Pulsar」のご紹介ヤフー発のメッセージキュー「Pulsar」のご紹介
ヤフー発のメッセージキュー「Pulsar」のご紹介
 
ヤフー発のメッセージキュー 「Pulsar」のご紹介@jjug ccc 20171118
ヤフー発のメッセージキュー 「Pulsar」のご紹介@jjug ccc 20171118ヤフー発のメッセージキュー 「Pulsar」のご紹介@jjug ccc 20171118
ヤフー発のメッセージキュー 「Pulsar」のご紹介@jjug ccc 20171118
 
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
 
ログについて改めて考えてみた
ログについて改めて考えてみたログについて改めて考えてみた
ログについて改めて考えてみた
 
概説 Data API v3
概説 Data API v3概説 Data API v3
概説 Data API v3
 
Automation with SoftLayer and Zabbix
Automation with SoftLayer and ZabbixAutomation with SoftLayer and Zabbix
Automation with SoftLayer and Zabbix
 
Workshop1-01
Workshop1-01Workshop1-01
Workshop1-01
 
リクルート式Hadoopの使い方
リクルート式Hadoopの使い方リクルート式Hadoopの使い方
リクルート式Hadoopの使い方
 
ネットワーク分散型フレームワークConView
ネットワーク分散型フレームワークConViewネットワーク分散型フレームワークConView
ネットワーク分散型フレームワークConView
 
XPagesDay 2015 RESTの総復習
XPagesDay 2015 RESTの総復習XPagesDay 2015 RESTの総復習
XPagesDay 2015 RESTの総復習
 
Hadoop ~Yahoo! JAPANの活用について~
Hadoop ~Yahoo! JAPANの活用について~Hadoop ~Yahoo! JAPANの活用について~
Hadoop ~Yahoo! JAPANの活用について~
 
AITCシニア技術者勉強会 「今さら聞けないWebサイト開発」 vol1
AITCシニア技術者勉強会 「今さら聞けないWebサイト開発」 vol1AITCシニア技術者勉強会 「今さら聞けないWebサイト開発」 vol1
AITCシニア技術者勉強会 「今さら聞けないWebサイト開発」 vol1
 
社内システムの構造と設計、実装のはなし(下書きバージョン)
社内システムの構造と設計、実装のはなし(下書きバージョン)社内システムの構造と設計、実装のはなし(下書きバージョン)
社内システムの構造と設計、実装のはなし(下書きバージョン)
 
Unification of the middle scale services by Nuxt.js
Unification of the middle scale services by Nuxt.jsUnification of the middle scale services by Nuxt.js
Unification of the middle scale services by Nuxt.js
 
20130313 OSCA Hadoopセミナー
20130313 OSCA Hadoopセミナー20130313 OSCA Hadoopセミナー
20130313 OSCA Hadoopセミナー
 
Workshop1-02
Workshop1-02Workshop1-02
Workshop1-02
 
Workshop1-03
Workshop1-03Workshop1-03
Workshop1-03
 
Html5 seminar 1_pac
Html5 seminar 1_pacHtml5 seminar 1_pac
Html5 seminar 1_pac
 

More from 株式会社オプト 仙台ラボラトリ

More from 株式会社オプト 仙台ラボラトリ (10)

クラウド入門(AWS編)
クラウド入門(AWS編)クラウド入門(AWS編)
クラウド入門(AWS編)
 
失敗から学ぶAWSの監視
失敗から学ぶAWSの監視失敗から学ぶAWSの監視
失敗から学ぶAWSの監視
 
RPAって何、どんなことできるの
RPAって何、どんなことできるのRPAって何、どんなことできるの
RPAって何、どんなことできるの
 
業務の自動化をはじめよう!!
業務の自動化をはじめよう!!業務の自動化をはじめよう!!
業務の自動化をはじめよう!!
 
RPA(ロボティック・プロセ ス・オートメーション) 仮想労働者の雇い方
RPA(ロボティック・プロセ ス・オートメーション) 仮想労働者の雇い方RPA(ロボティック・プロセ ス・オートメーション) 仮想労働者の雇い方
RPA(ロボティック・プロセ ス・オートメーション) 仮想労働者の雇い方
 
データマート対応した話
データマート対応した話データマート対応した話
データマート対応した話
 
各種データベースの特徴とパフォーマンス比較
各種データベースの特徴とパフォーマンス比較各種データベースの特徴とパフォーマンス比較
各種データベースの特徴とパフォーマンス比較
 
ビッグデータ・データマートとは
ビッグデータ・データマートとはビッグデータ・データマートとは
ビッグデータ・データマートとは
 
ビッグデータとデータマート
ビッグデータとデータマートビッグデータとデータマート
ビッグデータとデータマート
 
一歩前に進める Web開発のスパイス(仙台Geek★Night #1)
一歩前に進めるWeb開発のスパイス(仙台Geek★Night #1)一歩前に進めるWeb開発のスパイス(仙台Geek★Night #1)
一歩前に進める Web開発のスパイス(仙台Geek★Night #1)
 

Recently uploaded

Recently uploaded (10)

論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 

フレームワークも使っていないWebアプリをLaravel+PWAでモバイルアプリっぽくしてみちゃう

  • 1. © Opt, Inc. All Rights Reserved. フレームワークも使っていない WebアプリをLaravel+PWAで モバイルアプリっぽくしてみちゃう PHPカンファレンス仙台 2019
  • 2. © Opt, Inc. All Rights Reserved. 自己紹介 萩野 輝(はぎの あきら) 株式会社オプト 仙台テクノロジー開発部 普段の業務: 広告運用の自動化・効率化を図る社内プロダクトを開発 メインスキルセット: PHP(FuelPHP)、jQuery、MySQL
  • 3. © Opt, Inc. All Rights Reserved. 自己紹介 その2 勉強中!: インフラ関連、フロント関連、Kotlin、PHP 好フレーズ: 大盛、無料、クーポン、キャンペーン、API
  • 4. © Opt, Inc. All Rights Reserved. 自己紹介 その3 クーポンサイト 情報ポータル 記念日管理 複数ショップサイト まとめて検索 宿簡易検索 店舗検索& マッピング 高ポイントおむつ 販売情報ブログ投稿 豚肉レシピツイート BOT
  • 5. © Opt, Inc. All Rights Reserved. © Opt, Inc. All Rights Reserved. 目次 ● はじめに ● PWAとは ● 昔作ったWebアプリについて ● 今回のGOAL ● 対応概要 ● 対応実施
  • 6. © Opt, Inc. All Rights Reserved. はじめに
  • 7. © Opt, Inc. All Rights Reserved. 昔作った愛着のあるWebアプリを、 Laravel+PWAを組み込みつつ モバイルアプリ風に仕上げた過程の話 はじめに
  • 8. © Opt, Inc. All Rights Reserved. 私自身、初の試み ベストプラクティスではないものの、 手段の1つとして参考になれば はじめに
  • 9. © Opt, Inc. All Rights Reserved. PWAとは
  • 10. © Opt, Inc. All Rights Reserved. 「Progressive Web Apps」の略称 ざっくりというとWebサイトを GooglePlayストアで提供されている モバイルアプリのようにする仕組み PWAとは
  • 11. © Opt, Inc. All Rights Reserved. PWAの詳細は、 タガヤスというIT勉強会にて、 グレープシティ株式会社の瀬川様が 発表されていました PWAとは http://bit.ly/2U9GJg4
  • 12. © Opt, Inc. All Rights Reserved. 昔作ったWebアプリについて
  • 13. © Opt, Inc. All Rights Reserved. [ アプリ機能概要 ] ・店舗の情報を検索 ・店舗位置を地図へマッピング ・店舗間の距離&移動時間表示 ・作成した地図の共有 昔作ったWebアプリについて
  • 14. © Opt, Inc. All Rights Reserved. [ 環境 ] ・サーバ:無料レンタルサーバ ・SSL:なし ・PHP:5.6 ・DB:MySQL(5.7.22) ・フレームワーク:なし ・その他:Smarty 昔作ったWebアプリについて
  • 15. © Opt, Inc. All Rights Reserved. [ 利用API ] ・Yahoo!ローカルサーチAPI   (全国の店舗、イベント、クチコミ情報などの地域・拠点情報を検索) ・Yahoo!ジオコーダAPI   (住所をキーワードとして検索し、その位置情報取得) ・GoogleMapsAPI   (距離&時間を取得)   (地図へのマッピングおよび表示) 昔作ったWebアプリについて
  • 16. © Opt, Inc. All Rights Reserved. ちょっと紹介 (デモ) 昔作ったWebアプリについて
  • 17. © Opt, Inc. All Rights Reserved. 今回のGOAL
  • 18. © Opt, Inc. All Rights Reserved. ・URLからファイル名を消す ・ネイティブアプリのようにインストール できるようにする ・サーバアクセス頻度を減らす 今回のGOAL
  • 19. © Opt, Inc. All Rights Reserved. 対応概要
  • 20. © Opt, Inc. All Rights Reserved. 対応内容は3点 対応概要
  • 21. © Opt, Inc. All Rights Reserved. 1. Laravelインストール 2. PWA化 3. IndexedDB導入 対応概要
  • 22. © Opt, Inc. All Rights Reserved. Laravelインストール ⇓ URLからファイル名を消す 対応概要
  • 23. © Opt, Inc. All Rights Reserved. PWA化 ⇓ ネイティブアプリのように インストールできるように する 対応概要
  • 24. © Opt, Inc. All Rights Reserved. IndexedDB導入 ⇓ サーバアクセス頻度を減らす 対応概要
  • 25. © Opt, Inc. All Rights Reserved. 対応実施
  • 26. © Opt, Inc. All Rights Reserved. 対応実施 1. Laravelインストール 2. PWA化 3. IndexedDB導入
  • 27. © Opt, Inc. All Rights Reserved. なぜLaravelなのか? 対応実施:Laravelインストール
  • 28. © Opt, Inc. All Rights Reserved. Laravelには、routeヘルパがある!! 対応実施:Laravelインストール
  • 29. © Opt, Inc. All Rights Reserved. https://{ドメイン}/XXX/XXX/login.php        ↓↓↓  https://{ドメイン}/login 対応実施:Laravelインストール
  • 30. © Opt, Inc. All Rights Reserved. 開発環境構築も含め、Laravelが公式公 開しているHomeSteadを利用 対応実施:Laravelインストール
  • 31. © Opt, Inc. All Rights Reserved. ・各種必要ソフトウェアインストール ・HomeSteadインストール ・composerでプロジェクト作成 対応実施:Laravelインストール
  • 32. © Opt, Inc. All Rights Reserved. 正常起動に至った各種バージョン ・Windows10 Pro(64bit) ・Git:2.20 ・VirtualBox:6.0 ・Vagrant:2.2.2 ・Laravel:5.5.44 対応実施:Laravelインストール
  • 33. © Opt, Inc. All Rights Reserved. ・URLからファイル名を消す ・ネイティブアプリのようにインストール できるようにする ・サーバアクセス頻度を減らす 対応実施:Laravelインストール
  • 34. © Opt, Inc. All Rights Reserved. ・URLからファイル名を消す ・ネイティブアプリのようにインストール できるようにする ・サーバアクセス頻度を減らす 対応実施:Laravelインストール
  • 35. © Opt, Inc. All Rights Reserved. 対応実施 1. Laravelインストール 2. PWA化 3. IndexedDB導入
  • 36. © Opt, Inc. All Rights Reserved. PWAを進めるにあたり 必須となってくるのが SSL 対応実施:PWA化
  • 37. © Opt, Inc. All Rights Reserved. [ 環境 ] ・サーバ:無料レンタルサーバ ・SSL:なし ・PHP:5.6 ・DB:MySQL(5.7.22) ・フレームワーク:なし ・その他:Smarty 対応実施:PWA化
  • 38. © Opt, Inc. All Rights Reserved. [ 環境 ] ・サーバ:無料レンタルサーバ ・SSL:なし ・PHP:5.6 ・DB:MySQL(5.7.22) ・フレームワーク:なし ・その他:Smarty 対応実施:PWA化
  • 39. © Opt, Inc. All Rights Reserved. 2018年 借りていた無料レンタルサーバにて無 料SSL開始していた!! 対応実施:PWA化
  • 40. © Opt, Inc. All Rights Reserved. 1.マニフェストファイル作成 (アイコンなど各種設定を記載した JSON形式のファイル) 2.ServiceWorkerの設置 (キャッシュのコントロール処理を記載した jsファイル) (制御しないのなら適当な fetchイベントくらい) 3.1と2の読み込み記述追加 (マニフェストファイルは全ページの headerにてリンク記載) 対応実施:PWA化
  • 41. © Opt, Inc. All Rights Reserved. (例)manifest.json 対応実施:PWA化 { "name" : "location plan", "short_name" : "LocationPlan", "description" : "make your travel plan", "start_url" : "/m_mail_pwa/php/login.php", "display" : "standalone", "orientation" : "any", "background_color" : "#ACE", "theme_color" : "#ACE", "icons": [ { "src" : "/m_mail_pwa/map_book.png", "sizes" : "144x144", "type" : "image/png" }] }
  • 42. © Opt, Inc. All Rights Reserved. 対応実施:PWA化 self.addEventListener('fetch', function(event) { }); (例)serviceworker.js
  • 43. © Opt, Inc. All Rights Reserved. 対応実施:PWA化 var CACHE_NAME = "lp-cache-v1"; var urlsToCache = [ "https://tokyo2020.world/m_mail_pwa/docroot/js/commonFunc.js" , “XXXXXXXXX” ]; self.addEventListener('install', function(event) { event.waitUntil( caches.open(CACHE_NAME ) .then( function(cache){ return cache.addAll(urlsToCache); }) ); }); (例)serviceworker.js
  • 44. © Opt, Inc. All Rights Reserved. 対応実施:PWA化 ホーム画面に追加 の表記がぬるっと
  • 45. © Opt, Inc. All Rights Reserved. 対応実施:PWA化 追加確認の表示
  • 46. © Opt, Inc. All Rights Reserved. 対応実施:PWA化 マニフェストファイル で指定した 画像とアプリ名
  • 47. © Opt, Inc. All Rights Reserved. 対応実施:PWA化 通常のWeb画面
  • 48. © Opt, Inc. All Rights Reserved. 対応実施:PWA化 PWA版の画面
  • 49. © Opt, Inc. All Rights Reserved. ・URLからファイル名を消す ・ネイティブアプリのようにインストール できるようにする ・サーバアクセス頻度を減らす 対応実施:PWA化
  • 50. © Opt, Inc. All Rights Reserved. ・URLからファイル名を消す ・ネイティブアプリのようにインストール できるようにする ・サーバアクセス頻度を減らす 対応実施:PWA化
  • 51. © Opt, Inc. All Rights Reserved. 対応実施 1. Laravelインストール 2. PWA化 3. IndexedDB導入
  • 52. © Opt, Inc. All Rights Reserved. IndexedDBとは
  • 53. © Opt, Inc. All Rights Reserved. ウィキペディアによると 値とオブジェクトをローカルデータベー スに保持するウェブブラウザの標準イ ンターフェース 対応実施:IndexedDB導入 参照:https://ja.wikipedia.org/wiki/Indexed_Database_API
  • 54. © Opt, Inc. All Rights Reserved. オンライン時にログイン/閲覧した情 報を保持しておき、サーバ(DB)アクセ スの頻度を減らす 対応実施:IndexedDB導入
  • 55. © Opt, Inc. All Rights Reserved. 1.ログイン情報保持 (最後にログインしたユーザならログインをスキップする) 2.対象ユーザのスポット情報保持 (サーバリクエストすることなく、ロケーション一覧の閲覧を可能に) 対応実施:IndexedDB導入
  • 56. © Opt, Inc. All Rights Reserved. 対応実施:IndexedDB導入 function initIDPW(){ // DBに接続(新規作成) var openReq = indexedDB.open(‘userDB’, 1); openReq.onupgradeneeded = function (event) { var db = event.target.result; const objectStore = db.createObjectStore(‘user’, {keyPath : 'id'}) objectStore.createIndex("id", "id", { unique: true }); objectStore.createIndex("onflg", "onflg", { unique: false }); objectStore.createIndex("userid", "userid", { unique: true }); objectStore.createIndex("password", "password", { unique: true }); } }; (例)indexecDBの初期化
  • 57. © Opt, Inc. All Rights Reserved. ・URLからファイル名を消す ・ネイティブアプリのようにインストール できるようにする ・サーバアクセス頻度を減らす 対応実施:IndexedDB導入
  • 58. © Opt, Inc. All Rights Reserved. ・URLからファイル名を消す ・ネイティブアプリのようにインストール できるようにする ・サーバアクセス頻度を減らす 対応実施:IndexedDB導入
  • 59. © Opt, Inc. All Rights Reserved. 総括
  • 60. © Opt, Inc. All Rights Reserved. ファイル名が含まれないURLは、 スマートで良い (萩野の所感)
  • 61. © Opt, Inc. All Rights Reserved. 最小限のPWA化だけでも、Webアプリがイ ンストールできるというのは新鮮 かつ 配布用途には良さげ (萩野の所感)
  • 62. © Opt, Inc. All Rights Reserved. APIを多用している場合、その点の高速化 は望めず通信も発生してしまう (萩野の所感)
  • 63. © Opt, Inc. All Rights Reserved. 全体最適はできずとも、 部分最適で使い勝手は向上する。 他のアプリも対応させない手はない (萩野の所感)
  • 64. © Opt, Inc. All Rights Reserved. 皆さんも、ぜひお試しください!
  • 65. © Opt, Inc. All Rights Reserved. ご清聴 ありがとうございました