Androidエンジニアの @shanonim です。今年7月に弊社の定期宅配サービス「おいしっくすくらぶ」のAndroidアプリをリリースしました。
今回はその開発の裏側を紹介したいと思います。
目次
定期宅配サービス「おいしっくすくらぶ」について
Oisixは食品販売のECサイトを運営しています。安心安全で美味しい商品を購入できることが特徴です。会員向けサービス「おいしっくすくらぶ」に入会すると、商品が毎週もしくは隔週で定期宅配されます。
具体的には、以下のような流れで買い物を行います。
始めにOisixから「定期ボックス」と呼ばれるデフォルトのお届けセットがレコメンドされます。💁
定期ボックスに入っている商品は自由に編集することができます。欲しい商品があれば商品一覧ページから追加します。🍅
買いたい商品がすべて決まったら、定期ボックスを確定します。👌
締切日になったら定期ボックスに入っている商品が購入され、3〜5日で自宅に届きます。🚚
Androidアプリ開発に至った背景
「おいしっくすくらぶ」は2000年のローンチ以降、長らくPC版のWebサイトがメインで運営されてきました。
ところが近年、PCではなくスマホを利用するユーザ層が増加し、それに伴ってWebより使いやすくパフォーマンスの高いスマホアプリが求められるようになりました。
OisixのアプリはiOS版が2015年にリリースされましたが、Android版は長らくリリースされていませんでした。ユーザ層の拡大とUX改善を考えた場合、やはりAndroid版も必要だろうということになり、本格的に開発を進めた形です。
OisixのAndroidアプリ開発
時流を考えるとだいぶ遅くなってしまったAndroidアプリ開発ですが、使っている技術と開発チームの体制に関してはモダンな環境を追求しています。
Kotlinの採用
OisixのAndroidアプリはKotlinで開発されています。
Kotlinの採用に至った理由をいくつか挙げてみます。
1. 優れた言語仕様
Kotlinは安全でわかりやすいコードを書くための仕組みを言語仕様として備えています。例えば、以下のようなメリットを享受できます。
- Null Safetyなコードによって保守性が向上する
- ボイラープレートが少ないので可読性が向上する
個人的な感覚ですが、Android Javaと比べてシンプルで分かりやすいコードが書けるようになったと感じます。
2. 導入事例が増えている
「Kotlin導入してみたけど知見が少なくて開発スピードが上がらない」という懸念は、ここ1年でかなり解消してきたように思います。開発者コミュニティも活発で、最近は勉強会も多く開催されています。
また、先日のGoogle I/OでAndroidアプリ開発言語に正式採用されたことを受けて、次世代のデファクトスタンダードになる可能性が高まりました。今後も導入事例が増加することになるでしょう。
3. Javaとの100%互換
Kotlinの開発元であるJetBrains社が"100% interoperable with Java
と宣言している通り、KotlinはJavaと相互運用可能です。Javaで記述されたライブラリとも問題なく連携できるため、安心して開発を進めることができました。IDE(Android Studio)もJava→Kotlinのconvertをしっかりサポートしてくれます。(Kotlinの文法に慣れ切らない内は「一旦Javaで書いて"Convert Java File to Kotlin File"する」ということを度々やっていました。ばっちり変換してくれます。😉)
開発チーム
OisixのAndroidアプリは、
- メインエンジニア: 2名
- テックリード(iOS兼任): 1名
- ディレクター
- UXデザイナー
の計5名で開発を行っています。アプリ内で必要になるリソースや配色設計などは社内のデザイナーチームに依頼していますが、基本的にはこの5名がスケジュールとチケットの管理、開発、リリース作業を行います。
開発ツール
メンバー自身が使いたいツールを提案して使っています。
- コミュニケーション
- Slack
- Hangout
- バージョン管理・プロジェクト管理
- GitHub
- デザイン管理
- Sketch
- Zeplin
- KPT
- Trello
- レビューモニタリング
- AppFollow
開発プロセス
“小さなチームだからこそできる素早い意思決定”を活かして、できるだけ早くリリースサイクルを回すことを心がけています。7月のファーストリリース以降、週1回のペースでアップデートを続けています。
日々の開発プロセスは、大きく4つのアクションに分かれています。
1. issueの起票
GitHubでissueを管理しており、随時カテゴリに応じたlabelを付与して起票します。
必要な機能開発はfeature
、改善系はenhancement
、実験でとりあえずやってみる系はexperimental
など、細かくカテゴリを分けています。
基本的にチームの誰でも起票可能で、気づいたことはとにかく雑でもいいから起票することを推奨しています。
2. milestoneの設定
起票したissueをリリースサイクル毎に作ったmilestoneに振り分けます。
下記画像を例に説明すると、来週(9/4週)は「release_1.10」、翌週(9/11週)は「release_1.11」という形で週次リリース毎にmilestoneが分かれています。(実施未定チケットは、release_1.xとしています。)
3. 開発
issue番号に対応したbranchを切って、コーディングを行います。develop
/master
ブランチへのmergeは、必ずチームメンバー1人以上のレビューが必要です。merge時にはLGTM画像の添付が推奨されます。😋
4. 振り返り
デイリーでmilestoneを見ながら振り返りmtgを行います。「誰がどのチケットをいつまでに対応するか」を常にチーム全員が把握しているため、助けが必要な場合は相談しやすく、スケジュールのブレも早期にキャッチアップすることができます。
開発を加速させるための施策
継続的にサービスをグロースさせるために「開発戦略」と「スキルアップ戦略」2つの軸で施策を行っています。
【開発戦略】技術的負債の返済
機能開発の速度を上げるために、隔週でリファクタリングだけを行う『CleanDay』を設定しています。日々「あれをこう書き換えたい」「このライブラリ導入して効率化したい」などありますが、その都度対応していたら優先度の高い実装が遅延するリスクがあります。なので、あらかじめリファクタリングしたいissueはまとめておいて、決めた日にガッと一気に消化するようにしました。
これによって、開発速度とクオリティの両方を改善するサイクルを作ることができました。
【スキルアップ戦略】技術顧問の招聘
開発メンバーが少人数で、かつスキル的に成熟していない場合、ベストプラクティスが分からず実装が迷走してしまうことがあります。
根本的な解決はメンバーの採用と教育だと思いますが、短期的には知見が豊富な外部エンジニアと協力する方法もあるのではと考え、7月から @kgmyshin さんに技術顧問をお願いしています。アプリの設計指針や開発プロセスに関して多くのアドバイスを頂き、開発レベルが大幅に向上しました。
また、外部のエースエンジニアと一緒に仕事できる機会を通してチームの士気も向上しています。💪💪
まとめ
「食」と「エンジニアリング」という言葉だけ見るとお互い遠い分野ですが、Oisixの目指す食卓を実現するためにエンジニアリングは不可欠です。どれだけ安心安全で美味しい商品を用意しても、心地よい購買体験を提供できなければそもそも買ってもらえないからです。
Oisixのエンジニアは、これまでも食に対する圧倒的当事者意識を原動力にサービスを創り上げてきました。(食への興味は人それぞれですが、私は食べることと飲むことが大好きです。😋🍖🐟🍅🍺)
今のアプリチームも同様に、日々改善を繰り返して少しずつグロースすることができています。まだまだ未熟なチームとプロダクトではありますが、これからも美味しい食卓を作っていけるように加速していきたいと思います。
食のことが好きで、アプリ開発に興味のあるエンジニアの方はぜひ一度遊びに来てみませんか。:)
www.wantedly.com