Archive for the 'PHP' Category

継続的インテグレーションのススメ Jenkinsでテスト結果を表示

前回のお話でJenkinsとGitHubによる継続的インテグレーションの開発環境の設定を行いました。

GitHubとJenkins連動 自動デプロイ 開発環境設定編

今回は、継続的インテグレーションを行うにあたり実際にJenkinsでテストを実行した際に
「どんなテスト結果を表示してくれるのか?」ということをご紹介したいと思います。

現在FuelPHPを用いて開発を行なっているためここでのテストの実行にはPHPUnitを使用して行っています。

JenkinsとPHPUnitでテスト実行

ちなみに余談ですが, Jenkinsってイギリス人の執事をイメージした名前だそうです。
プロジェクトに優秀な執事がいるような思いが込められてこの名前が付けられたと言われています。

参考:Jenkinsで始める継続的インテグレーション

Jenkinsはイギリス人の執事

では、JenkinsというよりはPHPのUnitテストでどんなレポートを表示してくれるのか?

たくさんあるのですが、大きく5つ紹介します。

  1. テスト結果の表示
  2. コードカバレッジの表示
  3. バグになりそうな箇所や実装上の問題・無駄を検出
  4. 冗長化したコードを自動で検出しコードの最適化
  5. ドキュメントの自動生成

大きくこれら5つについての説明とJenkinsで表示した際の表示内容を見て行きましょう。

テストの結果の表示

テストの結果は、その名の通り成功したテストや失敗したテストの一覧を表示してくれます。

テスト結果の推移

失敗

コードカバレッジの表示

コードカバレッジとは、作成したテストがテスト対象コードのうちどのくらいテストしているかを表している率のことを言います。
コードカバレッジが高いほどテストコードがしっかり書かれていて、品質の良いコードを保つことが出来ています。

コードカバレッジ全体

ちなみにコードカバレッジの表示では、カバレッジ率の表示だけではなく、テストがされている行とされていない行を視覚的に分かりやすく表示することができます。
テストの状況は、テストが実施されたファイル、クラス、行数と細かく表示されます

テストの状況をファイル別に表示

テストがされた行とされていない行
テストがされている行は緑色、されていない行は赤色で塗られています。

テストがされた行とされていない行

バグになりそうな箇所や実装上の問題を検出

3のバグになりそうな箇所や実装上の問題を検出については、独自のルールを取り入れることも出来、反していれば警告を表示するといった設定も行うことができます。下記の例では使われていない変数があるため 「UnusedLocalVariable」 と表示されています。

PMD警告

使っていない変数

独自のルールの詳しい設定などについては次回以降の記事で紹介します。

冗長化したコードを自動で検出しコードの最適化

4の冗長化したコードを自動で検出しコードの最適化については、フォルダ内の各ファイルの重複度合いがグラフで表示されます。
そのため共通化出来るところなどが視覚化されコードの最適化につなげることができます。

ドキュメントの自動生成

5のドキュメントの自動生成については、作成しているクラスのリファレンスを自動で生成してくれるものになります。

検索も可能であり、正しいフォーマットで記述することにより作成したメソッドの説明や引数などの情報をリファレンスとしてまとめてくれます。

自動生成されたPHPDocumenter

このように、PHPUnitで用意されている機能をJenkinsで実行するこによりテストの結果を見やすく表現してくれます。

これらは品質の良いコードを保つきっかけになり、品質の良いサービス作りへの第一歩であると思います。

なんか、これらを見ると早くテストを書きたくなってきませんか(笑?

次回は、これらを表示するための設定について書いて行きたいと思います!!

FuelPHPのORMでrelatedの注意点

FuelPHPのORMでrelatedを使用する際にlimitとwhere句を用いた場合の注意点です。

relatedでは、limit句が先に実行されその後にwhere句が実行されるため思った結果が返ってこない場合があります。

通常のlimitとwhere句では、先にwhere句が実行された後にlimit句が実行されるので問題ありませんが,,,

 

とりあえず、本日気がついたことなのでメモ程度に...

時間があるときに、再現してみたいと思います。

 

 

 

FuelPHPのスキャフォールドとマイグレーションで作業効率化

フレームワークを使って開発を始めて約1ヶ月半。
フレームワークの便利さに感動する毎日が続いています。

そんな今日は,今流行のFuelPHPについて。

FuelPHPのロゴ

FuelPHPは、PHP5.3によるWebアプリケーション用のMVCフレームワークです。2010年位Dan Horrigan氏によって開発が開始されました。

PHPのフレームワークには、「CakePHP」や「Symfony」「Codelgniter」など様々なフレームワークがありますが、FuelPHPは軽いため高速な処理を行うソーシャルゲームなどの開発には向いているそうです!

そんなFuelPHPのスキャフォールド(scaffold)マイグレーション(migration)がとても便利なので紹介したいと思います。

scaffoldとmigration

スキャフォールドについて

スキャフォールドとはRuby on Railsで導入された機能で、MVCフレームワークでCRUD操作を行うための枠組みを自動生成する仕組みのことです。

ちなみにCRUDとは、Create(生成)、Read(読み取り)、Update(更新)、Delete(削除)の頭文字をとった言葉で、データベースの基本的な操作のことを指します。

CRUDの説明

スキャフォールドによって、モデル(DBに接続、SQLの実行など)、ビュー(表示、編集登録、削除画面)、コントローラ、マイグレーションが一括して生成されます。※マイグレーションについては後ほど...

ようするに、スキャフォールドをすることによって、一覧表示画面、データ新規登録画面、データ編集画面、データ削除機能などが一瞬で出来てしまうということです!

FuelPHPでのスキャフォールドのコマンドは、


 php oil g scaffold demo_scaffold title:varchar[50] content:text id:int

上記のコマンドで、文字列で50文字までのtitleカラムとcontentカラム,整数型のidカラムのモデルが出来上がり、同時に表示編集登録削除のコントローラーも出来上がります。

超便利!!

マイグレーションについて

マイグレーションとは、データベースのテーブル構造を管理するものです。
マイグレーションを実行することで、作成したモデルをDBに反映させることが可能です。
FuelPHPでは、fuel/app/migrations以下のファイルを読み込むことで実行されます。

コマンドは、


 php oil refine migrate

上記コマンドを実行することで、作成したモデルがDBに反映されました!

ただし、この状態でファイルにアクセスしても以下のようなエラー画面が出ます。

Orm Model not Found!

これは、configファイルにModelを読み込む設定をしていないためなので、
fuel/app/config/config.phpのreturn array()の中に下記の情報を付け加えてあげましょう!

    'always_load'  => array(
            'packages'  => array(
                'orm',
                'auth',
            ),            
    ), 

そうするとページが表示出来るようになります。

scaffoldで作成した画面

編集画面

scaffold編集画面

削除機能もあり

scaffold 削除画面

これからフレームワークを使って開発を行う際には、スキャフォールドとマイグレーションは使用して行きましょう!!