33
エンバカデロ・テクノロジーズ エヴァンジェリスト 高橋 智宏 Delphi for PHPで始めるPHPビジュアル開発 - コンポーネントでラクラクOracle接続 -

Delphi for PHP 090227

Embed Size (px)

Citation preview

エンバカデロ・テクノロジーズ エヴァンジェリスト 高橋 智宏

Delphi for PHPで始めるPHPビジュアル開発 - コンポーネントでラクラクOracle接続 -

2 ・Copyright ©2009 Embarcadero Technologies, Inc. All Rights Reserved. 本文書の一部または全部の転載を禁止します。

アジェンダ

• エンバカデロ・テクノロジーズについて

• Delphi for PHP とは?

• VCL for PHP とは? • コンポーネント一覧

• Oracleへの接続 • ドラッグ&ドロップでOracleアプリケーションを作成

• Webアプリケーション構築の実際 • Blog用Webアプリケーションの構築

エンバカデロ・テクノロジーズ について

4 ・Copyright ©2009 Embarcadero Technologies, Inc. All Rights Reserved. 本文書の一部または全部の転載を禁止します。

エンバカデロ・テクノロジーズ – 会社概要

• 創立1993年、サンフランシスコに本拠 • 1995年より黒字経営

• 2007年6月27日、投資会社Thoma Cressey Bravo傘下の非上場企業に

• 2008年6月30日、ボーランドより「CodeGear™」を買収完了

• 年間1億ドルの売り上げ規模

• 世界で500名以上の従業員

• 29ヶ国に販売拠点を展開

• Thoma Cressey Bravoのマーケットリーダーシップ、ナレッジ、リソースを活用 • 年間売り上げ16億ドル(EBITDA 4億9000万ドル)以上

• 年20%の成長を達成

• 9万以上の顧客

• 傘下に約7,000人の従業員

5 ・Copyright ©2009 Embarcadero Technologies, Inc. All Rights Reserved. 本文書の一部または全部の転載を禁止します。

エンバカデロ・テクノロジーズの製品カバレッジ

クライアント/サーバー、多層、Web 2.0、SOA、ネイティブ/マネージド/ダイナミック言語

コードの可視化、効率的なコーディング、コードを操作する支援ツール

データの依存関係、SQLの記述、データベースの安定稼動

複雑なプロジェクトを容易に管理、チームの問題解決を支援、協調作業でソフトウェアを開発

Delphi for PHP とは?

7 ・Copyright ©2009 Embarcadero Technologies, Inc. All Rights Reserved. 本文書の一部または全部の転載を禁止します。

開発環境の進化と退化

1980 1990 2000

ビジュアル開発

OOP

Windows Java

Linux

Eclipse

GUI OSS

90年代の開発の主流

マウスでドラッグ&ド ロップ、しかしツール やOSに100%依存

2000年代の開発の主流

フリーのツールやオープ ンソースの活用、でも、開 発スタイルは80年代型

80年代のIDEが登場

エディタ+コマンドライ ン型の開発から脱却

IDE(統合開発環境)

Visual Basic Delphi

Turbo C++

C++Builder

真のビジュアル開発環境が求められている

エディタ

8 ・Copyright ©2009 Embarcadero Technologies, Inc. All Rights Reserved. 本文書の一部または全部の転載を禁止します。

このままではいけない!!

• PHPのための真のRAD環境 • 世界初のPHP用ビジュアル統合開発環境 • 統合されたPHPデバッガ • 統合されたPHPソースコードエディタ

• 独立した開発環境 • Apache 2.2.8 • PHP 5.2.6 • デバッガ(NuSphere DBG Listener)

• コンポーネントアーキテクチャ • VCL for PHP 2.0 • ドラッグ&ドロップによる開発 • カスタムコンポーネントを自作可能

VCL for PHP とは?

10 ・Copyright ©2009 Embarcadero Technologies, Inc. All Rights Reserved. 本文書の一部または全部の転載を禁止します。

VCL for PHP のコンセプト

• PHP用のコンポーネントアーキテクチャ • 「Delphi版 VCL(Visual Component Library)」からインスパイア

されたもの • PHPを使ったRAD開発を可能にするコンポーネント群 • 100% PHP 5 言語だけで記述されている • カスタムコンポーネントを作成してIDEに統合できる • ポピュラーなオープンソースのPHP用スクリプトやライブラリを基

盤にしている

11 ・Copyright ©2009 Embarcadero Technologies, Inc. All Rights Reserved. 本文書の一部または全部の転載を禁止します。

VCL for PHP の構造

• VCL for PHP はオープンソースです!! • LGPLなコンポーネントベースのフレームワーク • Sourceforgeで公開 ­ http://vcl4php.sourceforge.net/

VCL for PHP

PHP 5

JS Calendar jsVal Zend Framework

12 ・Copyright ©2009 Embarcadero Technologies, Inc. All Rights Reserved. 本文書の一部または全部の転載を禁止します。

コンポーネント一覧

13 ・Copyright ©2009 Embarcadero Technologies, Inc. All Rights Reserved. 本文書の一部または全部の転載を禁止します。

Standardカテゴリ

• Frame Webページを分割したフレーム • Frameset Webページの分割を行うフレームセット • MainMenu メニューを実現。画像を割り当て可能 • PopupMenu コントロールごとにコンテキストメニューを提供。画像を割り当て可能 • Label 文字列を表示。HTMLタグを表現可能。ハイパーリンクの機能もある • Edit テキスト入力領域。サーバー側での入力文字列のフィルタリング機能あり • Memo 複数行のテキスト入力 • Button ボタン。種類は、Submit, Reset, Normal の3種類 • CheckBox チェックボックス • RadioButton ラジオボタン1個分。Groupプロパティでグループ化 • ListBox リストボックス • ComboBox コンボボックス • Scrollbar スクロールバー • GroupBox 各種コンポーネントを内部に配置してグループ化。キャプション付き • RadioGroup 複数のラジオボタンを表現 • Panel 各種コンポーネントを内部に配置してグループ化。主に領域を表す • ActionList 汎用イベントハンドラ。リクエストURLのパラメータとのマッピングを実現 • FormValidator 入力データの有無,形式をWebブラウザ上で検証

14 ・Copyright ©2009 Embarcadero Technologies, Inc. All Rights Reserved. 本文書の一部または全部の転載を禁止します。

Additionalカテゴリ

• HiddenField 隠しフィールド<input type=“hidden” …>を表現 • Upload ファイルのアップロードを行う(※Ajax時にはアップロードされない) • BitBtn 画像付きボタン • SpeedButton 画像付きボタン。ON/OFFの状態を表現可能 • Image 画像へのリンク <img src=“…” …> • MapShape マウスクリックに反応する領域を表現。円または長方形 • FlashObject FlashのSWFファイルへのリンク • Shape JavaScriptで描画を行える領域。円や丸みのある長方形など • Bevel 単純に領域を表す。仕切り線としても使える • CheckListBox チェックボックス機能付きのリストボックス • SimpleChart グラフ機能。円グラフなど計4種類 • Window Webブラウザ領域内で動作するウィンドウ。モーダルまたはモードレス • LabeledEdit ラベル付きテキスト入力領域 • Pager 1番目~N番目…の移動を行う、ページャー

15 ・Copyright ©2009 Embarcadero Technologies, Inc. All Rights Reserved. 本文書の一部または全部の転載を禁止します。

Advancedカテゴリ

• PageControl 複数タブで表示ページを切り替え可能 • ImageList 複数の画像へのリンクを管理。各種コントロールから参照 • RichEdit HTML形式で文字列を編集 • TrackBar 目盛りを表現。垂直または水平 • ProgressBar 進捗状況を0%~100%で表現 • UpDown 増減ボタン付き数値入力領域 • DateTimePicker 日付選択ウィンドウ付きコンボボックス • MonthCalendar 日付選択領域 • TreeView ツリー形式でデータを表現 • ListView データを列と行のテーブル形式で表現 • ButtonView 各ビューをボタンで切り替え可能 • ColorSelector 色選択領域 • TextField JavaScriptで実現されたテキスト入力領域 • ToolBar 複数キャプションで構成するツールバー。画像を割り当て可能

16 ・Copyright ©2009 Embarcadero Technologies, Inc. All Rights Reserved. 本文書の一部または全部の転載を禁止します。

Systemカテゴリ

• Timer Webブラウザ上でタイマーによる定期的なイベントを実現 • PaintBox サーバー側で描画を行える領域 • BasicAuthentication BASIC認証を管理 • StyleSheet スタイルシートファイル(CSS)をWebページに適用

17 ・Copyright ©2009 Embarcadero Technologies, Inc. All Rights Reserved. 本文書の一部または全部の転載を禁止します。

Data Access, DataControl, InterBase, MySQL, Oracleカテゴリ

• Database ADOdbベースでDB接続を管理。複数のRDBMSに対応 • Datasource テーブルデータとDBGridやEditとを結びつける • Table テーブルデータの取得。Databaseコンポーネントと連携 • Query SQLの実行。Databaseコンポーネントと連携 • StoredProc ストアドプロシージャ。Databaseコンポーネントと連携 • DBGrid テーブルデータをグリッドで表現。Ajaxによる保存機能もある • DBPaginator テーブルデータの行移動を実現

• IBDatabase InterBaseへの接続を管理。PHPのinterbase拡張を直接利用 • IBTable テーブルデータの取得。IBDatabaseコンポーネントと連携 • IBQuery SQLの実行。IBDatabaseコンポーネントと連携 • IBStoredProc ストアドプロシージャ。IBDatabaseコンポーネントと連携 • MySQLDatabase MySQLへの接続を管理。PHPのmysql拡張を直接利用 • MySQLTable テーブルデータの取得。MySQLDatabaseコンポーネントと連携 • MySQLQuery SQLの実行。MySQLDatabaseコンポーネントと連携 • MySQLStoredProc ストアドプロシージャ。MySQLDatabaseコンポーネントと連携 • OracleDatabase Oracleへの接続を管理。PHPのoci8拡張を直接利用 • OracleTable テーブルデータの取得。OracleDatabaseコンポーネントと連携 • OracleQuery SQLの実行。OracleDatabaseコンポーネントと連携 • OracleStoredProc ストアドプロシージャ。OracleDatabaseコンポーネントと連携

18 ・Copyright ©2009 Embarcadero Technologies, Inc. All Rights Reserved. 本文書の一部または全部の転載を禁止します。

Samples, jQuery, PEAR, Zendカテゴリ

• Clock JavaScriptで時計を描画(※あくまでもサンプルとして提供されています) • JQSlider jQueryを利用して複数ページのスクロールを実現 • PearDataGrid PEARを利用して、テーブルのデータを表形式で表示

• ZACL Zend Frameworkのアクセス制御リスト(ACL)をラップしたもの • ZAuth Zend Frameworkの認証管理機能をラップしたもの • ZAuthDB RDBMSを利用して認証を行う。ZAuthと連携 • ZAuthDigest ファイルを利用して認証を行う。ZAuthと連携

19 ・Copyright ©2009 Embarcadero Technologies, Inc. All Rights Reserved. 本文書の一部または全部の転載を禁止します。

開発の基本

• フォームにコンポーネントとドラッグ&ドロップ • コンポーネントのプロパティを設定 • イベントハンドラ(サーバーサイド or クライアントサイド)を追加

実行

Oracleへの接続

21 ・Copyright ©2009 Embarcadero Technologies, Inc. All Rights Reserved. 本文書の一部または全部の転載を禁止します。

接続スタイル

• oci8拡張をベースとして接続 • php.ini の extension=php_oci8.dll (Windowsの場合) を使用 • ADOdb経由 – 汎用データベースコンポーネント

または • oci8拡張を直接利用 – Oracle専用データベースコンポーネント

oci8拡張

Oracleクライアントライブラリ

Database Table Query

StoredProc OracleDatabase OracleTable OracleQuery

OracleStoredProc

アプリケーション

VCL for PHP

22 ・Copyright ©2009 Embarcadero Technologies, Inc. All Rights Reserved. 本文書の一部または全部の転載を禁止します。

グリッドによるテーブル編集

• データエクスプローラからテーブルをドラッグ&ドロップするだけ • Databaseコンポーネントの接続プロパティをセット

Charset = AL32UTF8 DatabaseName = ORCL DriverName = oci8 Host = localhost:1521 UserName = SCOTT UserPassword = *****

実行

23 ・Copyright ©2009 Embarcadero Technologies, Inc. All Rights Reserved. 本文書の一部または全部の転載を禁止します。

DBPaginatorによる行移動

• やっぱりテーブルをドラッグ&ドロップするだけ • グリッドによるテーブル編集同様、ソースコードの細かな記述は不要!!

実行

Webアプリケーション構築の実際

25 ・Copyright ©2009 Embarcadero Technologies, Inc. All Rights Reserved. 本文書の一部または全部の転載を禁止します。

基本設計

• データモジュールの利用 – データベースロジックを隠蔽する • Blogデータの表示用ページ • Blogデータの登録用ページ – BASIC認証を採用

26 ・Copyright ©2009 Embarcadero Technologies, Inc. All Rights Reserved. 本文書の一部または全部の転載を禁止します。

実装の詳細 ­ データベースのセットアップ

• RDBMSには、Oracle11g (x86) を利用 • テーブル構造: CREATE TABLE BLOG(

• 主キーの生成には、シーケンスを利用する • CREATE SEQUENCE BLOGID;

• データベース/テーブルの文字コードは AL32UTF8

ID INTEGER NOT NULL, BLOGDATE VARCHAR2(10) NOT NULL, TITLE VARCHAR2(255) NOT NULL, ARTICLE CLOB, PRIMARY KEY(ID), UNIQUE(BLOGDATE));

27 ・Copyright ©2009 Embarcadero Technologies, Inc. All Rights Reserved. 本文書の一部または全部の転載を禁止します。

実装の詳細 ­ データモジュール

• 非ビジュアルなコンポーネントを纏める役割を果たす • 主にデータベース関連のロジックを記述する • UI層からデータベースロジックを切り離す

28 ・Copyright ©2009 Embarcadero Technologies, Inc. All Rights Reserved. 本文書の一部または全部の転載を禁止します。

データモジュールが公開するメソッド

• データモジュールのインスタンスを返す関数 • function GetDBModule() … • $global を忘れずに

• シーケンスから次の主キー値を返すメソッド • public function GetBLOGID() • データモジュール内部で使用

• Blogデータを保存(INSERT or UPDATE)するメソッド • public function SaveBlog($date, $title, $article) … • GetDBModule()­>SaveBlog(‘2008/8/20’, ‘タイトル’, ‘<HTML>…’);

• Blogデータを取得(SELECT)するメソッド • public function LoadBlog($date) … • $blog = GetDBModule()­>LoadBlog(‘2008/8/20’);

• ある月のBlog日の日付の配列を返すメソッド • public function GetBlogDays($year, $mon) … • $blogdays = GetDBModule()­>GetBlogDays(‘2008’, ‘8’);

29 ・Copyright ©2009 Embarcadero Technologies, Inc. All Rights Reserved. 本文書の一部または全部の転載を禁止します。

データモジュールが公開するメソッド(続き)

• 基本的に、SQL文は直接記述しなくても良い • Tableコンポーネントは編集可能なデータセット • データセットの現在行を表す各フィールドへアクセスする • SQLインジェクションの危険が無い

30 ・Copyright ©2009 Embarcadero Technologies, Inc. All Rights Reserved. 本文書の一部または全部の転載を禁止します。

各種機能の追加

• カレンダ機能を追加する • MonthCalendarコンポーネント • オープンソースライブラリ「JSCalendar」をコンポーネント化

• BASIC認証の機能を追加する • BasicAuthenticationコンポーネント • 「BASIC認証」をコンポーネント化

• 隠し(hidden)フィールドを使って編集中の記事の日付を管理 • HiddenFieldコンポーネント • HTMLの<input type=“hidden” …> をコンポーネント化

• BlogをHTMLデータとして編集する • RichEditコンポーネント • オープンソースライブラリ「Xinha」をコンポーネント化

31 ・Copyright ©2009 Embarcadero Technologies, Inc. All Rights Reserved. 本文書の一部または全部の転載を禁止します。

Advanced!­ [保存]ボタンをAjax対応にするには?

• VCL for PHPは、オープンソースライブラリ「Xajax」を内蔵 • Button の ButtonTypeプロパティを btNormal にする • Button の OnClickイベントは使わない!! • Button の OnClick Javascriptイベントを使う!!

• echo で Ajax用のJavaScriptコードを出力 • echo $this­>コンポーネント­>ajaxCall(“メソッド名");

• Page の UseAjaxプロパティを true にセット

32 ・Copyright ©2009 Embarcadero Technologies, Inc. All Rights Reserved. 本文書の一部または全部の転載を禁止します。

参考資料

• Embarcadero Developer Network • http://dn.codegear.com/

• ナレッジベース • http://support.codegear.com/php

• Quality Central • http://qc.codegear.com/wc/qcmain.aspx?p=360

• Delphi for PHP による フォトギャラリの作成と運用 • http://conferences.codegear.com/jp/article/images/37640/b6.pdf

• Delphi for PHP 2.0の新機能 • http://conferences.codegear.com/jp/article/images/38299/b2_ja.pdf

• はじめての Delphi for PHP • http://conferences.codegear.com/jp/article/images/38299/t4.pdf

• Delphi for PHP で作るリッチコンテンツブログ • http://conferences.codegear.com/jp/article/images/38706/t3.pdf

• 書籍 ­ Delphi for PHPではじめるPHPビジュアルWeb開発 • http://www.cutt.co.jp/book/978­4­87783­202­5.html

33 ・Copyright ©2009 Embarcadero Technologies, Inc. All Rights Reserved. 本文書の一部または全部の転載を禁止します。

Q&A

ご清聴ありがとうございました

Q&A