Twitterでフォロワーをたどって、プログラミングをしている中高生のブログやサイトを見ると、ふと重大な疑問が浮かびます。
特に、Twitterでリンクされているのが、無駄にFlashやSilverlightで洗練されたサイトではあるものの、情報を公開するだけ。
つまり、プロジェクトが存在しているということを知らすだけのサイトで、実際に活動しているのかは謎・・・
もちろん、その中にはしっかりと活動しているグループもあるのでしょうが、せっかくの洗練されたページも効果が伴わなければ、ただの飾りに過ぎません。(もっとも、サイトをデザインするプロジェクトなら別ですが)
特に、1人で作業せず、複数名でプログラムするというグループなのに、VCS(Version Control System:バージョン管理システム)を使わないで、どのように皆で作業しているのかと疑問に思います。
相当クローズドソースでやりたいなら別ですが、一般的なプログラミンググループであれば、ソースを公開したとき損の伴わないならば、ほぼ確実にプロジェクトのVCSのリンクがサイトのトップにあって、現在の開発状況がわかるものです。採用していないプロジェクトチームは、ただのにわかプロジェクトチームです。
進展しないプロジェクトは、チームのやる気を奪い、周りからの関心をなくします。(コレに関しては今までの私たちのチームですが・・・)
現在、僕のプロジェクトではSubversion(通称:SVN)というVCSを使用していて、GitというVCSに移行しようとしている最中なのです。
さて、今日の記事から、数回の記事にわたって、(いつもいつも頓挫しているけど)、プロジェクトを立ち上げる上で、管理できるソフトなどの紹介をしていきたいと思います。
1,そもそも、VCSってどんなものなのか?
さっきから、VCS,VCSって言っているが、そもそもVCSって何なのかという話をします。
VCSとは、簡単に言えば、インターネット上のフォルダ(このフォルダをレポジトリって言うんだよ!)をみんなで編集できるようにするシステムです。
(問題)プロジェクトを主催して、このプロジェクトにはプログラマーが3名います。
さて、skypeで連絡を取っていますが、みんなで1つのものを作りたい。あなたはどうするでしょうか?
この解決手段で、おそらく一番いいと思うのがVCSの導入です。
skypeで毎回ファイルを送りあう。これは不便ですね。
同じファイルを編集した場合、どちらのをとるか考えるでしょうし、あわせてビルドできるかっていうのも、怖いですね。
(問題2)さて、あなたのプロジェクトにはデザイナーが2名います。
skypeでプログラマーを混ぜた会議をしていますが、当然プログラム用語はわからないので、進んでいるのかわかりません。これでは、デザイナーのやる気が落ちます。どうすべきでしょうか?
進展度合いを、共有する。
これは、メンバーのそれぞれのやる気の維持に非常に重要ですが、チャットでの交流では限界があります。やはり、成果を見てこそ、納得できるのです。
そして、やはり、これも解決できるのがVCSです。なお、おそらくあとの記事になると思われますが、この問題は、CI(継続的インテグレーション)の導入によってより改善されます。
今回は、このVCSについてみていきます。
さて、VCSは、先ほど「ネットワーク上にフォルダを作り、みんなで編集しあうシステムだ」という説明をしました。
細かく見ていくと、以下のようになります。
●プログラムのソースファイルなどをメンバーと共有する。
●プログラムのソースファイルの書き込む権限、削除権限、閲覧権限など細かく指定できる。
●同じファイルが競合した場合、上書きしないで、マージをすることができる(一般的にマージはVCSではなくマージソフトが行いますが、競合を見つけるのはVCSであり、だいたいのVCSにはマージソフトがついています。)
●複数のバージョンを保持できる。(バグがあったら前のバージョンに戻せる!)
●誰が編集したかがわかる(だれが編集してバグになったのかがわかる)
●誰がどのくらいファイルを編集しているかがわかる。(自分の仕事率、周りの仕事率を把握することで、その意欲が向上する。)
つまりは「みんなで効率よく作業ができて、編集した履歴の残るワークスペースなんだね!」
2,VCSにはどんな種類があるの?
※用語を抑えよう(Gitだと用語が結構異なるようですが、SVN用の用語でだいたい統一して書きます。詳しいことは調べてね。)
・作業コピー ・・・・VCSには、編集用のファイルがあるけど、それはそのままは編集しないよ。ローカルに、ダウンロードして編集するんだ。
・コミット ・・・・VCSのサーバー側に、自分の作業コピーに加えた編集をあげることだよ。要するに、アップロードだね。
・更新 ・・・・VCSのサーバー上にあるレポジトリから作業コピーを持ってくることだよ。他の人が編集した内容を踏まえたうえで編集ができるね!
・マージ ・・・もし、他の人がファイルを編集して競合(コンフリクトって言うよ!)してしまったら(例えば、A君はあるファイルに[value=10]って書いたけど、B君はそのファイルに[value=20]って書いたら、VCSはどっちが正しいかわからなくなってしまうよね。)マージをするんだ。
つまり、正しいと思うほうを選択するって言う作業。マージソフトが一部は自動でやってくれるよ。
主に、VCSを大別すると2つの種類があります。
集中管理型VCS
昔から使われてきたVCSだといえます。自分でサーバーを立てなくても、「
Google Code」や「
Source Forge」など、さまざまなサービスを借りることで利用できます。(もちろん、自分で立てたほうがいいです。)
だんだんと、分散管理型のほうが人気が出ている気がしますし、便利ですが、集中管理型もまだまだ現役ですし、いいところもあります。
特徴は、サーバーにひとつだけ
レポジトリがあることです。
●メリット
・1つしかレポジトリが無いから、今編集しているバージョンがわかりやすい!
・サーバーを立てる場合、管理が楽(個人的な解釈)
・分散管理型と比べて、どこのレポジトリにあげたらいいのかわかりやすい。
●デメリット
・サーバーにしかレポジトリが無いから、編集中のファイルを前のバージョンに戻すっていうのは、ムリ。
・分散型と比べ更新頻度を高くなるので、更新に相対的に時間がかかりやすい。
集中管理型VCSの例
・
Subversion(フリー)
・CVS(フリー,古いかな)
・
Team Foundation Server(高いよぉ・・・)
分散管理型VCS
最近人気!集中管理型より、サーバーのセットアップが面倒な感じがする。「
GitHub」など、一部(結構あるかもしれないけど・・)のサービスを借りて利用可能。(やっぱり自分で立てるのがオススメ)
特徴は、レポジトリがローカルにもあること。つまり、編集していってまずはローカルにコミットして、ある程度まとまったらサーバーにコミットするわけです。
つまり、
サーバー(1)+ユーザーの数だけレポジトリがあるってことなんだ。
●メリット
・ローカルでバグが出ても、バージョンが戻せる(これすごい便利!)
・なんか最近人気でコミュニティが盛んだからいろんな資料がある。
・集中管理型と比べて、取得とかが早い気がする。
●デメリット
・レポジトリがたくさんできてしまうので、どこにコミットすればいいのかわからなくなりやすい。
・サーバー立てるのが難しく感じた。
分散管理型VCSの例
・
Git(フリー、日本語文字化けする。対策あり。フリー)
・
Mercurial(日本語系が文字化けするかも?フリー)
・
Bazzer(日本語OKっぽい、フリー。新しいのかあまり見かけない?)
少し古いけど、SVNと分散管理型VCSの比較→
here!
んで、結局どれがいいの?
結論
「僕にもわからない。集中型VCSでも、分散型VCSでもそれぞれに利点があるよ。やっぱり使用者の多そうな、SVNかGitが有力。」
3,早速VCSサーバーを立ててみよう
3-1,プロジェクトホスティングサービスを利用する
自宅でサーバー立てるのは面倒だ。多少制限されたり、遅かったりしても問題ないやって方。プロジェクトホスティングサービスを利用すれば楽にVCSが利用できます。
有力なサービスはこんな感じ
●Subversion
・
Google Code(僕たちのグループが今使っているものだよ。ただし、近いうちに閉鎖して、サーバー立ててGitにするんだ。一部は日本語になるが、ほとんど英語)
・
Source Forge(前にやったことあるんだけど、SVNの設定がうまくいかなくてコミットできなかったって今年か覚えていない・・・。そして登録から作成まで少し時間がかかる。日本語ページ)
●Git
・
GitHub(Gitだったらコレが有力。英語)
大体は、登録するだけですぐサーバーはたつよ。(Source Forge以外)
自宅サーバーだといろいろいじれるんだけど、ソレが無い分早いね。5分で作れちゃう。
3-2、いやいや、サーバー立てることにはロマンがある。って人。自宅サーバーで簡易的にVCSサーバーを立てる。
3-2-a,SVN編
やっぱり、自分で立てるからこそ意味がある!って人用。
サーバーを立てるのには結構知識が必要かもよ。でも、絶対に意義があること。
使用するOSとか・・・Windows系
Linuxの方がこういうのは得意なんだろうからいろいろできるんだろうけど、僕は良くわからないので、WIndowsでやるよ。
①、必要なものをダウンロードしよう。
・
Visual SVN Server(右上のDownLoadから、管理がしやすいパッケージなので、Windowsの場合はコレが便利)
②、IP固定をしよう。
グローバルIPアドレスから、パソコンには接続ができるが、ルーターが間に入っていると、パソコンにはローカルIPアドレスが割り当てられ、グローバルIPアドレスではアクセスできないんだ。
さて、これからポートマッピングといって特定のポート(データの玄関のようなもの)へのアクセスは特定のパソコンに橋渡ししてねっていう設定をしないといけないんだ。
だけど、普通はこのローカルアドレス、毎回変わっちゃうんだ。だから、最初に、このパソコンにはこのアドレスを支給してね。ってやっておく必要があるんだよ。
ココを参考にやってね。
③、①でダウンロードしたソフトをインストールしよう。
ポート番号が聞かれるので、適当に入力して覚えておく。他にサーバーを動かしていない限り初期設定のままでよい。
④、ポートマッピングをする。
③で入力したポートに対してポートマッピングをしよう。
ココを参考にしてね。(中段)
⑤、設定をしよう
スタートメニューなどにVisual SVN Serverって項目があるのでソレをクリックしてサーバー管理ソフトを起動しよう。
⑤-1 レポジトリを作成するぞ!
サーバーの準備はできた、ではレポジトリを作成しよう。
左のツリーからSVNを選んで右クリックしてCreateを選ぶぞ。
好きなレポジトリ名を入力しよう。(だいたいはプロジェクト名)
⑤-2 ユーザーを設定するぞ!
アクセスしてほしいユーザーしてほしく無いユーザーがいるだろう。
そこで、Userのところから、Add Userを選んで、ユーザーを作成だ。
IDとパスワードを設定しよう。
⑤-3 グループで役職ごとに管理だ!
グループからAddGroupを選べば、役職に分けられるぞ、役職に分ければ、グループ単位で権限が与えられるから管理がらくだ。
つまり、プログラマーは書き込めるし、読めるけど、デザイナーは読めるけど書き込めないなんて設定もできる。
⑤-4 権限を設定しよう
造ったレポジトリのフォルダを右クリックしてPropertiesから、ユーザーの権限が編集できるぞ。
デフォルトでは、All Userに Write/Readの権限が与えられているので、Readに変更しよう。
Addから、グループもしくはユーザーを選択して好きな権限を与えよう。これで、設定は完了だ。
⑥確かめてみる
ブラウザのアドレス欄に「http://localhost:指定したポート番号/svn/指定したレポジトリの名前」(httpsという設定にしたのなら、https://~~になる)とすると、アクセスできるぞ。作ったユーザーでログインしよう。
そして、やったね!サーバー立てられたよ!だいたい30分ぐらいかかるかな?
3-2-b,Git編
Git編はプロジェクトのVCS移してからその経験を基に書くのでお待ちを
4,実際に使ってみる。
実際に使う時は、クライアントソフトを利用することが多いだろう。コマンドラインからの利用では耐えられないからだ。
幸いにもSVNにはすごく使いやすいクライアントソフト(Tourtoise SVNがあるので、ソレを使うと良い。)
Gitにも
Tourtoise Gitがあったと思うが、日本語で使用するには、調整が必要なようだ。
・Tourtoise SVN
・Tourtoise Git
クライアントの使用方法については、以下のサイトを参考にすると良い。
ココ(少し古い)
いかがだっただろうか。確かにサーバーが必要ではあるが、その効果は絶大だ。
少なくとも、決まったファイルのやり取りのシステムを持っていないチームであるならば採用すべき管理方法では無いだろうか。
次回は、ITS(Issure Tracking System:課題管理システム)の解説をしよう。
[1回]