はじめに
みなさんこんにちは。プロダクト開発部部長 / フルスタックエンジニアの高瀬 @takasehiromichi です。
今回は、迅速にプロダクトの価値を届けるために欠かせない、ロカオプが重要視しているCI/CDについてお話します。
CI/CD
CI/CDは、Continuous Integration, Continuous Delivery, Continuous Deploymentの略です。
アジャイルなどの文脈では、ある一定の機能単位で開発を行い頻繁にリリースを行います。これは、リリースとリリースの間隔を短くすることで、継続的に顧客へ価値を届け続けるという観点から行われます。
また、継続的にリリースを行うため、デプロイ前にJestなどで自動テストを行うことで、デグレを回避し余計な工数が発生しないようにします (Continuous Integration)。
自動テストの結果問題ないことがわかった場合、本番環境用に最適化されたビルドを行います (Continuous Delivery)。
最後に、ビルドが問題なく完了したら、本番環境へデプロイを行います (Continuous Deployment)。
ロカオプのリリース間隔
2024年における、ロカオプの本番リリースの回数をグラフにしました。
平均すると、毎月46.6回リリースしており、毎日で平均すると1.5回リリースしています。
毎日のようにリリースができている理由
こんなに毎日のようにリリースができているのには、いくつか理由があります。
サーバーレス構成で環境を構築しているため
ロカオプでは、AWS上にサーバーレスで環境を構築しており、コマンド1つでデプロイが完結するようにしています。
既存の利用ユーザーを意識することなく、気軽にリリースを行うことができるため、リリースに対するハードルがかなり低くなっています。
とにかく自動化にこだわる
人間はミスをする生き物なので、手動での作業が入っていると、どうしてもたまに間違えてしまうことがあります。
特に、リリース作業などでミスをしてしまうと、ユーザー影響はもちろんのこと、その後の戻し作業などが発生し、工数がかかってしまいます。
どのような状況下でもミスが起こりえないようにするためには、徹底した自動化が必要不可欠です。
ことCI/CDやリリース関係においては、自動化を徹底して用意しておくことで、リリース速度をより加速させています。
ロカオプのCI/CD構成
ロカオプのCI/CD構成は、非常にシンプルです。
まず、我々はBacklog上のGitを使用しています。
Backlogは、Webhookを作成できるので、Gitプッシュが発生するたびに、Webhook処理用Lambdaへ送信しています。
その後、Webhook処理用Lambdaにて、どんなイベントなのか、本番用なのか、ステージング用なのか、テスト用なのか、また、環境はロカオプMEOなのか、ロカオプ予約なのかを判別して、処理を切り分けています。
(手動の操作としては、本番用タグを付与するコマンドを実行した際は、本番用で、ステージング用タグを付与するコマンドを実行した際はステージング用、また、テスト自動化のため、本番用やステージング用にタグを付与するコマンドを実行しないような、通常のコミットの場合でも、全てのコミットを監視して、テストだけは実行しています。こうすることで、不意にテストが失敗してしまうような実装をしてしまっている場合でも、事前に気がつくことができます。テストに失敗している場合は、Slackに通知が来るようになっています。)
その後、各種条件分けに従って、CodePipelineが分けられているので、それぞれS3バケットに対してソースをzipであげています。
その後CodePipelineが動作し、本番用、ステージング用、テスト用の3種類×ロカオプMEO、ロカオプ予約の2種類、合計6種類のパターンで、ビルド、デプロイが行われます。
(テストだけ実施する際はデプロイは不要なので、ビルドフェーズだけ実施されます。)
終わりに
ロカオプは、継続的にプロダクトの価値を提供し続けることを重要だと考えているため、このようなCI/CDの仕組みは最初期から構成しています。
今後も、より継続的にプロダクトの価値を提供し続けることができるように、引き続き頑張って開発していきたいと思います。