aniki - the orm as our great brother
TRANSCRIPT
![Page 1: Aniki - The ORM as our great brother](https://reader031.vdocuments.net/reader031/viewer/2022020123/55abaf6d1a28ab1c3c8b4690/html5/thumbnails/1.jpg)
Aniki 〜たよりがいのあるORM〜
id:karupanerura
![Page 2: Aniki - The ORM as our great brother](https://reader031.vdocuments.net/reader031/viewer/2022020123/55abaf6d1a28ab1c3c8b4690/html5/thumbnails/2.jpg)
感謝とお詫び
参加頂きありがとうございます。
準備が滞り急な日程となってしまいすみませんでした。
皆様のお陰で無事開催することができました。
次回からはもうちょっと早く告知します。。
![Page 3: Aniki - The ORM as our great brother](https://reader031.vdocuments.net/reader031/viewer/2022020123/55abaf6d1a28ab1c3c8b4690/html5/thumbnails/3.jpg)
あばうとみー
id:karupanerura
Perl/Java/JS/elisp/etc..
Mobile Factory, Inc.
Gotanda.pm リーダー
#3 ご来場
まことに
ありがとうございます!
![Page 4: Aniki - The ORM as our great brother](https://reader031.vdocuments.net/reader031/viewer/2022020123/55abaf6d1a28ab1c3c8b4690/html5/thumbnails/4.jpg)
DBプログラミング入門寄稿しました
Perl Hackers Hub 買ってください!!
2014/12/23 発売!!
あこがれのあのコーナーにぼくの記事が!
![Page 5: Aniki - The ORM as our great brother](https://reader031.vdocuments.net/reader031/viewer/2022020123/55abaf6d1a28ab1c3c8b4690/html5/thumbnails/5.jpg)
本題
![Page 6: Aniki - The ORM as our great brother](https://reader031.vdocuments.net/reader031/viewer/2022020123/55abaf6d1a28ab1c3c8b4690/html5/thumbnails/6.jpg)
O/R Mapper
![Page 7: Aniki - The ORM as our great brother](https://reader031.vdocuments.net/reader031/viewer/2022020123/55abaf6d1a28ab1c3c8b4690/html5/thumbnails/7.jpg)
Objectに
![Page 8: Aniki - The ORM as our great brother](https://reader031.vdocuments.net/reader031/viewer/2022020123/55abaf6d1a28ab1c3c8b4690/html5/thumbnails/8.jpg)
RDBを
![Page 9: Aniki - The ORM as our great brother](https://reader031.vdocuments.net/reader031/viewer/2022020123/55abaf6d1a28ab1c3c8b4690/html5/thumbnails/9.jpg)
Mapping
![Page 10: Aniki - The ORM as our great brother](https://reader031.vdocuments.net/reader031/viewer/2022020123/55abaf6d1a28ab1c3c8b4690/html5/thumbnails/10.jpg)
べんり
![Page 11: Aniki - The ORM as our great brother](https://reader031.vdocuments.net/reader031/viewer/2022020123/55abaf6d1a28ab1c3c8b4690/html5/thumbnails/11.jpg)
Perlの ORM
![Page 12: Aniki - The ORM as our great brother](https://reader031.vdocuments.net/reader031/viewer/2022020123/55abaf6d1a28ab1c3c8b4690/html5/thumbnails/12.jpg)
DBIx::Class
![Page 13: Aniki - The ORM as our great brother](https://reader031.vdocuments.net/reader031/viewer/2022020123/55abaf6d1a28ab1c3c8b4690/html5/thumbnails/13.jpg)
特徴
![Page 14: Aniki - The ORM as our great brother](https://reader031.vdocuments.net/reader031/viewer/2022020123/55abaf6d1a28ab1c3c8b4690/html5/thumbnails/14.jpg)
でかい 複雑 高機能
![Page 15: Aniki - The ORM as our great brother](https://reader031.vdocuments.net/reader031/viewer/2022020123/55abaf6d1a28ab1c3c8b4690/html5/thumbnails/15.jpg)
イイトコ
![Page 16: Aniki - The ORM as our great brother](https://reader031.vdocuments.net/reader031/viewer/2022020123/55abaf6d1a28ab1c3c8b4690/html5/thumbnails/16.jpg)
リレーション よしなになる
![Page 17: Aniki - The ORM as our great brother](https://reader031.vdocuments.net/reader031/viewer/2022020123/55abaf6d1a28ab1c3c8b4690/html5/thumbnails/17.jpg)
とにかく べんり
![Page 18: Aniki - The ORM as our great brother](https://reader031.vdocuments.net/reader031/viewer/2022020123/55abaf6d1a28ab1c3c8b4690/html5/thumbnails/18.jpg)
ヤナトコ
![Page 19: Aniki - The ORM as our great brother](https://reader031.vdocuments.net/reader031/viewer/2022020123/55abaf6d1a28ab1c3c8b4690/html5/thumbnails/19.jpg)
なかで なにやってるのか ようわからん
![Page 20: Aniki - The ORM as our great brother](https://reader031.vdocuments.net/reader031/viewer/2022020123/55abaf6d1a28ab1c3c8b4690/html5/thumbnails/20.jpg)
IFが なんか
古い気がする...
![Page 21: Aniki - The ORM as our great brother](https://reader031.vdocuments.net/reader031/viewer/2022020123/55abaf6d1a28ab1c3c8b4690/html5/thumbnails/21.jpg)
Teng
![Page 22: Aniki - The ORM as our great brother](https://reader031.vdocuments.net/reader031/viewer/2022020123/55abaf6d1a28ab1c3c8b4690/html5/thumbnails/22.jpg)
特徴
![Page 23: Aniki - The ORM as our great brother](https://reader031.vdocuments.net/reader031/viewer/2022020123/55abaf6d1a28ab1c3c8b4690/html5/thumbnails/23.jpg)
ちいさい 簡潔 低機能
![Page 24: Aniki - The ORM as our great brother](https://reader031.vdocuments.net/reader031/viewer/2022020123/55abaf6d1a28ab1c3c8b4690/html5/thumbnails/24.jpg)
イイトコ
![Page 25: Aniki - The ORM as our great brother](https://reader031.vdocuments.net/reader031/viewer/2022020123/55abaf6d1a28ab1c3c8b4690/html5/thumbnails/25.jpg)
かんたん べんり
![Page 26: Aniki - The ORM as our great brother](https://reader031.vdocuments.net/reader031/viewer/2022020123/55abaf6d1a28ab1c3c8b4690/html5/thumbnails/26.jpg)
IFがモダン
![Page 27: Aniki - The ORM as our great brother](https://reader031.vdocuments.net/reader031/viewer/2022020123/55abaf6d1a28ab1c3c8b4690/html5/thumbnails/27.jpg)
ヤナトコ
![Page 28: Aniki - The ORM as our great brother](https://reader031.vdocuments.net/reader031/viewer/2022020123/55abaf6d1a28ab1c3c8b4690/html5/thumbnails/28.jpg)
リレーション つらい
![Page 29: Aniki - The ORM as our great brother](https://reader031.vdocuments.net/reader031/viewer/2022020123/55abaf6d1a28ab1c3c8b4690/html5/thumbnails/29.jpg)
SearchJoinedも あるけど
もうちょっと 直感的に つかいたい
![Page 30: Aniki - The ORM as our great brother](https://reader031.vdocuments.net/reader031/viewer/2022020123/55abaf6d1a28ab1c3c8b4690/html5/thumbnails/30.jpg)
なんとか したい
![Page 31: Aniki - The ORM as our great brother](https://reader031.vdocuments.net/reader031/viewer/2022020123/55abaf6d1a28ab1c3c8b4690/html5/thumbnails/31.jpg)
Aniki
![Page 32: Aniki - The ORM as our great brother](https://reader031.vdocuments.net/reader031/viewer/2022020123/55abaf6d1a28ab1c3c8b4690/html5/thumbnails/32.jpg)
特徴
![Page 33: Aniki - The ORM as our great brother](https://reader031.vdocuments.net/reader031/viewer/2022020123/55abaf6d1a28ab1c3c8b4690/html5/thumbnails/33.jpg)
そこそこちいさい そこそこ簡潔 そこそこ高機能
![Page 34: Aniki - The ORM as our great brother](https://reader031.vdocuments.net/reader031/viewer/2022020123/55abaf6d1a28ab1c3c8b4690/html5/thumbnails/34.jpg)
Tengに リレーションが
ついた みたいなやつ
![Page 35: Aniki - The ORM as our great brother](https://reader031.vdocuments.net/reader031/viewer/2022020123/55abaf6d1a28ab1c3c8b4690/html5/thumbnails/35.jpg)
Schema
![Page 36: Aniki - The ORM as our great brother](https://reader031.vdocuments.net/reader031/viewer/2022020123/55abaf6d1a28ab1c3c8b4690/html5/thumbnails/36.jpg)
DBIx::Schema::DSL を 採用
![Page 37: Aniki - The ORM as our great brother](https://reader031.vdocuments.net/reader031/viewer/2022020123/55abaf6d1a28ab1c3c8b4690/html5/thumbnails/37.jpg)
Schemaクラス生成 とか
煩わしいこと しないで済む
![Page 38: Aniki - The ORM as our great brother](https://reader031.vdocuments.net/reader031/viewer/2022020123/55abaf6d1a28ab1c3c8b4690/html5/thumbnails/38.jpg)
Migrationも かんたんに 実装できる
(未実装だけど…)
![Page 39: Aniki - The ORM as our great brother](https://reader031.vdocuments.net/reader031/viewer/2022020123/55abaf6d1a28ab1c3c8b4690/html5/thumbnails/39.jpg)
外部キー制約から リレーション情報
を取得
![Page 40: Aniki - The ORM as our great brother](https://reader031.vdocuments.net/reader031/viewer/2022020123/55abaf6d1a28ab1c3c8b4690/html5/thumbnails/40.jpg)
制約だけ書けば それを使って 関連する
レコードを取得可
![Page 41: Aniki - The ORM as our great brother](https://reader031.vdocuments.net/reader031/viewer/2022020123/55abaf6d1a28ab1c3c8b4690/html5/thumbnails/41.jpg)
Plugin
![Page 42: Aniki - The ORM as our great brother](https://reader031.vdocuments.net/reader031/viewer/2022020123/55abaf6d1a28ab1c3c8b4690/html5/thumbnails/42.jpg)
Mooを採用
![Page 43: Aniki - The ORM as our great brother](https://reader031.vdocuments.net/reader031/viewer/2022020123/55abaf6d1a28ab1c3c8b4690/html5/thumbnails/43.jpg)
Roleとして Pluginが 書ける
![Page 44: Aniki - The ORM as our great brother](https://reader031.vdocuments.net/reader031/viewer/2022020123/55abaf6d1a28ab1c3c8b4690/html5/thumbnails/44.jpg)
必要な属性が なければ
applyできない とかできる
![Page 45: Aniki - The ORM as our great brother](https://reader031.vdocuments.net/reader031/viewer/2022020123/55abaf6d1a28ab1c3c8b4690/html5/thumbnails/45.jpg)
もちろん RowのPluginも
書ける
![Page 46: Aniki - The ORM as our great brother](https://reader031.vdocuments.net/reader031/viewer/2022020123/55abaf6d1a28ab1c3c8b4690/html5/thumbnails/46.jpg)
ここから まじめな 資料
![Page 47: Aniki - The ORM as our great brother](https://reader031.vdocuments.net/reader031/viewer/2022020123/55abaf6d1a28ab1c3c8b4690/html5/thumbnails/47.jpg)
シンプルにするために
DBIx::Schema::DSLを採用
Mooを採用
5.14.2以降のみをサポート
![Page 48: Aniki - The ORM as our great brother](https://reader031.vdocuments.net/reader031/viewer/2022020123/55abaf6d1a28ab1c3c8b4690/html5/thumbnails/48.jpg)
DBIx::Schema::DSLとは
id:songmuさん作
DSLでSchemaが書ける
DDL(CREATE TABLE)も生成できる
SQL::Translator::Schemaが取れる
スキーマの情報が得られる
![Page 49: Aniki - The ORM as our great brother](https://reader031.vdocuments.net/reader031/viewer/2022020123/55abaf6d1a28ab1c3c8b4690/html5/thumbnails/49.jpg)
スキーマの情報とは?
どんなテーブルがあるのか
テーブルにどんなカラムがあるのか
PRIMARY KEYはなにか
テーブルの制約条件はなにか
ほかもろもろが分かる
![Page 50: Aniki - The ORM as our great brother](https://reader031.vdocuments.net/reader031/viewer/2022020123/55abaf6d1a28ab1c3c8b4690/html5/thumbnails/50.jpg)
補足1: Tengの場合
Teng::Schema::Dumper
データベースからスキーマ情報をdumpしてDSLにする
Teng::Schema::Loader
データベースから動的にスキーマ情報を得る
![Page 51: Aniki - The ORM as our great brother](https://reader031.vdocuments.net/reader031/viewer/2022020123/55abaf6d1a28ab1c3c8b4690/html5/thumbnails/51.jpg)
補足2: DBICの場合
Schemaクラスをテーブル毎に定義
DBIx::Class::Coreを継承
アクセサにテーブル名とかセットしていく
DBIx::Class::Schema::Loader
dbicdump(1)とかで自動生成可
![Page 52: Aniki - The ORM as our great brother](https://reader031.vdocuments.net/reader031/viewer/2022020123/55abaf6d1a28ab1c3c8b4690/html5/thumbnails/52.jpg)
Mooとは
Mo[ou]seのちっちゃい版
さいきんはこれがナウいらしい
DSLでアクセサとか生やせる
Roleという機能でTraitみたいなことできる
![Page 53: Aniki - The ORM as our great brother](https://reader031.vdocuments.net/reader031/viewer/2022020123/55abaf6d1a28ab1c3c8b4690/html5/thumbnails/53.jpg)
Mooとは
meta object protocolがある
クラスのメタデータにアクセス可
メタプログラミングしやすい
ただし、Mooseが必要
AnikiはMouseにした
![Page 54: Aniki - The ORM as our great brother](https://reader031.vdocuments.net/reader031/viewer/2022020123/55abaf6d1a28ab1c3c8b4690/html5/thumbnails/54.jpg)
DEMO
![Page 55: Aniki - The ORM as our great brother](https://reader031.vdocuments.net/reader031/viewer/2022020123/55abaf6d1a28ab1c3c8b4690/html5/thumbnails/55.jpg)
まとめ
DBIx::ClassもTengもべんり
DBIx::Schema::DSLべんり
Moo/Mo[ou]seべんり
![Page 56: Aniki - The ORM as our great brother](https://reader031.vdocuments.net/reader031/viewer/2022020123/55abaf6d1a28ab1c3c8b4690/html5/thumbnails/56.jpg)
おわり