「KIOKU」開発チームのCI/CDをテックリードが紹介してみる
はじめに
こんにちは。今回は私たち「KIOKU」開発チームが導入している「CI/CD」について紹介していきます!
開発を楽に進めていくために、CI/CD未経験から勉強して導入しました!特にFlutterを使って開発している人には参考になると思うので、ぜひご覧ください。
反響が大きければGitHub Actions用のyamlファイルも公開しようと思いますので、参考にしたいよ!という方はいいねをよろしくお願いします!
CI/CDとは?
CIは「Continuous Integration」、CDは「Continuous Delivery & Deployment」の略で、どちらも開発の途中で起きる面倒ごとを自動化してしまおう、というものです。例えば、CIはテストコードを自動で実行してpushされたコードがきちんと動作するかチェックする、といったことができます。CDですと、PRをマージしたら自動でデプロイが行われる、といったことができるわけです。
私たちの開発チームでは当初CI / CDはなしで運用をしていました。ところが開発を進めていくにつれて不便なことが多く起こるようになりました(どんな不便かは都度紹介していきます!)そんな不便ごとを解決するために、初心者ながら、勉強しつつCI / CDを導入しました。導入した結果として、日々行なっていた作業が自動化されとても便利になりました。
私たちが導入しているCI
私たちのチームでは、テストコードがまだ完全には書けていないので、字義通りのCIというわけではないかもしれませんが、種類としては2つ導入しています。
現在はインテグレーションテストを書き進めているところなので、そちらもゆくゆくは導入していきたいと思っています。
Flutter linter
簡単ではありますが、flutter analyze コマンドを利用した自動の静的解析を導入しています。コードの可読性や安全性についてある程度担保してくれるので地味に重要ではあります。
AI code reviewer
CIとは少し違うかもしれませんが、AIを利用したコードレビューも導入しています。
私たちは、出されたPRを全てテックリードが確認し、レビューを行うという形をとっています。ですがテックリードも学生ですし、技術的にまだまだ知らないこともあります。また、変数の命名規則が違う・デバッグ用のprintが残っているなど、誰でも指摘できるような事項もあったりします。
そこで、ChatGPT APIを利用してコードのレビューを行う「CodeRabbit」を導入しました。テックリードが確認する前にCodeRabbitのレビューを確認して修正してもらうという形にしたことで、レビューで見るべき項目を減らしてコードの本質をレビューできるようになりました。また、豊富な知識からレビューしてくれる分、asigneeはもちろんreviewerも勉強になっています。
私たちが導入しているCD
開発環境のアプリをFirebase App Distributionへアップロード
これまではPRが出るたびにブランチをプルしてビルドし、動作確認を行なっていましたが、いちいちエミュレータや実機にインストールして試すというのはなかなか不便だなと感じていました。また、どうしてもエンジニアでない人にインストールして試してもらう場面があるのですが、apkファイルをビルドしてSlackで渡してインストールしてもらって…というのはどうしても面倒なものです。
そこで、PRが作成された時に開発環境のアプリをビルドし、「Firebase App Distribution」にアップロードするというところを自動で行えるCDを導入しました。「Firebase App Distribution」とは、apkファイルなどをアップロードすることで簡単にテスターにアプリを配布することができるサービスです。これを導入することで、エンジニアでない人や外部のテスターにも簡単にアプリを配布することができるようになりましたし、自分たちもパソコンが手元にない時でも動作検証ができるようになりました。筆者は自宅のデスクトップパソコンで開発を行なっていて出先ですぐにアプリの動作検証をすることができなかったので、この恩恵はかなり大きかったです。
本番環境のアプリをGoogle Play Console・Apple Store Connectへアップロード
続いて、本番用のアプリについても、自動でアップロードできるようにCDを組みました。
開発したアプリをストアにアップロードして公開するというのはかなりの手間がかかるものである、というのはスマホアプリ開発者なら誰しもがわかる悩みなのではないでしょうか。私たちも例に漏れず、毎回の開発サイクルの最後にやってくる「リリース作業」の大変さに悩まされていました。特に手間がかかるのが「本番環境への切り替え」でした。
そこで、dart-define-from-fileという、環境情報をjsonで切り替えられる仕組みを使って開発環境・本番環境をコマンドで切り替えられるようにした上で、それを用いて本番用アプリの自動アップロードのCDも導入しました。なんとこれによって、今まで数時間かけて手動で行っていたリリース作業が、10分ほど待っているだけで完了するようになりました。
おわりに
いかがでしたでしょうか?
今回は私たちの開発活動を支えるCI / CDについて紹介しました。筆者が導入を担当しましたが、GitHub Actionsで組んでいくのが思っていたより簡単で、やってみると意外にサクサク導入できました。まだやったことのない人もたくさん事例があるのでぜひ調査してみてください!
この記事を読んで私たちのアプリに興味を持った方は以下のリンクからぜひインストールをお願いします!
****************************************
iOSでのインストールはこちら!
AndroidOSでのインストールはこちら!
****************************************