C++」向けを開催させていただくこととなりました。1.6」が大変に面白く、ゲームの開発でももっと広く実践してほしいという気持ちがあったからです。モデルの部分には十分に適応でき、行っていれば出ないバグもあったなぁと、感じます。いうことで、今回の勉強会でも、それ以外でも、一度はTDDを体験していただいて、確実性を増す開発スタイルについて考えてみるきっかけとなればと思います。Tokyo」という勉強会にも参加しました。この勉強会は、分散バージョン管理システムの概念・思想・パターンを勉強する会で、私はGitについてまながせていただきました。バージョン管理システムは、多くの現場で使われていると思いますが、その中でも分散バージョン管理システムは容易にブランチを作成することができ、細かい単位でソフトウェアを作り上げるのに適しています。これはTDDに合っていると思いますし、分散バージョン管理システムを使うことで、よりアジャイルな開発が実現できるものと考えています。C++では、Gitで進行を管理することにチャレンジしようと考えました。GitHubから普通にダウンロードして作業できる設計にしました。■GitとはGitはリーナス・トーバルズによって開発された分散型バージョン管理システムです。Linuxのカーネルを始め、多くのプロジェクトで使われています。プロジェクトホスティングサービスで、railsの管理などで使われています。オープンなプロジェクトなら無料で300MBのディスクスペースをもらうことができます。■GitのインストールGitHubを使うには、ローカルにGitの環境を用意する必要があります。Windowsの場合は、msysgitというオールインワンのパッケージがありますので、これをインストールするのが楽でしょう。ダウンロードページに行きます。ダウンロードページから最新のインストーラーをダウンロードして実行します。インストーラーを起動すると、いつものいろいろな「次へ」ボタンを押す項目の後に、コンポーネントの選択画面になります。この項目は対して重要ではないので、問題がなければディフォルトのままで、クリーンな環境が良ければなるべく外してインストールしましょう。その後にコマンドプロンプトなどでもGitを使うかという質問が来ますが、一番上にするのがシンプルでしょう。その後、改行コードをどうするか聞いてきます。GitHubでは、改行コードにLFを使うので、一番上を指定しておくのが面倒が少ないのではないでしょうか。以上がインストール時の気になるポイントかと思います。Bashを立ち上げれば次のようなウィンドウが開くと思います。Gitの管理で使われる名前とメールアドレスを下記のように設定してください。"メールアドレス"お疲れ様でした。バージョン管理にチャレンジするにはアカウントを取得しましょう。Signup」のボタンからアカウント作成に入ります。account」ボタンを押します。すると、「ユーザー名」、「Emailアドレス」、「パスワード」、「パスワードの確認」の入力をします。「ユーザー名」、「Emailアドレス」は、すでに使われていたら、駄目と言われます。パスワードは、1文字以上は小文字と数字を含んだ、7文字以上のものを用意して下さい。outタブからGitHubに出入りできます。Bashから打ち込んでおきましょう。Imagireにユーザー名を連絡いただけたらと思います。今回のプロジェクトの共同開発者に登録させていただきます。BashからGitHubに安全にアクセスするには、SSHを使ってアクセスします。GitHubでは公開鍵暗号のRSA暗号を使ってSSHでアクセスするようになっています。Bashから「ssh-keygen」と入力して作成することができます。この時、ファイルの保存場所を聞かれた後に、パスフレーズ(パスワード)を聞かれます。ファイルの保存場所は自分のユーザーディレクトリ以下の「.ssh」というフォルダがディフォルトの場所になります。何もなければそのままでよいでしょう。パスフレーズは、SSHでアクセスする使うときに聞かれるパスワードで、GitHubのパスワードと違っていて大丈夫です。ssh-keygenがちゃんと終わると、.sshフォルダに秘密鍵「id_rsa」と公開鍵「id_rsa.pub」が作られます。秘密鍵「id_rsa」は、誰にも中身を見られないように厳重にファイルを管理してください。この公開鍵の情報をGitHubに登録します。Keys」を選択してください。key」で、公開鍵を登録します。この登録には、.sshフォルダのid_rsa.pubをテキストエディタやメモ帳で開きます。id_rsa.pubの中身を登録画面の「Key」の項目にコピペします。「Title」の項目には、作業しているPCを識別する名前を入力します。key」で鍵を登録してください。登録されたら、追加した名前の項目が表示されていると思います。この鍵が登録された状態になると、SSHを使ってプロジェクトにアクセスできるようになります。■自動パスフレーズの設定この後、Githubに頻繁にアクセスするようになるのですが、この際にファイルの変更などのアクセスでパスフレーズが求められます。いちいちパスフレーズを入力するのは面倒なので、自動でパスフレーズを入力する設定をしましょう。ホームディレクトリ(c:\Users\「ユーザー名」)に、「_netrc」というファイルを作成します。「_netrc」の内容は、次のようにして下さい(パスフレーズが平文で書かれるので、他の人に見られないように注意してください)。SSHのパスフレーズお疲れ様でした。■プロジェクトの初期化それでは、いよいよソースコードを取り寄せましょう。Documents"など)に移ります。プロジェクト名のフォルダはのちほど掘られるので、ここではその上位となるフォルダに移動してください。clone」命令を使って、ファイルを引っ張ってきます。複雑ですが、下の図のコマンドのように入力してください。GitHubでプロジェクトを持ってくるときは、持ってくるプロジェクトの「Source」ページにリポジトリのアドレスが書かれています。先ほど「_netrc」でパスフレーズを登録したために、アドレスに書かれている自分のユーザー名は省略してcloneすることができます。ちなみに、cloneに失敗する場合は、共同開発者に登録されていないので、TDDBCではスタッフにお声掛けください。成功すれば、プロジェクトフォルダが作成され、その中にVCのソリューションやソースコードが格納されます。ここで、ディレクトリ名の後に、「(master)」と書かれているのが見えるかと思います。Bashで見ると現在作業をしているブランチの名前を見ることができます。C++」だけの話題です。clone」で持ってきたファイルは、今からのTDDの雛型となります。このプロジェクトを自分で書き換えて課題をクリアーしていくことになります。したがって、その結果は各チームごとに異なります。チーム専用のブランチを切りましょう。branch」コマンドを作成します。master***」で、自分達のブランチを元のmasterブランチから分岐して作成してください。(「master***」は「master」の後に自分達のチーム名を被らないように入れてください。"チームのマスター名"」で、ブランチを切り替えます。ディレクトリ名の後のブランチ名を確認してください。"チームのマスター名"」と入力してください。これで、作成したブランチがGitHubの方に登録されます。これで、この後の作業を、今後、いつでも見ることができるようになります。ちなみに、「origin」は、GitHub上のリポジトリ(Gitで管理されているプロジェクト)を指します。うまくいった場合には、GitHubのプロジェクトに新しいブランチが作成されたことが表示されます。https://github.com/imagire/TDD-Boot-Camp-Tokyo-for-CPP/network■作業のブランチの作成Gitで作業するときの作業パターンの1つをここで紹介させていただきます。Gitを使って作業するときには、masterのリポジトリ(チームのマスターでも)では、作業をしません。それをmasterでマージした後に大本のoriginを更新します。このmasterでmergeする直前には、originから最新の状態を取りこんでからdevelopmentの更新をするようにします。(mergeでコンフリクトが起きればdevelopmentに戻って、コンフリクトが起きないように修正できます)。mergeした後は、developmentに移って、development側でもmergeして、originの結果を取りこんでからdevelopmentの作業を続けます。実際にこれを行うには、先ほどと同じようにして、「development」ブランチを作成します。その後、チェックアウトして、「development」ブランチに移行した後、作業開始です。今後、いろいろと調べていっていただければと思います。■実装プロセスさて、ここでプログラミングです。(下の青く選択された部分が、今、追記した部分です)。これではビルドが通らないので、引き算関数を作成しましょう。中身は、まずはビルドが通るでたらめを書きます。プログラムを実行します。うまくいけば、テストが赤く失敗するので、実装の中身を書く準備が整ったことになります。sub関数の中身も追加して、切りが良いところまで実装したら(TDDなら、[テスト作成]-[コード実装]-[リファクタリング]のループが終わったところがよいでしょう)、更新をGitに格納します。具体的には、Gitで「add」コマンドを使用して更新ファイルを伝えて、「commit」コマンドで更新内容を記録します。このタイミングでは、更新情報はdevelopmentブランチのみに格納され、masterやoriginには記録されません。「add」コマンドを使うときには、下記にあるように、ファイル名として「.」を指定して、更新した全てのファイルをGitに伝えることが多く行われます。今回の場合には、自動更新されるファイルもいろいろとあるので、あえてファイル名を指定しました。.■GitHubを更新するさて、何度かのコミットをへて、作業が一通り終了したら(ストーリーが一つ完了したら)、GitHubにあげましょう。以下のようなコマンドを入力して、GitHubに更新を反映させます。最初に、「checkout」コマンドで、作業場所をマスターに移します。master名マスターに移ったところで、「pull」コマンドでGitHubの最新のソースを持ってきます。次に、「merge」コマンドで、作りこんだ修正をGitHubのコードと統合します。ここで、エラーが起きたら、developmentに移ってうまくmergeできるように修正しましょう。うまく統合できたら、「push」コマンドでGitHubのリポジトリを更新します。pushその後は、再びdevelopmentブランチに戻って、マスターの内容を取りこんでから作業を進めましょう。以上のサイクルが終了すると、GitHubのサイトでは、作業が更新したことが見て取れます。■最後に以上で、かなりはしょったものになりますが、Gitでの一連の作業の流れを説明させていただきました。Gitには、まだまだ多くの機能があります。使いこなしてもらえれば嬉しいです。もどるimagire@gmail.com。