会社のコト 働くヒト お知らせ・ご案内 その他

2018/04/05

事業成長と技術的課題に同時に取り組む、『minimo』開発陣の日々

ダウンロード数250万件を突破したサロンスタッフ直接予約アプリ『minimo』。2014年の1月に美容師とカットモデルをつなぐアプリとしてサービス提供を開始し、2015年2月に美容師などのサロンスタッフ個人を、お客さまが直接予約できるアプリにリニューアル。2018年4月の現在も成長を続けており、サービスを支えるシステムも当初から大幅に改善・改修しています。開発体制の過去と現在、そして未来について開発責任者の尾関とエンジニアの菊間にインタビューしました。

 

アプリエンジニアがいない中、アプリを展開

━━━━2014年1月にリリースしてから4年が過ぎました。まずは、当時の開発状況について教えてください。

尾関 2013年頃、「新規アプリを複数作ろう」という機運が社内で高まり、その一環でサービス開発が始まりました。当時エンジニアは2名しかいないという割とシビアな状況でした。
※サービス誕生の経緯はコチラ

━━━━大変でしたね。

尾関 加えて、サービスがカットモデルと美容師をマッチングさせるアプリでしたので、iOSとAndroidの両プラットフォームで展開する必要があると考えていましたが、私を含め2名ともネイティブアプリ開発の経験がありませんでした。

━━━━それは困りました。

尾関 そこで、開発はPhoneGapで進めました。JavaScriptであれば経験もあるし、両プラットフォームでの展開も可能でした。しかし開発を進めてみると様々な問題がありました。

━━━━どんな問題が。

尾関 コンテンツを表示するだけなら致命的な問題は無かったのですが、Androidのユーザに入力させる画面に様々な不具合が出てしまいました。例えばあるcssプロパティが書かれていると日本語キーボードで入力できないなど…。

それに加え、やはりネイティブの実装と比較すると画面遷移やスクロールにもたつく等基本的なパフォーマンスに劣るところが開発を進めていくとだんだんと目につくようになってきました。しかし、嬉しいことにリリース直前にiOSのアプリエンジニアがジョインしてくれたので、iOSだけはネイティブアプリで展開ができました。Androidのネイティブ置き換えはその後1年ほどかかりましたが…。

━━━━制限ある中のリリースだったのですね。

菊間 とはいえ、当時のシステム環境が、4年経過したいま、現役メンバーを悩ませているところがあります。例えば、通信周り。現状でももちろん問題なく作動しますが、当時複数のアプリで利用することを想定した内製ライブラリが通信のコア部分を担っている箇所に入っているため、改修するとなると影響範囲が広いので手が出しずらい

また、古いモジュールを使っていて、最近のHTTP/2に対応していないという問題や、複数のアプリで連携することを前提としたシングルサインオンなど、今のminimoにとってはオーバースペックで負担になるなどの課題もあります当時の他のアプリと連携するという事業展開から方向転換した結果なので仕方がないんですけどね。

━━━━そういった状態だと何が課題になるのでしょうか。

菊間 新規機能や機能改修をリリースしようとすると、バグにつながる可能性があったりします。開発期間においても、見積もりでは2週間だったものが、弊害により伸びてしまうことも想定されます。例を挙げると、ジェンガのようなイメージです。ゲームを進めると最初は土台が安定していますが、タワーがどんどん不安定になり慎重にパーツを積むようになりますよね。システムにおいても同様に、変化に強い土台を作っておかないと、事業成長がスピードダウンする恐れを招くかもしれない。エンジニアがそのように足を引っ張るわけにはいかないですし。

 

手が空いたら…では進まない。

━━━━様々な課題がある中、どのように解決していますか?開発体制を教えてください。

尾関 開発環境は下記の通りです。エンジニアのメンバーは9名、アプリ、サーバサイド、フロントエンドと分担しています。進め方は人数や規模によって柔軟に対応しています。

 

『minimo』の開発環境

iOS Objective-C,Swift
Android Android Studio, Java, Kotlin
サーバーサイド Perl, Go
インフラ AWS(EC2, S3, RDS(MySQL, Aurora), Elasticache etc)
ソースコード管理 Git
プロジェクト管理 GitHub
コミュニケーション Slack
タスク管理 trello

 

━━━━どのようにでしょうか。

尾関 基本的には事業成長に直結する案件を優先し、手が空いたらちょっとした使いづらさの改善や技術的課題に取り組むというスタンスでした。しかし「手が空いたら」は思った以上に機会がありませんでした。更に技術的課題によって事業成長に直結する案件すら開発スピードが思ったように出せなかったり、不具合が起きてしまうなどの問題が出てきていました。

そこで、事業を成長させつつも着実に技術的な課題を解消していくためのやり方として、リリースを2種類に分けてみることにしました。事業成長に直結する案件を開発するリリースと、ちょっとした使いづらさの改善や技術的課題の解決を行うリリースの2種類です。リリースを2種類としたのは、10%ルールや改善Dayのようなルールと比べ、他の開発が遅れたことでその時間が無くなってしまうことを避けやすそうだと思ったからです

━━━━なるほど。現在は。

尾関 リソースの余裕はありませんが、昔よりもエンジニアが増員できたこともあり現在は1種類のリリースに戻す代わりに、毎回必ず何かしらの技術的課題に取り組むようにしています。この方が技術的課題を解決するリリースを待たずに、課題に取り組めるためです

菊間 全体的な設計方針を見直したり、そのコードを書いた頃には存在しなかった便利なライブラリを活用するなどして、アプリ全体の改善を着手できるところからやっています

━━━━タスクの割り振りは。

尾関 新しくジョインしてくれたエンジニアには、仕様を把握してもらうために、サービスのコアな部分に着手してもらっています。例えばサロンスタッフの『検索』や『予約』などですね。その部分において、数日で対応できる比較的容易な案件を複数回開発するとサービスの仕様への理解が深まります。そこから徐々に担当する範囲を広げていくようなイメージです

━━━━現在Kotlin、Swiftに書き換えていると聞きましたが。

菊間 割合でいうと、Kotlin,Swiftともまだ1割以下ですね。ただこれは、必ずしも100%書き換える必要があるとは思っていません。新しい言語の方が有利な場合は多いですが、小さな変更しか入らない場所や変更を入れていない部分まで書き換える必要はないですし、結局はメリットデメリットを考えながらです。ただ、エンジニアが自由に試したいものを取り入れる体制はできています。

━━━━例えば。

菊間 私が『minimo』にジョインしてからは、DataBindingやRxJavaなどを取り入れた方が効率的に開発出来ると思ったので、入れちゃいました。エンジニア同士のコンセンサスさえ取れれば、割と自由にできますね。

━━━━その辺りはエンジニアへのリスペクトがありますね。

菊間 そうですね、お互いにリスペクトがあるからチャレンジしやすい環境になってるんだと思います。

━━━━新しいチャレンジに積極的なエンジニアには楽しめる環境ですね。

菊間 そうですね。仮にAndroidエンジニアが「サーバサイドにチャレンジしたい」「iOSを学びたい」と言ってもOKなんですよ。

尾関 相談があれば都度調整しますし、サポートします。というのも、学びたいと本人が熱量高く持って取り組むことで、パフォーマンスは一番発揮されると思っていますから。結果サービスに良い影響がありますし、エンジニア全員が幅広く知見を持っている状態は素敵ですね。

事業部のスタンスとしては、ある領域に特化するもよし、複数にチャレンジするもよし、です。あくまで個人の希望を優先します。

菊間 他のプラットフォームを知っているからこそ、気がつけるポイントもあるのでので複数やっていたほうがいいとも思いますね。これは、エンジニアあるあるかもしれませんが、Androidだけ、iOSだけとなると行き詰まるというか、最近あまり成長できてないなと感じることがあったりするんですよ。成長曲線が鈍化した時、他のプラットフォームに挑戦して新しい発見や学びがあることもよくある話ですしね。私自身もサーバーサイドを長年やっていて、Androidにチャレンジしてそのような気づきがありました。

また、アプリ『minimo』の歴史が3~4年ありますので、古いものから新しいものに変化させていくのは、単純に面白いですね。歴史を感じますし、過去の財産があるからこそより良いシステムへと変貌する面白さもありますから。どこでも経験できるものでもないですしね。

尾関 数十年後、現在の技術だけが発展するかというと、誰にもわかりませんから。新規で開発するよりも置き換えていく方が大変ですが、いい経験にもなりますね。

プロダクト開発グループ マネージャー尾関 元(写真右)

2009年4月に新卒社員として入社。課金システムチームにて決済システムのサーバサイド、Webフロントエンド開発を担当。2013年から『minimo』の立ち上げに参加。企画、ディレクション、アプリ、API開発などに従事。minimo事業部開発グループ マネージャーとして、サーバサイド開発を中心にAndroid開発など他の領域も担当。

Androidエンジニア 菊間 英行(写真左)

2010年、ミクシィグループにエンジニアとして入社。2012年よりAndroidアプリ開発チームに参加。2015年よりモンストクライアント開発チームを経て、2017年4月よりminimo開発チームでAndroid版の開発を担当。https://mixi-inc.github.io/AndroidTraining/ の執筆やDroidKaigiの登壇など社外活動も行う。

 

– – – – – – – – –  ※※※ - – – – – – – – –

■ pick up! ■

「minimo」は美容業界を救う? 業界構造を変える壮大な挑戦

新人デザイナーには無茶ぶりを?突き抜けて成長できる「minimo」の仕組み