SREチームの金澤です。
ランサーズ開発合宿のバージョンアップチームの成果についてお話させていただきます。
ランサーズのバージョンアッププロジェクト
現在、ランサーズのバージョンアップはSREチームが主導で行っています。
バージョンアップは、以下のフェーズにわけて進行中です。
- CakePHP 1.3 → CakePHP 2.8
- PHP 5.3 → PHP 5.6
- CakePHP 2.8 → CakePHP 2.x最新
- PHP 5.6 → PHP 7 最新
そして、現在、1を進めている最中です。
コントローラー単位で移行を進めており、2018/6時点での進捗は70%でしたが、残る30%については、難易度が高いコントローラー、バッチ、管理画面などが含まれていました。
2018年度のSREチーム
2018/4から4人体制でSREチームが発足しました。
※その詳細は、「SREチームの発足」に書かせていただきました。
そして、バージョンアッププロジェクトをSREチームで担当することになりました。
現在、SREチームは
SRE
CRE
バージョンアップ
の3部門を抱えていて、それぞれがお互いの領域を跨ってカバーしている体制になっています。
※CREチームについては、また別途機会がありましたらお話ししたいと思います。
2018年度のバージョンアップ体制
ランサーズのCakePHP 1.3 → 2.8 バージョンアッププロジェクトは、当初3人でスタートしましたが、現在は、エンジニア全員での総力体制で進めています。
※この経緯については「PHPカンファレンス福岡2018に登壇しました」に書かせていただきました。
バージョンアップを専任で行っているメンバーは現在1人しかいないのですが、これまでの蓄積からある程度手順がパターン化できており、そのノウハウをGithub Wikiにまとめ、エンジニア全員で担当できる体制を整えています。
合宿の方針
総力体制とはいえ、普段の業務でバージョンアップ作業に充てられるのは、SREチームのエンジニアで30%くらい、その他のエンジニアは10%くらいという感覚です。
開発合宿は、普段の業務ではできないことを集中して行うことができる場です。
この機会に一気にバージョンアップを進めたいと思っていました。
今までの合宿では、ほぼ全員が、普段できないようなクリエイティブなテーマで取り組んでいました。
それはそれで楽しいのですが、今年の合宿は過去最大の人数で行うこともあり、確実にアウトプットを出したいと考えていました。
合宿は1泊2日で行われますが、実質的な作業時間は6時間+αくらいしかありません。
限られた時間で、できる限りのアウトプットを出すため、以下の方針で進めることにしました。
バッチのバージョンアップにリソースを集中
バッチのバージョンアップは、比較的パターンが単純で、検証もしやすいため、今回の合宿ではバッチのバージョンアップに全リソースを集中することにしました。
事前にアサイン
事前に、どのバッチを誰が担当するかを決めておきました。
バッチのバージョンアップは、ソース修正自体はそれほど難しいものではないのですが、動作確認を適切にできるかがポイントになります。
バッチを作った人が内容を一番理解しているので、基本的にはバッチを作った人に優先的にバージョンアップをアサインするようにしました。
フライング
合宿は時間が限られているので、何も準備せずに行くと、開発環境のセットアップだけで終わってしまうことにもなりかねません。
各担当者には、事前に1つ以上のバッチのバージョンアップを消化してもらい、一通りのフローを理解してから合宿に臨みました。
現地でリアルタイムリリース
原則、リリース作業は社内でしかできないようにしていますが、今回は合宿時でリリースまでしてしまうことで、確実にアウトプットを確定するようにしました。
ランサーズでは、リリース時に「槍」を持つことでリリースロックを実現しています。
古典的な方法ですが、カナリア確認時に別の人が重複リリースしてトラブルになることを防止しています。
現地到着後、リリースできる環境をSREチームが10分で構築しました。
結果
バッチだけで20リリースできました!
リリースすると、全社チャットにリリース通知が来るので、休日にも関わらず開発部が猛烈な勢いで進めていることをアピールでき、合宿がどれほど効果が高いイベントかをアピールできたかと思います。
バージョンアップの進捗は、72% → 80%になりました。
1年がかりで進めているプロジェクトが、わずか1日で8%進んだことになります。
この合宿をあと3回やりたい気分です。