1. はじめに
これまでの2回の記事でPHPからMicrosoft SQL Server(以降、SQL Server)を使うことによるビジネス拡大の可能性、実際にどのようにPHPからSQL Serverにプログラムでアクセスするのかを見てきました。
今回は、「帳票出力」のシナリオを通じて実際にPHPからSQL Serverを活用する実践例を見てみます。
1-1. SQL Server Reporting Servicesとは?
日本における業務のIT化は入力画面の作成と伝票などの帳票出力が代表的な実装例と言えます。特に帳票出力は綿密な帳票設計から始まり、専用の用紙など日本の文化に根付いたものと言えます。ペーパーレスの推進が叫ばれて久しい現在でも引き続き「印刷が行える」という点は多くのシステム開発の要件で存在します。
マイクロソフトプラットフォームにおける帳票ソリューションには印刷用の部品コンポーネントや総合的なツールなどさまざまなものがありますが、マイクロソフト自身が特に推進しているのはSQL Server付属の標準機能であるReporting Servicesです。名前のとおり、SQL Serverのデータを使用してレポートを作成するための機能になります。
少し頭の中の切り替えが必要なのは、元々この製品はいきなり紙を出力するためのイメージを表示するPDF系のソリューションとは違い、動的なWebページ(注1)として帳票と同様のイメージを表示することから出発している点です。実際に紙に出すという観点では、エクスポート機能が使え、ExcelやWordをはじめてとして、PDFにも出力が可能になっています。つまり、2段階目で初めて実際の紙イメージに落とすフローになります。
下図のように、http://localhost/reportserverのようなページにブラウザでアクセスして利用します。
画面表示のソリューションであるという観点では、パラメーター入力も可能で、条件を変更すると表示しているデータもその場で変化するものになっています。ゆえに役員用のダッシュボード(経営指標の現況が一見して把握できる画面)などのBI(ビジネスインテリジェンス)シナリオにも利用されてきており、帳票ソリューションを超えて戦略的なITの有力なコンポーネントとして注目されています。
SQL Server Reporting ServicesはSQL Server 2008というバージョンから大幅にパワーアップしており、下図にあるような非常に視覚的で分かりやすい、Microsoft Officeで登場するさまざまな部品のような美しいレポート作りが可能になっています。加えて、以前このサービスはプロの開発ツールであるVisual Studioでレポートの設計を行う必要があったのですが、現在はReport Builder 3.0という独立したツールでレポートの設計を、Accessの画面設計と同じ感覚でできる特徴があります。マイクロソフトはこの仕組みを最近セルフサービスBIと呼んでいます。
実際に印刷するという観点ではExcelやWordをはじめとして、PDFにも出力可能なので、とても柔軟な印刷ソリューションを構築することができるでしょう。昔は連続用紙に出すような帳票は1つの帳票レイアウトで都度開発を行うというのが当たり前でした。しかし、今はこのように画面と帳票のイメージを一致させておき、Excelのピボットのようにデータを変化させ、それを印刷するあるいは別の形式のファイルに出力し、あとはOfficeの機能を使用する方法論を採ることでシステム開発のコストをスリム化する手法がよく採られます。
この製品に興味を持っていただいた方はSQL Serverの製品ページ、特にセルフサービスBI体験サイトへお越しになってください。実際に体験できるサンプルが多く存在します。さらに、マイクロソフト製品の中でもSQL Serverは最も日本語ドキュメントが整備されており、特に自習書シリーズが大人気です。上記のサンプル図のレイアウトはReporting Servicesの入門編と応用編に従えばとても簡単に作成できますし、最も初歩的なものです。より深く踏み込んでいくとSharePoint Serverのページにもレポートを組み込めるのでさらに用途が拡大します。
1-2. PHPアプリケーションからReporting Servicesを使用するシナリオの考察
それではPHPアプリケーションからReporting Servicesをどう活用するかという点に踏み込んでみましょう。いくつかのシナリオが考えられます。
この場合、データの更新処理だけは前回のアクセス方法でPHPアプリケーションから行い、あくまでも切り離された利用方法で、例えばメニュー画面で分かれているようなケースです。同一のマシンで実行することも可能ですが、レポートサーバーは既定で80番ポートを利用するのでWebサーバーとの競合になるので注意しましょう。
この場合はPHPというよりはHTMLのレベルでフレームを分けるという発想ですが、ブラウザ内での画面遷移などを考慮するとURLのパラメーター渡しで操作するRESTのような手法がとれます。
SQL Server Reporting ServicesはSOAPを使ったAPIでの制御が可能です。
- PHPアプリケーションとはまったく別にレポートサーバーを運用する
- PHPアプリケーションの画面に取り込む
- より密接に連携してPHPアプリケーションからSOAP APIを利用してReporting Servicesを制御する
最初の方法についてはPHPアプリケーションを開発されている方であればどういう仕掛けにするかはすぐに想像できるのではないでしょうか。ぜひPDOを使用したアプリケーションを作り、SQL Serverのデータを更新し、それによって動的に変化するレポートをReporting Servicesを使用して実装してみてください。
本記事では引き続きほかの方法論に注目してより深い解説を続けましょう。
SQL Server本体を制御するAPIとしては共有管理オブジェクト(SMO、注2)というのがあり、Feature Packの一部として入手が可能です。.NETアプリケーションからはこれを使用して容易にSQL Serverを制御できます。ただこれは基本的に制御・管理を行うためのAPIであって、アプリケーションとは直接関係ありません。
以前はSQLDMO(DMO:分散管理オブジェクト)と呼ばれていました。
アプリケーションとの連携という意味ではReporting ServicesにレポートサーバーWebサービスと呼ばれる機能があります。SOAP APIを使用したXML Webサービスになっており、SOAP over HTTPを利用してクライアントプログラムからSQL Server Reporting Servicesの機能を使うことが可能です。
どの拡張方法も基本的にこのWebサービスの仕組みを利用しており、例えば、レポートのメニューになっているレポートマネージャーもクライアントアプリケーションの一つの例です。
1-3. WebサービスへのURLアクセス
XML Webサービスとして公開されている点から、RESTのようなアクセス方法が第一の選択肢であり、実装方法例の2番目はこの手法を用いるのが最適と言えるでしょう。
以下はMSDNサイトから抜粋してきたサンプルです。
<a href="http://server/reportserver?/SampleReports/Territory Sales Drilldown&rs:Command=Render&rc:LinkTarget=main" target="main" > Click here for the Territory Sales Drilldown sample report </a>
このようにHTMLで参照する先としてURLにコマンド(例ではRender)およびターゲットとなるフレームを指定して継続的に窓の中でレポートを参照できるようなテクニックを用います。このようなHTMLをPHPアプリケーションの出力するページに埋め込めばいいことになります。
1-4. SOAPを使用したAPIアクセス
下記は/SamplesフォルダーにあるReport1というレポートを削除(DeleteItem)するように指定したSOAPメッセージです。なんとなくイメージできるでしょうか。
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soap:Body> <DeleteItem xmlns="http://www.microsoft.com/sql/ReportingServer"> <item>/Samples/Report1</item> </DeleteItem> </soap:Body> </soap:Envelope>
PHPでもSOAPメッセージをpdo_soap.dll拡張およびSoapClientクラスを使用して送信できますから、このサービスとの連携を行えます。このSOAP APIを使用したアプローチではURLでのアクセスよりも広範囲な制御が可能で、この仕組みを完全にマスターしたい上級者の方はこちらにチャレンジすることをオススメします。
これらに関してはMSDNオンラインにある「アプリケーションへのReporting Servicesの統合」という記事とそのサブツリーが参考になるのでご覧ください。また、PHPとの連動部分に関してはPHP on Windows Training Kitにサンプルが入っていますが、データベースのバージョンがR2に対応していないなど環境面で苦労すると思いますので、手順などの詳細はTechNet IIS TechCenterに掲載しているPHP on Windowsガイドラインおよびブログで順次書いていくことにします。
2. まとめ
新しいビジネスを本番環境で行うのはStandard以上のエディションが必要になりますが、開発用途あるいはそれほど規模が大きくない環境では無償版のSQL Server 2008 R2 Express with Advanced Servicesも使えます。無償版というと通常GUIツールが付いていなかったりして不便だったりしますが、Reporting Servicesに関しては同じように使えるのですぐにでも前述の内容をお試しいただけます。また、レポートビルダーは非常に便利なツールであり、SQL ServerとMySQLとの構文違いが心配という方にとっても、クエリーをビジュアルに組み立ててくれるため悩む必要はありません。一度お試しになることをお奨めしておきます。
各ソフトウェアの入手先を再度整理しておきます。
- Microsoft SQL Server2008 R2 RTM - Express with Advanced Services
- Microsoft SQL Server 2008 R2 レポート ビルダー 3.0
- SQL Server 2008 R2 自習書シリーズ
PHPをよく利用されていらっしゃる方で帳票ソリューションを求めている時に、こんな話もあったなとぜひ思い出してください。でもこれはあくまでもPHPとマイクロソフト製品の連携例であり、他のパターンもいろいろと考えられるはずです。最後にマイクロソフトが次第に増やしている相互運用のさまざまなシナリオを網羅したサイトをご紹介しておきます。