【個人的】チーム開発におけるGitHub Organization (Free) の設定と運用ルール

3 min read読了の目安(約3500字

現在、GitHub Organization (Free) を活用してチーム開発を行っているが、無料版という制限の中で、どう運用 (妥協) しているのかなど、設定と運用ルールを書いていく。

試行錯誤を重ねながら運用ルールを変えていったりしているので「私のOrganizationではこんな設定/運用しているよ!」みたいなのがありましたら、Discussionに書いてもらえると幸いです。

Organizationの設定

基本的なVisibility

  • RepositoryやPackage (未使用)、Projectの VisibilityPrivate
  • Peopleは 任意 (GitHubのプロフィールにOrganizationを表示する or 表示しない)

People (招待方法)

Organizationに所属する全てのユーザを Member として招待する。

Team

Organizationには、Team という概念があり、これはDiscordでいう ロール のようなもの。
Team に対して、アクセス権限の設定やメンションを行うことが可能。

現在は以下の設定を行っている。

Team
├─member (内部のユーザ用)
│   └─developer (内部のユーザの中で開発に関わるユーザ用)
└─teacher (教員 (外部のユーザ用))

学生なので、チーム開発に関わる教員 (外部のユーザ) に対し、Read権を与えるために teacher を作成。
(良いTeam名が思いつかないので teacher としている)

Settings

特に書いていない部分はデフォルト設定。

Member privileges

Member repository permissions

Base permissionsNo permission (手動で権限を割り当てたい為)

Admin repository permissions

Repository visibility change

Allow members to change repository visibilities for this organization (PublicなRepositoryに変更出来ないようにようにする為)
Allow members to delete or transfer repositories for this organization (Repositoryを削除または転送出来ないようにする為)

Member team permissions

Team creation rules

Allow members to create teams (Teamを作成出来ないようにする為)

Security & analysis

便利な機能は活用する方針。

Enable all を全て押す (既存のRepositoryで有効化したい為)
Automatically enable は全て (Repository作成時に有効化したい為)

Webhooks

今回のチーム開発では、コミュニケーション手段の1つとしてDiscordを採用しているのでWebhookで通知を受け取る設定をする。

受け取るイベントは以下の設定を行っている。

☑ Check runs
☑ Code scanning alerts
☑ Discussions
☑ Forks (Forkを許可していないので届かないのが正解)
☑ Issues
☑ Organizations
☑ Projects (現時点でなぜか届かない/Discord側の対応待ち?)
☑ Project cards (現時点でなぜか届かない/Discord側の対応待ち?)
☑ Project columns (現時点でなぜか届かない/Discord側の対応待ち?)
☑ Pull requests
☑ Pull request reviews
☑ Repositories
☑ Repository imports
☑ Repository vulnerability alerts
☑ Secret scanning alerts
☑ Teams

Installed GitHub Apps

インストールしているGitHub Apps (一部)

  • project-bot
    IssueやPull requestなどのイベントをトリガーに自動でProjectのカードを作成/移動してくれる (めっちゃ便利)

OrganizationのProject

Settings

特に書いていない部分はデフォルト設定。
一括して設定する場所がなさそうなので、Projectごとに設定。

Options

Organization member permissionNone (手動で権限を割り当てたい為)

Teams

developerWrite
memberRead
teacherRead

Repository

共通認識

  • main ブランチ, develop ブランチでは git push -f しない
  • ブランチ作成者本人以外が使用していそうなブランチで git push -f する場合は関係する人に了承を得て、対応方法を伝える
  • Repository名やブランチ名は 英数字ハイフン のみ使用する
  • デフォルトブランチは develop ブランチにする

ブランチモデル

  • Initial commitした状態で main ブランチから develop ブランチを切る (初回のみ)
  • develop ブランチから feature/hogehoge ブランチを切って実装開始
  • feature/hogehoge ブランチから develop ブランチへマージが完了したら feature/hogehoge ブランチは削除する (意図的に残す場合を除く)

Project

進捗管理に使用 (運用方法はお任せ)

Label, Milestone

運用方法はお任せ

Issue

テンプレートを基本的に導入する (必要な情報漏れを防いでコミュニケーションロスを軽減する為)

Pull request

テンプレートを基本的に導入する (必要な情報漏れを防いでコミュニケーションロスを軽減する為)

Pull requestをマージする際の条件

  • Pull request作成者以外のレビュワーからApproveされている
  • CI等のチェックが通った (導入している場合)

上記条件を満たした場合のみマージ可能 (無料版ではこのあたりの設定が出来ない)

Settings

特に書いていない部分はデフォルト設定。

Manage access

developerMaintain
memberTriage
teacherRead

Manual Repository

Repository のマニュアルが格納されている。

知見共有や技術的な質問

本来Wikiを使いたかったが、無料版ではPrivateなRepositoryでの有効化が出来なった為、以下の対応を行っている。

Discussion

Discussionが有効化されており、知見共有や技術的な質問はここで行う (QiitaやZennのような使い方)

Categoryは以下の設定を行っている。

Tips (知見共有)
Q&A (技術的な質問)

あとがき

試行錯誤を重ねながら運用ルールを変えていったりしている状況だが、落ち着いてきたので文章化を兼ねてこの投稿を書いた。
イレギュラーな運用方法も混ざっているとは思うが、より良い設定や運用ルールに改善していきたい思う💪