Mercari Engineering Blog

We're the software engineers behind Mercari. Check out our blog to see the tech that powers our marketplace.

エキスパートチームによるSwiftコミュニティへの取り組み

この記事は、 Mercari Bold Challenge Monthの17日目の記事です。

こんにちは、エキスパートチームの@kitasukeです。 今回はメルペイのエキスパートチームが、Swiftコミュニティに向けてどんな活動をしているか紹介します。

エキスパートチームについて

メルペイでは「技術をアウトプットするところに技術は集まる」という思いから、 稼働の50%以上を技術コミュニティへの貢献や技術の普及に取り組むエキスパートチームが存在します。

現在、チームは3人で構成されており、Go/GCPであればGo Conferencegolang.tokyoなどを運営している@tenntenn、 AndroidであればDroidKaigi技術書典などを運営する@mhidaka、SwiftであればSwiftcKaigiわいわいswiftcなどを運営している@kitasukeという役割分担をしています。

エキスパートチームのミッションや役割については下記の記事を参照してください。

tech.mercari.com

エキスパートチームは創設されてから2,3年間は上記の2人で活動していたので、Swift担当の自分が待望の3人目です! エキスパートチームに異動する前は、メルカリUSチームでクライアント・バックエンドの実装や、テックリード・エンジニアリングマネージャーを担当しました。当時は組織の生産性を仕組みや運用で向上させましたが、それより技術的なアプローチの方がエンジニアリングにおいても効果を発揮できるチャレンジなのではと思いエキスパートチームに異動しました。

Swiftコミュニティへの取り組み

Swiftは比較的に分かり易い言語ですが、同時に使いこなすのは難しい言語だと感じています。 私の方針としては、Swiftを使いこなすために言語の仕組みを理解したり、静的型付けという言語的特性を活かす方法に取り組んでいます。

エキスパートチームのSwift担当として取り組んでいることは、主に下記の3つあります。

OSS活動

現在私が興味を持っている分野で、かつ将来的に多くの人に使われるであろうOSSにコントリビューションしています。 内容としては、Swiftを書くエンジニアの基盤となるツールや、静的解析ツールや、iOS・Swiftの新機能などが当てはまります。

最近だと、SwiftのコンパイラであるSwift Compilerや、SwiftのパーサーツールであるSwiftSyntaxや、将来的に公式のSwiftフォーマッターになる予定であるswift-formatなどに、機能追加やバグ修正を行なっています。 まだまだ本質的なコントリビューションは少ないので、これから徐々に増やしていきたいと思います。

静的解析ツールに関してはGoが標準パッケージ準標準パッケージともに豊富に公開しています。 GoとSwiftで言語的な特性に違いはありますが、静的解析に関する良い知見をSwiftにも活用できればと考えています。 直近では、複数の場所で頻出する文字列を検知するgoconstをSwiftに移植したSwiftConstを作ってみました。 絶賛開発中なのでまだ実用段階ではないですが、パフォーマンス改善や機能拡張を予定しています。

また、Xcode 11の新機能で宣言的UIとして注目されているSwiftUIを使ったサンプルプロジェクトも公開しています。 非同期なイベント処理に特化したCombineフレームワークを活用して、SwiftUI + MVVMや、SwiftUI + Fluxや、SwiftUI + Reduxなど色々なアーキテクチャを使ってSwiftUIのデータフローを実装してみました。

これらの活動は、Swiftの新機能を活かした実装・ツール作成や、従来のUIKitからSwiftUIへの移行にともなう今後のアーキテクチャの変化や、Swiftのオープンソースコミュニティの活性化に貢献する目的を持っています。

カンファレンス・勉強会

国内外のカンファレンス・勉強会での登壇やワークショップのメンター、また最近はカンファレンス・勉強会の運営もしています。 上記のOSS活動で得た内容を共有することが多いです。

今年だと、オーストラリアで開催している/dev/worldと台湾で開催しているiPlayground「Making your own tool using SwiftSyntax」というSwiftSyntaxを利用した静的解析ツールの作り方について発表したり、SwiftUIのいくつかの勉強会で「Unidirectional Data Flow Through SwiftUI」というSwiftUIを用いた単一方向のデータフローについて発表したり、try! Swift Tokyo/San Joseで開催しているOpen Source Swift Workshopのメンターを担当しました。 また、毎月開催しているわいわいswiftcという優しくて平和で有意義なswiftc勉強会の運営や、SwiftcKaigiというSwift Compilerやその周辺ツールに焦点を当てたカンファレンスの開催を進めています。

iosdiscord.connpass.com

カンファレンス・勉強会は自分の理解を深めたり、私が知らない分野に触れるのに適した場所だと思います。そこで情報発信するために登壇したり、情報発信する場を作るために運営したり、コミュニティ全体が盛り上がるように活動しています。

Merpay iOS

MerpayのiOSアプリ開発にも関わっています。 主に、より良いコード・アーキテクチャの導入や、静的・動的解析によるアプリの品質向上に貢献したいと考えています。 直近だと、より堅牢なデータフローを実現するための静的解析ツールを実装しています。 将来的に汎用に使えるようになればリポジトリを公開するかもしれません。

まだ関わり始めたばかりですが、上記のコミュニティで得た知見などを社内へ還元したいです。 同じように、社内で得た知見もコミュニティへ還元したいと考えているので、今後はアプリへの関わりをより深めて社内外での双方向な技術の共有を目指します。

まとめ

個人的な解釈ですが、エキスパートチームは緊急度は低いが重要度が高いことを業務として扱える特殊なチームだと思います。目の前の問題を解決するのも大事ですが、技術コミュニティへの貢献という長期的な取り組みも大事です。上記のような活動を通して、より良いSwiftコミュニティの形成に貢献できれば嬉しいです。

メルペイでは、コミュニティ活動、技術の発信に興味があるエンジニアを積極的に募集しています。 一緒に開発して頂ける方ご連絡ください!

mercari.workable.com

明日の記事は、@tsudar による「Microservices と会計システム」です。お楽しみに!