Windows上にGiteaでソース管理環境を構築する

## はじめに
### やりたいこと
Giteaを使い、Windows上にGitHubライクなソース管理環境を構築します。個人やチームでお手軽にソース管理をする場合に適しています。

<!--Giteaとは何か、その特徴を簡単に説明。-->
### Giteaとは
Giteaとは、自己ホスト型のオールインワン ソフトウェア開発プラットフォームです。つまり、GitHubに似たことが社内などのプライベートネットワーク上でできます。

Giteaには以下の特徴があります。
- MITライセンスに基づくOSSなので誰でも利用可能
- 軽量・高速のため、リソースに制約のある環境でもパフォーマンスが良好
- Linux, Windowsなど多くのプラットフォームに対応
- 大規模な開発者コミュニティによって構築・維持されている

<!--なぜWindows環境でGiteaを使ったソース管理が有効なのかの紹介。-->
### なぜWindows環境なのか
- セキュリティ上、GitHubなどのクラウドサービスは使えない
- 既に使い慣れているWindowsサーバーがある
- Linuxを使えるメンバーがいない
- 自宅のPCで簡単に試したい

などの事情があるでしょう。

## 環境構築
### 環境
今回は以下の環境で構築しました。OSはWindows10, Windows ServerでもOKです。
- Windows11
- Git for Windows 2.44.0
- Gitea 1.21.4

### Git for Windows のインストール
Windows版のGitです。
以下の公式サイトからインストーラをダウンロードします。

https://gitforwindows.org/

インストーラを起動し、基本的にはデフォルト設定で進めていけばOKです。
私は以下の設定のみ変更しました。

| 設定項目 | 設定値 | 備考 |
|-|----|-|
| Choosing the default editor used by Git | Use Visual Studio Code as Git's default editor | デフォルトのエディタとしてVSCodeを使うため。 |
|Adjusting the name of the initial branch in new repositories|Override the default branch name for new repositories にチェックし、ブランチ名は「main」に設定|デフォルトのブランチ名は main が主流らしいため。|

画面キャプチャ付きの解説記事を書かれている方がいらっしゃいました。こちらもご参考ください。
[Gitのインストール方法(Windows版) #Git - Qiita](https://qiita.com/T-H9703EnAc/items/4fbe6593d42f9a844b1c)

### Gitea の実行
以下の公式サイトから実行ファイルをダウンロードします。

https://about.gitea.com/products/gitea/

バージョンを選ぶ場合はこちらからダウンロードできます。

https://dl.gitea.com/gitea/

ダウンロードした実行ファイル `gitea-1.21.4-gogit-windows-4.0-amd64.exe` を `gitea.exe` にリネームし[^RENAME]、DBを保存するフォルダ配下に配置します。ここでは、以下のパスに配置しました。
```plaintext:実行ファイルのパス
C:\Gitea\gitea.exe
```

コマンドプロンプトから、Giteaを実行します。これでサーバーが立ち上がります。
```bat:Giteaを起動するコマンド
cd C:\Gitea
gitea.exe web
```

### 初期設定
ブラウザから [http://localhost:3000/](http://localhost:3000/) へアクセスします。
初回のみ初期設定画面が表示されるので、各項目を入力します。
ここでは「データベースのタイプ」は、「SQLite3」にしました(自前で準備したMySQL, PostgresSQL, MSSQLを指定することもできます)。
![Gitea_initial_settings.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984671/07caf0e6-37b0-05de-41a5-d819a0784acb.png)

複数人で使う場合、以下の設定にしておくとよいです。
|設定項目|設定値|
|-|-|
|サーバーのドメイン|コンピュータ名|
|GiteaのベースURL|http://<コンピュータ名>:3000/|

※コンピュータ名は以下のコマンドで取得できます。
```bat:コンピュータ名を取得するコマンド
echo %COMPUTERNAME%
```

複数人で使う場合、オプションのメール関連の項目を設定しておくと、アカウント作成時のメール認証やメールによる通知ができるようになります。
入力ができたら、「**Giteaをインストール**」を押します。

アカウント登録画面が表示されるので、各項目を入力して登録します。
最初に作成したアカウントが管理者アカウントになります。
![Gitea_regist_account.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984671/26f50042-bcee-0888-c146-360a76021e0b.png)

### 自動起動の設定
PC起動時に自動的にGiteaサーバーが起動するように設定します。
設定ファイルは以下のパスにあります。
`C:\Gitea\custom\conf\app.ini`
`RUN_USER`の設定値を編集します。
```ini:app.ini
RUN_USER = <コンピュータ名>$
```
コンピュータ名が`USER-PC`の場合、`RUN_USER = USER-PC$` となります。

初期設定で「データベースのタイプ」を「SQLite3」にした場合は、データベースの`PATH`の項目に絶対パスを指定します(既に絶対パスになっている場合は変更なしでOK)。
```ini:app.ini
[database]
PATH = C:/Gitea/data/gitea.db
```

**管理者権限**でコマンドプロンプトを起動します。
以下のコマンドを実行し、GiteaをWindowsのサービスに登録します。
```bat:Giteaをサービスに登録するコマンド
sc.exe create gitea start= auto binPath= "\"C:\Gitea\gitea.exe\" web --config \"C:\Gitea\custom\conf\app.ini\""
```

サービスを起動します。(Windowsキー+Rで「ファイル名を指定して実行」→`services.msc`と入力し、Enter)
一覧の「gitea」を選択し、「サービスの開始」で起動できます。
※二重起動だとエラーになるので、コマンドプロンプトから `gitea.exe web` で起動した方は停止しておきます(Ctrl+Cや、ウィンドウを閉じれば終了します)。
「スタートアップの種類」が「自動」になっているので、PC起動時に自動で開始されます。
![Service_gitea.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984671/ef094593-cf05-6511-d9fd-540053836940.png)

なお、以下のコマンドでGiteaをサービスから削除できます。
```bat:Giteaをサービスから削除するコマンド
sc.exe delete gitea
```

## Giteaの基本的な使い方
### リポジトリ・組織・チームの作成
アカウント登録が完了し、サインインしたら右上の＋ボタンから新しいリポジトリを作成できます。
![Gitea_new_repository.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984671/c55e195e-a0fa-d593-46fd-3b600411b81d.png)

複数人で使う場合は「**新しい組織**」から組織を作成します。
![Gitea_new_team.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984671/f1852a6c-eb00-3fa6-7489-ac04961e5f1a.png)

作成した組織のページの「**新しいチーム**」から、チームを作成します。
![スクリーンショット 2024-04-29 120725-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984671/78f03863-0dd7-e27b-7950-7a0e4e3cebbd.png)

チームを作成したら、メンバーにアカウント登録をしてもらいます。アカウントをチームに追加することで適切な権限を与えます。

### 組織リポジトリの説明
個々のリポジトリは、作成者が所有者(Owner)です。組織リポジトリ(組織で作成したリポジトリ)の場合、所有者はこの組織のオーナーチームのメンバーです。チームには以下の3種類があります。1人のメンバーは複数のチームに参加することができます。

- オーナーチーム(Owner Team)
組織が作成されるとオーナーチームが作成され、作成者がオーナーチームの最初のメンバーになります。オーナーチームは削除することができず、少なくとも1人のメンバーがいます。

- 管理チーム(Admin Team)
管理チームのメンバーは、そのチームに追加されたリポジトリに対して何でもできます。新しいチームを作成できるのは、オーナーまたは管理チームのメンバーだけです。

- 一般チーム(General Team)
一般チームには以下の表の通り、細かく権限設定ができます。組織内のすべてのリポジトリにアクセスすることも、特定のリポジトリにアクセスすることもできます。リポジトリの作成権限を与えることもできます。
![スクリーンショット 2024-04-29 130238.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984671/65bd3299-8861-894b-6dc7-4eba11373957.png)

## おわりに
Giteaを使い、Windows上にGitHubライクなソース管理環境を構築する方法についてまとめました。より詳しい使い方は、以下の公式ドキュメント・フォーラムをご参考ください。

https://docs.gitea.com/

https://forum.gitea.com/

## 参考
[Gitea Official Website](https://about.gitea.com/)
[Documentation | Gitea Documentation](https://docs.gitea.com/)
[超軽量・高性能DevopsプラットフォームGitea #Git - Qiita](https://qiita.com/yp05327/items/baedf7cd1bcdccd56219)
[Gitのインストール方法(Windows版) #Git - Qiita](https://qiita.com/T-H9703EnAc/items/4fbe6593d42f9a844b1c)
[Giteaを使ってローカルでGitHubライクサーバーを作成する | saku note](https://sakuya712.github.io/post/gitea/)

[^RENAME]: ファイル名が長いため。また、Giteaは基本的にexeを差し替えるだけでバージョンを上げることができ、ファイル名にバージョンを入れない方がよいため。