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
300
再利用パターン / Pattern of code reuse
ryotanakaya
0
160
エンジニアリングエッセイのススメ
ryotanakaya
0
400
ソフトウェアアーキテクチャについて 語るときに 僕の語ること
ryotanakaya
2
1.5k
エンジニアと要件定義
ryotanakaya
4
1k
Go と並行処理
ryotanakaya
0
370
ワクワク!Rubyクイズ!!
ryotanakaya
0
1.5k
増え続けるトランザクションデータと向き合う
ryotanakaya
0
510
Other Decks in Technology
See All in Technology
Raycast AI APIを使ってちょっと便利なAI拡張機能を作ってみた
kawamataryo
0
230
ViteとTypeScriptのProject Referencesで 大規模モノレポのUIカタログのリリースサイクルを高速化する
shuta13
3
240
データとAIで明らかになる、私たちの課題 ~Snowflake MCP,Salesforce MCPに触れて~ / Data and AI Insights
kaonavi
0
210
入院医療費算定業務をAIで支援する:包括医療費支払い制度とDPCコーディング (公開版)
hagino3000
0
130
仕様駆動開発を実現する上流工程におけるAIエージェント活用
sergicalsix
10
5k
Open Table Format (OTF) が必要になった背景とその機能 (2025.10.28)
simosako
3
560
現場の壁を乗り越えて、 「計装注入」が拓く オブザーバビリティ / Beyond the Field Barriers: Instrumentation Injection and the Future of Observability
aoto
PRO
1
740
戦えるAIエージェントの作り方
iwiwi
15
7.2k
デザインとエンジニアリングの架け橋を目指す OPTiMのデザインシステム「nucleus」の軌跡と広げ方
optim
0
130
ソースを読む時の思考プロセスの例-MkDocs
sat
PRO
1
350
re:Inventに行くまでにやっておきたいこと
nagisa53
0
840
AI駆動で進める依存ライブラリ更新 ─ Vue プロジェクトの品質向上と開発スピード改善の実践録
sayn0
1
370
Featured
See All Featured
Building an army of robots
kneath
306
46k
Java REST API Framework Comparison - PWX 2021
mraible
34
8.9k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.7k
Side Projects
sachag
455
43k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
140
34k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
31
2.7k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Testing 201, or: Great Expectations
jmmastey
45
7.7k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
51k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
359
30k
The Cult of Friendly URLs
andyhume
79
6.6k
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.