開発系サークルにおけるGitHub活用術

私の所属するサークルで出した学祭雑誌に掲載した記事を修正してupしてみました。GitHub初心者なりに記事を書いてみましたので、読んでいただけると幸いです。学祭前日に書き上げた記事なのでかなり荒い出来なのは許してください(´;ω;｀)

## はじめに

GitHubといえば世界で最も有名なGitのホスティングサービスであることは言わずもがな、ソースコードの管理以外にも様々な機能が備わっている。

本記事では私が組織運営上でGitHubを活用することになり、その結果どのような活用方法に落ち着いたかを紹介する。ただし、GitHubの詳細な機能説明に関しては記述しない。突然専門用語が飛び出すことを先に謝罪する。

しかし、実際GitHubの運用方針は組織の状況に応じて千差万別であると考えられるため、あくまで一例としての参考にしてほしい。

また、GitやGitHubについて明るくない読者もいるだろう。そんな読者は本記事を読んで知らない単語が出たらぜひブラウザで検索をかけてほしい。有名な技術なのでいくらでも説明している記事が出るだろう。本記事の最後には私がGitやGitHubについて学ぶ際に利用した教材やウェブサイトを紹介する。興味のある読者はぜひ確認して学習の際の参考にしてほしい。

## 私の所属する組織について

私は所属するサークルの内、IT班とゲーム班という部門でGitHubを活用している。

IT班では、進んでいるプロジェクトのソースコードの管理やドキュメントの管理、開発チームの管理などを行っておりそこまで長期の開発は行っていない。せいぜい長くて2,3ヵ月程度のスパンの開発である。

ゲーム班の方では、作っているゲームのソースコードの管理を行っており、こちらもIT班と同様に年単位レベルの開発は行っておらず、2,3ヵ月程度の期間での開発を例年行っている。

また、二つの組織ではコミュニケーション用のツールとしてDiscordを利用しており、そちらで計画を立てたり議論をすることが多い。

## GitとGitHub

Gitとは、分散型バージョン管理システムと言われるソースコードの管理システムの一種であり、GitHubはそのWebホスティングサービスである。

ピンとこない読者向けに説明するとGitは本を収納するための整頓術の一種でGitHubはその整頓術を利用して本棚に本を並べ整理、管理してくれている図書館のようなものである。それも、その図書館は利用者が好きな本を持ってきて代わりに設置、管理することを頼むことが出来るのだ。

Gitは基本的にコマンドラインを利用して使うことが一般的だがGitHubではそれをWebのGUIを使って触ることが可能であり、さらにはGitのみに限らずそれをコアとしてソースコードを管理する、議論する、タスクを管理する等のための便利な機能が多くある。

## 主に利用するGitの機能

### Branch

Gitにおいて核となるような機能である。説明することが少し難しいが、端的に言って世界線の分岐をすることが可能である。世界線を分岐し移動することで元の世界線に影響を及ぼすこと、また逆に影響を受けることなく開発を進めることが可能となり、最終的にその世界線をもとの世界線に統合することが可能なのである。これにより、複数人による同時開発を円滑に進めることが可能となる。

## 主に利用するGitHubの機能

### Issue

タスク管理のための機能である。Issueを立てると一意な番号が割り当てられるためタスクの管理がしやすくなる。また、誰がそのIssueに割り当てられているのか、いつまでに行うべきなのか、関連するブランチはどこなのか等、設定することが出来るため、大変便利である。

特に、一意に番号が割り当てられていることが重要で、そのため番号からすぐにタスクを確認することが可能であり、Commit履歴にあるBranchから関連するIssueにすぐに飛ぶことでバグの原因の発見、修正に大いに役立つ。

### Pull Request

CurrentBranchをBaseBranchにMergeする際、差分を確認することが可能でありweb上での修正も可能となる。さらに、レビューを通さなければマージできないよう設定もできるので、コードチェックも円滑に行うことも可能となる。

## 主なGitHubのリポジトリの設定

まず手始めに、基本的なリポジトリの設定を説明する。

私たちの組織では上記で説明した通り、そこまで長い期間の開発を行わず議論もDiscord上で行うことが多い。そのため、DiscussionやProjectsといった機能については触らない。この辺りは、実際に触ってみて私の組織の規模間では少し大げさすぎると感じたことが決め手となった。当然PR上で議論することもあるがそれはコーディングに関してであり、仕様といったコーディングの領域ではない事象についてはDiscord上で行っている。

Actionsについては、設定でCodeQLという脆弱性チェックをオンにすることが出来るためそれは有効にしている。その他自身で設定する必要があれば適宜設定するという感じだ。

Branchルールであるが、これは単純にデフォルトのルールに加えブランチが更新されると勝手にapproveが外れる設定と、一定数のapproveがなければマージできない設定にした。また、mainへの直接プッシュを許さず必ずPRを通してのプッシュになる設定とした。

この様なブランチルールは当然みんなでコードを確認することでバグを未然に防ぐ（減らす）狙いもあるが、それよりも重要な点というのが、誰が作業を行っているのかや作業単位の意味を明確にできるということだ。作業の意味が後で明確に分かれば、バグや何らかの理由があってコミット履歴を遡る必要があったとしても目的の地点まで簡単に到達することが出来る。

Wikiについては、リポジトリを触る人間のためのコーディングの際の参考にするため、有効にして随時情報を書き込んでいった。

最後に、PRを出してマージされたブランチは自動的に削除されるようにした。これは、たくさんブランチが残りすぎて、どれがどのブランチかわからなくなる状況を防ぐためだ。

## GitHubOrganizationについて

Organizationは組織でGitHubを利用するには欠かせない機能だ。ここでTeamを組んでそれぞれにリポジトリやその権限を個別に渡すことも出来る。

IT班の方ではこちらのTeamを大変活用している。ProjectごとにTeamを作りそこに班のメンバーを入れることでいちいちリポジトリに招待をして認証をしなくともそのリポジトリに関する権限を対象メンバーに簡単に渡すことが出来る。

また、リポジトリが個々人の物というよりは組織の物という扱いになるため、過去のリポジトリを確認したり参考にしたりすることが簡単になる。

## まとめ

GitHubはたくさんの機能があって初心者はどうすればよいかわからないかもしれない。しかし、実際目的に沿った運用をしようと思えばそこまで多くの機能を使う必要はないのだ。

手短にはなったが、このような形でGitHubを活用している。参考になれば幸いだ。

## 学習の参考にした書籍、サイト

- GitHub実践入門 ~Pull Requestによる開発の変革 (WEB+DB PRESS plus)
https://amzn.asia/d/jgv4TX5

- GitHub のトレーニング | Microsoft Learn
  https://learn.microsoft.com/ja-jp/training/github/