Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
シャッフルランチシステムを刷新してみた話
Search
nakaryo
May 28, 2020
Technology
0
190
シャッフルランチシステムを刷新してみた話
個人開発で社内で使用するシャッフルランチシステムをリメイクした話
言語は Go で、GIN や GROM といったサードパーティ製のフレームワーク等を取り入れてみた感想を記載しています
nakaryo
May 28, 2020
Tweet
Share
More Decks by nakaryo
See All by nakaryo
ギフティの技術ブログ 再出発とこれから / restart of giftee tech blog 2024
ryotanakaya
0
260
再利用パターン / Pattern of code reuse
ryotanakaya
0
140
エンジニアリングエッセイのススメ
ryotanakaya
0
360
ソフトウェアアーキテクチャについて 語るときに 僕の語ること
ryotanakaya
2
1.4k
エンジニアと要件定義
ryotanakaya
2
910
Go と並行処理
ryotanakaya
0
360
ワクワク!Rubyクイズ!!
ryotanakaya
0
1.4k
増え続けるトランザクションデータと向き合う
ryotanakaya
0
490
Other Decks in Technology
See All in Technology
使いたいMCPサーバーはWeb APIをラップして自分で作る #QiitaBash
bengo4com
0
1.9k
整頓のジレンマとの戦い〜Tidy First?で振り返る事業とキャリアの歩み〜/Fighting the tidiness dilemma〜Business and Career Milestones Reflected on in Tidy First?〜
bitkey
2
16k
Zero Data Loss Autonomous Recovery Service サービス概要
oracle4engineer
PRO
2
7.7k
スタートアップに選択肢を 〜生成AIを活用したセカンダリー事業への挑戦〜
nstock
0
190
タイミーのデータモデリング事例と今後のチャレンジ
ttccddtoki
6
2.4k
united airlines ™®️ USA Contact Numbers: Complete 2025 Support Guide
flyunitedhelp
1
330
SaaS型なのに自由度の高い本格CMSでサイト構築と運用のコスパ&タイパUP! MovableType.net の便利機能とユーザー事例のご紹介
masakah
0
110
いつの間にか入れ替わってる!?新しいAWS Security Hubとは?
cmusudakeisuke
0
120
Delegating the chores of authenticating users to Keycloak
ahus1
0
140
FOSS4G 2025 KANSAI QGISで点群データをいろいろしてみた
kou_kita
0
400
freeeのアクセシビリティの現在地 / freee's Current Position on Accessibility
ymrl
2
200
Operating Operator
shhnjk
1
590
Featured
See All Featured
Music & Morning Musume
bryan
46
6.6k
Practical Orchestrator
shlominoach
189
11k
Six Lessons from altMBA
skipperchong
28
3.9k
For a Future-Friendly Web
brad_frost
179
9.8k
The Cost Of JavaScript in 2023
addyosmani
51
8.5k
Build The Right Thing And Hit Your Dates
maggiecrowley
36
2.8k
Building an army of robots
kneath
306
45k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
We Have a Design System, Now What?
morganepeng
53
7.7k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
Transcript
シャッフルランチシステムを 刷新してみた話 ~個人開発~ nakaya ryota 2020/05/28
自己紹介 ギフティ入社:2019年1月 所属:CC Div. PU2(SBJチーム) 前職:バックオフィス系システムのパッケージベンダー 最近は Ruby より Go
書いてる 犬より猫が好き キノコよりタケノコ派
シャッフルランチってあるじゃないですか
運用 ・太古の時代 → 温もりのある手運用 ・令和の時代 → 一応シャッフルして対象を抽出する部分はシステムで自動化
自動化の経緯 (旧イベ班スーパーエンジニア ) システム化したよ! (自分) おお エンドポイントが二つあって、curlすれば (嫌な予感が...) 人の追加とシャッフルだけはできるよ! hai
つらみ • 登録されている人の一覧がわからん ◦ 毎月社員が増えるけど、誰まで追加したっけ ...みたいな • 登録した人の編集、削除ができん ◦ 当然辞めちゃう人もいるわけで
... • 立松AWSにロックイン ◦ 立松AWSのsandbox環境で lambda と DynamoDB が動いている状態 ◦ →DBメンテしたいときは立松 API(本人)を叩くしかない現状 • (...ぶっちゃけ1ヶ月に一回しか使わないし、別にいいんだけど )
画面作るか (Go のテンプレートエンジンの勉強がてら) (ついでにデータモデリングも見直す)
使用技術 Gin (Web Application Framework) GORM (ORM)
What is Go? • 2009年にGoogleが開発した静的型付けプログラミング言語 • 「軽量・高速・シンプル」 • executableが作れる ◦
クロスコンパイル可能で、実行速度が高速 ◦ JVMとかインタプリタといったランタイムが必要ないのでデプロイが楽 • 統一された記法 ◦ 継承、Generics、例外機構などはない(例外機構はあるにはある) • 標準ライブラリが整備されていて、無駄にFW等入れなくても動く • 国内外だとNetflix、Docker、twitter などが導入 • 国内だとメルカリ、Freee、クックパッド • https://go.dev/ gopherくん
データモデル
画面(トップ)
画面(プロジェクトトップ)
画面(メンバー一覧)
画面(タグ一覧)
画面(シャッフル画面)
• Go の標準の html/template ライブラリ • ソースコードとテンプレートを読み込んでHTMLを表示 • 基本的なことはできるが、基本的なことしかできない ◦
条件分岐(if)やループ(range)は可能 ◦ 四則演算はできない • 一応、ファンクションを渡すことができる ◦ 複雑なことをやりたい場合は独自関数をサーバー側で定義して明示的に渡す • ディレクトリでネームスペース切れない ◦ 同名のtemplateファイルがあるときに一番最後に読み込んだファイルが認識される ◦ 同名ファイルを作りたい場合、いちいちファイルごとにdefineしないといけない • テンプレートファイルを実行バイナリにビルドするのが面倒臭い ◦ シングルバイナリに含めるならそれ用のライブラリ入れてコンパイルしないといけない Go のテンプレートエンジンについて
• フルスタックで軽量なWebフレームワーク • 今回はルーティングとレスポンス部分のみ使用 ◦ これだけなら組み込みの net/http パッケージ で全然事足りる •
ミドルウェアを挟むことができる ◦ rackと同じイメージ ▪ 認証挟んだり ▪ in/out のロギングしたり • リクエストパラメータの取り扱い ◦ デフォルト値設定したり ◦ カスタムバリデータの差し込み • クッキーの管理 • 他にも色々できるすげーヤツ Gin について
• Go 界隈では defacto standard になりつつある ORM • MySQL/PostgreSQL/sqlite/SQLServerに対応している •
ActiveRecordに雰囲気かなり近い ◦ gorm Model(構造体)を中心にデータ操作を行う ◦ データベースへの操作はそのモデルを介して行う • 1対1から多対多までアソシエーションできる GORM について
GORM について • メソッドチェーンでクエリビルドできる ◦ 以下の例だと、プロジェクトIDの指定とタグのプリロードを行なってから、Findでクエリ実行 • 生SQLを実行することもできるっちゃできる • ORM記法を覚える手間はやはりあるが、ARに馴染みがあればまあまあ楽
• マイグレーションが貧弱なので、長期運用するなら別のツールが必要 • 一周回って、生SQL書いた方が楽じゃね?という悟りを得た人は sqlx などの薄いラッパーを使う方がオススメ
雑感 • 基本的なCRUDとシャッフルロジックがちょうど良い勉強になった ◦ シャッフルのロジック書くのはダルかった ... • Go でも簡単なビューを実装できるぞ •
rails のようなフルパッケージではないので、使いたいものを適宜取り入れて開発できる • 今回ぐらい小さくて単純なプロジェクトだと rails で作った方がやっぱり早そう感 ◦ scaffold でパパッと ◦ 慣れの問題かもしれない ... • ホスティング考えてないけど、 edmond と同じで、社内のマシンローカルでいいかなあ ... • 今回のソースコード https://github.com/RyotaNakaya/shuffle-members
Thank you for listening.