アプリだけじゃない!チームも一緒に成長させる開発
TRANSCRIPT
struct AboutMe { public let name = "Yuichiro Takahashi" public var company = "Candle inc." public var roll = "iOS Lead Engineer" public var job = [ "develop mimi app", "support team member about iOS" ] public var icons = ["yadon", "nyanko-sensei"]
public let isLoveFPL = true private var hobby = [ "programming": [ "languages": ["Swift", "JavaScript", "Rust", "Scala"], "frameworks": ["Vapor", "Electron", "BotKit"], "libraries": ["React", "riot", "ReSwift"] ], "others": [ "game", "drive", "karaoke", "watch a movie with my wife", "play with my baby" ] ] }
今日話すこと
• どんな技術を使っているのか
• プログラミング未経験者が多い中でどのように技術力を上げて、実際の開発に入ってもらうか
• 開発に入ってもらった後に足りない部分をどうサポートしていくか
クライアント側
• Carthage, CocoaPodsの併用
• アーキテクチャはMVCベース
• 共通化は基本的にprotocolを使って行う
• 特定のライブラリに依存しないiOS クリーンアーキテクチャか全体の見通しが良くなるReduxを導入したいが・・・
クライアント側で使っているライブラリたち• APIKit
• BrightFutures
• SnapKit
• Realm
• Ji
• ReactiveKit
• SDWebImage (Kingfisherに置き換え予定)
• Reachability
• TabPageViewController
• SVProgressHUD
Candleのエンジニアチームの特徴
• 基本的にインターンの方が多い
• ポテンシャル採用を行うことも多いのでプログラミング未経験者が入ってくることも多い
• 人の入れ替わりが多い(プロジェクトの配置換えとか)
まずは研修
• 社内のエンジニアが作った簡単なCandleのサービスのコピーを作成してもらいます
• ただ作ってもらうだけでなく当然いくつか意識していただくことがあります
• わからないところ、詰まっている箇所はドキュメントと自分への質問という形で対応
• Swift tour は研修に追加したいと思ってる
コードをなるたけ綺麗に書く
• コード規約レベルの話
• 規約を眺めつつまずはスペースを空けてもらったりインデント整えたり
• 厳密に規約に従ってもらうというよりコードを綺麗に書くという癖をつけてほしい
コードを書く場所
• さっきの話と関連する
• viewDidLoadに全て詰め込ませない
• 実際にコードをどこにおくのが適切かを考えてもらうわけではなくそうやってコーディングしていく癖をつけてもらう
研修をやっていただいて
• 実際のコード読んで尻込みしないように研修のレベルが高めになってしまっているのかなという感じは否めない
• Futureやジェネリクス、プロトコルは一旦なくしてもう少しシンプルにした方が良いかも・・・
• 2, 3人同時に相手をすることもあるので自分のリソースが割と持っていかれる
まずはコードレビューを根付かせる所から• 自分が入った当初はコードレビューの文化がなかったのでそれを根付かせる必要があった
• 自分が率先してPR作成 -> Review -> Mergeという流れを作る
• 言い出しっぺの法則に則り自分が全て見ていた (^q^)
• でも回り始めてからは徐々に自分のコストもかからなくなった
コードレビュー大事
• 新しく入っていただいた方のコードレビューは基本全て自分が担当(iOSプロジェクト内)
• 実際の開発に入ると規約から外れていたりするので徹底的にフィードバック
• 主にメソッド名や変数名、大きすぎるメソッドの分割、書くべき場所などコメントすることが多い
• 研修からは見えてこなかった部分が見えてきておもしろい(その人の性格とか)
レビュー時に意識していること
• 言葉遣いは割と注意を払っている。文字だけだと感情が伝わりにくいので絵文字を多用
• 気をぬくと細かい箇所を見落としていたりするので普段のレビュー以上にしっかりみる
• タスクとは直接関係なくてもフィードバックできる箇所があればフィードバックする(こういう方がわかりやすいよとか)
面談
• 週一、月一くらいのペースでその人と面談してどんな感じかを探る
• どこで詰まっているか?開発をする上での知識はどの程度ついてきたか困っていることはないかなど確認
• そこで得た情報から少し課題を出してみたりコードレビューの際にどこを見ればいいか絞る
• 割と最近色々やり始めたばかりなのでペースは調整中
コード規約
• 基本的には eurekaさんのものを使わせていただいています - https://github.com/eure/swift-style-guide/blob/master/README_jp.md
• それをベースに自分が思う所を変更、追加したものをドキュメントとして公開しています
マインドセットの公開
• 自分の哲学や思考の元になっている記事や本などを列挙して社内のドキュメントとして公開している
• その中からその人に良さげなものを紹介したり探してもらったりしている
• 少し恥ずかしい
今後やっていきたいこと
• 割とSwiftの言語機能やUIKitについて知らない人が多いので週一で勉強会をやりたい
• プロジェクトにきちんとしたアーキテクチャを導入したい
• 自分のリソースを増やすために諸々自動化したい
• テストコード追加したい
まとめ
• 実際の開発に近い研修をやってもらうことで尻込みせずに開発に入ってもらう
• わからない部分はどんどん質問してもらい早くキャッチアップできるようサポート
• 開発に入ってもらった後もコードレビューや面談など通じて徹底的にサポート
• コードレビュー大事
• ドキュメントを見てもらうことで自分のリソースが割かれるのを緩和