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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
nakaryo
May 28, 2020
Technology
200
0
Share
シャッフルランチシステムを刷新してみた話
個人開発で社内で使用するシャッフルランチシステムをリメイクした話
言語は Go で、GIN や GROM といったサードパーティ製のフレームワーク等を取り入れてみた感想を記載しています
nakaryo
May 28, 2020
More Decks by nakaryo
See All by nakaryo
エラー処理の温故知新 / history of error handling technic
ryotanakaya
0
130
Ruby で gRPC を使おう / ruby-grpc
ryotanakaya
1
120
ギフティの技術ブログ 再出発とこれから / restart of giftee tech blog 2024
ryotanakaya
0
340
再利用パターン / Pattern of code reuse
ryotanakaya
0
190
エンジニアリングエッセイのススメ
ryotanakaya
0
470
ソフトウェアアーキテクチャについて 語るときに 僕の語ること
ryotanakaya
2
1.6k
エンジニアと要件定義
ryotanakaya
4
1.1k
Go と並行処理
ryotanakaya
0
390
ワクワク!Rubyクイズ!!
ryotanakaya
0
1.6k
Other Decks in Technology
See All in Technology
目的ファーストのハーネス設計 ~ハーネスの変更容易性を高めるための優先順位~
gotalab555
8
2.4k
生成AIが変える SaaS の競争原理と弁護士ドットコムのプロダクト戦略
bengo4com
1
2.3k
The Journey of Box Building
tagomoris
4
3.4k
クラウドネイティブな開発 ~ 認知負荷に立ち向かうためのコンテナ活用
literalice
0
150
マルチプロダクトの信頼性を効率良く保っていくために
kworkdev
PRO
0
170
AI와 협업하는 조직으로의 여정
arawn
0
510
ハーネスエンジニアリングの概要と設計思想
sergicalsix
9
5.3k
今年注目する!データ分析プラットフォームでのAIの活用
nayuts
0
160
Chasing Real-Time Observability for CRuby
whitegreen
0
260
データ定義の混乱と戦う 〜 管理会計と財務会計 〜
wonohe
0
150
コードや知識を組み込む / Incorporate Code and Knowledge
ks91
PRO
0
170
CloudTrail を見つめ直してみる
kazzpapa3
1
120
Featured
See All Featured
Measuring & Analyzing Core Web Vitals
bluesmoon
9
810
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.7k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
130
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
180
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
170
The Invisible Side of Design
smashingmag
303
52k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
160
Marketing to machines
jonoalderson
1
5.2k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
280
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.2k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.4k
Into the Great Unknown - MozCon
thekraken
41
2.4k
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.