Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
GoAcademy LT資料
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Shunya Hayashi
July 23, 2023
Technology
83
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
GoAcademy LT資料
CyberAgent Go Academyでの登壇資料
Shunya Hayashi
July 23, 2023
More Decks by Shunya Hayashi
See All by Shunya Hayashi
TailwindCSSでの開発体験をあげてくれるツールを紹介します
devshun
0
55
Other Decks in Technology
See All in Technology
DevelopersIO 2026 知識の地図を描く ─ オントロジーとは何か?
ishikawa_satoru
1
1.7k
DWH の限界突破! AI エージェント向け爆速リアルタイムデータ基盤 ClickHouse
jozono
1
470
無理せず続ける、子育てエンジニアの学び
codmoninc
PRO
0
860
今さら理解するウェブフォントver.2026
takanorip
3
770
Benchmarking Disaggregated Serving on vLLM + Dynamo with a Real Coding-Agent Workload
nttcom
1
190
AI × アーキテクト 第1・2章|生成AIの課題とアーキテクトの素養
daidaidai
0
170
二歩目のフロントエンド・ウェブアクセシビリティ
camiha
2
570
QA4AI 2026-Oct 生成AI時代の品質保証
tokuty
1
860
JAWS-UGグッズ職人仕事の流儀
kentapapa
0
100
Classmethod Company Deck
satoshi7
1
680
夫婦で子育てするための育児標準化
codmoninc
PRO
0
330
PHPカンファレンス関西の招待状 / Invitation to PHP Conference Kansai
ykanoh
0
110
Featured
See All Featured
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
18k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
730
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.2k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.8k
Visualization
eitanlees
153
17k
Bash Introduction
62gerente
615
220k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
58k
GraphQLとの向き合い方2022年版
quramy
50
15k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
730
How to train your dragon (web standard)
notwaldorf
96
6.9k
Transcript
Go Academy LT資料 発表者: 18_林隼也
ÆÅ 作ったもの Å 設計に関して &Å 工夫した点、苦労した点など 目次 4Å 開発環境
ÆÅ 作ったもの
ÆÅ 作ったもの -> すでにリリース済み。現状、墨田区と台東区のみ対応。 東京23区のごみ収集日の情報をお知らせする LINE BOT。
ÆÅ 作ったもの 位置情報からゴミ収集日の情報を取得 位置情報を送ると...
ÆÅ 作ったもの 位置情報からゴミ収集日の情報を取得 ごみの収集日を教えてくれる
ÆÅ 作ったもの 特徴 % LINEの友達追加で気軽に使える % 地域は丁目まで対応。ゴミの収集日は第~曜日まで対応 LINEから使えるので導入も簡単で、使い慣れたインターフェースで利用可能。 地域は丁目ごとの区分まで対応。また、ゴミの収集日は曜日のみならず第~曜日というところまで対応して いるため、詳細に知ることができる。
ÇÆ 設計に関して
ÇÆ 設計に関して LINE API Lambda Functions RDS Open Data クライアント
LINE API サービスの構成 ~~~.csv ~~~.csv 今回実装したところ
Æ 工夫した点、苦労した点など
ÆÁ 工夫した点 { "events": [ ... "message": { ...
"address": "日本、 〒150-0002 東京都渋谷区渋谷2丁目21− 1", ... } ] } 位置情報送信機能からの位置情報は全て以下のような形式で統一して送られてくる。 そのため、ユーザー入力で起こりがちな表記の揺れ問題の対策をすることなく実装を進めることができた。 ユーザー入力にLINEの位置情報機能を利用
ÆÁ 工夫した点 // ゴミの種別 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 )
ÆÁ 工夫した点 また多くのレコードを持つテーブルへの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: ゴミ情報のインポートを終了します
ÆÁ 苦労した点 地域ごとにデータの形式や文言が違うため、地域ごとにインポート関数を作る必要があり、苦労した。 (ごみ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)
ÅÁ 開発環境
ÅÁ 開発環境 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
END ご清聴いただきありがとうございました!