SlideShare a Scribd company logo
1 of 32
レガシー脳なJavaシステム担当者が 
改めてStream APIに挑戦してみた。 
Copyright (C) 2014 くわっちょAll Rights Reserved. 
2014.8.22 JJUG ナイトセミナー 
くわっちょ@社畜犬(@kuwaccho0711)
あんた誰? 
 くわっちょ 
 青森出身の犬。新卒でSIの世界に入って現在SE7年目。Java歴は通算4年くらい。 
 渋谷の某グループにあるSIerでWebシステム開発や運用保守やってます。 
 と書けば聞こえはいいけど最近はレガシーコード(後述)相手が多い気がする 
 Twitter :@kuwaccho0711 
 アイコンは右下の犬。Twiiter上でほねっこあげると喜びます。わん。 
 社畜ネタ多いけど実際はそんなに激務じゃないし真面目でもない。 
Copyright (C) 2014 くわっちょAll Rights Reserved.
仕事で使っているJAVAは? 
7(もともとは1.5) 
6 
6(マイナーバージョン違い) 
1.4 <= New!! 
Copyright (C) 2014 くわっちょAll Rights Reserved.
仕事で使っているJAVAは? 
Copyright (C) 2014 くわっちょAll Rights Reserved. 
8の案件は?
仕事で使っているJAVAは? 
Copyright (C) 2014 くわっちょAll Rights Reserved.
とびこんできたニュース 
そんな中こんなニュースが 
Copyright (C) 2014 くわっちょAll Rights Reserved.
とびこんできたニュース 
Java 9が1.5以前のソースコードのコンパイルを非サポートに 
(http://www.infoq.com/jp/news/2013/07/java-jep182) 
Copyright (C) 2014 くわっちょAll Rights Reserved.
とびこんできたニュース 
(抜粋) 
> 変化はすでに始まっている。 
> Java 8では、jsr14 と1.4のターゲットはもはやで受け入れられ 
ていない。 
> 1.5を使用すると警告を出す。 
> Java 9がリリースされるときに、1.5のサポートは削除され、1.6に 
対しては警告を上げる。 
Copyright (C) 2014 くわっちょAll Rights Reserved.
Copyright (C) 2014 くわっちょAll Rights Reserved. 
これはいけない。 
とびこんできたニュース
レガシーシステムのリプレイスの嵐が 
Copyright (C) 2014 くわっちょAll Rights Reserved. 
待っている 
とびこんできたニュース
とびこんできたニュース 
Copyright (C) 2014 くわっちょAll Rights Reserved.
Copyright (C) 2014 くわっちょAll Rights Reserved. 
しかし 
しかし…
JAVA7での新機能 
・switchで文字列 
・安全な再スロー 
・二進リテラル(0b) 
・数値リテラルに「_」 
・ダイアモンド演算子(<>) 
・リソース付きtry文 
・例外のマルチキャッチ 
(参照: 
http://www.ne.jp/asahi/hishidama/home/tech/java/u 
ptodate.html#JDK1.7) 
Copyright (C) 2014 くわっちょAll Rights Reserved.
これらすらまだ使いこなせてないよ! 
(try-with-resources 文見たことすらない 
Copyright (C) 2014 くわっちょAll Rights Reserved. 
よ!) 
しかし…
しかし… 
そんな状態で既存ソースをJava8や9 
に移行しようとする。 
Copyright (C) 2014 くわっちょAll Rights Reserved.
ドはまり確定です。 
しかし… 
Copyright (C) 2014 くわっちょAll Rights Reserved.
「for文禁止を禁止します」 
しかし… 
がコーディングルールにしないためにも。 
レガシー脳の改革が必要だ。 
Copyright (C) 2014 くわっちょAll Rights Reserved.
レガシー脳の「とりあえず」という恐怖 
 「とりあえず」for文でまわせばいいんじゃね? 
 「とりあえず」if文書いとけばいいんじゃね? 
 拡張for文?何それ? Map?何それ? ArrayList?何それ? 
よくわかんないから「とりあえず」使わない。 
 配列の中身よくわかんないからエラーになったら「とりあえず」キャストしてる 
 「とりあえず」ステップ数稼ぐために冗長な書き方にしてる 
 「とりあえず」レベル低い人でもわかるように簡単な書き方にしろと言われたからしてる 
 「とりあえず」コンパイルエラーになるからコンパイルのバージョン下げたよ(!?) 
 とりあえずビール 
Copyright (C) 2014 くわっちょAll Rights Reserved.
結果(※フィクションです) 
Copyright (C) 2014 くわっちょAll Rights Reserved.
(※あくまでもフィクションです) 
Copyright (C) 2014 くわっちょAll Rights Reserved. 
これはひどい。
とりあえずが大好きなレガシー脳の「とりあえず」革命 
 StreamAPI使うために「とりあえず」以下を意識しよう 
「とりあえず」for文使うな 
「とりあえず」if文追加すればいいはよくない。Ifを少なくする設計に。 
「とりあえず」リストとか適切に使うようにしよう 
「とりあえず」キャストはバグだから型を意識して無駄なキャスは減らそう(当たり前だ!) 
「とりあえず」ステップ数でお金は増えないからスッキリかっこよく書こう。 
「とりあえず」レベルが低い人が見るかもしれないからこそスッキリした書き方にしよう。 
「とりあえず」非推奨な書き方はしない。非推奨になったライブラリは置き換えだ!! 
とりあえずハイボール 
Copyright (C) 2014 くわっちょAll Rights Reserved.
置き換えた結果(※フィクションです) 
Copyright (C) 2014 くわっちょAll Rights Reserved.
もうちょい置き換えた結果(※フィクションです) 
Copyright (C) 2014 くわっちょAll Rights Reserved.
Copyright (C) 2014 くわっちょAll Rights Reserved. 
少しはスッキリ。 
(※正直微妙だけど)
そもそも論だけど 
if文多いつくりはどうにかできないの? 
Copyright (C) 2014 くわっちょAll Rights Reserved.
駄犬には無理です。 
そもそも論だけど 
(設計思想そのものを見直しましょう) 
Copyright (C) 2014 くわっちょAll Rights Reserved.
レガシー脳が使ってみて思った事 
 for文の中でifを使わないようにする方がスッキリする 
でないと例示したような微妙なコードができあがる 
とりあえずリストをとってきて加工するのではなく、リストを取る段階でどのように 
後処理で使うか意識が必要 
 だらだらとしたfor文を書く必要がなくなったのでストレスは減る 
 ifで処理分けたいときは関数でできるものとできないものを意識しないといけない 
 if文多いレガジーなコードを全部置き換えられるか正直微妙 
この辺りは正直怖い人たちの意見も伺いたいところ 
Copyright (C) 2014 くわっちょAll Rights Reserved.
昔のJavaで書かれたシステムを 
今のモダンなJava関連で動かすには 
今後に向けて 
レガシー脳の改造だけでなく具体的な移行策も必要 
Copyright (C) 2014 くわっちょAll Rights Reserved.
今後に向けて 
なので古いコードを具体的にどうすればモダ 
ンなJava環境で動かせるかを検証していく 
※誰得ですか?俺得です。 
※渋谷Javaでやれればいーな 
Copyright (C) 2014 くわっちょAll Rights Reserved.
今後に向けて 
そもそもJava8で1から開発しなおせば 
いいんじゃないの? 
Copyright (C) 2014 くわっちょAll Rights Reserved.
1から作る費用や時間は? 
Copyright (C) 2014 くわっちょAll Rights Reserved.
ご清聴、ありがとうございました 
Copyright (C) 2014 くわっちょAll Rights Reserved.

More Related Content

Similar to Jjug ナイト・セミナー くわっちょ 20140822

Comb meet up_@kuwaccho0711_20140810
Comb meet up_@kuwaccho0711_20140810Comb meet up_@kuwaccho0711_20140810
Comb meet up_@kuwaccho0711_20140810くわっ ちょ
 
正規表現リテラルは本当に必要なのか?
正規表現リテラルは本当に必要なのか?正規表現リテラルは本当に必要なのか?
正規表現リテラルは本当に必要なのか?kwatch
 
Ipv6を始めてみませんか
Ipv6を始めてみませんかIpv6を始めてみませんか
Ipv6を始めてみませんかkometch H
 
川又康平 20160428
川又康平 20160428川又康平 20160428
川又康平 20160428basicinc_dev
 
伝えるための試行錯誤というか道草。
伝えるための試行錯誤というか道草。伝えるための試行錯誤というか道草。
伝えるための試行錯誤というか道草。irof N
 
Open stack swift is too Enterprise? 2014/12/01 advent cal
Open stack swift is too Enterprise?  2014/12/01 advent calOpen stack swift is too Enterprise?  2014/12/01 advent cal
Open stack swift is too Enterprise? 2014/12/01 advent calNaoto Gohko
 
Dev lobe20090325v1.0
Dev lobe20090325v1.0Dev lobe20090325v1.0
Dev lobe20090325v1.0walnut210
 
5回目Java script構文
5回目Java script構文5回目Java script構文
5回目Java script構文Takuya Shishido
 
ご注文は監視自動化ですか?
ご注文は監視自動化ですか?ご注文は監視自動化ですか?
ご注文は監視自動化ですか?Masahito Zembutsu
 
つくっておぼえる!仮想マシン〜直前で実装編〜
つくっておぼえる!仮想マシン〜直前で実装編〜つくっておぼえる!仮想マシン〜直前で実装編〜
つくっておぼえる!仮想マシン〜直前で実装編〜Eric Sartre
 
アトリエ秋葉原 Choregraphe WS#2
アトリエ秋葉原 Choregraphe WS#2アトリエ秋葉原 Choregraphe WS#2
アトリエ秋葉原 Choregraphe WS#2Atelier Akihabara
 
Laravelチュートリアルを作ってみた。
Laravelチュートリアルを作ってみた。Laravelチュートリアルを作ってみた。
Laravelチュートリアルを作ってみた。Futoshi Endo
 
Ansibleで始めるpostgre sqlの冗長化
Ansibleで始めるpostgre sqlの冗長化Ansibleで始めるpostgre sqlの冗長化
Ansibleで始めるpostgre sqlの冗長化Soudai Sone
 
ジャストシステムJava100本ノックのご紹介
ジャストシステムJava100本ノックのご紹介ジャストシステムJava100本ノックのご紹介
ジャストシステムJava100本ノックのご紹介JustSystems Corporation
 
Java素人がeclipseプラグインを作るためにやったこと
Java素人がeclipseプラグインを作るためにやったことJava素人がeclipseプラグインを作るためにやったこと
Java素人がeclipseプラグインを作るためにやったことTAKEMURA Takayuki
 
PHPでセキュリティを真面目に考える
PHPでセキュリティを真面目に考えるPHPでセキュリティを真面目に考える
PHPでセキュリティを真面目に考えるTakuya Sato
 
LT資料 Azureで始めるWordPress
LT資料 Azureで始めるWordPressLT資料 Azureで始めるWordPress
LT資料 Azureで始めるWordPressaries_red
 

Similar to Jjug ナイト・セミナー くわっちょ 20140822 (20)

Comb meet up_@kuwaccho0711_20140810
Comb meet up_@kuwaccho0711_20140810Comb meet up_@kuwaccho0711_20140810
Comb meet up_@kuwaccho0711_20140810
 
正規表現リテラルは本当に必要なのか?
正規表現リテラルは本当に必要なのか?正規表現リテラルは本当に必要なのか?
正規表現リテラルは本当に必要なのか?
 
Ipv6を始めてみませんか
Ipv6を始めてみませんかIpv6を始めてみませんか
Ipv6を始めてみませんか
 
川又康平 20160428
川又康平 20160428川又康平 20160428
川又康平 20160428
 
伝えるための試行錯誤というか道草。
伝えるための試行錯誤というか道草。伝えるための試行錯誤というか道草。
伝えるための試行錯誤というか道草。
 
Open stack swift is too Enterprise? 2014/12/01 advent cal
Open stack swift is too Enterprise?  2014/12/01 advent calOpen stack swift is too Enterprise?  2014/12/01 advent cal
Open stack swift is too Enterprise? 2014/12/01 advent cal
 
Dev lobe20090325v1.0
Dev lobe20090325v1.0Dev lobe20090325v1.0
Dev lobe20090325v1.0
 
5回目Java script構文
5回目Java script構文5回目Java script構文
5回目Java script構文
 
ご注文は監視自動化ですか?
ご注文は監視自動化ですか?ご注文は監視自動化ですか?
ご注文は監視自動化ですか?
 
つくっておぼえる!仮想マシン〜直前で実装編〜
つくっておぼえる!仮想マシン〜直前で実装編〜つくっておぼえる!仮想マシン〜直前で実装編〜
つくっておぼえる!仮想マシン〜直前で実装編〜
 
アトリエ秋葉原 Choregraphe WS#2
アトリエ秋葉原 Choregraphe WS#2アトリエ秋葉原 Choregraphe WS#2
アトリエ秋葉原 Choregraphe WS#2
 
Laravelチュートリアルを作ってみた。
Laravelチュートリアルを作ってみた。Laravelチュートリアルを作ってみた。
Laravelチュートリアルを作ってみた。
 
俺と otoya
俺と otoya俺と otoya
俺と otoya
 
Ansibleで始めるpostgre sqlの冗長化
Ansibleで始めるpostgre sqlの冗長化Ansibleで始めるpostgre sqlの冗長化
Ansibleで始めるpostgre sqlの冗長化
 
ジャストシステムJava100本ノックのご紹介
ジャストシステムJava100本ノックのご紹介ジャストシステムJava100本ノックのご紹介
ジャストシステムJava100本ノックのご紹介
 
Javaに這いよる.NET
Javaに這いよる.NETJavaに這いよる.NET
Javaに這いよる.NET
 
Html5nagoya20130910
Html5nagoya20130910Html5nagoya20130910
Html5nagoya20130910
 
Java素人がeclipseプラグインを作るためにやったこと
Java素人がeclipseプラグインを作るためにやったことJava素人がeclipseプラグインを作るためにやったこと
Java素人がeclipseプラグインを作るためにやったこと
 
PHPでセキュリティを真面目に考える
PHPでセキュリティを真面目に考えるPHPでセキュリティを真面目に考える
PHPでセキュリティを真面目に考える
 
LT資料 Azureで始めるWordPress
LT資料 Azureで始めるWordPressLT資料 Azureで始めるWordPress
LT資料 Azureで始めるWordPress
 

Jjug ナイト・セミナー くわっちょ 20140822