FloCafe
FloCafe는 구독 없이 무료로 주문·테이블·주방 디스플레이·로컬 데이터를 관리하는 로컬 퍼스트 레스토랑 POS입니다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
zero.estate の0円物件を衛星写真の地図に表示する静的サイト
README 전체를 불러오는 중입니다.
README 전문 보기 ↗0円物件を掲載サイトから集めて、衛星写真の地図に表示するサイト。サイト名は譲葉。
自宅クラスタ(deploy/)に server.ts を常時デプロイしてあり、そこが配信する。
以前は GitHub Pages の静的サイトとしても同じものを配っていたが、DNSを自宅に
切り替えた上で Pages 側は削除済み。
| 取得元 | 対象 |
|---|---|
| フィールドマッチング | 売買価格が FM_MAX_PRICE(既定1円)以下の物件 |
| 負動産の掲示板 | 募集中・商談中・成約済みの全物件 |
| NISUMEL | 掲載物件(サンプル投稿は除く) |
| 家いちば | 価格が IE_MAX_PRICE(既定0円)以下の物件 |
| 全国0円不動産 | 地域ページに載っている全物件 |
みんなの0円物件(zero.estate)は取得しない。 収集・掲載を照会したところ 2026年8月に不承諾の回答を受けたため、取得コードごと外した。詳しくは「利用条件」を参照。
app.ts CLI。取得・住所検索・生成を呼び分けるだけ
build.ts 取得 → 住所検索 → map.json。ステータスと地方もここで揃える
server.ts 配信と定期ビルド (Bun.serve + Bun.cron)。手元でも自宅鯖でも同じもの
sources/ 取得元ごとの実装(1ファイル1サイト)
index.ts 取得元の一覧。ここに足せば全部の処理に乗る
common.ts 名乗り・待ち・生データの置き場・住所と価格の読み方
fieldmatching.ts フィールドマッチング
makedosan.ts 負動産の掲示板
nisumel.ts NISUMEL
ieichiba.ts 家いちば
zenkokuzeroen.ts 全国0円不動産
geocode.ts 座標が無い物件を住所から引く(国土地理院API)
types.ts 地図が読む共通の物件型
index.html 地図ページ
src/main.ts MapLibre GL の地図・絞り込み・一覧(TypeScript)
build-web.ts src/ を assets/ に書き出す
assets/styles.css 見た目(ここは手書き)
assets/favicon.svg, assets/apple-touch-icon.png アイコン(手書き)
assets/main.js 生成物。maplibre-gl.* も生成時に置かれる
Dockerfile 実行イメージ。node_modules は入らない(実行時の依存が無いため)
compose.yml ローカル実行。認証情報は compose.override.yml で上書きする
deploy/ 自宅クラスタ用のマニフェスト。ArgoCD が追従してデプロイする
data/ 生成物。すべて Git 管理外
map.json 地図が読む軽量データ
<取得元>.json 取得元ごとの生データ
geocode-cache.json 住所検索の結果
data/ は丸ごと生成物なので、消しても bun app.ts で作り直せる
(住所検索のキャッシュも消えるため、その分だけ国土地理院APIを引き直す)。
公開時は data/map.json をサイト直下の /map.json として配る。
bun app.ts # 取得 → 住所検索 → map.json
bun app.ts fetch # すべての取得元から取得する
bun app.ts fetch fm # 1つの取得元だけ(fm / md / ni / ie / zz)
bun app.ts geocode # 座標が無い物件の住所を国土地理院APIで引く
bun app.ts json # 生データから map.json を作る
bun run build:web # src/main.ts を assets/ に書き出す
bun run dev # フロントをビルドして http://localhost:5173/ で確認
bun run start # 配信のみ (BUILD_CRON を入れると定期ビルドも走る)
bun run lint # oxlint と書式 (bun fmt --check)。直すのは bun run format
bun run typecheck # 型
bun run test # テスト (bun test)
取得元を足すときは sources/ にファイルを1つ作り、sources/index.ts の
SOURCES に並べる。取得・住所検索・map.json への合流はそれだけで通る。
| 変数 | 意味 |
|---|---|
FM_MAX_PRICE | フィールドマッチングで地図に載せる価格の上限。既定 1(円) |
IE_MAX_PRICE | 家いちばで地図に載せる価格の上限。既定 0(円) |
FETCH_DELAY_MS | 取得の間隔。既定 700(ミリ秒) |
GEOCODE_DELAY_MS | 住所検索の間隔。既定 500(ミリ秒) |
HTTPS_PROXY | 海外IPから負動産の掲示板・NISUMEL を取得する際に迂回させる。プロセス全体の fetch に掛かる。下記参照 |
PORT | 配信するポート。既定 5173 |
BUILD_CRON | 定期ビルドの時刻(例 0 9 * * *)。空なら定期ビルドをしない |
TZ | BUILD_CRON を読む時間帯。既定 Asia/Tokyo |
ローカルでは compose.override.yml に書く(Git 管理外)。
cp compose.override.yml.example compose.override.yml # 値を書き換えて使う
docker compose up --build # https://yuzuriha.localhost/
コンテナはポートを公開せず、danything/genkan (caddy-docker-proxy)にホスト名で振り分けてもらう。先に genkan を起動しておくこと。
curl -sf https://raw.githubusercontent.com/danything/genkan/main/init.sh | sh -s
bun run dev で直に動かす場合は http://localhost:5173/。
自宅クラスタでは deploy/deployment.yaml に直接書く。
イメージのビルド自体(.github/workflows/docker-publish.yml)はこれらの変数を
読まないので、GitHub Actions の Secrets には登録していない。
描画は MapLibre GL JS(WebGL)。ラスタタイルも点も GPU で描くので、 DOM でタイルを動かす方式(Leaflet)よりパンが軽い。WebGL2 が必要なので、 使えない環境では地図の代わりにその旨を表示する。
maplibre-gl はバンドルに含めず、dist の .mjs をそのまま assets/ に置いて
importmap で解決している。まとめても得にならないため。描画は Web Worker と
共通コード(maplibre-gl-shared.mjs)を分け合っていて、自前でバンドルすると
主スレッド側の 254KB (gzip) に加えて worker 用の chunk を別に配ることになる。
dist のまま置けば主スレッドと worker が同じ chunk を使うので合計 281KB (gzip)。
CDN は使っていない。
負動産の掲示板と NISUMEL は、どちらも日本のレンタルサーバで動く WordPress で、
海外IPからの wp-json へのアクセスを 403 で弾く
(User-Agent は無関係。手元の日本のIPからは同じUAで 200 が返る)。
自宅クラスタは日本のIPから動くので、本番の定期ビルドはこの 403 を踏まない。
海外から bun app.ts fetch などを直接叩く場合だけ、HTTPS_PROXY に
https://ユーザー:パスワード@ホスト名 を設定すると迂回できる。Bun の fetch は
https:// 形式のプロキシと Basic 認証の両方に対応している。
여기까지가 README 앞부분입니다. 나머지는 원문에서 읽을 수 있습니다. README 전문 보기 ↗