Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
あなたのプロジェクトが気軽にJavaをバージョンアップするために必要なこと
Search
Yu Watanabe
March 07, 2015
Technology
0
51
あなたのプロジェクトが気軽にJavaをバージョンアップするために必要なこと
Yu Watanabe
March 07, 2015
Tweet
Share
More Decks by Yu Watanabe
See All by Yu Watanabe
JUnitテストをCI環境で並列で実行する方法とその速度, スケーラビリティ
nabedge
5
2.6k
クラウド時代だからSpring-Retryフレームワーク
nabedge
0
280
ツール比較しながら語るO/RマッパーとDBマイグレーション
nabedge
0
140
JavaでWebサービスを作り続けるための戦略と戦術
nabedge
0
80
サーバーサイドな人がフロントエンド技術と仲良くするはじめの一歩
nabedge
0
66
Selenium再入門
nabedge
0
52
Webエンジニアがスタートダッシュをキメるためのローカル開発環境の勘所
nabedge
0
70
テストゼロからイチに進むための戦略と戦術
nabedge
0
79
jOOQってなんて読むの?から始めるSpringBootとO/Rマッパーの世界
nabedge
0
120
Other Decks in Technology
See All in Technology
Symfony AI in Action
el_stoffel
2
340
Capture Checking / Separation Checking 入門
tanishiking
0
110
Introduction to Sansan, inc / Sansan Global Development Center, Inc.
sansan33
PRO
0
2.9k
『星の世界の地図の話: Google Sky MapをAI Agentでよみがえらせる』 - Google Developers DevFest Tokyo 2025
taniiicom
0
460
機械学習を「社会実装」するということ 2025年冬版 / Social Implementation of Machine Learning November 2025 Version
moepy_stats
4
2.1k
ページの可視領域を算出する方法について整理する
yamatai1212
0
150
Bakuraku Engineering Team Deck
layerx
PRO
10
2.9k
AI開発の定着を推進するために揃えるべき前提
suguruooki
1
470
Master Dataグループ紹介資料
sansan33
PRO
1
4k
[続・営業向け 誰でも話せるOCI セールストーク] AWSよりOCIの優位性が分からない編(2025年11月21日開催)
oracle4engineer
PRO
1
210
意外と難しいドメイン駆動設計の話
zozotech
PRO
0
950
インフラ屋さんはAIコーディングエージェントとどう生きるか/How infrastructure engineers interact with Kiro
ozawa
2
110
Featured
See All Featured
Java REST API Framework Comparison - PWX 2021
mraible
34
9k
How GitHub (no longer) Works
holman
316
140k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
46
7.8k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.7k
Large-scale JavaScript Application Architecture
addyosmani
514
110k
Thoughts on Productivity
jonyablonski
73
4.9k
Learning to Love Humans: Emotional Interface Design
aarron
274
41k
Music & Morning Musume
bryan
46
7k
Stop Working from a Prison Cell
hatefulcrawdad
273
21k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
1
70
Testing 201, or: Great Expectations
jmmastey
46
7.8k
Transcript
あなたのプロジェクトが 気軽に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のバージョン上げて」と いうとインフラ担当者が嫌な顔をするから。 – とにかく上司を説得するのが面倒くさいから。 4
• 「がんばってJava5,6,7 から Java8にバージョン アップだ!」 – N年後 • 「もうJava11が出てるのにまだJava8使ってるの?」
• 同じやり方でやれば行き着く先は同じ。 – 大切なのは「バージョンアップする」ことではなくて 「バージョンアップしやすくする」こと。 5
JREとJDK • JDK=開発に必要なもの – ソースコードをコンパイルする – ローカル開発環境とJenkinsの中にあるもの • JRE=運用に必要なもの
– コンパイル済みのバイナリを実行する – テスト環境/本番環境の中にあるもの 6
JREとJDK • 「とりあえず全サーバにJDKが入っている」 のは何故? – A: 大は小を兼ねるから。 – A:
JDK/JREのインストールをインフラ担当者に任 せてしまうから。 – 実はこのあたりから「バージョンアップできない Java」が始まる 7
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を使う場合がある。 これらのツールはほとんどのシステムに存在するだろうが、アプリケーション が将来に渡って実行され得るすべてのシステムに存在するかどうか、あるい は将来のシステムでこのアプリケーションと互換性のあるバージョンが見つ かるかどうかについては何の保証もない。アプリケーションがシステムツー ルを必要とするならば、そのツールをアプリケーションに組み込むべきである。 14
• 「アプリケーションがシステムツールを必要と するならば、そのツールをアプリケーションに 組み込むべきである」 • 「アプリケーションが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を置いてもいい場所ですよ
1. そこは自動的にクラスパスに含まれます よ 18
前提 • Tomcatはインストール型ではなく ライブラリ型=組み込みtomcat=を使え。 19
組み込みTomcatとは • Tomcat 7.0.1x (2011年初頭)くらいか ら安定リリース • tomcat-‐embed-‐core-‐7.0.x.jar
• tomcat-‐embed-‐logging-‐log4j-‐7.0.x.jar 20
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
ビルド方法 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
リリース&実行方法 1. 前頁のビルド成果物をサーバ上で解凍する 2. export JAVA_HOME=解凍先ディレクトリ 3. $JAVA_HOME/bin/java
com.example.YourMain ※ -‐classpath=… を指定する必要は無い。 23
JREのバージョンup/down方法 • ビルドするときにjreのtarballのバージョンを変 えるだけ。 – これならインフラさんに迷惑かける必要ないよね。 24
まとめ • JDKとJREはちゃんと区別して考える。 • 全ての普通のjarに固める。 • APサーバは組み込みで。
– tomcat-‐embed, je8y… • JREもろともリリースせよ。 – ライブラリのjarの差し替えと同じ間隔でJREも差し 替えられるように。 – 実は古来から存在する普通の技です。 25
ありがとうございました! 26