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

6,693 views

Published on

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

Published in: Technology
0 Comments
21 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
6,693
On SlideShare
0
From Embeds
0
Number of Embeds
2,888
Actions
Shares
0
Downloads
25
Comments
0
Likes
21
Embeds 0
No embeds

No notes for slide

渋谷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

×