アジアクエスト クラウドインテグレーション部の田中雄也です。
この記事では、CI/CDを知るためのはじめの一歩として、ソースコード管理で用いられる機能と用語について触れていきます。
「Continuous Integration」・「Continuous Delivery」の略称で、日本語に訳すと「継続的インテグレーション・継続的デリバリー」といった意味になります。
ソフトウェアのリリーススピードの向上を目的とした開発手法で、
ソフトウェアをリリースさせた段階で満足するのではなく、リリース後においても継続的なアップデートを提供をすることで、絶えず変化するビジネス環境に適応したソフトウェアの提供を目指すための手法です。
コードの変更が行われる都度のテストやデプロイを自動化することで、ソフトウェアのリリーススピードの向上を通して、市場が求めるアプリケーションを維持し、競争力を保ち続けることが目的となっています。現在ではソフトウェアだけでなく、クラウドインフラにもこの仕組みが応用されるなど幅広い開発現場で用いられる手法となっています。
ずばり、コードのバージョン(変更履歴)を管理することです。
現代においては、1つの大きな成果物を複数人で作り上げるということが考えられます。
そんな時、手作業によってバージョン管理をしているとどんなことが予想されるでしょうか?
以下が一例になります。
上記のようなファイル群があった時、パッと最新ファイルを見分けられるでしょうか?難しいですよね。。
これらの理由から、コードのバージョンをシステムで管理する必要が生じます。また、最近の開発では、複数の開発者が1つのコードベースを共有しています。そのため、エンジニアは後述するバージョン管理システムを用いてこうしたコード管理の技術を使うことが必須となっているのです。
バージョン管理システムは、ソフトウェアのソースコードの変更を追跡し、複数の開発者が同じコードベースで作業できるようにするためのシステムです。 そんなバージョン管理システムは大きく分けて分散型と集中型の2つに分類されます。
(左が集中型・右が分散型)
集中型・分散型のそれぞれの特徴として
集中型:中央サーバーは全てのファイルの履歴を単独で管理する。開発者は作業を始める前に、このサーバーから最新のファイルを取得し、変更を加えた後はそれをサーバーにアップロードする必要がある。そのため、サーバーやネットワークに問題が生じた場合、新たな作業の開始や既存の作業の共有ができなくなる場合がある。
分散型:各開発者は自身のコンピュータ上で完全に独立して作業を行い、全てのファイルの履歴を保持する。作業が完了した後、変更を他者と共有するために、これらの変更を1つの共有場所(中央サーバー)に送信することができる。サーバーにアクセスできない場合でも、開発者は自己のコンピュータ上での作業を続行できる。
といった違いがあります。
今回のテーマとなっているGitは上記の分類のなかで、分散型に属しています。
そうした特徴のあるコード管理システムはCI/CDの自動化プロセスに密接に関係しているのです。
つまり、コード管理を知ることがCI/CD理解への第一歩と言えるのではないでしょうか。
というわけで、ここからはコードを管理するために用いられる、数多のバージョン管理システムの中から圧倒的なシェアを占めるといわれるGitを紹介していきます。
Linuxカーネル開発のために生まれた分散型のバージョン管理システムで、一説には80~90%のシェア率を誇ると言われています。このGitに対応するツールとしてGitHubやGitLabがあります。
※参考サイト Developer Survey Results2018 | stack overflow
Gitを用いることで、分散型バージョン管理システムの特徴やブランチ、マージといった仕組みから複数人でのソフトウェア開発を容易に進めることができるようになります。
また、GitとCI/CDを組み合わせることで、開発者がGit上でコミットを行うとCI/CDシステムが変更を検知し、コードビルド、自動テスト、デプロイメントなどの一連の作業を自動で開始できます。これによって、リリースプロセスを効率化し、ソフトウェアの品質を維持しながら納期を短縮するのに寄与しています。
バージョン管理システムとしてGitを扱うメリットとしては主に下記の5つが考えられます。
オフライン環境でも作業可能こうしたメリットからGitは開発者からの人気を集めているのです。
以下に主に使われることの多い、Gitにまつわる用語とその説明を記載します。
このような用語を理解することで、Gitの機能や以下に記載されたGitを操作するにあたって用いるコマンドについての理解も深めることができます。
次に基本的に用いられるGitのコマンドを紹介します。
git clone [取得対象のリモートリポジトリのURL]
のように用いられるgit checkout -b [新しいブランチ名]
やgit checkout [切り替えたいブランチ名]
のように用いられるgit add [登録したいファイル名]
のように用いられるgit commit -m[コメント]
のように用いられる
git push -u origin [リモートのブランチ名]
のように用いられる
git push
だけでOKgit log
だけでつかえますgit fetch [リモートリポジトリ名]
のように用いられるgit merge [統合したいブランチ名]
のように用いられるgit pull [マージ元のリモートリポジトリ名] [統合したいブランチ名]
のように用いられる以上がGitでよく用いられるコマンドの一覧となります。
現在の開発環境では、Gitと連携する多様なアプリケーションの普及により、従来のコマンドライン操作に代わってGUIベースのインターフェイスが好まれるようになりました。これにより、Gitの日常的な操作がより直感的でアクセスしやすくなっています。
とはいえ、コマンドラインでのGit操作を理解しておくと、GUIでは対応できない状況や細かな操作が必要な場合にも対応できるため、その知識は依然として重要です。
こうしたコマンドを覚えるためには、実際に手を動かして操作してみることが一番の近道です。
ぜひ、上記のコマンド一覧を参照の上、実際の操作の流れを体験してみてください。
というわけで、この記事では「CI/CDはじめの一歩 ソースコード管理編」として、CI/CDとGitについて触れさせていただきました。
CI/CDとは、継続的インテグレーション・継続的デリバリーを指す言葉で、ソフトウェアのリリーススピードの向上を目的としてコードの変更が行われる都度のテストやデプロイを自動化するものとして現在では、ソフトウェアだけでなくクラウドインフラを含めた幅広い開発現場で用いられている開発手法であること。
GitとはLinuxカーネル開発のために生まれた分散型のバージョン管理システムで、Gitを用いることで、分散型バージョン管理システムの特徴やブランチ、マージといった仕組みから複数人でのソフトウェア開発を容易に進めることができるようになること。
そして、CI/CDとGitを組み合わせることでソフトウェア開発における一連の作業を自動化し、これによって、リリースプロセスを効率化し、ソフトウェアの品質を維持しながらリリーススピードの向上ができることをご紹介させていただきました。
この記事が皆様のCI/CDやコード管理に踏み出す一歩として寄与することを願っています。
最後までお読みいただき、ありがとうございました!
参考記事
ソースコード管理とは? | Splunk
Developer Survey Results2018 | stack overflow