Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
PWAサービスワーカーとIndexedDBによるオフライン動作可能Webなアプリを作った話
Search
Atotti
December 04, 2023
Programming
600
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
PWAサービスワーカーとIndexedDBによるオフライン動作可能Webなアプリを作った話
PWA Builderについても少しだけ試してみた
Atotti
December 04, 2023
More Decks by Atotti
See All by Atotti
2023マンスリーハッカソンvol.10 knowFill
atotti
0
100
Other Decks in Programming
See All in Programming
Contextとはなにか
chiroruxx
1
380
作って学ぶ、 JSX (TSX) ランタイムの基本
syumai
7
1.7k
肥大化するレガシーコードに立ち向かうためのインターフェース分離と依存の逆転 / JJUG CCC 2026 Spring
hirokunimaeta
0
650
symfony/aiとlaravel/boost
77web
0
110
Agentic UI
manfredsteyer
PRO
0
210
A2UI という光を覗いてみる
satohjohn
1
170
AI時代のUIはどこへ行く?その2!
yusukebe
22
7.6k
セキュリティの専門家じゃなくてもできる。「セキュリティ意識」をアップデートして サプライチェーン攻撃への耐性を高めよう。
tk3fftk
5
1k
さぁV100、メモリをお食べ・・・
nilpe
0
160
Observability in Practice:Grafana 與 Edge Device SRE 的那些事
blueswen
0
180
Inside Stream API
skrb
1
810
Hatena Engineer Seminar #37「言語モデルの活用に関する研究」
slashnephy
0
420
Featured
See All Featured
The browser strikes back
jonoalderson
0
1.3k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
440
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
260
Information Architects: The Missing Link in Design Systems
soysaucechin
0
990
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
950
Evolving SEO for Evolving Search Engines
ryanjones
0
230
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
280
Prompt Engineering for Job Search
mfonobong
0
360
We Are The Robots
honzajavorek
0
260
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1k
Transcript
Web技術のみで スマホアプリを作る話 東京都立大学システムデザイン学部 情報科学科2年 あゆ 𝕏 @aya172957 mail
[email protected]
自己紹介 名前:あゆ 戸籍ネーム:堤 歩斗 所属:TMU::SD::CS::B2 好きな言語:Python 好きなデータベース:SQLite AtCodee:茶~緑 つくったもの:石池、Qualtet、kibaco拡張機能、等
Web技術でスマホアプリが作れるの? • はい • 一般にスマホアプリを作るにはiOS向けならSwift、Android向けならkotlin等での開 発が必要 • クロスプラットフォーム対応技術である React Native
や Flutter も使いません • PWAという技術を使います
Progressive Web Appsを知っていますか?私は知ってい ます。 • PWA(Progressive Web Apps) ◦ サイト上で「アプリをインストールしますか?」と聞かれるアレ
• 通常のWebアプリとの違い ◦ インストールが可能 ◦ オフライン動作をサポート ◦ プッシュ通知が使える(今回は省略) • ネイティブアプリとの違い ◦ インストールしなくても利用できる ▪ (ブラウザから利用できる) ◦ 更新が容易 ▪ ストアの審査が不要 ◦ 完全クロスプラットフォーム対応
PWAの作り方 1. まずWebアプリを用意します 2. マニフェストを準備します 3. サービスワーカーを加えます 4. 完成
インストール可能を実現するWeb App Manifest Webアプリケーションをデバイスのホーム画面 に登録できるようにする技術 JSON形式でWebアプリケーションの情報を記 述したファイルを用意し、それをHTMLのhead 要素内に入れてあげるだけで、インストール可 能になる backgournd_color
背景色 display Webアプリの表示方 法 icons アイコン画像 name アプリ名 short_name 短いアプリ名 theme_color テーマカラー start_url 最初に表示される URL
オフライン動作を実現する Service Workers バックグラウンドでネットワークプロキシ処理を実 行する Service Workers はWebブラウザとWebサーバー の間に割り込み(右図)、プロキシのように動作する JavaScriptプログラムを実現する。
オフライン時にWebサーバーにアクセスせずにブ ラウザ内に保存されたリソースを Webアプリケー ションに返す処理を書けば良い。 https://knowledge.sakura.ad.jp/23201/#WebAndroidWeb_App_Manifest
完成したものがこちらです インストール方法 Android : [インストール] iOS : [共有] → [ホーム画面
に追加] https://timetable.ayutaso.com
技術スタック https://api.ayutaso.com/docs api/{day}/{period} 静的ホスティングServer バックエンドAPI 曜日・時限を指定して 授業情報をGET ユーザーの時間割情報 (ローカルストレージ) 新規登録時
閲覧時
IndexedDB ユーザーの登録した授業の情報はサーバー には保存していない ブラウザのローカルストレージに保存してい る IndexedDBはユーザーのブラウザ内にデー タを永続的に保存できる。 autoIncrementやトランザクション、簡単なク エリも実行出来て便利。
Service Workerが作るキャッシュ Service Worker内の実装でファイルをキャッシュ出来る。 今回は全部キャッシュした。
でもこれ、アプリじゃなくね? • アプリにもできます! ◦ PWA Builderというツールを使います(pwabuilder.com) • PWA製ウェブアプリをGoogle PlayやApp Storeなでへアップロード可能な形式へ変
換してくれる(すごい) • 中身はウェブビューなので、ネイティブアプリとは当然違う
PWA Builderを試す URLを入力するだけで、Windows、Android、 iOS、Meta Quest(!?)向けのアプリに変換できるみ たい ですが…
アプリをストアに出すのはめんどくさい • AppleのApp Storeでアプリを公開するには、年間99ドルの費用がかかります。 • iOS向けアプリをビルドするにはXCodeが必要です。これはMacでしか使えません。 • Google Playでは、一度のみ25ドルの登録料が必要です。 ちなみにChrome
Webストアは一度のみ5ドルです。(安い)
PWAで良くね? この程度のアプリケーションであれば、スマートフォン向けのアプリケーションとして提供し たい場合でも、PWAを活用することで開発者としては手軽に そしてより良いユーザー体験を提供出来るはずです。 PWAはいいぞ。
開発で困ったこと Offline動作のテストが難しい ただのキャッシュで上手くいってないのに上手く 言ってるように見える場合がある • 開発者ツールに便利な機能があった ServiceWorkerのInstallは上手くいってるけど実 はfetchでまだエラー吐いたりしてる
リポジトリとか フロント(React) https://github.com/Atotti/pwa-timetable-app バックエンドAPI(FastAPI) https://github.com/Atotti/pwa-timetable-app アプリケーション https://timetable.ayutaso.com Swagger https://api.ayutaso.com/docs