Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
あなたのプロジェクトが気軽にJavaをバージョンアップするために必要なこと
Search
Yu Watanabe
March 07, 2015
Technology
0
37
あなたのプロジェクトが気軽にJavaをバージョンアップするために必要なこと
Yu Watanabe
March 07, 2015
Tweet
Share
More Decks by Yu Watanabe
See All by Yu Watanabe
JUnitテストをCI環境で並列で実行する方法とその速度, スケーラビリティ
nabedge
5
2.3k
クラウド時代だからSpring-Retryフレームワーク
nabedge
0
210
ツール比較しながら語るO/RマッパーとDBマイグレーション
nabedge
0
92
JavaでWebサービスを作り続けるための戦略と戦術
nabedge
0
57
サーバーサイドな人がフロントエンド技術と仲良くするはじめの一歩
nabedge
0
50
Selenium再入門
nabedge
0
43
Webエンジニアがスタートダッシュをキメるためのローカル開発環境の勘所
nabedge
0
46
テストゼロからイチに進むための戦略と戦術
nabedge
0
56
jOOQってなんて読むの?から始めるSpringBootとO/Rマッパーの世界
nabedge
0
93
Other Decks in Technology
See All in Technology
白金鉱業Meetup_Vol.18_AIエージェント時代のUI/UX設計
brainpadpr
1
210
テストって楽しい!開発を加速させるテストの魅力 / Testing is Fun! The Fascinating of Testing to Accelerate Development
aiandrox
0
110
Winning at PHP in Production in 2025
beberlei
1
190
持続可能なドキュメント運用のリアル: 1年間の成果とこれから
akitok_
1
220
Oracle Cloud Infrastructure:2025年4月度サービス・アップデート
oracle4engineer
PRO
0
130
CodePipelineのアクション統合から学ぶAWS CDKの抽象化技術 / codepipeline-actions-cdk-abstraction
gotok365
5
300
Cross Data Platforms Meetup LT 20250422
tarotaro0129
1
760
今日からはじめるプラットフォームエンジニアリング
jacopen
8
1.7k
3月のAWSアップデートを5分間でざっくりと!
kubomasataka
0
130
SmartHR プロダクトエンジニア求人ガイド_2025 / PdE job guide 2025
smarthr
0
170
グループ ポリシー再確認 (2)
murachiakira
0
110
ワールドカフェI /チューターを改良する / World Café I and Improving the Tutors
ks91
PRO
0
130
Featured
See All Featured
How to Think Like a Performance Engineer
csswizardry
23
1.5k
Embracing the Ebb and Flow
colly
85
4.7k
Build The Right Thing And Hit Your Dates
maggiecrowley
35
2.6k
Fontdeck: Realign not Redesign
paulrobertlloyd
83
5.5k
Unsuck your backbone
ammeep
670
57k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.8k
GitHub's CSS Performance
jonrohan
1030
460k
Building an army of robots
kneath
305
45k
The Pragmatic Product Professional
lauravandoore
33
6.6k
Testing 201, or: Great Expectations
jmmastey
42
7.5k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
The Language of Interfaces
destraynor
157
25k
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