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