宅建士の業務ハック

紙とFAXの残る不動産業界で、現役宅建士がコードを書きながら、日々の仕事を少しずつ楽にしていく

AIは「便利ツール」ではなく、高次元抽象化革命なのか

AI

AIは単なる便利ツールなのか。それとも、人類が「言語」「数学」「お金」「宗教」で積み重ねてきた抽象化革命の延長線上にある存在なのか。ライト兄弟、金融工学、宗教、LLM研究などを横断しながら、「AI=高次元抽象化エンジン」という視点で文明の未来を考…

`useEffect` の第2引数(依存配列)を空にしていい場面・してはいけない場面——しまなみガイドの実装から整理した

useEffect の第2引数(依存配列)を空にしていい場面・してはいけない場面を、しまなみ海道ガイドサイトの実装コードをもとに4パターンで整理した記事です。stale closure 問題や ESLint の exhaustive-deps ルールについても解説しています。

`Promise.all` で複数APIを並列fetchしつつ、1件失敗しても残りを使う設計——しまなみガイドのバス時刻表実装

複数のバス事業者の時刻表JSONを並列で取得する際、1件が404でも残りのデータは表示したい——という要件を Promise.all の内側 try/catch で null を返す設計で解決した記録です。Promise.allSettled との比較、このパターンを使うべきでない場面、cancelled …

ライブラリなしでスワイプ対応 BottomSheet を React に実装した——CSSトランジションが「一発で動かない理由」と double rAF trick

Radix UI や vaul を使わず、React + TypeScript で BottomSheet をゼロから実装しました。CSSトランジションが動かない原因と double rAF による解決、スワイプ速度判定、inert 属性、フォーカス復帰、createPortal まで、実装の中で学んだことをまとめます…

useCallback が必要な場面・不要な場面——「とりあえず入れとく」はパフォーマンスを悪化させる

useCallbackは「とりあえず入れとく」が通用しないフックです。不要な場面では可読性の低下とわずかなパフォーマンス悪化を招きます。React.memoとの組み合わせ・useEffectの依存配列・依存チェーンの3パターンを実コードで整理しました。

layout.tsx と page.tsx の違いがわからなかった——本サイトを作って理解できたこと

Next.js App Router の layout.tsx と page.tsx の違いを本サイトの実コードで整理しました。どちらに何を書くか迷ったときの判断基準、metadata・generateStaticParams の使い分けまでまとめています。

カスタムフックで「どこで何が動くか」を整理——useIsMobile / useGeolocate / useCloseAll の設計

本サイトの地図画面開発で生まれた3つのカスタムフックを実コードで整理しました。ブラウザAPIをラップする useIsMobile、コールバックとstateをセットにする useGeolocate、複数storeの横断操作をまとめる useCloseAll——目的が違えばフックの形も変わります…

自前キャッシュをTanStack Queryに移行した——176行のコードが82行に

useHotelDetail.tsで自前実装していたMapキャッシュ・inFlight管理・latestNoRefによる競合制御をTanStack Queryに移行しました。176行あったコードが82行になり、「どうやるか」を全部ライブラリに任せられるようになった過程を実際のコードで整理します。