SlideShare uma empresa Scribd logo
1 de 96
Baixar para ler offline
PHP in Java -Quercus- による
レガシーマイグレーション
山下 竜司
株式会社アットウェア/Facebook4J
#jjug_ccc #ccc_r12
自己紹介
•山下 竜司

•株式会社アットウェア

•@roundrop

•Facebook4J - http://facebook4j.org
PHP: Hypertext Preprocessor
http://venturebeat.com/2013/05/17/google-app-engine-finally-supports-php-the-language-that-runs-75-of-the-web/
世界一 広まっている言語
世界一 dis られている言語
Quercus
https://www.flickr.com/photos/justinwkern/6140775849/
Quercus
•けっこう昔からあった
> svn log svn://svn.caucho.com/home/svn/svnroot/resin/trunk/modules/quercus
Quercus
•PHP (PHP5 相当) を Java 上で動かすことを
可能にする Java で実装されたエンジン
Quercus
•PHP (PHP5 相当) を Java 上で動かすことを
可能にする Java で実装されたエンジン

•オープンソース (ライセンスは GPL)
Quercus
•PHP (PHP5 相当) を Java 上で動かすことを
可能にする Java で実装されたエンジン

•オープンソース (ライセンスは GPL)

•Caucho Technology 社の商用アプリケーショ
ンサーバー Resin の一部
PHP アプリといえば
WordPress
WordPress on Quercus
デモ
WordPress on Quercus
デモ
!
https://gist.github.com/roundrop/4977262
Links
•Home

‣http://quercus.caucho.com/

•Change Log

‣http://caucho.com/resin-4.0/changes/changes.xtp

•ソースコード

‣ svn://svn.caucho.com/home/svn/svnroot/resin/trunk/modules/quercus

•バグトラッカー

‣ http://bugs.caucho.com/view_all_bug_page.php
見た目に反して
開発はわりとアクティブ
Quercus の構造
•実体は Servlet ※Servlet 以外の起動方法もあるが割愛
[web.xml]
<servlet>
<servlet-name>Quercus Servlet</servlet-name>
<servlet-class>
com.caucho.quercus.servlet.QuercusServlet
</servlet-class>
<init-param>
:
</servlet>
<servlet-mapping>
<servlet-name>Quercus Servlet</servlet-name>
<url-pattern>*.php</url-pattern>
</servlet-mapping>
Quercus の構造
QuercusServlet
Tomcat など
xxxx.php
1. phpファイル読込
2. 解析
3. 実行
PHP コードの再現力
•Quercus の PHP 再現力はかなりのもの

•(モノによるが) だいたい 90% 以上のコード
は動く

•逆に言うとある程度は改修・実装が必要

‣Quercus で未実装の PHP 関数の自前実装

‣対応していないシンタックスを調整 など
PHP コードの実行速度
•速い

•素の PHP より速くなる事例もある

•キャッシュ、コネクションプールなど Java
資産が使える

•プロダクションに投入できるレベル
PHP から Java のコードを呼び出せる
•Java 上での PHP コードの実行だけでなく、
PHP コードから Java のコードを呼び出せる
PHP から Java のコードを呼び出せる
•Java 上での PHP コードの実行だけでなく、
PHP コードから Java のコードを呼び出せる
<?php
import java.lang.System;
import java.util.Date;
$date = new Date();
System::out->println($date);
PHP から Java のコードを呼び出せる
QuercusServlet
Tomcat など
xxxx.php
Java コード
呼び出し
Java Class
つまり、
•PHP アプリを Tomcat 等の上で動かしつつ
つまり、
•PHP アプリを Tomcat 等の上で動かしつつ

•これからつくる新機能は Java で開発したり
つまり、
•PHP アプリを Tomcat 等の上で動かしつつ

•これからつくる新機能は Java で開発したり

•PHP の処理の一部だけ Java に置き換えたり
つまり、
•PHP アプリを Tomcat 等の上で動かしつつ

•これからつくる新機能は Java で開発したり

•PHP の処理の一部だけ Java に置き換えたり
レガシーマイグレーションに使える
Java Application Server
(Tomcat など)
PHP
Java Application Server
(Tomcat など)
PHP
Java
(Spring等)
既存機能はPHPのまま 新機能はJava
Java Application Server
(Tomcat など)
PHP
Java
(Spring等)
既存機能はPHPのまま 新機能はJava
性能上のボトルネックだけ Java 化
Java Application Server
(Tomcat など)
PHP
Java
(Spring等)
既存機能はPHPのまま 新機能はJava
あまりにひどい部分だけ Java 化
性能上のボトルネックだけ Java 化
Java Application Server
(Tomcat など)
PHP
Java
(Spring等)
既存機能はPHPのまま 新機能はJava
あまりにひどい部分だけ Java 化
性能上のボトルネックだけ Java 化
スモールスタートしてから徐々に Java の範囲を
広げていき、最終的には PHP をなくす
実践
https://www.flickr.com/photos/pshab/1366448271/
まずは PHP をまともに動かす
PHP をまともに動かすまでの障壁
•文字化け

•Quercus が解釈できないシンタックス

•Quercus で未対応な PHP 関数
PHP をまともに動かすまでの障壁
•文字化け

•Quercus が解釈できないシンタックス

•Quercus で未対応な PHP 関数
文字化け対策
•既存 PHP アプリを Quercus 上で動かしてみ
たところ絶望的に文字化け
文字化け対策
•既存 PHP アプリを Quercus 上で動かしてみ
たところ絶望的に文字化け

•Java でつくる部分は UTF-8 にしたいので、
全体的に UTF-8 で統一したい
文字化け対策
•文字コードを UTF-8 に える

‣ソースコード

‣画面の charset

‣データベース

‣リソースファイル

‣:
文字化け対策
•Quercus は ISO-8859-1 前提で動作する

•unicode.semantics=on
‣on にすることで UTF-8 前提で動作するよ
うになる

‣php.ini に書いて Quercus に読み込ませる
文字化け対策
•QuercusServlet に ini-file パラメータを指定
[WEB-INF/php.ini]
unicode.semantics=on
!
[web.xml]
<servlet>
<servlet-name>Quercus Servlet</servlet-name>
<servlet-class>
com.caucho.quercus.servlet.QuercusServlet
</servlet-class>
<init-param>
<param-name>ini-file</param-name>
<param-value>WEB-INF/php.ini</param-value>
</init-param>
:
文字化け対策
QuercusServlet
Tomcat など
xxxx.php
php.ini
unicode.semantics=on
で動作モードを
ISO-8859-1 → UTF-8
に変更
文字化け対策
•文字化けの発生する可能性のある箇所

‣画面に記述した日本語の表示

‣GET/POST した日本語パラメータの表示

‣DB に入っている日本語の表示・登録

‣セッションに入れた日本語の表示

‣ファイル入力・出力

‣ログ  などなど
文字化け対策
•アップロードファイル名

‣最新版でも文字化け

‣ファイル名が重要な場合は commons-
fileupload の実装に差し替えるなどの対応
が必要

‣com.caucho.quercus.env.Post#fillPost()
文字化け対策
•UTF-8 以外でのレスポンス出力

‣Excel 前提だから CSV ファイルのダウン
ロードは SJIS で、といった要件のとき

‣“SJIS-win” → “Windows-31J”

‣print じゃなくて echo を使う
printf("%srn", mb_convert_encoding($data, "SJIS-win", "UTF-8"));
↓
echo mb_convert_encoding($data, "Windows-31J", "UTF-8")."rn";
PHP をまともに動かすまでの障壁
•文字化け

•Quercus が解釈できないシンタックス

•Quercus で未対応な PHP 関数
解釈できないシンタックス
•動的に変数名やクラス名を決定するシンタック
スは Quercus が解釈できない

!
!
!
!
‣そうしないように修正するしかない
$code = "red";
$color_{$code} = "..."; //$color_red = ..
$name = "Login";
$action = new {$name}Action(); //LoginAction
PHP をまともに動かすまでの障壁
•文字化け

•Quercus が解釈できないシンタックス

•Quercus で未対応な PHP 関数
未対応な PHP 関数
•Quercus は未実装関数を検知した場合、
UnimplementedException を投げる

•特にマルチバイト系の関数(mb_****) の未実装 or 不備が
多い

‣mb_convert_kana : 未実装

‣mb_send_mail : 不備

‣mb_encode_numericentity : 未実装  などなど
未対応な PHP 関数
•PHP 関数については同じ名前のメソッドがあ
るのでわりとわかりやすい
未対応な PHP 関数
•以下のいずれかで対応

‣自力で Quercus を改変してビルド

‣AOP でひっかけて実装

‣PHP の呼び出し箇所を Java 化する
PHP と Java を

結合してみる
PHP - Java 結合のポイント
•セッション情報

‣Quercus - JavaEE 間セッション情報共有

‣セッションタイムアウト設定

•PHP ファイルの配置方法

•ビューレイアウト共有
PHP - Java 結合のポイント
•セッション情報

‣Quercus - JavaEE 間セッション情報共有

‣セッションタイムアウト設定

•PHP ファイルの配置方法

•ビューレイアウト共有
Tomcat など
PHP Java
PHP 5.2 Spring など
$_SESSION
• Quercus を使っても、
 PHP のセッションと Java のセッションは別空間
 になる
!
HttpSession
Tomcat など
PHP Java
PHP 5.2 Spring など
$_SESSION
• Quercus を使っても、
 PHP のセッションと Java のセッションは別空間
 になる
• なんらかの方法で、2つの空間を同期する仕組みが
必要
HttpSession
Quercus-JavaEE セッション情報共有
•Quercus から HttpSession は参照できる

•PHP の auto_prepend 及び auto_append のしく
みが Quercus でも使えるのでこれで同期

‣auto_prepend

‣ Java(HttpSession) → PHP($_SESSION)

‣auto_append

‣ PHP($_SESSION) → Java(HttpSession)
auto_prepend/auto_append で同期
QuercusServlet
Tomcat など
xxxx.php
php.ini
auto_prepend.php
auto_prepend/auto_append で同期
QuercusServlet
Tomcat など
xxxx.php
php.ini
auto_append.php
PHP($_SESSION) → Java(HttpSession)
Java(HttpSession) → PHP($_SESSION)
auto_prepend/auto_append で同期
•php.ini に以下のように記述
auto_prepend_file=/path/to/before.php
auto_append_file=/path/to/after.php
[before.php: Java -> PHP]
<?php
session_start();
$request = quercus_servlet_request();
$session = $request->getSession();
$keys = $session->getAttributeNames();
while ($keys->hasMoreElements()) {
$key = $keys->nextElement();
$value = $session->getAttribute($key);
$_SESSION[$key] = $value;
}
[after.php: PHP -> Java]
<?php
session_start();
$request = quercus_servlet_request();
$session = $request->getSession();
foreach ($_SESSION as $key => $value) {
$session->setAttribute($key, $value);
}
Tomcat など
PHP Java
Quercus Spring など
$_SESSION
• session-config
‣ HttpSession にのみ適用される
!
!
!
!
HttpSession
Tomcat など
PHP Java
Quercus Spring など
$_SESSION
• session-config
‣ HttpSession にのみ適用される
• Quercus 管理の PHP セッション
‣ デフォルト 30 分で変更する手段なし?
‣ リフレクションで変更して Quercus がもってい
るタイマーを起動すればなんとかできる
HttpSession
セッションタイムアウト
•アプリケーション起動時に 1 回 Quercus が
もっているセッション管理のタイマーを起動
すれば OK

•コードは長いので Gist に書きました

‣https://gist.github.com/roundrop/
96edc5f4d7135e60a2d0
PHP - Java 結合のポイント
•セッション情報

‣Quercus - JavaEE 間セッション情報共有

‣セッションタイムアウト設定

•PHP ファイルの配置方法

•ビューレイアウト共有
PHP ファイルの配置
既存 PHP
Apache
htdocs (docルート)
include
機能A
index.php
いろいろ汚いの
機能B
PHP ファイルの配置
既存 PHP
Apache
htdocs (docルート)
include
機能A
index.php
いろいろ汚いの
Java アプリ
web ルート
WEB-INF
機能B
PHP ファイルの配置
既存 PHP
Apache
htdocs (docルート)
include
機能A
index.php
いろいろ汚いの
Java アプリ
web ルート
WEB-INF
機能B
PHP ファイルの配置
既存 PHP
Apache
htdocs (docルート)
include
機能A
index.php
いろいろ汚いの
Java アプリ
web ルート
WEB-INF
機能A
index.php
いろいろ汚いの
機能B 機能B
include
ドキュメントルートをwebルートとして配置
PHP ファイルの配置
既存 PHP
Apache
htdocs (docルート)
include
機能A
index.php
いろいろ汚いの
Java アプリ
web ルート
WEB-INF
機能A
index.php
いろいろ汚いの
機能B 機能B
include
ドキュメントルートをwebルートとして配置
PHP ファイルの配置
既存 PHP
Apache
htdocs (docルート)
include
機能A
index.php
いろいろ汚いの
Java アプリ
web ルート
WEB-INF
機能A
index.php
いろいろ汚いの
機能B 機能B
include
ドキュメントルートをwebルートとして配置
web ルートがきたなくなる
一部階層関係がかわってしまう
(この例だと htdocs と include)
PHP ファイルの配置
•階層関係重要

•こういうのありがち

!
!
!
!
•階層関係は変えないのが望ましい
htdocs/sub/hoge.php
!
<?php
define('_ROOT', "../..");
define('_INCLUDE', _ROOT."/include");
:
PHP ファイルの配置
既存 PHP
Apache
htdocs (docルート)
include
機能A
index.php
いろいろ汚いの
Java アプリ
web ルート
WEB-INF
機能B
PHP ファイルの配置
既存 PHP
Apache
htdocs (docルート)
include
機能A
index.php
いろいろ汚いの
Java アプリ
web ルート
WEB-INF
機能B
php
htdocs
機能A
index.php
いろいろ汚いの
機能B
include
1つのディレクトリにそのままの構成で配置
Web サーバーで *.php を /php/htdocs へプロキシーする
PHP ファイルの配置
•auto_prepend でサーバー変数を調整
$_SERVER['SCRIPT_NAME']
= str_replace("/php/htdocs", "", $_SERVER['SCRIPT_NAME']);
$_SERVER['SCRIPT_URL']
= str_replace("/php/htdocs", "", $_SERVER['SCRIPT_URL']);
$_SERVER['REQUEST_URI']
= str_replace("/php/htdocs", "", $_SERVER['REQUEST_URI']);
$_SERVER['PHP_SELF']
= str_replace("/php/htdocs", "", $_SERVER['PHP_SELF']);
$_SERVER['DOCUMENT_ROOT']
= $_SERVER['DOCUMENT_ROOT']."php/htdocs/";
PHP - Java 結合のポイント
•セッション情報

‣Quercus - JavaEE 間セッション情報共有

‣セッションタイムアウト設定

•PHP ファイルの配置方法

•ビューテンプレート共有
ビューテンプレート共有
•PHP と Java の両方が動いているとはいえ、
サイトとしては 1 つで、デザインも同じ

‣サイトのヘッダーやフッターなどの部品は
PHP と Java で共有したい

‣Java のテンプレートエンジンでデザインし
て、PHP でもそれを使うのが理想
ビューテンプレート共有
<?php
:
include_once 'header.php';
:
[コンテンツ]
:
<header>
デザインした内容
:
:
:
<header th:include="header...
:
[コンテンツ]
:
<header>
デザインした内容
:
PHP Java (Thymeleaf)
header.php header.html
ビューテンプレート共有
<?php
:
include_once 'header.php';
:
[コンテンツ]
:
<header>
デザインした内容
:
:
:
<header th:include="header...
:
[コンテンツ]
:
<header>
デザインした内容
:
PHP Java (Thymeleaf)
header.php header.html
デザインテンプレートが二重管理
DRY じゃない
ビューテンプレート共有
<?php
:
include_once 'header.php';
:
[コンテンツ]
:
:
:
<header th:include="header...
:
[コンテンツ]
:
PHP Java (Thymeleaf)
<header>
デザインした内容
:
<?php
import aa.bb.XxxReader;
print XxxReader::readHeader();
header.php header.html
:
:
<header th:include="header...
:
[コンテンツ]
:
ビューテンプレート共有
<?php
:
include_once 'header.php';
:
[コンテンツ]
:
PHP Java (Thymeleaf)
<header>
デザインした内容
:
<?php
import aa.bb.XxxReader;
print XxxReader::readHeader();
header.php header.html
PHP では
・Java テンプレートエンジンの html ファイルを読み込み
・テンプレートエンジン特有のアトリビュート(th: 等)を削除
・static 変数にキャッシュするなど
その他
その他
•PHP の一部を Java に置き換える

•ロギング

•コネクションプーリング
その他
•PHP の一部を Java に置き換える

•ロギング

•コネクションプーリング
PHP の一部を Java に置き換える
•PHP から Java を扱う

‣http://quercus.caucho.com/quercus-3.1/doc/
quercus.xtp#JavaPHPintegration

•import して使う方法

!
!
•new Java(“…”) する方法
<?php
import java.util.Date;
$a = new Date(123);
<?php
$a = new Java("java.util.Date", 123);
:
<?php
if ($user->is_premium) {
:
?>
<div><?php echo $user->name; ?></div>
<div>ここに表示項目を追加したい</div>
:
PHP の一部を Java に置き換える
PHP の一部を Java に置き換える
:
<?php
if ($user->is_premium) {
:
?>
<div><?php echo $user->name; ?></div>
<?php
import com.example.helper.StatusHelper;
?>
<div><?php echo StatusHelper::getLabel($user->status); ?></div>
:
PHP の一部を Java に置き換える
•Java の型 → PHP の型 の変換ルール

‣ http://quercus.caucho.com/quercus-3.1/doc/
quercus.xtp#MarshallingPHPtoJavaconversions

‣ 例えば java.util.List は array になる
<?php
import com.example.php.ContactLogic;
$logic = new ContactLogic();
$recents = $logic->getRecents();
foreach ($recents as $contact) {
$from = $contact["from"];
public final class ContactLogic {
:
public List<Contact> getRecents() {
:
その他
•PHP の一部を Java に置き換える

•ロギング

•コネクションプーリング
ロギング
•Quercus 内部では java.util.logging が使われている

•error_log 関数については、ログタイプ=0 の場合、
error_log ディレクティブに “syslog” を指定すると
java.util.logging.Logger で出力される

!
!
•jul-to-slf4j を使って SLF4J に集約するとよい
<?php
ini_set("error_log", "syslog");
error_log("メッセージ", 0);
その他
•PHP の一部を Java に置き換える

•ロギング

•コネクションプーリング
コネクションプーリング
•Quercus ならではの強力機能!

•mysql_connect(), pg_connect() や PDO で
JNDI から接続をとってきて使用できる

‣ $con = pg_connect(“java:comp/env/jdbc/mydb”);

‣ $pdo = new PDO(“pgsql:java:comp/env/jdbc/mydb”);

※PDO の場合は先頭に「データベース名:」が必要なので注意
コネクションプーリング
•Web サーバーのContext に jdbc リソースを追
加

•web.xml に以下を記述
<servlet>
<servlet-name>quercusServlet</servlet-name>
<servlet-class>
com.caucho.quercus.servlet.QuercusServlet
</servlet-class>
:
<init-param>
<param-name>database</param-name>
<param-value>jdbc/mydb</param-value>
</init-param>
:
Maven 形式 / JDK 7 でビルド可能な Quercus
を GitHub に置いています

https://github.com/roundrop/quercus

!
(サンプルコードもそのうち GitHub に置きます)
まとめ
•Quercus けっこううまく動く

•でも完璧ではないので、プロダクションレベ
ルで適用するには多少の労力をかける必要は
ある

•うまくハマれば「段階的に」PHP→Java へ進
化させられる
ありがとうございました

Mais conteúdo relacionado

Mais procurados

Java EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 FallJava EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 FallMasatoshi Tada
 
WildFly Swarm - Rightsize Your Java EE Apps
WildFly Swarm - Rightsize Your Java EE AppsWildFly Swarm - Rightsize Your Java EE Apps
WildFly Swarm - Rightsize Your Java EE AppsYoshimasa Tanabe
 
Java仮想マシンの実装技術
Java仮想マシンの実装技術Java仮想マシンの実装技術
Java仮想マシンの実装技術Kiyokuni Kawachiya
 
Java EEの話(仮)
Java EEの話(仮)Java EEの話(仮)
Java EEの話(仮)Satoshi Kubo
 
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~ CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~ SEGADevTech
 
20160521 大規模映像配信サービスの Java8による全面リニューアルの裏側
20160521 大規模映像配信サービスの Java8による全面リニューアルの裏側20160521 大規模映像配信サービスの Java8による全面リニューアルの裏側
20160521 大規模映像配信サービスの Java8による全面リニューアルの裏側賢 秋穂
 
Laravel5を使って開発してみた
Laravel5を使って開発してみたLaravel5を使って開発してみた
Laravel5を使って開発してみたTakeo Noda
 
WebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話すWebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話すTakaya Saeki
 
Open Liberty / WebSphere Liberty
Open Liberty / WebSphere LibertyOpen Liberty / WebSphere Liberty
Open Liberty / WebSphere LibertyTakakiyo Tanaka
 
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門泰 増田
 
めんどくさくない Scala #kwkni_scala
めんどくさくない Scala #kwkni_scalaめんどくさくない Scala #kwkni_scala
めんどくさくない Scala #kwkni_scalaKazuhiro Sera
 
JavaScript.Next
JavaScript.NextJavaScript.Next
JavaScript.Nextdynamis
 
.NET Compiler Platform
.NET Compiler Platform.NET Compiler Platform
.NET Compiler Platform信之 岩永
 
sbt, past and future / sbt, 傾向と対策
sbt, past and future / sbt, 傾向と対策sbt, past and future / sbt, 傾向と対策
sbt, past and future / sbt, 傾向と対策scalaconfjp
 
Spring frameworkが大好きなおはなし
Spring frameworkが大好きなおはなしSpring frameworkが大好きなおはなし
Spring frameworkが大好きなおはなしSatoshi Kisanuki
 
jjugccc2018 app review postmortem
jjugccc2018 app review postmortemjjugccc2018 app review postmortem
jjugccc2018 app review postmortemtamtam180
 
PlaySQLAlchemyORM2017.key
PlaySQLAlchemyORM2017.keyPlaySQLAlchemyORM2017.key
PlaySQLAlchemyORM2017.key泰 増田
 

Mais procurados (20)

Java EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 FallJava EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 Fall
 
WildFly Swarm - Rightsize Your Java EE Apps
WildFly Swarm - Rightsize Your Java EE AppsWildFly Swarm - Rightsize Your Java EE Apps
WildFly Swarm - Rightsize Your Java EE Apps
 
Java仮想マシンの実装技術
Java仮想マシンの実装技術Java仮想マシンの実装技術
Java仮想マシンの実装技術
 
Java EEの話(仮)
Java EEの話(仮)Java EEの話(仮)
Java EEの話(仮)
 
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~ CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
 
20160521 大規模映像配信サービスの Java8による全面リニューアルの裏側
20160521 大規模映像配信サービスの Java8による全面リニューアルの裏側20160521 大規模映像配信サービスの Java8による全面リニューアルの裏側
20160521 大規模映像配信サービスの Java8による全面リニューアルの裏側
 
Laravel5を使って開発してみた
Laravel5を使って開発してみたLaravel5を使って開発してみた
Laravel5を使って開発してみた
 
WebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話すWebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話す
 
Open Liberty / WebSphere Liberty
Open Liberty / WebSphere LibertyOpen Liberty / WebSphere Liberty
Open Liberty / WebSphere Liberty
 
Spring3.1概要x di
Spring3.1概要x diSpring3.1概要x di
Spring3.1概要x di
 
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
 
めんどくさくない Scala #kwkni_scala
めんどくさくない Scala #kwkni_scalaめんどくさくない Scala #kwkni_scala
めんどくさくない Scala #kwkni_scala
 
JavaScript.Next
JavaScript.NextJavaScript.Next
JavaScript.Next
 
.NET Compiler Platform
.NET Compiler Platform.NET Compiler Platform
.NET Compiler Platform
 
Jsug 20160422 slides
Jsug 20160422 slidesJsug 20160422 slides
Jsug 20160422 slides
 
sbt, past and future / sbt, 傾向と対策
sbt, past and future / sbt, 傾向と対策sbt, past and future / sbt, 傾向と対策
sbt, past and future / sbt, 傾向と対策
 
Spring frameworkが大好きなおはなし
Spring frameworkが大好きなおはなしSpring frameworkが大好きなおはなし
Spring frameworkが大好きなおはなし
 
WildFly Swarm In Progress
WildFly Swarm In ProgressWildFly Swarm In Progress
WildFly Swarm In Progress
 
jjugccc2018 app review postmortem
jjugccc2018 app review postmortemjjugccc2018 app review postmortem
jjugccc2018 app review postmortem
 
PlaySQLAlchemyORM2017.key
PlaySQLAlchemyORM2017.keyPlaySQLAlchemyORM2017.key
PlaySQLAlchemyORM2017.key
 

Destaque

HTML5で作るiPhoneアプリケーション
HTML5で作るiPhoneアプリケーションHTML5で作るiPhoneアプリケーション
HTML5で作るiPhoneアプリケーションだいすけ ふるかわ
 
Html5で作るiPhoneアプリケーション2010
Html5で作るiPhoneアプリケーション2010Html5で作るiPhoneアプリケーション2010
Html5で作るiPhoneアプリケーション2010だいすけ ふるかわ
 
第1回 始めてみよう Web 動画 〜 基礎編 まずは iPhone から
第1回 始めてみよう Web 動画 〜 基礎編 まずは iPhone から第1回 始めてみよう Web 動画 〜 基礎編 まずは iPhone から
第1回 始めてみよう Web 動画 〜 基礎編 まずは iPhone からKatz Ueno
 
(エンジニアから見た)
最近のスマートウォッチ事情
(エンジニアから見た)
最近のスマートウォッチ事情(エンジニアから見た)
最近のスマートウォッチ事情
(エンジニアから見た)
最近のスマートウォッチ事情Tomoya Yamamoto
 
<Yahoo!プロモーション広告>「iPhone 6」発売後はどうなる? 関連キーワード検索傾向
<Yahoo!プロモーション広告>「iPhone 6」発売後はどうなる? 関連キーワード検索傾向<Yahoo!プロモーション広告>「iPhone 6」発売後はどうなる? 関連キーワード検索傾向
<Yahoo!プロモーション広告>「iPhone 6」発売後はどうなる? 関連キーワード検索傾向Yahoo! JAPAN Marketing Solution
 
デブサミ2009: iPhone開発者座談会
デブサミ2009: iPhone開発者座談会デブサミ2009: iPhone開発者座談会
デブサミ2009: iPhone開発者座談会masayoshi takahashi
 
「iPhone 6s/6s Plus」発売前後の検索実績からみる、インターネットユーザー動向
「iPhone 6s/6s Plus」発売前後の検索実績からみる、インターネットユーザー動向「iPhone 6s/6s Plus」発売前後の検索実績からみる、インターネットユーザー動向
「iPhone 6s/6s Plus」発売前後の検索実績からみる、インターネットユーザー動向Yahoo! JAPAN Marketing Solution
 
Java ScriptでつくるはじめてのiPhoneAndroidゲーム開発体験ハンズオン
Java ScriptでつくるはじめてのiPhoneAndroidゲーム開発体験ハンズオンJava ScriptでつくるはじめてのiPhoneAndroidゲーム開発体験ハンズオン
Java ScriptでつくるはじめてのiPhoneAndroidゲーム開発体験ハンズオン健一 茂木
 
C#でiPhoneアプリ開発 with MonoTouch
C#でiPhoneアプリ開発 with MonoTouchC#でiPhoneアプリ開発 with MonoTouch
C#でiPhoneアプリ開発 with MonoTouchShin Ise
 
iPhoneアプリ開発を楽に楽しくするサイトまとめ
iPhoneアプリ開発を楽に楽しくするサイトまとめiPhoneアプリ開発を楽に楽しくするサイトまとめ
iPhoneアプリ開発を楽に楽しくするサイトまとめHiramatsu Ryosuke
 
HTML5@iPhoneゲーム開発
HTML5@iPhoneゲーム開発HTML5@iPhoneゲーム開発
HTML5@iPhoneゲーム開発h_kishi
 
Phone Appli「PA Sync」 説明資料
Phone Appli「PA Sync」 説明資料Phone Appli「PA Sync」 説明資料
Phone Appli「PA Sync」 説明資料PA_Hitomi
 
Office for iPad Office for iPhone 企業利用における問題点のまとめ
Office for iPad Office for  iPhone 企業利用における問題点のまとめOffice for iPad Office for  iPhone 企業利用における問題点のまとめ
Office for iPad Office for iPhone 企業利用における問題点のまとめadachiyosuke
 
コンピューター支援言語学習
コンピューター支援言語学習コンピューター支援言語学習
コンピューター支援言語学習Parisa Mehran
 
iPhone 5 の Wi-Fi ちゃんと動いてましたか? #yidev
iPhone 5 の Wi-Fi ちゃんと動いてましたか? #yideviPhone 5 の Wi-Fi ちゃんと動いてましたか? #yidev
iPhone 5 の Wi-Fi ちゃんと動いてましたか? #yidevTomohiro Kumagai
 
非It系総務の社内kintone促進 kintone Café japan
非It系総務の社内kintone促進 kintone Café japan非It系総務の社内kintone促進 kintone Café japan
非It系総務の社内kintone促進 kintone Café japannaoya takata
 
女性はグリー、男性はモバゲーのアプリデザインを支持!! -iphoneアプリデザイン調査-
女性はグリー、男性はモバゲーのアプリデザインを支持!! -iphoneアプリデザイン調査-女性はグリー、男性はモバゲーのアプリデザインを支持!! -iphoneアプリデザイン調査-
女性はグリー、男性はモバゲーのアプリデザインを支持!! -iphoneアプリデザイン調査-CREATIVE SURVEY
 
ニコニコ動画iPhoneアプリの作り方@スマートフォン2011講演資料
ニコニコ動画iPhoneアプリの作り方@スマートフォン2011講演資料ニコニコ動画iPhoneアプリの作り方@スマートフォン2011講演資料
ニコニコ動画iPhoneアプリの作り方@スマートフォン2011講演資料Kentaro Matsumae
 
Rubyを楽しくする第一歩!ブロックを理解する!
Rubyを楽しくする第一歩!ブロックを理解する!Rubyを楽しくする第一歩!ブロックを理解する!
Rubyを楽しくする第一歩!ブロックを理解する!Kanako Kobayashi
 
iPhoneアプリ無料でできるプロモーション15の活動
iPhoneアプリ無料でできるプロモーション15の活動iPhoneアプリ無料でできるプロモーション15の活動
iPhoneアプリ無料でできるプロモーション15の活動Hiromitsu Ishimori
 

Destaque (20)

HTML5で作るiPhoneアプリケーション
HTML5で作るiPhoneアプリケーションHTML5で作るiPhoneアプリケーション
HTML5で作るiPhoneアプリケーション
 
Html5で作るiPhoneアプリケーション2010
Html5で作るiPhoneアプリケーション2010Html5で作るiPhoneアプリケーション2010
Html5で作るiPhoneアプリケーション2010
 
第1回 始めてみよう Web 動画 〜 基礎編 まずは iPhone から
第1回 始めてみよう Web 動画 〜 基礎編 まずは iPhone から第1回 始めてみよう Web 動画 〜 基礎編 まずは iPhone から
第1回 始めてみよう Web 動画 〜 基礎編 まずは iPhone から
 
(エンジニアから見た)
最近のスマートウォッチ事情
(エンジニアから見た)
最近のスマートウォッチ事情(エンジニアから見た)
最近のスマートウォッチ事情
(エンジニアから見た)
最近のスマートウォッチ事情
 
<Yahoo!プロモーション広告>「iPhone 6」発売後はどうなる? 関連キーワード検索傾向
<Yahoo!プロモーション広告>「iPhone 6」発売後はどうなる? 関連キーワード検索傾向<Yahoo!プロモーション広告>「iPhone 6」発売後はどうなる? 関連キーワード検索傾向
<Yahoo!プロモーション広告>「iPhone 6」発売後はどうなる? 関連キーワード検索傾向
 
デブサミ2009: iPhone開発者座談会
デブサミ2009: iPhone開発者座談会デブサミ2009: iPhone開発者座談会
デブサミ2009: iPhone開発者座談会
 
「iPhone 6s/6s Plus」発売前後の検索実績からみる、インターネットユーザー動向
「iPhone 6s/6s Plus」発売前後の検索実績からみる、インターネットユーザー動向「iPhone 6s/6s Plus」発売前後の検索実績からみる、インターネットユーザー動向
「iPhone 6s/6s Plus」発売前後の検索実績からみる、インターネットユーザー動向
 
Java ScriptでつくるはじめてのiPhoneAndroidゲーム開発体験ハンズオン
Java ScriptでつくるはじめてのiPhoneAndroidゲーム開発体験ハンズオンJava ScriptでつくるはじめてのiPhoneAndroidゲーム開発体験ハンズオン
Java ScriptでつくるはじめてのiPhoneAndroidゲーム開発体験ハンズオン
 
C#でiPhoneアプリ開発 with MonoTouch
C#でiPhoneアプリ開発 with MonoTouchC#でiPhoneアプリ開発 with MonoTouch
C#でiPhoneアプリ開発 with MonoTouch
 
iPhoneアプリ開発を楽に楽しくするサイトまとめ
iPhoneアプリ開発を楽に楽しくするサイトまとめiPhoneアプリ開発を楽に楽しくするサイトまとめ
iPhoneアプリ開発を楽に楽しくするサイトまとめ
 
HTML5@iPhoneゲーム開発
HTML5@iPhoneゲーム開発HTML5@iPhoneゲーム開発
HTML5@iPhoneゲーム開発
 
Phone Appli「PA Sync」 説明資料
Phone Appli「PA Sync」 説明資料Phone Appli「PA Sync」 説明資料
Phone Appli「PA Sync」 説明資料
 
Office for iPad Office for iPhone 企業利用における問題点のまとめ
Office for iPad Office for  iPhone 企業利用における問題点のまとめOffice for iPad Office for  iPhone 企業利用における問題点のまとめ
Office for iPad Office for iPhone 企業利用における問題点のまとめ
 
コンピューター支援言語学習
コンピューター支援言語学習コンピューター支援言語学習
コンピューター支援言語学習
 
iPhone 5 の Wi-Fi ちゃんと動いてましたか? #yidev
iPhone 5 の Wi-Fi ちゃんと動いてましたか? #yideviPhone 5 の Wi-Fi ちゃんと動いてましたか? #yidev
iPhone 5 の Wi-Fi ちゃんと動いてましたか? #yidev
 
非It系総務の社内kintone促進 kintone Café japan
非It系総務の社内kintone促進 kintone Café japan非It系総務の社内kintone促進 kintone Café japan
非It系総務の社内kintone促進 kintone Café japan
 
女性はグリー、男性はモバゲーのアプリデザインを支持!! -iphoneアプリデザイン調査-
女性はグリー、男性はモバゲーのアプリデザインを支持!! -iphoneアプリデザイン調査-女性はグリー、男性はモバゲーのアプリデザインを支持!! -iphoneアプリデザイン調査-
女性はグリー、男性はモバゲーのアプリデザインを支持!! -iphoneアプリデザイン調査-
 
ニコニコ動画iPhoneアプリの作り方@スマートフォン2011講演資料
ニコニコ動画iPhoneアプリの作り方@スマートフォン2011講演資料ニコニコ動画iPhoneアプリの作り方@スマートフォン2011講演資料
ニコニコ動画iPhoneアプリの作り方@スマートフォン2011講演資料
 
Rubyを楽しくする第一歩!ブロックを理解する!
Rubyを楽しくする第一歩!ブロックを理解する!Rubyを楽しくする第一歩!ブロックを理解する!
Rubyを楽しくする第一歩!ブロックを理解する!
 
iPhoneアプリ無料でできるプロモーション15の活動
iPhoneアプリ無料でできるプロモーション15の活動iPhoneアプリ無料でできるプロモーション15の活動
iPhoneアプリ無料でできるプロモーション15の活動
 

Semelhante a PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12

【PHPカンファレンス福岡】PHP 5.3 + CakePHP 1.3 → PHP 7 + CakePHP 3 移行を決めた話
【PHPカンファレンス福岡】PHP 5.3 + CakePHP 1.3 → PHP 7 + CakePHP 3 移行を決めた話【PHPカンファレンス福岡】PHP 5.3 + CakePHP 1.3 → PHP 7 + CakePHP 3 移行を決めた話
【PHPカンファレンス福岡】PHP 5.3 + CakePHP 1.3 → PHP 7 + CakePHP 3 移行を決めた話Yuki Kanazawa
 
Weeklycms20120218
Weeklycms20120218Weeklycms20120218
Weeklycms20120218Yoshi Sakai
 
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境Masashi Shinbara
 
behatエクステンションの作り方
behatエクステンションの作り方behatエクステンションの作り方
behatエクステンションの作り方Ryo Tomidokoro
 
ChefユーザのためのAnsible入門
ChefユーザのためのAnsible入門ChefユーザのためのAnsible入門
ChefユーザのためのAnsible入門Mahito Ogura
 
PHPカンファレンス2014の懇親会飛び込みLT資料
PHPカンファレンス2014の懇親会飛び込みLT資料PHPカンファレンス2014の懇親会飛び込みLT資料
PHPカンファレンス2014の懇親会飛び込みLT資料Junichi Ishida
 
最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)Rui Hirokawa
 
ネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefnpsg
 
PHPで並列処理する ライブラリを作った
PHPで並列処理する ライブラリを作ったPHPで並列処理する ライブラリを作った
PHPで並列処理する ライブラリを作ったHironobu Saitoh
 
FukuokaPHP 3
FukuokaPHP 3FukuokaPHP 3
FukuokaPHP 3ichikaway
 
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 とPHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 とdo_aki
 
EC-CUBE + PHPUnit で 実践テスト駆動開発
EC-CUBE + PHPUnit で 実践テスト駆動開発EC-CUBE + PHPUnit で 実践テスト駆動開発
EC-CUBE + PHPUnit で 実践テスト駆動開発Kentaro Ohkouchi
 
今、最もイケてるPHPフレームワークLaravel4
今、最もイケてるPHPフレームワークLaravel4今、最もイケてるPHPフレームワークLaravel4
今、最もイケてるPHPフレームワークLaravel4アシアル株式会社
 
15分でCakePHPを始める方法(Nseg 2013-11-09 )
15分でCakePHPを始める方法(Nseg 2013-11-09 )15分でCakePHPを始める方法(Nseg 2013-11-09 )
15分でCakePHPを始める方法(Nseg 2013-11-09 )hiro345
 
Hive undocumented feature
Hive undocumented featureHive undocumented feature
Hive undocumented featuretamtam180
 
スクリプト言語PHP攻略法
スクリプト言語PHP攻略法スクリプト言語PHP攻略法
スクリプト言語PHP攻略法Rui Hirokawa
 
PHPCON_TOKYO_2022_Bigginer.pptx
PHPCON_TOKYO_2022_Bigginer.pptxPHPCON_TOKYO_2022_Bigginer.pptx
PHPCON_TOKYO_2022_Bigginer.pptxHideo Kashioka
 
Backlogでの Perlのつかいかた
Backlogでの PerlのつかいかたBacklogでの Perlのつかいかた
Backlogでの PerlのつかいかたRyuzo Yamamoto
 

Semelhante a PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12 (20)

【PHPカンファレンス福岡】PHP 5.3 + CakePHP 1.3 → PHP 7 + CakePHP 3 移行を決めた話
【PHPカンファレンス福岡】PHP 5.3 + CakePHP 1.3 → PHP 7 + CakePHP 3 移行を決めた話【PHPカンファレンス福岡】PHP 5.3 + CakePHP 1.3 → PHP 7 + CakePHP 3 移行を決めた話
【PHPカンファレンス福岡】PHP 5.3 + CakePHP 1.3 → PHP 7 + CakePHP 3 移行を決めた話
 
Weeklycms20120218
Weeklycms20120218Weeklycms20120218
Weeklycms20120218
 
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
 
behatエクステンションの作り方
behatエクステンションの作り方behatエクステンションの作り方
behatエクステンションの作り方
 
ChefユーザのためのAnsible入門
ChefユーザのためのAnsible入門ChefユーザのためのAnsible入門
ChefユーザのためのAnsible入門
 
PHPカンファレンス2014の懇親会飛び込みLT資料
PHPカンファレンス2014の懇親会飛び込みLT資料PHPカンファレンス2014の懇親会飛び込みLT資料
PHPカンファレンス2014の懇親会飛び込みLT資料
 
最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)
 
ネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chef
 
PHPで並列処理する ライブラリを作った
PHPで並列処理する ライブラリを作ったPHPで並列処理する ライブラリを作った
PHPで並列処理する ライブラリを作った
 
FukuokaPHP 3
FukuokaPHP 3FukuokaPHP 3
FukuokaPHP 3
 
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 とPHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
 
Niigata.pm #1
Niigata.pm #1Niigata.pm #1
Niigata.pm #1
 
EC-CUBE + PHPUnit で 実践テスト駆動開発
EC-CUBE + PHPUnit で 実践テスト駆動開発EC-CUBE + PHPUnit で 実践テスト駆動開発
EC-CUBE + PHPUnit で 実践テスト駆動開発
 
Haikara
HaikaraHaikara
Haikara
 
今、最もイケてるPHPフレームワークLaravel4
今、最もイケてるPHPフレームワークLaravel4今、最もイケてるPHPフレームワークLaravel4
今、最もイケてるPHPフレームワークLaravel4
 
15分でCakePHPを始める方法(Nseg 2013-11-09 )
15分でCakePHPを始める方法(Nseg 2013-11-09 )15分でCakePHPを始める方法(Nseg 2013-11-09 )
15分でCakePHPを始める方法(Nseg 2013-11-09 )
 
Hive undocumented feature
Hive undocumented featureHive undocumented feature
Hive undocumented feature
 
スクリプト言語PHP攻略法
スクリプト言語PHP攻略法スクリプト言語PHP攻略法
スクリプト言語PHP攻略法
 
PHPCON_TOKYO_2022_Bigginer.pptx
PHPCON_TOKYO_2022_Bigginer.pptxPHPCON_TOKYO_2022_Bigginer.pptx
PHPCON_TOKYO_2022_Bigginer.pptx
 
Backlogでの Perlのつかいかた
Backlogでの PerlのつかいかたBacklogでの Perlのつかいかた
Backlogでの Perlのつかいかた
 

PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12