バンクーバーのスタートアップでの開発環境(全体+iOS)

いやー気づけばカナダで未経験からiOSデベロッパーとして働きはじめてもうすぐ1年です。はやいなー。

今回はFrog Advent Calendarの12日目を担当しますよー!(祝★脱アドベントカレンダー童◯!)

テーマは普段の作業内容や開発環境について。小言をはさみながらまとめていきます。

目次- どんな会社にいるのか- iOSデベロッパーとして何を作っているのか- 開発環境【全体のフロー編】- 開発環境【プロジェクト管理ツール編】- 開発環境【UIデザイン共有ツール編】- 開発環境【iOS編】

どんな会社にいるのか

簡単にいうと、スポーツ系のウェアラブルデバイスを制作するスタートアップカンパニーです。
まだローンチはされておらず、具体的に何を作っているのかは極秘事項なのでスポーツに使うなにかとだけ。(私は面接でも教えてもらえず入社してから知りましたw)

社員数は40人くらいで、組織としてはざっくり分けて下記のようになっています。

- UX/UI
- ハードウェア開発
- ソフトウェア開発
- マシンラーニング
- QA
- マーケティング

私はソフトウェア開発 > モバイル開発 > iOS に所属していて、
iOSには正社員が私含めて2人でプラスCo-op(インターン)or パートタイムの計3人体制です。

ちなみにですが、同僚のiOSデベロッパーと同じくらいコミュニケーションをとるのがクラウドデベロッパーで次いでデザイナーという感じです。

iOSデベロッパーとして何を作っているのか

デバイスと連動しているアプリを作っていて、デバイスの設定をしたり、スポーツ後のデータをまとめたり、同じデバイスを使う人達をつなぐソーシャルネットワークとして機能したりしています。

私が入社した頃はログイン画面しかできておらず、ほぼ1からのスタートでした。(コピペできなくて大変!)

開発環境【全体のフロー編】

さて、開発環境についてですがまずは全体の流れについて説明します。
メソッドとしてはアジャイル開発を取り入れていて、2週間で1スプリントとしています。

ソフトウェアチームの手順としては以下のような流れです。

1. プロジェクトマネージャーやチームリーダーが各プレイヤーのチケットを発行
2. それぞれがチケットを確認して、作業工数を登録する
3. スプリントキックオフのミーティングを開き、各々がつけた作業工数をもとに次のスプリントにどこまでどの順番でやるか決める。
4. 1チケットに対し1ブランチを作成しローカルで作業する。
5. できたらプルリクエストを作成。同僚にコードレビューをしてもらう。
6. レビューを反映し、同僚のApprove2つと自動のテスト(Jenkins)が通ればマージする。
7. 4-6を繰り返す
8. 3のスプリントキックオフで、レトロスペクティブを行い次のスプリントにいかす

これを永遠に繰り返す。そんな毎日。
その他、毎日チームでスタンドアップをして進捗や共有事項の確認をしてます。(2分くらい)
iOSチームだけのミーティングは意外とめったになく、1年でなんと2回だけ。そんなものでしょうか。

開発環境【プロジェクト管理ツール編】

基本的にAtlassinの製品でかためてます。
チケットの管理 - JIRA
ソースの管理 - Bitbucket
ドキュメントの管理 - Confluence

あとはGoogle Docsにスプレッドシートやプレゼンの資料がおいてあったりしてます。
私のような下っ端デベロッパーはJIRAとBitbucketくらいしか使わないです。

またコミュニケーションにはみんな大好きSlackを使ってます。
メールは基本Atlassinサービスたちの通知で埋める用。

開発環境【UIデザイン共有ツール編】

UIデザインはSketchで作られていて、開発チームへの共有にはZeplinを使っています。
Zeplin上ではマージンやフォント情報など開発するのに必要な情報がほぼすべて確認でき、便利すぎて泣きました。

開発環境【iOS編】

iOSデベロッパーのみんなおまたせ!
いよいよiOS開発の環境をまとめますよー!逆にiOS興味ない人はここまででもう帰っても大丈夫です!

■ IDE
言わずもがな、XCode。
**
■ ライブラリ管理ツール**
Carthageを採用してます。
具体的になぜCarthageを使用しているのかは正直知らないのですが(おそらくコンパイル時間短縮のため?)、新しいライブラリを入れるのにランチブレイク時か帰宅前を狙わないと数十分間なにもできないし、CocoaPodsにしか対応してないSDKがあったりしてチームでは不評。CocoaPodsのが良くない?と度々話に上がってる。
とはいえコンパイル時間が短くなるのは大きな魅了だし、ライブラリ追加する機会はどんどん減ってるし難しいところ。

アーキテクチャ
**MVVM with RxSwift **です。
MVVMだけど、View Controllerにさくっとロジック書いちゃうこともあしあんまり厳格ではない。MVVMのサンプルコード見た時にうちと全然違うじゃんと衝撃をうけたことがあります(小声)

■ UIの組み方
まずStoryboardの管理については、1 ViewController - 1 Storyboard ** 厳守!**です。
理由としては複数あるとコンフリクトの解消が恐ろしくめんどくさい、重くなるなどがあります。
画面遷移に関しては弊社ではコードベースなので特にデメリットにもならないです。

また、Stoyboardでどこまで書く問題に関しては割とシンプルで、基本レイアウトだけルールです。

右のインスペクターメニューを触るのは下記の設定の時くらい。
- Constraint
- カスタムクラス
- ファイル名
- その他コードでは設定不可能なもの

残りはView Controllerでコードで書いてます。
個人的にはチームで開発する場合はこのやり方のほうがコードレビューやコンフリクト対策がしやすくて好きだけど、個人ならStoryboard上でやったほうがビルドする前にUIが可視化できてメリットが大きいのではないかと思います。

余談ですが記念すべき私の初タスクは、複数View Controllerの入ったStoryboardを1つ1つに分ける作業でした。。(なかなかめんどくさい)

Lint
SwiftLint

画面遷移
コードベースでsegueはまったく使いません。
Coordinatorクラスがpushかpresentか決めたり、必要であれば事前にデータをview controllerに渡したりしています。

画像
アイコンにはベクターイメージ(PDF)を使ってるので、x1, x2, x3のPNG用意する必要ないです。楽ちん!

■ ネットワーク
Alamofire使ってるよ。。とだけ言わせてください。

■ ローカルデータベース
未だ出番なし

と、こんな感じでしょうか。1つ1つもっと踏み込むことも可能ですが、1つの記事にまとめきれないのでこのへんで。

私はプログラマとして働くのが今の会社が初めてなので他の会社や日本と比較はできないのですが、ネットを見る限り割とスタンダードなんじゃないかと思います。

以上、某カナダのスタートアップの開発環境まとめでした!

MacBookが限界きてるんだ!!!!!