個人開発でのプログラミングこそが至高
レスポンス429の時に成功するまでリクエストをし続ける
運用こそ正義 ありがたいことに運用中のサービスを使ってくれる人が、本当にぼちぼちだが増えたきた……、気がする。 https://kindle-unlimited-search.nove-b.dev/ ただまだいくつか問題い点があり、今回はその1つ「ステータスコードがしっかり定義されていない」という問題を解決した。 現状のサービスだと 該当する作家が見つからない クエリで送ったページが範囲外 amazon側のリクエスト不可で応答できない という起こりえるエラーをすべて400のサーバーエラーでフロント側に返していた。 これだと、フロント側でユーザーに対して異なるメッセージを提供することができず、全く親切じゃない。 しかもフロントは400が返ってくる前でリクエストをし続けるという、こちらも全く親切じゃない実装をしていた。 ステータスコードを定義した そこで、該当する作家が見つからない時は404を、ページが範囲害外の時は416を、そしてリクエスト制限の時は429を返すようにした。 そしてフロントではその値で処理を分けることにした。 404の時は「検索した作家の作品が見つかりませんでした。」というスナックバーを出し、416の時はつまり、すべてのページを確認したということなので「作品(最大100件)の取得が完了しました。」というスナックバーを出し、429の時は再度リクエスト制する(5回まで挑戦する)という仕様に書き換えた。 リクエストを再試行する 429のように再度リクエストするコードをプラグインなしで初めて書いてみたので備忘録してまとめておく。 初めて知ったんだけど、指数バックオフという手法を取ることにした。 指数バックオフとは リトライ(再試行)する間隔を指数関数的に増加させる手法 とのことらしい。 つまり初回のリトライに失敗したら1秒後に再試行、2回目失敗したら2秒後に再試行、3回目失敗したら4秒後…といった具合に増加していく。 これに加えて今回は5回までリトライして接続できなかった時は処理を中断させることにした。 const fetchAPI = async () => { setState("wait"); let page = 1; let retryCount = 0; const maxRetryCount = 5; // 最大リトライ回数 while (true) { // page が 10 を超えた場合はループを終了 if (page > 10) { setState("end"); console.log("成功"); break; } try { const response = await fetch(`${endpoint}$`); if (response....
React Router v7で作成したウェブアプリをPWAにする
React Router v7でウェブアプリを作成した。 Kindle Unlimitedの検索が使いにくいので、好きな作家の対象本を一覧表示するサービスを作った これを少しずつ改良しているんだけど、サイトに訪問するのが面倒なのでPWAにすることにした。 環境 PWAにしたアプリの環境は下記の通り。 { "react-router": "^7.1.5", "react": "^19.0.0", "vite": "^5.4.11", } "volta": { "node": "23.8.0", "npm": "10.9.2" } PWAにする vite-plugin-pwaをインストールする。 npm install -D vite-plugin-pwa vite.config.tsのpluginsにvite-plugin-pwaを追加する。 plugins: [ ... VitePWA({ registerType: "autoUpdate", // サービスワーカーを自動的に更新する設定 manifest: { name: "アプリ名", short_name: "短縮名", description: "アプリの説明", theme_color: "#ffffff", background_color: "#ffffff", display: "standalone", orientation: "portrait", start_url: "/", icons: [ { src: "/icons/icon-192x192.png", sizes: "192x192", type: "image/png", }, { src: "/icons/icon-512x512.png", sizes: "512x512", type: "image/png", }, ], screenshots: [ { src: "screenshots/screenshot1....
VS Codeをコマンドから開くときに既存ウィンドウで開くようにする
bashで特定のディレクトに行き、 code . 上記コマンドでVS Codeを開くことができる。 いつもこの方法で開いていたのだが、毎回毎回新しいウィンドウで開くのが鬱陶しかったので、既存ウィンドウで開くコマンドを調べてみた。 code . -r 上記で既存ウィンドウで開けるらしい。 ちなみに既存、新しいウィンドウで開くかは設定によるらしい。 もし新しいウィンドウで開きたいときは、 code . -n 上記コマンドを実行する。
Windowsのキーボードで英字入力、日本語入力の切り替えをシンプルにする
最近、英語入力、日本語入力でよく間違える。 なんでだろうと原因を考えてみたけど、現在どっちの入力モードかわからないことがいけない気がする。 そこで明示的に切り替えられるようにした。 「あ」(「A」の可能性もある)を右クリックでIMEオプションを開く 設定 キーとタッチレスのカスタマイズ キーの割り当てをオンに 無変換キー IME-on 変換キー IME-off という風に設定すれば、 無変換キー押下で日本語入力に。 変換キー押下で英語入力という風に明示的に変更することができるようになった。 Macは標準でこの設定だった気がする、さすがMac。
【2025年2月】土日お出かけ月間のなか個人開発もけっこう楽しめた
2月に読んだ本 鹿男あをによし 豆腐の角に頭ぶつけて死んでしまえ事件 (実業之日本社文庫) 2月も読めなった。 というより今読んでいる朝井リョウの本が、なんとなく重たくって読書が進まない。 そういえば冬になってから、ずっと鬼平犯科帳が読みたいんだけど、過去に持っていたことを考えるとお金出して買いたくない。 Kindle Unlimitedの対象になってくれないかしら。 BOOX GoColor7が気になる Kindleを購入してまるっと5年経つけど、Kindle Unlimitedでしか、ほぼほぼ本を読まなくなってきた。 5年経ったのでさすがにKindleのレスポンスが遅くなってきた。 そろそろ新しいのを買わなくちゃいけないんだけど、最近のKindleは27,980円するらしい。 27,980円の読書しかできない端末ってどうなうんだろう。 今使っているスマホも5000円で買ったというのに、それより高い読書しかできない端末ってあんまりしっくりこない。 そんなか、BOOX GoColor7というのを見つけた。 Kindle Paperwhite と比較すると、2万円の差額でカラーに対応しているし、Android OSが入っているらしい。 3GBでスムーズに動くのかという疑問もあるけど、検討する価値はありそうということで、電気屋に行った時は探してみることにする。 項目 BOOX GoColor7 Kindle Paperwhite 画面サイズ 7インチ 7インチ 画面タイプ Kaleido 3 (カラーE Ink) モノクロE Ink (300ppi) フロントライト ○ (調光・色温調整あり) ○ (調光・色温調整あり) 解像度 1264×1680 (カラー: 150ppi, モノクロ: 300ppi) 1236×1648 (300ppi) OS Android 11 Kindle専用OS アプリインストール ○ (Google Play対応) × (Kindleストアのみ) ストレージ容量 32GB 16GB / 32GB RAM 3GB 非公開 防水性能 × ○ (IPX8) バッテリー持ち 数週間 (使用状況による) 数週間 (使用状況による) 重量 約195g 約205g 接続端子 USB-C USB-C ワイヤレス通信 Wi-Fi / Bluetooth Wi-Fi / Bluetooth (シグニチャーエディション) 価格 約50,000円前後 約27,980円~32,980円 特徴 カラー表示対応、Androidアプリ利用可 Kindleストア最適化、防水性能あり 4月から保育園が始まる ただ今、そんなものを探している場合じゃない。...