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

1.2K Views

March 30, 15

スライド概要

第10回 #渋谷Java 登壇資料

profile-image

Engineer. Java, Kotlin(Server Side), JavaScript, Vue.js, Spring boot, CI/CD tool, build tool, monitoring, and activity as SRE

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

あなたのプロジェクトが   気軽にJavaをバージョンアップする ために必要なこと 第10回  #渋谷Java   2015-­‐3-­‐7(Sat)  

2.

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

3.

質問 • • • • Java8ですか?   Java7?   Java6?   Java5?   • まさかの古代言語? 3

4.

なぜ古いJavaを使い続けるのか? • バージョンを上げて何かあったら嫌だから   – 何かあったときにもとの古いJDK/JREに戻すのが 面倒くさい   – テストをやりなおすコスト   • 「全てのサーバのJDKのバージョン上げて」と いうとインフラ担当者が嫌な顔をするから。   – とにかく上司を説得するのが面倒くさいから。   4

5.

• 「がんばってJava5,6,7  から  Java8にバージョン アップだ!」   – N年後   • 「もうJava11が出てるのにまだJava8使ってるの?」   • 同じやり方でやれば行き着く先は同じ。   – 大切なのは「バージョンアップする」ことではなくて 「バージョンアップしやすくする」こと。 5

6.

JREとJDK • JDK=開発に必要なもの   – ソースコードをコンパイルする   – ローカル開発環境とJenkinsの中にあるもの   • JRE=運用に必要なもの   – コンパイル済みのバイナリを実行する   – テスト環境/本番環境の中にあるもの   6

7.

JREとJDK • 「とりあえず全サーバにJDKが入っている」   のは何故?   – A:  大は小を兼ねるから。   – A:  JDK/JREのインストールをインフラ担当者に任 せてしまうから。   – 実はこのあたりから「バージョンアップできない Java」が始まる   7

8.

JDKの切り替えなんて簡単 Eclipseの設定ダイアログ 8

9.

JDKの切り替えなんて簡単 Jenkinsの管理画面 9

10.

JREの切り替えはどうする? • JREを気軽にバージョンアップするためには?   • なんかあったらすぐ元に戻すためには? 10

11.

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

12.

h8p://12factor.net 12

13.

突然CM入れてみたりとか Javaな人、絶賛採用中 h8p://www.bizreach.co.jp/recruit/   13

14.

第2章「依存関係」の最後の段落 Twelve-­‐Factor  Appは、いかなるシステムツールの暗黙的な存在にも依存し ない。例として、アプリケーションからImageMagickやcurlを使う場合がある。 これらのツールはほとんどのシステムに存在するだろうが、アプリケーション が将来に渡って実行され得るすべてのシステムに存在するかどうか、あるい は将来のシステムでこのアプリケーションと互換性のあるバージョンが見つ かるかどうかについては何の保証もない。アプリケーションがシステムツー ルを必要とするならば、そのツールをアプリケーションに組み込むべきである。 14

15.

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

16.

• 実際のところどうすべきか?   – アプリにJREを組み込んでリリース物を作る   – JREにアプリを組み込んでリリース物を作る 16

17.

Java1.4からその機能はある 1.4,  5,6,7,8  全てほぼ同じことが書いてある 17

18.

公式マニュアルにはっきり書かれている 1. $JAVA_HOME=/var/lib/jre1.x.x_nn  だと して   2. $JAVA_HOME/lib/ext  の配下は自分で 作ったjarを置いてもいい場所ですよ   1. そこは自動的にクラスパスに含まれます よ 18

19.

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

20.

組み込みTomcatとは • Tomcat  7.0.1x  (2011年初頭)くらいか ら安定リリース   • tomcat-­‐embed-­‐core-­‐7.0.x.jar   • tomcat-­‐embed-­‐logging-­‐log4j-­‐7.0.x.jar 20

21.

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

22.

ビルド方法 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

23.

リリース&実行方法 1. 前頁のビルド成果物をサーバ上で解凍する   2. export  JAVA_HOME=解凍先ディレクトリ   3. $JAVA_HOME/bin/java  com.example.YourMain   ※  -­‐classpath=…  を指定する必要は無い。 23

24.

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

25.

まとめ • JDKとJREはちゃんと区別して考える。   • 全ての普通のjarに固める。   • APサーバは組み込みで。   – tomcat-­‐embed,  je8y…   • JREもろともリリースせよ。   – ライブラリのjarの差し替えと同じ間隔でJREも差し 替えられるように。   – 実は古来から存在する普通の技です。   25

26.

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