読者です 読者をやめる 読者になる 読者になる

mixi engineer blog

ミクシィ・グループで、実際に開発に携わっているエンジニア達が執筆している公式ブログです。様々なサービスの開発や運用を行っていく際に得た技術情報から採用情報まで、有益な情報を幅広く取り扱っています。

Plannahの紹介と、新プロダクト立ち上げにまつわるいくつかの開発話

AWS iOS Objective-C Plannah Ruby on Rails innovation center

こんにちは、最近ももクロの「労働讃歌」が妙に染みる衣川です。
現在私は、Plannah(プランナー)というサービスの開発に携わっています。
このPlannahは、ミクシィイノベーションセンターという枠組みの中で今年の5月に正式に開発を始め、8月にローンチをしたばかりのできたてほやほやのサービスです。
今日はこの場を借りて、Plannahとはどんなサービスで、どのようにして生まれたのかをご紹介させて頂きたいと思います。
また、現時点ではどのような技術を使って開発、運用が行われているのかも合わせてご紹介させて頂きます。

Plannahとは

Plannah(プランナー)とは、スマートフォンの中に詰まった思い出いっぱいの写真を、綺麗に整理し、アルバムを作ることができ、更にそのアルバムを大切な人たちと共有することができるアプリです。
アルバムの数に上限はありません。写真の枚数も無制限で、現時点では一度に200枚のアップロードが可能です。
ローンチ時から日本語、英語、韓国語に完全対応しています。

世の中にスマートフォンが普及し、いつでも簡単に高品質の写真を撮影することができるようになりました。みなさんも、SNSなどに投稿したり、メッセンジャーサービスなどを使って友達や同僚とやりとりをして楽しんでいるかと思います。
一方で、

 

    • みんなで集まったイベントで皆写真を撮ったのだけど、良い感じに共有する方法がない!

 

    • メッセンジャーサービスで写真をやりとりしたけど、流れてどこかへ行ってしまった!

 

    • ちょっとした出来事から大きなイベントまで、スマートフォンに詰まった写真を綺麗に整理して振り返られるようにしたい!

 

    • 機種変更するときにデータを上手く移行できずに、消えてしまった!

 


といった様々な問題も現れてきました。
Plannahチームは、これらの問題を解決していきたいと考えています。

開発開始まで

Plannahプロジェクトの始まりは、2012年の夏にさかのぼります。

当時、mixi公式iPhoneアプリのディレクターをやっていた土戸と「何か新しいサービス作ってみたいなー」と話しているうちに、本気でやってみようという流れになりました。
しばらくしてデザイン担当の永尾が加わり、今のPlannahチームが出来上がりました。
同時期に立ち上がったミクシィイノベーションセンターへ応募をし、まずは業務外の時間を使って企画を練り上げていきました。
(ミクシィイノベーションセンターは、株式会社ミクシィの社内新規事業を育成・支援 (インキュベート) し、みずからも新規ビジネスの調査企画を行っている組織です。)
提出当初、あっさり採用されるんじゃないかなーと軽く考えていたら、最終的にGOが出たのは3月になってからでした。
半年以上も何をやっていたのかというと、提出 - 差し戻し - 練り直し をひたすら繰り返していました。
何度も諦めかけたり、ケンカを繰り返しつつも、その中で自分達が本当にやりたいこと、ビジョン、日々の生活の中で感じている問題点が浮き彫りになりました。
気がつくと、当初の企画とはかなり違ったものになっていました。

ビジョン


Plannahチームのビジョンは、「何気ない日常を大切に、大切なものをもっと大切に」です。
日々の生活の中では、毎日たくさんの出来事が発生します。
それは、非常に大切なことからそれ程でもない他愛のないことまで様々です。
このような出来事の中で、大切なものには時間を十分使ったり、意識を向けたりするかと思いますが、そうでないものに関しては疎かにしがちではないでしょうか。
例えば

 

    • 妻に頼まれたことをつい忘れてしまった

 

    • みんなでとった写真を送ってくれと言われていたのに、すっかり忘れていた

 

    • 週末の予定を直前まで忘れていた

 


これらは皆、最近自分がやらかしたことです、ごめんなさい。

決して大切でないわけではないのですが、ついつい忘れてしまいがちです。

Plannahチームは、自分達のプロダクトによって何気ない日常や普段疎かにしがちなことを大切にできるようにしたい、それによって大切なことをもっと大切に出来るようにしたい、それによって、多くの人を今以上に幸せにしたいと考えています。
そして、これが私達のビジョンであり、ミッションであると考えています。

開発について


という訳で、2013年5月から正式に開発スタートとなりました。
Plannahチームの役割は

 

    • 衣川 - エンジニアリング担当

 

    • 土戸 - プロジェクト責任者、マーケティング担当、(iPhoneアプリのUIプログラミング)

 

    • 永尾 - デザイン担当

 


となっています。
この3人で、3ヶ月で開発を終えローンチしました。
現在のPlannahの構成は以下のとおりです。

 

    • AWS(EC2、ELB、S3、RDS、SES等)

 

    • MySQL 5.6

 

    • nginx、Unicorn

 

    • Ruby on Rails 4(Ruby 2.0)

 

    • iPhoneアプリ(iOS 6,7対応)

 


現時点では、iPhoneアプリのみの提供となっております。
PlannahではAppleのリモートプッシュ通知を使っていますが、バックエンドはParse.comのPushサービスを利用しています。
CI環境としてJenkinsを用意し、テストとiPhoneアプリ配信の自動化を行っています。
テストは、RailsはRSpec、iOSはKiwiを使っています。
ソースコードはGithub business planを利用し、Pull requestベースでの開発を行っています。
私はPlannahに携わる前は、mixiの公式iPhoneクライアントアプリの開発一筋でした。
正直サーバーサイドに関してはほぼ素人だったので、なるべく特別なことはせず、すでに世の中にあるものを最大限に利用しつつ、継続して拡大していけるような構成を心がけました。
なんとかなるものですね。

自動化


開発を始めるにあたり一番最初に行ったのがテストとアプリ配信の自動化でした。
Jenkinsを使ってGithubを監視し、Pull requestのマージが行われるタイミングで自動的にテストを実行します。
テストの結果とカバレッジは自動的にグラフ化されてJenkins上で見ることができます。
Kiwiによるテストや自動化については、
mixi-inc / iOSTraining 11.3 Kiwiを用いた振る舞いテスト
Kiwiをjenkinsで動かしてCIする
最近の開発環境について話してみる sakata
あたりに詳しく書いてあります。
iPhoneアプリはテストに加え、ビルド、アーカイブまで行い自動でTestflight経由で開発メンバーに最新のバイナリを配信します。
開発メンバーは、常に最新のビルドを実機で確認することができます。

Railsアプリケーションのデプロイはcapistranoを使って自動化しました。
デプロイ先はAmazon ELBにぶら下がっているEC2インスタンスです。
capistranoのdeploy.rbの中で、AWS SDK for Rubyを叩き、本番ELB配下のインスタンスのIPアドレス一覧を取得し、一度に複数台のインスタンスにデプロイできるようにしました。
AWSはコマンドラインツールが充実しているので便利ですね。

本当はchefを使ったり、EC2のオートスケールを設定したり、あれこれ自動化したかったのですが、3ヶ月でローンチするというなかなか厳しいスケジュールの中、今やることではないと割りきってしまいました。
残念ながら、環境整備ばかりしていてもプロダクトは完成しません。
結果、ギリギリスケジュールに間に合ったこともあり、今回の場合は良い判断だったと思います。
しかし、予算が少ない少人数のプロジェクトでは、自動化は死活問題です。
今後も継続して推進していきたいと考えております。

数値計測


Webサービスの改善に欠かせないのが、各種数値計測です。
Plannahチームでは、ローンチ時からチーム内で定めた指標に基いて数値を計測、評価、改善を繰り返しています。
バッチ処理などを行うEC2インスタンスがあるのですが、それを使って定期的に数値計測を行っています。
バッチ処理には単純なRubyスクリプトをcronで実行する場合もありますが、rails runnerコマンドを使うことでRailsの実行環境をそのままバッチスクリプトの中でも使うことができるので、必要に応じて使い分けています。
計測したデータは専用のDBに格納しているのですが、PlannahチームではGeckoboardを使って可視化しています。
Geckoboardは、整形したデータをHTTPで送りつけるだけできれいなグラフで表示してくれるサービスです。
↓こちらはサンプルデータですが、このようにかっこ良く表示してくれます。

重要な数値をGeckoboardに送りつけ、開発現場では常に表示しています。
Geckoboardの存在はDeployGateチームから教えてもらいました。

最後に


Plannahはまだ立ち上がったばかりのサービスですが、すでに8回のバージョンアップを実施しおります。
大きなものとしては、先月公開されたiOS7には、公開初日から完全対応しAppStoreのiOS7特集に掲載されました。
また、昨日リリースしたVer3.0.0に至っては、Ver2.0.1までのフィードバックをもとにアプリのUIをほぼ作り変えました。
アプリの出来についても、幸いなことに良い評価を頂いております。
今のところ、非常にスピード感のある開発ができていると思います。

一方で、Plannahの価値や世の中の問題について、もっとフォーカスしていく必要があると感じています。
改善すべき点もすでに山盛りです。
これらの踏まえて、引き続き最大限の価値を提供できるように頑張りたいと思います。
また、今回はさらっとしか書けなかったPlannah開発で得られたノウハウは、今後社内社外問わずに随時公開していきたいと考えています。

最後に、まだPlannahを使ったことが無いというiPhoneユーザーの皆様、是非一度お試しください!
3連休にとった写真や、iPhoneの奥深くに埋もれたあの日あの時の写真を、Plannahを使って大切な人と共有してみてはいかがでしょうか。

Android版もこの冬にリリース予定です。
今後共Plannahをよろしくお願いします!