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

Doma勉強会に行ってきました。

eventdots.jp

最近はJPAを使っていてDomaを使えていないのですが、以前そこそこ長い間(3年以上)Doma(1, 2両方)を使ったシステム開発をしてたので、そのあたりからの進化とか色々知ることができました。

スライドは公開されていますので、個人的に知らなかっこと、気付きなどについて超簡単なメモ。

知らなかったこと

  • SQL中のIN句で利用されるバインド変数のリストが空でも、 IN (NULL) となり、SQLエラーにならない
    • これは地味ながら嬉しいアップデート。
  • 複数カラムをグループ化するための仕組みとしてエンベッダブルクラスが利用できる。
    • 色々使い道がありそうな気がしました。結合した結果を受け取るエンティティクラスを簡潔に定義するのに使えたりしないかなー、とか。Domaだと結合したクエリの結果ごとにエンティティクラスが必要なので、プロジェクトで使ってた時はエンティティクラスのフィールド定義が重複しがちだった記憶があります(2テーブルなら継承でもよいのですが)
  • IntelliJ IDEAでも使える → JetBrains Plugin Repository :: Doma Support
    • だいぶ前の情報ですが、Eclipseでしか使えないという古い情報のままだったので…
  • Domaと直接関係のないJavaの話ですが、 Stream#map(...).collect(toList())Stream#collect(mapping(..., toList())) とも書ける。

実践的な活用方法として得たこと

  • ドメインクラスをうまく活用すると、かなりのことを型検査でき、余計なミスを早期につぶせる
  • Streamを返す検索は、クローズを呼び出し側の責任で行わないとならないので、避けた方が無難そう
  • collect検索を利用し、1件検索、複数検索で同じSQLファイルを使うとよい
  • エンティティのイミュータブル性を確保する
  • 複数データソースを使う場合のレイアウト。やっぱりパッケージレベルで分けた方がメンテナンスしやすいっぽい

感想

  • 中村さんの発表 Domaの開発で大切にしている10のこと - Qiita に共感できるところが多くて、やっぱりDomaは使いやすく、開発者に優しいツールだなと改めて思いました。
  • 当初作る予定だった機能が2010年に完成していながらも、今に至るまで開発を継続していけるのは純粋にすごいと思いました。個人的にはJava8対応したバージョンがかなり早い時期にリリースされたのが印象的だった記憶があります。
  • doma-spring-bootもあるし、JPAにあれこれハマるよりは、Domaに移行するのもちょっと検討したい。
  • DOMAのロゴがN◯SAに見えたのは私だけじゃなかったようでした。

色々と勉強になりました。ありがとうございました。