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
[2024/04/23]tbls活用事例 〜 ビューポイントから データベースを整理してみた話 〜
Search
tosite
April 23, 2024
Technology
0
650
[2024/04/23]tbls活用事例 〜 ビューポイントから データベースを整理してみた話 〜
Money Forward Tech LT大会 vol.1
https://moneyforward.connpass.com/event/296578/
tosite
April 23, 2024
Tweet
Share
More Decks by tosite
See All by tosite
[2025-12-12]あの日僕が見た胡蝶の夢 〜人の夢は終わらねェ AIによるパフォーマンスチューニングのすゝめ〜
tosite
0
560
[2025-02-07]生成AIで変える問い合わせの未来 〜チームグローバル化の香りを添えて〜
tosite
1
1.2k
[2024/10/25]CREの守護者たち 〜DevOps×シフトレフト - 俺またプロダクト救っちゃいました!?〜
tosite
0
1.7k
[2024/07/11]Guardianとして生まれ変わった俺は攻めと守りの運用で無双する 〜守りの天才が考える、攻めの運用術〜
tosite
0
1.3k
[2023/09/15]ER図クエスト 過ぎ去りしドキュメントを求めて 〜複雑性に眠る秘宝〜
tosite
0
850
[2022/12/07]この素晴らしいアプリケーションにテストコードを
tosite
0
66
[2022/03/25]コミュニティから学ぶエンジニアリング
tosite
0
500
[2021/12/16]テストコードのないレガシーアプリケーションとの向き合い方
tosite
0
110
[2019/07/27]はじめよう、ニコカレ!
tosite
0
70
Other Decks in Technology
See All in Technology
2人で作ったAIダッシュボードが、開発組織の次の一手を照らした話― Cursor × SpecKit × 可視化の実践 ― Qiita AI Summit
noalisaai
1
370
SREが向き合う大規模リアーキテクチャ 〜信頼性とアジリティの両立〜
zepprix
0
380
M&A 後の統合をどう進めるか ─ ナレッジワーク × Poetics が実践した組織とシステムの融合
kworkdev
PRO
1
370
MySQLのJSON機能の活用術
ikomachi226
0
150
プロポーザルに込める段取り八分
shoheimitani
0
130
使いにくいの壁を突破する
sansantech
PRO
1
110
ClickHouseはどのように大規模データを活用したAIエージェントを全社展開しているのか
mikimatsumoto
0
170
データの整合性を保ちたいだけなんだ
shoheimitani
7
2.6k
What happened to RubyGems and what can we learn?
mikemcquaid
0
220
MCPでつなぐElasticsearchとLLM - 深夜の障害対応を楽にしたい / Bridging Elasticsearch and LLMs with MCP
sashimimochi
0
130
(金融庁共催)第4回金融データ活用チャレンジ勉強会資料
takumimukaiyama
0
120
Claude_CodeでSEOを最適化する_AI_Ops_Community_Vol.2__マーケティングx_AIはここまで進化した.pdf
riku_423
0
220
Featured
See All Featured
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
0
100
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
0
310
A better future with KSS
kneath
240
18k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
0
190
What's in a price? How to price your products and services
michaelherold
247
13k
The browser strikes back
jonoalderson
0
360
Exploring anti-patterns in Rails
aemeredith
2
250
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
54
Six Lessons from altMBA
skipperchong
29
4.1k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.9k
Transcript
tbls活用事例 〜 ビューポイントから データベースを整理してみた話 〜 株式会社マネーフォワード クラウド経費本部 プロダクト開発部 手島
尚人 / tosite 2024-04-23 株式会社マネーフォワード 福岡開発拠点 Money Forward Tech LT大会 vol.1
初めまして tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
None
株式会社マネーフォワード クラウド経費本部 プロダクト開発部 バックエンドエンジニア 手島 尚人 / tosite
趣味: キャンプ・登山・料理・ドライブ・温泉・車中泊
近況 tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
None
My new gear...
None
寝袋などの寝具を収納 折りたたみ式の マットレス ライトなどの 電気周りのギア キャンプ道具などの 大物を床下収納 イレクターパイプで ベッドを構築 車内カーテンを設置
道の駅やサービスエリアで 車中泊しています
仕事終わりにそのまま 出かけられるので休日が 一日増えたような感覚です
雨が降っても キャンプ場を キャンセルしなくて よくなりました!
閑話休題 tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
JaSST Kyushuの 実行委員長も やっています tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
今年も九州のどこかで開催するので もしテストや品質に興味がある方は 続報をお待ちください! tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
閑話休題 tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
2023年8月 からマネーフォワードで働いています tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
入社後はガーディアングループの一員として CRE(Customer Reliability Engineer) 的な動きをしています tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
テックブログも 書いているので 見てください tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜 7th長崎QDGでデータベースの ドキュメント化について LTしてきました 必見!?JaSST'23
Kyushuの 舞台裏全部お見せしちゃいます 「ハンドラー」から見る インシデント対応 ―起こってしまったその時に―
tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜 7th長崎QDGでデータベースの ドキュメント化について LTしてきました
かいつまんで あらすじ ここまで2:30
2023年9月の話 ※マネーフォワードに入社して1ヶ月後 tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
話してきました! tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
あらすじ tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
やめて!複雑なドメイン知識と大量のテーブルの海を 見たら、転職したてで覚えることがいっぱいの tositeの精神は燃え尽きちゃう! お願い、全て暗記してtosite! あんたがER図を覚えればバリューが発揮できるんだから! tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
次回「tosite死す」 デュエルスタンバイ! tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
…という夢を見たんだ tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
そういうつらい状況にならないように 私はtblsというツールの導入を推進しました tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
What is tbls? tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
端的に言えば データベースドキュメント 自動生成ツール 開発者の方は「Document as Code」というキーワードを使われています https://speakerdeck.com/k1low/phpconfuk-2023
https://github.com/k1LoW/tbls 参考: 出力イメージ
Phase 1. ローカルにドキュメント生成環境を準備 tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜 tblsのインストールと
ymlファイルを準備しただけ! あとはMakefileに便利コマンドを 追加した程度の開発 1.ローカルのDBをマイグレーション ファイルから構築 2.tbls.ymlを作成 3.コマンドを実行してデータベース ドキュメントを生成
Phase 2. CIでドキュメントのビハインドを検知する tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜 CIで利用されるテーブルは常に
最新になることを利用 コミットされているドキュメントと 最新のドキュメントに差分がある 場合はCIを落とすようにした 1.CIのDBをマイグレーション ファイルから構築 2.CIのデータベースドキュメントを生成 3.CIとコミットしたデータベース ドキュメントの差分を検知
ER図が作られただけではなく データベースドキュメントが 最新の状態に保たれる 仕組みが構築できました tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
…ですがいくつかの 課題を残していました tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
抱えている 課題 ここまで4:30
課題1. テーブルの関係性の全体像を把握しにくい tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
tblsの標準機能でも2テーブル間の リレーションは出力することができますが… tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
テーブルのまとまり を出力するのは難しいです 例えばユーザー情報のテーブルのまとまりや契約情報のテーブルのまとまりなど tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
課題2. モデルにのみリレーションが定義されている tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
データベースの 外部キー制約がなく tbls側からリレーションが検知できないケースがあります tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
MVC2フレームワークは ポリモーフィック関連付け などの強力な機能を有している反面 しばしばこういったことを目にします tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
これらの課題を解決するために 次の取り組みを行いました tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
課題1への アプローチ ここまで5:30
課題1. テーブルの関係性の全体像を把握しにくい tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
tblsにはViewpointsという 概念がありますが… ref: k1LoW/tbls#Viewpoints
より気軽にメンテナンスできるように 一旦はLabelを使うこととしました ref: k1LoW/tbls#Labels
tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜 # ER図をsvg形式で出力する tbls out -t
svg -o #{path}.svg --label #{label} -c .tbls.yml # Markdown形式でドキュメントを生成する tbls out -t md -o #{path}.md --label #{label} -c .tbls.yml 幸いにも次のコマンドで ラベル単位のドキュメントが生成できたからです
ただこれだけだとテーブル定義と ER図がバラバラに生成されるので… ref: k1LoW/tbls#Labels
そして以下コマンドで Markdownにsvgファイルを埋め込む tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜 md = File.read("#{path_to_markdown }.md") .gsub( "---\n",
"##Relations\n\n\n\n---\n") File.write(path, md)
THE ☆ 力技 tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜 このあたりを再現
ですがこのやり方を使わなくても Viewpointsがあるので 今から導入される方はそちらをおすすめします tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
課題1. テーブルの関係性の全体像を把握しにくい tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
課題1. テーブルの関係性の全体像を把握しにくい tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
課題2への アプローチ ここまで6:30
課題2. モデルにのみリレーションが定義されている tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
…の前に tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜 cat .tbls.yml | wc -l
4,647行 tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
😱 tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
さすがにメンテナンスがつらいので 定義ファイルを分割 する対応を行いました tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
実装イメージ tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
編集するべきファイル が分割されたことで保守性が上がった tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
改めて 課題2. モデルにのみリレーションが定義されている の解決策を考える tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
モデルにだけ定義があって 外部キー制約がないために tblsがリレーションを検知できないのが問題 tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
モデルにだけ定義がある? tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
| \ __ / _ (m) _ ピコーン |ミ|
/ `´ \ ('A`) ノヽノヽ く く tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
せや!モデルからリレーションを抽出したろ! tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
Ruby on Railsには reflect_on_all_associations というメソッドがあります ref: reflect_on_all_associations
tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
そこからさらに次のコードから モデル間の親子関係 を取得できます tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜 models = ActiveRecord::Base .descendants.reject(& :abstract_class? )
models.each do |model| model.reflect_on_all_associations.each do |reflection| child_table = reflection.active_record&.table_name parent_table = reflection.klass&.table_name pk = reflection.klass&.primary_key fk = reflection.foreign_key end end
これで親子間テーブルと キーのペアが取得できた! tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
ですが ここでも問題が… tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
検証段階ではリレーションの精度が100%で出力されず 我々はこのリレーションを どこまで信用するかという問題がありました tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
ですが tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
社内向けのドキュメントであること とにかく概要を掴みたいこと 最悪間違っていた場合手動で更新すればいいこと tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
以上のことから 100点のリレーションではありませんが 70点のリレーションを構築すること を目標にしました tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
ここで先ほど対応した 定義ファイル分割 が活きてきます tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
このようにファイルを分割したことによって 自動で分割した定義ファイルを 常に更新できるようになりました tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
課題2. モデルにのみリレーションが定義されている tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
課題2. モデルにのみリレーションが定義されている tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
本題: 結 ここまで9:00
これらの対応によって 明確にデータベースから アプリケーションを理解 できるようになりました tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
チームメンバーや 新しくジョインしたメンバーからも たくさんのポジティブなコメントをもらえました tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
利用者からの声 tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜 入社してからプロダクトのキャッチアップを する際、また何か調査する際に めちゃくちゃお世話になってます!!! 中でもテーブルやカラムのコメントが ありがたく、細かなRailsの実装を
見なくとも、それらが何をしているのかが わかるのは本当にありがたいです🙏
利用者からの声 tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜 入社してからプロダクトのキャッチアップを する際、また何か調査する際に めちゃくちゃお世話になってます!!! 中でもテーブルやカラムのコメントが ありがたく、細かなRailsの実装を
見なくとも、それらが何をしているのかが わかるのは本当にありがたいです🙏 ER 図をシュッと見ることができて便利だと 思いました。 リレーションで困ったらすぐ活用してます。
入社してからプロダクトのキャッチアップを する際、また何か調査する際に めちゃくちゃお世話になってます!!! 中でもテーブルやカラムのコメントが ありがたく、細かなRailsの実装を 見なくとも、それらが何をしているのかが わかるのは本当にありがたいです🙏 ER 図をシュッと見ることができて便利だと 思いました。
リレーションで困ったらすぐ活用してます。 利用者からの声 tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜 複雑なリレーションを持つテーブルが 視覚的に分かるのがとてもいいですね。 有志が追加してくれているdescriptionも とても重宝しています。 開発・調査で迷った際に 参照させていただいています。
入社してからプロダクトのキャッチアップを する際、また何か調査する際に めちゃくちゃお世話になってます!!! 中でもテーブルやカラムのコメントが ありがたく、細かなRailsの実装を 見なくとも、それらが何をしているのかが わかるのは本当にありがたいです🙏 複雑なリレーションを持つテーブルが 視覚的に分かるのがとてもいいですね。 有志が追加してくれているdescriptionも
とても重宝しています。 開発・調査で迷った際に 参照させていただいています。 ER 図をシュッと見ることができて便利だと 思いました。 リレーションで困ったらすぐ活用してます。 利用者からの声 tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜 開発チームの時は、実装する前に リレーションがどうなっているか確認できて とてもよかったです! ガーディアンになってからは主に調査で 活用させてもらいました! シュッと確認できるので、とても 助かってます!ありがとうございます!
入社してからプロダクトのキャッチアップを する際、また何か調査する際に めちゃくちゃお世話になってます!!! 中でもテーブルやカラムのコメントが ありがたく、細かなRailsの実装を 見なくとも、それらが何をしているのかが わかるのは本当にありがたいです🙏 複雑なリレーションを持つテーブルが 視覚的に分かるのがとてもいいですね。 有志が追加してくれているdescriptionも
とても重宝しています。 開発・調査で迷った際に 参照させていただいています。 ER 図をシュッと見ることができて便利だと 思いました。 リレーションで困ったらすぐ活用してます。 利用者からの声 tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜 開発チームの時は、実装する前に リレーションがどうなっているか確認できて とてもよかったです! ガーディアンになってからは主に調査で 活用させてもらいました! シュッと確認できるので、とても 助かってます!ありがとうございます! ビューの機能がすごくありがたいです! 膨大なコードベースなので対象の関心ごとを理解するのに すごく役立っています! また、CIで腐らないER図になっているところも非常に ありがたいです! 既存のER図は手運用だったため網羅されていない点や、 最新状態でないという点が大きな問題だったかと 思っていますが、 tblsの導入でこれらの点が払拭 されたと思っています!(入社のタイミングで欲しかった!)
うれしい! tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
すべてが参考になるとは思いませんが 皆さんがドキュメント化で迷った際は 今回のLTを思い出してもらえると嬉しいです tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
確かにER図を整理するということは 簡単なことではありませんし 非常に根気の必要な作業です tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
ですが… 後々レバレッジが効いてくるものなので これを機にドキュメント化に 取り組んでみてはいかがでしょうか? tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
終わりに tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
マネーフォワード福岡開発拠点では 一緒に働ける仲間を募集しています! https://hrmos.co/pages/moneyforward/jobs?category=1666323298559537153 tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
福岡開発拠点のサイトもあるので ぜひご覧ください! https://fukuoka.moneyforward.com tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜
ご清聴ありがとう ございました! tbls活用事例 〜 ビューポイントからデータベースを整理してみた話 〜