ABR-Geocoderã詊ã
ç®ç
ABR Geocoder æŠèŠ
å ¬åŒãµã€ã: https://lp.geocoder.address-br.digital.go.jp/
ããžã¿ã«åºãæäŸãããæ¥æ¬åœå ã®äœææååãæ£èŠåãã緯床çµåºŠãè¿ããžãªã³ãŒãã£ã³ã°ããŒã«ãã¢ãã¬ã¹ã»ããŒã¹ã»ã¬ãžã¹ããªïŒå šåœã®äœæãã¹ã¿ãŒããŒã¿ïŒãããŒã¿ãœãŒã¹ãšããæ¿åºã«ããææ¬¡ã§æŽæ°ãããããä¿¡é Œæ§ãé«ããMITã©ã€ã»ã³ã¹ã§æäŸããããªãã©ã€ã³ïŒå€éšAPIå©çšãªãïŒã§åäœãããããšãã§ãã
äž»ãªæ©èœ
æè¡ä»æ§
ç¹åŸŽ
ããŒã«ã«ã§ã®èµ·åæ¹æ³
# Node.js 20以äžãå¿
èŠ
npm install -g @digital-go-jp/abr-geocoder
# ããŒã¿ã®ããŠã³ããŒãïŒå
šåœããŒã¿ïŒ
abrg download
# ç¹å®å°åã®ã¿ããŠã³ããŒãïŒäŸïŒæ±äº¬éœïŒ
abrg download -c 130001
# RESTãµãŒããŒãšããŠèµ·å
abrg serve start
# ããŒããæå®ããŠèµ·åïŒããã©ã«ãã¯3000ïŒ
abrg serve start -p 8080ããŠã³ããŒãã®å®è¡ã«ã€ããŠ
ããŒã«ã«ã§ã®å®è¡ãªã®ã§ããããã¯ãŒã¯ãå®è¡ç°å¢ã«ãããã ããããã¡ããã©1hã»ã©ããã£ã
⯠abrg download --debug
download: 1:00:53.900 (h:mm:ss.mmm)å®è¡ããŠã¿ã
curlã§ã®å®è¡
æ©ããé¢åã«ãªã£ãã®ã§ãã¹ããšããŠåããŠããäœæã§ã®å®è¡ãClaude + playwright mcpã«ãä»»ãããçµæ
- å代ç°åº1-9-1 æ±äº¬é§
ã®åºåçµæãšããŠãothersã-1 æ±äº¬é§
ãšãªã
- å®éã«ã¯1ã§ã¯ã°ã©ã³ããŠãã§ãŠããŒã¹ã¿ã¯ãŒã2ã§ã¯ã°ã©ã³ããŠãã§ãŠãµãŠã¹ã¿ã¯ãŒãšãªã£ãŠããæš¡æ§
- ç¹ã«å€§èŠæš¡ãã«ã®å Žåãè¡åºçªå·ïŒ1-9ïŒãŸã§ããç»é²ãããŠããªãå¯èœæ§
â ãã«åãéšå±çªå·ãªã©ã®æœåºãå®ç§ã«ã¯ã§ããªããã
ã¹ã³ã¢ã®åŸå
| å ¥åãã¿ãŒã³ | score | match_level | ç¹åŸŽ |
| å代ç°åºéãé¢1â3â1 | 0.57 | residential_block | éœéåºççç¥ |
| æ±äº¬éœæž¯åºå æ¬æšïŒ-ïŒïŒ-ïŒ | 0.87 | residential_block | éœéåºçæèš |
| å代ç°åºæ°žç°çºïŒïŒïŒïŒïŒ | 0.57 | residential_block | éœéåºççç¥ |
| æå¹åžäžå€®åºå3æ¡è¥¿6äžç® | 0.82 | machiaza_detail | éœéåºççç¥ã ãé«ã¹ã³ã¢ |
| 京éœåžäžäº¬åºå¯ºçºéåŸ¡æ± äžãäžæ¬èœå¯ºåçº488 | 0.88 | parcel | è€éãªäº¬éœäœæã ãé«ã¹ã³ã¢ |
| æŸè°·åºæŸè°·1-1-1 | 0.5 | residential_detail | æ§åäœäœ¿çš |
| å代ç°åºäžžã®å 1-9-1 æ±äº¬é§ | 0.7 | residential_block | ãã«åä»ã |
| å代ç°åº | 0.58 | city | åžåºçºæã®ã¿ |
| 倧éªåžäžå€®åºå€§æå2-1-22 | 0.74 | residential_detail | éœéåºççç¥ |
éœéåºçãçç¥ãããŠããå Žåãäžè²«ããŠäœãã®ã¹ã³ã¢ïŒ0.5ã0.6å°ïŒã«ãªãåŸå
- æ§åäœïŒæŸè°·ïŒâ 0.5ïŒæäœå€ïŒ
- æšæºçãªè¡šèš â 0.7ã0.9
- 0.8以äž: ãã®ãŸãŸä¿¡é Œ
- 0.6ã0.8: 念ã®ããç¢ºèªæšå¥š
- 0.6æªæº: å ¥åã®èŠçŽããä¿ã
ECRã§ABR Geocoderã䜿çšããå Žåã®æ¹é
ããã©ã«ãã§~/.abr-geocoder ã«é¢é£ãã¡ã€ã«ãä¿åãããã
ãã®ãã©ã«ãã®ãµã€ãºã¯ãå šåœããŒã¿ãdownloadåŸã§58GBçšåºŠ
⯠du -sk .abr-geocoder | awk '{print $1/1024 " MiB"}' ââ¯
57419.9 MiBSQLiteãšããŠã³ããã¡ã€ã«ã·ã¹ãã ã®ããã©ãŒãã³ã¹åœ±é¿
docker image buildæã«å šåœããŒã¿ãå«ãã ã³ã³ãããçæããã®ã¯çŸå®çã§ã¯ãªã(ECRã ãšImage Layerã®æå€§ãµã€ãºå¶é10GBãªã®ã§å®è³ªçã«ç¡ç)ãABR Geocoderã¯å éšçã«SQLiteã䜿çšããŠãããããã¹ãã¬ãŒãžã¿ã€ãã®éžæã¯ããã©ãŒãã³ã¹ã«çŽçµãã
Claude ããã
SQLiteã®ç¹æ§
ã¹ãã¬ãŒãžã¿ã€ãã®åœ±é¿
ã¹ãã¬ãŒãžéžæã«ãã圱é¿
| ã¹ãã¬ãŒãžã¿ã€ã | ã¬ã¹ãã³ã¹æéïŒç®å®ïŒ | æšå¥šçšé |
| EBS gp3 | 20-100ms | æ¬çªç°å¢ |
| EFS | 50-500ms | è€æ°ã³ã³ããå ±ææ |
| FSx for Lustre | 15-80ms | 髿§èœèŠæ±æ |
SQLiteæé©åèšå®
# SQLiteã®ããã©ãŒãã³ã¹ãã¥ãŒãã³ã°
export SQLITE_TMPDIR=/dev/shm # ã¡ã¢ãªäžã®äžæãã¡ã€ã«
export PRAGMA_CACHE_SIZE=10000 # ãã£ãã·ã¥ãµã€ãºå¢å
export PRAGMA_MMAP_SIZE=268435456 # ã¡ã¢ãªããããµã€ãºã¢ãŒããã¯ãã£
EBSããŠã³ãïŒæšå¥šïŒ
ãããã€æŠç¥ïŒããŒã¿æŽæ°ïŒ
EBSã®ããªã¥ãŒã ã¯åäžFargate Taskã«ããã¢ã¿ããã§ããªãå¶çŽããïŒããããSQLiteæ¥ç¶ããã®ã§å¥ã«ããæ¹ãããããã§ã¯ããïŒ
以äžã®æ§æã§ã³ã¹ãæé©å / ãããã€æéççž®å / å¯çšæ§æ ä¿ãã§ããã
ãŸãšã
以äžã®æ§æããããã
- ããŒã¿æŽæ°ã®åæ ãšabr-geocoderæŽæ°ããããã€ã§å®æœãã
abrg update checkã®å®è¡
æŽæ°å¯èœããŒã¿ã®ååŸåºæºãããããªãããæŽæ°å¯Ÿè±¡ãã¡ã€ã«ããããšæ¯ååºãŠããŸã£ãã
ãã®æã®åŠçæéã¯3.5min
⯠abrg update-check ââ¯
ââââââââââââââââââââââââââââââââââââââââ 0% | 0/1total = 10698
å©çšå¯èœãªæŽæ°ããŒã¿(3793)ããããŸãã
ç¶ããŠããŒã¿ãããŠã³ããŒãããŸããïŒ [Y/N] y
ï
¹ î° ï ~ î° î² 3m 24s ï î² 14:54:00 ï ââ®
⯠abrg update-check -y ââ¯
ââââââââââââââââââââââââââââââââââââââââ 0% | 0/1total = 10698
å©çšå¯èœãªæŽæ°ããŒã¿(3793)ããããŸããapiå®è¡è² è·ãã¹ã
çŽåå®è¡ã§ãããŒã«ã«èµ·åãããšãã®ãã¹ãã100åèšæž¬ã®å¹³åå€ã100åèšæž¬
#!/bin/bash
# è² è·ãã¹ãã¹ã¯ãªãã - 100åã®å¹³åæéã100åæž¬å®
echo "è² è·ãã¹ãéå§: 100åã®å¹³åæéã100åæž¬å®ããŸã"
echo "URL: http://localhost:3000/geocode?address=æ±äº¬éœå代ç°åºéãé¢1-3-1"
echo "----------------------------------------"
# 100åã®æž¬å®ãå®è¡
for round in {1..100}; do
total_time=0
# 100åã®ãªã¯ãšã¹ããå®è¡ããŠæéãæž¬å®
for i in {1..100}; do
# timeã³ãã³ãã®åºåããã¡ã€ã«ã«ä¿å
{ time curl -s "http://localhost:3000/geocode?address=æ±äº¬éœå代ç°åºéãé¢1-3-1" > /dev/null; } 2> temp_time.txt
# realæéãæœåºïŒç§åäœïŒ
real_time=$(grep "real" temp_time.txt | awk '{print $2}' | sed 's/m/ * 60 + /' | sed 's/s//' | bc -l)
total_time=$(echo "$total_time + $real_time" | bc -l)
done
# å¹³åæéãèšç®
average_time=$(echo "scale=4; $total_time / 100" | bc -l)
# çµæãåºå
echo "ã©ãŠã³ã $round: å¹³åå¿çæé = ${average_time}ç§"
# äžæãã¡ã€ã«ãåé€
rm -f temp_time.txt
done
echo "----------------------------------------"
echo "ãã¹ãŠã®æž¬å®ãå®äºããŸãã"data
0.015 - 0.060sçšåºŠã§å®è¡ãããããããŸã§ããŒã«ã«å®è¡ãªã®ã§åèçšåºŠããªãœãŒã¹ã®ã¢ãã¿ãªã³ã°ãããŠããªãã
䞊ååŠçã«ã€ããŠgithubã«èšåããããããã©ã³ã¿ã€ã ã¯node.jsã®ããã ãã¯ã©ã¹ã¿ãŒäœ¿çšããŠããããããã®å ŽåãCPUæ°ã¯äžããŠãããæ¹ãããå¯èœæ§ãããããŸããmemory䜿çšéãã¢ãã¿ãªã³ã°ããŠæ±ºå®ããæ¹ãããããããã®ãããã¯æ¬æ Œçã«è² è·ãã¹ããè¡ãªã£ãŠç¢ºèªããæ¹ããã
