43
Javaエンジニアのための “クラウド時代の過ごし方” 2016/5/24 鈴木雄介 グロースエクスパートナーズ株式会社 執行役員 日本Javaユーザーグループ 会長 Java Day Tokyo 2016

Javaエンジニアのための"クラウド時代の過ごし方" Java Day Tokyo 2016

Embed Size (px)

Citation preview

Page 1: Javaエンジニアのための"クラウド時代の過ごし方" Java Day Tokyo 2016

Javaエンジニアのための“クラウド時代の過ごし方”

2016/5/24

鈴木雄介グロースエクスパートナーズ株式会社 執行役員

日本Javaユーザーグループ 会長

Java Day Tokyo 2016

Page 2: Javaエンジニアのための"クラウド時代の過ごし方" Java Day Tokyo 2016

自己紹介

鈴木雄介• グロースエクスパートナーズ(株)

» 執行役員/アーキテクチャ事業本部長

» http://www.gxp.co.jp/

• 日本Javaユーザーグループ

» 会長

» http://www.java-users.jp/

• SNS

» http://arclamp.hatenablog.com/

» @yusuke_arclamp

1

Page 3: Javaエンジニアのための"クラウド時代の過ごし方" Java Day Tokyo 2016

Agenda

•クラウド時代とは何か

•クラウド時代のキーワード

»クラウド

»DevOps

»アジャイル

»マイクロサービスアーキテクチャ

•どう過ごすべきか?

•まとめ

2

Page 4: Javaエンジニアのための"クラウド時代の過ごし方" Java Day Tokyo 2016

クラウド時代とは何か

3

Page 5: Javaエンジニアのための"クラウド時代の過ごし方" Java Day Tokyo 2016

エンジニアの仕事

ソフトウェアを「作る」•仕様を決める

•エンジニアがコードを書く

以上

4

Page 6: Javaエンジニアのための"クラウド時代の過ごし方" Java Day Tokyo 2016

でも「作る」だけじゃ使えない

ソフトウェアを作っても…•インフラがないと意味がない

•リリースしないと意味がない

•停止したら意味がない

•使いやすくないと意味がない

•改善し続けないと意味がない

»仕様、性能…

5

Page 7: Javaエンジニアのための"クラウド時代の過ごし方" Java Day Tokyo 2016

クラウド時代とは

「作る」から「運営する」へ•「ソフトウェアを作る」より「サービスを運営する」ことが大事

•ソフトウェアは使ってもらってビジネス的な効果をあげないと意味がない

»売上が上がる

»経費が下がる

6

Page 8: Javaエンジニアのための"クラウド時代の過ごし方" Java Day Tokyo 2016

サービスを運営する

7

サービス機能

(コード)ITサービス

満足度

構造

開発 企画

運用 業務

プロセス

Page 9: Javaエンジニアのための"クラウド時代の過ごし方" Java Day Tokyo 2016

サービスを運営する

開発だけが重要ではない•全ての要素のバランスで成り立つ

»良いコードは大事(でも、それだけじゃない)

▸構造:システム構造、フレームワーク

▸プロセス:WF/アジャイル、ドキュメント

»ソフトウェアがITサービスとして安定稼働し、業務が回ってサービスとして価値を提供する

▸運用、業務、企画なども関わる

8

Page 10: Javaエンジニアのための"クラウド時代の過ごし方" Java Day Tokyo 2016

「作る」から「運営する」へ

サービス運営は終わらない活動•しかも、要求はどんどん変化していく

»初回リリースはゴールではなくスタート

•では、どうやって変化に適応し続けるか?

9

Page 11: Javaエンジニアのための"クラウド時代の過ごし方" Java Day Tokyo 2016

クラウド時代のキーワード

10

Page 12: Javaエンジニアのための"クラウド時代の過ごし方" Java Day Tokyo 2016

クラウド時代のキーワード

アジャイル

クラウド/DevOps

マイクロサービスアーキテクチャ

11

Page 13: Javaエンジニアのための"クラウド時代の過ごし方" Java Day Tokyo 2016

クラウド時代のキーワード

アジャイル

クラウド/DevOps

マイクロサービスアーキテクチャ

12

Page 14: Javaエンジニアのための"クラウド時代の過ごし方" Java Day Tokyo 2016

アジャイル

プロジェクトマネジメントの基本•計画する:QCDSを決める

•実行する:計画従って作業する

•計測する:計画と実績のズレを測る

•調整する:ズレに対応する(QCDSの変更)※QCDS:Quality(品質)、Cost(費用)、Delivery(期限)、Scope(機能)

•ウォーターフォールの限界

»計画が、そんなに精度よくできない

13

Page 15: Javaエンジニアのための"クラウド時代の過ごし方" Java Day Tokyo 2016

アジャイル

アジャイルの考え方•計画:精度が出るぐらい短期にする

»リソースは固定化する

•計測:動くソフトウェアで判断する

•調整:定期的に関係者全員で話し合う

•調整を重視したマネジメントスタイル

»WFは計画と効率を重視している

14

Page 16: Javaエンジニアのための"クラウド時代の過ごし方" Java Day Tokyo 2016

アジャイル

変化に適応するプロセス•「早く作る」ための手法ではない

»適切なものを適切なタイミングで作るための手法

»変更が多いなら調整タイミングを増やした方が無駄が少ない、と考える

»計画精度が高いならWFのほうが無駄が少ない

•企画から開発への流れにリズムをもたらす

15

Page 17: Javaエンジニアのための"クラウド時代の過ごし方" Java Day Tokyo 2016

クラウド時代のキーワード

アジャイル

クラウド/DevOps

マイクロサービスアーキテクチャ

16

Page 18: Javaエンジニアのための"クラウド時代の過ごし方" Java Day Tokyo 2016

クラウド

ソフトウェア化するハードウェア•狭義には「ハードウェアの仮想化」

•広義には「コンピューティングリソースにおける規模の経済と従量課金」

•重要:ソフトウェア定義されるハードウェア

»ハードウェアの操作がソフトウェア化される

»ハードウェアのコピーや自動化ができるようになる

»非機能要件がコーディングできる

17

Page 19: Javaエンジニアのための"クラウド時代の過ごし方" Java Day Tokyo 2016

クラウド

クラウドの類型化

18

ハードウェアネットワーク

仮想化OS

OS

ミドルウェア

コード

設定

データ

オンプレ IaaS PaaS SaaS

<ユーザーの管理範囲>

Page 20: Javaエンジニアのための"クラウド時代の過ごし方" Java Day Tokyo 2016

クラウド

Platform as a Service•特に注目すべきはPaaS

•ミドルウェア+稼働状態=PaaS

»OSSフレームワークは静的コンポーネント

»PaaSは動的コンポーネント

•使うことで制約を受けるが便利になる

19

Page 21: Javaエンジニアのための"クラウド時代の過ごし方" Java Day Tokyo 2016

クラウド

PaaSのレベル•低:AWS RDS

»DBMS+CPU+ストレージ+バックアップ+…

•中:AWS BeansTalk

»LB+APSV+監視+自動再起動+…

•高:Heroku

»Git+CI/CD+APSV+…

20

Page 22: Javaエンジニアのための"クラウド時代の過ごし方" Java Day Tokyo 2016

クラウド

クラウドネイティブ•クラウドを前提にしてシステムを作ること

»特にPaaSの活用

•クラウドの制約に従うことで効率化する

»オンプレの作り方をクラウドに持ってくるのではなく、クラウドに最適化されたやり方でアプリケーションを考え直す

»特に運用が楽になる

21

Page 23: Javaエンジニアのための"クラウド時代の過ごし方" Java Day Tokyo 2016

DevOps

継続的なリリースにために•変えていきたい開発 vs 安定させたい運用

»昔は「作る」と「動かす」を分離することが効率的だった

•でも、もっとリリース回数を増やしたい

»10回/日以上

22

Page 24: Javaエンジニアのための"クラウド時代の過ごし方" Java Day Tokyo 2016

DevOps

CI/CDの発展形•継続的インテグレーション

»レポジトリからのチェックアウト&自動テスト&自動ビルド

»ハードウェアの自動構成&自動デプロイ

•開発と運用の情報共有

»変更ログや通知の共有

»チャットbotによる自動通知

23

Page 25: Javaエンジニアのための"クラウド時代の過ごし方" Java Day Tokyo 2016

DevOps

カナリアリリース•カナリアリリース

»ブルーグリーンデプロイ、A/Bテスト

»本番環境を丸々コピーして新しいバージョンをリリースし、ユーザーのアクセス先を切り替えていく

•その先

»ダークカナリア:本番環境での機能テスト

»カオスモンキー:本番環境での再起動テスト

24

Page 26: Javaエンジニアのための"クラウド時代の過ごし方" Java Day Tokyo 2016

DevOps

運用を不要にしていく•理想は「運用の完全自動化」

»事件が起きたときの対応チームのみ

•開発時点で運用のことを考慮する

»運用しやすいように開発すればいいじゃん

»面倒なことはソフトウェアで自動化しよう

•開発から運用への流れにリズムをもたらす

25

Page 27: Javaエンジニアのための"クラウド時代の過ごし方" Java Day Tokyo 2016

クラウド時代のキーワード

アジャイル

クラウド/DevOps

マイクロサービスアーキテクチャ

26

Page 28: Javaエンジニアのための"クラウド時代の過ごし方" Java Day Tokyo 2016

マイクロサービスアーキテクチャ

サービス連携によるサービス•サービスの連携でサービスを実現する

»(小さな)サービスによって(大きな)サービスを動かす

»サービス=独立した非機能要件を持つシステム

•先進企業の仕組みを調べたら、似たような仕組みだったのでMSAと名付けた

»技術論が先ではないことに注意

27

Page 29: Javaエンジニアのための"クラウド時代の過ごし方" Java Day Tokyo 2016

マイクロサービスアーキテクチャ

変化するために分割する•モノリシックでは部分の変更が全体に波及する

»変更で大変なのは事前調査とテスト

•サービスに分割されていれば変更の影響はサービス内部にとどまる

»APIに変更がなく、データベースは共有しない

▸API自身もバージョン管理すればよい

»よって、サービスは、それぞれのサイクルでリリースできる

28

Page 30: Javaエンジニアのための"クラウド時代の過ごし方" Java Day Tokyo 2016

マイクロサービスアーキテクチャ

変化とサービス分割•「サービスが適切に分割されていれば」

»あるサービスの変更が他のサービスに影響したら意味がない

•サービス分割はドメインに従う

»ドメイン≒業務

»システムへの変更要求は業務に起因するので当然

»DDD(ドメイン駆動設計)

29

Page 31: Javaエンジニアのための"クラウド時代の過ごし方" Java Day Tokyo 2016

マイクロサービスアーキテクチャ

変化するための技術とプロセスの集合•より良いサービス運営に最適化した結果

»アジャイル、クラウド/DevOpsの流れの先

• MSAは「する」ではなく「なる」

»MSAにしたい、というのは危険な発想

»変化に適応するサービスを突き詰めると勝手にMSAになるはず

30

Page 32: Javaエンジニアのための"クラウド時代の過ごし方" Java Day Tokyo 2016

サービスを運営する

31

サービス機能

(コード)ITサービス

満足度

構造

開発 企画

運用 業務

プロセス

アジャイル

DevOps狭義のMSA

Page 33: Javaエンジニアのための"クラウド時代の過ごし方" Java Day Tokyo 2016

どう過ごすべきか?

32

Page 34: Javaエンジニアのための"クラウド時代の過ごし方" Java Day Tokyo 2016

クラウド時代のエンジニア

考えることが増えた•企画、開発、運用のすべてにエンジニアとしてやれることがある

»これまでが分業されすぎてきた

33

開発

企画

ITサービス運営

運用

サービス運営

企画+開発+運用

企画+開発+運用

企画+開発+運用

Page 35: Javaエンジニアのための"クラウド時代の過ごし方" Java Day Tokyo 2016

クラウド時代のエンジニア

Javaエンジニアの価値•「ちゃんとJavaでアプリが作れる」は価値

•加えて、サービス運営の視点を持つ

»例:開発生産性 < 保守性

▸解析性、変更性、試験性など

34

Page 36: Javaエンジニアのための"クラウド時代の過ごし方" Java Day Tokyo 2016

クラウド時代のエンジニア

エンジニアの生きる道 1/2•スペシャリストになる

»特定の技術やプロセスの専門家

»JavaのWebアプリ、SPA(JS)、AWS、Git+Jenkins、スクラム+開発ツール、UI/UX、ログ解析など

»「圧倒的な専門性」を軸にする

35

Page 37: Javaエンジニアのための"クラウド時代の過ごし方" Java Day Tokyo 2016

クラウド時代のエンジニア

エンジニアの生きる道 2/2•ゼネラリストになる

»分野をまたがってバランスを調整する役割

▸少なくとも業務と技術を跨ぐこと

»技術に立脚するならアーキテクト

▸エンタープライズ、ITサービス、Webアプリ、IoT、クラウド、データなど

▸業務に立脚するならビジネスプロデューサー、プロダクトオーナー、ITサービスデザイナなど

36

Page 38: Javaエンジニアのための"クラウド時代の過ごし方" Java Day Tokyo 2016

まとめ

37

Page 39: Javaエンジニアのための"クラウド時代の過ごし方" Java Day Tokyo 2016

まとめ

クラウド時代とは•「ソフトウェアを作る」から「サービスを運営する」へ

»使ってもらってビジネス的な効果をあげないと意味がない

•開発者だけではユーザーの価値にならない

38

Page 40: Javaエンジニアのための"クラウド時代の過ごし方" Java Day Tokyo 2016

まとめ

アジャイル、クラウド/DevOps•企画と開発の一体か

»定期的に調整しながら成果を出していく

•開発と運用の一体化

»ソフトウェア化するハードウェア

»クラウドネイティブへの移行

»面倒なことは自動化してしまえばいい

39

Page 41: Javaエンジニアのための"クラウド時代の過ごし方" Java Day Tokyo 2016

まとめ

マイクロサービスアーキテクチャ•サービス分割によるシステム構築

»変化の影響をサービス内に押し込めることでシステム全体として変化を許容する

»プロセス+技術の両輪

▸アジャイル、クラウド、DevOpsがベース

»サービス分割≒ドメイン分割

»「する」ではなく「なる」

40

Page 42: Javaエンジニアのための"クラウド時代の過ごし方" Java Day Tokyo 2016

まとめ

クラウド時代のJavaエンジニア•ソフトウェアを作るだけでは価値にならない

»ITによってサービスを運営することが価値

»よりよく運営するために何をすべきか?は、あらゆるエンジニアが考えるべきこと

•スペシャリストか、ゼネラリストか

»正解はないし、新しい職種も生まれてくる

41

Page 43: Javaエンジニアのための"クラウド時代の過ごし方" Java Day Tokyo 2016

宣伝

コミュニティに行こう•自分が悩んでいる道の先にいる人に会える

•そして、発信しよう

42

日本Javaユーザーグループhttp://www.java-users.jp/• 月1回のナイトセミナー• 年2回の1日イベント(CCC)