TL;DR
最近CI/CDツールとかよく話題になっているので軽く調べてみたら
リリースとかデプロイとかインテグレーションとかデリバリとかよくわかってないことに気付いたので備忘録がてらメモに残します。
用語解説
リリース
狭義では「新製品・新機能の完成を開発チームから外に発表すること」
だが実際には拡大解釈されてユーザが使える状態にまで持ってくことまでをいうことが多い印象。
デプロイ
本番環境にソフトウェアを配置して利用できる状態にすること。
デプロイに含まれるプロセスは
- リリース(対外的に発表)
- インストール(本番環境に導入する)
- アクティベート(依存関係のあるプログラムのインストール・アクティベーションコードの記入、アプリ起動など)
Webアプリの場合はエンジニアが3.まで行うが、ネイティブアプリの場合はGooglePlayやAppleStoreから落とせる状態にまで持っていくこと。
一般的なリリースのイメージはデプロイなのかなと。
ビルド
ソースコードから実行可能ファイル(たとえば .exe
)を作成すること。
ビルドに含まれるプロセスは
- 静的解析(バグ発見)
- 機械語への翻訳(コンパイル)
- ライブラリとのリンク
いわゆるインタプリタ言語(スクリプト言語)でのビルドの立ち位置はエンジニアの中でも揺れている印象がある。
自分はインタプリタ言語ではビルドは内部的にはどうであれ人間が意識的に行う必要がないのであれば
サービスを提供するうえでは存在しないことにしてしまっていいのではないかと考えている。
コンパイル
プログラミング言語で書かれているソースコードをOSがそのまま実行できる機械語に翻訳する。
いわゆるコンパイラ言語(C, Java, COBOL)などではあらかじめコンパイルをしておく。
インタプリタ
ちなみにインタプリタ言語でもコンパイラを作って実行可能ファイルを生成することはできるし、
インタプリタを利用したプログラムの実行も内部的にはCやJavaに変換されている(らしい)
インテグレーション
CIのIの部分。インテグレーション。
ソースコードの変更差分をリポジトリに統合すること。
CI(継続的インテグレーション)
変更差分のリポジトリへの統合を自動的に行っていくシステムのことだが、
ビルドやテストがインテグレーションの前に自動的に行われ、
並行して複数の開発者がいても競合やバグに気付かせてくれることが多い。
デリバリ
CDのDの部分。デリバリ。
共通のリポジトリの変更をデプロイできる状態に準備すること。
CD(継続的デリバリ)
リポジトリへの変更があった時点で自動的に様々なテストを実施し、
それが通ったらあとボタン一つ押せば本番環境にデプロイできる状態にしておいてくれる。
リポジトリへの変更があったらそれをデプロイまで全部してくれる場合は**CD(継続的デプロイ)**と呼称が変わる。
おわりに
- ふだん使っている言葉でもどこまでを含む言葉なのか、を意識してこなかったなという反省
- 日本語版のWikipediaと英語版のWikipediaの情報量の違いすごい
- 結局RedHatとAWSの情報が一番わかりやすく、信頼もおける感じがした
- もし「そこちがくね?」的指摘あればどんどんお願いします。
参考
CI/CDのエキスパートが解説:CI/CDとは何か? なぜ今、必要とされるのか?
ビルドとデプロイって結局なんやねん!?!?!???みたいな記事
「ビルド」機能とは?仕組みやコンパイルとの違いを解説
ソフトウェアデプロイメント
CI/CD とは - Red Hat
継続的デリバリーとは?
Continuous integration
Continuous delivery