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
「Chatwork」Android版アプリを 支える単体テストの現在
okuzawats
0
180
Recoilを剥がしている話
kirik
5
6.6k
今年のアップデートで振り返るCDKセキュリティのシフトレフト/2024-cdk-security-shift-left
tomoki10
0
200
PHPで学ぶプログラミングの教訓 / Lessons in Programming Learned through PHP
nrslib
1
150
快速入門可觀測性
blueswen
0
340
StarlingMonkeyを触ってみた話 - 2024冬
syumai
3
270
KubeCon + CloudNativeCon NA 2024 Overviewat Kubernetes Meetup Tokyo #68 / amsy810_k8sjp68
masayaaoyama
0
250
複雑な仕様に立ち向かうアーキテクチャ
myohei
0
170
Webエンジニア主体のモバイルチームの 生産性を高く保つためにやったこと
igreenwood
0
330
RWC 2024 DICOM & ISO/IEC 2022
m_seki
0
210
これでLambdaが不要に?!Step FunctionsのJSONata対応について
iwatatomoya
2
3.6k
rails stats で紐解く ANDPAD のイマを支える技術たち
andpad
1
290
Featured
See All Featured
Designing Dashboards & Data Visualisations in Web Apps
destraynor
229
52k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
A better future with KSS
kneath
238
17k
Bootstrapping a Software Product
garrettdimon
PRO
305
110k
[RailsConf 2023] Rails as a piece of cake
palkan
53
5k
Documentation Writing (for coders)
carmenintech
66
4.5k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
28
900
Writing Fast Ruby
sferik
628
61k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
232
17k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
Practical Orchestrator
shlominoach
186
10k
Why Our Code Smells
bkeepers
PRO
335
57k
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
ご静聴ありがとうございました。