🐧

Gitea や Forgejo を使うことについて:Linux 使い(略)Advent Calendar 2024

2024/12/13に公開

はじめに

これは「Linux 使いになりたい人のための Advent Calendar 2024」の記事です。

筆者は、Web エンジニアを志望する人には、セルフホスト Git サービスを稼働させて利用することをオススメしています。もし Git を使ったことがないなら、Git を学ぶときに、セルフホスト Git サービスを稼働させることも視野に含めながら学習するのが効率的だと考えています。

Gitea / Forgejo を使うことについて

前回はセルフホスト Git サービスの例として、高機能な GitLab を Docker で動かす方法について紹介しました。

GitLab は豊富な機能を提供する一方で、要求するコンピューターのスペックやリソースが高いので、個人でセルフホストで利用するハードルが少し高くなります。手軽にパソコン1台からでもセルフホスト Git サービスを始めようとする場合、筆者は次のものを推奨しています。

Gitea は Windows 対応版があるので、Windows ユーザーが本格的に使い始める場合には有力な候補となります。

Forgejo は Gitea をフォークして開発されているものです。詳しくは確認していませんが、開発方針の違いからコミュニティがわかれたようです。

GitBucket は日本で開発されているもので Java ベースのオープンソースソフトウェアです。Java 実行環境(Java VM)があれば使えるので、Java 開発者なら、Gitea や Forgejo よりもこちらを使ってみたいと思うでしょう。組み込みの SSH サーバー機能もあるため、別途 OpenSSH サーバーを用意する必要もありません。

ただし、Gitea や Forgejo と比較した場合は Java についての知識が追加で必要な分、Java 以外の開発初心者へ推奨しにくいと個人的に考えています。

実は、Gitea と Forgejo については、このアドベントカレンダーの最初の記事でも紹介したように、2024年に記事を公開していて、Docker を使った試用のための環境構築方法については紹介済みです。記事のリンクは次のとおりです。

ということで、今回は、Gitea と Forgejo について、最新版の確認をしつつ、補足説明をする記事にします。

Gitea と Forgejo のどちらを使うか

Docker を使うことで、Gitea と Forgejo の違いを手軽に確認することができます。ただし、開発初心者だと、細かい機能の差を確認するところまでは難しいでしょう。

こういったソフトウェアの選定をするときには、次のような評価軸を使うと良いと考えています。

  • 継続的に開発されているか
  • どの程度の人気があるか
  • 利用者数はどれくらいか
  • 利用しやすいライセンスか
  • 開発元の情報
  • 似たようなソフトウェアとの互換性
  • 似たようなソフトウェアとの機能差
  • サポートされているプラットフォーム
  • セキュリティアップデートへの対応

セルフホスト Git サービスを運用するにあたっては、最先端の便利な機能より、長く安定して使えるものを優先したいと思うはずです。前回、チーム開発をする場合は GitLab が最有力候補になると書きました。理由をきちんと説明していませんでしたが、上記の評価軸だと、GitLab、Gitea、Forgejo に点数をつけると GitLab が高得点になります。

継続的な開発については、個人よりコミュニティや企業の方が期待できます。コミュニティの場合は、実際の開発コミュニティで開発がどれくらい活発にされているかで期待が変わります。企業の場合は、ビジネス基盤が安定していた方が良いですし、実際にソフトウェア開発をする開発者が活発にコミュニティや開発にどれくらい参加しているかで期待が変わります。

オープンソースソフトウェアだと GitHub などのクラウドサービス上でプロジェクトをホスティングしていることが多く、開発状況について公開されていることが多いので、そういった情報を確認することで判断することになります。

なお、一般的に、オープンソースソフトウェアを開発して提供している企業は、基本機能を提供するソフトウェアは公開、ビジネス上必要とされる機能やサービスを有料とすることでビジネスを成立させていることが多いです。

Gitea はクラウドサービスも提供していて、そういったものを継続するための費用も含めて稼ぐ必要があるはずなので、実装したい機能について Forgejo コミュニティとは一致していないのでしょう。

ここで、方針の違いのわかりやすい例があります。

Gitea は Windows 対応のバイナリーをリリースしています。ビジネス上 Windows 対応した方が対象ユーザーは増えて有利になるので Gitea はサポートする動機があるのでしょう。

一方、Forgejo は Linux 向けバイナリーだけリリースしています。おそらく Windows 対応したい人はソースコードから自分でビルドすれば十分ということなのでしょう。このことから、Forgejo の開発チームはビジネス要件より実装の方に関心が高いように見えます。

こういった方針の違いを意識しつつ、自分はどちらのソフトウェアを優先的に使ってみたいと思うかで、どちらを選択するかが変わります。ただし、このあたりを意識して選択するというのは、開発初心者には難しいところでしょう。

利用者という視点だけで考えるなら、本質的にはソフトウェア開発が継続する方を応援するというのが最適解になるはずです。個人的にはオープンソースコミュニティに継続してもらいたい気持ちがあるので Forgejo を使うことを優先して、「なにかあったらレポートするといった手伝いができたらいいな」と思っていて、こういった機会に紹介をしています。

ということで、どちらもたまに更新されているか確認していますが、どちらも活発に開発されています。

直近だと、次のようになっていました。

ソフトウェア名 バージョン リリース日
Gitea 1.22.5 2024-12-12
Forgejo 9.0.3 2024-12-13

Gitea を選択した場合

ここでは、開発初心者が Windows 版がサポートされるという理由で Gitea を選択した場合に、その後どうなるのかを説明します。といっても、予知・予測をするといった話ではありません。関心事がどこにあるのかで、変わっていくはずです。

その後、個人で使うマシンは Windows しか選択せず、Gitea が Windows 版をリリースし続けるのなら、これが最適解だったということになります。ただし、Windows 版ならではのトラブルについては、がんばって対応することになります。

一方、個人で使うマシンについて、Windows 以外の macOS マシンや Ubuntu Desktop マシンなどへ移行したいとなったときに、Gitea も移行が必要になります。

もちろん、そのときは Gitea が動作する Windows マシンを引き続き使えるようにして、LAN 環境でセルフホスト Git サービス専用マシンとすることもできます。そして、その Windows マシンの OS サポートが切れたときや、ハードウェアが故障したときに、次はどうするか選択することになります。

ここで、Git サービス用ソフトウェアで Windows をサポートしている OS はあまり多くありません。どちらかというと Linux など Unix 系 OS が主流です。

一応、Docker で稼働させるということであれば OS がどれかということは気にしなくても良くなりますが、Docker 内で動作する Gitea は Linux 版が主流となるので、その場合は Windows 版を使うということにはなりません。

ということで、LAN 環境でセルフホスト Git サービス専用マシンを使う方針の場合で Linux を使うことに抵抗感が少ないなら、Windows にこだわる必要があまりありません。

最近の Web サービスの開発環境については、Docker を使わずに開発するという選択肢はなくなってきているという実感が筆者にはあります。これが意味することは、Windows マシンしか使えない開発初心者が Windows マシンを使っていたとしても WSL Ubuntu や Docker などで Linux 環境でソフトウェアを実行する必要が出てきて、それについてのスキルは上がっていくはずだということです。

そうなると、持っているスキルによって変わってきますが、Windows マシン上で Gitea を動作させるにしても Windows 版ではなく WSL Ubuntu で Linux 版を動かすか Docker で Linux 版を動かせば良いという気持ちになると考えています。

Docker で動かしておけば、macOS マシンや Linux マシンへ個人用メインマシンを移行することになっても Gitea を一緒に移行しやすくなります。

つまり、筆者は「一般のパソコンユーザーはそこまでするかわからないけど、ソフトウェア開発者なら最終的には Linux 版の Gitea でセルフホスト Git サービスを稼働させることになるのではないだろうか」という仮説を持っているのです。

こういう未来になるなら、「最初から Linux 版の Gitea を使うようにしておいた方が良いのではないだろうか」とも思うのですが、これが意外と大変です。筆者は、Linux が使えない開発初心者に最初から「Linux 版の Gitea を使おう!」と言ってもドン引きされるとしか思えません。

WSL Ubuntu や Docker が使えるレベルになった開発者は、話を聞いてくれそうです。ただ、ここでも問題が出てきます。WSL Ubuntu や Docker が単に使えるレベルだと、「セルフホスト Git サービスを稼働する環境の構築」についてハードルが少し高くなってしまうのです。

筆者の経験では、Windows ユーザーが WSL Ubuntu や Docker で「セルフホスト Git サービスを稼働する環境の構築」するにあたっては、ネットワーク設定周りやコンテナーによる仮想環境への理解度が必要となる点が鬼門となります。

このあたりについて理解を深めるには Linux の単体マシンを利用するが便利です。そして、こちらについても、筆者の経験からすると、「Web サービス開発者は、どこかで Linux マシンが必要となって用意することになる」ということがわかっています。

普通に考えて、本気で Web サービス開発をしている開発者が「Linux について理解度が浅いままで大丈夫」なんてことはありえませんよね。Linux について理解を深める必要があって、Linux について理解するようになると、「安くてもいいから Linux マシンを1台用意しておこう」となるものなのです。

もしくは、「デュアルブートで Linux マシンとして使えるようにする」となるのですが、デュアルブートだと Linux 使用中に使える Windows が使えなくなるので、メインマシンだと使い勝手が悪くなります。結局、別マシンで1台あった方が同時稼働ができて有効的に利用できます。

なお、筆者は、メインマシンは Linux ですが、所有するマシンのうち1台は Windows が使えるようにデュアルブート設定をしています。Windows 環境で動作確認がしたいことがあったり、Windows にしか対応していないソフトウェアを使いたいことがあったりするからです。

Linux の単体マシンを用意するときの選択肢

ネットワーク設定周りやコンテナーによる仮想環境への理解を深めるには、Linux の単体マシンがあると便利だという話が出てきました。個人的にオススメするのは、「普段は Windows マシンを使っていても学習時は Linux マシンを使う」という方法です。

Web サービスの開発をしているときに、いろいろなドキュメントを読むと、「Windows ではこうやって回避する」とか「Linux でも動作するようにコード上、こういった対応が必要」といったことがよく出てきます。そういう事に出会うと「Linux で動作させるプログラムを開発しているのだから Windows で動作させる考慮をすること自体が無駄ではないか」という気持ちになりませんか?

ということで、筆者は Windows 対応で苦労するときは、Forgejo 開発チームの気持ちが良くわかってきます。「Linux で動くからいいじゃない...」とどうしてもなりがちです。

さて、ここで、筆者は、Linux の単体マシンを手軽に用意するには次の選択肢が有力候補になると考えています。

  • ラズパイ
  • VirtualBox 仮想マシン

一番わかりやすいのはラズパイ(Raspberry Pi)です。1万円以内で仮想マシンではない実体のあるハードウェアである Linux マシンが手に入ります。性能は購入するモデルによって変わります。Pi5、Pi4 あたりであれば十分な性能がありますが、Pi Zero W/WH のような安いものにすると非力です。

いずれにせよ、学習用だと割り切るなら使えないことはありません。ただし、無線 LAN 機能がついているものにした方が使い勝手が良いです。

ネットワーク設定周りやコンテナーによる仮想環境について学習するときに、仮想マシンや WSL Ubuntu のようなものを使うと、実際のハードウェアとはどうしても差がある部分がでてきてしまい、初学者にとってはとまどうことが増えます。

実機であれば、学習用に参考にする Linux のネットワーク機能やコンテナーの機能を説明する資料と大きな差がでにくいので混乱しなくて済むはずです。

筆者はラズパイが理想的だと考えてはいますが、次のような理由がある場合は VirtualBox 仮想マシンでも良いと考えています。

  • 別のハードウェアを管理するのは面倒
  • Windows マシン1台だけでなんとかしたい

こちらの場合は、VirtualBox 仮想マシンが動作する Windows マシンが必要となります。1万円で増強できるならメモリをアップグレードして、こちらを選択という考えもあります。

VirtualBox 仮想マシンは、ハードウェアの仮想化をしている点が WSL Ubuntu や Docker などとは異なります。そのため、WSL Ubuntu や Docker よりもネットワーク設定周りやコンテナーによる仮想環境まわりを使うときに実機と近くなります。

VirtualBox はサポートされている OS も多いので、使えるようになっておくと、将来 Windows マシン以外を使うようになっても、そこへ仮想マシンを簡単に持っていくことができて便利です。

Forgejo を選択した場合

Gitea ではなく Forgejo を選択した場合は、Linux 環境で動作するソフトウェアを使うということになります。開発初心者で、こちらを選択するのは、ある程度 Linux を使えるようになった人か、将来必ず Linux を使えるようになりたいと考えていて、それを見据えて選択することになるでしょう。

筆者は、こちらを選ぶ人は、格安で良いので単体 Linux マシンを購入して、そこへ環境構築をして「セルフホスト Git サービス」を運用するのが良いと考えています。ですから、Forgejo を紹介する記事ではラズパイを使って環境構築する前提としてあります。

WSL Ubuntu や Docker で運用することもできるのですが、そちらで運用できるようになるには、まずは基本となる「単体 Linux マシンでサービス提供」というのを経験して実際にできるようになることが重要です。

これができるようになってから、仮想環境の WSL Ubuntu や Docker でのサービス提供と、単体 Linux マシンでのサービス提供とで、どういった点が運用上で変わるのかについて追加で学ぶのが効率的です。そうやって、ある程度の運用について目処がたってから、必要なら移行するのが良いでしょう。

こういうことをしたくなるのは、非力な単体 Linux マシンで運用するとメインマシンと別管理するのが少し大変と感じたり、1台の方が利用しやすいと感じた場合でしょう。もしくは「単体 Linux マシン」が故障して一時的にメインマシンで稼働させる必要が出た場合でしょうか。

いずれにせよ、単体 Linux マシンでセルフホスト Git サービスを提供していても、将来において、メインマシンへ Git サービスを統合したくなるタイミングはあるかもしれません。なお、これは「Windows 版から Linux 版へ移行する」といった話ではなく、「単体 Linux マシンで動かしていたサービスを仮想環境へ移行する」ということになります。

こういった場合に必要となるスキルは、マシン移行のために必要なスキルなので長期間の運用をするときには必須のものになります。いずれは身につけたいものでしょう。

おわりに

以上のことを考慮して、長期的な視点で考えると、Web サービス開発者の最適な行動は次の順にスキルアップしていくことになりそうです。

  1. Windows 版 Gitea でセルフホスト Git サービスを運用
  2. ラズパイを購入して Linux の知識を身につけつつ Gitea セルフホスト Git サービスを移行して運用
  3. Docker や WSL Ubuntu でのセルフホスト Git サービス運用術を習得

もしくは次になります。

  1. ラズパイを購入して Linux の知識を身につけつつ Forgejo か Gitea でセルフホスト Git サービスを運用
  2. Docker や WSL Ubuntu でのセルフホスト Git サービス運用術を習得

前者の方が「Docker や WSL Ubuntu でのセルフホスト Git サービス運用術を習得」まで、少し遠い感じがします。ただ、途中で Windows 版 Gitea を Linux 版 Gitea へ移行することが出てくるので、その分、経験が多く積めます。

後者の、最初からラズパイでセルフホスト Git サービスを運用する方は、Linux の知識を身につけるところがスタートとなるので「セルフホスト Git サービスを運用」というのができるようになるまで、少し時間がかかるはずです。

つまり、Windows ユーザーでセルフホスト Git サービスの必要性を強く感じていて、いますぐ使えるようにしたいなら、前者の方が良いでしょう。「セルフホスト Git サービス」そのものよりも、Web サービス運用のためのスキルアップや学習の方が主目的なら、後者の方が良いでしょう。

筆者は、Git のヘビーユーザーと自覚していて、自分が開発作業をするなら、最初にセルフホスト Git サービスを稼働させてから、次の作業をします。そのため、前者のアプローチの方が良いだろうと考えています。

しかし、Windows パソコンを使っている Web サービス開発初心者は、きっと「Web サービス運用のためのスキルアップや学習の方が主目的」となりやすい気がするので、後者のアプローチの方が選択しやすい気もします。

なお、スタートダッシュができるのは「とにかくやってみる派」だと聞くので、前者のアプローチを取る気がします。スロースターターの人は後者のアプローチを取る気がします。

あと、ラズパイを実際に購入して手に入れるまでの時間について、前者のアプローチだと待ち時間の間にも運用についてのスキルはアップするけど、後者のアプローチではラズパイをセットアップするまで進みません。だから、「Docker や WSL Ubuntu でのセルフホスト Git サービス運用術を習得」に到達するまでの時間については、結構大きな差になりそうですね。

実際のところは、どうなのでしょうね。やってみないことにはわかりません。いずれにせよ、筆者は「セルフホスト Git サービス」はスキルアップに有効だと信じているので、どちらでも良いので、すぐにやってみることを推奨します。

Discussion