Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
これからのJavaの
とっかかりを掴む
秋の関ジャバ祭り
#kanjava
@irof
Java Day Tokyo 2015
#jdt51
@irof
Javaエンジニア養成読本

Java入門
開発現場に伝えたい10のこと

道具に関するよしなしごと
関西Javaエンジニアの会
@irof
hoge駆動
レビュアー
これからする話
これまでのJavaを振り返って
いまどきのJavaの足場固め
これからのJavaのとっかかり
※プログラマ向け
しない話
Java 9以降の具体的な話
これまでのJavaを
振り返って
これまでのJava = Java SE 6あたり
「これまで」
に含まれるもの
ジェネリクス
enum
拡張for
アノテーション
Concurrency Utilities
これまでのJavaをイメージで話します
※個人の感想です
Java言語
Java言語
堅苦しい
静的型付けオブジェクト指向言語
冗長な構文
劣化XXX言語
保守的
古臭い
手間が多い
進化が遅い
処理が遅い
起動が遅い
よく使われている
ポストCOBOL
クラスベース
Java環境
Java環境
実績/事例が多い
30億のデバイスで動く
JVM
サーバーからモバイルまで
JVM言語
情報が得やすい
膨大なライブラリや
フレームワーク
充実した開発ツール
オープンソース
これまでのJavaのイメージ
言語はよく使われている
一方でネガティブな印象も強そう
環境は基本的にポジティブな感じ
以上が これまで の話
Javaは変わっています
(たぶん)
いまどきのJavaの
足場固め
いまどきのJava言語
いまどきのJava = Java 7, Java 8
コードとともにおさらい。
Java 7 - ピックアップ
Java SE 7 (JSR 336)
Project Coin (JSR 334)
NIO.2 (JSR 203)
JSR 334: Project Coin
try-with-resources
diamond operator
Coinでもよく使うもの
try-with-resources
Closeable resource = create();

try {

// resource を使う処理...

} finally {

resource.close();

}
try (Aut...
diamond operator
Map<String, List<Map<String, String>>> map

= new HashMap<String, List<Map<String,
String>>>();

Map<Stri...
他のCoinたち
バイナリリテラル
数値リテラルのアンダースコア
Strings switch
マルチキャッチ
他のCoinたち
バイナリリテラル
数値リテラルのアンダースコア
Strings switch
マルチキャッチ
リテラル
あんまり
書かない
String Switch
switch (str) {

case "java":

// ...

break;

case "groovy":

// ...

break;

default:

// ...

}
nullこわい
br...
マルチキャッチ
try {

this.getClass().getMethod("method").invoke(this);

} catch (IllegalAccessException

| NoSuchMethodException...
JSR 203: NIO.2
Javaでファイルを扱う気になれる(重要)
NIO.2
List<String> lines = new ArrayList<String>();

BufferedReader br = new BufferedReader(

new InputStreamReader(

new ...
Java 8 - ピックアップ
Java SE 8 (JSR 337)
Project Lambda (JSR 335)
Date and Time API (JSR 310)
JSR 335:
Project Lambda
Lambda Expression
Method Reference
Optional
Lambda Expression
(String arg) -> { /* なんか処理 */ }
arg -> /* なんか式 */
System.out::println
Method Reference
Optional
lambdaとの併用が基本
isPresent使うとイマイチ
nullを根絶やしにしてほしい
Optional<String> java = Optional.of(“java");


java.ifPresent(Syst...
JSR 310:
Date and Time API
Date / Time / DateTime
Local / Zoned
DateTimeFormatter
など……
あわせて見て欲しい
いまどきのJava環境
ライブラリやフレームワーク
IDE
ビルドシステム
ライブラリや
フレームワーク
相変わらずたくさんある
むしろ増える一方
世代交代や方向性の変動が起こってたり
Java EEやSpring Bootなどの流れ
IDE
Eclipseの独壇場から選択へ
Eclipse
NetBeans
IntelliJ IDEA
ビルドシステム
Ant/MavenからGradleへ?
一気に変わる気配はなさそう
徐々に変わっている印象はある
これまで 2 いまどき
言語
古臭さや冗長さは拭われつつある
環境
これまでをベースにより強力に
時に
いまどきのJava
使ってます?
いまどきのJava
なんか微妙な感じがする。なんで?
使える人がいない?
動かない?
使える人がいない?
使ってないものを使えるように、なんて

なるわけがない。
使ってないから使わないとか言ってると

いつまでも変わらない。
使える人がいない?
Java SE 7, 8 の情報は十分出回ってる
その辺を見て勉強している方々も居る
「使ったことない人が多い」なら、使えばい
いだけの話
使ったことのある人は増えることはあって
も減りはしないのだから
動かない?
バージョンアップしたら動かなくなると言う
話がちらほらと
Javaの互換性
ふつうに無理なこと
JDK8でふつうにコンパイルした
classファイルをJRE6は読めない
Lambda?
知らんがな……
とはいえ……
JRE6さん
後方互換性はほぼ問題無い
J2SE 1.4時代のコードは̶̶
だいたいJDK 8でコンパイル可能
J2SE 1.4時代のclassやjarは̶̶
だいたいJRE 8で実行可能
後方互換性はほぼ問題無い
J2SE 1.4時代のコードは̶̶
だいたいJDK 8でコンパイル可能
J2SE 1.4時代のclassやjarは̶̶
だいたいJRE 8で実行可能
運が悪いと事故る
変数名にenumを使っててコンパイルエラー
インタフェースにメソッドが増えてコンパイル
エラー
再コンパイルせず動かしたら実行時例外
リフレクションで取れる順番が変わって予期
しない例外
とは言えこれは運が悪い話
Java自体はともかく
ライブラリはつらい
対応していないライブラリがある
対応していないライブラリがある
対象ライブラリのアップデート
対応していないライブラリがある
対象ライブラリのアップデート
依存するライブラリのアップデート
依存するライブラリのアップデート
対応していないライブラリがある
対象ライブラリのアップデート
依存するライブラリのアップデート
依存するライブラリのアップデート依存するライブラリのアップデート
依存するライブラリのアップデート
依存するライブラリのアップデート
依存するライブ...
Jar Hell
昔はjarを手動でかき集めることによる作業地
獄を意味していた
ビルドツールが依存を自動で解決することで
終わったかに思えたが
最近はjar間の依存が堂々巡りすることによる
無間地獄を意味してるような気がする
ライブラリと互換性
クラスの統廃合、基底クラスやインタフェー
スの変更によりソース互換はあっさり損なわ
れてしまう(こともある)
リフレクションの動作や、クラスフォーマッ
トなど、通常の互換性ほど強固に守られてい
ないものに依存している(ことも...
ライブラリと互換性
Javaの強みのはずの「ライブラリの充実」
互換性を考えるとネックになる
バージョンアップ時は特に顕著
乗り越えないと いまどきのJava が使えない
とはいえ
適切な順番でバージョンあげていけば、意外
とすんなり上げられたりする。
メジャーバージョンアップ幾つかやったけど、
ハマるのは「またこいつか」という一部です。
なんとかなる
生きたJavaを使っていくためにも、いまどき
のJavaを知って使っていきましょう。
これからのJavaの
とっかかり
これからのJava
Project Jigsaw
Project Valhalla
Project Panama
最初に言った通り
この辺の話はしません
これまで → これから
一番の違いは「Java自身が成長する」こと
少し前にJava SE 7 が出て
その2年ちょい後にJava SE 8が出て
たぶん2年くらい後にJava SE 9が出る
10年前
2005/4
5年前
2010/4
J2SE 5.0
10年前
2005/4
5年前
2010/4
J2SE 5.0
Java SE 6
10年前
2005/4
5年前
2010/4
J2SE 5.0
Java SE 6 Java SE 7
10年前
2005/4
5年前
2010/4
J2SE 5.0
Java SE 6 Java SE 7
Java SE 8
10年前
2005/4
5年前
2010/4
J2SE 5.0
Java SE 6 Java SE 7
Java SE 8
10年前
2005/4
5年前
2010/4
約5年
5年のブランク
Java 5 から 6 を見送ったら契機を失った
Java 6 で作ったら機会が来なかった
上げられないまま動けなくなってしまった
J2SE 5.0
Java SE 6 Java SE 7
Java SE 8
約5年
とは言えこれからは更新されていくので、

着いていきたいところではある。
更新してみた話 その1
実行環境だけJava8にしてみた
コード、コンパイラはJava6のまま
ライブラリは更新せず
いけた→なんの問題もなく動いている
更新してみた話 その2
実行環境だけJava8にしてみた
コード、コンパイラはJava6のまま
ライブラリは更新せず
だめだった→実行環境のバージョン確認し
ているライブラリがあった……
更新してみた話 その3
コンパイラだけJava8にしてみた (target=1.6)
コード、実行環境はJava6のまま
ライブラリは更新せず
いけた→なんの問題もなく動いている
更新してみた話 その4
コンパイラ/実行環境ともにJava8にしてみた
コードはJava6のまま
ライブラリは更新せず
いけた→なぜか動いてしまった
けどlambda1つ書いた瞬間落ちた
これからのとっかかり
Javaは生きてて、元気に動き始めた
そんなJavaに振り落とされないために
言語のとっかかり
Lambdaについてこれてる?
GroovyやScalaなんかをやってた人は平然
と扱ってる
今後のJavaに追随するために別の言語にも触
れておくといいかも
環境のとっかかり
ビルドツールはより進化していくはず
もっと大きくな環境をビルドしそう
そのうちJar Hellを解消してくれるかも
現状でも理解しておけば十分な武器になる
前に進むならば
新旧の情報の見極めは難しくなっていく
不安なライブラリの組み合わせも
アダプタを実装する必要もあるかも
動かして検証する自動テストはますます重要
になってくると思う
留まる勇気
無理せず留まる選択肢も考慮に入れる
古いコード、古いコンパイラ、新しい実行
環境とかでもだいたい大丈夫
安全策をとるなら実行環境もサポート受けれ
(金でぶん殴ればなんとかなる)
End of Public Updates != EOL
20周年を迎え、Javaはますます元気
これからもJavaと共に行くために

お互いに情報出し合っていきませんか?
ご静聴ありがとうございました
Upcoming SlideShare
Loading in …5
×

これからのJavaのとっかかりを掴む #jdt51 #kanjava

1,325 views

Published on

結構たったけど公開してみた。変わってる状況もあれば、変わらない状況もあるなー。

JavaDayTokyo2015 (2015/4/8)
http://www.oracle.co.jp/jdt2015/
秋の関ジャバ祭り(2015/10/5)
http://kanjava.connpass.com/event/14086/

Published in: Technology

これからのJavaのとっかかりを掴む #jdt51 #kanjava

  1. 1. これからのJavaの とっかかりを掴む 秋の関ジャバ祭り #kanjava @irof Java Day Tokyo 2015 #jdt51 @irof
  2. 2. Javaエンジニア養成読本
 Java入門 開発現場に伝えたい10のこと
 道具に関するよしなしごと 関西Javaエンジニアの会 @irof hoge駆動 レビュアー
  3. 3. これからする話 これまでのJavaを振り返って いまどきのJavaの足場固め これからのJavaのとっかかり ※プログラマ向け
  4. 4. しない話 Java 9以降の具体的な話
  5. 5. これまでのJavaを 振り返って これまでのJava = Java SE 6あたり
  6. 6. 「これまで」 に含まれるもの ジェネリクス enum 拡張for アノテーション Concurrency Utilities
  7. 7. これまでのJavaをイメージで話します ※個人の感想です
  8. 8. Java言語
  9. 9. Java言語 堅苦しい 静的型付けオブジェクト指向言語 冗長な構文 劣化XXX言語 保守的 古臭い 手間が多い 進化が遅い 処理が遅い 起動が遅い よく使われている ポストCOBOL クラスベース
  10. 10. Java環境
  11. 11. Java環境 実績/事例が多い 30億のデバイスで動く JVM サーバーからモバイルまで JVM言語 情報が得やすい 膨大なライブラリや フレームワーク 充実した開発ツール オープンソース
  12. 12. これまでのJavaのイメージ 言語はよく使われている 一方でネガティブな印象も強そう 環境は基本的にポジティブな感じ
  13. 13. 以上が これまで の話
  14. 14. Javaは変わっています (たぶん)
  15. 15. いまどきのJavaの 足場固め
  16. 16. いまどきのJava言語 いまどきのJava = Java 7, Java 8 コードとともにおさらい。
  17. 17. Java 7 - ピックアップ Java SE 7 (JSR 336) Project Coin (JSR 334) NIO.2 (JSR 203)
  18. 18. JSR 334: Project Coin try-with-resources diamond operator Coinでもよく使うもの
  19. 19. try-with-resources Closeable resource = create();
 try {
 // resource を使う処理...
 } finally {
 resource.close();
 } try (AutoCloseable resource = create()) {
 // resource を使う処理...
 }
  20. 20. diamond operator Map<String, List<Map<String, String>>> map
 = new HashMap<String, List<Map<String, String>>>();
 Map<String, List<Map<String, String>>> map
 = new HashMap<>();
  21. 21. 他のCoinたち バイナリリテラル 数値リテラルのアンダースコア Strings switch マルチキャッチ
  22. 22. 他のCoinたち バイナリリテラル 数値リテラルのアンダースコア Strings switch マルチキャッチ リテラル あんまり 書かない
  23. 23. String Switch switch (str) {
 case "java":
 // ...
 break;
 case "groovy":
 // ...
 break;
 default:
 // ...
 } nullこわい breakめんどい ifで書くより
 行数多い
  24. 24. マルチキャッチ try {
 this.getClass().getMethod("method").invoke(this);
 } catch (IllegalAccessException
 | NoSuchMethodException
 | InvocationTargetException e) {
 // ...
 } try {
 this.getClass().getMethod("method").invoke(this);
 } catch (ReflectiveOperationException e) {
 // ...
 } リフレクションは基底例外クラスのcatchでよさげ
  25. 25. JSR 203: NIO.2 Javaでファイルを扱う気になれる(重要)
  26. 26. NIO.2 List<String> lines = new ArrayList<String>();
 BufferedReader br = new BufferedReader(
 new InputStreamReader(
 new FileInputStream(fileName), StandardCharsets.UTF_8));
 for (String line; (line = br.readLine()) != null; ) {
 lines.add(line);
 } List<String> lines = Files.readAllLines(path); 🌾close省略
  27. 27. Java 8 - ピックアップ Java SE 8 (JSR 337) Project Lambda (JSR 335) Date and Time API (JSR 310)
  28. 28. JSR 335: Project Lambda Lambda Expression Method Reference Optional
  29. 29. Lambda Expression (String arg) -> { /* なんか処理 */ } arg -> /* なんか式 */ System.out::println Method Reference
  30. 30. Optional lambdaとの併用が基本 isPresent使うとイマイチ nullを根絶やしにしてほしい Optional<String> java = Optional.of(“java"); 
 java.ifPresent(System.out::println);
  31. 31. JSR 310: Date and Time API Date / Time / DateTime Local / Zoned DateTimeFormatter など……
  32. 32. あわせて見て欲しい
  33. 33. いまどきのJava環境 ライブラリやフレームワーク IDE ビルドシステム
  34. 34. ライブラリや フレームワーク 相変わらずたくさんある むしろ増える一方 世代交代や方向性の変動が起こってたり Java EEやSpring Bootなどの流れ
  35. 35. IDE Eclipseの独壇場から選択へ Eclipse NetBeans IntelliJ IDEA
  36. 36. ビルドシステム Ant/MavenからGradleへ? 一気に変わる気配はなさそう 徐々に変わっている印象はある
  37. 37. これまで 2 いまどき 言語 古臭さや冗長さは拭われつつある 環境 これまでをベースにより強力に
  38. 38. 時に いまどきのJava 使ってます?
  39. 39. いまどきのJava なんか微妙な感じがする。なんで? 使える人がいない? 動かない?
  40. 40. 使える人がいない? 使ってないものを使えるように、なんて
 なるわけがない。 使ってないから使わないとか言ってると
 いつまでも変わらない。
  41. 41. 使える人がいない? Java SE 7, 8 の情報は十分出回ってる その辺を見て勉強している方々も居る 「使ったことない人が多い」なら、使えばい いだけの話 使ったことのある人は増えることはあって も減りはしないのだから
  42. 42. 動かない? バージョンアップしたら動かなくなると言う 話がちらほらと
  43. 43. Javaの互換性
  44. 44. ふつうに無理なこと JDK8でふつうにコンパイルした classファイルをJRE6は読めない Lambda? 知らんがな…… とはいえ…… JRE6さん
  45. 45. 後方互換性はほぼ問題無い J2SE 1.4時代のコードは̶̶ だいたいJDK 8でコンパイル可能 J2SE 1.4時代のclassやjarは̶̶ だいたいJRE 8で実行可能
  46. 46. 後方互換性はほぼ問題無い J2SE 1.4時代のコードは̶̶ だいたいJDK 8でコンパイル可能 J2SE 1.4時代のclassやjarは̶̶ だいたいJRE 8で実行可能
  47. 47. 運が悪いと事故る 変数名にenumを使っててコンパイルエラー インタフェースにメソッドが増えてコンパイル エラー 再コンパイルせず動かしたら実行時例外 リフレクションで取れる順番が変わって予期 しない例外 とは言えこれは運が悪い話
  48. 48. Java自体はともかく ライブラリはつらい
  49. 49. 対応していないライブラリがある
  50. 50. 対応していないライブラリがある 対象ライブラリのアップデート
  51. 51. 対応していないライブラリがある 対象ライブラリのアップデート 依存するライブラリのアップデート 依存するライブラリのアップデート
  52. 52. 対応していないライブラリがある 対象ライブラリのアップデート 依存するライブラリのアップデート 依存するライブラリのアップデート依存するライブラリのアップデート 依存するライブラリのアップデート 依存するライブラリのアップデート 依存するライブラリのアップデート つらい
  53. 53. Jar Hell 昔はjarを手動でかき集めることによる作業地 獄を意味していた ビルドツールが依存を自動で解決することで 終わったかに思えたが 最近はjar間の依存が堂々巡りすることによる 無間地獄を意味してるような気がする
  54. 54. ライブラリと互換性 クラスの統廃合、基底クラスやインタフェー スの変更によりソース互換はあっさり損なわ れてしまう(こともある) リフレクションの動作や、クラスフォーマッ トなど、通常の互換性ほど強固に守られてい ないものに依存している(こともある) 強力なライブラリほど傾向は強い(気がする)
  55. 55. ライブラリと互換性 Javaの強みのはずの「ライブラリの充実」 互換性を考えるとネックになる バージョンアップ時は特に顕著 乗り越えないと いまどきのJava が使えない
  56. 56. とはいえ 適切な順番でバージョンあげていけば、意外 とすんなり上げられたりする。 メジャーバージョンアップ幾つかやったけど、 ハマるのは「またこいつか」という一部です。
  57. 57. なんとかなる
  58. 58. 生きたJavaを使っていくためにも、いまどき のJavaを知って使っていきましょう。
  59. 59. これからのJavaの とっかかり
  60. 60. これからのJava Project Jigsaw Project Valhalla Project Panama 最初に言った通り この辺の話はしません
  61. 61. これまで → これから 一番の違いは「Java自身が成長する」こと 少し前にJava SE 7 が出て その2年ちょい後にJava SE 8が出て たぶん2年くらい後にJava SE 9が出る
  62. 62. 10年前 2005/4 5年前 2010/4
  63. 63. J2SE 5.0 10年前 2005/4 5年前 2010/4
  64. 64. J2SE 5.0 Java SE 6 10年前 2005/4 5年前 2010/4
  65. 65. J2SE 5.0 Java SE 6 Java SE 7 10年前 2005/4 5年前 2010/4
  66. 66. J2SE 5.0 Java SE 6 Java SE 7 Java SE 8 10年前 2005/4 5年前 2010/4
  67. 67. J2SE 5.0 Java SE 6 Java SE 7 Java SE 8 10年前 2005/4 5年前 2010/4 約5年
  68. 68. 5年のブランク Java 5 から 6 を見送ったら契機を失った Java 6 で作ったら機会が来なかった 上げられないまま動けなくなってしまった J2SE 5.0 Java SE 6 Java SE 7 Java SE 8 約5年
  69. 69. とは言えこれからは更新されていくので、
 着いていきたいところではある。
  70. 70. 更新してみた話 その1 実行環境だけJava8にしてみた コード、コンパイラはJava6のまま ライブラリは更新せず いけた→なんの問題もなく動いている
  71. 71. 更新してみた話 その2 実行環境だけJava8にしてみた コード、コンパイラはJava6のまま ライブラリは更新せず だめだった→実行環境のバージョン確認し ているライブラリがあった……
  72. 72. 更新してみた話 その3 コンパイラだけJava8にしてみた (target=1.6) コード、実行環境はJava6のまま ライブラリは更新せず いけた→なんの問題もなく動いている
  73. 73. 更新してみた話 その4 コンパイラ/実行環境ともにJava8にしてみた コードはJava6のまま ライブラリは更新せず いけた→なぜか動いてしまった けどlambda1つ書いた瞬間落ちた
  74. 74. これからのとっかかり Javaは生きてて、元気に動き始めた そんなJavaに振り落とされないために
  75. 75. 言語のとっかかり Lambdaについてこれてる? GroovyやScalaなんかをやってた人は平然 と扱ってる 今後のJavaに追随するために別の言語にも触 れておくといいかも
  76. 76. 環境のとっかかり ビルドツールはより進化していくはず もっと大きくな環境をビルドしそう そのうちJar Hellを解消してくれるかも 現状でも理解しておけば十分な武器になる
  77. 77. 前に進むならば 新旧の情報の見極めは難しくなっていく 不安なライブラリの組み合わせも アダプタを実装する必要もあるかも 動かして検証する自動テストはますます重要 になってくると思う
  78. 78. 留まる勇気 無理せず留まる選択肢も考慮に入れる 古いコード、古いコンパイラ、新しい実行 環境とかでもだいたい大丈夫 安全策をとるなら実行環境もサポート受けれ (金でぶん殴ればなんとかなる) End of Public Updates != EOL
  79. 79. 20周年を迎え、Javaはますます元気 これからもJavaと共に行くために
 お互いに情報出し合っていきませんか? ご静聴ありがとうございました

×