はじめに
Webアプリ開発・運用のチームに配属されてから本格的に業務が始まった時の出来事。開発の依頼をもらいそのままコーディングしプルリクエストを作りコードレビューを貰った。ここまでは自分の想定していた通り。だが、マージ承認をもらってからのCI/CDツールを利用した自動ビルド・デプロイをおこなうのは初めてだった。なんとなくCI/CDという言葉は聞いたことがあったが、今まで個人や短期間でのハッカソンでメインに開発していた自分にとっては全く知らない存在であった。ひとまず手順を覚えミスを防げるように意識する日々だったので、早くCI/CDを深く理解して業務に落とさねばと感じ、記事執筆の中で理解を深めていこうと思ったのでシリーズ化して書いてみることにした。
また、入社した後に自社のインターン生がおこなうフルスタック開発のハッカソンにて、GitHubのCI/CDを利用して開発プロセスの最適化を図っているチームを見かけとても印象に残った。「短期間での小さな開発でそこまでやる必要あるか?」みたいな意見は一旦さておき、学生時代からCICDを理解し実践すること自体は、新卒エンジニア就活での技術チェックにおいて一定評価は高くされそうだなと思ったので、全く扱ったことがない人でも理解できるように噛み砕いて書いてみる。
CI/CDとは?
CI (Continuous Integration)とCD(Continuous Delivery)
直訳すると『継続的インテグレーション』と『継続的デリバリー』
「は?」って感じなのですが、、、(すみません英弱で🙇)
CICDとは一言でまとめると、変更をマージしてからリリースするまでのプロセスを自動化してくれるもの。(その『プロセス』で何をやるか・やっているかを知るとグッと理解しやすくなると思います。)実際にマージしてからリリースまでやることは、主にビルド・テスト・デプロイ。ここをツールを利用して自動化している。手動ではなく自動でやってくれることにとてもメリットがあると学生時代の開発経験を振り返った時に自分は感じた。
切り分けたコンポーネントをそれぞれ少しずつ修正を加え、ローカルでも正しく動作していることを確認してからmainブランチにマージしたものの、別の機能が正常に動作しなくなっていたことがあった(いわゆるデグったってやつ)。その時はすぐに修正して変更を反映したり、疲れた時は休憩したりそのまま寝て次の日に作業するという行動をとっていましたが、24時間365日お客様に提供しているプロダクトでは流石にできないと察しました。特に本番環境での不具合が続けば続くほど、そのプロダクトが生み出していた売り上げは確実に落ちる。ECサイトなどで起こると最悪。ゾッとする。
しかも、かなり小さい規模での開発でデグることにも気づけないのだから複数人での大規模プロダクトでの開発では到底気づけるわけがない。
社会人エンジニアにとっては至極当たり前な事だと思うが、サービス運用経験がない駆け出しプログラマーにとっては知る場所がない気がする。
本番環境での動作不具合の時間が少しでも長ければ長いほどそのプロダクトが生み出す売り上げは落ちることは知っておくでき(エンジニア学生向けの伝言)
その他にも、プロダクトを利用してくれているユーザーが離れる、ネットでニュースなどにもなれば会社の社会的信頼も損なわれる、不具合を修正するためにプロジェクトに関わっている全ての人が奔走し追加のお仕事が降りてくること間違いなし。
上げればキリがない。つまりこの過程を自動化することは重要というかむしろお客様がいる時点で絶対に必要なことである。
改めて、以下にCI/CDのメリットを簡潔に記す
- メリット
- バグの検出が早くなる
- ヒューマンエラーが削減される
- リリースサイクルが統一されてることで複数人での運用が容易くなる
最後に
なんとなく知ったまでで伴っているので、今後実践してみる。様々なCI/CDツールが存在しているが、個人的にGitHubを利用したCI/CDに興味あるので、これからはそちらを中心にキャッチアップして理解を深めてみる。