JJUG Bizreach DBFlute 2014
-
Upload
masahiko-kubo -
Category
Engineering
-
view
4.030 -
download
3
description
Transcript of JJUG Bizreach DBFlute 2014
![Page 1: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/1.jpg)
Javaだからこそできる、ビズリーチ、
攻めのDB変更
久保 雅彦 jflute
![Page 2: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/2.jpg)
ビズリーチの紹介
Bizreach 選ばれた人だけの会員制転職サイト
CareerTrek レコメンド型転職サイト
ZuKnow 友だちと競える暗記帳アプリ
RegionUp アジア展開のビズリーチ!
その他、新進気鋭サービス続々!
![Page 3: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/3.jpg)
自己紹介
久保 雅彦 :: jflute (じぇいふるーと)
! DBFluteの作者(メインコミッタ)
! ビズリーチで教育・Javaサイドアーキテクト
! jfluteの日記 :: http://d.hatena.ne.jp/jflute/
! Twitter: @jflute / Facebook: dbflute
![Page 4: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/4.jpg)
さて
DB変更、
好きですか?
![Page 5: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/5.jpg)
そりゃまあ
DB変更しないと
生きていけないのであれば...
…やるさ
![Page 6: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/6.jpg)
ビズリーチでは
DB変更して会員が喜ぶなら…
やる!
![Page 7: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/7.jpg)
ビズでのイテレーション
! 二週にいっぺんリリース // 巨人プロジェクト
! 毎週リリース // 発展途上プロジェクト
! 週に三回くらいリリース // 黎明期プロジェクト
![Page 8: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/8.jpg)
普通に発する言葉
「今回リリースの
DB変更は?」
![Page 9: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/9.jpg)
そこで
![Page 10: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/10.jpg)
DBFluteとは?
「DB変更に強い」 をテーマにした開発支援ツール
![Page 11: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/11.jpg)
DBFluteのターゲット
! BtoCなどのサービス開発(事業会社) ! リーン・スタートアップ ! インクリメンタル開発
! DB設計と実装の同時開発
※ビジネスのための泥臭いツールである
![Page 12: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/12.jpg)
根本
DB変更が発生すると、
何が困るの?
![Page 13: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/13.jpg)
ひとーつ!
密かにデグレる
![Page 14: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/14.jpg)
ジレンマ
すべてのテストは不可能
UnitTest自体も修正の嵐
「現場のテストコードはどこへ?」
http://d.hatena.ne.jp/jflute/20120806/1344262853
![Page 15: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/15.jpg)
そこでコード生成
(デモ)
![Page 16: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/16.jpg)
ConditionBean
RDB指向の
タイプセーフ
![Page 17: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/17.jpg)
ConditionBeanの実装
![Page 18: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/18.jpg)
外だしSQL(2WaySQL)
引数DTOも検索結果DTOも自動生成!
そして、外だし一括実行!
![Page 19: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/19.jpg)
外だしSQLの手順
! 2WaySQLを書く
! Sql2Entityを叩く // もろもろDTO自動生成
! 自動生成クラスで外だしSQLを呼ぶ
※詳しくは、オフィシャルドキュメントにて
![Page 20: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/20.jpg)
100%検知は無理でも…
30個自力で探すのと、
20個は自動検知で10個だけ
探せばいい、では大違い!
![Page 21: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/21.jpg)
ふたーつ!
ドキュメントが古くなる (えっ、何が変わったの?)
![Page 22: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/22.jpg)
ジレンマ
手メンテは絶対に無理
9割くらい正しい
テーブル定義なんて無意味
![Page 23: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/23.jpg)
そこでドキュメント生成
(デモ)
![Page 24: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/24.jpg)
SchemaHTML
※SchemaHTMLでググってみてください
![Page 25: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/25.jpg)
HistoryHTML
※HistoryHTMLでググってみてください
![Page 26: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/26.jpg)
ドキュメントの生成手順
! 1. DBのメタデータを取得して… ! manage.bat(sh) の 21 (jdbc) を叩く
! 2. そして、ドキュメント生成 ! manage.bat(sh) の 22 (doc) を叩く
※詳しくは、オフィシャルドキュメントにて
![Page 27: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/27.jpg)
みっつ!
みんなのローカルDBが
古くなる
![Page 28: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/28.jpg)
ジレンマ
確かにalterするの面倒
なれの果ては結合直つなぎ…
![Page 29: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/29.jpg)
そこでReplaceSchema
(デモ)
![Page 30: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/30.jpg)
ReplaceSchema運用
! 誰からDB変更したらDDLコミット
! みんなはFetch&PullしたらReplaceSchema => ローカルDB最新
※最新テストデータも一緒に登録される
![Page 31: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/31.jpg)
ちょっとBreak
ビズリーチの
DB変更風景
![Page 32: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/32.jpg)
DB変更の流れ
! ERMaster-bでスキーマ変更 (ERDドリブン)
! DDL生成 => ReplaceSchemaへ渡す
! DBFluteで自動生成 (DB再構築&コード生成)
! DDLと自動生成クラスをコミット
! みんなは Fetch&Pull して、ReplaceSchema ! SchemaHTMLとHistoryHTMLを確認
![Page 33: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/33.jpg)
全員DB設計者
シニアも新卒も、
DB変更する!
![Page 34: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/34.jpg)
格言
SQLが書けるだけのエンジニアでは、
DBは守れない
(モデリング力重視)
![Page 35: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/35.jpg)
疑問
「コンフリクトしません?」
![Page 36: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/36.jpg)
回答
「だいじょうぶ!」
![Page 37: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/37.jpg)
この方(!?)を…
![Page 38: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/38.jpg)
持っている人がDBAです
![Page 39: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/39.jpg)
鉄の掟
この方(!?)を持っている人
だけが、
ERMasterをさわれる!
![Page 40: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/40.jpg)
もうちょい、ちゃんとした話
DB変更用のブランチがあります
画面の修正に必要なDB変更があれば、
各々のチケットブランチが取り込む
![Page 41: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/41.jpg)
そしてみんなでレビュー
![Page 42: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/42.jpg)
戻ります
DB変更すると、
さらに何が困る?
![Page 43: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/43.jpg)
よっつ!
本番とローカルで
スキーマ違う!
![Page 44: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/44.jpg)
ジレンマ
どーーーーーしても
発生しちゃう… ※なんでだよ、って思うかもですが…
![Page 45: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/45.jpg)
そこでAlterCheck
(デモ) ※時間があれば…m(_ _)m
![Page 46: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/46.jpg)
AlterCheckの仕組み
一つ前のDDL + Alter文
= 最新のDDL
※この方程式でチェック
![Page 47: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/47.jpg)
AlterCheck運用
! リリースしたら現状DDLを保存
! 普通にDB変更フロー
! さあ、Alter文書くときにAlterCheck
! OKなら本番へ ※AlterCheckでググってみてください
![Page 48: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/48.jpg)
いつつ!
テストデータ作るの
つらい(><
![Page 49: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/49.jpg)
ジレンマ
手で作るの確かにつらい
![Page 50: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/50.jpg)
そこでLoadDataReverse
(デモ)
※時間があれば…m(_ _)m
![Page 51: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/51.jpg)
LoadDataReverse運用
! 画面でデータを登録
! エクセルデータにリバース
! ReplaceSchemaで登録できる
※LoadDataReverseでググってみてください
![Page 52: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/52.jpg)
疑問
「FK制約違反にならないの?」
![Page 53: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/53.jpg)
回答
「FKピラミッド通りに出力」
FKなし
FKもってる
FKちょーもってる
まあ、ダメなケース もあるけど… そのときは手で微調整
![Page 54: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/54.jpg)
循環できるデータ
画面で登録データを、みんなで共有
ちょっと手で修正することもできる
循環型テストデータ運用!
![Page 55: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/55.jpg)
むっつ!
スロークエリさん、
こんにちは
![Page 56: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/56.jpg)
プレゼン資料作りながら心配に…
まだ、時間あります?
![Page 57: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/57.jpg)
ジレンマ
設計が積み上げなので、
データ量がなかなか読めない
※スロークエリは嬉しい悲鳴ではありますが…
![Page 58: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/58.jpg)
もいっこジレンマ
スロークエリ出ても、
「それ、どの画面のSQL?」
って、意外にわからない
![Page 59: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/59.jpg)
そこで、SQLとアプリのマッピング
(デモ)
※時間があれば…m(_ _)m
![Page 60: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/60.jpg)
グラフ化されたもの!
(会場の方にだけちょっとお見せします)
※時間があれば…m(_ _)m
![Page 61: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/61.jpg)
スロークエリ管理
! SQLに、実行クラス名が入る(DBFlute)
! Fluentdで抽出 to ElasticSearch
! Kibanaグラフ化 => メソッドのトップ10 「SQLに呼び出しActionを埋め込み」 http://dbflute.seasar.org/ja/manual/function/helper/saflute/friendlylogging.html#calllersqllog
![Page 62: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/62.jpg)
SQL発行回数管理
! SQLの発行回数を数える(DBFlute)
! 1リクエスト30回以上で警告ログ
! まだ、Kibanaに載ってないが…いつか 「RequestごとのSQLの発行回数」http://dbflute.seasar.org/ja/manual/function/helper/saflute/friendlylogging.html#sqlcountlog
![Page 63: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/63.jpg)
DBFluteがやっていること
DBFluteは、
SQLを管理するための
拡張ポイントを用意している
![Page 64: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/64.jpg)
さてさて
お知らせ
![Page 65: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/65.jpg)
ビズリーチでは
Scalaでサービス開発
してみたい方、
大募集!
![Page 66: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/66.jpg)
Scalaの勉強会も活発
「Daily Scala始まりました」 https://codebreak.com/blog/shimamoto/page/c58202/
※Scala未経験でもだいじょうぶ、
Scalaプロフェッショナルがすぐそばにいます!
![Page 67: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/67.jpg)
jfluteも勉強中
「DBFlute on Scala パイロット版」 http://d.hatena.ne.jp/jflute/20140904/onscala
※ (サイン入り)「Scala逆引きレシピ」が手放せない(^^
![Page 68: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/68.jpg)
もちろん
Javaでサービス開発
してみたい方も、
大募集!
![Page 69: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/69.jpg)
疑問
「DBFluteなんてまっっったく、
知らないんですけど…」
![Page 70: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/70.jpg)
回答
「知ってたら、
ビックリしますよぅ」
![Page 71: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/71.jpg)
DBFluteハンズオン!
新卒だけでなく、
中途の方もしっかり研修制度あり http://d.hatena.ne.jp/jflute/20130602/1370192962
※現社員、ほぼみんなDBFlute初めての状態から プロフェッショナルに
![Page 72: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/72.jpg)
ビズリーチの社内勉強会
【業務時間“内”のOfficial勉強会・トレーニング】
CTO室共有会 (最先端の技術話)
DBFluteハンズオン (1on1フォロー)
【業務時間“外”のサークル活動】
地味な勉強会 (実務レベルの技術話)
コードリーディング会 (正面突破)
最近、Spring勉強会も始まりました!
![Page 73: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/73.jpg)
…
そして…
![Page 74: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/74.jpg)
お知らせ
11月22日(土)
ビズリーチガーデンにて、
DBFluteフェスやります!
http://connpass.com/event/9544/
![Page 75: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/75.jpg)
まとめ
DB変更から逃げずに、
ビジネスと向き合うための、
道具を使う。
![Page 76: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/76.jpg)
じつは
後半Javaじゃなくても…
コード生成なしの ”Alto DBFluteスタイル” で
PHPやRubyの現場でも使われることも。
http://dbflute.seasar.org/ja/introduction/altodbflute.html
![Page 77: JJUG Bizreach DBFlute 2014](https://reader035.fdocuments.net/reader035/viewer/2022062220/559b04d81a28ab54638b456d/html5/thumbnails/77.jpg)
おしまい!
ご清聴ありがとうございました