$30 off During Our Annual Pro Sale. View Details »

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

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

Yu Watanabe

March 07, 2015
Tweet

More Decks by Yu Watanabe

Other Decks in Technology

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  12. h8p://12factor.net
    12

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    18

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

  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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide