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
Ruby で gRPC を使おう / ruby-grpc
ryotanakaya
1
100
ギフティの技術ブログ 再出発とこれから / restart of giftee tech blog 2024
ryotanakaya
0
330
再利用パターン / Pattern of code reuse
ryotanakaya
0
180
エンジニアリングエッセイのススメ
ryotanakaya
0
450
ソフトウェアアーキテクチャについて 語るときに 僕の語ること
ryotanakaya
2
1.6k
エンジニアと要件定義
ryotanakaya
4
1.1k
Go と並行処理
ryotanakaya
0
390
ワクワク!Rubyクイズ!!
ryotanakaya
0
1.5k
増え続けるトランザクションデータと向き合う
ryotanakaya
0
530
Other Decks in Technology
See All in Technology
Exadata Database Service on Dedicated Infrastructure(ExaDB-D) UI スクリーン・キャプチャ集
oracle4engineer
PRO
8
7.2k
JAWS FESTA 2025でリリースしたほぼリアルタイム文字起こし/翻訳機能の構成について
naoki8408
1
320
非情報系研究者へ送る Transformer入門
rishiyama
11
7.1k
スクリプトの先へ!AIエージェントと組み合わせる モバイルE2Eテスト
error96num
0
150
オレ達はAWS管理をやりたいんじゃない!開発の生産性を爆アゲしたいんだ!!
wkm2
4
500
[JAWSDAYS2026]Who is responsible for IAM
mizukibbb
0
420
楽しく学ぼう!ネットワーク入門
shotashiratori
3
2.9k
開発組織の課題解決を加速するための権限委譲 -する側、される側としての向き合い方-
daitasu
5
580
「ストレッチゾーンに挑戦し続ける」ことって難しくないですか? メンバーの持続的成長を支えるEMの環境設計
sansantech
PRO
3
640
8万デプロイ
iwamot
PRO
2
230
OpenClawで回す組織運営
jacopen
3
690
Claude Codeが爆速進化してプラグイン追従がつらいので半自動化した話 ver.2
rfdnxbro
0
500
Featured
See All Featured
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.7k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.8k
HDC tutorial
michielstock
1
530
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
230
Between Models and Reality
mayunak
2
230
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
0
680
My Coaching Mixtape
mlcsv
0
69
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
270
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
310
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
30 Presentation Tips
portentint
PRO
1
250
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.