Top Banner
あなたのプロジェクトが 気軽にJavaをバージョンアップする ために必要なこと 10#渋谷Java 201537(Sat)
26

渋谷java−あなたのプロジェクトで気軽にjavaをバージョンアップするために必要なこと

Jul 17, 2015

Download

Technology

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 渋谷java−あなたのプロジェクトで気軽にjavaをバージョンアップするために必要なこと

あなたのプロジェクトが  気軽にJavaをバージョンアップする

ために必要なこと

第10回  #渋谷Java  2015-­‐3-­‐7(Sat)  

Page 2: 渋谷java−あなたのプロジェクトで気軽にjavaをバージョンアップするために必要なこと

自己紹介

• 渡辺  •  (株)ビズリーチ  • @nabedge  •  h8p://mixer2.org  •  h8p://nabedge.blogspot.jp  

2

Page 3: 渋谷java−あなたのプロジェクトで気軽にjavaをバージョンアップするために必要なこと

質問

•  Java8ですか?  •  Java7?  •  Java6?  •  Java5?  

•  まさかの古代言語?

3

Page 4: 渋谷java−あなたのプロジェクトで気軽にjavaをバージョンアップするために必要なこと

なぜ古いJavaを使い続けるのか?

•  バージョンを上げて何かあったら嫌だから  – 何かあったときにもとの古いJDK/JREに戻すのが面倒くさい  

– テストをやりなおすコスト  

•  「全てのサーバのJDKのバージョン上げて」というとインフラ担当者が嫌な顔をするから。  – とにかく上司を説得するのが面倒くさいから。  

4

Page 5: 渋谷java−あなたのプロジェクトで気軽にjavaをバージョンアップするために必要なこと

•  「がんばってJava5,6,7  から  Java8にバージョンアップだ!」  – N年後  

•  「もうJava11が出てるのにまだJava8使ってるの?」  

•  同じやり方でやれば行き着く先は同じ。  – 大切なのは「バージョンアップする」ことではなくて「バージョンアップしやすくする」こと。

5

Page 6: 渋谷java−あなたのプロジェクトで気軽にjavaをバージョンアップするために必要なこと

JREとJDK

•  JDK=開発に必要なもの  – ソースコードをコンパイルする  – ローカル開発環境とJenkinsの中にあるもの  

•  JRE=運用に必要なもの  – コンパイル済みのバイナリを実行する  – テスト環境/本番環境の中にあるもの  

6

Page 7: 渋谷java−あなたのプロジェクトで気軽にjavaをバージョンアップするために必要なこと

JREとJDK

•  「とりあえず全サーバにJDKが入っている」  のは何故?  – A:  大は小を兼ねるから。  – A:  JDK/JREのインストールをインフラ担当者に任せてしまうから。  

– 実はこのあたりから「バージョンアップできないJava」が始まる  

7

Page 8: 渋谷java−あなたのプロジェクトで気軽にjavaをバージョンアップするために必要なこと

JDKの切り替えなんて簡単

8

Eclipseの設定ダイアログ

Page 9: 渋谷java−あなたのプロジェクトで気軽にjavaをバージョンアップするために必要なこと

JDKの切り替えなんて簡単

9

Jenkinsの管理画面

Page 10: 渋谷java−あなたのプロジェクトで気軽にjavaをバージョンアップするために必要なこと

JREの切り替えはどうする?

•  JREを気軽にバージョンアップするためには?  •  なんかあったらすぐ元に戻すためには?

10

Page 11: 渋谷java−あなたのプロジェクトで気軽にjavaをバージョンアップするために必要なこと

去年のJJUG

11

当時の資料  h8p://www.slideshare.net/nabedge/java-­‐the-­‐twelve-­‐factor-­‐app

Page 12: 渋谷java−あなたのプロジェクトで気軽にjavaをバージョンアップするために必要なこと

h8p://12factor.net

12

Page 13: 渋谷java−あなたのプロジェクトで気軽にjavaをバージョンアップするために必要なこと

突然CM入れてみたりとか

13

Javaな人、絶賛採用中 h8p://www.bizreach.co.jp/recruit/  

Page 14: 渋谷java−あなたのプロジェクトで気軽にjavaをバージョンアップするために必要なこと

第2章「依存関係」の 後の段落

Twelve-­‐Factor  Appは、いかなるシステムツールの暗黙的な存在にも依存し

ない。例として、アプリケーションからImageMagickやcurlを使う場合がある。

これらのツールはほとんどのシステムに存在するだろうが、アプリケーション

が将来に渡って実行され得るすべてのシステムに存在するかどうか、あるい

は将来のシステムでこのアプリケーションと互換性のあるバージョンが見つ

かるかどうかについては何の保証もない。アプリケーションがシステムツー

ルを必要とするならば、そのツールをアプリケーションに組み込むべきである。

14

Page 15: 渋谷java−あなたのプロジェクトで気軽にjavaをバージョンアップするために必要なこと

•  「アプリケーションがシステムツールを必要とするならば、そのツールをアプリケーションに組み込むべきである」  

•  「アプリケーションがJREを必要とするならば、JREをアプリケーションに組み込むべきである」

15

Page 16: 渋谷java−あなたのプロジェクトで気軽にjavaをバージョンアップするために必要なこと

•  実際のところどうすべきか?  

– アプリにJREを組み込んでリリース物を作る  

–  JREにアプリを組み込んでリリース物を作る

16

Page 17: 渋谷java−あなたのプロジェクトで気軽にjavaをバージョンアップするために必要なこと

Java1.4からその機能はある

17

1.4,  5,6,7,8  全てほぼ同じことが書いてある

Page 18: 渋谷java−あなたのプロジェクトで気軽にjavaをバージョンアップするために必要なこと

公式マニュアルにはっきり書かれている

1.  $JAVA_HOME=/var/lib/jre1.x.x_nn  だとして  

2.  $JAVA_HOME/lib/ext  の配下は自分で作ったjarを置いてもいい場所ですよ  1.  そこは自動的にクラスパスに含まれますよ

18

Page 19: 渋谷java−あなたのプロジェクトで気軽にjavaをバージョンアップするために必要なこと

前提

•  Tomcatはインストール型ではなく  ライブラリ型=組み込みtomcat=を使え。

19

Page 20: 渋谷java−あなたのプロジェクトで気軽にjavaをバージョンアップするために必要なこと

組み込みTomcatとは

•  Tomcat  7.0.1x  (2011年初頭)くらいから安定リリース  

•  tomcat-­‐embed-­‐core-­‐7.0.x.jar  •  tomcat-­‐embed-­‐logging-­‐log4j-­‐7.0.x.jar

20

Page 21: 渋谷java−あなたのプロジェクトで気軽にjavaをバージョンアップするために必要なこと

public  stacc  void  main(String[]  args)  {    Tomcat  tomcat  =  new  Tomcat();    tomcat.setPort(8080);    tomcat.addWebapp("/”,      new  File(“/var/webAppDir)        .getAbsolutePath());    tomcat.start();    tomcat.getServer().await();  

} 21

Page 22: 渋谷java−あなたのプロジェクトで気軽にjavaをバージョンアップするために必要なこと

ビルド方法

1.  自作のアプリをjarに固めておく  2.  使用するフレームワークやライブラリのjarも集めておく  例:mvn  dependency:copy-­‐dependencies  

3.  tar  zxf  jre-­‐”N”uXX-­‐linux-­‐x64.tar.gz    4.  cp  [1,2のjar群]  jreNuXX/lib/ext/  5.  jreNuXX/配下を再びzipかtarballに固める

22

Page 23: 渋谷java−あなたのプロジェクトで気軽にjavaをバージョンアップするために必要なこと

リリース&実行方法

1.  前頁のビルド成果物をサーバ上で解凍する  2.  export  JAVA_HOME=解凍先ディレクトリ  3.  $JAVA_HOME/bin/java  com.example.YourMain  

※  -­‐classpath=…  を指定する必要は無い。

23

Page 24: 渋谷java−あなたのプロジェクトで気軽にjavaをバージョンアップするために必要なこと

JREのバージョンup/down方法

•  ビルドするときにjreのtarballのバージョンを変えるだけ。  – これならインフラさんに迷惑かける必要ないよね。  

24

Page 25: 渋谷java−あなたのプロジェクトで気軽にjavaをバージョンアップするために必要なこと

まとめ

•  JDKとJREはちゃんと区別して考える。  •  全ての普通のjarに固める。  •  APサーバは組み込みで。  –  tomcat-­‐embed,  je8y…  

•  JREもろともリリースせよ。  – ライブラリのjarの差し替えと同じ間隔でJREも差し替えられるように。  

– 実は古来から存在する普通の技です。  

25

Page 26: 渋谷java−あなたのプロジェクトで気軽にjavaをバージョンアップするために必要なこと

ありがとうございました!

26