アクトインディ開発者ブログ

子供とお出かけ情報「いこーよ」を運営する、アクトインディ株式会社の開発者ブログです

actindiでの3年間のモバイルアプリ開発を振り返る

これはactindi Advent Calendar 2018、1日目の記事です。
Androidアプリエンジニアのhondaです。
実は今日でactindi勤続3年になります。
3年間、いこーよモバイルアプリを担当してきました。
今回は軽く3年間どのようにモバイルアプリ開発をしてきたのか振り返ってみたいと思います。

actindiにジョインした理由

そもそもactindiにジョインした理由ですが、前職で一緒に仕事したことがあり、先にactindiにジョインしていたディレクター兼デザイナーのsuzukiから「一緒にいこーよのモバイルアプリを作らない?」というお誘いを頂いたことがきっかけでした。

いこーよは世の中のパパ、ママに向けて子供とのお出かけ先情報を提供する情報サイトです。  当時のいこーよはモバイルアプリはなく、いこーよからファンのもとへお出かけ先情報を提供していくためにモバイルアプリを作ろうというフェーズでした。
カジュアル面談や面接を受けて、以下の点でジョインを決めました。

  • actindiは当時から個人の自主性を重んじたり、ルールでがんじがらめにするのではなく、自分たちで「一番アウトプットを出す方法は何か?」を考え、実践することを大事にしていました。そこに強く共感することが出来ました。会社のホームページにも掲載されています。
    actindi.net 実際に入社してからもちゃんと文化として定着していて、リモート勤務や何時から何時まで働くか?ということが自分で判断して決めることができるので子持ちの身としてはとても助かりました。
  • いこーよは当時知らなかったのですが、1歳の娘がいたので、サービスにとても魅力を感じた。
  • 最初はiOSアプリを作るがAndroidアプリも作る予定なので今までのAndroid開発経験を活かせる。
  • お給料が上がった。

開発スタート

モバイルアプリ開発は私を誘ってくれたディレクター兼デザイナーと私の2名体制でスタートしました。
前述した通り、いこーよユーザはAndroidよりiOSが多いため、iOS開発から取り掛かりました。
最初の1ヶ月はモバイルアプリの目的を明確にしてペルソナの設定、盛り込む機能/盛り込まない機能の決定、UIの検討&調査に費やしました。
最初のGitHubリポジトリへのコミットは2015年12月28日でした。

技術選定も一任されていました。
方針としては凝ったことをせず、シンプルに作ることを心がけました。
アーキテクチャはMVCライク、データベースはRealm、ネットワーククライアントはAlamofireというような実績のあるものや使いやすいものを採用しました。
また、開発言語はSwiftを採用しました。Objective-CでiOSアプリを作っていたことがあったのでSwiftの書きやすさに感動したものです。
CIはサーバサイドがJenkinsを使っているのでモバイルアプリでもJenkinsを使おうか?とも考えましたが、環境構築に時間をかけたくなかったので、bitriseを使うことにしました。 qiita.com

iOS版開発にWebエンジニアがジョイン

年明けからWebエンジニアでiOSアプリ開発経験もあったnamikataがアプリチームに参画し、チーム3名体制になりました。 チームメンバー全員でのデザインの共有や議論はProttを使って行いました。
実装は私とnamikataで作業を分担して、お互いにコードレビューしながら進めました。
二人ともSwiftはほぼ初心者の状態でしたが、コードレビューで議論しながら開発を進めて行けたことはとても有意義でした。

Swiftに興味のあるWebエンジニアの方からもコードレビューをしていただける機会があったのでとてもありがたかったです。このようなエンジニアがプラットフォームを超えて、プロダクトに対してバリューを出せるのはactindiの強みだと思います。

また、アプリチーム全員が子持ちのお父さんだったこともあり、「親としてどういうアプリだと嬉しいか?」というようなユーザ目線でのサービス開発が出来ました。
actindiに入社する前はチーム全体でユーザ目線で開発するという経験が少なかったので大変でしたがとても楽しかったです。

iOS版いこーよリリース

そして、2016年7月にiOS版いこーよがリリースされました。
2018年11月現在、iOS版のダウンロード数は11万強に到達しました!

f:id:kou_hon:20181128154657p:plain 上の画像はバージョン1.0.0のUIです。
最初のころのUIは自宅や現在位置、お出かけ先でのスポットを直感的に見つけられるようにマップをメイン画面にしました。
また、行きたいスポットを見つけたら保存しやすくするためボタンを大きめにしたり、行ったスポットの口コミを書きやすくるために入力エリアをわかりやすくしたり、書きやすくするような配慮をUI設計で行いました。

Android版開発スタート

iOSがリリースした後、2016年8月からAndroid版の開発がスタートしました。
基本的にはiOSで実装したUIや機能をAndroid版に移植するような流れでした。
が、Android版ではiOS版をそのまま移植してしまうとAndroidアプリらしさがないものになってしまいます。
Androidユーザの混乱を少しでも軽減するためMaterial Designに則ったUIにするようにしました。 アーキテクチャはiOS版の開発で出てきた課題を鑑みつつ、最初はMVC+レイヤードアーキテクチャーのようなものにしました。
データベースはiOSで使い慣れたRealm、ネットワーククライアントはRetrofitを採用しました。 Android版でもシンプルな設計を目指しました。

言語は私の提案でKotlinにしました。Kotlinはいいぞ。 tech.actindi.net

CIはAndroid版でもbitriseにしました。 現在、iOS版とともにbitriseでプルリクごとにビルドして、deploygateで社内配信する構成になっています。

息子誕生

私事ですが、Android版開発中に息子が誕生しました。
この頃から自宅でのリモート勤務が多くなってきましたが、前述した通りチームメンバーがみんな子持ちなのでメンバーがお互いを考えながらフォローしあえました。
actindiはコアタイムの無いフレックス制を導入しています。子供の風邪などの急な対応がしやすくとてもありがたかったです。
こういう時、「周りに迷惑をかけて申し訳ない・・・」と思いがちですが全社的に「お互い様」の考え方が定着しているので、安心してリモート勤務や勤務時間を変更したりすることができました。
アウトプットも極端に低くなったということはなく、チームに貢献することができたと思います。

Android版いこーよリリース

2017年2月にAndroid版いこーよがリリースされました。
2018年11月現在、Android版もダウンロード数が11万強に到達しました!

f:id:kou_hon:20181130135556p:plain:w320

Android版はiOS版よりシンプルなUIになっていますが、スポットの検索性や口コミのユーザ体験はiOSと同じになるように実装しました。

アプリの成長

Android版リリース後、iOS版、Android版ともにFirebaseAnalytics、GoogleAnalyticsを使ったユーザ行動解析、アプリ内でのユーザアンケート、などなどいろいろな角度からいこーよユーザにとっての使いやすいアプリを目指し改修を進めていきました。
毎週月曜日は定例ミーティングを開き、上記のデータやKPI、KGIをチーム全体で確認しあい、アプリとしてどういった成長が必要なのかを話し合っていきました。
そのミーティングでエンジニア、ディレクターの垣根を超えて、施策の提案なども行い、チームメンバー全員が施策に対してポジティブな意見で肉付けをしていき、具体的にサービスづくりに落とし込んでいきました。
小さいチームならではの動き方ではあると思いますがactindiらしい良いチームの動きだなと感じています。

UIの変化

下の画像は2018年11月現在のAndroid版、iOS版のメイン画面です。リリース当時に比べてだいぶ変わりました。
Android版はマップベースですが、iOS版はさらに普段遣いができるアプリを目指すため、週末に子供とのお出かけ先をすぐに見つけられるように季節、イベント、口コミ、クーポンなど様々な角度からおすすめのスポット情報を提供できるUIにしました。

f:id:kou_hon:20181130135235p:plain:w290 f:id:kou_hon:20181130134850p:plain:w290

アーキテクチャー

アプリのアーキテクチャーも最初のころとは変化していきました。
namikataがブログでiOS版の実装について触れていますのでぜひ御覧ください。 tech.actindi.net tech.actindi.net tech.actindi.net

Android版はMVCからAndroid Architecture Componentsをベースにしたものに設計方針を変え、よりテスタブルで追加実装しやすい設計に変更しています。詳しいことは別のエントリでお伝えできればと思います。

不具合対応

運用初期のころは毎朝、Google Play ConsoleやFirebaseをチェックしていち早く不具合に対応するように心がけていました。
今ではクラッシュ通知をslackに通知するようにして、より早く不具合に対応できる体制にしています。段階的リリースの利用やリリースタイミングなどを臨機応変に変えていきながら、安全にサービスを提供できるように心がけています。

評価

これまでお伝えしたアプリの成長によって、いこーよユーザの方々からAndroid版、iOS版ともに4.4の評価をいただきました。ありがとうございます!

f:id:kou_hon:20181130135858p:plain:w290 f:id:kou_hon:20181130135948p:plain:w290

これからのモバイル版いこーよアプリ

上記の現状のiOS版のUIでいい結果を残せたのでそのUIをベースにした新UIを目下開発中です。
iOS版のUIでの反省点や改善点を踏まえつつ、Androidらしい新UIを目指していきます。
iOS版、Android版ともにこれからもいこーよユーザにとって使いやすいアプリを目指すために成長させていきます。ご期待下さい!

まとめ

actindiでの3年間のモバイルアプリ開発の中でチームメンバー同士助け合い、より良いアプリを作るために議論し、いこーよモバイルアプリを成長させてきました。
そんないこーよアプリチームではモバイルエンジニアを募集しています!

actindi.net

いこーよアプリチームに興味がある方、いこーよアプリに興味がある方、いこーよアプリチームメンバーと話してみたい方などなど、ご連絡お待ちしています!