1. Qiita
  2. 投稿
  3. WebService

concrete5をウェブサービスのベースとして活用する

  • 4
    いいね
  • 0
    コメント

この記事はconcrete5 Japan Advent Calendar 2016の5日の記事です。4日の記事はtao-sさんのVer.8 から使えるExpressオブジェクトとは?です。

本日の記事は、ウェブサービスをconcrete5ベースで作ったので、その経過を紹介する、というものです。

作ったウェブサービス

マイ見積を作りました。ホームページの訪問者が、フォームの項目を選ぶと、金額を自動計算して、見積書PDFを発行できるサービスです。問い合わせフォームの高機能版と考えてもらうと分かりやすいと思います。
通常は見積書を受注側が作るケースが多いですが、発注側が自分で項目を選んで見積作成する、ということでマイ見積という名前にしています。

my-mitsu-jp.png

マイ見積の前段階として、計算フォームというウェブサイトも公開しています。

concrete5を使うメリット

concrete5を使うメリットについては、以下のようなものがあります。

  • concrete5の標準機能で、アカウント管理機能など、ウェブサービスに必要な機能をかなりカバーしている
  • 公式サイトで、追加機能がパッケージとして公開されている
  • 自社で追加開発した機能をパッケージとして公開できる

実際、アカウントを登録する、アカウント毎に実行できる機能を制御する、など、ユーザー管理に関する部分の多くが、concrete5の標準機能として用意されています。また追加パッケージも、審査済みのものが公式サイトで公開されているので、安心して利用することができます。

パッケージ利用は主に以下の2つです。

  • concrete5の標準機能では課金機能が用意されていないのですが、Membership Subscriptionsというアドオンがあるので、こちらをベースにしています。日本円を選択できるようにカスタマイズしたり、日本語訳を追加したりして利用しています。
  • マイ見積では、マイページへのリンクを管理バーに表示しているのですが、ここはLink to Edit Profile をベースにカスタマイズしています。
  • ログインを通知するために、Login Alertアドオンを利用しています。

さらに、ウェブサービス作成のために開発した機能を、公式サイトで公開することができます。マイ見積でも追加開発を行いました。

追加開発した機能

今回のウェブサービスで追加開発した機能は、

  • 自動計算javascript、見積PDFを作成する機能
  • 画像アップロードをドラッグドロップで行う機能

です。追加開発した機能を公式サイトで公開することで、多くの人に使ってもらうことができ、フィードバックが得られます。また有料で販売することもできるので、収益を得ることもできます。この辺は、12月12日のアドベントカレンダーで書きます。

ドラッグドロップで画像アップロードする機能は、Simple Image Blockとして公開していますので、誰でも利用することができます。標準のファイルマネージャ経由で画像をアップロードするのがまどろっこしい、という方などに便利です。

見積PDFを作成する機能は、公開に向けて準備中です。

concrete5で作るデメリット

これまではメリットを書きましたが、デメリットもあります。concrete5はオープンソースなので理論上は自由に改変できますし、コアファイルをオーバーライドする仕組みも用意されていますが、concrete5の標準機能を大きく変更するのは大変です。

今回の案件で困ったのは、

  • ブロック間の情報の共有
  • ページの所有者が一人

です。

「ブロック間の情報の共有」は、ブロックからページ属性を参照・変更することで対処しました。こうすると、ブロックAでページ属性Xを変更する、ブロックBでページ属性Xを参照する、という方法で、情報を受け渡しできます。
実装上はかなり楽な方法ですが、しかし、こうすることにより、同一ページ上にブロックAは一個のみ、と制限されるので、この点は注意が必要ですが。

「ページの所有者が一人」は、複数ユーザーで同一ページを編集可能にしたい場合に、ページ所有者が複数設定できるのが一番シンプルに実装できそうだな、と考えたからです。
別の方法として、グループをたくさん用意する、という方法も検討したのですが、最終的には、ウェブサービスとしては、複数アカウントでの編集機能を提供しない、という形にしました。

6日の記事はhissyさんconcrete5 サイトをAMPに対応させるです。