【atte FeSセミナーレポート②中編】「一緒に川遊びしませんか?」…ソウゾウのiOSエンジニア大庭氏が「メルカリ アッテ」iOSアプリの開発を紹介

メルカリのグループ会社であるソウゾウは、地域コミュニティアプリ「メルカリ アッテ」のリリースを記念して、2週連続月曜日にアッテリリースまでの裏側を語る「atte FeS」を先日完成したばかりのオフィス新イベントスペースで開催。本稿では、2週目の開催となる「Go・Swift開発編」について紹介する。今回はその中編で第二部の模様をお伝えしよう。

attefes202
メルカリのグループ会社であるソウゾウは、地域コミュニティアプリ「メルカリ アッテ」のリリースを記念して、4月11日・4月18日の2週連続月曜日にアッテリリースまでの裏側を語る「atte FeS」を先日完成したばかりのオフィス新イベントスペースで開催。

ソウゾウは、2015年9月、メルカリのグループ会社として、「Building next ordinary(ありそうでなかったをソウゾウする)」をミッションに設立された会社。3月17日より、地域コミュニティアプリ「メルカリ アッテ」を提供している。

イベントは、以下のような構成であった。本稿では、2週目の開催となる4月18日(月)の「Go・Swift開発編」について紹介する。本サイト「Pedia News」では、イベントの模様を前編・中編・後編に分けてお伝えしたい。今回はその中編で第二部の模様をお伝えしよう。

* 第一部 アッテ開発の技術:Golang と Google Cloud Platform
* 第二部 アッテ開発の技術:Swift と RxSwift
* 第三部 アッテ開発の技術:アッテの設計と開発フローの変遷

### 「アッテ」開発初期は1人で開発
第二部では、「アッテ開発の技術:SwiftとRxSwift」と題して、ソウゾウのiOSアプリのエンジニアである大庭慎一郎氏が登壇。大庭氏は、小学生時代のMSXパソコンでBasicを勉強。大学時代はロボット工学を専攻。Webサイト、ゲーム、デジタル放送のシステム開発など会社を経て、5社目の会社として2013年4月メルカリに入社。2015年10月からソウゾウに出向。「メルカリ」のiOSアプリと「アッテ」のiOSアプリの立ち上げ時から開発を担当している。

冒頭、大庭氏は、「アッテの開発初期段階」について、

最初の3ヶ月間は1人だった。10月にモック作成、ライブラリ・設計の検討を行い、11月にRxSwift採用を決定して本実装を開始し、2016年1月から複数人チームで実装した。現在メンバー数は5名で急速に成長している。

と述べた。

大庭氏は、「なぜiOS8.0以降にしたか」について、

2015年10月時点ではiOS7のシェアがわずかで、iOS8と7とではSDKが大きく違っていた。そこで、実装スピードを優先してiOS8以降にした。また、個人的にもCarthageを導入したかったという考えもあった。

と述べ、さらに「なぜSwiftか」について、

「アッテ」は新規プロジェクトで、「メルカリ」iOS版の資産はほぼ使えないと思っていた。おそらく長くメンテナンスするコードになるだろうと考えていた。それならば、「いまSwift採用しないでいつ採用する?」と感じていた。メルカリの時とは異なるSwiftを採用することで、人材募集効果も期待できると思った。

と説明した。

大庭氏は、「Swiftでないとできないこと」について、

Swiftは、型安全、Optional、enumなどをもつ。Swiftを利用すれば、APIKitやHimotokiなど日本製のイケてるライブラリを使えることが大きかった。APIKitはJSON-RPC2.0と相性が悪かったので泣く泣く不採用となったが、同じ思想でJSONRPCKitというのを自作した。

と述べ、Swiftの魅力を語った。

### 「もうリアクティブプログラミングなしにはプログラムが組めない」
また、大庭氏は、「なぜリアクティブプログラミングか」について、

「メルカリ」iOS版で、Objective-Cでリアクティブプログラミングを実現するライブラリであるReactiveCocoaをヘビーに使っていた。そのため、「もうリアクティブプログラミングなしにはプログラムが組めない」と感じていた。

と述べ、「メルカリ」開発を通じてリアクティブプログラミングに慣れていたことを明かした。

大庭氏は、「リアクティブプログラミングのメリット」について

いろんな同期処理や非同期処理を「ストリームをどう扱うか」という視点から「統一的」にかつ「宣言的」に記述できる。

と説明した。

さらに、大庭氏は、「リアクティブプログラミングが提供するもの」について、

* ストリームを生成する方法
* ストリームを加工する方法
* ストリームを監視する方法

であり、全てをストリームにしようという概念であることを強調した。

続けて、大庭氏は、「ストリームを使ってできること」について、

* リスト処理
* 非同期イベント処理
* データバインディング
* Promise
* MVVMなど

であり、ストリームなしで書くと大変なこともストリームを使うと簡単に開発できることが魅力だと語った。そして、「アッテ」での実例として画像アップロード後の募集投稿を挙げ、新規投稿のフローと編集のフローが同じストリームで実現できることを、マーブル図と実際のコードを用いて説明した。

### 「Rxの経験はいかせる」
大庭氏は、「RxSwiftを採用したメリット」について、

RxSwiftはマイクロソフトが2011年C#でリリースしたReactive ExtentionsのSwift版。どの言語でも同じような仕様で、勉強する時に5年分の資産がいかせるのが魅力だ。また、正式にReactiveXへ取り込まれて、開発やコミュニティが活発だった。さらに、他言語でRxをしていた人は取り組みやすく、今後他言語でRxをやるときに経験がいかせると思った。そして、AndroidはRxJavaがデファクタスタンダードなので、設計が共有できるのではないかとも考えていた。

と述べ、「RxSwiftを採用したデメリット」について、

デメリットは固有のものを感じていない。強いて言うならば、ReactiveCocoaの特徴の反対で、Cold ObservableとHot Observableを混合していることとエラーに型がないこと。

と説明した。

一方、大庭氏は、「リアクティブプログラミングのデメリット」について、

* 学習コストが高い
* 設計に大きく影響(特にMVVM)
* ライブラリが巨大
* もし開発が止まったらどうするか?
* 頼りきっているとプログラミング能力が衰える?

を取り上げたが、リアクティブプログラミングの使いやすさを強調して「アッテ」ではリアクティブプログラミングを採用したと語った。

### リアクティブプログラミングの浸透へ
そして、大庭氏は、「リアクティブプログラミングのチームへの浸透」について、

* ドキュメントと既存コードの熟読
* 実装パターンの共有
* マーブル図などで共有
* いい実装にはサーファーのマークを付けていいストリームに乗っていると伝える
* 社内slackに#tech-rxというRx全般の話をするチャネルを設置
* Reactive Swift Meetupをはじめとする勉強会やイベントを社内外で積極的に開いている

を心がけていると明かした。

### 「一緒に川遊びしませんか?」

最後に、大庭氏は、「とにかくRxに触れる機会を増やしたい」ということを強調し、

一緒に川遊びしませんか?

と会場に向けて呼びかけた。

「メルカリ アッテ」App Store

メルカリのエンジニアブログ

メルカリ・ソウゾウの採用情報はこちら