0414
LOGS
PWA with firebase Messaging をローカルでもやる
- 昨晩やったので続きから
 src/sw.tsを書いて,public/firebase-messaging-sw.jsにesbuildを用いてビルド- ただ, 
viteとは別で動かしているので,viteとの連携ができていない - つまり,
import.meta.env.XXXが使えない - プラグインも使ったり,
defineオプションつけたりしてみたが,だめ -> undefinedimport.meta 
- ただ, 
 ということで,結局別のアプローチとして,
esbuild-sw.jsを書いて,ビルドスクリプトを用意したimport esbuild from 'esbuild'; import dotenv from 'dotenv'; // .envファイルから環境変数をロード dotenv.config(); esbuild.build({ entryPoints: ['src/sw.ts'], outfile: 'public/firebase-messaging-sw.js', bundle: true, minify: true, sourcemap: false, define: { 'process.env.VITE_FIREBASE_API_KEY': JSON.stringify(process.env.VITE_FIREBASE_API_KEY), 'process.env.VITE_FIREBASE_AUTH_DOMAIN': JSON.stringify(process.env.VITE_FIREBASE_AUTH_DOMAIN), 'process.env.VITE_FIREBASE_PROJECT_ID': JSON.stringify(process.env.VITE_FIREBASE_PROJECT_ID), 'process.env.VITE_FIREBASE_STORAGE_BUCKET': JSON.stringify(process.env.VITE_FIREBASE_STORAGE_BUCKET), 'process.env.VITE_FIREBASE_MESSAGING_SENDER_ID': JSON.stringify(process.env.VITE_FIREBASE_MESSAGING_SENDER_ID), 'process.env.VITE_FIREBASE_APP_ID': JSON.stringify(process.env.VITE_FIREBASE_APP_ID), }, platform: 'browser', target: ['esnext'] }).catch(() => process.exit(1));- これでOK
 - あとはこれを実行する 
> node esbuild-sw.js - 忘れずに package.json の 
scriptsにも記述 - 続いて push 通知の諸々の実装
 - とりま,Web Push の可能性を確認
window, navigatorオブジェクトに以下があるかを確認'Notification' in window'serviceWorker' in navigator'PushManager' in window
 
なぜかこのタイミングで Linter を変更
- VSCode で format が自動で効いていないのと,試したかった 
biomejsを使ってみる - 詳しくは公式ドキュメント
 
> pnpm i biome -D # 初期化(これで biome.json が生成される) > pnpm biome init # 全ファイルをチェック,リント,修正をいっぺんにやるコマンド > pnpm biome check --apply src/**/*- 簡単.すぐ動くし速い👍
 - 細かなルールは適宜やるとして,一旦デフォルトで 
tabIndexになっているのでそれをspaceに変更する - 
- VSCode で format が自動で効いていないのと,試したかった 
 戻って
FCM使った Push 通知の続き- クライアントで 
permissionを取得 
const permission = await Notification.requestPermission(); // こっちではだめ // 単に今の permission を取得するだけなので,ちゃんとユーザーに聞く const permission = Notification.permission;- 諸々 ChatGPT が教えてくれて助かるー
 - 俺のブラウザデフォルトでは通知の設定をブロックしていたので,とりま 
localhost:5173を許可したら,permission がちゃんとgrantedになった - service worker 周りの型がわからないので,悔しいが 
anyを使う← 
// ↓↓こういうやつと // biome-ignore lint/suspicious/noExplicitAny: <explanation> declare let self: any; // ← 本当は ServiceWorkerGlobalScope と書き方買った const app = initializeApp(firebaseConfig); // ↓↓こういうやつ // biome-ignore lint/suspicious/noExplicitAny: <explanation> self.addEventListener("activate", (event: any) => { event.waitUntil(self.clients.claim()); });- 今日はここで限界かも
 - とりま リポジトリ はここ
 一旦 PWA アプリから
grantedと登録のメッセージがきた!

実機でも試したかったが,取得した
tokenどうする問題- 雑に画面に表示することでお茶を濁す
 
- クライアントで 
 - ここで眠くて終了