+ All Categories
Home > Documents > PHPからRubyへの変換ツール開発ruby-con.izumo-it.co.jp/ppt/siryou2.pdf1....

PHPからRubyへの変換ツール開発ruby-con.izumo-it.co.jp/ppt/siryou2.pdf1....

Date post: 10-Mar-2021
Category:
Upload: others
View: 7 times
Download: 0 times
Share this document with a friend
23
Copyright © Izumo Total Net All Rights PHP PHP から から Ruby Ruby への変換ツール開発 への変換ツール開発 平成22年2月13日(土) 平成22年2月13日(土) いずもトータルネット株式会社 いずもトータルネット株式会社 松江Ruby会議02 資料 松江Ruby会議02 資料
Transcript
Page 1: PHPからRubyへの変換ツール開発ruby-con.izumo-it.co.jp/ppt/siryou2.pdf1. Zend_FrameworkのJson.php (Jsonエンコード/デコードライブラリ) 2. Fpdf (PDFファイル生成ライブラリ)

Copyright© Izumo Total Net All Rights Reserved.

PHPPHPからからRubyRubyへの変換ツール開発への変換ツール開発

平成22年2月13日(土)平成22年2月13日(土)

  いずもトータルネット株式会社  いずもトータルネット株式会社

松江Ruby会議02 資料松江Ruby会議02 資料

Page 2: PHPからRubyへの変換ツール開発ruby-con.izumo-it.co.jp/ppt/siryou2.pdf1. Zend_FrameworkのJson.php (Jsonエンコード/デコードライブラリ) 2. Fpdf (PDFファイル生成ライブラリ)

Copyright© Izumo Total Net All Rights Reserved.

contents

1.開発目的

2.範囲

3.開発環境

4.概要

5.詳細

6.検証

7.今後の課題

ご説明内容

Page 3: PHPからRubyへの変換ツール開発ruby-con.izumo-it.co.jp/ppt/siryou2.pdf1. Zend_FrameworkのJson.php (Jsonエンコード/デコードライブラリ) 2. Fpdf (PDFファイル生成ライブラリ)

Copyright© Izumo Total Net All Rights Reserved.

1 開発目的

・プログラミング言語の中で、Rubyのシェアはまだまだ小さい。・Ruby経験者が少ない。・PHPで開発されたプログラム資産は多く存在する。・島根県内の自治体でのシステム開発でRubyでの開発が条件に なっている場合が多々ある。

『PHP⇒Ruby変換ツール』の必要性『PHP⇒Ruby変換ツール』の必要性

・Rubyでの開発数の増加。・Ruby経験者の増加。

◆ 現状

◆ 解決策

◆ 結果

Page 4: PHPからRubyへの変換ツール開発ruby-con.izumo-it.co.jp/ppt/siryou2.pdf1. Zend_FrameworkのJson.php (Jsonエンコード/デコードライブラリ) 2. Fpdf (PDFファイル生成ライブラリ)

Copyright© Izumo Total Net All Rights Reserved.

2 範囲

◆ PHPがカバーする領域とRubyへ変換の対象とする範囲

分類 変換の可否 コメント

言語(構文レベル) ○構文の記述レベルでの変換は可能

組み込み関数 △PHPと同等機能のRuby関数を作成すれば可能

PHPのみで記述されているもの

○ 上記レベルでの変換可能

一部にC言語で記述された箇所を含むもの

C言語レベルのインターフェイスを用意すれば可能

△SmartyのRuby版が存在する。

HTMLへのコード埋め込み

同等の機能を提供するErubyというライブラリが標準で提供されている。特殊タグ <% … %>

フレームワーク

拡張ライブラリ

pearライブラリ、peclライブラリ、その他

Smarty(テンプレートエンジン)

特殊タグ<? … ?>の中にPHPコードを埋め込む形式

ZendFrameWork、Ethna等

変数、式、演算子、制御構造等

PHP

ファイル/DB入出力、配列操作、文字列操作等

Page 5: PHPからRubyへの変換ツール開発ruby-con.izumo-it.co.jp/ppt/siryou2.pdf1. Zend_FrameworkのJson.php (Jsonエンコード/デコードライブラリ) 2. Fpdf (PDFファイル生成ライブラリ)

Copyright© Izumo Total Net All Rights Reserved.

3 開発環境

開発の前提条件

◆ Pure PHPで構成◆ PHP5.2までの構文に対応

• 5.3の新構文は構文解析のみ対応

方針

◆ まずは構文を1対1で変換◆ 問題点の洗い出し◆ 可読性を重視

Page 6: PHPからRubyへの変換ツール開発ruby-con.izumo-it.co.jp/ppt/siryou2.pdf1. Zend_FrameworkのJson.php (Jsonエンコード/デコードライブラリ) 2. Fpdf (PDFファイル生成ライブラリ)

Copyright© Izumo Total Net All Rights Reserved.

変換

4 概要(現状)

PHPソースコード

構文解析 パーサ

構文定義zend_language_parser.y

PHP_ParserGenerator(PEARライブラリより)

生成

PHPの抽象構文木

RubyRubyソースコードソースコード

トランスレータ

token_get_all(標準関数)

字句解析core.y

Page 7: PHPからRubyへの変換ツール開発ruby-con.izumo-it.co.jp/ppt/siryou2.pdf1. Zend_FrameworkのJson.php (Jsonエンコード/デコードライブラリ) 2. Fpdf (PDFファイル生成ライブラリ)

Copyright© Izumo Total Net All Rights Reserved.

4 概要(予定)

PHPソースコード

構文解析 パーサ

構文定義zend_language_parser.y

PHP_ParserGenerator(PEARライブラリより)

生成

PHPの抽象構文木

RubyRubyソースコードソースコード

トランスレータ

token_get_all(標準関数)

字句解析core.y

変換

Rubyの抽象構文木

静的コード解析

※点線部未実装

Page 8: PHPからRubyへの変換ツール開発ruby-con.izumo-it.co.jp/ppt/siryou2.pdf1. Zend_FrameworkのJson.php (Jsonエンコード/デコードライブラリ) 2. Fpdf (PDFファイル生成ライブラリ)

Copyright© Izumo Total Net All Rights Reserved.

5 詳細

Zend_language_parser.y

core.y

Page 9: PHPからRubyへの変換ツール開発ruby-con.izumo-it.co.jp/ppt/siryou2.pdf1. Zend_FrameworkのJson.php (Jsonエンコード/デコードライブラリ) 2. Fpdf (PDFファイル生成ライブラリ)

Copyright© Izumo Total Net All Rights Reserved.

5 詳細

抽象構文木

PHP

Ruby

Page 10: PHPからRubyへの変換ツール開発ruby-con.izumo-it.co.jp/ppt/siryou2.pdf1. Zend_FrameworkのJson.php (Jsonエンコード/デコードライブラリ) 2. Fpdf (PDFファイル生成ライブラリ)

Copyright© Izumo Total Net All Rights Reserved.

5 変換例(制御構造)

PHP Ruby

Page 11: PHPからRubyへの変換ツール開発ruby-con.izumo-it.co.jp/ppt/siryou2.pdf1. Zend_FrameworkのJson.php (Jsonエンコード/デコードライブラリ) 2. Fpdf (PDFファイル生成ライブラリ)

Copyright© Izumo Total Net All Rights Reserved.

5 変換例(クラス)

PHP Ruby

Page 12: PHPからRubyへの変換ツール開発ruby-con.izumo-it.co.jp/ppt/siryou2.pdf1. Zend_FrameworkのJson.php (Jsonエンコード/デコードライブラリ) 2. Fpdf (PDFファイル生成ライブラリ)

Copyright© Izumo Total Net All Rights Reserved.

5 変換例(Smarty)

10

Smarty

Page 13: PHPからRubyへの変換ツール開発ruby-con.izumo-it.co.jp/ppt/siryou2.pdf1. Zend_FrameworkのJson.php (Jsonエンコード/デコードライブラリ) 2. Fpdf (PDFファイル生成ライブラリ)

Copyright© Izumo Total Net All Rights Reserved.

5 詳細

11

基本的な構文に対してユニットテストを作成制御構造 変数

   if文 ローカル変数unless文 グローバル変数while文 多重代入do~while文 変数への代入until文 変数の破棄do~until文 未定義変数の使用制限for文 スコープforeach文(配列) 定数foreach文(連想配列)switch文ループ制御例外処理

クラス

演算子

 

 

定義

代数演算子

コンストラクタ

代入演算子

デストラクタ

ビット演算子

メンバ変数(定義)

比較演算子

メンバ変数(使用)

エラー制御演算子

継承

実行演算子

インスタンス生成

加算子/減算子

クラスメソッド(定義)

論理演算子

クラスメソッド(使用)

文字列演算子

親クラスのメソッド呼出し

配列演算子

アクセス制御

型演算子

interface

キャスト

関数 定義引数デフォルト値呼出し

Page 14: PHPからRubyへの変換ツール開発ruby-con.izumo-it.co.jp/ppt/siryou2.pdf1. Zend_FrameworkのJson.php (Jsonエンコード/デコードライブラリ) 2. Fpdf (PDFファイル生成ライブラリ)

Copyright© Izumo Total Net All Rights Reserved.

6 検証

12

変換テスト

1. Zend_FrameworkのJson.php(Jsonエンコード/デコードライブラリ)

2. Fpdf(PDFファイル生成ライブラリ)

自動変換したソースが動作するまで、どの程度手動修正が必要か?

※Jsonとは   JavaScriptにおけるオブジェクト表記法

Page 15: PHPからRubyへの変換ツール開発ruby-con.izumo-it.co.jp/ppt/siryou2.pdf1. Zend_FrameworkのJson.php (Jsonエンコード/デコードライブラリ) 2. Fpdf (PDFファイル生成ライブラリ)

Copyright© Izumo Total Net All Rights Reserved.

6 検証(Zend/Json)

13

テスト手順

◆ Zend/JsonをRubyに変換する• Zend/Json.php• Zend/Json/Decoder.php• Zend/Json/Expr.php• Zend/Json/Exception.php• Zend/Json/Encoder.php• Zend/Exception.php

◆ ライブラリの中で使用されている文字列や配列操作などのPHP組み込み関数のうち、約30個をRubyで実装する

◆ ZendFrameworkに同梱されているユニットテストJsonTest.phpをRubyのユニットテスト‘test/unit’用に書き直し、実行

Page 16: PHPからRubyへの変換ツール開発ruby-con.izumo-it.co.jp/ppt/siryou2.pdf1. Zend_FrameworkのJson.php (Jsonエンコード/デコードライブラリ) 2. Fpdf (PDFファイル生成ライブラリ)

Copyright© Izumo Total Net All Rights Reserved.

6 検証(Zend/Json)

14

テスト手順

実装した関数のリスト:require_once, is_object, isset, function_exists, is_array, is_int, is_float, is_string, str_replace, chr, strlen, ord, count, empty, array_keys, range, implode, dirname, define, basename, substr, in_array, is_numeric, is_bool, intval, floatval, method_exists, get_object_vars, get_class_vars, get_class, pack, bin2hex, extension_loaded, preg_match

Page 17: PHPからRubyへの変換ツール開発ruby-con.izumo-it.co.jp/ppt/siryou2.pdf1. Zend_FrameworkのJson.php (Jsonエンコード/デコードライブラリ) 2. Fpdf (PDFファイル生成ライブラリ)

Copyright© Izumo Total Net All Rights Reserved.

6 検証(Zend/Json)

15

テスト結果

• 初期化していない変数を使用している部分• 数値と文字列の変換エラーが発生している部分• 数値の1とboolのtrueを比較している部分• エンコーディング→ASCII-8BITに変更

32テスト中 成功:29,失敗:2,エラー:1 ※

エラー箇所を手で修正

※環境に依存するもの、内部構造に依存するもの(リフレクション機能など)    11テストを除く

Page 18: PHPからRubyへの変換ツール開発ruby-con.izumo-it.co.jp/ppt/siryou2.pdf1. Zend_FrameworkのJson.php (Jsonエンコード/デコードライブラリ) 2. Fpdf (PDFファイル生成ライブラリ)

Copyright© Izumo Total Net All Rights Reserved.

6 検証(Zend/Json)

16

テスト結果

エラー修正箇所の例

def _eatWhitespace()

matches = {} #手で追加

if preg_match('/([¥t¥b¥f¥n¥r ])*/s', @_source, matches, PREG_OFFSET_CAPTURE, @_offset) && matches[0][1] == @_offset

@_offset += strlen(matches[0][0])end

end

def self. _recursiveJsonExprFinder(value, javascriptExpressions, currentKey = nil)

if value.kind_of?(Zend_Json_Expr)magicKey = "____#{currentKey}" + "_" + (count(javascriptExpressions)).to_s #to_s追加

Page 19: PHPからRubyへの変換ツール開発ruby-con.izumo-it.co.jp/ppt/siryou2.pdf1. Zend_FrameworkのJson.php (Jsonエンコード/デコードライブラリ) 2. Fpdf (PDFファイル生成ライブラリ)

Copyright© Izumo Total Net All Rights Reserved.

6 検証(Zend/Json)

17

比較演算子==の差異

Page 20: PHPからRubyへの変換ツール開発ruby-con.izumo-it.co.jp/ppt/siryou2.pdf1. Zend_FrameworkのJson.php (Jsonエンコード/デコードライブラリ) 2. Fpdf (PDFファイル生成ライブラリ)

Copyright© Izumo Total Net All Rights Reserved.

6 検証(FPDF)

18

テスト手順

◆ fpdf.phpと、それが依存するPHPファイルをRubyに

変換する

◆ PHP組み込み関数をさらに19個rubyで実装• strtolower, strtoupper, strpos, …

◆ 同梱の7つのサンプル(tutorial/tuto1.php~tuto7.php)を変換して実行

Page 21: PHPからRubyへの変換ツール開発ruby-con.izumo-it.co.jp/ppt/siryou2.pdf1. Zend_FrameworkのJson.php (Jsonエンコード/デコードライブラリ) 2. Fpdf (PDFファイル生成ライブラリ)

Copyright© Izumo Total Net All Rights Reserved.

6 検証(FPDF)

19

テスト手順

Page 22: PHPからRubyへの変換ツール開発ruby-con.izumo-it.co.jp/ppt/siryou2.pdf1. Zend_FrameworkのJson.php (Jsonエンコード/デコードライブラリ) 2. Fpdf (PDFファイル生成ライブラリ)

Copyright© Izumo Total Net All Rights Reserved.

6 検証(FPDF)

20

テスト結果

• グローバル変数を認識できていない部分• 初期化していない変数を使用している部分• 数値と文字列の変換エラー• 文字列が空であるかどうか判断している部分• include()→eval('')

エラー箇所を手で修正

Tuto6.php以外表示できた

Page 23: PHPからRubyへの変換ツール開発ruby-con.izumo-it.co.jp/ppt/siryou2.pdf1. Zend_FrameworkのJson.php (Jsonエンコード/デコードライブラリ) 2. Fpdf (PDFファイル生成ライブラリ)

Copyright© Izumo Total Net All Rights Reserved.

7 今後の課題

21

◆ PHPの型の曖昧さ、動的型付けに起因する  

問題

◆ 変換仕様の策定

◆PHP5.3から導入された新しい構文への対応• 名前空間、goto


Recommended