テックブログ

CI/CD時代にこれからさらに重要になるGithub


Gitを知っておくべき分野が増えているようです。

ソフトウェア開発者が主に使用していたバージョン管理ツールであるGitが、サイト(サービス)デプロイの自動化(CI/CD)の重要性が高まるにつれて、開発者だけでなく、サーバー運用やネットワーク関連分野に属する人も知っておくべきサービスの一つになっていると考えています。

この機会にGit、Github、Github Actionsについて簡単に説明したいと思います。

目次


  • Git
    • Gitの誕生
    • 動作構造
    • こちらも参考
  • 無料リモートリポジトリの登場
    • リモートリポジトリはサーバーだ
    • 各リモートリポジトリ企業の特徴
    • なぜGithubが優勢なのか?
  • CI/CDで重要な位置を占めるGithub Actions
    • CI/CDとは?
    • Github Actionsとは?
    • アカウントあたり月2000時間の無料リソース提供
    • 活用事例
  • おわりに



1. Git

  • Gitの誕生

kernel.orgでのgitの開発状況を示すページ。gitもgitでバージョン管理を受けています。

Gitの誕生を説明するには、Linuxの話をする必要があります。 Linuxの開発者であるリーナス・トーバルズは、2005年以前まではLinuxカーネルのバージョン管理のために別途プログラムを使用せず、メーリングリストでバージョン管理を行っていました。

しかし、オープンソースソフトウェアの特性上、開発参加者が増えるにつれて、リーナスはバージョン管理システムの導入が必要だと判断しました。

当時、SVN、CVSなどのオープンソースバージョン管理ソフトウェアが存在していましたが、彼の気に入らず、最終的にBitKeeperを導入することになりました。

しかし、有料ソフトウェア(クローズドソース)だったBitKeeperの導入により様々な摩擦が生じ、BitKeeper側が一部のLinux開発者の使用を禁止する事件が発生したことで、

リーナスは新しいバージョン管理システムであるGitを開発することになりました。

そうしてGitはLinuxの基本プログラムとして搭載され、リーナスの知名度も相まって、SVN、CVSなどのバージョン管理プログラムのシェアを奪いながら、現在最も広く使用されているバージョン管理プログラムとなりました。




  • 動作構造

出典: https://github.com/ByteByteGoHq/system-design-101?tab=readme-ov-file#how-does-git-work
  • リポジトリ(作業ディレクトリ)の作成
    • Gitを使用するために最初に始まるコマンドです。
    • リポジトリにしたいフォルダーに移動して「git init」を使用してローカルリポジトリにするか、「git clone <リポジトリURL>」を使用して既にリモートリポジトリに存在するデータをそのまま複製することができます。
    • このように作成されたフォルダが作業ディレクトリになります。
  • 作業ディレクトリでの作業
    • 実際のファイルが位置するディレクトリです。
    • 「.git」フォルダや「.gitignore」などのGitの動作に必要なファイルも含まれています。先頭に「.」をつけることで一般的なファイルエクスプローラでは表示されません。
    • ここでファイルの修正、作成、削除を行います。
  • ステージングエリアに移動して変更点を準備する
    • ファイルの修正、作成、削除を行った後、「git add <ファイル名>」または「git add .」コマンドを使用してステージングエリアに移動させます。
    • ローカルリポジトリにデータを記録する前に変更点を準備する段階です。
  • ローカルリポジトリに変更点を記録する
    • 「git commit -m “コミットメッセージ”」コマンドを使用してステージングエリアにあった変更点をローカルリポジトリに記録します。
    • コミットメッセージには通常どのような変更があったかを記録します。
  • リモートリポジトリに変更点を記録する、ローカルリポジトリに変更点を記録する
    • 「git push origin <ブランチ名>」コマンドを使用してローカルリポジトリの変更点をリモートリポジトリに適用することができます。
    • このフローに従って変更点の最新化が行われ、他のユーザーが最新化されたデータにアクセスできるようになります。
    • その他にも、最新化されたリモートリポジトリの変更点をローカルリポジトリに適用したり、最新データがあるか確認したりすることができます。

  • ブランチ

    git.gitブランチグラフ。多数のブランチがMainにMergeされています。

    • Gitにはブランチという概念があります。上記で言及されたブランチ名はこれを意味します。
    • 分岐機能として使用され、テストバージョンのために作ったり、特定機能の開発のために別途作成したりする場合があります(プロジェクト状況によって異なります)。
    • 分岐したブランチは後にメインブランチに統合(マージ)することができます。



  • こちらも参照

より詳細な内容をこの文書に含めるのは難しいと思われるため、MITのmissing-semesterのバージョンコントロール講義を参照することをお勧めします。

https://missing-semester-jp.github.io/2020/version-control/




2. 無料リモートリポジトリの登場

  • リモートリポジトリはサーバーだ

上記の動作構造を見ればお分かりのように、gitの核心はリモートリポジトリにあります。

ここにすべてが集まり、協業者とデータを共有する手段なのです。

そのためにはインターネットに接続されたサーバーで動作している必要があり、従ってリモートリポジトリサーバーを構築する必要があります。

しかし、無料で使用できるリモートリポジトリが登場したことで、Gitを誰でも簡単に使用できるようになりました。

もちろん無料である分、使用に制限があり、制限を超える使用が必要な場合は費用を支払う必要があります。

現在、無料リモートリポジトリを運営する企業が存在し、各企業ごとに制限事項が異なり、独自の機能を持っています。




  • 各リモートリポジトリ企業の特徴

Github: 最大の規模と多様な機能を提供していますが、非公開リポジトリの場合、協業者数に制限があります。

GitLab: 非公開リポジトリの協業者数に制限がないこと、DevOps開発者向けの機能が多いことが特徴です。

BitBucket: Confluence、JIRAなどのコラボレーションツールとの連携性が特徴です。

Gitee: 中国企業が運営するサービスです。




  • なぜGithubが優勢なのか?

  1. オープンソースの中心地

    Apacheファンデーションのgithubページ

    かつてオープンソースの中心地と呼ばれていたSourceforgeの様々な問題により、オープンソースプロジェクトの多くがGithubに移行するようになり、Githubの規模はどんどん大きくなっていきました。

    オープンソースの特性上、多くの人々の貢献が重要となるため、Githubはこのニーズを適切にターゲットにしたと言えます。

    様々なオープンソースプログラム(mysql、Apacheなど)のソースコードを閲覧することができ、Githubユーザー誰でも改善点の提案やバグの報告ができる環境が提供されています。

    また、自分が作成したコードを配布でき、他の人と協業し、フィードバックを受けることができます。

  2. マイクロソフトの買収による影響

    マイクロソフトがGithubを買収したことで、Githubに様々な機能が生まれ、非公開リポジトリの制限事項が緩和されるなどの改善が行われました。

    特にGithub Actions、Github Copilot、Codespaceのような新機能が登場し、特にオープンソース開発者を支援するGithub Sponsorsプログラムを運営することで、オープンソース開発者への支援を拡大した点もポイントだと言えるでしょう。

  3. 開発者の代名詞となってしまったGithub

    このような影響力のおかげで、開発者であればGithubアカウントを持っていない方はいないと思います。

    多くの企業が面接時にもGithubプロフィールを要求するようになり、Githubはそれ自体が開発者の履歴書としての役割も兼ねるようになり、多くの開発者がGithubで活動するようになりました。




3. CI/CDで重要な位置を占めるGithub Actions

  • CI/CDとは?

  1. 継続的インテグレーション(Continuous Integration, CI) 継続的インテグレーションは、開発者がコードの変更点を中央リポジトリに集約する開発方式です。 Gitのリモートリポジトリにコードを集約することと同じです。
  2. 継続的デリバリー(Continuous Delivery, CD) 継続的デリバリーは、コードの変更点が自動的にテスト、ビルドを行い、デプロイの準備を進めることを意味します。 CIの概念から拡張された概念だと考えていただければ良いです。
  3. CI/CD この二つを合わせてCI/CDパイプラインと呼びます。 以下の順序で進行されるのが一般的です。
    1. コードプッシュ:コードをリポジトリにコミット
    2. ビルド:コミットされたコードをビルドします。
    3. テスト:ビルドされた成果物をテストします。
    4. デプロイ準備:デプロイを行うための環境構成を進めます。
    5. デプロイ:STGまたはPROD環境にデプロイ



  • Github Actionsとは?

Github ActionsはGithubのリポジトリで特定の条件に特定の動作を設定し、自動化を実現できる機能で、CI/CDで非常に重要なツールとして位置づけられています。

主な特徴は以下の通りです。

  1. カスタマイズ可能な自動化

    YAMLファイルを作成して希望する自動化作業を設定することができます。

    このYAMLファイルをワークフローと呼びます。

    Gitの基本機能であるpush、pull request、issueとcronをトリガーとして設定し、特定の条件を設定することができます。

  2. 様々なOSのサポート

    Linux、macOS、Windows環境をサポートしています。

  3. マーケットプレイス

    他のユーザーが作成した自動化機能を活用することもできます。

    様々な機能を組み合わせることで、より細かなカスタマイズが可能になります。




  • アカウントあたり月2000分の無料リソース提供

CI/CDソリューションの中で最も大きな利点として浮かび上がるのが、アカウントあたり月2000分の無料コンピューティングリソースを提供していることです。

簡単に説明すると、月2000分間仮想マシンコンピュータを貸し出すという意味とも捉えられます。

無料プラン基準で500MBのストレージスペースを提供するため、大規模プロジェクトでない限り十分な容量を提供しており、一度に20個まで実行できるため、この点も大きな利点だと言えるでしょう。




  • 活用事例

  1. push後に自動的にビルドおよびコード動作テスト コードの変更点があれば自動的にビルドして、正しく動作するかテストまで行うことができます。
  2. サイト(サービス)デプロイの自動化 ウェブサービスの運営者の場合、サイトの修正点をサーバー(オンプレミス、EC2、Azureなど)に自動的に適用することができます。
  3. 定期的な作業の実行 cronタイマーを使用して定期的な作業を実行することができます。

その他にも様々な活用方法が存在し、大規模プロジェクトの場合、短時間で作業を終えられるようにワークフローを作成することが重要になってきています。




4. おわりに


このようにGitとGithub、CI/CD環境でのGithub Actionsの重要性について見てきました。

Gitは単なるバージョン管理ツールではなく、現代ソフトウェア開発の核心として位置づけられており、Githubはコードリポジトリを超えて開発者の履歴書であり、オープンソースエコシステムの中心地となりました。

特にGithub Actionsの登場により、多くの企業と開発者がCI/CDを構築できるようになり、これはサービス開発プロセスの効率性を大きく引き上げたと考えています。

短い文章ですべての内容を含めることができず残念ですが、この記事がGitとGithubを入門される方々の助けになれば幸いです。

この記事をシェアする

  • facebook
  • twitter
  • hatena
  • line
URLとタイトルをコピーする

実績数30,000件!
サーバーやネットワークなど
ITインフラのことならネットアシストへ、
お気軽にご相談ください