SlideShare ist ein Scribd-Unternehmen logo
1 von 107
Java8移行から始めた
技術的負債との戦い
JJUG CCC 2015 Fall
2015.11.28
清 大輔 @ 株式会社ビズリーチ
発表者
 清 大輔
 株式会社ビズリーチ 新卒2年目 エンジニア
 博士課程中退な人
• カオス・フラクタル
• 脳波解析
• やっぱりプログラム書いてたほうが楽しいのでエン
ジニアへ
 趣味や研究でプログラム書いてました
• 基本 C++ とか
2
ビズリーチについて
 Mission
インターネットの力で、
世の中の選択肢と可能性を広げていく
3
BizReach
 ビジネスパーソン、国内外の優良・成長企業、各業界
に精通した一流ヘッドハンターの三者を最適かつ効率
的にマッチングする管理職・グローバル人材に特化し
た会員制転職サイト
4
BizReach woman
 女性が、理想のキャリアを追求・確立するために、多
くの可能性と選択肢から最もふさわしいキャリアを見
つけるための転職サイト
5
careertrek
 日本で初めて全職種に対応した求人レコメンド型20代
向け転職サイトで、キャリア診断結果をもとに求職者
と企業をマッチングするだけでなく、使えば使うほど
マッチング精度が高くなるレコメンド機能を搭載
6
スタンバイ
 インターネット上にある国内のさまざまな求人情報約
300万件を一カ所に集約し、いつでもどこでも、簡単に、
効率的に仕事を探せるサービス
7
RegionUP
 アジアの優秀なビジネスパーソンと、ハイクラス向け
を中心とした求人情報を提供するアジアの企業・ヘッ
ドハンターをつなぐ「アジア版ビズリーチ」
8
zuknow
 スマートフォンとソーシャルの力を使って学習を効率
的で楽しいものに変える学習アプリ
9
ニクリーチ
 お腹を空かせた学生のための肉食就活サイト
 自分が興味のある企業の人と、無料でおニクが食べら
れ、様々なキャリアをもった人とじっくり話せる
10
11
前置きはここまでにして
移行対象: BizReach
 システムの基盤を作った人達が他の新規事業に
行ったりしてしまってチームにいない
 pom などのメンテをする人が特に決まっていな
いような状況
• フレームワーク等のバージョンのアップデートが遅
れていた
• 技術的負債が溜まっていた
12
ビズリーチシステム(Java8移行前)
 使用している技術
• 言語: Java6
• MVC: Struts2
• DI: Spring3
• View: JSP, Velocity … JSP → Velocityへ(混在中)
• ORM: DBFlute 1.0.x
• 他: DWR, AWS, etc
 開発環境: Eclipse 3.7 Indigo
13
移行のきっかけ
 Java8
→ Stream, ラムダ式, Optional使いたい!!
14
List<String> codes = new ArrayList<>();
for (Bean bean : list) {
codes.add(bean.getCode());
}
List<String> codes = list.stream().map(bean-> {
return bean.getCode();
}).collect(Collectors.toList());
for Java7
for Java8
移行のきっかけ
 Java8
→ 使っているライブラリーもJava8の方が書きやすい!!
15
MemberCB cb = new MemberCB();
cb.query().setMemberId(1L);
Member member = candidateBhv.selectEntity(cb);
String memberStatusCd = member == null ? “” :
member.getMemberStatusCd();
String memberStatusCd = candidateBhv.selectEntity(cb -> {
cb.query().setMemberId(1L);
}).map(Member::getMemberStatusCd).orElse(“”);
DBFlute for Java7
for Java8
移行のきっかけ
16
 Eclipse Luna (Release Candidate)
• Eclipse Kepler でもプラグインで対応できたがそちら
は微妙に不安定
• Luna だとかなりましになった
→ そろそろJava8で書けそう?
移行のきっかけ
17
 Eclipse Luna (Release Candidate)
• Eclipse Kepler でもプラグインで対応できたがそちら
は微妙に不安定
• Luna だとかなりましになった
→ そろそろJava8で書けそう?
というのもありましたが
移行のきっかけ
18
A「Java7 のサポート切れるよね〜」
B「そうですね〜」
A「Java8 に上げないの?」
B「(あれ?そもそもうちまだ Java6 じゃん)
上げます!!」
2015年4月下旬
移行開始
19
事件1.
ラムダ書くと
そもそも開発環境で
起動しない
20
事件1. そもそも起動しない
事象
 ラムダを書いた瞬間から、Eclipse上でアプリが
起動してくれない
21
事件1. そもそも起動しない
事象
 ラムダを書いた瞬間から、Eclipse上でアプリが
起動してくれない
22
Java8 にする意味 …
事件1. そもそも起動しない
背景
 起動には Eclipse の Run Jetty Run (RJR) プラグイ
ンを利用していた
 RJR プラグインは2013年に開発ストップ
 最新でJetty 8で起動
23
事件1. そもそも起動しない
原因
 実は Jetty9.2.x で Java8 に対応している
= それ以前のバージョンだと未対応
24
事件1. そもそも起動しない
原因
 実は Jetty9.2.x で Java8 に対応している
= それ以前のバージョンだと未対応
問題
 RJR プラグインには Jetty 8 までしかない
25
事件1. そもそも起動しない
対応
 急遽RJRプラグインをforkして最新のJettyで起動
できるようにしてメンバーに配布
26
事件1. そもそも起動しない
対応
 急遽RJRプラグインをforkして最新のJettyで起動
できるようにしてメンバーに配布
27
起動した!!
(まだスタート地点)
事件1. そもそも起動しない
教訓
 開発の止まっているものは使わない
• 止まっているのは理由があることが多い
 Eclipseプラグインに頼りすぎない
• Eclipseプラグインを作るのは案外辛い
 組み込みAPサーバー化すべき
• プラグインからの脱却
• 開発/本番一致(The Twelve-Factor App)
28
29
さて、デプロイして
動作確認しよう…
事件2.
検証環境だとラムダで
死ぬ
30
事件2. 検証環境だとラムダで死ぬ
事象
 検証環境でデプロイが失敗した!?
→ アプリが立ち上がってない…
31
事件2. 検証環境だとラムダで死ぬ
背景
 本番にリリースする前に検証用の環境にデプロ
イして動作確認を行っている
 ローカルだと Jetty を利用しているが検証及び
本番の環境では Tomcat 8 を利用していた
32
事件2. 検証環境だとラムダで死ぬ
原因
 古い ASM(3.x)ライブラリが足を引っ張って
いるようだ
• Java8 対応は ASM 5.x
• バイトコード周り?(自分は詳しくない)
• Spring のバージョンを 3.2.9以上にあげるしかない
• 公式ブログのアナウンスより
33
事件2. 検証環境だとラムダで死ぬ
対応
 Spring のバージョンを 3.2系にあげる
• Spring 4 は諸事情により見送り
• 一気にいろいろやるのは怖い
34
事件2. 検証環境だとラムダで死ぬ
対応
 Spring のバージョンを 3.2系にあげる
• Spring 4 は諸事情により見送り
• 一気にいろいろやるのは怖い
35
検証でもでラムダが
動いた!!
事件2. 検証環境だとラムダで死ぬ
教訓
 実はフレームワークのマニュアルやブログに全
部開いてあるので、事前にきちんと読もう
36
37
これで安心してラムダが
書けるようになった
事件3.
Actionでラムダ書くと
そこで死ぬ
38
事件3. Actionでラムダ書くと死ぬ
事象
 Actionでラムダ書いたら、そのActionにリクエ
スト投げるとエラーで落ちる
39
@Namespace("/")
public class IndexAction {
@Action(value = "", results = {
@Result(name = SUCCESS, location = “home.vm“)})
public String index() {
return SUCCESS;
}
}
← 例えばここらへんに追加
事件3. Actionでラムダ書くと死ぬ
事象
 Actionでラムダ書いたら、そのActionにリクエ
スト投げるとエラーで落ちる
 Actionのクラスに書かなければ落ちない
↑ これのせいでちょっと発見が遅れた
40
事件3. Actionでラムダ書くと死ぬ
原因
 struts2-java8-support-plugin が必須
• 2015/05/03に出た
• Java8 化リリース予定の1週間前
41
事件3. Actionでラムダ書くと死ぬ
対応
 struts2-java8-support プラグインを入れる
42
事件3. Actionでラムダ書くと死ぬ
対応
 struts2-java8-support プラグインを入れる
43
Actionでラムダが
動いた!!
事件3. Actionでラムダ書くと死ぬ
教訓
 行き当たりばったりは良くない
• でも Java8 で行くって言っちゃったし …
 無意味でもM, V, Cとかいろんな場所にラムダを
書いて炙り出しをしておくべきだった
44
45
もうそろそろ
大丈夫そう?
事件4.
Mac PCだと
ラムダで死ぬ
46
事件4. Mac PCだと死ぬ
事象
 Windows PCでは動作しているのにMac PCだと
ラムダ書いた場所でエラー
 原因は不明
47
事件4. Mac PCだと死ぬ
背景
 開発環境が Windows PC から Mac PC へ一斉に
移行される予定だった
• MacBookがいつ納品されるのかよく分からない!?
• WindowsとMacの混在状況が予定よりも長く続く
 Mac移行を先行した人(人柱さん)が無事地雷
を踏んだ模様
48
事件4. Mac PCだと死ぬ
対応までの流れ
 ORM に DBFlute を使用
 DBFlute の Java8 対応版へのバージョンアップ
を試作していた(後方互換なし)
• 次のリリース直後に一気に移行作業、な予定だった
 なぜか DBFlute Java8 対応状態では正常に動作
 予定を繰り上げて決行
49
事件4. Mac PCだと死ぬ
教訓
 Point of No Return を短いスパンでいくつも超え
るのは怖いが案外なんとかなる
• もちろんやらないほうがいい
50
Windows・Mac PC 混在状況
 両方の環境で動くようにメンテする羽目になる
 両方の環境の手順書を維持する羽目になる
51
Windows・Mac PC 混在状況
 両方の環境で動くようにメンテする羽目になる
 両方の環境の手順書を維持する羽目になる
52
結構辛い…
事件5.
デザインツールの
挙動がおかしい
53
事件5. デザインツールが動かない
背景
 PDFの生成には Jasper Report というライブラリ
を使用していた
 デザインには専用のツールが必要
54
事件5. デザインツールが動かない
事象
 Jasper Report のデザインツールが Java8 だとお
かしな挙動をする
 開発者のデザインツールがまともに動かないと
いうことで、PDFのデザインフォーマットが変
更できない
55
事件5. デザインツールが動かない
原因
 件のツールでは JDK6 が必要
56
事件5. デザインツールが動かない
対応
 取り合えずPDFのフォーマットに関わる仕様変
更をしばらく凍結
• 緊急案件なら JDK6 をいれていただく
 Jasper Report 撲滅へと乗り出す
57
事件5. デザインツールが動かない
教訓
 バージョンを飛ばすと当然踏む地雷は増える
• 妥当に踏みました
58
ここまでで増えたタスク
 組み込みAPサーバー化
 Jasper Report 撲滅作戦
 Spring 4 へのバージョンアップ
59
組み込みAPサーバー化
60
組み込みAPサーバー化
目的
 Eclipse プラグインからの脱却
• Run Jetty Run プラグインのメンテしたくない
 開発環境と本番環境で使うものを合わせる
• 本番環境だけで問題発生、といったことを防ぐ
手段
 組み込み Tomcat を使用する
61
組み込みTomcat
 以下のように書く
 docBase には webapp フォルダを設定
• WEB-INF を持つフォルダ
• ソースを見ると *.war でもいけそうだったが、やって
みたところ異様に起動が重かった
62
Tomcat tomcat = new Tomcat();
Context context = tomcat.addWebapp(contextPath, docBase);
tomcat.start();
tomcat.getServer().await();
63
なんだかんだで
起動までいったところで…
事件6.
JSPの描画で死ぬ
64
事件6. JSPの描画で死ぬ
事象
 JSPをビューとして使用するページで
500 Internal Server Error
65
事件6. JSPの描画で死ぬ
原因
 Jasper Report が依存しているEL式のライブラ
リーが古く、そちらの方を読み込んでしまって
関数が見つからない
66
事件6. JSPの描画で死ぬ
原因
 Jasper Report が依存しているEL式のライブラ
リーが古く、そちらの方を読み込んでしまって
関数が見つからない
67
また Jasper Report
事件6. JSPの描画で死ぬ
対応
 本番への組み込みAPサーバー適用は Jasper
Report を撲滅してからにする
 直近はローカル環境でのみ組み込みAPサーバー
で動くように pom をいじる
 (Jasper Report 撲滅後)全プロダクトで一斉に
切り替えるのは怖いので少しずつ移行
• Maven profile で切り替え
68
組み込みTomcat化
現状
 本番サーバーでの組み込み化は完了
 運用開始後、特にトラブルはない
• びびって小出しにする必要はなかった
• 問題がないと逆に不安になる
69
Jasper Report 撲滅作戦
70
Jasper Report 撲滅作戦
作戦
 Flaying Saucer (with Atlassian’s Patch) を使用
• 日本語周りのバグをAtlassianさんが修正したもの
• HtmlファイルをPDF化するライブラリ
 粛々と置き換える
• デザインを Html へ落とし込む
71
Jasper Report 撲滅作戦
作戦
 Flaying Saucer (with Atlassian’s Patch) を使用
• 日本語周りのバグをAtlassianさんが修正したもの
• HtmlファイルをPDF化するライブラリ
 粛々と置き換える
• デザインを Html へ落とし込む
72
無事リリース
事件7.
ダメ文字で死ぬ
73
事件7. ダメ文字で死ぬ
事象
 垂直タブが含まれているとそこまでで処理が終
わってしまう
→ 中途半端な PDF が出力されてしまう
74
事件7. ダメ文字で死ぬ
事象
 垂直タブが含まれているとそこまでで処理が終
わってしまう
→ 中途半端な PDF が出力されてしまう
対応
 ダメ文字を入力時と出力時にフィルタリング
75
事件7. ダメ文字で死ぬ
教訓
 ユーザーの入力は信用しない
 DBに入っているデータも信用しない
 ライブラリへの入力は慎重に
 あらゆる入力は信用できない
76
Spring 4 移行作戦
77
Spring 4 移行作戦
 Spring 3.x → Spring 4.x へ
 Spring 4.1 だと Quartz Scheduler 周りでコンパイ
ルエラーになったので Spring 4.0 へ
• Quartz Scheduler 移行は後で
 修正はpom の中のバージョンを上げるだけ
78
Spring 4 移行作戦
 Spring 3.x → Spring 4.x へ
 Spring 4.1 だと Quartz Scheduler 周りでコンパイ
ルエラーになったので Spring 4.0 へ
• Quartz Scheduler 移行は後で
 修正はpom の中のバージョンを上げるだけ
79
検証で問題なかったので
リリースしてみた
事件8.
秋のOOM祭り
80
事件8. 秋のOOM祭り
 java.lang.OutOfMemoryError: Metaspace
• Java 8 でクラスなどを確保する領域を Metaspace とい
い、Native メモリとして扱われる
 リリースしてからちょっと経ってから出始める
→ とりあえずインスタンスタイプ(AWS)を
あげると収まった
81
事件8. 秋のOOM祭り
原因究明
 Spring 4.0 はリクエストを処理した時にクラス
数が増加
 Spring 4.1 はリクエストを処理した時にクラス
数が変わらない
Spring 4.1 へ
82
Spring 4.1.x へ
背景
 Spring 4.1 以上では古い Quartz Scheduler の方式
はサポートしなくなった
作戦
 Spring Batch の方式で書き直す
 ついでに Spring 4.1 にアップデートする
• ちなみに Spring 4.2.x だと DWR というライブラリー
が死ぬ
83
Spring をバージョンアップ
結果
 メモリーの使用状況を見る限りバージョンアッ
プ後もあまり変化はなかった
 マシンスペックが上がったことで安定して稼働
しているので、そもそもメモリーが足りていな
かったのかもしれない
84
事件8. 秋のOOM祭り
結論
 金の力は偉大である
85
並行して行っていたこと
86
ついでにいろいろ導入
 Mac導入など環境の作り直しもあって環境周り
の見直しなどを行っていた
= 技術的負債返済の一環
• Vagrant による環境構築手順の簡略化
• パスワードなど重要な情報を環境変数へ
• Spring 3.1.xからの機能で、propertyt 値を上書きできる
• Lombak
• Java Config化
• `mvn -Dmaven.test.skip=true` をやめる
87
Vagrant
 仮想環境構築ツール
 設定を作る人が頑張れば後の人が楽できる
 コマンド数発で MySQL 等のミドルウェアの
セットアップが終了
 PC のスペックと要相談
88
Vagrant
 使用しているPC
• MacBook Pro
• プロセッサ: 3.1 GHz Intel Core i7
• メモリ: 16 GB 1867 MHz DDR3
 現在仮想環境で動作中のもの(割り当て:2GB)
• MySQL
• PostgreSQL
• Redis
• Cassandra
• Solr
89
Lombok – 紹介
 ボイラープレートコードを解消するためのツール
• 自明だが省略できないお決まりのコード断片
 例えば Getter や Setter をクラスの先頭にアノテー
ションをつけるだけで自動生成されたことになる
90
@Getter
class Foo {
private String bar;
}
class Foo {
private String bar;
public String getBar() {
return bar;
}
}
=
Lombok – よく使うもの
 @Getter, @Setter
• 前述の通り
 @Data
• クラスの先頭につけておくだけでGetter/Setter, toString,
equals, hashCode が実装したことになる
 @Value
• Immutable なオブジェクトの定義
 etc
Lombok – メリット・デメリット
メリット
 コードがすっきりと簡潔になる
 実はテストのカバレッジに効く
• コード自体は書かないので
デメリット
 若干検索性が下がる
 変数名の変更時などに若干手間
92
Java Config 化
 XMLは補完が効かなかったり、リファクタリン
グ時に修正を忘れて事故ることがよくある
 Java Config にすれば Java のコードで設定をかけ
るのでIDEの補助が効き、また if 文の利用など
小回りがきく
93
Java Config 化
 以下のような書き換えを行う
94
<bean id=“foo” class=“jp.bizreach.Foo” />
@Configuration
class Config {
@Bean
public Foo foo() {
return new Foo();
}
}
↓
テストの実行
 事業会社はスピードが最重要とはいうけれど、
そろそろテストが実行されないのはまずい
 ようやく Unit Test や Integration Test の自動実行
の環境が整った
• Unit Test: JUnit4
• Integration Test: Selenium WebDriver
• Vagrant で環境を作り、DB には DBFlute 付属の機能でデータ
を流し込み、Solr のインデックス処理を行う関数(自作)を
実行し、Selenium WebDriver による Integration Test を実行
95
テストの実行
 本格運用はこれから
• まだ全然テストが書かれていない
 これから長い旅が始まる
96
他のこまいの
 Optional#orElseThrow が開発環境だと問題ない
が検証環境だとビルドがこける
 Optional#orElseThrow の中で throw すると開発環
境だと問題ないが検証環境だとビルドがこける
 Eclipse で、ちょっと複雑な Lambda 式でコンパ
イルエラーになったりする
 etc...
97
まとめ
98
Java8 化にあたって
 フレームワークやライブラリーが古い状態だと
同時多発的に問題が起こる
 技術的負債が表面化し、いつの間にかそれとの
戦いが中心となっていた
 Java8 化する前にすることはいっぱいあった
99
Java8 にする前に
 各種フレームワークは最新版に
 組み込みAPサーバー化する
 Jasper Report とお別れする
 Eclipse プラグインに依存しない
100
Java8 化等いろいろしての実感
 Lambda 使えるようになって、コード量が減り、
可読性が上がった
 Stream でうまい感じで処理を書くことができる
と気持ち良い
 Lombok が便利
• @Data, @Value, @Builder, @Slf4j, …
 XMLファイルをいじることがなくなった
101
Java8 化により得られたこと
 これからの動きに追従できる
• Spring 5 は Java 8+
• DBFlute 1.1 など、Java8 に対応・最適化されたライブ
ラリ・フレームワークが出てきている
• Lambda の出現により書き方の最適解が変わった
• Java 9 が見え始めている
102
これからやっていくこと
 JSP はやめたい
• 少なくとも混在状況がよくない
• 撲滅運動進行中
 DWR をやめたい
 Struts2 もおさらばしたい
• 新アーキテクチャーへの移行計画
103
これからやっていくこと
 JSP はやめたい
• 少なくとも混在状況がよくない
• 撲滅運動進行中
 DWR をやめたい
 Struts2 もおさらばしたい
• 新アーキテクチャーへの移行計画
104
まだまだ道半ば
お知らせ
ビズリーチでは
Java でサービス開発したい方
大募集!
105
お知らせ
 弊社オフィスのイベントスペースを使用して
様々な勉強会を行っております
 会場提供も可能です
106
107
We are hiring!

Weitere ähnliche Inhalte

Was ist angesagt?

インターネットにおける悪評 - 高野光弘編
インターネットにおける悪評 - 高野光弘編インターネットにおける悪評 - 高野光弘編
インターネットにおける悪評 - 高野光弘編TAKANO Mitsuhiro
 
オープンソースの図書館システムNext-L Enjuのいまとこれから
オープンソースの図書館システムNext-L Enjuのいまとこれからオープンソースの図書館システムNext-L Enjuのいまとこれから
オープンソースの図書館システムNext-L EnjuのいまとこれからKosuke Tanabe
 
リレーショナルな正しいデータベース設計
リレーショナルな正しいデータベース設計リレーショナルな正しいデータベース設計
リレーショナルな正しいデータベース設計Mikiya Okuno
 
静的解析ツール Klocworkによる 機能安全規格への対応
静的解析ツール Klocworkによる 機能安全規格への対応静的解析ツール Klocworkによる 機能安全規格への対応
静的解析ツール Klocworkによる 機能安全規格への対応Masaru Horioka
 
ASP.NET CoreとAzure AD B2Cを使ったサクっと認証
ASP.NET CoreとAzure AD B2Cを使ったサクっと認証ASP.NET CoreとAzure AD B2Cを使ったサクっと認証
ASP.NET CoreとAzure AD B2Cを使ったサクっと認証Yuta Matsumura
 
The world of loss function
The world of loss functionThe world of loss function
The world of loss function홍배 김
 
【第7回】アジャイル・スクラム勉強会
【第7回】アジャイル・スクラム勉強会【第7回】アジャイル・スクラム勉強会
【第7回】アジャイル・スクラム勉強会Satoshi Harada
 
アプリの鍵が消える時_Droid kaigi2018
アプリの鍵が消える時_Droid kaigi2018アプリの鍵が消える時_Droid kaigi2018
アプリの鍵が消える時_Droid kaigi2018ak_shio_555
 
[150124 박민근] 모바일 게임 개발에서 루아 스크립트 활용하기
[150124 박민근] 모바일 게임 개발에서 루아 스크립트 활용하기[150124 박민근] 모바일 게임 개발에서 루아 스크립트 활용하기
[150124 박민근] 모바일 게임 개발에서 루아 스크립트 활용하기MinGeun Park
 
[Android]Static変数さんとactivityさん
[Android]Static変数さんとactivityさん[Android]Static変数さんとactivityさん
[Android]Static変数さんとactivityさんHirokazu Fukami
 
PyAutoGUI等Pythonライブラリによる自動化支援
PyAutoGUI等Pythonライブラリによる自動化支援PyAutoGUI等Pythonライブラリによる自動化支援
PyAutoGUI等Pythonライブラリによる自動化支援H Iseri
 
全文検索でRedmineをさらに活用!
全文検索でRedmineをさらに活用!全文検索でRedmineをさらに活用!
全文検索でRedmineをさらに活用!Kouhei Sutou
 
JJUG CCC 2015 Spring 「新人エンジニア奮闘記 - Javaって何?からwebサービスを公開するまで -」発表スライド
JJUG CCC 2015 Spring 「新人エンジニア奮闘記 - Javaって何?からwebサービスを公開するまで -」発表スライドJJUG CCC 2015 Spring 「新人エンジニア奮闘記 - Javaって何?からwebサービスを公開するまで -」発表スライド
JJUG CCC 2015 Spring 「新人エンジニア奮闘記 - Javaって何?からwebサービスを公開するまで -」発表スライドToshiakiArai
 
Go初心者向けハンズオン コマンドラインツールを作ろう
Go初心者向けハンズオン コマンドラインツールを作ろうGo初心者向けハンズオン コマンドラインツールを作ろう
Go初心者向けハンズオン コマンドラインツールを作ろうTakuya Ueda
 
Iocコンテナについて
IocコンテナについてIocコンテナについて
IocコンテナについてAkio Terayama
 
Booking.com iznajmljivači- Savjeti za visoko rangiranje na Booking.comu
Booking.com iznajmljivači- Savjeti za visoko rangiranje na Booking.comuBooking.com iznajmljivači- Savjeti za visoko rangiranje na Booking.comu
Booking.com iznajmljivači- Savjeti za visoko rangiranje na Booking.comuMegaBooker
 
継続的インテグレーションとテストの話
継続的インテグレーションとテストの話継続的インテグレーションとテストの話
継続的インテグレーションとテストの話Preferred Networks
 

Was ist angesagt? (20)

インターネットにおける悪評 - 高野光弘編
インターネットにおける悪評 - 高野光弘編インターネットにおける悪評 - 高野光弘編
インターネットにおける悪評 - 高野光弘編
 
オープンソースの図書館システムNext-L Enjuのいまとこれから
オープンソースの図書館システムNext-L Enjuのいまとこれからオープンソースの図書館システムNext-L Enjuのいまとこれから
オープンソースの図書館システムNext-L Enjuのいまとこれから
 
06 Community Detection
06 Community Detection06 Community Detection
06 Community Detection
 
リレーショナルな正しいデータベース設計
リレーショナルな正しいデータベース設計リレーショナルな正しいデータベース設計
リレーショナルな正しいデータベース設計
 
静的解析ツール Klocworkによる 機能安全規格への対応
静的解析ツール Klocworkによる 機能安全規格への対応静的解析ツール Klocworkによる 機能安全規格への対応
静的解析ツール Klocworkによる 機能安全規格への対応
 
ASP.NET CoreとAzure AD B2Cを使ったサクっと認証
ASP.NET CoreとAzure AD B2Cを使ったサクっと認証ASP.NET CoreとAzure AD B2Cを使ったサクっと認証
ASP.NET CoreとAzure AD B2Cを使ったサクっと認証
 
The world of loss function
The world of loss functionThe world of loss function
The world of loss function
 
【第7回】アジャイル・スクラム勉強会
【第7回】アジャイル・スクラム勉強会【第7回】アジャイル・スクラム勉強会
【第7回】アジャイル・スクラム勉強会
 
アプリの鍵が消える時_Droid kaigi2018
アプリの鍵が消える時_Droid kaigi2018アプリの鍵が消える時_Droid kaigi2018
アプリの鍵が消える時_Droid kaigi2018
 
[150124 박민근] 모바일 게임 개발에서 루아 스크립트 활용하기
[150124 박민근] 모바일 게임 개발에서 루아 스크립트 활용하기[150124 박민근] 모바일 게임 개발에서 루아 스크립트 활용하기
[150124 박민근] 모바일 게임 개발에서 루아 스크립트 활용하기
 
[Android]Static変数さんとactivityさん
[Android]Static変数さんとactivityさん[Android]Static変数さんとactivityさん
[Android]Static変数さんとactivityさん
 
PyAutoGUI等Pythonライブラリによる自動化支援
PyAutoGUI等Pythonライブラリによる自動化支援PyAutoGUI等Pythonライブラリによる自動化支援
PyAutoGUI等Pythonライブラリによる自動化支援
 
全文検索でRedmineをさらに活用!
全文検索でRedmineをさらに活用!全文検索でRedmineをさらに活用!
全文検索でRedmineをさらに活用!
 
rnn BASICS
rnn BASICSrnn BASICS
rnn BASICS
 
JJUG CCC 2015 Spring 「新人エンジニア奮闘記 - Javaって何?からwebサービスを公開するまで -」発表スライド
JJUG CCC 2015 Spring 「新人エンジニア奮闘記 - Javaって何?からwebサービスを公開するまで -」発表スライドJJUG CCC 2015 Spring 「新人エンジニア奮闘記 - Javaって何?からwebサービスを公開するまで -」発表スライド
JJUG CCC 2015 Spring 「新人エンジニア奮闘記 - Javaって何?からwebサービスを公開するまで -」発表スライド
 
Go初心者向けハンズオン コマンドラインツールを作ろう
Go初心者向けハンズオン コマンドラインツールを作ろうGo初心者向けハンズオン コマンドラインツールを作ろう
Go初心者向けハンズオン コマンドラインツールを作ろう
 
Iocコンテナについて
IocコンテナについてIocコンテナについて
Iocコンテナについて
 
Booking.com iznajmljivači- Savjeti za visoko rangiranje na Booking.comu
Booking.com iznajmljivači- Savjeti za visoko rangiranje na Booking.comuBooking.com iznajmljivači- Savjeti za visoko rangiranje na Booking.comu
Booking.com iznajmljivači- Savjeti za visoko rangiranje na Booking.comu
 
MFC Paint
MFC PaintMFC Paint
MFC Paint
 
継続的インテグレーションとテストの話
継続的インテグレーションとテストの話継続的インテグレーションとテストの話
継続的インテグレーションとテストの話
 

Andere mochten auch

Real world machine learning with Java for Fumankaitori.com
Real world machine learning with Java for Fumankaitori.comReal world machine learning with Java for Fumankaitori.com
Real world machine learning with Java for Fumankaitori.comMathieu Dumoulin
 
Java8 Stream APIとApache SparkとAsakusa Frameworkの類似点・相違点
Java8 Stream APIとApache SparkとAsakusa Frameworkの類似点・相違点Java8 Stream APIとApache SparkとAsakusa Frameworkの類似点・相違点
Java8 Stream APIとApache SparkとAsakusa Frameworkの類似点・相違点hishidama
 
よくある業務開発の自動化事情 #jjug_ccc #ccc_cd3
よくある業務開発の自動化事情 #jjug_ccc #ccc_cd3よくある業務開発の自動化事情 #jjug_ccc #ccc_cd3
よくある業務開発の自動化事情 #jjug_ccc #ccc_cd3irof N
 
プログラム初心者がWebサービスをリリースして運営するまで
プログラム初心者がWebサービスをリリースして運営するまでプログラム初心者がWebサービスをリリースして運営するまで
プログラム初心者がWebサービスをリリースして運営するまでTomoaki Iwasaki
 
【こっそり始める】Javaプログラマコーディングマイグレーション
【こっそり始める】Javaプログラマコーディングマイグレーション【こっそり始める】Javaプログラマコーディングマイグレーション
【こっそり始める】Javaプログラマコーディングマイグレーションyy yank
 
Javaにおけるネイティブコード連携の各種手法の紹介
Javaにおけるネイティブコード連携の各種手法の紹介Javaにおけるネイティブコード連携の各種手法の紹介
Javaにおけるネイティブコード連携の各種手法の紹介khisano
 
日本 Java ユーザーグループ JJUG CCC 2015 Fall by ソラコム 片山
日本 Java ユーザーグループ JJUG CCC 2015 Fall  by ソラコム 片山 日本 Java ユーザーグループ JJUG CCC 2015 Fall  by ソラコム 片山
日本 Java ユーザーグループ JJUG CCC 2015 Fall by ソラコム 片山 SORACOM,INC
 
デバッガのしくみ(JDI)を学んでみよう
デバッガのしくみ(JDI)を学んでみようデバッガのしくみ(JDI)を学んでみよう
デバッガのしくみ(JDI)を学んでみようfukai_yas
 
Reactive Webアプリケーション - そしてSpring 5へ #jjug_ccc #ccc_ef3
Reactive Webアプリケーション - そしてSpring 5へ #jjug_ccc #ccc_ef3Reactive Webアプリケーション - そしてSpring 5へ #jjug_ccc #ccc_ef3
Reactive Webアプリケーション - そしてSpring 5へ #jjug_ccc #ccc_ef3Toshiaki Maki
 
Java EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 FallJava EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 FallMasatoshi Tada
 
マイクロサービスアーキテクチャ - アーキテクチャ設計の歴史を背景に
マイクロサービスアーキテクチャ - アーキテクチャ設計の歴史を背景にマイクロサービスアーキテクチャ - アーキテクチャ設計の歴史を背景に
マイクロサービスアーキテクチャ - アーキテクチャ設計の歴史を背景にYusuke Suzuki
 
タイムマシン採用:明日のエンタープライズJavaの世界を予想する -Java EE7/クラウド/Docker/etc.-
タイムマシン採用:明日のエンタープライズJavaの世界を予想する -Java EE7/クラウド/Docker/etc.-タイムマシン採用:明日のエンタープライズJavaの世界を予想する -Java EE7/クラウド/Docker/etc.-
タイムマシン採用:明日のエンタープライズJavaの世界を予想する -Java EE7/クラウド/Docker/etc.-Takakiyo Tanaka
 
20160521 大規模映像配信サービスの Java8による全面リニューアルの裏側
20160521 大規模映像配信サービスの Java8による全面リニューアルの裏側20160521 大規模映像配信サービスの Java8による全面リニューアルの裏側
20160521 大規模映像配信サービスの Java8による全面リニューアルの裏側賢 秋穂
 
Getting start Java EE Action-Based MVC with Thymeleaf
Getting start Java EE Action-Based MVC with ThymeleafGetting start Java EE Action-Based MVC with Thymeleaf
Getting start Java EE Action-Based MVC with ThymeleafMasatoshi Tada
 
Jjugccc2017spring-postgres-ccc_m1
Jjugccc2017spring-postgres-ccc_m1Jjugccc2017spring-postgres-ccc_m1
Jjugccc2017spring-postgres-ccc_m1Kosuke Kida
 
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~Hiroyuki Ohnaka
 
Kotlin is charming; The reasons Java engineers should start Kotlin.
Kotlin is charming; The reasons Java engineers should start Kotlin.Kotlin is charming; The reasons Java engineers should start Kotlin.
Kotlin is charming; The reasons Java engineers should start Kotlin.JustSystems Corporation
 
U-NEXT学生インターン、過激なJavaの学び方と過激な要求
U-NEXT学生インターン、過激なJavaの学び方と過激な要求U-NEXT学生インターン、過激なJavaの学び方と過激な要求
U-NEXT学生インターン、過激なJavaの学び方と過激な要求hajime funaki
 
Java libraries you can't afford to miss
Java libraries you can't afford to missJava libraries you can't afford to miss
Java libraries you can't afford to missAndres Almiray
 
2017spring jjug ccc_f2
2017spring jjug ccc_f22017spring jjug ccc_f2
2017spring jjug ccc_f2Kazuhiro Wada
 

Andere mochten auch (20)

Real world machine learning with Java for Fumankaitori.com
Real world machine learning with Java for Fumankaitori.comReal world machine learning with Java for Fumankaitori.com
Real world machine learning with Java for Fumankaitori.com
 
Java8 Stream APIとApache SparkとAsakusa Frameworkの類似点・相違点
Java8 Stream APIとApache SparkとAsakusa Frameworkの類似点・相違点Java8 Stream APIとApache SparkとAsakusa Frameworkの類似点・相違点
Java8 Stream APIとApache SparkとAsakusa Frameworkの類似点・相違点
 
よくある業務開発の自動化事情 #jjug_ccc #ccc_cd3
よくある業務開発の自動化事情 #jjug_ccc #ccc_cd3よくある業務開発の自動化事情 #jjug_ccc #ccc_cd3
よくある業務開発の自動化事情 #jjug_ccc #ccc_cd3
 
プログラム初心者がWebサービスをリリースして運営するまで
プログラム初心者がWebサービスをリリースして運営するまでプログラム初心者がWebサービスをリリースして運営するまで
プログラム初心者がWebサービスをリリースして運営するまで
 
【こっそり始める】Javaプログラマコーディングマイグレーション
【こっそり始める】Javaプログラマコーディングマイグレーション【こっそり始める】Javaプログラマコーディングマイグレーション
【こっそり始める】Javaプログラマコーディングマイグレーション
 
Javaにおけるネイティブコード連携の各種手法の紹介
Javaにおけるネイティブコード連携の各種手法の紹介Javaにおけるネイティブコード連携の各種手法の紹介
Javaにおけるネイティブコード連携の各種手法の紹介
 
日本 Java ユーザーグループ JJUG CCC 2015 Fall by ソラコム 片山
日本 Java ユーザーグループ JJUG CCC 2015 Fall  by ソラコム 片山 日本 Java ユーザーグループ JJUG CCC 2015 Fall  by ソラコム 片山
日本 Java ユーザーグループ JJUG CCC 2015 Fall by ソラコム 片山
 
デバッガのしくみ(JDI)を学んでみよう
デバッガのしくみ(JDI)を学んでみようデバッガのしくみ(JDI)を学んでみよう
デバッガのしくみ(JDI)を学んでみよう
 
Reactive Webアプリケーション - そしてSpring 5へ #jjug_ccc #ccc_ef3
Reactive Webアプリケーション - そしてSpring 5へ #jjug_ccc #ccc_ef3Reactive Webアプリケーション - そしてSpring 5へ #jjug_ccc #ccc_ef3
Reactive Webアプリケーション - そしてSpring 5へ #jjug_ccc #ccc_ef3
 
Java EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 FallJava EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 Fall
 
マイクロサービスアーキテクチャ - アーキテクチャ設計の歴史を背景に
マイクロサービスアーキテクチャ - アーキテクチャ設計の歴史を背景にマイクロサービスアーキテクチャ - アーキテクチャ設計の歴史を背景に
マイクロサービスアーキテクチャ - アーキテクチャ設計の歴史を背景に
 
タイムマシン採用:明日のエンタープライズJavaの世界を予想する -Java EE7/クラウド/Docker/etc.-
タイムマシン採用:明日のエンタープライズJavaの世界を予想する -Java EE7/クラウド/Docker/etc.-タイムマシン採用:明日のエンタープライズJavaの世界を予想する -Java EE7/クラウド/Docker/etc.-
タイムマシン採用:明日のエンタープライズJavaの世界を予想する -Java EE7/クラウド/Docker/etc.-
 
20160521 大規模映像配信サービスの Java8による全面リニューアルの裏側
20160521 大規模映像配信サービスの Java8による全面リニューアルの裏側20160521 大規模映像配信サービスの Java8による全面リニューアルの裏側
20160521 大規模映像配信サービスの Java8による全面リニューアルの裏側
 
Getting start Java EE Action-Based MVC with Thymeleaf
Getting start Java EE Action-Based MVC with ThymeleafGetting start Java EE Action-Based MVC with Thymeleaf
Getting start Java EE Action-Based MVC with Thymeleaf
 
Jjugccc2017spring-postgres-ccc_m1
Jjugccc2017spring-postgres-ccc_m1Jjugccc2017spring-postgres-ccc_m1
Jjugccc2017spring-postgres-ccc_m1
 
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
 
Kotlin is charming; The reasons Java engineers should start Kotlin.
Kotlin is charming; The reasons Java engineers should start Kotlin.Kotlin is charming; The reasons Java engineers should start Kotlin.
Kotlin is charming; The reasons Java engineers should start Kotlin.
 
U-NEXT学生インターン、過激なJavaの学び方と過激な要求
U-NEXT学生インターン、過激なJavaの学び方と過激な要求U-NEXT学生インターン、過激なJavaの学び方と過激な要求
U-NEXT学生インターン、過激なJavaの学び方と過激な要求
 
Java libraries you can't afford to miss
Java libraries you can't afford to missJava libraries you can't afford to miss
Java libraries you can't afford to miss
 
2017spring jjug ccc_f2
2017spring jjug ccc_f22017spring jjug ccc_f2
2017spring jjug ccc_f2
 

Ähnlich wie Java8移行から始めた技術的負債との戦い(jjug ccc 2015 fall)

Example of exiting legacy system
Example of exiting legacy systemExample of exiting legacy system
Example of exiting legacy systemTakamchiTanaka
 
Lineにおけるspring frameworkの活用
Lineにおけるspring frameworkの活用Lineにおけるspring frameworkの活用
Lineにおけるspring frameworkの活用Tokuhiro Matsuno
 
OpenStack on OpenStack with CI
OpenStack on OpenStack with CIOpenStack on OpenStack with CI
OpenStack on OpenStack with CIkanabuchi
 
Spring知っておきたい
Spring知っておきたいSpring知っておきたい
Spring知っておきたいYuichi Hasegawa
 
Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Tokuhiro Matsuno
 
毎日が憧れの新築、反復可能なデリバリーによる常時新築システム
毎日が憧れの新築、反復可能なデリバリーによる常時新築システム毎日が憧れの新築、反復可能なデリバリーによる常時新築システム
毎日が憧れの新築、反復可能なデリバリーによる常時新築システムTomohiro Ohtake
 
いるけどないからつくってみたよ高速モバイルプッシュ配信くん #cmdevio
いるけどないからつくってみたよ高速モバイルプッシュ配信くん #cmdevioいるけどないからつくってみたよ高速モバイルプッシュ配信くん #cmdevio
いるけどないからつくってみたよ高速モバイルプッシュ配信くん #cmdeviofd0
 
Asakusa バッチの運用を支える技術
Asakusa バッチの運用を支える技術Asakusa バッチの運用を支える技術
Asakusa バッチの運用を支える技術KinebuchiTomo
 
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話JustSystems Corporation
 
JSX 速さの秘密 - 高速なJavaScriptを書く方法
JSX 速さの秘密 - 高速なJavaScriptを書く方法JSX 速さの秘密 - 高速なJavaScriptを書く方法
JSX 速さの秘密 - 高速なJavaScriptを書く方法Kazuho Oku
 
モデル検査入門 #wacate
モデル検査入門 #wacateモデル検査入門 #wacate
モデル検査入門 #wacateKinji Akemine
 
JVM上でのストリーム処理エンジンの変遷
JVM上でのストリーム処理エンジンの変遷JVM上でのストリーム処理エンジンの変遷
JVM上でのストリーム処理エンジンの変遷Sotaro Kimura
 
モダンJavaScript環境構築一歩目
モダンJavaScript環境構築一歩目モダンJavaScript環境構築一歩目
モダンJavaScript環境構築一歩目大樹 小倉
 
エンプラに Kubernetes を 導入してみて分かった 4つの Lessons Learned
エンプラに Kubernetes を 導入してみて分かった 4つの Lessons Learnedエンプラに Kubernetes を 導入してみて分かった 4つの Lessons Learned
エンプラに Kubernetes を 導入してみて分かった 4つの Lessons LearnedDaiki Kawanuma
 
Maven2 プラグイン入門
Maven2 プラグイン入門Maven2 プラグイン入門
Maven2 プラグイン入門guestd4898b
 
Apache CloudStack コントリビューション
Apache CloudStack コントリビューションApache CloudStack コントリビューション
Apache CloudStack コントリビューションSatoshi KOBAYASHI
 
Observability, Service Mesh and Microservices
Observability, Service Mesh and MicroservicesObservability, Service Mesh and Microservices
Observability, Service Mesh and MicroservicesTaiki
 

Ähnlich wie Java8移行から始めた技術的負債との戦い(jjug ccc 2015 fall) (20)

Example of exiting legacy system
Example of exiting legacy systemExample of exiting legacy system
Example of exiting legacy system
 
Lineにおけるspring frameworkの活用
Lineにおけるspring frameworkの活用Lineにおけるspring frameworkの活用
Lineにおけるspring frameworkの活用
 
OpenStack on OpenStack with CI
OpenStack on OpenStack with CIOpenStack on OpenStack with CI
OpenStack on OpenStack with CI
 
Spring知っておきたい
Spring知っておきたいSpring知っておきたい
Spring知っておきたい
 
Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)
 
毎日が憧れの新築、反復可能なデリバリーによる常時新築システム
毎日が憧れの新築、反復可能なデリバリーによる常時新築システム毎日が憧れの新築、反復可能なデリバリーによる常時新築システム
毎日が憧れの新築、反復可能なデリバリーによる常時新築システム
 
Cve 2013-0422
Cve 2013-0422Cve 2013-0422
Cve 2013-0422
 
いるけどないからつくってみたよ高速モバイルプッシュ配信くん #cmdevio
いるけどないからつくってみたよ高速モバイルプッシュ配信くん #cmdevioいるけどないからつくってみたよ高速モバイルプッシュ配信くん #cmdevio
いるけどないからつくってみたよ高速モバイルプッシュ配信くん #cmdevio
 
Asakusa バッチの運用を支える技術
Asakusa バッチの運用を支える技術Asakusa バッチの運用を支える技術
Asakusa バッチの運用を支える技術
 
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
 
JSX 速さの秘密 - 高速なJavaScriptを書く方法
JSX 速さの秘密 - 高速なJavaScriptを書く方法JSX 速さの秘密 - 高速なJavaScriptを書く方法
JSX 速さの秘密 - 高速なJavaScriptを書く方法
 
モデル検査入門 #wacate
モデル検査入門 #wacateモデル検査入門 #wacate
モデル検査入門 #wacate
 
Haikara
HaikaraHaikara
Haikara
 
JVM上でのストリーム処理エンジンの変遷
JVM上でのストリーム処理エンジンの変遷JVM上でのストリーム処理エンジンの変遷
JVM上でのストリーム処理エンジンの変遷
 
モダンJavaScript環境構築一歩目
モダンJavaScript環境構築一歩目モダンJavaScript環境構築一歩目
モダンJavaScript環境構築一歩目
 
エンプラに Kubernetes を 導入してみて分かった 4つの Lessons Learned
エンプラに Kubernetes を 導入してみて分かった 4つの Lessons Learnedエンプラに Kubernetes を 導入してみて分かった 4つの Lessons Learned
エンプラに Kubernetes を 導入してみて分かった 4つの Lessons Learned
 
Maven2 プラグイン入門
Maven2 プラグイン入門Maven2 プラグイン入門
Maven2 プラグイン入門
 
Apache CloudStack コントリビューション
Apache CloudStack コントリビューションApache CloudStack コントリビューション
Apache CloudStack コントリビューション
 
Observability, Service Mesh and Microservices
Observability, Service Mesh and MicroservicesObservability, Service Mesh and Microservices
Observability, Service Mesh and Microservices
 
JJUG CCC 2014 ATL
JJUG CCC 2014 ATLJJUG CCC 2014 ATL
JJUG CCC 2014 ATL
 

Java8移行から始めた技術的負債との戦い(jjug ccc 2015 fall)

Hinweis der Redaktion

  1. ----- 会議メモ (15/11/20 18:08) ----- 技術的なこと やった ライブラリー ロードップ的なものと 肉リーチ カドック性 コードをはっつける Lombok追加