ドリーム・アーツの「店舗matic」は、多店舗運営において本部と各店舗の情報共有やコミュニケーションをサポートするSaaS(Software as a Service)型ソリューションである。今回は店舗maticの開発および運営を担当しているドリーム・アーツの石田健亮氏に、同サービスを手掛けることになった経緯や、パフォーマンスやユーザビリティにかけるこだわりなどについてお話を伺った。

長年のノウハウを詰め込んだ店舗matic

ドリーム・アーツ 経営企画本部 新規事業推進室 グループマネージャー 石田健亮氏

多数の店舗の情報を本部で統括する多店舗型の運営形態では、本部と各店舗間の情報をいかにスムーズに共有するかという点が大きな課題となる。適切な店舗運営のためには、本部からの指示通達が各店舗に確実に周知されていなければならず、また現場の状況や販売ノウハウは確実に本部にフィードバックされなくてはならない。しかし現実にはこれらの情報伝達をFAXやメールで行っているケースが多く、情報過多によって指示を見落としたり、効率的な集計ができないなどといった問題を抱えている。

店舗maticはこれらの状況を改善し、効率の良い指示伝達や情報分析を可能にすることを目的として開発されたサービスである。店舗maticを導入することで各店舗は情報処理作業にかかる時間を大幅に短縮し、その分を接客に集中することができるようになる。本部側では各店舗の状況をリアルタイムに把握することができるため、現場に根ざした販売戦略を組み立てることが可能となる。

店舗maticのサービスがスタートしたのは2008年1月だが、それ以前のドリーム・アーツではおもにパッケージソフトを中心とした製品展開を行っており、同社にとっては初のSaaS型ソリューションの提供となった。したがって店舗maticは新しいチャレンジであったわけだが、多店舗運営をサポートするサービスというアイデア自体は長い期間温めていたものであり、石田氏によればその発端は2001年まで遡るという。

「弊社のポータル基盤『インスイート』が2001年からユニクロを展開するファーストリテイリングの本部ポータル基盤に採用されたことが最初のきっかけです。その当時の同社の課題は、急激な勢いで増え続ける店舗間の情報共有をいかにして効率よく行えるようにするかということでした。その後、弊社で同様の事案を多数担当するようになったことから、蓄積されたノウハウを元にパッケージ製品化してリリースしました。ただ、パッケージ化したといっても実際にはユーザ企業ごとに経営形態が異なるので、個別のニーズに合わせて少しずつカスタマイズする必要があるんですね。そういったニーズにも柔軟に対応できるようにしたいということで、SaaSで提供しようということになりました」(石田氏)

店舗maticは、本部側が見る画面(右)と、現場の担当者が見る画面(左)は若干異なる。それぞれにとってプライオリティの高い情報を表示することが重要だからだ。石田氏は店舗matic開発にあたって、実際に自分もショップ店頭に立ち「シャツをたたみながら」(石田氏)、現場が必要とする情報を探ったという

コストを実感することで強くなったパフォーマンスへのこだわり

この店舗maticはJavaを用いて開発されている。使用言語はそれまでのコードやノウハウの蓄積からほぼ必然的に決まったとのことだが、結果としてJavaの持つ潜在能力が店舗maticの可能性を大きく引き上げることになったようだ。

実際にSaaSの運用を開始して石田氏が強く実感したのは、コーディングがどれだけ運用コストに影響するかということだ。運用コストを下げるためには、サーバのリソースをどこまで使い切ることができるかが非常に重要になってくる。そのためにはコーディングのレベルで、リソースを使い切ることを考慮したチューニングが必要となる。

「エンジニアにとってパフォーマンスというと『この処理を何ミリ秒で』という思考になりますよね。それが、運用コストが頭にあると『このコードでコストをいくら削減できるか』という考え方になるんです。目標の単位がミリ秒から円に変わったことで、チューニングということをよりシビアに考えるようになりました」(石田氏)

リソースを使い切ることを目標としたチューニングは、昨今のプロセッサの事情を加味すれば、必然的にマルチコアの性能を生かすという方向になる。その点でJavaは非常に優秀だと石田氏は指摘する。

「CPUの利用率を上げることは、ハードウェアに対する無駄な投資を減らして運用コストを下げることにつながります。マルチコアCPUの場合には並列処理をうまく利用することが必須になりますが、その点に関してはJavaのConcurrency Utilitiesは非常に便利ですし、JVMを意識したバイトコードレベルでのチューニングが可能なので、100%に近い利用率を実現することができます。他の言語でマルチコアの性能を十分に引き出せているという事例はまだあまりありませんが、Javaはそれだけの潜在能力を持っていると実感しています」(石田氏)

では、Javaでマルチコアプログラミングにチャレンジする上で特に留意すべきなのはどういった点だろうか。石田氏は、メモリモデルなどの基本的な部分をきちんと把握していることが重要だと指摘する。Javaのメモリモデルを正しく解説している文献は少なく、結果として曖昧な知識のままで擬似的なスレッドプログラミングを行っているというケースが多々あるという。マルチコアプロセッサで実行する場合には、各コアからメモリがどう見えているかを考えることが非常に重要であり、そのためには正しいメモリモデルを理解している必要がある。同様に、GCのチューニングパラメータなどもマルチコア環境では従来と大きく変わってくるので、GCの動作に関する知識も重要になってくるとのことだ。

またマルチコア以外でも、Javaの場合はコードの蓄積が圧倒的に多いので、どういう技術が蓄積されているかを把握しておくことが、開発能力を高める上で重要になるとのこと。その一方で新しいバージョンの機能に対してアンテナを張っておくことも必要で、古い蓄積ばかりにとらわれていてもいけない。たとえば前述のConcurrency Utilitiesもマルチコア環境に対してはいくつかの問題を抱えており、今後の改善が望まれている。Java 7でラムダ式(旧クロージャ)の導入が取り沙汰されている理由のひとつはマルチコア対応を強化するためだ。

「最先端の技術に目を光らせておくことは非常に重要です。ただし、それがメインストリームではないことも多いですし、顧客のニーズがそこにあるとも限りません。問題の解決に対して何が重要かを考えて選択しなくてはいけません」(石田氏)

「もともとは組込み系の技術者だったので、つい、1バイトにどれだけ詰め込めるか、というところにこだわってしまうんですよね(笑)」(石田氏)

ユーザ視点での使いやすさの追求

店舗maticでは、パフォーマンスと並んでUIにも強いこだわりがある。ユーザとなる店舗のスタッフは必ずしもITリテラシが高いわけではなく、PCを扱い慣れていない人も多い。そのような人にとって使いやすくするにはどうしたらいいか、それを常に意識してUIを考えていると石田氏は語る。

「UIの使い勝手の評価というのは主観的になってしまいがちなので、基準をどこに置くかというのが難しいですね。店舗maticの場合は、事前に細かなルールを決めた上でデザインすることにしています。必ずユーザの作業を誘導できるようなUIにするということにもこだわっています。また、ビジネス的な部分も考えるようにしています。例えばユーザからは操作方法に関する問い合わせを受けることもありますけど、UIの使い勝手を改善することでその回数は減らせるはずですから、運用コストの削減につながります」(石田氏)

UIの改善については、アジャイル的な開発手法を採用している効果もあり、ユーザからのフィードバックを生かして改善を繰り返しているという。現在店舗maticではおよそ2ヵ月に1回のペースでアップデートを行っているが、そこには当然ユーザの意見を取り入れた改善も多く含まれるとのことだ。

「とにかく、技術者視点で妥協することなく、ユーザの視点での使いやすさを最優先するように心掛けています。もっとも、昨今ではユーザが当然として求めるレベルが非常に上がっているので、それに対応するのは一筋縄ではありませんけどね」(石田氏)

ドリーム・アーツでは今後もユーザの声を反映させながら、パフォーマンスや使い勝手をはじめとする品質の向上に努めていくとのことである。また、今後はHTML5やローカルストレージなどといった最新トレンドへの対応も予定しているとのことである。

最後に、石田氏より次のようなメッセージをいただいた。

「メッセージというか、私自身が意識しているのは基本的な部分を毛嫌いしないということです。プロセッサの仕組みなどが理解できると、コードの見え方も大きく違ってきます。この言語はなぜこういう構造になっているのか、そういうことを考えていくと、自然と基本的な仕組みに行き着くんですよ。常に『なんでだろう』という感覚を持ちましょう。そうやって学んだことが、将来的に何かの強みになると思います」(石田氏)