Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
How Unext took in Eclipse Collections in FW
Search
jflute
May 26, 2018
Programming
0
670
How Unext took in Eclipse Collections in FW
for JJUG CCC 2018.
Eclipse Collections, LastaFlute, Gson, Hibernate Validator
jflute
May 26, 2018
Tweet
Share
More Decks by jflute
See All by jflute
How to fork Seasar (LastaFlute)
jflute
0
150
DBFlute bridges between DB and App
jflute
1
2.8k
LastaFlute First Impact
jflute
7
7.1k
Other Decks in Programming
See All in Programming
数十万行のプロジェクトを Scala 2から3に完全移行した
xuwei_k
0
280
PHPで作るWebSocketサーバー ~リアクティブなアプリケーションを知るために~ / WebSocket Server in PHP - To know reactive applications
seike460
PRO
2
510
range over funcの使い道と非同期N+1リゾルバーの夢 / about a range over func
mackee
0
110
From Translations to Multi Dimension Entities
alexanderschranz
2
130
暇に任せてProxmoxコンソール 作ってみました
karugamo
2
720
rails stats で紐解く ANDPAD のイマを支える技術たち
andpad
1
290
創造的活動から切り拓く新たなキャリア 好きから始めてみる夜勤オペレーターからSREへの転身
yjszk
1
130
rails statsで大解剖 🔍 “B/43流” のRailsの育て方を歴史とともに振り返ります
shoheimitani
2
940
採用事例の少ないSvelteを選んだ理由と それを正解にするためにやっていること
oekazuma
2
1k
Go の GC の不得意な部分を克服したい
taiyow
3
800
PHPUnitしか使ってこなかった 一般PHPerがPestに乗り換えた実録
mashirou1234
0
230
fs2-io を試してたらバグを見つけて直した話
chencmd
0
240
Featured
See All Featured
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.1k
A better future with KSS
kneath
238
17k
Build The Right Thing And Hit Your Dates
maggiecrowley
33
2.4k
Practical Orchestrator
shlominoach
186
10k
The Cost Of JavaScript in 2023
addyosmani
45
7k
Music & Morning Musume
bryan
46
6.2k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
28
900
Measuring & Analyzing Core Web Vitals
bluesmoon
4
170
No one is an island. Learnings from fostering a developers community.
thoeni
19
3k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
32
2.7k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.2k
Code Reviewing Like a Champion
maltzj
520
39k
Transcript
Eclipse Collectionsを 現場に浸透させるための フレームワーク対応 U-NEXT 技術顧問 久保 雅彦 ( jflute
) 2018.5.26 JJUG CCC 2018 Spring
まずは自己紹介 久保 雅彦 ( jflute ) OSS開発 LastaFlute : WEB
Framework DBFlute : DB管理支援ツール & O/R Mapper U-NEXTでは、サーバーサイド技術顧問として 現場フォローを行っている Twitter : @jflute Blog : http://d.hatena.ne.jp/jflute/
Eclipse Collectionsのちょこっと紹介
Eclipse Collectionsのちょこっと紹介 さっそくライヴコーディング jflute が Eclipse で Eclipse Collections 書くよ、バババッ
Eclipse Collectionsのちょこっと紹介 Eclipse Collections自体の詳しい話は、 前回JJUGで発表された、 U-NEXT ながほりさんのスライドを! http://slides.com/nashcft/jjug_ccc_2017_fall/#/
Eclipse Collectionsのちょこっと紹介 ずばりジレンマ 「Java組み込みじゃないので、 フレームワークが対応してない」
Eclipse Collectionsのちょこっと紹介 java.util.List と ImmutableList の往復修行
Eclipse Collectionsのちょこっと紹介 Eclipse Collections便利だけれど... 最後は結局 java.util.List 最初は結局 java.util.List
Gson で ImmutableList 対応
Gsonで ImmutableList 対応 JSONクラスのプロパティの型でも ImmutableList 使いたいよぉ from 現場
Gsonで ImmutableList 対応 (> <
Gsonで ImmutableList 対応 まあ、確かに..... Now Live Coding
Gsonで ImmutableList 対応 さあ、Gsonさんを拡張するぞー
Gsonで ImmutableList 対応 LastaFlute 経由で、できるようになった! Now Live Coding
Gsonで ImmutableList 対応 独自のコレクション型を設定できるように Now Live Coding
Gsonで ImmutableList 対応 実は、思ったより大変だったぞぅ(><
Gsonで ImmutableList 対応 さあ、何が大変だったか? どう実現しているか? Let's ソースコードリーディング !
Gsonで ImmutableList 対応 GsonBuilder の registerTypeAdapterFactory() に到着 Now Reading Source
Code
Gsonで ImmutableList 対応 TypeAdapterFactory を継承したクラスを作って登録 Now Reading Source Code
Gsonで ImmutableList 対応 LaYourCollectionTypeAdapterFactory… La は、LastaFlute の La だよね? でも、パッケージが
com.google.gson.internal.bind だぞぅ。 なぜなぜ? Now Reading Source Code
Gsonで ImmutableList 対応 TypeAdapterRuntimeTypeWrapper が package スコープでした(>< 呼べない.... けど、中で利用したいクラスだし、 重要そうな処理なので、あまり自作したくないので呼びたい。
Now Reading Source Code
Gsonで ImmutableList 対応 そもそも組み込みの CollectionTypeAdapterFactory を継承して... とか考えたけど、final 付いてるし private も多いので
参考するだけ。 それなりに Gson 内部実装を まんま自分でも実装しないといけなかった ! Now Reading Source Code
Gsonで ImmutableList 対応 でもまあ、できたはできた!(^^ Now Live Coding
Hibernate Validator で ImmutableList 対応
Hibernate Validator が ImmutableList で効かないときがあるよぉ from 現場 Hibernate Validatorで ImmutableList
対応
(> < Hibernate Validatorで ImmutableList 対応
Hibernate Validatorで ImmutableList 対応 実はわりとそのまま使えるのもある List 関係ないアノテーションなど
NotEmpty, Length, Size などだと... Hibernate Validatorで ImmutableList 対応
でも、LastaFlute 提供の Required は効く...おや!?なぜ? Hibernate Validatorで ImmutableList 対応
おおぉ、instanceof 先生...んっ? ImmutableList も Collection のインスタンス? Hibernate Validatorで ImmutableList 対応
Now Reading Source Code
いま一度継承関係をおさらい ImmutableList (implements Iterable) ┗ AbstractImmutableList (implements List) ┗ ImmutableArrayList
Hibernate Validatorで ImmutableList 対応 Now Reading Source Code
ImmutableList のインスタンスは java.util.List である! なので、instanceof で判定してるものは動く Hibernate Validatorで ImmutableList 対応
ただ、組み込みのアノテーションは、 (恐らく) 大抵宣言されている型で判断してるっぽいので... とりあえず現場から要求のあった Size を対応 (Required があったので、NotEmpty はあまり必要とされず) Hibernate
Validatorで ImmutableList 対応
LastaFluteで、このようにすると対応できる1 Hibernate Validatorで ImmutableList 対応 Now Reading Source Code
LastaFluteで、このようにすると対応できる2 Hibernate Validatorで ImmutableList 対応 Now Reading Source Code
LastaFluteで、このようにすると対応できる3 Hibernate Validatorで ImmutableList 対応 Now Reading Source Code
つまり、Hibernate Validator の... ImmutableListのSize対応のConstraintValidatorを作って、 DefaultConstraintMappingで定義して、そしてそれを、 HibernateValidatorConfiguration@addMapping() で、登録する。 Hibernate Validatorで ImmutableList
対応
まったく同じ要領で、 NotEmpty や Length も対応できるはず (必要になってないので、まだやってないけど... ) Hibernate Validatorで ImmutableList
対応
めでたしめで... Hibernate Validatorで ImmutableList 対応
まだ冒険あります。 Hibernate Validator を 5.x から 6.x にアップグレードしたら、 ImmutableList の要素のクラスの
バリデーションのエラーメッセージが出なくなった。 (若干記憶が曖昧ですが、確かそのような現象だったような) Hibernate Validatorで ImmutableList 対応
Hibernate Validator から戻ってくるパス文字列が、 5.x: sea[2].mystic 6.x: sea[].mystic … 消えてる! というか、もともとなんで動いてた?
Hibernate Validatorで ImmutableList 対応
深く追えてないのですが、恐らく... ImmutableList (implements Iterable) ┗ AbstractImmutableList (implements List) ┗ ImmutableArrayList
インスタンスの型で、たまたま「動いちゃってた」って 感じなのかもしれない。そこに頼らないほうがいいかも!? Hibernate Validatorで ImmutableList 対応
まあ、とにかく LastaFlute でこのようにして対応1 [App]ActionAdjustmentProvider : Hibernate Validatorで ImmutableList 対応 Now
Reading Source Code
まあ、とにかく LastaFlute でこのようにして対応2 [App]ActionAdjustmentProvider : Hibernate Validatorで ImmutableList 対応 Now
Reading Source Code
つまり、Hibernate Validator の... ImmutableList専用の ValueExtractor クラスを作成して HibernateValidatorConfiguration@addValueExtractor()で、登録する。 Hibernate Validatorで ImmutableList
対応
ふぅ Hibernate Validatorで ImmutableList 対応
Formの受け取り で ImmutableList 対応
普通のHTMLリクエスト受け取る FormのプロパティでImmu… わかったわかった、もうわかった from 現場 Form の受け取りで ImmutableList 対応 from
jflute
セッション残り時間があったら、 コードを読みます! Form の受け取りで ImmutableList 対応
これは完全に LastaFlute だけの話で、 該当箇所は ActionFormMapper クラス。 [App]ActionAdjustmentProvider で、 ImmutableList 情報を登録します。
(要領は今までのとほぼ同じ) Form の受け取りで ImmutableList 対応
とにかく感想は... ImmutableList を使う方はImmutableで嬉しいけど、 ImmutableList に値をマッピングするフレームワークの方は、 「追加でっきーーん」 ...ってまあ、しょうがないしょうがない(^^) とりあえず対応できたのでよし! Form の受け取りで
ImmutableList 対応
あれ、DBFluteは?
(> < DBFluteで ImmutableList 対応
難易度桁違い...断念いや冒険半ば ということで、DB側では手動変換はまだ発生 ※ただ、手動変換も少し楽になる施策も DBFluteで ImmutableList 対応
(DBFlute関係ないけど) static import 補完を前提とした toImmutable() これは現場の方が自ら作成して促進 (Good Job!) ※案外、これでまあまあ楽に。検索したらすぐ toImmutable()
! DBFluteで ImmutableList 対応
stream()と混ざるのどうする?
あーあ、まじめな話になっちゃった Stream() と混ざるのどうする?
ジレンマ どっちでもいいようにする? 混ざると後から読む人つらくない? そもそも存在を知らないで書いちゃう人いるかも? Stream() と混ざるのどうする?
ひとまず、やはり Eclipse Collections に寄せることに 日々成長するサービスなので、積み上げ式の開発。 他の人のコードを読んで実装が日常茶飯事。 そもそも Java8 経験者も少ないのでこれから学べば良い。 Stream()
と混ざるのどうする?
それならそれで、割り切ってちゃんと促進しよう。 投げっぱなしはダメ 「それができないのなら、きっと誰も使わなくなる」 Stream() と混ざるのどうする?
stream()を自動検知するチェックプログラム java.util.Listのプロパティ検出するとUnitTest落ちる ...List.stream() を検出するとUnitTest落ちる (UTFlute の PoliceStory を活用) ※ただ、ちょっと検出タイミングが遅いのが難点... Stream()
と混ざるのどうする?
成長真っ只中、五月雨に人が増える開発現場だと... 「えっ、Eclipse Collections を使うって 知らずに stream() で書いちゃった」 「そもそも、Eclipse Collections 知らない」
Stream() と混ざるのどうする?
入社時のオリエンテーションで アーキテクチャ講義 (後述) ☆ なんだかんだこれが一番 Stream() と混ざるのどうする?
習得するための研修制度
サーバーサイドチームに配属されたら、 オリエンテーションと約二週間の研修! 習得するための研修制度
オリエンテーションでは、 現場のアーキテクチャやそのコンセプト、 開発の歴史などを、1on1でしっかり伝える。 (基本的に、jfluteが講師やっています) 習得するための研修制度
約2週間 DFluteハンズオン をやりつつ、 その中で Eclipse Collections にも慣れてもらう。 ちなみに AssertJ も同様。
(基本的に、jfluteが猛烈レビューやっています) 習得するための研修制度
「中途やパートナーでも、いきなりチケットを振るのではなく、 じっくり研修されて配属されるので、受け入れる方もすごく楽」 (現場の方の声、頂きました!) 習得するための研修制度
その結果
現場のコードは、いたるところに Eclipse Collections !!! その結果
U-NEXT のオープンソース貢献
「オープンソースは使いながら鍛えていく」 という思想を持つ素敵な方々ばかり。 ( 現場の積極的なフィードバックでフレームワークも成長!) U-NEXT のオープンソース貢献
社内で作った汎用クラスはどんどん オープンソースにコントリビュート! 「他でも使えるんじゃない?」が合言葉 U-NEXT のオープンソース貢献
U-NEXT のオープンソース貢献 KVSFlute, SolrFlute, Lasta RemoteApi などに加え、 一クラス単位でも汎用的な使えそうなものは、 Exampleコードとして寄与 (ありがとうございます!)
U-NEXTさんからSolrFlute,KVSFluteコントリビュート頂きました U-NEXTさんから Lasta RemoteApi をコントリビュート頂きました
ところで.......
ってご存知ですか?
という訳でちょっとだけ宣伝
定額制動画配信サービス 実は動画配信における 10年の実績 実は日本の定額制動画配信市場 において シェア3位 (金額ベース・2017年・GEM Partners株式会社調べ) 配信動画本数 120,000本
以上
U-NEXT では サーバサイドエンジニアを 募集しています。 今注目されている動画配信市場で 一緒にサービスを作ってみませんか? 採用ページ : https://inside.unext.jp/ エンジニア募集中
開発環境 エンジニアが働きやすい環境が整っています。 定期的に開催される勉強会 フロントやビジネスなど別チームを 超えた勉強会を開催、自由に参加しています。
定期的に開催される勉強会 例えば.... DBFlute, LastaFlute (by jflute) 暗号化の仕組み, JWT Docker, Kurbernetes
GraphQL React, Redux 映像著作権 働きやすい開発環境 例えば.... フレックスタイム制 希望のPC貸与 (例:MacBookPro メモリ16GB) 快適なイス 大きなモニターとセカンドモニター利用可 ガジェット、ソフトウェア、 書籍、セミナー等 費用全額会社補助 スーツ着用不要 フリースナック、フリードリンクあり エンジニア同士の360度評価 (年2回)
突貫でスライドを作ってくれた、 U-NEXT なかのさん、ありがとう! (前日深夜、見た目の調整してくれた、いのうえさん、ありがとう)
本日、利用したJavaプロジェクトは、 Githubで公開されています。 https://github.com/lastaflute/lastaflute-test-fortress
ご静聴ありがとうございました。