39
Version: [###] Classification: Internal Owner: [Insert name] 22/01/2014 1 XPages開発における Git/GitHubの利用 九州地区ノーツパートナー会技術部会 2014114リコーITソリューションズ株式会社 海老原 賢次([email protected])

XPages開発におけるGit/GitHubの利用

Embed Size (px)

DESCRIPTION

 

Citation preview

Version: [###] Classification: Internal Owner: [Insert name] 22/01/2014 1

XPages開発におけるGit/GitHubの利用

九州地区ノーツパートナー会技術部会

2014年1月14日

リコーITソリューションズ株式会社 海老原 賢次([email protected])

今日話すこと

バージョン管理とは

Git/GitHubとは

TortoiseGitのインストール

TortoiseGit を使ったDomino DesignerとGitの連携

Issuesについて

Version: [###] Classification: Internal Owner: [Insert name] 22/01/2014 2

Version: [###] Classification: Internal Owner: [Insert name] 22/01/2014 3

バージョン管理システム

バージョン管理システムを使う理由- 参考:@IT-「知らないと現場で困るバージョン管理システムの基礎知識 」

http://goo.gl/pXapC

- アジリティを高める

• 開発中にソフトウェアにバグを埋め込んでしまっても、問題の発生する以前の状態へ簡単に戻せます。

- 素早い開発が可能に

• 過去にさかのぼって変更の差分を確認することで原因を分析したり、別に同じ環境を作って同じ問題が再現するかどうか調査できます。

- 余計な情報でコードが肥大しない

• 変更前の内容をコメントアウトしてコード中に残すようなことをする必要はありません。

何をバージョン管理するのか

ソフトウェアのソースコード

ビルドスクリプト

データベースのスキーマ定義、マイグレーションの SQL、初期データ

環境構築用の設定ファイル・スクリプト

Xpagesでは、オンディスク・プロジェクトの内容をすべてソースコード管理に含めます。

Version: [###] Classification: Internal Owner: [Insert name] 22/01/2014 4

GitとGitHub

Git- バージョン管理システムの1つ。

- 同類の他製品には、Subversion、CVS等があります。

- Gitはオープンソースで社内やローカル環境など、どこでも構築ができます。

GitHub- Gitをバージョン管理とした、SaaSによるSNS機能を持ったソフトウェア開発プロジェクト共有クラウド環境。

- バージョン管理以外にもIssueやメンバ管理などの機能を合わせ持ちます。

- ソースコードは提供されていないため、同じ環境をオリジナルで建てることはできません。

- 同じような環境を自前で作りたい場合は、Gitと合わせてRedmineやALMinium などオープンソースの製品を使用します。

Version: [###] Classification: Internal Owner: [Insert name] 22/01/2014 5

Domino Designerでの利用

ここでの前提- Domino Designer 9.0 を対象としています。

- R8.5.2以降であれば、「Source Control Enablement」プラグイン(http://goo.gl/QzRtbi)を導入することで、可能です。

Version: [###] Classification: Internal Owner: [Insert name] 22/01/2014 6

Domino DesignerとSCMとの連携

Version: [###] Classification: Internal Owner: [Insert name] 22/01/2014 7

1つのDBに対して複数の開発者が作業するのではなく、開発者毎にDBを作成する。

DBとオンディスクプロジェクト間は自動的に同期される

オンディスクプロジェクト

SCM(git,SVN等)

Gitクライアントの用意

Gitクライアントにはいくつか種類があります。Domino Designer用のアドインは、OpenNTFにありしたが、R9では使用できないそうですし、もう使っちゃダメなようです。

Version: [###] Classification: Internal Owner: [Insert name] 22/01/2014 8

TortoiseGitとは

ということで、TortoiseGit(トータスギット)を使用します。URL:http://goo.gl/s16zT

特徴- エクスプローラーからGitをGUIで操作ができる

- Language Packが充実しており、UIが日本語で表示できて使用しやすい

Version: [###] Classification: Internal Owner: [Insert name] 22/01/2014 9

TortoiseGitのインストール準備

TortoiseGitは、Gitクライアントのエンジンは持っていません。「msysgit」というGitクライアントが必要です。

msysgit:http://goo.gl/Ggm3J- 最新版の「 Git-1.8.5.2-preview20xxxxxx.exe 」をダウンロード(xxは日付)

- exeを実行してインストールする。

Version: [###] Classification: Internal Owner: [Insert name] 22/01/2014 10

TortoiseGitのインストール

こちら(http://goo.gl/xGZDU)から、本体とLanguagePackesをダウンロード&インストールします。exeを実行するだけで、後はそんなに難しくないかと。

Version: [###] Classification: Internal Owner: [Insert name] 22/01/2014 11

環境に合わせて 32/64bit を選択して下さい

TortoiseGitのGUI

インストールが完了し、Windowsを再起動した後、エクスプローラーでフォルダを右クリックすると、このようなメニューが出ます。英語で表示される場合は、設定で言語を選択します。

Version: [###] Classification: Internal Owner: [Insert name] 22/01/2014 12

TortoiseGitの環境設定(1)

前の画面のメニューから、「設定」を選択します。

言語を「日本語」に設定します。

Version: [###] Classification: Internal Owner: [Insert name] 22/01/2014 13

TortoiseGitの環境設定(2)

GIT上で表示されるユーザー名とメールアドレスを入力します。

Version: [###] Classification: Internal Owner: [Insert name] 22/01/2014 14

TortoiseGitの環境設定(3)

プロキシサーバーを利用している場合は、「ネットワーク」にプロキシの情報を入力します。

Version: [###] Classification: Internal Owner: [Insert name] 22/01/2014 15

GitHubからクローンを作成する(1)

ここでは、既にあるNotesDBのGitリポジトリからローカルに落とし、Domino Designerに取り込み、DBに反映させます。

クローンとは・・・- リモートGitリポジトリ(ここはでGitHub)から自分のローカルPCに、ローカルリポジトリとしてコピーすること。

- リポジトリまるごとコピーするため、SubversionやCVS、MSVSSなどと異なり、履歴もコピーされる。

Version: [###] Classification: Internal Owner: [Insert name] 22/01/2014 16

GitHubからクローンを作成する(2)

ローカルリポジトリを作成するフォルダで右クリック→「Gitクローン(複製)」をクリック。

URLを入力してOKを押します。URLは「https」で始まる必要があります。GitHubのWebページの左側に出ています。

Version: [###] Classification: Internal Owner: [Insert name] 22/01/2014 17

Domino Designerにインポートする(1)

メニュー「ウィンドウ(w)」→「Eclipseビューの表示」→「パッケージ・エクスプローラー」を開く

「パッケージ・エクスプローラー」ウィンドウで、右クリック→「インポート」、インポートダイアログで、「既存プロジェクトをワークスペースへ」を選択して「次へ」を押します。

Version: [###] Classification: Internal Owner: [Insert name] 22/01/2014 18

Domino Designerにインポートする

「ルートディレクトリーの選択」に、Gitのクローンで作成したローカル・リポジトリのパスを入力します。正しければ、プロジェクト欄にプロジェクトが表示されます。

「プロジェクトをワークスペースにコピー」のチェックを外しておきます。

「終了」を押すとインポートが開始されます。

Version: [###] Classification: Internal Owner: [Insert name] 22/01/2014 19

NotesDBに割り当てる(1)

インポートしたプロジェクトはオンディスク・プロジェクトなので、これをNotesDBに割り当てます。

空のDBを作成します。

デザイナで、DBタイトルのところで右クリック→「チーム開発」→「既存のオンディスクプロジェクトに関連付ける」をクリックします。

Version: [###] Classification: Internal Owner: [Insert name] 22/01/2014 20

NotesDBに割り当てる(2)

「選択したオンディスクプロジェクトから・・・」を選択し、オンディスクプロジェクトのリストにある、先ほどインポートしたプロジェクトを選択して、「終了」を押すと、DBに設計がインポートされます。

Version: [###] Classification: Internal Owner: [Insert name] 22/01/2014 21

用語の説明

コミット

- ソースコードの目的の編集が完了した時に、SCMに対して記録を行います。

- SCMではコミットの単位で履歴が作成されます。また1つのコミットで複数のファイルの変更が記録できます。そのため、複数のファイルの変更をセットとして遡ることができます。

- gitでは、コミットしただけではリモート・リポジトリには反映されません

プッシュ

- ローカルのコミット情報をリモート・リポジトリに送信します。

- 他のユーザーが先にプッシュしていた場合、プッシュは失敗します。その場合は、プルを行います。

プル

- リモート・リポジトリの最新のコミット情報を取得し、ローカル・リポジトリにマージします。通常マージ処理は自動的に行われますが、他の人と同じ箇所を修正した時など、競合が発生します。

- 競合が発生した場合は、手動で解決する必要があります。

Version: [###] Classification: Internal Owner: [Insert name] 22/01/2014 22

コミットする

開発作業はNotesDBで行いますが、コミットはオンディスクプロジェクトから行います。この間は自動的に同期されます。

エクスプローラーで、オンディスクプロジェクトのフォルダを開き、右クリック→「Gitコミット->master」をクリックします。

*必ず*コメントを入れてOKボタンを押します。

Version: [###] Classification: Internal Owner: [Insert name] 22/01/2014 23

変更したファイルの一覧です。必要があればコミットするファイルを選択します。

コメントにIssuesのIDを入れて連携させることができます。(後述)

プッシュする

エクスプローラーで、オンディスクプロジェクトのフォルダを開き、右クリック→「TortoiseGit」→「プッシュ(リモートへ反映)」をクリックします。

ダイアログが表示されますが、そのまま「OK」ボタンを押すとプッシュされます。この時、ユーザー/パスワードを聞いてきた場合は、GitHubのWebページにアクセスする際のものを使用します。

Version: [###] Classification: Internal Owner: [Insert name] 22/01/2014 24

プルする

ソースコードの変更がコミットされていない場合、プルできません。

エクスプローラーで、オンディスクプロジェクトのフォルダを開き、右クリック→「TortoiseGit」→「プル(ローカルへ反映)」をクリックします。

ダイアログが表示されますが、そのまま「OK」ボタンを押すとプッシュされます。この時、ユーザー/パスワードを聞いてきた場合は、GitHubのWebページにアクセスする際のものを使用します。

Version: [###] Classification: Internal Owner: [Insert name] 22/01/2014 25

プッシュに失敗?

プッシュした時に、他の人が先にリモートリポジトリにプッシュしていた場合、エラーになります。

その場合は、先にプルしてローカルリポジトリを最新の状態にマージします。

Version: [###] Classification: Internal Owner: [Insert name] 22/01/2014 26

メッセージを読むと、pullとかして先にマージしてね、と書いているのがわかります。

プルに失敗?

プルした時に、他の人が自分と同じ箇所(ファイル単位ではなく、ファイルの中の同じ箇所)を修正していると、マージできずに失敗します。→競合状態のファイルがあります。

その場合は共同を解消しましょう。

Version: [###] Classification: Internal Owner: [Insert name] 22/01/2014 27

メッセージを読むと、競合をfixしてcommitしてねと書いているのがわかります。

競合ファイルの確認(1)

競合の解消は、ツールを使用することで容易にできますが、何を残すか、削除するかを判断する必要があります。

競合が発生したファイルおよびそのファイルがあるフォルダは、エクスプローラー上で[!]のアイコンが表示されます。

Version: [###] Classification: Internal Owner: [Insert name] 22/01/2014 28

競合ファイルの確認(2)

エクスプローラーの右クリック→「競合の解消」をクリックすると、競合しているファイルの一覧が表示されます。

そこでファイルを右クリック→「競合の編集」とすると、ツールが起動します。

Version: [###] Classification: Internal Owner: [Insert name] 22/01/2014 29

競合の解消-どっちも残す場合

競合している箇所は、赤く表示されます。それ以外の部分は自動的にマージされているので、何もする必要はありません。

この場合は、同じ箇所に「削除」ボタンと「閉じる」ボタンが追加されています。これらはどちらも必要と判断しました。

削除ボタン->閉じるボタンという順番にしたいので、範囲を選択して右クリック→「「こちら側」の前に「あちら側」のテキストブロック使用」を押します。

画面下の「マージ済み」で競合が解消できたのを確認できたら、「解決済みマーク」ボタンを押して、ツールを終了します。

Version: [###] Classification: Internal Owner: [Insert name] 22/01/2014 30

範囲を選択(行単位)して、右クリック

競合の解消-片方のファイルの変更を無視

一方のファイルの変更を無視して競合を解消することも有ります。

この場合、ファイル内の競合箇所だけでなく、片方のファイルへの変更はすべて無視されます。

競合ファイルの一覧ダイアログで、ファイルを右クリック→「「あちら(こちら)側」を使用して競合を解決する」をクリックします。

XPagesでは、「.metadata」という拡張子のファイルがよく競合しますが、これは更新者、更新日時情報なので、マージする必要がありません。

「あちら側」「こちら側」どちらを採用しても問題ありません。

また画像ファイルなどバイナリファイルもこれで競合を解消します。Version: [###] Classification: Internal Owner: [Insert name] 22/01/2014 31

よく使うコマンド(1)

変更の取り消し- 変更したソースコードを前のコミットの状態まで戻す。※編集内容が削除されるので注意!

ログを表示- コミットの履歴の一覧を表示する。

- コミット毎に変更ファイルの一覧が表示される。

• 変更ファイルの一覧から、差分を見ることができる。

- 差分エディタで、部分的に前のコミットから戻したりできる。

- あるコミットからブランチを作成できる。

- あるコミットにカレントを切り替えることができる。

- などなど

Version: [###] Classification: Internal Owner: [Insert name] 22/01/2014 32

よく使うコマンド(2)

追加- リポジトリに管理されていないファイルを追加します。

- 該当のファイルを右クリックすると出てきます。

- NotesDBでは新しい設計要素を作成した時に必要になります。

- コミット時に「バージョン管理下のファイルではありません」に出てくるので、ここでチェックを入れても同じ結果になります。

削除- ファイルをリポジトリ管理下から削除し、ローカルからも物理的にファイルを削除します。

- 「削除(ローカルを保持)」だとファイルをリポジトリ管理下から削除しますが、ローカルからはファイルを削除しません。

Version: [###] Classification: Internal Owner: [Insert name] 22/01/2014 33

注意事項

プルする場合は、Designerで開いているDBを閉じる。- 右クリック→「アプリケーションを閉じる」で閉じられます。

- 理由:稀に同期がうまくいかず、ファイルの内容が空になるなどの不具合があります。

フェッチは使用しない- フェッチはマージされず、また現在のローカルソースには手を加えず、新しいブランチができる。

- ブランチが理解できるようになったら、フェッチ→マージのほうが細かいコントロールができるので良い。

BugFixと機能追加のブランチは分ける

Version: [###] Classification: Internal Owner: [Insert name] 22/01/2014 34

Issuesの使い方

GitHubにおけるIssuesは、タスクと同義と考えてよいです。

バグの情報の他に、やるべきことなどを登録しておきます。

チケット駆動開発においては、先にチケット(Issue)を作成し、それに従って開発を行い、チケットと同じ単位でコミットするのが基本です。(No Ticket, No Commit)

コミットする際にコミット・コメントにIssue番号を入力することで、連携できます。連携すると、GitのコミットコメントのIssue番号がIssue画面へのリンクとなり、対象のIssueにコミットコメントがIssueのコメントとして自動的に追加されます。

Version: [###] Classification: Internal Owner: [Insert name] 22/01/2014 35

Issueラベルの意味

bug :バグ

duplicate :重複(他のIssueと同現象)

enhancement:改善要望

invalid :報告の間違い

question :質問

wontfix :対応しない(仕様とするなど)

Version: [###] Classification: Internal Owner: [Insert name] 22/01/2014 36

今回話し足りないこと

社内Git環境の構築と、新しいGitリポジトリの作成

運用ルールについて

ブランチやマージの概念、使い方

チケット駆動開発について

Redmine、ALMiniumの紹介、Gitとの連携

Version: [###] Classification: Internal Owner: [Insert name] 22/01/2014 37

参考資料

サルでもわかるGit入門:http://goo.gl/2zmdU

@IT:ガチで5分で分かる分散型バージョン管理システムGit:http://goo.gl/KlbZR

@IT:かんばん!~もし女子高生がRedmineで「スクラム」開発をしたら:http://goo.gl/i5Ckw

ドットインストール:gitの基礎:http://goo.gl/2yOgd

やる夫で学ぶ gitcore-tutorial/Introduction:http://goo.gl/mnQYn

Version: [###] Classification: Internal Owner: [Insert name] 22/01/2014 38

Version: [###] Classification: Internal Owner: [Insert name] 22/01/2014 39