Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
[2024/04/23]tbls活用事例 〜 ビューポイントから データベースを整理してみた話 〜
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
tosite
April 23, 2024
Technology
820
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
[2024/04/23]tbls活用事例 〜 ビューポイントから データベースを整理してみた話 〜
Money Forward Tech LT大会 vol.1
https://moneyforward.connpass.com/event/296578/
tosite
April 23, 2024
More Decks by tosite
See All by tosite
[2026-10-09]一枚の布で作らなくてもいい。 信頼性は「パッチワーク」で紡がれる~既存の運用と新しい可能性をつなぎ合わせてきたCREの話~
tosite
0
46
[2026-09-30]ロックンロールは鳴り止まないっ - 信頼性かまってちゃん - 「データ駆動を投げ捨ててまで。」追いかける信頼性改善に向けた取り組みの話
tosite
0
210
[2026-09-26]空論ジェネリックプロセス~テスト資産とAIで紡ぐ、再現可能なパフォーマンスチューニングの話~
tosite
0
260
[2026-09-11]SREは誰のもの?運用エンジニアが始める 「SRE領域への越境」とチームの進化の軌跡 〜Road to NEXT CRE
tosite
0
450
[2026-08-25]AIによる自動化と人の介入、その狭間で揺れる信頼性についての俺の思いを、波よ聞いてくれ
tosite
0
240
[2026-03-07]あの日諦めたスクラムの答えを僕達はまだ探している。〜守ることと、諦めることと、それでも前に進むチームの話〜
tosite
0
1k
[2026-02-26]Road to NEXT CRE 〜SRE活動を通して見つけた、次世代CRE組織の在り方SP〜
tosite
0
300
[2025-12-12]あの日僕が見た胡蝶の夢 〜人の夢は終わらねェ AIによるパフォーマンスチューニングのすゝめ〜
tosite
0
1.3k
[2025-02-07]生成AIで変える問い合わせの未来 〜チームグローバル化の香りを添えて〜
tosite
1
1.5k
Other Decks in Technology
See All in Technology
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
17
120k
実体験から学ぶ分析エージェントの開発と運⽤
recruitengineers
PRO
4
1.4k
今さら理解するウェブフォントver.2026
takanorip
2
130
分析AIエージェントを育てる、動く環境を育てる
codatum
0
330
不可逆な意思決定を避けながら10億超の顧客データを AI Ready にするデータ基盤設計
baseballyama
1
160
データ品質を壊しながらSnowflakeのAIに分析させてみた
kawanago
0
540
AIは爆速なのに、私が詰まっていた話 ― 音声入力と鳴くマスコットでボトルネックを削る
yama3133
0
540
DWH の限界突破! AI エージェント向け爆速リアルタイムデータ基盤 ClickHouse
jozono
1
280
オブザーバビリティを高める AI エージェント体験を考える / Designing AI Agent Experiences That Enhance Observability
aoto
PRO
2
320
「事実」を「計測」して、「解釈」する 〜AWS Lambdaのメモリ最適解の見つけ方〜
maimyyym
0
110
Google Cloud Next Tokyo 26登壇時のスクリプト
recruitengineers
PRO
0
210
並行性の問題を防げ!実践トランザクション入門
occhi
0
280
Featured
See All Featured
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.7k
Making Projects Easy
brettharned
120
6.8k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
490
Accessibility Awareness
sabderemane
1
240
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
320
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
31k
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.2k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
390
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
2
350
The SEO identity crisis: Don't let AI make you average
varn
0
580
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活用事例 〜 ビューポイントからデータベースを整理してみた話 〜