書籍転載
|
Page1
Page2
|
本コーナーは、秀和システム発行の書籍『Windows Azure 実践クラウド・プログラミング for C#/Visual Basic/PHP』の中から、特にInsider.NET読者に有用だと考えられる章や個所をInsider.NET編集部が選び、同社の許可を得て転載したものです。基本的に元の文章をそのまま転載していますが、レイアウト上の理由などで文章の記述を変更している部分(例:「上の図」など)や、図の位置などを本サイトのデザインに合わせている部分が若干ありますので、ご了承ください。『Windows Azure 実践クラウド・プログラミング』の詳細は「目次情報ページ」もしくは秀和システムのサイトをご覧ください。 |
ご注意:本記事は、書籍の内容を改変することなく、そのまま転載したものです。このため用字用語の統一ルールなどは@ITのそれとは一致しません。あらかじめご了承ください。 |
■7-3テーブルストレージ利用の基本
続いて、テーブルストレージにアクセスしてみましょう。本節で作成するのは、一言掲示板です。
図7-24:投稿内容を一覧表示 |
○[1]テーブル接続の準備を行う
アプリケーションを作成する前に、MyLib.phpにブロブ操作のためのテーブルクライアントを作成するcreateTableStorageClient関数を追加します。createTableStorageClient関数は、プロジェクトにデフォルトで用意されているサンプルTableSample.phpに含まれているものをほぼそのまま利用しています。
|
|
リスト7-5 MyLib.php |
*28 サンプルではtrue設定になっていますが、そのままでは本番ストレージにアクセスできません。falseに変更してください。 |
テーブルストレージへのアクセスを管理するのは、Microsoft_WindowsAzure_Storage_Tableクラスです。
|
|
構文 Microsoft_WindowsAzure_Storage_Tableクラス(コンストラクタ) | |
$host:ホスト名 $account:アカウント名 $key:アクセスキー $usePath:パス形式のURIを利用するか $retry:再試行の回数/間隔 |
リスト7-5では、アプリケーション環境に応じて本番のストレージサービスにアクセスするか()、開発ストレージにアクセスするか(
)を決めています。Microsoft_WindowsAzure_Storage_Tableコンストラクタですべての引数が省略された場合、開発ストレージに接続するためのテーブルクライアントを作成します。
*29 開発ファブリックから本番ストレージにアクセスする方法については、「PHPでWindows Azureブロブ・ストレージを活用しよう」の「【Note】開発ファブリックから本番ストレージにアクセスするには?」も参考にしてください。 |
○[2]エンティティクラスを定義する
テーブルに格納するためのエンティティを定義します。エンティティは、Microsoft_WindowsAzure_Storage_TableEntity派生クラスとして定義する必要があります。
|
|
リスト7-6 Message.php |
エンティティクラスの中身は、プロパティ(パブリックなメンバ変数)の定義のみですが、一点のみ、
ドキュメンテーションコメントとしてプロパティのデータ型を明示する必要がある
点に注意してください。記述の形式は、以下の通りです。
/** |
指定できるデータ型は、表7-3の通りです。
データ型 | 概要 |
Edm.Binary | バイト配列(64キロバイト以下) |
Edm.Boolean | ブール値 |
Edm.DateTime | UTC時刻(1601/1/1.9999/12/31) |
Edm.Double | 浮動小数点値(64ビット) |
Edm.Guid | グローバル一意識別子(128ビット) |
Edm.Int32 | 整数値(32ビット) |
Edm.Int64 | 整数値(64ビット) |
Edm.String | 文字列(64キロバイト以下) |
表7-3 エンティティで指定可能なデータ型 |
本サンプルでは、文字列型のName、Url、Bodyプロパティを定義しています。
○[3]メッセージ投稿&一覧表示のコードを記述する
新規のBbs.phpを作成し、リスト7-7のようなコードを記述します。
|
|
リスト7-7 Bbs.php |
スクリプト全体の構造はリスト内のコメントを参照頂くとして、以下ではテーブル操作に関わる部分をいくつかのブロックに分けて解説していきます。
テーブルを作成する
エンティティを保存するためのテーブル(ここではMessage)を作成します。tableExistメソッドでテーブルの存在チェックを行った後、存在しない場合にのみcreateTableメソッドで作成処理を行います。
これまでの繰り返しですが、テーブルの作成は本来、アプリケーションロジックの一環として行うべきものではありません。実際のアプリケーションでは、セットアップ用のスクリプトを用意して、あらかじめ実行するようにしてください。
投稿をテーブルに登録する
は[投稿]ボタンをクリックした時の処理です。テーブルにデータを登録するには、まず対応するエンティティ(オブジェクト)を作成します。エンティティのコンストラクタは、以下の通りです。
|
|
構文 Microsoft_WindowsAzure_Storage_TableEntityクラス(コンストラクタ) | |
$part:パーティションキー $row:行キー |
サンプルでは、パーティションキー(引数$part)には固定で"php"とセットしていますが、(たとえば)掲示板に応じて識別のためのコードを入力するようにしても良いでしょう。行キーには、2038/01/01のタイムスタンプ値から現在時刻のタイムスタンプ値を差し引いたものを13桁の固定長文字列でセットしています。これは投稿を新しい順にソートするための措置です。
エンティティ(オブジェクト)を作成できたら、あとは必要なプロパティをセットし、insertEntityメソッドでテーブルに投入するだけです。
|
|
構文 insertEntityメソッド | |
$table:テーブル名 $entity:投入するエンティティ |
エンティティの一覧を取得する
テーブル配下のエンティティセットを取得するには、retrieveEntitiesメソッドを呼び出します。
|
|
構文 retrieveEntitiesメソッド | |
$table:テーブル名 $filter:抽出条件 $entity:エンティティのクラス名 |
引数$filterには、エンティティ取得のための条件式を指定します。リスト7-7では、パーティションキーがphpであるエンティティをまとめて取得しています。
retrieveEntitiesメソッドは、Microsoft_WindowsAzure_Storage_TableEntityオブジェクトの配列を返しますので、あとは、これをforeachループで順に取り出すだけです。getTimestampメソッドは、エンティティの更新日時を返すためのメソッドです。
ちなみに、パーティションキー/行キーで特定のエンティティを取得したい場合には、retrieveEntityByIdメソッドを利用することもできます。
|
|
構文 retrieveEntityByIdメソッド | |
$table:テーブル名 $part:パーティションキー $row:行キー $entity:エンティティのクラス名 |
○[4]サンプルの動作を確認する
以上の手順を終えたら、開発ファブリックでサンプルを実行してみましょう。本稿冒頭の図のようなページが表示されたら、記事を正しく投稿できること、投稿内容が一覧表に正しく反映されることを確認してください。
次のページでは、本章最後のテーマとして、PHPアプリケーションからSQL Azureに接続する手順を解説します。
INDEX | ||
[書籍転載]Windows Azure 実践クラウド・プログラミング for C#/Visual Basic/PHP | ||
PHPでWindows Azureテーブル・ストレージを活用しよう | ||
1.テーブルストレージ利用の基本 | ||
2.SQL Azure利用の基本 | ||
「Windows Azure 実践クラウド・プログラミング for C#/Visual Basic/PHP」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|