ๆ็ตๆดๆฐ: 2026ๅนด8ๆ22ๆฅ
- ๆฆ่ฆ
- ๅ จไฝๆงๆ
- ใฌใคใคใผๆง้
- ใใผใฟใใคใใฉใคใณ
- ใคใณใกใขใช็ดขๅผ
- GraphQL ใจในใญใผใไธ่ดใฎๆ ไฟ
- ๅฝๅ่ฆๅ
- ใใผใฟใใญใผ
- ใใฃใฌใฏใใชๆง้
- ้็จ
- ้ข้ฃใใญใฅใกใณใ
ๆฅๆฌใฎ้้้ง ใปใในๅใฎๆ ๅ ฑใ่ฟใ GraphQL API ใงใใCloudflare Workers ไธใงๅใใ ใใผใฟใฏ WASM ใซๅใ่พผใใง้ ใใพใใใตใผใใผใใญใปในใใใผใฟใใผในใๆใกใพใใใ
ไปฅๅใฏ gRPC-Web ใ่ฟใใชใณใใฌใฎใตใผใใผใงใPostgreSQL ใ่ชญใฟใใฏใฉใคใขใณใใฏ BFF (TrainLCD/BFF) ใ GraphQL ใธๅคๆใใใใฎใไฝฟใฃใฆใใพใใใgRPC-Web ใงใใ ๅฟ ็ถๆงใ็กใใฃใใใ GraphQL ใ็ดๆฅ่ฟใๅฝขใซใใBFF ใใจๅปๆญขใใฆใใพใใ
| ็จ้ | ๆก็จใใฆใใใใฎ |
|---|---|
| ๅฎ่ก็ฐๅข | Cloudflare Workers (wasm32-unknown-unknown) |
| API | GraphQL (async-graphql 7) |
| ใใผใฟ | ใใซใๆใซ WASM ใธๅใ่พผใ CSV (generated/*.csv) |
| ใใผใฟ็ๆ | preprocessor crate (็ด Rust) |
| ใใใญใค | wrangler |
ใใผใฟใใผในใไฝฟใใชใใใใsqlx ใๆฅ็ถใใผใซใใใใพใใใๆค็ดขใฏ
่ตทๅๆใซ็ตใฟ็ซใฆใใคใณใกใขใช็ดขๅผใซๅฏพใใ่ตฐๆปใง่กใใพใใ
data/*.csv GTFS (ZIP) ODPT (JSON)
้้ใฎๆญฃใใผใฟ ใใน 5 ใใฃใผใ ๆฑๆฅใใน
โ โ โ
โโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโผโโโโโโโโโโโ
โ preprocessor โ ็ด Rustใๅ้ง
ๅ่ปใฎ็ณป็ตฑ็ๆใจ
โ (ใใซใๆใใผใซ) โ GTFS ็ตฑๅใ่กใ
โโโโโโโโโโโฌโโโโโโโโโโโ
โ
generated/*.csv 7 ใใผใใซ
โ
โโโโโโโโโโโผโโโโโโโโโโโ
โ build.rs โ CSV ใ OUT_DIR ใธ้
็ฝฎใใ
โ โ sst ใฏๅบๅฎ้ทใใคใใชใธๅคๆ
โโโโโโโโโโโฌโโโโโโโโโโโ
โ
โโโโโโโโโโโผโโโโโโโโโโโ
โ worker-build โ
โโโโโโโโโโโฌโโโโโโโโโโโ
โ
WASM โโโโโโโโโบ Cloudflare Workers
โ
GraphQL (POST /)
โ
TrainLCDใใผใฟใฏ WASM ใซๅใ่พผใพใใใใใใใผใฟๆดๆฐใฎใใณใซๅใใใญใคใ่ฆใใพใใ ่ตทๅๆๅใ่พผใฟใง่ชๅๅๆ ใใใไฝใใงใฏใใใพใใใ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Presentation (src/graphql/) โ async-graphql ใฎใชใพใซใใจๅ
โ Query / ๅ / enum / ในใซใฉใผ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Model (stationapi/src/model.rs) โ API ใ่ฟใๅคใฎ่กจ็พ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ UseCase (stationapi/src/use_case/) โ ๅใๅใใใฎ็ตใฟ็ซใฆใ
โ QueryInteractor / DTO ๅคๆ โ IPAใปTTS ใฎ็ๆ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Domain (stationapi/src/domain/) โ ใจใณใใฃใใฃใ็ต่ทฏๆข็ดขใ
โ entity / repository ใใฌใคใ / ้ๅบฆ่กจ โ ๅฐ้ๆ้ๆจๅฎใๆญฃ่ฆๅ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Index (src/index.rs, src/repository.rs) โ ๅใ่พผใฟใใผใฟใฎ็ดขๅผใจ
โ โ repository ใใฌใคใใฎๅฎ่ฃ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโstationapi crate ใฏ Domain / UseCase / Model ใ ใใๆใคใฉใคใใฉใชใงใ
Worker ใจ preprocessor ใฎๅๆนใใๅ็
งใใใพใใwasm32 ใงใใซใใงใใๅฟ
่ฆใ
ใใใใใI/O ใไผดใไพๅญใฏๅ
ฅใใพใใใ
ใจใณใใฃใใฃใใชใใธใใชใฎๆฝ่ฑกใใใใณ็ด็ฒใช่จ็ฎ (haversineใ็ต่ทฏใฎๆข็ดขใ ๅฐ้ๆ้ใฎๆจๅฎใ้ๅบฆ่กจใใญใผใๅญใปIPA ๅคๆใๆค็ดข็จใฎๆญฃ่ฆๅ) ใๆใกใพใใ
QueryInteractor ใ repository ใใฌใคใ่ถใใซใใผใฟใ้ใใ้ง
ใธ่ทฏ็ทใปไบๆฅญ่
ใป
ๅ่ป็จฎๅฅใไปไธใใพใใN+1 ใ้ฟใใใใใ้ข้ฃใใผใฟใฏๅธธใซไธๆฌใงๅใใพใใ
DTO (use_case/dto/) ใใใกใคใณใจใณใใฃใใฃใ Model ใธๅคๆใใพใใIPA ใจ
TTS ใปใฐใกใณใใฎ็ๆใฏใใใซใใใพใใ
API ใ่ฟใๅคใฎ่กจ็พใงใใใใจใฏ .proto ใใ prost ใ็ๆใใฆใใๅใงใ
gRPC ใใใใใใจใใไธ่จใฎ IPAใปTTS ็ๆใใใใธใฎๅคๆใซใถใไธใใฃใฆใใใใ
ใใกใคใณใจใณใใฃใใฃใจ GraphQL ๅใฎ้ใซๆฎใใฆใใใพใใ
async-graphql ใฎ Query ใชใพใซใใจๅๅฎ็พฉใงใใModel ใใ GraphQL ๅใธๅคๆใใพใใ
ๅใ่พผใฟ CSV ใ isolate ่ตทๅๆใซไธๅบฆใ ใใใผในใใOnceLock ใซไฟๆใใพใใ
src/repository.rs ใ 4 ใคใฎ repository ใใฌใคใใๅฎ่ฃ
ใใUseCase ๅฑคใใใฏ
ใใผใฟใใผใน็ใจๅใใคใณใฟใผใใงใผในใง่ฆใใพใใ
data/*.csv ใใใฎใพใพ Worker ใธๆธกใใจๆฌ็ชใจๆๅใๅคใใใพใใ
- ๅ่ป็จฎๅฅใๆใใชใ่ทฏ็ทใซใฏๅ้ง
ๅ่ปใฎ็ณป็ตฑใ่ฃใๅฟ
่ฆใใใ (็ด2,400่กใ
ๆๅนใช้ง
ใฎ็ด21%ใๅฝฑ้ฟใๅใใ)ใใใฎ่กใฏ
data/*.csvใซๅญๅจใใชใ - ใในๅใปใใน่ทฏ็ทใปใใน็ณป็ตฑใฏ GTFS ใจ ODPT ใฎ JSON ใใ่ตทใใๅฟ ่ฆใใใ
ใใใ่กใใฎใ preprocessor crate ใงใใ
make data # cargo run --profile tool -p stationapi-preprocessorๅฆ็ใฎๆตใ:
data/*.csvใ่ชญใ (#ๅงใพใใฎๅใฏๅใ่พผใพใชใ)- ๅ้ง
ๅ่ปใฎ็ณป็ตฑใ็ๆใใ (
generate_virtual_local_rail_services) - GTFS ใใฃใผใใๅๅพใปๅฑ้ใใฆ่ชญใ (้ฝๅถใป่ฅฟๆญฆใปไบฌ็ใปๆฑๆฅใณใใฅใใใฃ 3 ๅบ)
- ๆฑๆฅใในใฎ ODPT JSON ใ่ชญใ (7 ๆฅ้ใญใฃใใทใฅ)
- ใในใ lines / stations / types / station_station_types ใธ็ตฑๅใใ
generated/*.csvใๆธใๅบใ
station_station_types.id ใฏๅ่ป้ ๅบใใฎใใฎใจใใฆๅ็
งใใใใใใ
่กใฎไธฆใณใซๆๅณใใใใพใใๆธใๅบใใฏๅฟ
ใ id ๆ้ ใง่กใใพใใ
ใใน็ฑๆฅใฎใฌใณใผใใฏใ้้ใจ่ก็ชใใชใๅคๅใธ FNV-1a ใงๆฑบๅฎ็ใซๅฒใๅฝใฆใพใใ
ๅฎ่กใฎใใณใซๅใๅคใซใชใๅฟ
่ฆใใใใใใDefaultHasher ใฏไฝฟใใพใใใ
| ๅฏพ่ฑก | ๅคๅ | ๅ ฅๅ |
|---|---|---|
line_cd |
100,000,000 + | route_id |
station_cd |
200,000,000 + | (stop_id, route_id) |
station_g_cd |
200,000,000 + | stop_id (ใพใจใๅพใฎไปฃ่กจ) |
type_cd |
100,000,000 + | (route_id, shape_id) |
line_group_cd |
100,000,000 + | (route_id, shape_id) |
| ๅคๆฐ | ๅนๆ |
|---|---|
ODPT_ACCESS_TOKEN |
้ฝๅถใในไปฅๅคใฎใใฃใผใใซๅฟ ่ฆใ็กใๅ ดๅใฏ่ญฆๅใฎใใ่ชญใฟ้ฃใฐใ |
DISABLE_BUS_FEATURE |
true ใงใในใๅใ่พผใพใชใ (้้ใฎใฟ) |
PostgreSQL ใฎใฏใจใชใฏไปฅไธใฎใใใซ็ฝฎใๆใใฆใใพใใ
| PostgreSQL | Worker |
|---|---|
point(lat,lon) <-> point() |
haversine ใฎๅ
จไปถ่ตฐๆป (select_nth_unstable_by ใงไธไฝใฎใฟ็ขบๅฎ) |
pg_trgm ใฎ GIN ใคใณใใใฏใน |
contains() |
station_station_types ใฎ JOIN |
HashMap ใซใใ็ดขๅผ |
pg_trgm ใฏ LIKE '%...%' ใ้ซ้ๅใใใคใณใใใฏในใงใใฃใฆ้กไผผๅบฆๆค็ดขใงใฏ
ใชใใใใcontains() ใง่ซ็็ใซ็ญไพกใช็ตๆใซใชใใพใใๆญฃ่ฆๅใฏ domain ๅฑคใฎ
normalize_for_search ใใใฎใพใพๅผใณใพใใ
39,204 ไปถ (ใใน่พผใฟ) ใฎๅ จไปถ่ตฐๆปใงใๅฎๆธฌ 10ms ๅฐใซๅใพใใพใใ
station_station_types.csv ใฏ 65,281 ่กใใใ่ตทๅๆใฎ CSV ใใผในใ
ใณใผใซใในใฟใผใใฎๅคงๅใๅ ใใฆใใพใใใๅ
จๅใๆดๆฐใชใฎใงใbuild.rs ใ
1 ่ก = i32 x 4 ใฎๅบๅฎ้ทใใคใใช (sst.bin) ใธไบๅๅคๆใใฆใใพใใ
ใจใณใใใคใณใใฏใฏใฉใคใขใณใไบๆใฎใใใใตใใใกใคใณ็ดไธใงใฏใจใชใๅใใพใใ
| ใใน | ๅ ๅฎน |
|---|---|
POST / |
ใฏใจใชๅฎ่ก |
GET / |
GraphiQL |
GET /__schema |
SDL (CI ใๅๅพใใฆ็ชใๅใใใ) |
GET /__health |
็ดขๅผใฎไปถๆฐ |
GET /__ping |
ใใผใฟใซ่งฆใใชใ็้็ขบ่ช |
async-graphql ใฏใณใผใใใกใผในใใชใฎใงใRust ใฎๅใๅคใใใจ SDL ใๅคใใใพใใ
ใฏใฉใคใขใณใใๅฃใใๅคๆดใซๆฐไปใใใใใschema/public.graphql ใๆญฃใจใใฆ
scripts/compare_schema.py ใ็ชใๅใใใCI ใงๅทฎๅใใใใฐๅคฑๆใใใพใใ
ๅใจใใฃใผใซใใฏ้ๅใจใใฆใenum ใฏ้ ๅบ่พผใฟใงๆฏ่ผใใพใใ
ๆๅณ็ใซในใญใผใใๅคใใใจใใฏใใฎใใกใคใซใๆดๆฐใใพใใใใฎๅทฎๅใ ใฏใฉใคใขใณใใธใฎๅฝฑ้ฟ็ฏๅฒใใฎใใฎใซใชใใพใใ
ๅฎ่ฃ ไธใฎๆณจๆ:
async-graphqlใฏ enum ๅคใๆขๅฎใง SCREAMING_SNAKE_CASE ใซใใใๅ ฌ้ในใญใผใใฏ PascalCase ใชใฎใงrename_itemsใงๆใใฆใใ- PascalCase ๅคๆใงใฏ
JRใJrใซใชใใใใใใฎๅคใ ใnameใๆ็คบใใฆใใ Station/StationNestedใฎใใใซๅไธๆง้ ใงๅๅใ้ใๅใฏใSDL ใๅใใใ ใใใใฏใญใงไธกๆนๅฎ็พฉใใฆใใใNested ๅใฏไบใใๅ็ งใใใฎใงBoxใง ้ๆฅๅใใชใใจ็ก้ใตใคใบใซใชใ
ๅใใ้ง ใใๆใๅใๅฑคใใจใซ 3 ใคใใใพใใ
| ็จฎๅฅ | ๅ ดๆ | ็ฎ็ | ็นๅพด |
|---|---|---|---|
| Record | src/index.rs |
ๅใ่พผใฟ CSV ใฎ 1 ่ก | ๆค็ดขใซ่ฆใๅใ ใใๆใค่ปฝ้ใชๆง้ ไฝ |
| Entity | stationapi/src/domain/entity/ |
ใใกใคใณใขใใซ | ใในใๆง้ ใๅค่จ่ชๅฏพๅฟใ็ด66ใใฃใผใซใ |
| Model | stationapi/src/model.rs |
API ใ่ฟใๅค | ๅๆๅใฏ i32 ใฎใพใพๆใค |
// src/index.rs
pub struct StationRecord {
pub station_cd: i32,
pub station_g_cd: i32,
pub name: String,
// ๆค็ดขใซไฝฟใๅใ ใใๅฟ็ญ็จใฎ Station ใฏๅฟ
่ฆใซใชใฃใฆใใ็ตใฟ็ซใฆใ
}ๅ
จไปถ่ตฐๆปใๆฏใชใฏใจในใ่กใใใใStation ใจใณใใฃใใฃ (66 ใใฃใผใซใ) ใ
็ดขๅผใซๆใใใใๅฟ็ญ็ๆๆใซใ ใ็ตใฟ็ซใฆใพใใใญใผใๅญๅใฎๅฐๆๅญ็ใฎใใใซใ
ๆฏ่ผใฎใใณใซ่จ็ฎใใใจ้ซใใคใใใฎใฏ็ดขๅผๆใซๆใฃใฆใใใพใใ
// stationapi/src/domain/entity/station.rs
pub struct Station {
pub station_cd: u32,
pub line: Option<Box<Line>>,
pub lines: Vec<Line>,
pub station_numbers: Vec<StationNumber>,
// ...
}- ใใธใในใปใใณใใฃใฏในใๅๆ ใใๅ (
StopConditionๅๆๅใชใฉ) - ๅค่จ่ชๅ:
station_name_r(ใญใผใๅญ)ใstation_name_zhใstation_name_ko
generated/*.csv
โ ่ตทๅๆใซไธๅบฆใ ใใใผใน
Record (StationRecord)
โ to_entity(): ่ทฏ็ทใฎๅฑๆงใๅใใ
Entity (Station)
โ UseCase ๅฑคใงใในใใใผใฟใไปไธ
Enriched Entity
โ DTO ๅคๆ: IPA / TTS ใปใฐใกใณใใ็ๆ
Model (model::Station)
โ From ๅคๆ
GraphQL ๅ[Client]
โ
โผ POST / (GraphQL)
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Presentation (src/graphql/query.rs) โ
โ โโ Query::station() โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ QueryUseCase ใกใฝใใๅผใณๅบใ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ UseCase (use_case/interactor/query.rs) โ
โ โโ QueryInteractor::get_station_by_id() โ
โ โโ update_station_vec_with_attributes() โ
โ โโ ้ง
ใฐใซใผใไธๆฌๅๅพ โ
โ โโ ่ทฏ็ทไธๆฌๅๅพ โ
โ โโ ไบๆฅญ่
ไธๆฌๅๅพ โ
โ โโ ๅ่ป็จฎๅฅไธๆฌๅๅพ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ repository ใใฌใคใ็ต็ฑ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Index (src/repository.rs, src/index.rs) โ
โ โโ MemStationRepository::find_by_id() โ
โ โโ HashMap ๅ็
ง / ๅ
จไปถ่ตฐๆป โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ Record โ Entity ๅคๆ
โผ Entity โ Model ๅคๆ (use_case/dto/)
โผ Model โ GraphQL ๅ
[Client]ไธๆฌๅๅพใฏ N+1 ใ้ฟใใใใใฎใใฎใงใใใผใฟใใผในๆไปฃใใๅคใใฆใใพใใใ ใคใณใกใขใชใงใใ้ง ใใจใซ็ดขๅผใๅผใ็ดใใใไธๅบฆใซ้ใใใปใใ็ด ็ดใงใใ
DomainError
โ ? ๆผ็ฎๅญ
UseCaseError
โ From ใใฌใคใ
async_graphql::Error
โ
GraphQL ใฎ errors ใใฃใผใซใๆชๅฎ่ฃ
ใฎ repository ใกใฝใใใฏ DomainError ใ่ฟใ่จญ่จใซใใฆใใใพใใ
้ปใฃใฆ็ฉบใ่ฟใใจๆญฃๅธธๅฟ็ญใซ่ฆใใฆๅฎ่ฃ
ๆผใใซๆฐไปใใชใใใใงใ (็งป่กๆใ
ๅฎ้ใซใใฎ่จญ่จใฎใใใใง 1 ไปถใฎๆผใใ 500 ๅฟ็ญใจใใฆๆคๅบใงใใพใใ)ใ
.
โโโ Cargo.toml # stationapi-worker (wasm32 ๅฐ็จ) + workspace
โโโ wrangler.jsonc # staging / production ใฎ่จญๅฎ
โโโ build.rs # CSV ใ OUT_DIR ใธ้
็ฝฎใsst.bin ใ็ๆ
โโโ src/ # Worker ๆฌไฝ
โ โโโ lib.rs # ใจใณใใใคใณใ
โ โโโ index.rs # ๅใ่พผใฟใใผใฟใฎใใผในใจ็ดขๅผ
โ โโโ repository.rs # repository ใใฌใคใใฎๅฎ่ฃ
โ โโโ graphql/ # GraphQL ใฎๅใปใชใพใซใ
โ โโโ query.rs # 18 ใฏใจใช
โ โโโ types.rs # ใชใใธใงใฏใๅ
โ โโโ enums.rs # ๅๆๅ
โ โโโ scalar.rs # UInt32 ในใซใฉใผ
โ
โโโ schema/
โ โโโ public.graphql # ๅ
ฌ้ในใญใผใใฎๆญฃ (CI ใ็ชใๅใใใ)
โ
โโโ stationapi/ # ใใกใคใณใจใฆใผในใฑใผใน (Worker ใจ preprocessor ใๅ
ฑๆ)
โ โโโ src/
โ โโโ domain/
โ โ โโโ entity/ # Station / Line / TrainType / Company ...
โ โ โโโ repository/ # ๆฝ่ฑกใคใณใฟใผใใงใผใน
โ โ โโโ arrival_estimation.rs
โ โ โโโ segment_speed_table.rs
โ โ โโโ speed_table.rs
โ โ โโโ ipa.rs
โ โ โโโ romaji.rs
โ โ โโโ normalize.rs
โ โโโ use_case/
โ โ โโโ interactor/query.rs # QueryInteractor
โ โ โโโ traits/query.rs # QueryUseCase ใใฌใคใ
โ โ โโโ dto/ # Entity โ Model ๅคๆ
โ โโโ model.rs # API ใ่ฟใๅคใฎ่กจ็พ
โ
โโโ preprocessor/ # generated/*.csv ใไฝใใใซใๆใใผใซ
โ โโโ src/
โ โโโ rail.rs # data/*.csv ใฎ่ชญใฟ่พผใฟใจๅ้ง
ๅ่ปใฎ็ณป็ตฑ็ๆ
โ โโโ gtfs/ # GTFS / ODPT ใฎๅๅพใป่งฃ้ใป็ตฑๅ
โ โโโ codes.rs # ใใน็จใณใผใใฎ็ๆ
โ โโโ table.rs # ๅบๅใใผใใซใฎ่กจ็พ
โ โโโ emit.rs # CSV ๆธใๅบใ
โ
โโโ data_validator/ # data/*.csv ใฎๆดๅๆงๆคๆป
โโโ data/ # ้้ใฎๆญฃใใผใฟ (CSV) ใจ GTFS ใฎๅฑ้ๅ
โโโ generated/ # preprocessor ใฎๅบๅ (git ็ฎก็ๅค)
โโโ scripts/ # ใใผใฟๆดๅใปในใญใผใๆฏ่ผใฎในใฏใชใใ
โโโ tools/ # IPA ใซใใฌใใธ็ฃๆปไปใฎ Worker ใจๆใใฆใenv ็็ฅๆใ staging ใซใใฆใใใพใใ
make deploy # wrangler deploy --env="" -> stationapi-stg
make deploy-production # wrangler deploy --env production -> stationapiwrangler 4 ใฏ่คๆฐ็ฐๅขใใใ็ถๆ
ใง --env ใ็็ฅใใใจ่ญฆๅใใใใใ
staging ใๆใๅ ดๅใ --env="" ใๆ็คบใใพใใ
- ใใผใฟๆดๆฐใฎใใณใซๅใใใญใคใ่ฆใใ WASM ใซๅใ่พผใใใ
- custom domain ใฏไบ้ใซ็ป้ฒใงใใชใใ ใใกใคใณใ็งปใ้ใฏใๅ ใซๅ ใฎ Worker ใใๅคใใฆใใใญใคใใๅฟ ่ฆใใใ
generated/ใฏ git ็ฎก็ๅคใ ใฏใญใผใณ็ดๅพใซใฏ็กใใฎใงใmake dataใง ไฝใใ็กใใพใพworker-buildใใใจdata/*.csvใซใใฉใผใซใใใฏใใ ๅ้ง ๅ่ปใฎ็ณป็ตฑใจใในใๆฌ ใใ็ถๆ ใงใใซใใใใ (่ญฆๅใฏๅบใ)