@@ -73,7 +73,7 @@ bundle exec rake test
7373
7474** メリット** :
7575- ✅ ローカル開発でも本番環境でも一貫した動作
76- - ✅ ` dojo2dojo.csv ` 更新後、` jekyll build ` だけで自動反映
76+ - ✅ ` _data/*.json ` 更新後、` jekyll build ` だけで自動反映
7777- ✅ 手動でのRakeタスク実行が不要
7878
7979** 実行ログ例** :
@@ -100,8 +100,8 @@ GitHub Actionsで毎日自動更新(日本時間 5:59):
100100# scheduler_daily.yml(データ更新+デプロイ)
101101gh workflow run scheduler_daily.yml
102102
103- # deploy_to_pages .yml(デプロイのみ )
104- gh workflow run deploy_to_pages .yml
103+ # ci .yml(ビルド・テスト・デプロイ。PR ではデプロイせずテストまで )
104+ gh workflow run ci .yml
105105
106106# 実行状況確認
107107gh run list --workflow=scheduler_daily.yml --limit 3
@@ -118,8 +118,8 @@ gh run watch # リアルタイム監視
118118- ` _data/dojos_earth.json ` : Clubs APIから取得した全世界のDojoデータ
119119- ` _data/dojos_japan.json ` : CoderDojo Japan APIから取得した日本のDojoデータ
120120- ` _data/events_japan.json ` : 日本のイベントデータ
121- - ` _data/dojo2dojo .json ` : dojo2dojo.csvから生成されたマッピングデータ
122- - ` dojo2dojo.csv ` : Japan APIとClubs APIの名前マッピング(編集可能 )
121+ - ` _data/dojos .json ` : 地図に載った日本のDojo一覧(生成物)。 ` /dojos.json ` として配信し、掲載後の反映確認に使う
122+ - ` tmp/unmatched_dojos.json ` : 地図に載らなかったactiveなDojoと、その理由(生成物 )
123123- ` dojos.geojson ` : 地図表示用の統合データ(GeoJSON形式、人間が読める形式)
124124- ` dojos.min.geojson ` : 圧縮版GeoJSON(本番環境で使用、22.9%削減)
125125- ` _plugins/build_hooks.rb ` : Jekyllビルド時の自動データ更新フック
@@ -208,8 +208,8 @@ mcp__o3__o3-search "GitHub Actions Pages deploy Jekyll JEKYLL_ENV production 202
208208# 複数データソース統合時の名前マッチング問題
209209mcp__o3__o3-search " GeoJSON data integration name mapping mismatch multiple sources 2025"
210210
211- # CSVベースのマッピングファイル管理
212- mcp__o3__o3-search " CSV mapping file data integration best practices version control 2025"
211+ # ID ベースでのデータ突合
212+ mcp__o3__o3-search " stable identifier vs name matching data integration best practices 2025"
213213
214214# データ不整合のデバッグ手法
215215mcp__o3__o3-search " multi-source data integration debugging missing records troubleshooting 2025"
@@ -226,59 +226,47 @@ o3の検索結果を使用する際は必ず:
226226
227227### データ統合で特定のDojoが地図に表示されない場合
228228
229- この問題は主にdojo2dojo.csvのマッピング不一致が原因です。以下の手順で調査・修正してください:
229+ Clubs DB と Japan DB は ` global_club_id ` (UUID) で突合している。表示されない場合、
230+ ほぼ全て「UUID が一致していない」ことが原因なので、まず生成物の診断結果を見る。
230231
231- 1 . ** データソースの確認 **
232+ 1 . ** 地図に載らなかった Dojo と理由を確認する **
232233 ``` bash
233- # Clubs APIのデータ確認
234- grep " 対象Dojo名" dojos_earth.json
235-
236- # Japan APIのデータ確認
237- grep " 対象Dojo名" dojos_japan.json
234+ bundle exec rake upsert_dojos_geojson
235+ cat tmp/unmatched_dojos.json
238236 ```
239237
240- 2 . ** マッピングファイルの確認**
241- ``` bash
242- # dojo2dojo.csvでのマッピング確認
243- grep " 対象Dojo名" dojo2dojo.csv
244- ```
238+ ` reason ` の意味は次のとおり。
245239
246- 3 . ** 問題の特定と修正**
247- - Clubs APIでの登録名と完全一致するようにdojo2dojo.csvを修正
248- - 例:「Coderdojo Saga」vs「Saga」のような不一致を修正
240+ | reason | 意味 | 対応 |
241+ | ---| ---| ---|
242+ | ` uuid_not_in_clubs ` | coderdojo.jp の ` global_club_id ` が指すクラブが Clubs DB に無い | Clubs 側で削除・ID 変更が起きている。` db/dojos.yml ` の値を現在のものに更新する |
243+ | ` club_excluded_by_status_or_coordinates ` | クラブはあるが、座標が無いか活動中ではない | Clubs 側の登録内容を直す(提携先の管理画面) |
244+ | ` no_uuid ` | coderdojo.jp 側に ` global_club_id ` が無い | ` db/dojos.yml ` に設定する。通常は向こうの CI が防ぐ |
249245
250- 4 . ** マッピング追加とGeoJSON再生成 **
246+ 2 . ** Clubs DB 側の現在の UUID を調べる **
251247 ``` bash
252- # dojo2dojo.csvに追加(例: すぎなみ)
253- echo " すぎなみ Suginami" >> dojo2dojo.csv
254-
255- # jekyll buildで自動的にGeoJSON再生成(推奨)
256- bundle exec jekyll build
257-
258- # または個別実行
259- bundle exec rake upsert_dojos_geojson
260- bundle exec rake compact_geojson
248+ ruby -rjson -e ' JSON.parse(File.read("_data/dojos_earth.json")).select { |c| c["countryCode"] == "JP" && c["name"].include?("対象名") }.each { |c| puts "#{c["id"]} #{c["name"]} #{c["status"]}" }'
261249 ```
262250
263- 5 . ** 結果の確認**
264- ``` bash
265- # GeoJSONに含まれているか確認
266- grep " 対象Dojo名" dojos.geojson
251+ 3 . ** coderdojo.jp 側を直す**
267252
268- # ローカルで地図表示確認
269- bundle exec jekyll server
270- # http://localhost:4000/ で確認
271- ```
253+ ` db/dojos.yml ` の ` global_club_id ` を更新し、PR を出す。地図側のリポジトリで
254+ 修正することはない(名前で突合していた頃と違い、こちらに手動のマッピングは無い)。
272255
273- 6 . ** 変更をコミット **
256+ 4 . ** 反映を確認する **
274257 ``` bash
275- git add dojo2dojo.csv _data/dojo2dojo.json dojos.geojson
276- git commit -m " CoderDojo XXXのマッピングを追加 "
277- git push origin main
258+ bundle exec rake get_data_from_japan # coderdojo.jp のデプロイ完了後に実行
259+ bundle exec rake upsert_dojos_geojson
260+ bundle exec rake test_matching
278261 ```
279262
280- ### よくあるマッピング問題
281- - ** プレフィックスの不一致** : "Coderdojo XXX" vs "XXX"
282- - ** スペースの不一致** : "CoderDojo" vs "Coderdojo"
283- - ** 記号の不一致** : "@" や "、" の有無
284- - ** 日本語・英語の混在** : 漢字・ひらがな・カタカナ・ローマ字の不一致
263+ ### 名前での突合をやめた理由
264+
265+ 以前は ` dojo2dojo.csv ` で「Japan 登録名 → Clubs 登録名」を手で対応付けていたが、
266+ 次の理由で UUID 突合に切り替えた。
267+
268+ - 新しい Dojo を追加するたび CSV に 1 行足す運用が必要で、実際に漏れていた
269+ - Clubs 側で改名されると追従できない(那覇の登録名が変わっていた)
270+ - 同名クラブが二重登録されていると、先に現れた方を拾ってしまう(流山・古河)
271+ - 表記ゆれ("Coderdojo XXX" vs "XXX"、"@" や "、" の有無、ローマ字と日本語)に
272+ そのつど対応する必要があった
0 commit comments