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
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
47
[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
今さら理解するウェブフォントver.2026
takanorip
2
190
OR学会2026年秋期大会_機械学習と数理最適化の融合による、配合レシピ最適化システム開発事例
brainpadpr
0
100
予測不能な実行エージェントを安全にサクッと試せるサンドボックス環境の話
sansantech
PRO
0
130
形式手法を使って仕様をコーディングしよう
mikanichinose
0
190
Google Cloud Next Tokyo 26登壇時のスクリプト
recruitengineers
PRO
0
210
The seven pitfalls of AI (revised version)
ufried
0
290
Incremental HTTP
kazuho
5
2.1k
生成AIと進める探索的データ分析(2026.10.03 第122回Tokyo.R勉強会)
tatamiya
2
1.4k
AIは爆速なのに、私が詰まっていた話 ― 音声入力と鳴くマスコットでボトルネックを削る
yama3133
0
540
組み立てて楽しむ AWS Blocks 入門
kmiya84377
0
220
AI時代のAPI開発を加速する品質ガードレール / API Quality Guardrails in the AI Era
yokawasa
0
160
1万名の社員が使う認証基盤で どう信頼性を担保するか?
kairim0
0
210
Featured
See All Featured
Un-Boring Meetings
codingconduct
0
440
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Being A Developer After 40
akosma
91
590k
Docker and Python
trallard
47
4.2k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
46k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
390
VelocityConf: Rendering Performance Case Studies
addyosmani
331
25k
A Soul's Torment
seathinner
8
3.7k
How STYLIGHT went responsive
nonsquared
100
6.3k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.4k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
760
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活用事例 〜 ビューポイントからデータベースを整理してみた話 〜