2009年2月アーカイブ



最初に

CakePHPは、Webアプリケーションフレームワークです。

名前のとおり、PHPの環境の上で動作します。

PHPとは?

 

CakePHPの特徴

CakePHPは、"Ruby On Rails"の設計思想に大きな影響を受けて開発されています。Ruby On Railsをご存じの方はCakePHPの仕組みについてスムーズに理解することができるでしょう。また、CakePHPもMVCモデルに基づき設計されているため、これまで同様のフレームワークを利用したことがある方も大まかな動作については想像しやすいでしょう。

  • PHP4とPHP5の両方のバージョンで動作する
  • 生産性と保守性を大きく向上することができ、堅牢なシステムとなる
  • 外部のライブラリに依存しないため環境の構築が容易でホスティングサービスにも対応


前提条件

  • Webサーバ(Apache、IISに対応)のインストール・設定
  • PHP(PHP4.3.2、またはPHP5以降)のインストール
  • DBMS(MySQL等、開発するシステムの必要に応じて)

※ApacheからCakePHPを動作させるために、URL書き換えエンジン(mod_rewrite)を有効にし、また、.htaccessファイルを有効にします。

 

mod_rewriteの設定

httpd.confの設定を変更

#LoadModule rewrite_module modules/mod_rewrite.so

LoadModule rewrite_module modules/mod_rewrite.so

(コメントされている場合はコメントをはずしモジュールを有効にする)

※設定を変更した場合はApacheを再起動する

 

.htaccessファイルを有効にする

httpd.confの設定を変更

<Directory /var/www/>

    AllowOverride All

</Directory>

(CakePHPを配置したディレクトリの設定で、"AllowOverride"の設定を"All"とする)

※設定を変更した場合はApacheを再起動する

 

インストール 

以下のURLを開き、"ダウンロード"をクリックします。

http://www.cakephp.jp/

画面の右上に、大きく"Download"と最新のバージョンが書かれたリンクがありますので、クリックします。2009年2月28日時点での最新バージョンは、1.2.1.8004.Stable となっています。

 

切り替わった画面にて、必要な形式(tar.gz、zip等)のファイルを選択します。寄付をしてダウンロードするか、寄付はせずダウンロードするかの選択をする画面が開くのでいずれかをクリックしてダウンロード画面を開き、ダウンロードを開始します。

 

ダウンロードしたファイルをインストールすには、ダウンロードしたファイルを解凍し、Webサーバのドキュメントルート以下に配置します。このとき、解凍したフォルダの名前を簡単なものに変更しておきます(例:/var/www/cake/)ドキュメントルートが、/var/www/とすると、CakePHPは"http://server_name/cake/"でアクセスすることができるようになります。

 

CakePHPをより安全に運用するための配置

CakePHPのファイルの中には様々な種類のファイルがあるため、すべてをドキュメントルート以下に配置してしまうとセキュリティ上の問題が発生してしまう場合があります。

そこでドキュメントルート自体を、CakePHPのファイルの中の公開が必要なフォルダに設定してしまう方法があります。

httpd.confの設定を変更

DocumentRoot /var/www

DocumentRoot /var/www/cake/app/webroot

 

※ドキュメントルートを変更できない場合は、必要な、cake/app/webrootフォルダのみドキュメントルート以下にコピーし、動作に必要なアプリケーションファイルのフォルダ、ライブラリファイルのフォルダを個別に配置し、index.phpで、配置したフォルダの場所を個別に設定することが可能です。

  • ROOT定数の設定
  • APP_DIR定数の設定
  • CAKE_CORE_INCLUDE定数の設定

 

以上で、CakePHPを配置したアドレスを入力して、CakePHPの画面が表示されればインストール完了です。このフレームワークを利用し、作成したプログラムを配置することで、Webアプリケーションの開発を高速に進めることができるようになります。

 

 

要求定義の基本とポイントがわかる本

著者:佐川博樹

発行日:2009年2月26日

発行所:秀和システム

125ページ

800円+税

 

マイポイント

新刊であることと、定価800円という安さで思わず購入してしまいました。要件定義・要求定義関係の知識習得のための書籍は昔からたくさん出ているが、発行が古いものが多かったり、ボリュームが多かったり、値段が高かったりで大抵はパスしてました。

ていうのも、仕事に直結する技術書とは違い、ボリュームが多く読むのに時間がかかるわりにすぐに役に立つという感覚が無いためです。経験の積み重ねでなんとかなるという感じでしょうか...。

しかし、やはりシステム設計の上流工程についても体系的な知識を身につけることは大切です。なにか問題が発生した場合、判断を迫られた際には、書籍などで得た知識は、判断基準に大きな効果を発揮すると思います。

そこでこの書籍は、こういった上流工程の知識を、あまり時間をかけずにスピーディに、しかし基本的なポイントも抑え、出費も抑える(笑)ことができます。

全体的な構成としても非常に読みやすく書かれています。また、新刊ということもあり、工事進行基準のプロジェクトマネジメントなどの最新の知識についても触れられています。

 

内容

  • 要求定義の概論
  • 要求定義を取り巻く状況
  • 要求定義の手順
  • 要求の獲得手法
  • 要求の取りまとめ手法
  • 要求定義書
  • 要求定義を成功に導くために

 

図解、サンプル、コラムなども多く、少ないボリュームながらポイントを押さえた多くの知識を学ぶことができ、システム開発の現場での上流工程を進める際の手助け・判断基準になる内容となっています。じっくり読めば一日で読み切ってしまえるので、この本で基本を押さえることで、より詳細な解説をしている要件定義・要求定義本を理解するためのステップアップにもなるでしょう。

 

 

 

 

Silverlight

マイクロソフトが推し進める、RIA(Rich Interactive Application)技術です。

Silverlightの主な特徴としては、

  • マルチプラットフォーム、クロスブラウザでの対応可能
  • .NET対応言語で開発可能
  • DRM(著作権対応メディア)対応のメディア再生機能
  • HTML埋込み型でブラウザのプラグインとして動作
  • デザイナーと開発者の共同・平行作業(作業の分離)が可能

※現在は、Silverlight2.0がリリースされている

http://www.microsoft.com/japan/silverlight/

 

Moonlight1.0

MoonlightはUNIX、Linuxのプラットフォームで動作可能な、Silverlightのオープン

ソース実装であり、「Moonlight1.0」がリリースされた。今回のリリースは、

Silverlight2.0には完全対応できていないが、既に、Silverlight2.0に対応した、

テストビルドを進めているとのこと。

http://www.go-mono.com/moonlight/

 

Adobe Flash

Silverlightは、Adobe Flashに対抗する技術としてマイクロソフトが開発してきており、

ブラウザ上でアニメーション・マルチメディアなどのリッチコンテンツの再生を可能に

する。そして、Moonlightは基本的に、このSilverlightを使って作成されたコンテンツ

をUNIXまたはLinuxベースのシステム上で再生可能にする技術である。これまで、

FlashコンテンツはUNIXやLinuxシステム上でも再生可能だった。

 

Flashの技術をベースとして動作させることができるRIA(Rich Internet Applcation)

を開発可能なフレームワークとして、Adobe Flexがあり、Silverlightとシェアを争う

ことになる。

http://www.adobe.com/jp/products/flex/

 

個人的には、やはり古くからスタンダードになっている、Flashに分があるのではと

感じているが、Visual Studioでどれだけ手軽にコンテンツを作成できるかで、

今後の発展が期待できると思う(C#での開発には興味があります)

 

また、Adobeは、ブラウザ上でのRIAだけでなく、デスクトップ環境向けのRIA技術、

Adobe AIRもリリースしており、RIAの分野に力を注いでいる。

http://www.adobe.com/jp/products/air/

 

また上記以外の、RIA技術として、JavaFXや、AJAX、Curlなども存在する。

 

最初に

"Ruby(ルビー)"は、まつもとゆきひろにより開発された和製オブジェクト指向スクリプト言語で、従来Perl、PHPなどのスクリプト言語が用いられてきた領域でオブジェクト指向プログラミングを実現することができる。特徴的な機能としては、クラス定義、ガベージコレクション、強力な正規表現処理、マルチスレッド、例外処理、イテレータ・クロージャ、Mixin、演算子オーバーロードなどである。

 

また"Rails(レイルズ)"とは、David Heinemeier Hanssonによって発表された、Webアプリケーションを簡単に開発できるフルスタックのフレームワークです。Rubyのスクリプト言語としての使いやすさと、オブジェクト指向による再利用性と生産性の高さ、動的なふるまいなどが人気を呼んでいます。

 

MVCアーキテクチャ

JavaでのStruts(ストラッツ)をはじめ、多くのWebアプリケーションフレームワークが採用している"MVCアーキテクチャ"をRailsも採用しています。その中でもRailsは、シンプルに、簡単に利用できるように考えられています。ルールに従った開発をおこなうことで余分な設定ファイルを定義することなく利用できます。この導入の容易さはとても重要です。

 

インストール

Ruby, Railsともにインストールはてても簡単です。それでは早速インストールの手順を書いていきます。Windows環境、Linux環境それぞれについて同時に説明していきます。

まずは、Rubyをインストールします。

 

[Windows環境]

以下より、One?Click installerをダウンロードします。

http://rubyforge.org/projects/rubyinstaller/

2009/2/15現在の最新のリリース版、"One-Click Ruby Installer 186-26 Final Release"

を今回はダウンロード・インストールしました。インストールは実行形式のファイルなので、

標準的に問題なくインストールできました。

※Rubyのパッケージ管理システムである、RubyGemsも同時にインストールされます。

 

[Linux環境]

私の環境のFedoraではパッケージより簡単にインストールできます。

# yum install ruby ruby-libs ruby-devel ruby-irb ruby-ri

引き続き、RubyGemsもインストールします。

#yum install rubygems

 

また、ソースからインストールするには、以下よりソースコードを入手します。

http://www.ruby-lang.org/ja/downloads/

現時点での最新版は、1.9.1でした。(パッケージでのインストールだと1.8.6)

>gzip -dc ruby-1.9.1-p0.tar.gz | tar xf -

>cd ruby-1.9.1-p0

>./configure

>make

>su

#make install

#exit

>make clean

 

同様にRubyGemsは、以下よりダウンロードします。

http://rubyforge.org/projects/rubygems/

現時点での最新版は1.3.1でした。パッケージでのインストールだと0.9.4)

>tar -xzf rubygems-1.3.1.tgz

>cd rubygems-1.3.1

>su

#ruby setup.rb

#exit

>

 

次に、Railsをインストールします。

 

[Windows環境]

コマンドラインより以下のコマンドを実行します。

>gem install rails --include-dependencies

 

[Linux環境]

シェルより以下のコマンドを実行します。

>su

#gem install rails --include-dependencies

 

以上で、それぞれの環境でそれぞれのツールがインストールされました。

Ruby,RubyGems,Railsです。バージョンはそれぞれのコマンドのオプションで、

-V を指定して実行すると表示されますし、動作確認も これでできます。

 

私の環境では、

ruby -v

->ruby 1.8.6

gem -v

->0.9.4

rails -v

->Rails 2.2.2

でした。

 

ここで1点注意点!!

パッケージやバイナリにてインストールすると、RubyGemsのバージョンが低く、

Railsの2.2.2の場合、実行することができません。RubyGemsを1.3.1以上に

アップデートしないといけないようです。

 

[Windows環境]

通常は以下のコマンドでアップデートできるのですが...。

>gem update --system

Windows環境の場合はうまく動かないようなので、以下のコマンドを実行します。

>gem install rubygems-update

>update_rubygems

RubyGemsアップデート用のパッケージをインストールして実行するという方法

 

[Linux環境]

>su

#gem update --system

 

以上で、めでたく以下のように更新され、Ruby,Railsの動作が確認できました。

>gems -v

1.3.1

 

今度は、実際にRubyの動作確認や、Railsの実行方法など、Ruby全般の解説

をしていきたいと思いますのでまた見に来てください。

 

シリアライズ

タイトルの処理は非常に簡単です。

ADODB.Recordset.Save "filename.xml", adPersistXML

ADODB.Recordset.Open "filename.xml"

これでレコードセットのXMLデータでのシリアライズ・デシリアライズはOK

 

それではシリアライズをどのように利用するかについてですが、

前の記事で書いたように、サーバからWebサービスとしてXMLデータを受信し、

クライアント側でデシリアライズしてレコードセットを生成し利用するということです。

(参考)COMを利用しJavaからADO接続してデータをXML出力

 

このことにより、クライアント側直接RDB(データベース)に接続する環境がなくても、

ADOのレコードセットの機能を使用して開発を行うことが可能です。

またクライアントもADOが利用できるツールであれば何でもOKなので、クライアント側

の選択肢も広がります(VBをはじめ、Excel等のVBA、Delphi、etc)

 

プログラミング

それでは、サーバにHTTPリクエストにてSQLを送信し、結果をXMLデータで受取り、

レコードセットに変換する処理を書いてみます(実際に動作させて検証OKのものです)

クライアントにはExcelを利用し、VBAでコードを記述しています。

 

Private Sub cmdRun_Click()
  'XMLHTTPオブジェクトの生成
  Dim oXmlHttp As Object
  Set oXmlHttp = CreateObject("MSXML2.XMLHTTP")
 
  'リクエストデータの準備
  oXmlHttp.Open "POST", "http://tomcat:8080/app/xml.jsp", False
  oXmlHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
 
  'パラメータを送信して実行
  oXmlHttp.send UrlEncode("sql=" + Cells(1, 1).Value)
 
  '結果確認
  If (oXmlHttp.readyState = 4) And (oXmlHttp.Status = 200) Then
    '成功
    Dim RS As ADODB.Recordset
    Call GetRecordset(RS, oXmlHttp.responseText)
    Call Cells(2, 1).CopyFromRecordset(RS)
  Else
    'エラー
    MsgBox "エラーです。HTTP Status Code : " & oXmlHttp.Status
  End If
End Sub

'パラメータをUTF8でエンコードする
Public Function UrlEncode(ByVal sText As String) As String
    If Len(sText) = 0 Then Exit Function
    With CreateObject("ScriptControl")
        .Language = "JScript"
        UrlEncode = .CodeObject.encodeURI(sText)
    End With
End Function

'XMLデータからレコードセット生成
Public Sub GetRecordset(RS As ADODB.Recordset, sXml As String)
  Dim oStream As ADODB.Stream
  Set oStream = New ADODB.Stream
  oStream.Open
  oStream.WriteText sXml
  STR.Position = 0
  Set RS = New ADODB.Recordset
  RS.Open oStream
End Sub

 

  • 配置したボタンをクリックすると、XmlHttpオブジェクトを使用し、サーバーへ
    セル"A1"に書かれたSQL文をPOSTデータで送ります。
    POSTデータはUTF8でエンコードします。
  • レスポンスで受け取ったXMLデータをADODB.Streamオブジェクトを利用し、
    レコードセットを生成しています。
  • 生成されたレコードセットのデータを、セル"A2"へコピーしています。

※POSTするSQL文はSELECT文のみ考慮しており、セキュリティ対策等は特に考慮

していないので実際に類似の運用を行う場合は十分考慮することが必要です。

※ADODB.StreamオブジェクトはADO2.5から追加されたオブジェクトなので、

ADOのライブラリのバージョンには注意が必要です。

 

以上、サンプルになりますが、

逆にクライアント側で更新したレコードセットをシリアライズし、サーバへポストして

更新系のアプリケーションも作成することも可能でしょう。

 

長いタイトルですが

やりたいこととしては、サーバーサイドで表題の処理をおこない、

ADOのレコードセットをクライアントに返したいということです。

ADOのレコードセットのシリアライズ方法にXMLデータを利用します。

 

ADODB.Recordset

ADOは、Windows環境(ExcelやAccess等のVBA)で多く利用され、

レコードセットのデータを簡単に加工したり、張り付けたりすることができるように

なっています。また、ADOのレコードセットには標準でXMLへの入出力機能があり、

簡単にシリアライズ・デシリアライズ化することができます。

 

本題

上記のXMLデータを用いて、直接ADO接続でDBMS(Oracle等)に接続する環境が

クライアント側になくても、サーバサイドよりADOのレコードセットをシリアライズした

XMLをクライアント側に返すことで、クライアント側で、ADOのレコードセットを自由に

利用することができるようになるということです。

一種のWebサービスとしての利用と言えます。

 

COM

それではなぜ、COM(Component Object Model)かというと、もちろん、COMを

利用しなくても、Dom等を用いて、Javaの標準のライブラリでもADO仕様のXMLを

生成することは可能なのですが、サーバーサイドでも同じADOの機能を用いた処理

を行うことで手順がすっきりとし、生成されたXMLデータの互換性もほぼ問題は

発生しないという点、パフォーマンス的にも有利ではないかという点でComを選択

してみました。

※もちろんこの時点でサーバサイドもWindows環境に限定されてしまうことになり

ますが、ADO以外にもComを利用した様々なWebサービスを提供できそうです。

 

準備

JavaでComの操作をするためのライブラリとしては、JCom(Java-COMブリッジ)

利用しています。まず、まずComを呼び出すためのNativeのライブラリ、jcom.dll

を、"java.library.path"上に配置します。jcom.dllは上記ライブラリに含まれます。

また、"java.library.path"の確認は、

System.getProperty("java.library.path")

で確認するか、または、

-Djava.library.path=

で設定します。

通常、SystemやSystem32がこれに含まれます。

次に、jcom.jarをライブラリパスに設定し、これでjavaからCOMの操作をする

準備の完了です。

 

サンプル

以下は、JCom経由でADOにてMSSQLServerに接続し、SQLを発行して

レコードセットを取得します。取得したレコードセットは、Saveメソッドにて、

ファイルに保存します(Saveメソッドの2つめの引数"1"がXML形式での保存を

意味します。

  ReleaseManager rm = new ReleaseManager();
  
  try {
   //ADOConnectionの作成
   IDispatch con = new IDispatch(rm, "ADODB.Connection");
      
   //ConnectionStringの設定
   con.put("ConnectionString", "Provider=Sqloledb;Data Source=(local)\\SQLEXPRESS;Initial Catalog=dbname;Connect Timeout=15;user id=sa;password=");

   //データベースへ接続
   con.method("Open", null);
   
   //SQLの実行
   IDispatch rs = (IDispatch)con.get("Execute", new Object[] {"SELECT * FROM 商品マスタ"});
   
   //XML形式で出力
   rs.method("Save", new Object[] {"C:\\excel.xml", 1});
   
   //解放
   rs.method("Close", null); 
   con.method("Close", null);
  }
  
  catch(Exception e) {
   System.out.println(e.getMessage());
   e.printStackTrace();
  }

  finally {
   rm.release();
  }