エンジニアリング


2016.6.17

PaddleTDのサービスの裏側

高橋さん_アイキャッチ


はじめまして、プリンシプル 製品開発チームの高橋です。
今年の3月31日にめでたくリリースされたクラウド型広告文作成ツールのPaddleTDですが、そこで利用している技術やサービスについて軽くご紹介いたします。主にシステムのバックエンド(フロントエンドを除いた見えない裏側の部分)の話題になります。小さくサービスを作って運用してみたい人向けの記事です。

PaddleTDのシステムの選定を行ったのは、今から1年ほど前になります。PaddleTDはプリンシプル社での初めての自社Webサービス開発でした。まず、いったんやりたいことを素早く最小限の形でサービス化し、それを運用しながら修正していく方針で利用する技術とサービスの選定を行いました。

ソフトウェアスタックは最終的に下のようなになったのですが、順を追ってご説明します。

imgs_software_stack

Node.js

node

まず、サーバサイドの実行環境にはNode.jsを選びました。
Node.jsは当時も開発コミュニティが活発で、利用者がどんどん増え、非常に勢いのある実行環境でした。なので、私も本番サービスで使ってみたいとチャンスを狙ってました。また、プリンシプル社内にはJavaScriptを使うエンジニアと業務がありフィットするのではと考えました。他に、スクリプト言語であるため記述が楽で、且つ、ミドルウェアやパッケージが豊富なので、それらを組み合わせることにより素早く開発が進められること、実行環境が軽量で高効率なので小さなサーバーリソースでサービスを始められることなどを理由に最終的に採用に踏み切りました。

また、PaddleTDでは、Node.jsの次の定番ミドルウェア・パッケージを利用しています。
 ・ExpressJS(Webフレームワーク)
 ・Mongoose(MongoDBドライバー)

mongoDB

mongo

データベースはMongoDBです。Node.jsつまりJavaScriptで開発するため、システム内のデータは自然とJSON形式を使うことが多くなります。JSONライクにデータを格納するMongoDBは、そのような開発にベストマッチです。また、データ構造についても、実際に動かしながら仕様を探っていくような開発において、追加変更しやすいゆるふわなNoSQLデータベースが期待通りマッチしました。MongooseというNode.js用のmongoDBドライバーが適度な構造化をしてくれるので、このようなゆるいDBと開発プロセスにもかかわらず、規模がそれなりに大きくなってもなんとか整合性を保てるのではという算段がありました。
後述のHerokuにmongoLab(現mLab)、mongoHQ(現compose MongoDB)というMongoDBのアドオンサービス(BaaS)が存在するのも選択の理由です。MEANスタックが普及しており組み合わせの実績があることも重要です。

フロントエンドのフレームワークは、当初Backbone.jsで開発していたのですが、途中エンジニアが変わったタイミングでAngular.jsに置き換えをして、結果MEANスタックそのものになりました。

Heroku

heroku

「サービスの開発に注力したいので、インフラ設計やシステム運用はなるべくやりたくないよね。」と開発サイドと経営サイドで合意し、すんなりHerokuを使うことにしました。HerokuはPaaSタイプのクラウドインフラで、OSレイヤより下の面倒を見ることなく、素早く数コマンドでアプリケーションを立ち上げることができます。

[Heroku公式] node.jsでのスタートアップ手順(英語)

そして、もっと重要なこととして、システム運用のためのアドオンが豊富にあるため、それらを組み合わせるだけでシステム運用のための基盤を作ることができます。サーバーリソースの変更やシステムのロールバックなども簡単で、まさに小さくサービスを始めるためのプラットフォームといった感じで使わない手はないです。Herokuは本当に気持ちよくて開発寄りのエンジニアであれば病みつきになると思います。

[Heroku公式] スケールアップ
[Herou公式] リリースのロールバック

また、Herokuの豊富なアドオンは眺めているだけでも楽しくなります。
[Herou公式] Herku Addons

PaddleTDで利用し、開発/運用を通してお世話になっている定番Herokuアドオンたちです。

・NewRelic(稼働監視、性能監視)
・PaperTrail(ログのWeb閲覧)
・AirBrake(バグトラッカー)
・MongoLab(データベース、現mLab)
・SendGrid(メール配信)

その他PaddleTDを支えるサービス

ほかにもいろいろな定番ツールを活用し、気持ちよくスピード感を持って日々開発を行っています。

image2

その他、プロジェクトを支えたツールをリストアップしてみました。あらためて、開発から運用までほんとうに多くのツールやサービスのお世話になっています。

・GitHub(ソース管理・リポジトリ)
・Backlog(タスク、課題管理)
・Slack(エンジニア・マシン間のチャットツール)
・ホワイトボード(タスク・設計・仕様の整理)
・週次ミーティング
・卓球台(コミュニケーションツール)

意外に思うかもしれませんが、この中でとても重要なのは、「週次ミーティング」と「卓球台」です。いろいろなステークホルダと直接会話できる週次ミーティングでは、数多くの重要な方向修正が行われました。そして、開発で集中した後には卓球をして頭と体をリフレッシュするのがよいルーチンを生み出します。プロジェクトの関係者がエネルギッシュでベクトルが合っているなら、実は使うツールやサービスなんてどうでもいいのかもしれません。

問題点と課題

現在、特に大きな問題はない(と個人的に思う)のですが、感じている問題や課題についてまとめました。この環境ならではの問題として、このようなことに悩みながら開発を進めています。

・JavaScriptのバグや問題点の発見しにくさ
・Node.jsの非同期処理(コールバック)によるソースの見通しの悪さ
・DB容量増加に伴うmLabの利用料金の増加
・HerokuのSSLアドオンの利用料金の増加($20/month x アプリ数)
・各種モジュールや環境の変化が激しくバージョンアップや追従のコスト増

ツール選定の基準

これらのツールがフィットしたプロジェクトの背景についても考えました。言い換えると、これらプロジェクトの特性に合わせてツールを選んだともいえます。条件が異なればまた別の基準でツールを選んだでしょう。

・プロジェクトのステークホルダとの距離感、体制(どんな人が参加しているのか)
・サービス品質に対する期待
・サービス規模
・開発(初期費)と運用(ランニングコスト)の費用感
・スケジュール、時期

おわりに

PaddleTDでは、ご紹介したような環境でサービス開発&運用を行っています。途中いろいろな調整や変更がありながらも、本当に素晴らしく気持ちよい環境で進められていると感じています。これからサービスを始めようとされる方のご参考になればと思います。

そして、そろそろ、また違ったプラットフォームや技術を積極的に試していきたいところです。これからもPaddleTDをよろしくお願いしたします!


Principle-c

Principle-c

Google社からGoogleアナリティクス認定パートナーとして認められる、日本ではわずか15社しかないトップレベルのデータ解析、オンラインマーケティング会社。創業わずか4年超ですが、業界トップレベルのコンサルタントが、大手企業を中心にオンラインマーケティングの支援をしており、4期連続増収増益、スタッフ数も40名を超え急成長しております。


> の記事一覧

20161124_n
2016.11.24

米国エキスパート執筆「Googleアナリティクス/タグマネージャ解体新書」かいつまみレビュー(前編)

著者:
blog
2016.6.3

2016年決定版!! マーケティング関連タグの計測精度を上げるテクニック

著者:
amphtml
2016.2.19

Accelerated Mobile Pages HTMLについて

著者:
blog_thumbnail
2016.8.4

スクロールするとURLが変わるページをGoogleタグマネージャでトラッキングする方法

著者:
20161025_n
2016.10.25

Webマーケター必見!Google タグマネージャでCV金額がないページで金額を送信するための簡易実装

著者: