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
RyotaNakaya
May 28, 2020
Technology
0
110
シャッフルランチシステムを刷新してみた話
個人開発で社内で使用するシャッフルランチシステムをリメイクした話
言語は Go で、GIN や GROM といったサードパーティ製のフレームワーク等を取り入れてみた感想を記載しています
RyotaNakaya
May 28, 2020
Tweet
Share
More Decks by RyotaNakaya
See All by RyotaNakaya
エンジニアリングエッセイのススメ
ryotanakaya
0
120
ソフトウェアアーキテクチャについて 語るときに 僕の語ること
ryotanakaya
1
570
エンジニアと要件定義
ryotanakaya
1
540
Go と並行処理
ryotanakaya
0
260
ワクワク!Rubyクイズ!!
ryotanakaya
0
1.1k
増え続けるトランザクションデータと向き合う
ryotanakaya
0
270
Other Decks in Technology
See All in Technology
暗黙知を集積するプラットフォーム : 「健常者エミュレータ事例集」の取り組み
sora32127
1
170
長文から長文を生成するLLMツールをオープンソースで作ってみた。
tomohisa
2
150
Building a RAG app to chat with your data (on Azure)
pamelafox
0
150
コードレビューを支援するAI技術の応用
akkie76
3
200
Castor - Symfony Live 2024 - Paris
lyrixx
1
120
#51 “Empowering Azure Storage with RDMA”
cafenero_777
3
220
データマネジメントを支える武器としてのメタデータ管理
10xinc
2
1k
VSCode上からSlackにメッセージを送る拡張機能を作っている話
ebarakazuhiro
0
130
SaaS型Webサービス「カオナビ」のチーム開発でPackage by Featureを取り入れた話/Implementing Package by Feature in kaonavi
kaonavi
0
120
社内共通ルールを値オブジェクトにして社内ライブラリとして運用してみた話
leveragestech
2
1.2k
2023 Japan AWS Jr.Championsに選出されての振り返りとこれから
hiropy877
1
130
関数型DDDの理論と実践:「決定を遅らせる」を先につくり、 ビジネスの機動力と価値をあげる
knih
2
500
Featured
See All Featured
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
352
28k
Building Applications with DynamoDB
mza
88
5.6k
Documentation Writing (for coders)
carmenintech
59
3.8k
Git: the NoSQL Database
bkeepers
PRO
421
63k
Robots, Beer and Maslow
schacon
PRO
154
7.9k
The Power of CSS Pseudo Elements
geoffreycrofte
58
4.9k
Raft: Consensus for Rubyists
vanstee
130
6.2k
Design by the Numbers
sachag
274
18k
Atom: Resistance is Futile
akmur
258
25k
Bash Introduction
62gerente
604
210k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
28
5.9k
In The Pink: A Labor of Love
frogandcode
137
21k
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.