minne hackathon iOS Android frontend

minneの開発合宿2019に行ってきました

minne hackathon iOS Android frontend

minneの開発合宿2019に行ってきました!

今回の合宿はiOSチームの3人(@kojikoji , @josh , @unnnyong )と @mataku , @ogidow , @kidera の6人が参加しました。

iOS

minne の iOS アプリを担当している @kojikoji です。最近は筋トレに興味を持っています。 iOS チームは @josh @unnnyong @kojikoji の3名と最多人数での参加になりました。というのも、今回の合宿の一番の目的が iOS アプリの Swift 化だったからです。

minne では 2016 年に初めて Swift を導入して以降、機能開発の合間に Swift への書き換え作業を進めてきました。 2年ほど前からは、 Swift の割合を 90% にすることをゴールとして定め、 Swift 化のペースを上げるために一定量 Swift 化の時間を確保できるように調整してきました。

その結果、 2019年9月時点で Swift の割合が 86% まで到達し、 Objective-C コードは残り僅かというところまできました。 しかし、それらのコードは Model 周りなどの影響範囲が広い部分が多いため、普段通りの進め方だと難しい部分がありました。

また、目標に近づくにつれて、さっさと 90% にして Swift のことだけを考えるだけで良い素敵な世界に早くたどり着きたい!という思いがチーム内で強まり、残りの Swift 化にブーストかけるべきく、まとまった時間を確保してそれだけの作業に集中できるようにと合宿を企画しました。

ということで、僕ら3人はこの合宿中ただひたすら Swift 化を進めました。

合宿を終えた時点では GitHub の PullRequest を 10本 以上出すことができました。 Swift の割合は、まだ一部作業が残っていて出すことができていないため、それが終わり次第確認していきたいと思います。圧倒的進捗を確認するのが楽しみです。

Android

minne の Android アプリを担当している @mataku です。最近はモジュール化に興味を持っています。

僕はプロダクトにおける Google Play Instant の導入検証を行いました。

Google Play Instant とは、Google Play ストア上でインストールすることなく、お試しでアプリを使うことができる機能、と僕自身認識しています。日本語表記では、今すぐ試す という文言が出るように、Google Play ストアに訪れた方がアプリを使ってみようかな、という気持ちを後押ししてくれる機能でもあると考えています。


すでに minne の Android アプリでは、Android App Bundle 形式に対応したアプリを提供しておりますが、4MB という容量制限を満たしたアプリを配布するには、マルチモジュール構成にする必要がありました。

そのため、適したモジュール構成に移行するのに加え、どれほどの機能を Google Play Instant の制約で表現できるかという検証をこの 3 日間で行いました。

開発方針としては、Google Play Instant で提供する機能を製品版から独立して管理したかったため、完全に独立したモジュールで開発するように進めています。製品版での変更によって、予期せぬ変更が及ぼされる可能性をなくすためです。

その結果、プロダクトとして表現できる内容とプロトタイプを持ち帰ることができたため、現在進行系で実装に取り掛かっています。特に不具合がなければ 2019 年内にはリリースできると考えています。乞うご期待ください。

フロントエンド

こんにちは。 minne でエンジニアをしている ogidow です。 デザイナーの kidera とチームを組み「webフロントエンドの刷新プロジェクト」のキックオフを行いました。

minne では2018年からマイクロサービス化が開始されました。その一環として rails で実装された既存のページを Nuxt.js で刷新するというプロジェクトが温められてきました。

また、 minne は webフロントエンドが jQuery で記述されており、少しリッチなUIを実現するために複雑な状態管理や効率の悪いDOM更新など技術的な負債が満載でした。 ここ数年でwebフロントエンド技術は目まぐるしく進化し、状態管理のベストプラクティスや効率的なDOMの更新、フロントエンドアーキテクチャなどがある程度確立されたように思います。

このタイミングでwebフロントエンドを刷新することにより、これらの負債を返却しユーザ体験や開発体験の向上することにも期待があります。

刷新の方針としては既存のページを 1URL 単位で Nuxt.js へ移行し 1URL ずつリリースする方針をとりました。 一気に実装し、一気にリリースする方法ではリリースまでに時間がかかりフラストレーションが貯まることと、細かくリリースした方が不具合が発生した場合に素早く対応できるからです。

ogidow も kidera もモダンフロントエンド技術はほぼ触ったことがなかったので、合宿の前準備として新卒研修のwebフロントエンドの資料でモダンフロントエンドや vue.js の基本を学びました。

合宿当日は ogidow が api との通信部分を実装し、 kidera がコンポーネントの設計や HTML/CSS のコーディングを担当しました。

慣れないモダンフロントエンドに苦戦するところもありましたが前準備のおかげで、なんとか5割程度は実装することができました。

リリースまでの課題はまだまだ残っていますが、年内に最初のリリースを目指すのでご期待ください。

合宿の様子

minneのiOS開発をしている @unnnyong です。

上の目的を持って行った合宿の様子を紹介します。

1日目

今回の合宿地は開発合宿旅館で有名な土善旅館でした。

旅館の近所まで行くバスを乗るため当日は9時半頃東京駅前のバス停に集合しました。 2時間ぐらいバス乗って旅館に到着して早速開発環境を準備しました。

minne-develop-camp-0

今回の合宿場所を土善旅館に決めた一番の理由は、モニターやUSB-Cアダプターなどの開発に必要なものが用意されていることでした。

特にSwift化はObjective-cのコードとSwiftのコードを両方見ながらする必要があり、モニターがある方が作業効率が良い思いました。

minne-develop-camp-1

ランチは含まれていない予約だったので外で食べました。 旅館近所の食堂で10月に食べた豚カツの中で一番美味しかった豚カツを食べて幸せな気持ちで作業の着手ができました!

minne-develop-camp-2

iOSチームは昼会と夕会で作業しているファイル、困ってるところなどを共有しながらSwift化をやっていきました。

minne-develop-camp-3|minne-develop-camp-4 —|—

作業に夢中になっていると、あっという間に夕食の時間になりました。 食事の後にはお茶を飲みながら、みんなどんな作業をやってるのかについてお話しました。

minne-develop-camp-5

初日のラストスパートを出して作業しました。

2日目

minne-develop-camp-6

おはようございます! 昨日よりちょっと疲れている顔は気のせいです。

minne-develop-camp-7

ランチ以外はずっと旅館の中だったので、ランチの時が唯一の楽しいお出かけでした。 日曜だったので開いているお店があるか心配でしたが、近くのお蕎麦屋を旅館の方が予約してくださいまして、無事食事にありつけました。 自分はフルーツのデザートまである定食を食べました。美味しかったです。

minne-develop-camp-8

2日目の昼会ではAndroidチームの @mataku も参加して作業はどんな感じで進んでいるのか話しました。

minne-develop-camp-9 minne-develop-camp-10

この日は日曜でして夜から旅館にはペパボの社員だけで寂しくなりましてピクセルの猫を呼びました。

3日目

minne-develop-camp-11

3日目の朝にも @ogidow は元気にコードを書いてます。

minne-develop-camp-12

実質 終わりの集合写真です!ポーズは3日間フロントエンドを頑張った @ogidow 提案の Vue.js の V ポーズです。

3日間お疲れ様でした!

まとめ

今回の合宿での作業は、ユーザが直接触ることのできる機能の開発ではありませんでしたが、ウェブ、iOS、Androidの3つのプラットフォームがより速やかに、かつ安定的にユーザに価値を届けられるようにするための、機能追加や改善に必要な土台を作ることに成功しました。

これからもっとハンドメイドの可能性をつなげる、ひろげて行くminneのアプリとウェブをご期待してください!