Chonaso's Commentary

InternetやIT技術などについて知ったこと、試したこと、考えたことを書いていきます。

Doma勉強会 in 東京に行ってきました #doma_tokyo #eventdots

DomaJava のDBアクセスフレームワークです。(Welcome to Doma — Doma 2.0 ドキュメントより)

私が仕切る案件では基本的にDomaを使っています。 部門的にはSeasar2+S2JDBCがスタンダードでしたが、Seasar2が公式アップデートはぼちぼち終了になるので、 今後の案件はおそらくSpring+Domaという組み合わせになるでしょう。

ちなみに私がDomaを選んだ理由は以下の通りです。

  • JavaコードとSQLを完全分離できる
  • SQLを知らないと使えない(強く意識させる)
  • 2Way SQLが使える
  • 特定のフレームワークにロックしない
  • 多くのRDBに対応している

また、実際に使っていてよいと感じた点が以下の通りです。

  • 静的チェックが強力
  • SQLJavaコードの行き来が簡単
  • ドメインクラス機能が超便利

では本編。主に感想です。

Domaの紹介

http://backpaper0.github.io/ghosts/doma-intro.html

  • Domaの機能の紹介ですが、Domaは結構ハイペースでバージョンアップを続けていてフォローしきれていない機能(Embeddableなど)があったので、改めて勉強になりました。
  • EntityListenerでDIってよさげですね。たぶん今度使います。
  • どこかで発表があったかもしれませんが、doma-genなどの細かい(深い)話も聞いてみたいなぁ、と個人的に思いました。

ドメインクラスの話

http://backpaper0.github.io/ghosts/doma-domainclass.html

  • Domaという名前の由来でもあるドメインクラスの話。
  • ドメインって意味が広すぎてつらい、っていう意見ももっともですが、仕方ないですね。
  • 私の身の回りではDomaのおかげで「Enum値をgetValueして比較する」みたいな悲しいコードが無くなりました。
  • 「どこまでドメインクラス化するか」問題は皆共通の悩みだったようです。設計書にドメイン一覧とか書く案件だったら全部クラス化してもいい気がしますね。

とあるDoma2の使い方

http://gakuzzzz.github.io/slides/doma_practice/

  • 関数型ゴリゴリなDoma2の使い方。Java8 Stream APIを理解していない人は見ても仕方ないスライドです。逆に理解している人にとっては非常に面白い教材ですね。
  • というかDoma 2 素案 · GitHubで見かけたやり取りに対するアンサーだなぁ、と思ったら発表者はコメント付けた方でした。
  • IN句、NOT IN句にNULL入れた時の挙動って調べたこともなかったなぁ。

Domaの開発で大切にしている10のこと - Qiita

http://qiita.com/nakamura-to/items/099cf72f5465d0323521

  • Doma開発者の中村さんの発表。Domaの開発ポリシーについてです。
  • さりげなくJPA以外のCriteriaフレームワークにフォローを入れつつも、どの程度Criteriaを使うか、に対する一つのアンサーとも言えます。
  • 個人的には概ね同意というか、S2DAOからS2JDBCに移ることに納得のいかなかった人々へのノアの方舟といった感じです。
  • 逆に全体的に同意しかねる!っていう人は他のフレームワークに移った方がいいかもしれない、そんな内容です。(この辺りは唯一の正解は無い話ですね)
  • 実は私もツイートを拾ってもらって、Domaに反映されたことがあります。(たまたまリリース候補と合致してただけかもしれません) https://twitter.com/chonaso/status/683506363553583104

(LT)Doma2とMVC1.0でJava EE Webアプリを作ろう! // Speaker Deck

https://speakerdeck.com/masatoshitada/doma2tomvc1-dot-0dejava-ee-webapuriwozuo-rou

  • SpringBoot with Doma2対抗のPayara Micro with Doma2。
  • Domaとは全然関係ないですが、JerseyMVCじゃなくMVCでもいいかもね、ってちょっと思いました。

(LT)Doma2 with Kotlin

http://www.slideshare.net/yyyank/doma2-with-kotlin

  • Kotlinって正直ほとんど言語仕様をフォローしていないんですが、KotlinがサポートしてるのってJava6なんですね...
  • Kotlin関係ないですが、Domaって手軽にJDBCを使うツールとしても使えるんだなぁと認識させられました。

その他質問など

  • Q:せっかくなのでちょっと気になってた件。

    A:データソースごとにパッケージ分けた方がいいです。

  • あの場では特に聞かなかったですが、ドメイン使いだすとありがちな「DAOメソッドをオーバーロードしたい」問題って私だけですかね?

まとめ

  • Domaを好んで使う人たちの集まりだけあって「Doma最高!」連呼の若干宗教じみた雰囲気を感じました。
  • 今回発表されたスライドではないですが、これも面白いです。