Upgrade to Pro — share decks privately, control downloads, hide ads and more …

GoAcademy LT資料

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers. →

GoAcademy LT資料

CyberAgent Go Academyでの登壇資料

Avatar for Shunya Hayashi

Shunya Hayashi

July 23, 2023

More Decks by Shunya Hayashi

Other Decks in Technology

Transcript

  1. ÇÆ 設計に関して LINE API Lambda Functions RDS Open Data クライアント

    LINE API サービスの構成 ~~~.csv ~~~.csv 今回実装したところ
  2. ÆÁ 工夫した点 {
 "events": [ ... 
 "message": { ...


    "address": "日本、 〒150-0002 東京都渋谷区渋谷2丁目21− 1",
 ...
 }
 ]
 } 位置情報送信機能からの位置情報は全て以下のような形式で統一して送られてくる。 そのため、ユーザー入力で起こりがちな表記の揺れ問題の対策をすることなく実装を進めることができた。 € ユーザー入力にLINEの位置情報機能を利用
  3. ÆÁ 工夫した点 // ゴミの種別 type GarbageType int const ( Burnable

    GarbageType = iota + 1 NonBurnable Recyclable ) 地域、ゴミの収集日のデータを正規化することで、データに一貫性を持たせた。 また、曜日やゴミの種別などの情報を扱うカラムは数値型とし、ロジック内ではiotaとして表現するこ とでデータの扱いを一元化し安全性を高めた。 p DB設計 // 曜日 type Weekday int const ( Sunday Weekday = iota + 1 Monday Tuesday Wednesday Thursday Friday Saturday )
  4. ÆÁ 工夫した点 また多くのレコードを持つテーブルへのinsertはbulk insertを使用することで、個別ファイルのインポート 時間も短縮できた。 複数のCSVインポートをgo routineで並行処理で進めることで、全体のインポート時間を短縮。 h go routine

    + bulk insertでcsvインポートの時間を削減 var garbageDays []model.GarbageDay ... // gormのCreateメソッドにスライスを渡してbulk insertしている err := db.Create(&garbageDays).Error INFO: ゴミ情報のインポートを開始します INFO: 台東区インポートにかかった時間: 398.390334ms INFO: 墨田区インポートにかかった時間: 493.566875ms INFO: 全体のインポートにかかった時間 512.342626ms INFO: ゴミ情報のインポートを終了します
  5. ÆÁ 苦労した点 地域ごとにデータの形式や文言が違うため、地域ごとにインポート関数を作る必要があり、苦労した。 (ごみorゴミの文言や◦丁目が漢数字だったり全角数字だったり) 対策としては以下のように、ファイル別にインポート関数を作り、for文の中で実行した。 ‡ 地域ごとのデータの違い var config =

    []Config{ { name: "墨田区", url: "https://www.city.sumida.lg.jp/kuseijoho/sumida_info/opendata/opendata_ichiran/gomirecycle_data/bunbetu_data.files/bunbetu_20151029.csv", importPackage: sumidaku.ImportSumidakuCSV, }, { name: "台東区", url: "https://www.opendata.metro.tokyo.lg.jp/taitou/chiikibetu_youbi_ichiran.csv", importPackage: taitoku.ImportTaitokuCSV, }, } ... for _, c := range config { ... err = c.importPackage(db, ward, records)
  6. ÅÁ 開発環境 golang-migrate (https://github.com/golang-migrate/migrate) 9 DBマイグレーション gorm (https://github.com/go-gorm/gorm) 9 ORマッパー

    golangci-lint (https://github.com/golangci/golangci-lint) 9 Linter 9 開発環境 aws sam, docker-compose