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をバージョンアップする
ために必要なこと	
第10回	
  #渋谷Java	
  
2015-­‐3-­‐7(Sat)	
  
自己紹介	
•  渡辺	
  
•  (株)ビズリーチ	
  
•  @nabedge	
  
•  h8p://mixer2.org	
  
•  h8p://nabedge.blogspot.jp	
  
2
質問	
•  Java8ですか?	
  
•  Java7?	
  
•  Java6?	
  
•  Java5?	
  
•  まさかの古代言語?	
3
なぜ古いJavaを使い続けるのか?	
•  バージョンを上げて何かあったら嫌だから	
  
– 何かあったときにもとの古いJDK/JREに戻すのが
面倒くさい	
  
– テストをやりなおすコスト	
  
•  「全てのサーバのJDKのバージョ...
•  「がんばってJava5,6,7	
  から	
  Java8にバージョン
アップだ!」	
  
– N年後	
  
•  「もうJava11が出てるのにまだJava8使ってるの?」	
  
•  同じやり方でやれば行き着く先は同じ。	
 ...
JREとJDK	
•  JDK=開発に必要なもの	
  
– ソースコードをコンパイルする	
  
– ローカル開発環境とJenkinsの中にあるもの	
  
•  JRE=運用に必要なもの	
  
– コンパイル済みのバイナリを実行する	
 ...
JREとJDK	
•  「とりあえず全サーバにJDKが入っている」	
  
のは何故?	
  
– A:	
  大は小を兼ねるから。	
  
– A:	
  JDK/JREのインストールをインフラ担当者に任
せてしまうから。	
  
– 実はこ...
JDKの切り替えなんて簡単	
8	
Eclipseの設定ダイアログ
JDKの切り替えなんて簡単	
9	
Jenkinsの管理画面
JREの切り替えはどうする?	
•  JREを気軽にバージョンアップするためには?	
  
•  なんかあったらすぐ元に戻すためには?	
10
去年のJJUG	
11	
当時の資料	
  
h8p://www.slideshare.net/nabedge/java-­‐the-­‐twelve-­‐factor-­‐app
h8p://12factor.net	
12
突然CM入れてみたりとか	
13	
Javaな人、絶賛採用中	
h8p://www.bizreach.co.jp/recruit/	
  
第2章「依存関係」の最後の段落	
Twelve-­‐Factor	
  Appは、いかなるシステムツールの暗黙的な存在にも依存し
ない。例として、アプリケーションからImageMagickやcurlを使う場合がある。
これらのツールはほとんどの...
•  「アプリケーションがシステムツールを必要と
するならば、そのツールをアプリケーションに
組み込むべきである」	
  
•  「アプリケーションがJREを必要とするならば、
JREをアプリケーションに組み込むべきであ
る」	
15
•  実際のところどうすべきか?	
  
– アプリにJREを組み込んでリリース物を作る	
  
– JREにアプリを組み込んでリリース物を作る	
16
Java1.4からその機能はある	
17	
1.4,	
  5,6,7,8	
  全てほぼ同じことが書いてある
公式マニュアルにはっきり書かれている	
1.  $JAVA_HOME=/var/lib/jre1.x.x_nn	
  だと
して	
  
2.  $JAVA_HOME/lib/ext	
  の配下は自分で
作ったjarを置いてもいい場所ですよ	...
前提	
•  Tomcatはインストール型ではなく	
  
ライブラリ型=組み込みtomcat=を使え。	
19
組み込みTomcatとは	
•  Tomcat	
  7.0.1x	
  (2011年初頭)くらいか
ら安定リリース	
  
•  tomcat-­‐embed-­‐core-­‐7.0.x.jar	
  
•  tomcat-­‐embed-...
public	
  stacc	
  void	
  main(String[]	
  args)	
  {	
  
	
  Tomcat	
  tomcat	
  =	
  new	
  Tomcat();	
  
	
  tomcat.se...
ビルド方法	
1.  自作のアプリをjarに固めておく	
  
2.  使用するフレームワークやライブラリのjarも
集めておく	
  
例:mvn	
  dependency:copy-­‐dependencies	
  
3.  tar	
...
リリース&実行方法	
1.  前頁のビルド成果物をサーバ上で解凍する	
  
2.  export	
  JAVA_HOME=解凍先ディレクトリ	
  
3.  $JAVA_HOME/bin/java	
  com.example.YourMa...
JREのバージョンup/down方法	
•  ビルドするときにjreのtarballのバージョンを変
えるだけ。	
  
– これならインフラさんに迷惑かける必要ないよね。	
  
24
まとめ	
•  JDKとJREはちゃんと区別して考える。	
  
•  全ての普通のjarに固める。	
  
•  APサーバは組み込みで。	
  
– tomcat-­‐embed,	
  je8y…	
  
•  JREもろともリリースせよ...
ありがとうございました!	
26
Upcoming SlideShare
Loading in …5
×

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

9,532 views

Published on

あなたのプロジェクトで気軽にjavaをバージョンアップするために必要なこと
第10回#渋谷Java トーク資料
at 株式会社ビズリーチ 2015.3

Published in: Technology

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

  1. 1. あなたのプロジェクトが   気軽にJavaをバージョンアップする ために必要なこと 第10回  #渋谷Java   2015-­‐3-­‐7(Sat)  
  2. 2. 自己紹介 •  渡辺   •  (株)ビズリーチ   •  @nabedge   •  h8p://mixer2.org   •  h8p://nabedge.blogspot.jp   2
  3. 3. 質問 •  Java8ですか?   •  Java7?   •  Java6?   •  Java5?   •  まさかの古代言語? 3
  4. 4. なぜ古いJavaを使い続けるのか? •  バージョンを上げて何かあったら嫌だから   – 何かあったときにもとの古いJDK/JREに戻すのが 面倒くさい   – テストをやりなおすコスト   •  「全てのサーバのJDKのバージョン上げて」と いうとインフラ担当者が嫌な顔をするから。   – とにかく上司を説得するのが面倒くさいから。   4
  5. 5. •  「がんばってJava5,6,7  から  Java8にバージョン アップだ!」   – N年後   •  「もうJava11が出てるのにまだJava8使ってるの?」   •  同じやり方でやれば行き着く先は同じ。   – 大切なのは「バージョンアップする」ことではなくて 「バージョンアップしやすくする」こと。 5
  6. 6. JREとJDK •  JDK=開発に必要なもの   – ソースコードをコンパイルする   – ローカル開発環境とJenkinsの中にあるもの   •  JRE=運用に必要なもの   – コンパイル済みのバイナリを実行する   – テスト環境/本番環境の中にあるもの   6
  7. 7. JREとJDK •  「とりあえず全サーバにJDKが入っている」   のは何故?   – A:  大は小を兼ねるから。   – A:  JDK/JREのインストールをインフラ担当者に任 せてしまうから。   – 実はこのあたりから「バージョンアップできない Java」が始まる   7
  8. 8. JDKの切り替えなんて簡単 8 Eclipseの設定ダイアログ
  9. 9. JDKの切り替えなんて簡単 9 Jenkinsの管理画面
  10. 10. JREの切り替えはどうする? •  JREを気軽にバージョンアップするためには?   •  なんかあったらすぐ元に戻すためには? 10
  11. 11. 去年のJJUG 11 当時の資料   h8p://www.slideshare.net/nabedge/java-­‐the-­‐twelve-­‐factor-­‐app
  12. 12. h8p://12factor.net 12
  13. 13. 突然CM入れてみたりとか 13 Javaな人、絶賛採用中 h8p://www.bizreach.co.jp/recruit/  
  14. 14. 第2章「依存関係」の最後の段落 Twelve-­‐Factor  Appは、いかなるシステムツールの暗黙的な存在にも依存し ない。例として、アプリケーションからImageMagickやcurlを使う場合がある。 これらのツールはほとんどのシステムに存在するだろうが、アプリケーション が将来に渡って実行され得るすべてのシステムに存在するかどうか、あるい は将来のシステムでこのアプリケーションと互換性のあるバージョンが見つ かるかどうかについては何の保証もない。アプリケーションがシステムツー ルを必要とするならば、そのツールをアプリケーションに組み込むべきである。 14
  15. 15. •  「アプリケーションがシステムツールを必要と するならば、そのツールをアプリケーションに 組み込むべきである」   •  「アプリケーションがJREを必要とするならば、 JREをアプリケーションに組み込むべきであ る」 15
  16. 16. •  実際のところどうすべきか?   – アプリにJREを組み込んでリリース物を作る   – JREにアプリを組み込んでリリース物を作る 16
  17. 17. Java1.4からその機能はある 17 1.4,  5,6,7,8  全てほぼ同じことが書いてある
  18. 18. 公式マニュアルにはっきり書かれている 1.  $JAVA_HOME=/var/lib/jre1.x.x_nn  だと して   2.  $JAVA_HOME/lib/ext  の配下は自分で 作ったjarを置いてもいい場所ですよ   1.  そこは自動的にクラスパスに含まれます よ 18
  19. 19. 前提 •  Tomcatはインストール型ではなく   ライブラリ型=組み込みtomcat=を使え。 19
  20. 20. 組み込みTomcatとは •  Tomcat  7.0.1x  (2011年初頭)くらいか ら安定リリース   •  tomcat-­‐embed-­‐core-­‐7.0.x.jar   •  tomcat-­‐embed-­‐logging-­‐log4j-­‐7.0.x.jar 20
  21. 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. 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. 23. リリース&実行方法 1.  前頁のビルド成果物をサーバ上で解凍する   2.  export  JAVA_HOME=解凍先ディレクトリ   3.  $JAVA_HOME/bin/java  com.example.YourMain   ※  -­‐classpath=…  を指定する必要は無い。 23
  24. 24. JREのバージョンup/down方法 •  ビルドするときにjreのtarballのバージョンを変 えるだけ。   – これならインフラさんに迷惑かける必要ないよね。   24
  25. 25. まとめ •  JDKとJREはちゃんと区別して考える。   •  全ての普通のjarに固める。   •  APサーバは組み込みで。   – tomcat-­‐embed,  je8y…   •  JREもろともリリースせよ。   – ライブラリのjarの差し替えと同じ間隔でJREも差し 替えられるように。   – 実は古来から存在する普通の技です。   25
  26. 26. ありがとうございました! 26

×