※本記事は2016年4月13日に掲載した記事の翻訳を一部更新したものです。執筆時点の情報をベースにしており、最新ではない可能性があります。
プロジェクトのバージョン管理はとても役に立ちます。もしそれが個人のプロジェクトだとしても、何かの理由で新しいバージョンが壊れてしまったとき、いつでも古いバージョンに戻れるようにしておくことは重要です。
バージョン管理のためにバージョンごとにフォルダを作る方法もありますが、いまならずっといい方法があります。
その1つがGitです。Gitは個人で動かしているプロジェクト、チームで動いているプロジェクト、どちらにおいてもバージョン管理にとても有効です。このツールは単独のコンピューターで問題なく作動します。しかし、もし複数のコンピューター間でコードをシェアしたいなら、Gitサーバーが必要となります。それが今回のチュートリアルで紹介する内容です。
最初に何を構築し、なぜ必要なのかを説明します。それから、Raspberry Piでどのようにサーバーを構築するのか具体的な方法を説明し、最後にそのサーバーをどのように使うのかを紹介します。
Gitサーバーを作成する前に
Gitサーバーとは?
Gitは個人プロジェクトであれば単独のコンピューターでバージョン管理できます。問題は、自分のコードを他の人と、もしくは2台以上のコンピューターと共有したいときです。
その場合、修正版を送って、他のコンピューターからアクセスできる場所が必要です。その場所がサーバーです。
サーバーの機能は以下のようになります。
- 自分のコードを修正する
- サーバーに修正を送る
- 別のコンピューターから自分か自分以外の人が、サーバーから修正版をダウンロードできる
- 他のコンピューターから新しい変更が加えられる
- 変更はサーバーに送られ、他の人もダウンロードなどができる
Gitサーバーとは、Gitリポジトリを保存できる、ネットにつながったコンピューターのことです。どんなコンピューターでも使えますが、今回はRaspberry Piを使います。Raspberry Piは、かなり低コストながら、すばらしいパフォーマンスを発揮します。
自分のGitサーバーを構築する理由
Gitリポジトリを共有できるサービスはWeb上にいくつか存在しています。GitHubはもっとも人気のあるサービスの1つです。
このようなサービスは、大体が公開されています。しかし、コードを少人数の人々、もしくは所有している他のコンピューター間だけで共有したいだけで、コードを全体に公開したくないときもあるでしょう。
GitHubのようなサービスはプライベートリポジトリも提供しています。プライベートリポジトリを使えばコードを共有する人を限定できます。しかし、このサービスは無料ではありません。そのため、自分で専用のGitサーバーを作ることはよい方法です。
GitHubのコピーではない
しかし、注意点があります。これから紹介する方法は、Raspberry PiでGitHubを複製するわけではありません。作成するサーバーはGitの仕様すべてを網羅しますが、それ以上でも、以下でもないとてもシンプルなものです。そのため、プルリクエストやGUIなどはありません。
このサーバーはシンプルですが、本当に便利なものです。いま筆者のRaspberry PiにはGitサーバーが入っていて、デスクトップPCとノートPC間でコードを共有するときに使っています。私はGitHubをいくつかのプロジェクトで使用していますが、すべてのプロジェクトで使っているわけではありません。個人のプロジェクトや実験的なプロジェクトでは、まだコードを共有したくないので、この小さなサーバーを使うのです。そうすることでコードを全体公開することなく、どのコンピューターからでも作業ができます。
必要なもの
Raspberry Piにもいくつかバージョンがあります。すごく小さくて安い「Raspberry Pi Zero」や、最近発売された(編注:本記事のオリジナルは2016年4月に掲載された)パワフルな「Raspberry Pi 3」までいろいろです。Gitサーバーにはどれがよいのか、気になりますよね。
「Raspberry Pi Zero」は試したことがないので、容量が十分かどうかはっきりとは言えません(おそらく大丈夫だと思いますが)。でも、初代「Raspberry Pi」は十分な容量で、「Pi2」と「Pi3」も利用できます。おそらく初代Raspberry Piは安く買えると思うので、それを選ぶのがよいかもしれません。
とはいえ、Raspberry Piはマザーボードに過ぎません。どのバージョンを選ぶにしても保護ケース、電源(スマホのようにmicroUSB経由)、OSを保存するSDカード(選んだRaspberry Piのバージョンによって普通のSDかmicroSDか選ぶ)の準備、ネットにつなぐ方法も考える必要があります。Raspberry Piのバージョンによってイーサネットか、Wi-Fiに直接つなげられます(Pi3の場合)。
以上で必要なものはすべて揃いました。小さなコンピューターにGitサーバーをどうやって構築するのか、見ていきましょう!
Raspberry PiでGitサーバーを構築する方法
Gitをインストールしよう
最初にサーバーとして必要なのはGitです。以下のコマンドで実行すると、Raspberry Piにgitパッケージをインストールできます。
sudo apt-get install git
これが最低限のGitサーバー構築に必要なものですが、より正確で安全なサーバーにするためにもう少し機能を追加します。
専用ユーザーを作成する
Raspberry Piごとに専用ユーザーを作成するのはよい練習になるでしょう。そのユーザーが管理者となります。
いくつかのプログラムは自動でユーザーを追加します。例えばKodi(編注:オープンソースのメディアプレイヤー)は「kodi」というユーザーを自動で作成します。似たような例として、Webシステム開発でよく使われるLAMPをインストールすると、「www-data」というユーザーが作成されます。今回は、 「git」という名前のユーザーを作りましょう。以下のコマンドをRaspberry Piに入力します。
sudo adduser git
もし名前を変えたいなら、コマンド中の「git」を変更します。
ユーザー情報を見るためのパスワードを要求されます。パスワードを入力したら本名や電話番号などの情報が求められますが、gitは実在する人物ではないので、これらの質問はすべてスキップしても問題ありません。
サーバーにアクセスするためのSSHを使う
サーバーのために専用画面を準備してもまったく意味がありません。多くの場合、データをサーバ経由で交換するだけだからです。そのためには2つのコンピューター間で安全な通信ができるSSHを使うと良いでしょう。
SSHについて説明するのは今回の記事の目的ではないので省きますが、Raspberry Piの公式サイトに分かりやすい説明があるのでぜひこちらをチェックしてみてください。
サーバーの使い方
以上でサーバーの準備ができました。これからどのように使うかを具体的に説明します。新しいリポジトリを作成し、どのようにアップデートするか、からです。
テストリポジトリの名前をHello-Worldと名付けることにしましょう。
Raspberry Piに新しいリポジトリを作成する方法
最初に、Raspberry Piのリポジトリを初期化します。サーバー側から初期化すると、リポジトリは基本的に手元のコンピューター上の.gitがついたフォルダと同じことです。なので、初めに.gitがついたフォルダを作成します。
作成したgitユーザーを使って、Raspberry Pi上にリポジトリを作ります(SSH経由にしろ、そうでないにしろ、新しいリポジトリを作るにはこのユーザーを毎回必ず使うことになります)。フォルダはRaspberry PiのSDカードや外付けHDDなど、どこに作成してもOKです。以下のコマンドでgitのホームフォルダ内にフォルダを作成します。
mkdir /home/git/Hello-World.git
フォルダ名の最後が「.git」で終わることに注目してください。.gitは強制ではなくただのルールですが、サーバー側のリポジトリには.gitがつきます。GitHubも同様です。
新しく作ったディレクトリに移動します。
cd /home/git/Hello-World.git
最後に、新しく作ったリポジトリを以下のコマンドで初期化します。
git init --bare
--bareオプションは、Raspberry Pi上にベアリポジトリを作成する指定です。あらためて、--bareは強制ではありませんが、ベアリポジトリはワーキングディレクトリ(訳注:原文ではworking repo)がなく、データそのものは蓄積しません。サーバーとは抜群に相性がよいのです。ベアリポジトリのさらなる詳細はGitのサイトで確認してみてください。
リポジトリを自分のコンピューター上で初期化する
コンピューター上でプロジェクトの作業をしたり、新しいフォルダを作ったりしますが、最後にcdコマンドを使ってたどりついたディレクトリで、以下のコマンドを使ってリポジトリを初期化しましょう。
git init
ここで作成したのはベアリポジトリではなく普通のリポジトリ(訳注:ノンベアリポジトリ)です。このリポジトリは、コンピューター上でもファイルを閲覧できます。
リンクを作成する
作成した2つの空っぽのリポジトリが、お互い通信できるように、リモートを作成します。git initで初期化したリポジトリに以下のコマンドを入力します。
git remote add pi git@XXX.XXX.XXX.XXX:/home/git/Hello-World.git
このコマンドはpiという名前の新しいリモートを生成します(名前は自由に変更できます)。XXX.XXX.XXX.XXXがRaspberry PiのIPアドレスで、最終的に/home/git/Hello-World.gitがサーバー上のリポジトリを指します。これで準備完了です!
リポジトリを使う
リポジトリを使う準備ができたら、新しいファイルを作り、編集し、いくつかのファイルを削除します。最初のコミットをする準備ができたら、あとはいつも通りです。
git commit -m 'My first commit'
いくつかコミットしたら、変更点をサーバーに送ります。GitHubに慣れていたら知っているかもしれませんが、変更点をサーバー送るためには以下のコマンドを使います。
git push pi master
上記のコマンドで、piと名付けたリモートリポジトリにmasterブランチを送ります。piは前段階で作ったリモートの名前なので、もし名前を変更していたら、新しい名前にするのを忘れないように。
これで、サーバーへのアクセス権を持った他の人や他のコンピューターで変更をダウンロードしたり、共有したりできるようになりました。最新の変更点やコンピューター上のファイルをアップデートする場合は、以下のコマンドを入力します。
git pull pi master
リポジトリを複製する
新しいユーザーを追加したり、新しいコンピューターを追加したいときはどうすればいいのでしょうか? リポジトリはサーバーにありますが、他のコンピュータへ追加しなければなりません。そのような場合は、リポジトリを複製します。
リポジトリを複製するにはリポジトリがどこにあるか、別の言い方をするならそのアドレスを知らなければいけません。自分のサーバーなので知っているはずですし、上で使ったコマンドと同じです。
git clone git@XXX.XXX.XXX.XXX:/home/git/Hello-World.git
リポジトリを複製するとリモートもoriginという名前で自動的に作成されます。したがって、リモートは複製を作る必要はありません。
最後に
Gitサーバーはとてもシンプルなものですが、小さなプロジェクトや個人のプロジェクトならば十分に機能します。もっと機能が必要であればプライベートのGitHubなど他のツールの利用を検討した方がよいでしょう。