こんにちは。minne事業部の@ntskです。
今回はminneのモバイルチームで行っている、リリースフローを効率化する取り組みについて、ご紹介したいと思います。
fastlaneやDeployGateなど、アプリのリリースや配布を支援する便利なツール・サービスはいくつかありますが、リリース作業においてはそれ以外にも準備段階で多くの手続きが必要です。 そこでモバイルチームでは、リリースまでに必要なフローを自動化するためのツールを作成し、活用しています。
リリースの流れ
はじめに、minneアプリの大まかなリリースの流れについてお話しします。
minneではスクラム開発をベースに、GitHub Enterpriseを活用して開発を進めており、モバイルチームでは、git-flowをPullRequestベースにアレンジしたブランチモデルを採用しています。
おおよそ2週間に1度のペースで新しいバージョンをリリースしており、 チームメンバーが交代で、各バージョンのリリース担当を務めます。 リリース担当者は以下のように作業を進めます。
- リリース内容がマージされていることを確認して、developブランチからreleaseブランチを切る
- アプリのバージョン番号を上げる
- releaseブランチから、developブランチとmasterブランチに対してのPullRequestを立てる
- そのバージョンについての検証Issueを立て、検証メンバーを募って動作検証を行う
- App Store / Play Storeへのアップロード・申請
- リリース後、クラッシュ等が発生した場合は、masterブランチからhotfixブランチを切り、2からやり直す
- そのバージョン及びスプリントについてのふりかえりIssueを立て、チームでふりかえりを行う。
課題と改善
上記の手順のうち5のアップロード以外がリリース担当によって手作業で行われていました。
リリースの度に単純な作業で時間がかかってしまう上、人的なミスなどが入り込みやすくなってしまいます。
そこで、「tenma」というリリース準備を自動化するツールを作成し、手順の1〜4及び6,7におけるGitHub関連の作業をコマンド一発で実行できるよう改善しました。
tenmaについて
tenmaはminne事業部のCTLである @hisaichi5518 作のリリース準備を自動化するツールです。
名前は大阪府大阪市北区の地名である「天満」に由来します。(謎)
具体的にtenmaが何をしているかというと、GitHub APIやgitコマンドを使い、渡されたオプションに応じてリリース用のブランチ、コミット、PullRequest、Issueの作成などの一連の流れを一括で実行します。
例えば、以下のようなコマンドを叩くと、developブランチからreleaseブランチを切り、バージョン番号を上げるコミットを行い、developブランチ、masterブランチに対してPullRequestを出すところまで、一括で行います。
bundle exec tenma prepare --release-branch --release-pullreqs --version 5.1.0
リリース後に不具合などが発生した場合には、.0
で終わらないバージョン番号を指定するとhotfixとして扱いmasterブランチからreleaseブランチを切り、同様にPullRequestを作成します。
bundle exec tenma prepare --release-branch --release-pullreqs --version 5.1.1
また、そのバージョンの検証IssueやふりかえりのIssueもコマンドで作成することが可能です。
テンプレートを利用することが出来るので、iOSとAndroidで別々の内容のイシューを立てることが出来ます。
bundle exec tenma prepare --kpt-issue --release-issue --version 5.1.0
これにより、手順の1〜4及び6,7におけるリリース担当の負担が削減され、開発や検証・テストのためにより多くの時間を割くことができるようになりました。
現在は社内ツールとして活用されていますが、同じような需要があればOSS化されるやもしれません。
まとめ
今回は、モバイルアプリのリリースにおける準備段階の作業の自動化についてご紹介しました。
minneでは3回同じことを繰り返していたら自動化を検討しようというルールのもと、様々な業務の効率化を進めています。
更にスピーディにユーザーに価値が届けられるよう、機械的に行える部分は積極的に自動化を進めていきたいと考えています。