TechとPoemeの間

Qiita に書かないエンジニア業の話

Scala関西Summit 2017 に行ってきた

気がついたら全然写真撮ってなかったんだけど,Scala関西Summit 2017 に行ってきた.
東京のフツーの Scala エンジニアだったら ScalaMatsuri があるからわざわざ関西まで行くこともないんじゃない?というのは自分も思ってるのだけど,
今年の2月にあった ScalaMatsuri の頃,僕は Java エンジニアだったし,今回の Scala関西Summit のタイムテーブルを見たら自分の中でホットな話題も多かったので,思い切って行ってみた.結構行ってよかったと思っている.

印象に残ったセッションについて書いておく.

Non-Functional Programming in Scala (@takezoen さん)

www.slideshare.net

竹添さんによる,「Functional じゃない感じで敷居を低くする Scala の使い方」についてのセッション.
Scala は手続き的な書き方もファンクショナルな書き方もできるがゆえに,チームが成熟するにつれて,プロダクトのコードはだんだん複雑になっていって新規メンバーにとってハードルの高いものになっちゃうよね,という話は本当にそうだなぁ,という感想.
ただ, var や while を許す,というのは個人的には関数型なのかどうかよりも前にコーディングが良くないんじゃないかなと思っていて,そういうのはちゃんとコードレビューで潰すべきなんじゃないかなぁ,という気も.
もちろん,そこも含めてチームの成熟度とかだと思いますけどね.

実践 ScalaでDDD (@crossroad0201 さん)

speakerdeck.com

Scala で DDD なプロダクトを実装するには?という話.
case class の copy メソッドをラップしてエンティティの属性を変更する操作に名前をつけたり,
アプリケーションサービスの処理で EitherTryOption を返す処理をメソッド内で def で定義して for { ... } yield { ... } で並べて書くことでユースケース仕様書ぽく書いたり,
エンティティが特定の条件下でのみ特定の振る舞いをすることを Role Object という implicit class で表現したりとか,
Scala の機能を DDD を実践するためにどう使うかというのがイチイチ絶妙でかっこよかった.いろいろ参考にして自分も実践してみたい.

Reladomo in Scala (@itohiro73 さん / @seratch さん)

www.slideshare.net

ゴールドマン・サックスが昨年 OSS 公開した Reladomo という Java の O/R Mapper を Scala で利用するためのライブラリを開発したよ,という話.
MicrosoftVSCode を,トークセッションの最中に github で public に公開した時のように,トークの最後に瀬良さんが push することで公開となりました.

github.com

自分的には JJUG CCC などでの Reladomo の紹介を見て良いなぁ使いたいなぁと思っていて,仕事でちょうどウェブ UI アプリケーションを新規に作るので O/R どうしようと考えていたところなので,積極的に検討したいなと思った.
ただ,現状の reladomo-scala の機能ではエンティティを case class で生成して target 下の src_managed に吐き出しているので,独自にドメインロジックを表す API を書いたりという拡張ができないようで,ここは implicit class とかで生やすっきゃないのかなあ?とか色々考えている.

スライドの中や,公開されたサンプルコードの中で NewPerson というクラスが出てきて,これなんだろうなと思ったけど,DB 上の Auto Increment な id を付与する前の id を持たないインスタンス用のクラスだよ,というのを懇親会で瀬良さんに解説していただいた.セッションでは端折られている説明だったので助かった.
瀬良さんが開発している Skinny-ORM ではレコードの insert をする際に case class を Dao 的な API に渡すという方法がなくて, createWithAttributes('attribute -> value, 'attribute -> value, ...) という書き方がメインなんだけど,これも同様の理由で id のない状態のエンティティを扱うときに case class を新規に作るとしたら id = null とするのか?というのに対する答えなんだそうで.
Skinny-ORM だとエンティティ定義は case class を直接書かなきゃいけないけど, Reladomo の場合は XML ファイルを書いてコンパイルに通すと case class が生成されるという形なので, Person クラスの他に NewPerson を生成することが出来る,という話でした.

Property Based Testing でドメインロジックをテストする (@gakuzzzz さん)

Property Based Testing でドメインロジックをテストする

Property Based Tesは,なんとなくウェブ上での解説記事を読んで,その効能があんまりイメージできなくて真剣に考えたことが無かったけど,上手く使うと良さそうだなと思えたセッションでした.
最後に質疑応答で伺ってみたけれど, whenever(...) で生成されたフィクスチャをテスト実行のタイミングで絞ろうとすると whenever 条件の中に実装と同じことを書いてしまってトートロジーなテストになっちゃわないかな,というのは思ったので,上手く使い方を考えたいなと思った.その中で,がくぞさんのおっしゃっていた「普遍的な条件を見つけることにこだわらない (特定条件にしぼってテストする)」「視点を変えて満たすべき性質を見つけ出す」というのは非常に参考になった.

懇親会

#mm_beer #scala_ks #kirin 懇親会ー!

ぼっちでの参加だったのだけど勇気を持って懇親会に参加したら,色んな人とお話できて非常に有意義だった.
すごいプライベートな話だけど,大学の同級生がいたのはびっくりした.いかんせん文系しかない大学で,特に自分たちのいた商学部は,会計士になるか,商社とか金融機関でキャリアを積む人が多いので.
自分の印象に残ったセッションのスピーカーの方とちょっと踏み込んだところまで話せたりするし,こういう機会は尻込んじゃいけないな,と改めて思った次第.

あと,会場のさくらインターネット株式会社様のオフィスがめちゃめちゃオシャレだった!びっくり.

翌日: 大阪食い倒れ

翌日は新幹線までちょっと時間があり,せっかく大阪に来たので,たこ焼きと串かつ.大阪駅からすぐそこだし,ちょっと混んでいても回転が早い!! もちろん美味しい!おすすめです.

retty.me

retty.me