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

1,632 views

Published on

2017/05/28 Oracle Code Tour Japan in Kumamoto 登壇資料

Published in: Technology
  • Be the first to comment

今のJava

  1. 1. 今のJAVA 久保 智
  2. 2. 自己紹介 名前:久保智 株式会社ビジネスブレイン太田昭和所属  主に社内の技術サポート担当 日本Javaユーザーグループ幹事 今回の主催者
  3. 3. このセッションの目的 この後のセッションではたぶん新しい話題が出てく るので現状認識の共有 あと、念のため導入部分の説明
  4. 4. ここ10年での大きな課題 開発期間の短期化 機器スペックの多様化  巨大なモンスターマシン  IoT等機能の制限されたマシン  クラウド環境 リッチUI
  5. 5. 開発期間の短期化
  6. 6. リリースは一年後です
  7. 7. リリースは一年後です 要件定義(3ヶ月) 設計(3ヶ月) 実装(3ヶ月) テスト(3ヶ月)
  8. 8. リリースは一年後です ビジネスの速度が上がっており、1年後のリリース では対応が出来ない。 開発が終わった機能から少しずつ使っていきたい
  9. 9. 機能を分割しての開発
  10. 10. 機能を分割しての開発 機能を3つに分割 それぞれを4ヶ月かけて開発を行う 開発が終わった機能から順にリリース
  11. 11. 1番目の機能開発
  12. 12. 1番目の機能開発 要件定義(1ヶ月) 設計(1ヶ月) 実装(1ヶ月) テスト(1ヶ月)
  13. 13. 2番目の機能開発
  14. 14. 2番目の機能開発 要件定義(1ヶ月) 設計(1ヶ月) 実装(1ヶ月) テスト(1ヶ月)
  15. 15. 2番目の機能開発 要件定義(1ヶ月) 設計(1ヶ月) 実装(1ヶ月) テスト(1ヶ月)→1.5ヶ月 1番目の開発の回帰テストが追加で必要に
  16. 16. 3番目の機能開発 要件定義(1ヶ月) 設計(1ヶ月) 実装(1ヶ月) テスト(1ヶ月)→2ヶ月 1番目、2番目の開発の回帰テストが追加で必要に
  17. 17. 回帰テストの分 延びるのをどうにかしたい
  18. 18. 回帰テストの分延びるのをどうにかした い 回帰テストの自動化  テストの内容自体はすでに行っているテストのやり直し
  19. 19. 回帰テストの自動化
  20. 20. JUNIT
  21. 21. JUNIT Javaでデファクトスタンダードになっているテスト 実行ツール テストをコードで書く
  22. 22. JUNIT EXAMPLE
  23. 23. JUNIT EXAMPLE Assert#assertEqualsで値の検証
  24. 24. JUNIT RESULT(SUCCESS)
  25. 25. JUNIT RESULT(FAILTURE) 失敗時にはなぜ失敗したのかが表示される
  26. 26. JUNITの副作用(カバレッジの取得)
  27. 27. 回帰テスト工数は削減できた
  28. 28. もっと開発を早くしたい
  29. 29. テスト工数の削減
  30. 30. テスト工数の削減 ソースコードを見るだけで判るような不具合につい てはソースコードレビューで検知  実際に動かすという工数を削減 静的解析ツールの利用
  31. 31. 静的解析ツールの利用 既存のバグパターンに一致するものを見つけ出して くれる 昔から使われているlintが有名(lintはC言語用)
  32. 32. 静的解析ツールで発見できるバグ例 Javaでは文字列の比較には equalsメソッドを使用しなければいけない
  33. 33. JAVAの静的解析ツール FindBugs PMD CheckStype Checker Framework SonarLint その他……
  34. 34. テスト工数は削減できた
  35. 35. もっと開発を早くしたい
  36. 36. 何回も繰り返す作業を自動化しよう
  37. 37. ビルドの自動化
  38. 38. ビルドの自動化 ビルドツールの利用  Maven  Gradle  Ant CIツールの利用  Jenkins  Travis CI  CordShip  その他
  39. 39. ビルドツールとは ビルドをコマンドラインから実行できるようにして くれる
  40. 40. CIツールとは 高機能なCRON(タスクスケジューラー)  ファイルの変更監視とかも出来たり GUIを使ってタスクを管理できる
  41. 41. ビルドツール×CIツール 定期的なビルド 定期的な静的解析ツールの実行 定期的な回帰テスト
  42. 42. リリース(本番適用)の自動化
  43. 43. リリース(本番適用)の自動化 ワンクリックデプロイ
  44. 44. ワンクリックデプロイ ボタンひとつで本番環境にリリースできるようにし よう。 ビルドツールの使用やテストの自動化等、極力属人 性をなくした形でのリリース作業。
  45. 45. 45 開発者 バージョン管理システム 開発差分をバージョン管 理システムで管理 結合テスト環境 ステージング環境 本番環境 CIツール 変更監視 自動デプロイ コミットのタイミングで以下の処理を実施 ・ソースコードのコンパイル ・静的解析 ・自動テスト ・各種環境へのデプロイ
  46. 46. ここまでやると
  47. 47. ここまでやると 開発に3ヶ月とか時間をかけなくても済むようにな る  細かい作業単位でのリリース作業も可能に たとえば、Amazonでは1日最大1000回のリリース 作業を行っている  (参考) http://www.publickey1.jp/blog/12/amazon11000_aws_reinventday2_am.html 今のJavaは短期開発が普通になってます。
  48. 48. 機器スペックの多様化
  49. 49. マルチコアを使いやすく
  50. 50. マルチコアを使いやすく Stream APIを使用することで簡単にマルチコア(マ ルチスレッド)対応のコードを記述することが可能 に →非同期処理
  51. 51. JAVA 7以前の非同期処理
  52. 52. JAVA 8以降の非同期処理
  53. 53. 巨大なメモリへの対応
  54. 54. 巨大なメモリへの対応 G1GC  ヒープを1000~の細かい空間に分割してそれぞれGCを行う。  既存のFull GCに比べて停止時間を細かく制御することが出来る。
  55. 55. 小さい環境への対応
  56. 56. 小さい環境への対応 Compact Profiles Javaのサブセット https://www.slideshare.net/jclingan/whats-new-in-java-8-33517893
  57. 57. PROJECT JIGSAW Java 9で導入される Compact Profilesを洗練化したもの 現時点で猛反対にあっており先行きは不明  なお、リリース予定は7月
  58. 58. IoT(Internet of Things)
  59. 59. IoT(Internet of Things) 日本語だとモノのインターネット すべての情報機器や家電がインターネットに繋がる 時代 かつてはユビキタス社会と呼ばれていた
  60. 60. (参考)
  61. 61. セキュリティ対応
  62. 62. セキュリティ対応 セキュリティパッチの定例化  JREのバージョンアップしてますか? サーバー向けのServer JREの配布開始  クライアント向けJREからブラウザプラグイン等の機能をオミット したもの
  63. 63. JSON(データ形式)への対応
  64. 64. JSON (データ形式)への対応 ほぼすべてのデータのやり取りをJSONで行う時代  XMLはデータのオーバーヘッドが大きいため徐々に使用が限定的 に Javaの標準APIでのJSONへの対応へ  もちろん非標準では昔から対応していた
  65. 65. JSON (EXAMPLE)
  66. 66. クラウドへの対応
  67. 67. クラウドへの対応 インフラを社内で構築するのではなくクラウド環境 で構築することが増えてきた クラウドに対応した新しい開発アーキテクチャの登 場  マイクロサービスアーキテクチャ  リアクティブプログラミング  ノンブロッキングI/O  その他・・・・
  68. 68. マイクロサービスアーキテク チャ
  69. 69. マイクロサービスアーキテクチャ アプリケーションを小さく作ろう 小さく作ったアプリケーションを組み合わせてシス テムを構築しよう アプリケーション間の通信にはREST(json)を使用 しよう
  70. 70. マイクロサービスアーキテクチャ アプリケーションを小さく作ろう 小さく作ったアプリケーションを組み合わせてシス テムを構築しよう アプリケーション間の通信にはREST(json)を使用 しよう SOAを新しいアーキテクチャでやり直そう ※SOAとマイクロサービスアーキテクチャの提唱者は同じ
  71. 71. マイクロサービスアーキテクチャ たくさんの小さいサーバーを組み合わせることでス ケールしやすいクラウド環境に合っている クラウドベンダー側もベンダーロックインしやすい アーキテクチャなので絶賛お勧め中
  72. 72. リアクティブプログラミング
  73. 73. リアクティブプログラミング 多数のサーバー間(クラウド環境)でデータの変更を 同期するための方法論
  74. 74. リアクティブプログラミングのイメージ (EXCEL) A1を書き換えれば他のセルは勝手に書き換わる
  75. 75. リアクティブプログラミングのイメージ (EXCEL) サーバー1 サーバー2 サーバー3 サーバー4 それぞれのセルが別々のサーバーの場合どうやって変更する?
  76. 76. ノンブロッキングI/O
  77. 77. ノンブロッキングI/O リソースを効率よく使うための手法  クラウドを使っただけ課金されるため、リソースを効率よく使いた い Javaの場合、今のところノンブロッキングI/Oを利 用する手間が便利さに比べて高いためあまり普及し てない
  78. 78. クラウド対応の詳細については Sebastianさんのセッションで話されるはず?
  79. 79. リッチUI(サーバーサイド)
  80. 80. リッチUI(サーバーサイド) JavaScriptフレームワークの乱立  Angular.js  Backbone.js  Ember.js  Knockout.js  React.js  Vue.js  その他 サーバー/クライアント間のデータのやり取りは JSONを使用
  81. 81. リッチUI(クライアントサイド)
  82. 82. リッチUI(クライアントサイド) HiDPI対応 AWT、Swingに代わる新しいAPI郡(JavaFX)
  83. 83. その他新機能
  84. 84. その他新機能 新しい日付形式(Date and Time API) リソースのクローズ漏れを防ぐ新しい構文(try- with-resources) Java言語以外の言語向けのJVMの機能 (invokedynamic) などなど・・・・・・
  85. 85. JAVAは進化しています

×