【sshec2】Github によるソースコード管理

前回のエントリで私が開発した OSS ツールの sshec2 をご紹介しました。

sfujimoto.hatenablog.com

今回から何回かに分けて、OSS ツールを開発する上で考慮した点を備忘録で記載していきます。

まずはソースコード管理。ソースコード管理(ソースコードリポジトリ)には Github を利用しました。

ソースコード管理

一人で開発する、誰とも共有する必要がない、一回作って終わりなプログラムであれば、ソースコード管理は必要ないでしょう。ただし逆に複数人で開発する必要がある、誰かと共有したい、継続的にプログラムを運用したい、といった用途のプログラムはソースコードリポジトリを利用すると非常に便利です。

  • 複数人で開発する
    例えば、一つのプログラムファイルを複数人で同時並行に修正していて、それをファイルサーバーで管理していた場合、何が起きるでしょうか?1人目が修正を終えてファイルサーバーに上書きアップロードしました。2人目も修正を終えてファイルサーバーに上書きアップロードしました。1人目の修正が上書きされています。もちろん、こういう環境では気をつけて、アップロードする前に Diff なりして、差分を確認することが一般的でしょうが、差分を忘れない保証はありません。

  • 誰かと共有したい
    今回は OSS ツールを開発しました。どうせなら多くの人に使っていただき、フィードバックを受け、より良いものにしたいと思っています。一般公開可能なソースコードリポジトリを利用することでプログラムを公開し、色んな人に見ていただくことが可能です。場合によってはより良いものに修正したプログラムを提案いただけるかもしれません。

  • 継続的にプログラムを運用したい
    プログラムを継続的に運用するのは簡単ではありません。バグが見つかれば改修する必要があります。新しい機能を追加したければ新しい機能を実装する必要があります。

ソースコード管理手法

ソースコード管理で良く話に上がるのは Git です。他にも SubversionMercurial という手法もありましたが、今は Git がデファクトスタンダードで利用できる人が多いと思うので特に比較せずに Git によるソースコード管理を選択しました。Git を利用することで上記を解決することができます。

  • 複数人で開発
    Git を利用すると、自身の更新内容を自身で自動で管理してくれます。それにより、ソースコードリポジトリにアップロードする時に自身の更新内容と、他の人が更新していないか、更新があった場合は内容を自動で比較し、バッティングしていること、どうバッティングしているのかを表示します。

  • 誰かと共有したい
    Git リポジトリSaaS があり、それらで公開することができます。

  • 継続的にプログラムを運用したい
    プログラムを運用する上で多くのツール、SaaS と連携することで圧倒的に楽にすることができます。Git リポジトリは多くの選択肢があり、ツールとの連携、他サービスとの連携も選択するポイントの一つとなります。

Git リポジトリのセキュリティレベル

次に Git を利用する上で Git のリポジトリのセキュリティレベルをどうするかです。Git リポジトリを利用する方法は多く存在します。Git リポジトリの比較の前に管理するプログラム・ソースコードのセキュリティレベルを考える必要があります。大きく分けて、3段階あるかと思います。アクセス制御のレベルが低い順に 3つ書きます。あくまでアクセス制御の話で Git リポジトリを運営する会社がどうのこうの言うつもりはありません。また閲覧権限と変更権限は別の問題ですので今回のスコープにはしません。命名はオレオレで分かりやすい名前を付けただけですのであしからず。

パブリックリポジトリ

ソースコードは誰でも閲覧できます。

プライベートリポジトリ

ソースコードは登録したユーザーだけが閲覧できます。

プライベートサーバー

決まったユーザーだけサーバにアクセスでき、閲覧できます。

パブリックリポジトリと、プライベートリポジトリ/サーバーの違いは分かりやすいかと思います。認証が必要化かどうかです。
次にプライベートリポジトリとプライベートサーバーの違いを簡単に説明します。どちらも認証されたユーザーのみがアクセスできます。プライベートリポジトリは認証情報(例えば、ユーザー名とパスワード)のみで閲覧可否を判断します。一方、プライベートサーバーは認証情報に加えて、ネットワークの疎通性が追加されます。例えば社内ネットワークからのみアクセスできる、VPN を通してのみアクセスできるなど。大きな違いは認証情報が漏れた時の影響です。プライベートリポジトリは認証情報が漏れた時に悪用されます。しかし、プライベートサーバーは認証情報が漏れてもそもそもリポジトリを持つサーバーにアクセスできないので影響はありません。

今回は OSS ツールとしてプログラムを公開したかったのでパブリックリポジトリを選択しました。

パブリックリポジトリ

パブリックリポジトリもいくつか選択肢があります。

有名どころは下記の 2つです。

決めては今後のブログエントリの話に影響するのですが、Github の優れたインテグレーションです。sshec2 の開発には多くの SaaS を利用しています。それらは全てソースコードリポジトリと連携することで自動でサービスの処理が動作します。その上で多くの SaaSGithub と連携しているということで Github を選択しました。

Github を使う

それでは簡単に Github の利用方法をご紹介します。

github.com

ユーザー登録

トップページにある入力欄(ユーザー名、メールアドレス、パスワード)を入力するだけでユーザー登録できます。Github は色々なサービスと連携するのでログインはユーザー名、パスワードだけでなく、多要素認証(ワンタイムパスワード)を追加することを推奨します。

リポジトリ作成

New Repository からリポジトリ名を入力するだけでリポジトリを作成できます。リポジトリを作成すると、初期コミットまでに必要なコマンドが表示されるのでそのまま実行するだけでリポジトリにプログラムを配置することができます。

ソースコードの修正

一人でソースコードを修正する場合、一つのブランチで運用すればよいです。が、複数人が修正する場合、各自が好き勝手にソースコードをコミットすると、どこかで不整合が発生します。しかもそれは多々あります。そこで別のブランチを切って、修正が完了したタイミングで本番ブランチにマージするといった運用がよくあるパターンです。Github ではプルリクエストという機能があり、プルリクエストを利用することで掲示板のやり取りのようにマージ前に修正内容をレビューすることができます。

まとめ

簡単にですが、ソースコードリポジトリについて調べたことを簡単にまとめました。