Scala関西 Summit 2017で瀬良さんと「Reladomo in Scala」という話をしてきました #scala_ks

9月9日に開催されたScala関西 Summit 2017に参加して来ました。私の所属する株式会社FOLIOもブロンズスポンサーとして協賛させていただきました。

セッションでは、ScalikeJDBCSkinny Frameworkでおなじみ瀬良さんと共同で「Reladomo in Scala」という話をしてきました。

www.slideshare.net

今年のカンファレンス参加はひたすらReladomoの話ばかりしている気がします…!今回はReladomoそのものの紹介と共に、ReladomoをScalaから使うためにFOLIOとグッドフロー・テクノロジーズ瀬良さんが共同で開発したラッパーライブラリreladomo-scalaの紹介をしました。詳しくはスライドをご覧ください。

今回のセッションの目玉はなんといってもreladomo-scalaをリアルタイムでGitHubに公開したことでしょうか!

github.com

FOLIOでの業務委託としてグッドフロー・テクノロジーズ瀬良さんに手伝っていただいている成果物をOSS公開するという、非常に珍しい形でのリリースかと思います。

giter8のテンプレートも同時に公開しているので皆さんぜひご活用ください。

github.com

こちらのコマンドで動かしてみてください。

# sbt new folio-sec/reladomo-first-example.g8  

前にもどこかで言ったかもしれないですが、「バイテンポラルデータモデル」という名前とその概念が当たり前のように認識される世界が来るとエンジニアの世界はもう少し幸せになるかもしれないと思っています。金融に限らず履歴や有効期間の概念を扱わなければいけないシステム開発要件は山ほどあるはずなので。

Reladomoのキラーコンテンツであるバイテンポラルデータモデルを理解するにはJJUG CCCのこちらのスライドがおすすめ。

www.slideshare.net

Reladomo本体の基本的な使い方を理解するにはこちらのスライドがおすすめ。

www.slideshare.net

OSSはコミュニティの輪が広がってなんぼなので、皆さんぜひReladomoreladomo-scalaを使って盛り上げていきましょう!

当日の様子はこちらから。

togetter.com

今回Scala関西 Summit初参加でしたが、Scala界隈の初めてお会いする方々といろいろ話すことができて、非常に有意義な時間を過ごせました。運営の皆さん、素晴らしいカンファレンスを開いていただきありがとうございました。本当にお疲れ様でした!!!

おまけ:懇親会2次会で食べたセル牡蠣、お刺身、ヒレ酒がうまかったぞ〜。

JJUGナイトセミナーにて、古くて新しいJava ORMフレームワーク「Reladomo」の紹介をしてきました

ちょっと(かなり!)遅くなりましたが、7月26日のJJUGナイトセミナーで「Reladomo入門」の話をしてきました。 以前JJUG CCC 2017 Springでバイテンポラルデータについてお話ししたのですが、その際に紹介したORMフレームワークがReladomoです。

今回はそのReladomoの入門編で、当日のスライドはこちら。

www.slideshare.net

セッションで紹介した例はこちらのGitHubプロジェクトで公開しています。

github.com

Reladomoはゴールドマン・サックス社が開発し2016年にOSS化したJava ORMフレームワークです。一般に公開されているORMとしては非常に新しい部類に入りますが、実際には同社内では2004年から開発が行われている、枯れた技術になります。

当日は25分という非常に短いセッションだったのですが、前半では駆け足でReladomoの基本的な機能を紹介しました。純粋にORMとしての機能だけをみても、クエリをコード上で型安全に表現でき、高パフォーマンスを期待できる、非常に有用かつ便利なフレームワークです。

  • Reladomoのコード生成
  • Reladomoの検索・挿入・更新・削除処理
  • Reladomoの関連
  • GS Collectionsサポート
  • ユニットテストサポート

また、最後に紹介したバイテンポラルモデルのセクションでは、前回JJUG CCCでは紹介できなかった関連を絡めた例を紹介しました。

  • バイテンポラルモデル

世の中のWebシステムや業務システムにおいて、有効期間や履歴の概念を扱うことは非常に多い中、Reladomoはこれらの概念を自然に扱えるフレームワークとして非常に強力な味方になります。

たとえばPersonPetという1対多の関連を持っているときに、下記のような状態を表現するのは通常のデータモデルでは非常に複雑になりますが、バイテンポラルデータモデルを使うと正しく容易に表現でき、検索することも容易です。

ある日時から別の状態へと遷移する履歴の表現

  • 田中さんは1月1日時点ではペットを飼っていませんでした
  • 田中さんは3月1日から犬のチビを飼い始めました
  • 田中さんはさらに5月1日から猫のサクラを飼い始めました

ある日時における状態の検索

  • 2月1日に田中さんが飼っていたペットの検索(なし)
  • 3月2日に田中さんが飼っていたペットの検索(チビ)
  • 5月2日に田中さんが飼っていたペットの検索(チビ、サクラ)

上記のような例を、スライドではp59 - p70、GitHubのコードではbi-temporalというモジュール内で例示しているので、実際のコードやデータを眺めてバイテンポラルモデルとReladomoの理解を深めていただけると幸いです。

今回のスライドとコードを参考にしてもらうと、Reladomo本家のKata(武道の型もしくは形の意味です)がわりとスムーズにできると思うので、ぜひお試しください!

github.com

そして、このReladomoをScalaで使うお話しをするのが、2017年9月9日に来たるScala関西 Summitでのセッション「Reladomo in Scala」になります。本セッションは、ScalikeJDBCSkinny Framework でおなじみ瀬良さんとの共同セッションになります。興味のある方はぜひお越しの上セッションをご覧いただければと思います!!

f:id:itohiro73:20170903180447p:plain

JJUGナイトセミナーの当日の様子はこちらのTogetterからどうぞ。

togetter.com

JJUG CCC 2017 Springで論理削除フラグをどうにかするための話をしてきました 【FOLIOスポンサー】

JJUG CCC 2017 Springで、「データ履歴管理のためのテンポラルデータモデルとReladomoの紹介」という話をしてきました。

今回の登壇は、株式会社FOLIOのスポンサーセッションです!FOLIOについてはこちらの入社エントリー記事もご参考ください。Toggetterは下のリンクから。

togetter.com

世の中のみなさんが「論理削除フラグ」を使いたくなるモチベーションとしては、実は「削除」ではなく別のビジネスロジックを実装したいだけであることがほとんどだと思います。

たとえば論理削除フラグという名の死亡フラグ - @ledsun blogというエントリを参考にさせていただくと、下記のような要件の例があります。

・社員が退職(・転属)する 

・(売掛金の回収を諦めて)売上を打ち消す

・「お知らせメッセージ」を公開日がくるまで非表示にする

・既読メッセージを表示しない

・保存期間が過ぎたアンケート結果をオペレーターが見れなくする

これらの要件は、ほとんどがある状態の「有効時間」を適切に扱いたいだけであって、「削除」をしたいわけではないでしょう。スライドでは「履歴」という観点で例を説明していますが、「有効時間データモデル」は時間の経過とともに変化する状態の概念を適切に扱えるデータモデルなので、上記のような要件をフラグに頼らず扱うことができます。

今回のセッションでは「スナップショットデータモデル」、「トランザクション時間データモデル」、「有効時間データモデル」、「バイテンポラルデータモデル」という4種類のモデルを紹介しました。下記の方がおっしゃるように、これらの名前と概念を広めるだけでも世の中が少し幸せになるのではないかと考えています。ぜひスライドをご覧になってみてください。

テンポラルデータモデルの実際の実装としてはJavaを使う方はぜひともReladomoを検討してみてほしいですね。とても良いフレームワークです。

github.com

JUnitでテストをパスしていきながら使用法を学ぶKataも提供されています。

github.com

現存するドキュメントではGuided Tour Of Reladomoが一番わかりやすいですが、英語です。今回、Java技術メモ三銃士のうちお二方が聴講しておられるのを把握したので、きっとそのうち素敵な日本語のメモが出てくるに違いないと信じております。

皆さんぜひ活用して周りに広めてみてください!

合わせて読みたい

かわしまさんが下記のスライドで紹介しているイミュータブルデータモデルの設計法と上記テンポラルデータモデルの設計法を合わせて適用すると、非常に堅牢かつ柔軟な設計ができると思います。ぜひご参照ください!!

株式会社FOLIOに入社しました & JJUG CCCで登壇します #jjug_ccc

itohiro73です。初ブログで入社エントリーです!

昨日2017年5月17日付で株式会社FOLIOにテックリードとして入社しました。FOLIOは「資産運用をバリアフリーに」の理念のもと、日本で約10年ぶりとなるネット証券をゼロからつくっていこうという、非常にエキサイティングな会社です。

証券バックエンドシステムの開発をリードしていく立場で働くことになります。

私はもともと約150年もの歴史をもつ大規模な外資系証券会社でエンジニアをしてきたので、UXを大切にするマインドを持ってデザイナー・エンジニアが主体となって証券会社をつくっていく、というのは非常に対照的で、ワクワクしております。

かなりダイナミックな環境でかつ急成長中なので、エンジニアの組織づくり、プロジェクトマネジメント、要件定義、設計、実装、運用と幅広く関わっていく予定です。

フロントエンドはReact + Node.js (BFF)、バックエンドはScala/Finatra/Finagleのマイクロサービス構成でつくっています。

モバイルアプリも本リリースに向けての開発に加わる仲間を絶賛募集中!iOSの開発はiOS/Swfit界の神エンジニア、Wantedly技術顧問の杉上さんに手伝ってもらっており、爆速で開発中!Androidサイドも先日モバイルアプリ開発エキスパート養成読本を出版したKotlin大好きふじたくと一緒に開発を進めていくことになります。時代の先端を行くモバイルエンジニアたちと一緒に次世代証券のアプリを創業メンバーとしてつくれるのは今だけ!

(ところでこれを書いている途中にKotlinがAndroid開発言語として公式サポートされることが発表されましたね。めでたい!)

各ポジションで絶賛エンジニア募集中ですので興味を持たれた方はぜひWantedlyからの応募をお待ちしております。

で、誰?

伊藤博志と申します。前職では外資系証券会社のテクノロジー部のエンジニアとして新卒入社より12年にわたってさまざまな仕事を経験させてもらいました。金融機関という会社の特性上、Web系のエンジニアさんと比べると外に見えるアウトプットは少なめです。なので、本ブログエントリーが初ブログになりますw とはいえ、前の会社は金融の会社としては世界的にみてもトップレベルでエンジニアリングに注力している会社で、最近は技術コミュニティに進出する機会も多く、とても素晴らしい会社でした。仕事としては12年もいるといろいろやってきたんですが、ブログで書ける内容としてはpublicに公表されている下記くらいでしょうか。

前の会社では、ほぼすべてのシステムを自社のエンジニアで内製しているという、金融機関としては非常に珍しい施策をとっており、エンジニアとして非常に誇りの持てる職場でした。ビジネスに直接関わるシステムのみならず、上記のように純粋に技術的なライブラリやフレームワークも大量につくっており、今後もいろいろオープンに出してきてくれるといいな、と期待しております。エンジニアのキャリアとしても、マネジメントを突き詰めるキャリアとエンジニアリングを突き詰めるキャリアが並行して存在しいる素晴らしい会社で、今後、自分が組織設計をする際の羅針盤となる非常におおきな存在です。

技術コミュニティでの出会いとJJUG CCC登壇

上に書いたようにここ2、3年くらいJavaのコミュニティ界隈にぽつぽつと出没しており。JavaOneで登壇したり、関ジャバでEclipse Collectionsの話をしたりJJUG CCCでコード品質の話をしたりしてきました。

今回もJJUG CCC 2017 Spring (5月20日)に「データ履歴管理のためのテンポラルデータモデルとReladomoの紹介」という題名で、#ccc_g4の枠でセッション登壇予定です!

技術コミュニティに出没する大きな理由は2つあって、もちろん上記のような技術知見の共有や情報収集が一つ目。二つ目はいろいろなエンジニアさんたちとの出会いですね。で、Javaコミュニティでいろいろお世話になったひとりで、Java女子部部長として活躍されていて、お仕事ではScalaを書かれていて英語もできるよこなさんは注目エンジニアのひとりでした。そんなよこなさんとScalaMatsuriでばったりお会いしたのですが、なんとこのタイミングで東京に帰ってきている(もともと京都にいた)とのことだったので、FOLIOにお誘いしたところ、非常に興味を持ってもらいこの度めでたくジョイン。私より早く入社しましたw

こういう出会いもいろいろあると思うので、今回のJJUG CCCも非常に楽しみにしております。JJUGにはScala書ける人もたくさんいますしね!

Reladomoとは

JJUG CCCで紹介予定のReladomoですが、ほとんどの方はご存じないと思います。本ブログでも少しづつご紹介していこうと思いますが、2016年の秋にGoldman Sachs社がOSSとして公開した、JavaのORMフレームワークです。

金融機関でクリティカルとなる、データの履歴管理に長けたORMフレームワークで、金融機関以外でも非常に有用だと思うので、ぜひJava界隈・JVM言語界隈の皆さんに知っていただきたいです。

JJUG CCCのセッションでは、まずはバイテンポラルデータモデルという履歴を扱うデータモデルのコンセプトを解説し、具体的な実装例としてReladomoでの履歴の扱い方等を紹介する予定です。

ReladomoのドキュメントとしてはGuided Tour Of Reladomoが一番わかりやすいと思います。とりあえず手を動かしてみたいという方は、チュートリアルであるReladomo KataGitHubで公開されているので、これを解いてみるのがてっとり早いです。

この度ジョインしたFOLIOでもしっかり使っていきたいので、今後Scalaから使用するための知見等も共有していきたいと思っています。

どうぞよろしくお願いいたします!