megadreams前回のお話でJenkinsとGitHubによる継続的インテグレーションの開発環境の設定を行いました。継続的インテグレーションを行うにあたり実際にJenkinsでテストを実行した際に「どんなテスト結果を表示してくれるのか?」ということをご紹介したいと思います。現在FuelPHPを用いて開発を行なっているためここでのテストの実行にはPHPUnitを使用して行っています。Jenkinsってイギリス人の執事をイメージした名前だそうです。プロジェクトに優秀な執事がいるような思いが込められてこの名前が付けられたと言われています。参考:Jenkinsで始める継続的インテグレーションでは、JenkinsというよりはPHPのUnitテストでどんなレポートを表示してくれるのか?たくさんあるのですが、大きく5つ紹介します。大きくこれら5つについての説明とJenkinsで表示した際の表示内容を見て行きましょう。テストの結果の表示テストの結果は、その名の通り成功したテストや失敗したテストの一覧を表示してくれます。コードカバレッジの表示コードカバレッジとは、作成したテストがテスト対象コードのうちどのくらいテストしているかを表している率のことを言います。コードカバレッジが高いほどテストコードがしっかり書かれていて、品質の良いコードを保つことが出来ています。ちなみにコードカバレッジの表示では、カバレッジ率の表示だけではなく、テストがされている行とされていない行を視覚的に分かりやすく表示することができます。テストの状況は、テストが実施されたファイル、クラス、行数と細かく表示されますテストがされた行とされていない行テストがされている行は緑色、されていない行は赤色で塗られています。バグになりそうな箇所や実装上の問題を検出3のバグになりそうな箇所や実装上の問題を検出については、独自のルールを取り入れることも出来、反していれば警告を表示するといった設定も行うことができます。独自のルールの詳しい設定などについては次回以降の記事で紹介します。冗長化したコードを自動で検出しコードの最適化4の冗長化したコードを自動で検出しコードの最適化については、フォルダ内の各ファイルの重複度合いがグラフで表示されます。そのため共通化出来るところなどが視覚化されコードの最適化につなげることができます。ドキュメントの自動生成5のドキュメントの自動生成については、作成しているクラスのリファレンスを自動で生成してくれるものになります。検索も可能であり、正しいフォーマットで記述することにより作成したメソッドの説明や引数などの情報をリファレンスとしてまとめてくれます。このように、PHPUnitで用意されている機能をJenkinsで実行するこによりテストの結果を見やすく表現してくれます。これらは品質の良いコードを保つきっかけになり、品質の良いサービス作りへの第一歩であると思います。megadreams前回の記事でGitHubとJenkinsを用いた自動デプロイ環境の概要をご説明しました。GitHubやJenkinsと連携した開発環境作成でのrsyncとの出会い今回は、その環境を実現するための設定手順を書いて行きたいと思います。大きく4つの手順があります。インストール済みJenkinsのインストールまずは、Jenkinsのインストール通常ならば、運用するサーバとJenkinsが動いているサーバを分けるべきですが、サーバコストの都合などで今回は同一サーバ上で動かすことにします。ApacheサーバとJenkinsサーバが同じport80で待つことはできないので、jenkinsをport:8080で動かすことにします。セキュリティ上必要最低限以外のportを開放したくないため、80番ポートのみ開放して内部的に8080に変換する方法をとります。仕組みとしては、port:80番で「あるURL」にアクセスが来た場合に、内部でport:8080に変換してアクセスするという方法です。この仕組みをリバースプロキシーと言います。この形を目指して設定していきます。前置きが長くなりましたが、早速JenkinsのインストールJenkinsは、yumでインストールしますが、まずはyumでインストール出来るようリポジトリに追加してから行います。jenkins次にJenkinsを実行するにはJavaが必要であるため、JDKがインストールされていない場合はインストールします。java-1.6.0-openjdk-devel.x86_64参考:http://kumagonjp2.blog.fc2.com/blog-entry-103.html次に『http://ホスト名/jenkins』でアクセスするとJenkinsにアクセス出来るように設定します。JENKINS_ARGS="––prefix=/jenkins"これでJenkins側の設定は終了です。Apacheの設定Apacheで起動する際には、バーチャルホストの設定を行ってください。(必須ではありません)バーチャルホストについては、こちらを参考に...http://www.atmarkit.co.jp/flinux/rensai/apache08/apache08a.htmlJenkinsにアクセスするためにリバースプロキシの設定を行います。8080これで『http://ホスト名/jenkins』にアクセスして、Jenkinsが開くかどうか確認する。追記〜上記設定では、~~URL~~/jenkinseでアクセス出来ないとの声が多数上がっています。何かの記入漏れだと思いますので、解決し次第追記させて頂きます。追記〜上記問題についてですが、ファイアーウォールで8080ポートが解放されていると上手くつながらないそうです。一度、ファイアーウォール(iptables)で8080ポートを閉じてみて、試してみて下さい。JenkinsとGitHubの連携ここからは、自動デプロイ環境構築に向けて、GitHubとの連携を構築していきたいと思います。前回のおさらいで今目指している形は以下の図の通りです。pluginをインストールします。Jenkinsの管理->プラグインの管理->利用可能で検索してインストール次にGitHubへは鍵認証が必要であるため、Jenkinsユーザで鍵の認証設定を行います。/var/lib/jenkinsにあります。../.ssh※パーミッションなどの問題が合った場合、root権限で鍵を作成し/root/.ssh以下に出来た鍵を/var/lib/jenkins/.sshに移動しchownで所有者をjenkinsに変えるという方法でも大丈夫です。これで、公開鍵(id_rsa.pub)と秘密鍵(id_rsa)の設定は終了。次に公開鍵をGitHubに登録します。プロジェクトごとのキーに設定すると重複してエラーなど出るのでユーザのSSHKeyとして登録するここで、先ほど作成した公開鍵(id_rsa.pub)の中身を貼り付ける。Titleは好きな名前で良い。次に大事なのは、GitHubにアクセスできるよう初期アクセスを行うことです。以下のコマンドでGitHugにアクセス出来るかどうか確認を行なって下さい。"jenkins"とりあえずuser.emailは適当で大丈夫です。次にJenkinsでGitHubからコードを取得するという設定を行います。そのために、まずは、自動デプロイしたいプロジェクトを作成します。新規ジョブ作成でフリースタイル・プロジェクトのビルドを選択し、ジョブ名を入力してOKを押しますすると、設定画面が出てくるので中段付近にある「ソースコード管理システム」でGitを選択します。URLに自動デプロイしたいリポジトリのアドレスを入力して下さい。ここで入力するURLは、http://から始まるURLではなくgit@github.com:から始まるURLを入力して下さい。これで保存を押して、Jenkinsの初期設定は終了です。次にGitHubへpushしたタイミングで最新のコードをpullしてくる設定を行いたいと思います。これには、フックという仕組みを利用します。簡単に説明すると何かアクションが起きたタイミングで、なんらかの処理を行う仕組みのことを言います。ここでは、GitHubへpushされたタイミングで、Jenkinsがコードをpullしてくるということを実装したいと思います。hooksという仕組みを使用します。hooksの設定には、Jenkinsの「ビルドを実行」というところのURLが必要になるためこのURLをコピーしておきます。右クリックでリンクアドレスをコピーします。hooksの設定を行います。先ほどコピーしたURLを貼り付けて保存します。これで、GitHubへPushしたタイミングで先ほど入力したURL(ビルドの実行)が呼び出され最新のコードがJenkinsへpullされるという仕組みの実装が出来ました。最後にWebサーバで公開しているディレクトリに最新のコードをデプロイする設定を行います。ここからは、先日の記事に書いたrsyncを使用します。公開しているディレクトリへの絶対パス上記設定で、GitHubへpushしたタイミングで自動デプロイが実行され、またテスト用に直接ファイルをサーバにあげてテスト実行後GitHubへPushしたタイミングで公開ディレクトリがGitHubの最新のコードの状態に保たれるという自分にとっての理想の開発環境を構築することが出来ました。user名@IPアドレス:公開ディレクトリ絶対パスってな感じで行けるはず,,,Jenkinsさんは、他にもブランチを切って作業している場合にはブランチの指定やテストが通った場合のみテスト環境へアップさせるなど色々と出来るため、もっと勉強して活用して行きたいと思います!!ご意見ご指摘、ご感想などありましたらコメント欄へどしどしお書き下さい。megadreamsFuelPHPのORMでrelatedを使用する際にlimitとwhere句を用いた場合の注意点です。relatedでは、limit句が先に実行されその後にwhere句が実行されるため思った結果が返ってこない場合があります。通常のlimitとwhere句では、先にwhere句が実行された後にlimit句が実行されるので問題ありませんが,,,とりあえず、本日気がついたことなのでメモ程度に...時間があるときに、再現してみたいと思います。日吉キャンパスで行われた「HTML5カンファレンス2012」に参加してきたときのメモです。http://events.html5j.org/conference/2012/09/既にまとめサイトが存在しておりますので、詳しくはそちらを御覧くださいhttp://stocker.jp/diary/html5-conference-2012/個人的に興味があった内容を下記に挙げていきます。Three.jshttp://www.slideshare.net/yomotsu/webgl-and-threejs※HTML,JavaScript、CSSでここまで出来るのかと感動させられました。mixiのあんどうやすしさんによるWebRTCとか勉強会https://docs.google.com/presentation/d/1MkvmX6Gvb1cRATdwF4RFBtol8NgdnblwlwikDnFhT10/present#slide=id.p※ちなみに上記資料をもとに丸3日をかけて、WebRTCのまとめとデモを作りました!参考:http://megadreams14.com/?p=319※残念ながら仕様変更によりデモは動いておりませんが、仕組みについてはほぼ同じなので参考になるかとは思います。Ogushiさんのプレゼンのデザインセンスがうけました!分かる人にはわかるプレゼン資料です。HTML5クイズhttp://www.youtube.com/watch?v=4LBOZTtiEh8&feature=youtu.be某テレビ番組の大感謝祭のようなシステムでWebSocketやAjaxなどを使ってリアルタイムにクイズの集計を行い、HTML5カンファレンスの締めとしてふさわしい企画でした。megadreamsWebRTCについて昨年9月にまとめた資料があったので公開しておきます。megadreamsフレームワークを使って開発を始めて約1ヶ月半。フレームワークの便利さに感動する毎日が続いています。そんな今日は,今流行のFuelPHPについて。FuelPHPは、PHP5.3によるWebアプリケーション用のMVCフレームワークです。Horrigan氏によって開発が開始されました。PHPのフレームワークには、「CakePHP」や「Symfony」「Codelgniter」など様々なフレームワークがありますが、FuelPHPは軽いため高速な処理を行うソーシャルゲームなどの開発には向いているそうです!そんなFuelPHPのスキャフォールド(scaffold)とマイグレーション(migration)がとても便利なので紹介したいと思います。Railsで導入された機能で、MVCフレームワークでCRUD操作を行うための枠組みを自動生成する仕組みのことです。ちなみにCRUDとは、Create(生成)、Read(読み取り)、Update(更新)、Delete(削除)の頭文字をとった言葉で、データベースの基本的な操作のことを指します。)、コントローラ、マイグレーションが一括して生成されます。id:int上記のコマンドで、文字列で50文字までのtitleカラムとcontentカラム,整数型のidカラムのモデルが出来上がり、同時に表示編集登録削除のコントローラーも出来上がります。超便利!!マイグレーションについてマイグレーションとは、データベースのテーブル構造を管理するものです。マイグレーションを実行することで、作成したモデルをDBに反映させることが可能です。FuelPHPでは、fuel/app/migrations以下のファイルを読み込むことで実行されます。migrate上記コマンドを実行することで、作成したモデルがDBに反映されました!ただし、この状態でファイルにアクセスしても以下のようなエラー画面が出ます。megadreams社会人1年目のエンジニアにおいて開発環境の構築にはかなり時間がかかるもの。わけの分からないエラーと戦ったり、他の人の環境では動いても自分の環境では動かないなどそういう経験がある人も多いのではないでしょうか?今回は、GitHubやJenkinsと連携した開発環境を構築する上で出会ったrsyncコマンドとの出会いについてお話したいと思います。rsyncコマンドとは、ファイルなどのバックアップや同期を行うために使用されるコマンドで、変更分を検出して差分のみを転送することができ、cpコマンドと違って効率的なバックアップを行うことができます。ネットワーク経由でもバックアップや同期が行えたり、sshなどのリモートシェル経由でも利用が可能であるためとても便利なコマンドだそうです!このrsyncコマンドを知った瞬間、自分たちが構築したい環境を簡単に出来るではないか!と凄く感動しました!まずは、使いたいと思った背景をご説明したいと思います。目指すべく開発環境は、ソースコードをGitHubで管理し、継続的インテグレーションを導入するためにJenkinsを利用してサーバへ自動デプロイされる仕組みを構築することです。上の図のようにローカル環境で実装し、ある機能が実装されるとcommitしてGitHubへpushします。その後GitHubからJenkinsへデプロイされテストが実行されます。テストが正しく通ればサーバへ反映されるという仕組みです。ローカル環境だけではテストが出来ない場合もあるため、テストサーバへはFTPを使ってファイルをあげてサーバ上でもチェックが出来る環境を構築したいと考えていました。テスト環境にFTPでファイルをあげた際にずっとそのファイルが残り続けるのは良くないため、ローカルからGitHubへpushされJenkinsが動いた時には、サーバにあるコードは全てGitHubにcommitされている最新版へ戻すような設定を行いたいと思っていました。それを実現するためにjenkinsでGitHubからとってきたファイルをコピーする方法やそもそもテストサーバのファイルもgitで管理しちゃおうなど色々考えました。1:ファイルをコピーして同期jenkinsはテストを行う前にgitHubから最新版のデータをpullしてきます。その時には/var/lib/jenkins/以下にworkspaceというディレクトリが出来、そこにソースコードがpullされる仕組みになっています。そのファイルをサーバで設定されているドキュメントルート以下にコピーしようという考えです。stashコマンドを使おうという考えです。stashは,変更を一時的に退避させるコマンドであり実行するとcommitされたところまで状態を戻すことが出来ます。とアドバイスを頂いたのがrsyncとの初めての出会いです。next/オプションの説明についてはこちらを参考にどうぞ:はじめてrsyncを使う方が知っておきたい6つのルール上記の例だとpreディレクトリ以下にあるファイルをnextディレクトリに同期させるコマンドになります。–deleteオプションをつけることでnextディレクトリにはあってpreディレクトリにないファイルを削除することができます。次回は、これらの開発環境を整えるための手順を書いていきたいと思います。archives.プロフィール某IT企業エンジニアの社会人4年目。アジャイル開発.HTML5,Objective-CなどでWebアプリの開発。Chefを使ったサーバ構築の自動化にも取り組んでいます。