SQL Databaseプラグインを2.13に対応させる
EC-CUBE×Microsoft Azureということで、筆者たちが取り組んだのは、現在公開されている「SQL Database対応プラグイン(2.12.1対応) 」を、その次のバージョン2.13系に対応させることを目的として開発をスタートしました。
開発方法
Microsoft Azureでの開発方法は、まずWebサイトのギャラリーからEC-CUBEのパッケージをインストールします。ただし、ギャラリーのEC-CUBEのDatabaseは、ClearDBのMySQLが利用されていますので、「 SQL Database」を利用するために「SQL Database 対応プラグイン」をインストールして、再インストールの際に「SQL Azure」が選べるようにします。また、Azureのサービスから「SQL Database」を立ち上げておきます。
ここで1つだけ注意点があります、「 SQL Database」はデフォルトで外部のサービスとは連携できません。それを許可するために、「 SQL Database > ダッシュボード > 使用できるIPアドレス から、使用できるサービスのWindows Azure サービスを「はい」にして保存します。
このあとdata/config/config.phpをリネームもしくは削除をして、再インストールを行います。このとき、DBの選択画面に出てくる「SQL Azure」を選び、別途立ち上げている「SQL Database」の接続情報でインストールすれば、「SQL Database」でのEC-CUBE環境が完成します。
あとはWindowsの場合はWebMatrix、Macの場合はFTP/FTPSなどもしくはgit連携などで、開発がスタートできます。
開発にあたってのポイント
今回の開発にあたってのポイントは、2.12から2.13への差分の反映とSQL構文の書き直しです。カスタマイズしている所に、修正が入っているのをマージしていく作業とSQLに関しては、「 できなかったことができるようになる」「 できていることができなくなる」「 実装方法の見直し」など多岐にわたって修正が発生しました。
具体的には、
LIMIT OFFSETの書き換え
サブクエリへの書き換え
日付型の計算方法ロジックの変更
といった点に対応しました。
1.LIMIT OFFSETの書き換え
現時点のEC-CUBEの実装としては、サブクエリ内のレコード数の制限をMySQLおよびPostgreSQLに依存したLIMIT/OFFSET句で行っています。これをDBMSごとのSQL文生成機能を追加することで、ロジック上でのDBMS依存を排除しました。
現段階では、この機能がEC-CUBE本体に実装されていないため、プラグイン側に組み込んでおり、プラグインのソースが増大していますが、EC-CUBE本体にフィードバックすることで、プラグインに記述するSQL Database固有の処理を大幅に削減できるともくろんでいます。
2.サブクエリへの書き換え
主にFROM句において、そのままテーブル指定ができずに、サブクエリ化をする必要が各種でありました。そのぶぶやや冗長なSQLとなってしまいました。
3.日付型の計算方法ロジックの変更
現在のプラグインにおいて、日付の計算が必要な場合(30日後等) 、そのまま+30といった書き方をしていた部分があったのですが、これが今回NGとなりすべてにおいて書き直しが必要となりました。結果としてより標準的な書き方に近づけることができているので、今後、SQL Databaseがバージョンアップしたときに耐えうる可能性がある形に仕上がりました。
EC-CUBEは、MySQLとPostgreSQLをサポートしているため、それらに対して整合性が取れなくなる書き方はできないため、各所で分岐してそれぞれの処理を書くことになるのですが全体としての整合性を持たせるために、やや冗長なSQLになることもあります。そのためやや重い処理になることがあるかもしれませんが、そこはAzureの性能に期待して開発を進めました。
DBサーバのスペックを揃えているわけではないため、一概に性能を示すものではありませんが、ギャラリーに用意されているものの構成(無料評価版・ClearDBのMySQLを利用)と比較し、SQL Database(無料評価版)では、商品一覧画面の表示が655ミリ秒から572ミリ秒へと短縮されました(約300商品・同時接続3) 。
環境(今回のセットアップ内容)
サーバOS Windows NT RD00155E201E86 6.2 build 9200 (Unknow Windows version Datacenter Edition) i586
DBサーバ Microsoft SQL Azure (RTM) - 11.0.9213.162 Apr 10 2014 08:27:27 Copyright (c) Microsoft Corporation
Webサーバ Microsoft-IIS/8.0
PHP 5.3.28
EC-CUBEとAzureの開発でよかったこと
最後に、今回の開発で良かったことを挙げてみます。
Microsoft Azureは今回さわるまでただのクラウドサービスと思っていましたが、実は色々なサービスの集合体だったため、最初は戸惑いもありました。しかし、管理ツールでのセットアップから利用までのすばやさ、そして、SQL Databaseはブラウザベースの管理ツール(Silverlightベース)が用意されていて、SQLの解析やDBの型変更などの操作がしやすかった印象です。その結果、不満なく開発ができた事に驚きました。
PHPのVersionを管理ツールからボタン1つで切り替えられるのも便利な機能でした。さらに、実運用を考えてた場合においても、設定した閾値によってスケーラビリティが自動で変更され最適なスケールを選択してもらえる点、定期的なバックアップ設定を管理ツールから行える点など、EC運用には欠かせない機能が揃っている点が良かったです。
今回開発した2.13対応SQL Database対応プラグインは、現在合宿時にやり残したものがないか精査をしており、近い時期に公開できるように進めております。下記のレポジトリなどで最新の開発状況が確認できますので、ご興味のある方は、ご自身でMicrosoft Azureに環境をつくって「SQL Database」環境でEC-CUBEを動かしてみてください。
開発レポジトリ
https://github.com/nanasess/eccube-SQLAzureSupport-plugin (branch version-2_13-support)
デモサイト(SQL DatabaseとMySQLを切り替えできるようにカスタマイズしています)
http://seasoft.azurewebsites.net/html/