iOSエンジニア

[ハイクラス] 世界のビジネスプラットフォームを支える iOS エンジニア

iOSGitHubmixpanelBitriseVIPER
東京都 / 表参道駅800~1204万円
Sansan株式会社

業務内容

責任、任される仕事内容

自社サービスである法人向け名刺管理サービス「Sansan」の iOSアプリ開発を一手にお任せします。
私達は継続的なプロダクト開発のために最新の技術やライブラリを用いた開発を大事にしています。既存コードの書き換えも積極的に行っていただきます。

## 主な業務
- 当社サービス (Sansan) のスマートフォンアプリ開発
- 新機能や機能改善の提案、実現性調査
- プロダクトオーナーやデザイナーとの仕様や UI/UX の検討
- アプリを成長させるための施策の立案・実施

## 開発環境
- 言語:Swift (一部 Objective-C )
- ソースコード管理: GitHub
- ライブラリ: Alamofire、Realm、RxSwift等
- CI,テスト:Bitrise、XCTest
- 運用: Crashlytics
- PC:iMac (Retina 5K, 27-inch, 2017)やMacbook Pro Core i9 (入社時点での最新モデル、キーボード配列選択可)
- コミュニケーション:Slack
- デザイン連携: Zeplin, Sketch, InVision
- ディスプレイ:27インチワイド (WUXGA) 1-2台

なぜそれをやって欲しいのか

近年、ビジネスにおけるモバイルアプリの重要性はますます高まっています。

Sansan を開発するエンジニアのうち、モバイルアプリエンジニアは約2割。しかし Sansan の Web アプリとモバイルアプリの利用ユーザー数を比較すると、モバイルアプリの方が多いのです。

これからのプロダクト成長のためには、モバイルアプリの継続的開発が大きなカギを握っています。

エンジニアリング以外の仕事・姿勢への期待

プロダクトやユーザー視点での提案・コミット
強く期待する
期待する
どちらでもない
期待しない
全く期待しない
ビジネス視点での提案・コミット
強く期待する
期待する
どちらでもない
期待しない
全く期待しない
ピープルマネジメント
強く期待する
期待する
どちらでもない
期待しない
全く期待しない

求める人

必須のスキル・経験

・Swift を利用した iOS 向けネイティブアプリケーションの開発経験
・UIKit などの iOS 標準ライブラリ・フレームワークについての知識
・iOS 開発に関する技術選定の経験

あると望ましいスキル・経験

・大規模ユーザーを持つネイティブアプリケーションの開発・運用経験
・StoryboardやAuto Layoutを用いたUI開発における深い知識
・リアクティブプログラミングの経験/知見
・CI環境を用いた自動化経験
・チーム開発でのコードレビューをした経験
・スクラムなどのアジャイル開発の経験
・開発チームマネジメントの経験

労働条件

雇用区分正社員・契約社員
新卒 / 中途中途採用
勤務制度固定時間制
勤務時間(コアタイム時間)09:30 〜 18:00
勤務地東京都渋谷区 神宮前5丁目52-2青山オーバルビル13F
待遇・福利厚生

・各種社会保険完備
・交通費全額支給
・社員持株会
・技術書購入補助 (60,000円 / 年)
・ハードウェア購入補助 (30,000円 / 年)
・ソフトウェア購入補助 (20,000円 / 年)
・モバイル端末購入補助 (70,000円 / 年)

など

求人の特徴

PC選択自由

リモートワーク可

休日・休暇

・土日祝日
・年末年始休暇
・有給休暇

試用期間

6ヶ月(待遇は本採用時との変更点無し)

受動喫煙防止措置に関する表記

・屋内の受動喫煙対策あり(禁煙)

企業情報

会社名Sansan株式会社
企業URL

https://jp.corp-sansan.com/

資本金

62億34百万円

設立年月日

2007年6月11日

代表者氏名

寺田 親弘

従業員数

728人

本社所在地

東京都渋谷区神宮前5-52-2 青山オーバルビル 13F

何をやっている企業か

法人向けクラウド名刺管理サービス「Sansan」、個人向け名刺アプリ「Eight」、および関連するプロダクトの開発、運用を行っています。

企業からのメッセージ

Sansanはすでに出来上がっているプロダクトの運用、保守をしているだけ、というイメージをもたれがちですが、現在でも1日複数回のリリースをするなど、まだまだやりたいことは尽きません。当社の資産を活用した新規プロダクトにも次々と挑戦しています。

会社が成長するためにはプロダクトの成長が必須、と全社員が考えています。そのためにエンジニアへの投資も惜しみません。エンジニアたちも勉強熱心で、読書会などの社内勉強会は1ヶ月で200回近く(1日で10箇所)開催されています。

開発チーム情報

開発チーム名

Sansan iOSアプリ開発チーム

開発チームメンバー

@kotetucoLead Engineer

iOSアプリの実装や運用業務はもちろん、開発スケジュールの策定やメンバーアサイン、メンバーの実装サポートや他チームとの調整など、管理業務も担当しています。 アプリの全機能領域を見ていますが、入社当時から名刺撮影機能に携わることが多く、現行の名刺撮影機能については要素技術開発当時からメインで担当しています。 自分が主に関わっているのはスマホアプリですが、広く事業全体の未来を考えて日々開発を進めています(つもり)。 iOSだけでなく、AndroidやRustを中心に、広く技術的な話が大好きです。最近はテストや設計に関する書籍や広くチーム全体に目配りする必要が出てきたこともあってチーム開発に関する書籍を読むことが多いです。また、CTFや勉強会の登壇、同人活動などの個人活動もやってます。

@vivayashi新入り

新入りエンジニアとして、いち早くチームの戦力になるためのインプット/アウトプットに日々邁進しています。 品質にこだわり抜くコーディングを心がけたメンバーに恵まれて、毎日が学ぶことばかりです。 休日は自宅のスマートホーム化に励んでいます。

@ynakagawa33Bitrise 職人、BOT 職人、改善大好きおじさん、自キ沼人

二度、同じ仕事をするのが嫌でそのタイミングが訪れるたびに自動化しまくっていたら、 CI/CD や BOT 作成が異常に得意になってしまっていた。そのスキルを活かし、チーム全体の生産性を上げるように心がけている。 他には SwiftLint や SwiftFormat といったコードベースに秩序をもたらすためのツールの導入やレビュー負荷を均一化するために Pull Panda を導入したりと開発の改善を行うのも大好き。 趣味は自作キーボードを嗜んでいて、今の構成は Claw44 / Gateron Ink Switch / 3D キーキャップ / 牛革パームレストです。みんなも沼へおいで。

@chaaaaanuiOSアプリエンジニア, デザイナー修行中

新入りのiOSアプリエンジニアです。 最近はSketchを触ったりデザイン関連の記事や本を読み漁ってデザインも勉強しています。 業務外ではFlutterとSwiftUIでアプリ作ったり暗号資産、Blockchainに興味があるのでRustでBlockchain実装していたりします。 ゲームが大好きで週末はDbDをよくやってます🔪

@tany3Engineering Manager
もっと見る

Sansan iOSアプリ開発チームの全てのメンバー

@kotetucoLead Engineer

iOSアプリの実装や運用業務はもちろん、開発スケジュールの策定やメンバーアサイン、メンバーの実装サポートや他チームとの調整など、管理業務も担当しています。 アプリの全機能領域を見ていますが、入社当時から名刺撮影機能に携わることが多く、現行の名刺撮影機能については要素技術開発当時からメインで担当しています。 自分が主に関わっているのはスマホアプリですが、広く事業全体の未来を考えて日々開発を進めています(つもり)。 iOSだけでなく、AndroidやRustを中心に、広く技術的な話が大好きです。最近はテストや設計に関する書籍や広くチーム全体に目配りする必要が出てきたこともあってチーム開発に関する書籍を読むことが多いです。また、CTFや勉強会の登壇、同人活動などの個人活動もやってます。

@vivayashi新入り

新入りエンジニアとして、いち早くチームの戦力になるためのインプット/アウトプットに日々邁進しています。 品質にこだわり抜くコーディングを心がけたメンバーに恵まれて、毎日が学ぶことばかりです。 休日は自宅のスマートホーム化に励んでいます。

@ynakagawa33Bitrise 職人、BOT 職人、改善大好きおじさん、自キ沼人

二度、同じ仕事をするのが嫌でそのタイミングが訪れるたびに自動化しまくっていたら、 CI/CD や BOT 作成が異常に得意になってしまっていた。そのスキルを活かし、チーム全体の生産性を上げるように心がけている。 他には SwiftLint や SwiftFormat といったコードベースに秩序をもたらすためのツールの導入やレビュー負荷を均一化するために Pull Panda を導入したりと開発の改善を行うのも大好き。 趣味は自作キーボードを嗜んでいて、今の構成は Claw44 / Gateron Ink Switch / 3D キーキャップ / 牛革パームレストです。みんなも沼へおいで。

@chaaaaanuiOSアプリエンジニア, デザイナー修行中

新入りのiOSアプリエンジニアです。 最近はSketchを触ったりデザイン関連の記事や本を読み漁ってデザインも勉強しています。 業務外ではFlutterとSwiftUIでアプリ作ったり暗号資産、Blockchainに興味があるのでRustでBlockchain実装していたりします。 ゲームが大好きで週末はDbDをよくやってます🔪

@tany3Engineering Manager
@boohbahProduct Manager

担当プロダクト

Sansan - 法人向けクラウド名刺管理サービスhttps://jp.sansan.com/

プロダクトの説明・成し遂げたいこと

Sansan株式会社は、「出会いからイノベーションを生み出す」というミッションを掲げ、2007年の創業時から法人向けクラウド名刺管理サービス「Sansan」を開発・提供しています。

名刺管理から、ビジネスがはじまる『Sansan』 。Sansanは、これまでにない名刺管理サービスです。 名刺だけでなく、あらゆる「顧客データ」を連携することで、いままで気づかなかったビジネスチャンスにも最適なアプローチができるようになります。

自動化していること

デプロイ

継続的に実践していること

テストについて

高いテストカバレッジを目指している
テストコードを当たり前に書いている
サービス運営上またはビジネス上重要な部分についてのみテストを書いている
基本的に手動でテストしている
テストを書く必要がない・または少ないプロダクトだ

技術的負債について

技術的負債の返済を重視し、迅速に返済している
定期的に技術的負債の返済をしている
既存実装に手をつけるタイミングで必要に応じて技術的負債の返済をしている
現在は優先度が低いため技術的負債の返済をあまりしていない
技術的負債の返済をする必要がない

コードレビューについて

設計に踏み込んだコードレビューをしている
可読性を意識したコードレビューをしている
バグが出ないようにコードレビューをしている
優先度が低くあまりできていない
体制、環境上できていない

チーム全体での開発の進め方

2019年4月から部の開発体制が大きく変わりました。大きな変更点としては、開発部全体で1つのバックログを共有し、部の内外から開発の進捗を可視化できるようにしたことです。

部の開発体制が大きく変わったことでチームとしての開発の進め方も大きく変わったので、機能追加案件がリリースされるまでの開発の進め方や、日々のチーム改善活動についてまとめました。

1. キックオフ

バックログはWebアプリ・モバイルアプリ含めて部として一元管理されています。

スマホアプリだけで完結するものについてはAndroid開発チームやスマホアプリ用のAPI開発チームと仕様面で連携しつつリリースまでのスケジュールを策定します(Androidと同時リリースにならないこともあるので、その場合は先に開発を進めるチームの方で仕様を策定します)。

Webアプリなどと同時並行で進める必要があるものはWebアプリ開発チーム、ログイン周りは基盤チームなどと共同で進める必要があるため、このタイミングでチームを跨いだ開発・リリーススケジュールの策定や技術課題の洗い出しなどを行います。

2. 開発・テスト

開発がはじまると、UIの追加・変更が入るものについてはデザイナーとやりとりしつつ進めます(「InVision」というツールを使ってレイアウトの指定を受けます)。

スマホアプリ用のWeb APIに変更がある場合は、スマホアプリ用のAPI開発チームと仕様の調整をしつつ進めます(APIの仕様はGithubのリポジトリで一元管理されており、仕様変更はPull Requestのレビューの形で進めます)。

テストについては、主にUseCaseなどのビジネスロジックが入る箇所については重点的にテストコードを書く方針をとっています。テストコードが入らない箇所については手動でテストを行います。

また、APIとの疎通やブラックボックステストなどの結合テストについては、テスターの方の協力を仰ぎながらテストを進めます。

3. レビュー・リリース

コードレビューはチーム内の2人をレビューアに指名して行います。指名した2人のApproveがPull Requestのマージの条件となります。最近は「Pull Panda」というサービスを導入し、レビューの負荷を分散することができるようになりました(もちろん、仕様に詳しい人を直接レビューアに指名することもあります)。

UIに変更が入る場合はデザイナーによるデザインレビューも入ります。その他にも、バックログの要件を満たしているかどうかを確認するためのPM(Product Manager)レビューや、CPO(Chief Product Officer)直轄の戦略案件の場合はCPOによるレビューが発生することもあります。

上記のようなレビュー(と、App Storeのレビュー)を経て、アプリの新機能は晴れて世の中に出ていきます。

4. 振り返りなどのチーム改善活動について

元々はスクラムで開発していたこともあり、スクラムの優れたプラクティスは現体制でも積極的に残していきたいとの考えがチーム全体に浸透しています。

スクラムの代表的な効能の一つが「振り返り」です。チームでは、週1回の振り返り(GKPT)を実施しています。振り返りで挙がった問題点(Problem)については必要に応じて改善案を策定し(Try)、朝会で定期的に進捗状況を確認しています。

技術面でのアピール・課題・考え方

# Sansan iOSアプリの概要

- アプリの初リリース年 : 2014年 (5年以上の歴史があります)
- iOS Deployment Target : 10.0
- リリース頻度 : 概ね月に2〜3回程度
- 画面数 : 約50画面超

※ サポート対象となるiOSのバージョン (Deployment Target) については、OSバージョン毎の利用割合を見ながら定期的に見直しを行っています。

# ライブラリ選定について

ライブラリ選定については、基本的にチーム内での合意を前提とした上で、各人に裁量が与えられています。ライセンスの制約についてはGPL系でなければ概ね利用可能です。

ただし、自由が与えられている以上は導入後も責任を持って面倒を見る必要があります。そのため、長期に渡ってライブラリを利用する前提にたって選定を行う必要があります。

従って、実際には利便性だけでなく、スター数や直近の更新履歴も加味した上で選定が行われます。

# 使用している技術要素、ライブラリについて

## プログラミング言語
- Swift5 (直近だと、コードベースの約96%程度がSwiftのコードです)
- Objective-C (コードベースの4%未満、普段ほとんど触ることがないです)

## 設計について
アプリの設計方針として、これまではシステムアーキテクチャはレイヤードアーキテクチャに近い設計、GUIアーキテクチャについてはアプリ全体における統一的なルールは設けず、画面毎に仕様の複雑さを加味しながらMVPないしはMVCを駆使して開発を進めていました。

しかし、iOS開発者の増加やアプリ機能の複雑度が増してきた今、既存画面に対する機能追加にかかる工数が増大するといった問題が表面化してきました。

そのため、徐々にではありますが現在アプリの設計刷新を実施しています。具体的にはRouterパターンを導入し画面遷移をコードで管理すること、そしてシステムアーキテクチャをClean Architectureへ移行することです。

一気にアーキテクチャを刷新するのは現状の人数では機能追加に支障をきたすことから難しく、まずは機能追加を行う箇所から徐々に設計変更を進めています。

※ 設計面での改善活動については下記の記事を参照ください(最近のチーム全体の改善活動についても言及しています)。
https://buildersbox.corp-sansan.com/entry/backcasting-sansan-ios

## UI実装
基本的にUI実装では AutoLayout (Storyboard・xib) を使用し、Autolayout で設定できないものについてはコードで実装します。

また、アプリで使う各UIパーツについては一部を除きUI Component化を実施し、UIパーツの共通化を行いました(UIの統一感の向上や開発効率化の効果があります)。

※ 当チームが実施したUI Component化に関しては下記の記事を参照ください。
https://buildersbox.corp-sansan.com/entry/2019/05/16/123000

## 主な利用ライブラリ(とりわけ利用頻度が高いもの)
- Alamofire
- SDWebImage
- Realm
- Codable
- R.swift
- CocoaPods
- Carthage

## 主な利用ライブラリ(上記以外)
- RxSwift
- KeychainAccess
- SwiftyUserDefaults
- SwiftyJson
- Himotoki
- LicensePlist
- Sourcery
- SwiftFormat
- SwiftLint

## Sansan iOSアプリから利用している主なサービス
- Crashlytics
- Mixpanel

## 開発時に利用している主なサービス
- Github
- Slack
- Confluence
- TestRail
- Miro(RealtimeBoard)
- InVision
- Bitrise
- DeployGate
- Sider
- Pull Panda
- deliverbot

## CI/CDについて

Sansan iOSアプリではBitriseを核として様々な自動化を推進しています。具体的には下記のようなことを行っています。

- リリースビルドとTestFlightへのアップロード
- Pull Request毎のLintチェックや自動テスト実施
- テスト用アプリの配布(DeployGateへのアップロードまでをBitriseから行う)

※ Sansan iOSアプリのCI/CD事情の詳細については、下記の記事を参照ください。
https://buildersbox.corp-sansan.com/entry/2019/07/04/110000

開発チームからのメッセージ

Sansan iOSアプリは、多くの法人様にお使いいただいています。中には、営業活動になくてはならないツールになっているお客様もいます。Sansan iOSアプリの開発は、法人様の営業の源泉となる大切な名刺情報を預かる身として、常に大きな責任感が求められる仕事ですが、B to C向けサービスとは一味違った面白さややりがいのある仕事です。

また、より厳重なセキュリティ要件や特殊な利用シーンなど、B to C向けではあまり無いようなエンタープライズ向けの機能要件が求められることもあります。一般的なスマホアプリ開発では味わえない、エンタープライズ向けの機能開発ができることは他にはないSansan iOSアプリ開発の大きな魅力といえるのではないでしょうか。

法人向けゆえに外からは少し硬いイメージに見えるかもしれませんが、Sansan iOSアプリ開発チームは大変オープンで、お互いに助け合いながらチームを良くしていこうという気概に溢れています。また、部署を跨いだ社内勉強会も大変活発で、書籍やスマホ端末の購入補助など、技術研鑽意識の高いエンジニアにとっては最高の職場環境だと思います。

近年、アプリファーストの潮流や外出先での名刺閲覧・登録ニーズの高まりもあって、社内外でのSansanアプリの注目度が非常に高まっています。さらに多くの企業のインフラとなるべく、Sansan iOSアプリの開発を我々と一緒になって推進していただける仲間を募集しています。


[ハイクラス] 世界のビジネスプラットフォームを支える iOS エンジニア

Sansan株式会社