この記事はconcrete5 Japan Advent Calendar 2016の5日の記事です。4日の記事はtao-sさんのVer.8 から使えるExpressオブジェクトとは?です。
本日の記事は、ウェブサービスをconcrete5ベースで作ったので、その経過を紹介する、というものです。
作ったウェブサービス
マイ見積を作りました。ホームページの訪問者が、フォームの項目を選ぶと、金額を自動計算して、見積書PDFを発行できるサービスです。問い合わせフォームの高機能版と考えてもらうと分かりやすいと思います。
通常は見積書を受注側が作るケースが多いですが、発注側が自分で項目を選んで見積作成する、ということでマイ見積という名前にしています。
マイ見積の前段階として、計算フォームというウェブサイトも公開しています。
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に対応させるです。