ウィザード審査2013

審査方法、提出論文


審査基準は「応募論文及びコード提出者がPHPの発展に貢献できる知識と発想力を持つこと」です。但し、以下が全て含まれる必要はないが、以下の点がウィザードとして評価されるべきことです。

— 論文について
○ 論文が実用的であることとコミュニティの中で議論・改善されたプロセスを経たことを示せること。
○ 論文で訴えるポイントが多角的・対極的に分析されているか。例えば、利便性とサーバ負荷の問題、汎用性と特化機能のメリット・デメリットなど。
○ 論文で訴えるポイントが定量的な数値として示せているか。

— PHPコードについて
○ プログラミングスタイルが統一されているか。
○ コメントから意図を読み取ることが可能か。

投票される方は以下の提出論文及びコードをご覧いただき、PHP技術者認定ウィザード2013にふさわしいかどうか、投票者の感覚で「可」「不可」「棄権」のいずれかで投票いただきました。

※その他審査基準投票方式の詳細についてはこちらをご覧ください。

審査結果


応募いただいた皆様、本当にありがとうございました。以下に審査結果を記載いたしますので、今後のご参考にしていただければ幸いでございます。

エントリーナンバー1 応募カテゴリ:フレームワーク・ウィザード


提出コンテンツのライセンス表記:論文はCC-BY。コードはFuelPHP部分はLGPL、WordPress部分はGPL、使用しているライブラリはそれぞれのライセンス

【結果】
不合格
※総投票数 21票 可4票 不可14票 棄権3票

審査委員長及びPHP技術者認定機構の講評
本 論文は、PHPが備えるリフレクション機能を用いて、ソースコードの解析を行うためのプログラムについて記述したものです。PHPにおいては、ネームス ペースなどの登場が背景となり、ライトウェイトでモダンなフレームワークは引き続き注目度の高いトピックの一つとなっています。そういった意味で、フレー ムワークの構造を簡易的に解析し、コードリーディングを支援してくれる本プログラムは、ツールとしての価値が高いものだと考えます。

一方、論文としての評価を検討するに当たっては、その論文の新規性や汎用性を考慮する必要があります。しかし、本論文が説明している内容は有用なツールの域を出ておらず、発想も新規性があるとは言えないものと判断しました。

論文においては、着眼点に新規性があるかどうか、そして、その結果に至る取り組みに汎用性があり共有する価値があるかどうか、が重要な判断基準となります。著者には本ツールをより汎化させると同時に、その課程のなかから新規性を見出す努力を期待したいと思います。

投票者のコメント(抜粋)
「ソースに処理内容のコメントを入れて頂きたい。 書き手のレベルで作成するのではなく、読み手がある程度理解できるような内容で記載して頂きたい。 この論文(ソースを含む)内容を理解するのに時間がかかるため棄権とさせて頂きます。」

「リ フレクションクラスの使い方は需要であり、フレームワークを学ぶ者の基礎知識として有効であると思われる。 そのため、このようなプログラムを作り、リフレクションクラスを理解することは大切であることは共感する。 しかし、コミュニティの中で議論・改善されたプロセスなど、実際に有益なものとなっているということが確認できなかった。 」

「コーディングスタイルが一部統一されていません。」

「昨 年度のウィザード審査を受けられた方の論文と推察します。 昨年度からの進展(特定のフレームワーク等に限定されないこと、簡易的なバージョン管理が行われること)が見受けられますが、それにより昨年度に指摘され ていた事項が達成できたのかどうか、判断することができませんでしたので、棄権させて頂きます。」

「詳細な情報が少なく事実に基づいた記述とは思えない。」

####以下、提出論文####
PHPには、リフレクションクラスが用意されている。PHPマニュアル(http://www.php.net/manual/ja/intro.reflection.php ) には、「クラス、インターフェイス、関数、メソッド、そして拡張モジュールについて リバースエンジニアリングを行うことができます」と記載されている。リフレクションを使うと、クラスのメソッドやコメント等の情報が取得できるため、プロ グラムのソースコードを調べるのに便利である。

この論文に添付したプログラム(fuelphpフォルダにあるプログラム。ライセンスは LGPL。以下本プログラムと呼ぶ)は、リフレクションクラスを利用し、フレームワークFuelPHP( http://fuelphp.com/ MIT License)のソースコードおよびフレームワーク上で作成したアプリケーションのソースコード検索・閲覧を可能にするものである。フレームワークの ソースコードを閲覧しやすくすることで、より多くの開発者が、より頻繁にソースコードを読むようになることが期待できる。その結果、フレームワークの理解 度を高めることができ、開発効率に寄与すると考えられる。また初級試験合格者が上級試験合格に向けてPHPを学ぶためにも役立つであろう。

本プログラムはPHP5.3.27およびFuelPHP1.7.1で動作することを確認している。テンプレートはPHPTAL1.2.2( http://phptal.org/ LGPL)を使用している。 http://phpwizard.sakura.tv/ にて動作確認できる。さくらインターネット株式会社のレンタルホスティングサービスを利用している。なお、本プログラムの作成にさくらインターネット株式会社は関与していない。

PHP のフレームワークはいくつかあるが、初級試験合格者がPHPをさらに深く学び、上級試験合格を目指して学習する、という観点でFuelPHPを採用した。 FuelPHPはPHP5.3以降で動作するフレームワークとして、新規に書かれている。PHPの古いバージョンと後方互換性を維持しようとするとコード が複雑になるケースがあるが、FuelPHPではこの問題が少ない。このため初級試験合格者がPHPをさらに深く学ぶとき、FuelPHPのソースコード は良い教材になると考えられる。またFuelPHPはPHP5.3から利用可能になった名前空間、クロージャ等を積極的に取り入れている。これらは上級試 験の出題範囲となっているため、FuelPHPのソースコードを読んで理解することにより、上級試験合格に大きく前進すると思われる。

本 プログラムの中核となるSourceViewクラス(fuel/app/classes/sourceview.php)は、PHPビルトインの ReflectionClassを継承したものである。クラス名を入力すると、クラスが定義されているファイルの行番号、クラスで定義されているメソッド 一覧とメソッドが定義されている行番号を取得する。$classinfo = new SourceView(クラス名);のように、SourceViewクラスのインスタンス生成時に調べたいクラスのクラス名を渡 す。$classinfo->outData();とoutDataメソッドを呼び出すことで、調べたいクラスのソースコードを取得することができ る。
SourceViewクラスは、FuelPHPに依存していないため、FuelPHP以外でも利用できる。自由に利用できるライセンス (LGPL)で公開しているため、自分のよく使うフレームワークやアプリケーションへ導入する事ができる。一例として、WordPress プラグインとして組み込んだ例を添付している (wordpressフォルダにあるプログラム。WordPress のプラグインのライセンスは GPL)。

本プログラムのトップページ http://phpwizard.sakura.tv/ では、主なクラスの詳細情報ページへのリンクを掲載している。検索窓でクラス名を入力する他に、これらのリンクをクリックしても詳細情報ページを閲覧できる。クラスの詳細情報ページ、例えば http://phpwizard.sakura.tv/index.php/methodlist/list/Fieldset では、左側にメソッド一覧を表示し、右側にソースコードを表示する。左側のメソッド一覧のメソッド名をクリックすると、右側のクラスのソースコード表示部分が、そのメソッドの定義部分を表示するようにスクロールする。スクロール機能はjQuery( http://jquery.com/ MIT License)で実装している。ソースコードの色付けは、prettify.js( http://code.google.com/p/google-code-prettify/ Apache License 2.0)を利用している。

本プログラムは、フレームワーク本体だけでなく、独自に追加した部分についても、検索することができる。たとえば、http://phpwizard.sakura.tv/ の 検索窓に「SourceView」と入力すると、私が独自作成したクラスSourceViewのソースコードを閲覧することができる。検索結果は FuelPHPのログ機能を用いており、Infoレベルのログを保存する設定にすることにより、検索結果を保存することができる。検索される回数の多いク ラスがある場合、それらをトップページに追加すると、より使い易くなるであろう。

プログラムのソースコードを閲覧する方法は、本プログラムに限らない。類似のものとして、PHPDocumentor( http://www.phpdoc.org/ ), PHPXRef( http://phpxref.sourceforge.net/ ) 等があげられる。これらは、HTML形式のファイルを生成する。仕様が固まった後にドキュメントを閲覧する場合には便利であるが、開発途上でソースコード が更新されるケースでは、更新の度にファイル生成作業が必要となる。一方、本プログラムは、ソースコードが更新されるケースを想定し、過去の閲覧記録の保 存機能、コード比較機能を実装している。

本プログラムでは、HTML5のローカルストレージ機能を利用して、閲覧した回数および前回閲覧 した日時をブラウザに保存している。また、過去のコードを一世代保存することにより、最新のコードと過去に閲覧したコードとの差分を表示できるようにして いる。差分表示の色付けは、mergely( http://mergely.com/ GPL, LGPL, MPL のトリプルライセンス)を利用している。最新のコードを閲覧するだけでなく、過去に閲覧したコードと比較して表示することにより、開発者がコード更新箇所を把握しやすくなり、開発効率を高めることができる。

類似のものと比較した場合、本プログラムにはリアルタイムに解析できるためコード更新時にHTMLファイルの再生成作業が不要、という管理を楽にするメリットだけではなく、ソースコード閲覧者がコード更新の有無および更新箇所を把握し易くする、というメリットがある。

本 プログラムは、アプリケーションを開発する者が効率よく開発するツールとしても、また初級試験合格者がPHPをさらに学ぶためのツールとしても役立つであ ろう。本プログラムを自由に利用できるライセンスで公開することで、より多くの人がPHPを深く理解することになり、ひいてはPHPの発展に繋がる。

※提出コードは以下よりダウンロードください。

エントリーナンバー2 応募カテゴリ:パフォーマンス・ウィザード


提出コンテンツのライセンス表記:GPL

【結果】
不合格
※総投票数 21票 可3票 不可18票

審査委員長及びPHP技術者認定機構の講評
PHP に限らず、プログラム作成の際に自分のソースコードが与える実行速度に留意することは非常に重要です。特に高負荷環境にて稼働されるWebシステムにおい て、プログラム実行速度の向上はサーバー台数の削減やレスポンスタイムの短縮といった形で、運営者と利用ユーザーの双方にとってメリットを提供するもので す。その意味で、本論文は興味深く、継続的に研究される必要性があるテーマと考えます。

しかしながら、PHPにおいては、現在に至る成熟過程において、本論文にあるような言語構造や基本関数の速度ベンチマークは数多くの試行がなされています。そして、それらはインターネットや文献を通じて容易に参照できる状態にあります。

また、PHPの高速化手法については、本論文のテーマであるPHPコードの最適化のほかに、Zendエンジンの最適化や中間コードのキャッシュによる速度向上などのアプローチが考えられ、こういった言語処理系における改良の余地についても検討する必要があります。

今回審査するにあたっては、このような大局的な視点をなくして、PHPのパフォーマンス向上について論ずることはできない判断しました。しかし、引き続き著者がPHPプログラムの高速化手法について研究を進め、整理を行い、有用な成果を探求されることを期待します。

投票者のコメント(抜粋)
「高 負荷サイトを開発する際に気を付ける点である速度、メモリ使用量についての調査のまとめは評価にあたいするが、調査パターンが少なく各調査にたしてのコメ ントは少なく感じている。 調査結果を元に高負荷サイトを作成する際の注意点などまとめて記載をして頂きたい。 この論文は調査をするソースがあれば誰でも作成できる内容の為、「不可」とさせて頂きます。」

「ベンチマークの値についてはゆらぎがあります。結果に明らかな違いが認められない場合、結論を導くための具体的な検証として使うには、それだけでは弱い気がします。」

「プログラミングの基礎技術として興味の持てるもので、有意義な実験ではあるが、ウイザードに期待する実験結果とは思えなかった。 内容が基本的過ぎる気がします。」

「このように同じ役割をする基本構文を、パフォーマンスによって使い分けるという事は、高付加システムだけに関係するのではなく、基礎として重要な視点だと思う。」

「単 なる構文の比較では、新規性を感じられませんでした。 「高負荷サイト」の定義がなく、どのような場合に本論文の適用が可能なのかが見出せませんでした。 「(前略)高負荷システムの開発者たちによる現場でのノウハウにより、PHPのパフォーマンスを上げる、或いはパフォーマンスを損ねないための手法が確立 してきた」とあるにも関わらず、そのような手法についての言及もありません。 本論文はコーディングスタイルの取捨選択について、実測値による判断基準を提供しているように見えますが、十分な統計処理が行われておらず、コーディング 規約に反映する根拠となり得るほどの有意差があったのかどうかを判断できませんでした。 また、PHP5技術者認定上級試験では、PHP実装であるPHP_FUNCTION等を確認すること、必要であれば手を加えることにも知識範囲が及んでい る(14章 PHPの拡張)ことからも、コーディングによりパフォーマンスに差が出ているのであれば、その差がなぜ生まれるのかを示してほしかったと思います。 調査内容、考察も「~が早いと聞いていた」「~は遅いといわれてきた」「~は重いと言われている」との伝聞によるものがほとんどであり、高負荷サイトで実 際に問題となっている事象と受け取ることは困難です。  私は「PHP: The Right Way」を読むことの方を勧めたい。」

「主題には期待したが、中身が巷で言われているささいな違いでしかなく、逆に誤解を与える内容になってしまっている。 もっとアルゴリズムまで踏み込まないと、主題の問題はクリアできないと思える。」

「単 に実行時間との関連を調査するのであれば出力制御関数(flush系関数)との関連がどうなるかについて考察すべきです。 この程度の実行時間の差であれば、codeの記法について検討や考察を加味し、保守性等を考慮する方が生産性向上が見込めると考えます。 蛇足ですが、htmlの改行は終タグ存在しないので<br />と記述すべきです。」

「普段余り意識をしていなかったが書き方によってパフォーマンスに影響があることがわかり勉強になった。」

####以下、提出論文####
論文タイトル:「高負荷サイトを開発するPHPエンジニアにできること」
論文の本文は以下よりダウンロードください。


※提出コードは以下よりダウンロードください。