WEB+DB PRESS plusシリーズGitHub実践入門
──Pull Requestによる開発の変革

書籍の概要

この本の概要

GitHubの実践的な使い方を,実際に手を動かす形で解説する書籍です。初学者の方にもわかりやすいよう,基本的なGitやGitHubの使い方から,「ソーシャルコーディング」の目玉機能であるPull Requestの送り方・受け方まで解説します。また,外部ツールとの連携,GitHub FlowやGit Flowなど,GitHubを中心とした開発手法についてもしっかり解説しているので,中・上級者の方にも参考になるはずです。

こんな方におすすめ

  • GitHubをこれから使いたい初学者の方
  • GitHubをさらに使いこなしたい中級者の方

本書に関するお知らせ

本書に関連する記事を公開しております。

この書籍に関連する記事があります!

なぜGitHubは多くのエンジニアに好まれるのか
GitHubは,Gitというバージョン管理システムのリポジトリをホスティングするサービスで,全世界の400万人以上のエンジニアが利用しています。
GitHubが僕たちを,仕事の現場を変えた!──「GitHub Kaigi」レポート
2014年6月1日(日),東京・渋谷マークシティにおいて,GitHubユーザグループ主催によるイベント「GitHub Kaigi」が開催されました。

目次

  • はじめに
    • 謝辞
  • 本書の構成
    • サポートページ

第1章:GitHubの世界へようこそ

1.1 GitHubとは

  • GitHub社とoctocat
  • ただのGitリポジトリのホスティングではない
  • GitHubの利用状況
  • [column]GitHubとGitの違い

1.2 GitHubを使うと何が変わるのか

  • コラボレーションの形が変化する
    • 開発者たちが化学反応を起こすPull Request
    • 特定のユーザへのコメント
    • GitHub Flavored Markdown
  • [column]こんな書き方もできる!!
  • 他チームのソフトウェアが今まで以上に見える
  • オープンソースソフトウェアの世界と同じ開発スタイル

1.3 ソーシャルコーディングとは

1.4 ソーシャルコーディングをするべき理由

  • 世界を閉ざさず,多種多様な文化を見よ
  • コードを書けるプログラマが求められている
  • GitHubの最大の特徴は「人に目を向ける」こと

1.5 GitHubが提供する主な機能

  • Gitリポジトリ
  • Organization
  • Issue
  • Wiki
  • Pull Request
  • [column]GitHubで注目されているソフトウェア

1.6 まとめ

  • 参考資料

第2章:Gitの導入

2.1 誕生の背景

2.2 バージョン管理とは

  • 集中型と分散型
    • 集中型
    • 分散型
  • 集中型と分散型はどちらが良いか

2.3 インストール

  • MacとLinuxの場合
  • Windowsの場合
    • コンポーネントの選択
    • 環境変数の設定
    • 改行コードの扱い
    • Git Bash
  • 本書での環境

2.4 初期設定

  • 名前とメールアドレスを設定する
  • コマンド出力を読みやすくする

2.5 まとめ

第3章:GitHubを利用するための準備

3.1 利用する前の準備

  • アカウントの作成
  • アイコンの設定
  • SSH Keyの設定
  • 公開鍵の登録
  • ソーシャル機能の利用

3.2 実際に使ってみよう

  • リポジトリの作成
    • Repository name
    • Description
    • Public,Private
    • Initialize this repository with a README
    • Add .gitignore
    • Add a license
  • リポジトリにアクセス
    • README.md
    • GitHub Flavored Markdown
  • コードを公開
    • 作成したリポジトリをcloneする
    • コードを作成する
    • コミットする
  • [column]公開する際のライセンス
    • pushする

3.3 まとめ

第4章:Gitを操作しながら学ぶ

4.1 基本的な操作

  • git init──リポジトリを初期化
  • git status──リポジトリの状態を確認
  • git add──ステージ領域へファイルを追加
  • git commit──リポジトリの歴史を記録
    • 1行のコミットメッセージを記述する
    • 詳細なコミットメッセージを記述する
    • コミットを中止する
    • コミット後の状態を確認する
  • git log──コミットログを確認
    • コミットメッセージの1行目のみを表示する
    • 指定したディレクトリ,ファイルのみのログを表示する
    • ファイルの差分を表示する
  • git diff──変更差分を確認
    • ワークツリーとステージ領域の差分を確認する
    • ワークツリーと最新コミットの差分を確認する

4.2 ブランチの操作

  • git branch──ブランチを一覧表示
  • git checkout -b──ブランチを作成し,切り替える
    • feature-Aブランチに切り替えコミットする
    • masterブランチへ切り替える
    • 1つ前のブランチに切り替える
  • トピックブランチ
  • 統合ブランチ
  • git merge──ブランチをマージ
  • git log --graph──ブランチを視覚的に確認する

4.3 コミットを変更する操作

  • git reset──歴史を戻る
    • feature-Aブランチを分岐する前に戻る
    • fix-Bブランチを作成する
    • feature-Aブランチをマージしたあとの状態に進む
  • コンフリクト(競合)を解消
    • コンフリクト部分を確認し解消する
    • 解消した結果をコミットする
  • git commit --amend──コミットメッセージを修正
  • git rebase -i──歴史を押しつぶして改変
    • feature-Cブランチを作成する
    • スペルミスを修正する
    • 歴史を改ざんする
    • masterブランチにマージする

4.4 リモートリポジトリへの送信

  • git remote add──リモートリポジトリを登録
  • git push──リモートリポジトリへ送信
    • masterブランチへ送信する
    • masterブランチ以外のブランチへ送信する

4.5 リモートリポジトリから取得

  • git clone──リモートリポジトリを取得
    • リモートリポジトリを取得する
    • リモートのfeature-Dブランチをチェックアウトする
    • ローカルのfeature-Dブランチに変更をコミットする
    • feature-Dブランチをpushする
  • git pull──最新のリモートリポジトリブランチを取得

4.6 さらにGitを奥深く理解するための資料

  • Pro Git
  • LearnGitBranching
  • tryGit

4.7 まとめ

第5章:GitHubの機能を徹底解説

5.1 キーボードショートカット

5.2 ツールバー

  • UIの解説
    • [1]ロゴ
    • [2]Notifications
    • [3]検索ウィンドウ
    • [4]Explore
    • [5]Gist
    • [6]Blog
    • [7]Help
    • [8]アバター・ユーザ名
    • [9]Create a new ...
    • [10]Account settings
    • [11]Sign out

5.3 ダッシュボード

  • UIの解説
    • (1)News Feed
    • (2)Pull Requests
    • (3)Issues
    • (4)Stars
    • (5)broadcast
    • (6)Repositories you contribute to
    • (7)Your Repositories

5.4 プロフィール

  • UIの解説
    • [1]ユーザ情報
    • [2]Popular repositories
    • [3]Repositories contributed to
    • [4]Public contributions
    • [5]Contribution Activity
    • [6]Repositories
    • [7]Public Activity

5.5 リポジトリ

  • UIの解説
    • (1)ユーザ名(組織名)/リポジトリ名
    • (2)Watch / Star / Fork
    • (3)Code
    • (4)Issues
    • (5)Pull Requests
    • (6)Wiki
    • (7)Pulse
    • (8)Graphs
    • (9)Network
    • (10)Settings
    • (11)SSH clone URL
    • (12)Clone in Desktop
    • (13)Download ZIP
    • (a)commits
    • (b)branches
    • (c)releases
    • (d)contributors
    • (e)Compare & review
    • (f)branch
    • (g)path
    • (h)Fork this project and Create a new file
    • (i)files
  • ファイルに関する操作
  • [column]ファイルを名前の一部から検索する
  • 差分の閲覧
    • ブランチ間の差分を見る
    • 数日前の差分を見る
    • 指定日からの差分を見る

5.6 Issue

  • 表現力豊かで簡潔な記述方法
    • シンタックスハイライトする
    • 画像を添付する
  • ラベルを付けて整理
  • マイルストーンを付けて管理
  • [column]貢献するためのルールを知らせよう!
  • タスクリスト記法
  • コミットメッセージによるIssueの操作
    • 関連するIssueにコミットを表示する
    • IssueをCloseする
  • 特定のIssueをPull Requestに変換

5.7 Pull Request

  • [column]diff形式とpatch形式のファイルを取得
  • Conversation
  • [column]コメントの引用
  • Commits
  • [column]コメントで絵文字を活用する
  • Files Changed

5.8 Wiki

  • Pages
  • History
  • [column]Wikiにサイドバーを表示する

5.9 Pulse

  • active pull requests
  • active issues
  • commits
  • Releases published
  • Unresolved Conversations

5.10 Graphs

  • Contributors
  • Commit Activity
  • Code Frequency
  • Punchcard

5.11 Network

5.12 Settings

  • Options
    • (1)Settings
    • (2)Features
    • (3)GitHub Pages
    • (4)Danger Zone
  • Collaborators
  • Webhooks & Services
  • Deploy Keys

5.13 Notifications

5.14 その他の機能

  • GitHub Pages
  • GitHub Jobs
  • GitHub Enterprise
  • GitHub API

5.15 まとめ

  • [column]Macの通知センターでGitHubのNotificationsを確認

第6章:はじめてのPull Request

6.1 Pull Requestの概要

  • Pull Requestとは
  • Pull Requestの流れ

6.2 Pull Requestを送る準備

  • 修正するソースコードを確認
  • Fork
  • clone
  • branch
    • トピックブランチで作業する理由
    • ブランチを確認する
    • トピックブランチを作成する
  • コードを追加
  • 変更をコミット
  • リモートブランチの作成

6.3 Pull Requestを送る

6.4 Pull Requestをより効果的に使う方法

  • 開発の途中でも論議するためにPull Requestを送る
  • 開発途中であることを明確にする
  • ForkせずにブランチからPull Requestを送る

6.5 リポジトリのメンテナンス

  • リポジトリのFork,clone
  • オリジナルのリポジトリに名前を設定
  • 最新のデータを取得

6.6 まとめ

第7章:Pull Requestが送られてきたら

7.1 Pull Requestを取り込む方法

7.2 Pull Requestを取り込む準備

  • コードレビュー
  • 画像の差分を確認
    • 2-up
    • Swipe
    • Onion Skin
    • Difference
  • Pull Requestの内容を手元の開発環境に反映
    • 受信側のローカルリポジトリを最新にする
    • 送信側のリモートリポジトリを取得する
    • 確認用のブランチを作成する
    • マージする
    • ブランチを削除する
  • [column]コードマネジメントスキルを伸ばすには

7.3 Pull Requestを取り込む

  • メインのブランチにマージ
  • 変更をpush

7.4 まとめ

  • [column]相互学習の場を作り上げるのに協力してください

第8章:GitHubと連携するツールとサービス

8.1 hubコマンド

  • 概要
  • セットアップ
    • インストールする
    • 動作確認する
    • エイリアスを設定する
    • シェルでの補完を実現する
    • ~/.config/hubについて
  • コマンド
    • hub clone
    • hub remote add
    • hub fetch
    • hub cherry-pick
    • hub fork
    • hub pull-request
    • hub checkout
    • hub create
    • hub push
    • hub browse
    • hub compare
  • [column]hubコマンドをGitHub Enterpriseに対応する

8.2 Travis CI

  • 概要
  • 使ってみる
    • 設定ファイルを書く
    • 設定ファイルに問題がないかチェックする
    • GitHubと連携する
    • Travis CIの結果をREADMEに追加する

8.3 Coveralls

  • 概要
  • セットアップ
    • サインアップする
    • 対象リポジトリを追加する
    • 設定ファイルを記述する
    • gemを追加する
    • レポートを確認する

8.4 Gemnasium

8.5 Code Climate

8.6 Jenkins

  • 概要
  • インストール
  • botアカウントを作成
  • botアカウントの権限設定
    • 個人アカウントの場合
    • Organizationアカウントの場合
    • 設定を確認する
  • JenkinsへのSSH鍵の設定
    • Jenkinsをはじめて利用する場合
    • すでにJenkinsを利用している場合
  • GitHub pull request builder pluginのインストール
  • Git pluginの設定
  • Github pull requests builderの設定
    • Github server api URL
    • Access Token
    • Admin list
  • ジョブの作成と設定
    • GitHub project
    • ソースコード管理
    • ビルド・トリガ
    • ビルド
  • 結果の通知
    • テストを実行中のステータス
    • Failed
    • All is well
    • commit status
  • コメントによるコントロール
    • ジョブを実行する
    • 「White list」に登録する
    • もう一度ジョブを実行する
    • コメントする文字を変更する

8.7 まとめ

  • [column]CoderwallでGitHubのプロフィールを作成

第9章:GitHubを利用した開発フロー

9.1 チームでGitHubを利用するうえで意識すべきこと

  • すべてをシンプルに
    • プロジェクト管理ツールとGitHubの違い
    • プロジェクト管理ツールとGitHubが異なる理由
  • リポジトリをForkしない方法

9.2 GitHub Flow──デプロイを中心にした開発スタイル

9.3 GitHub Flowの流れ

  • 常にデプロイ。リリースという概念はない
  • 新作業はmasterブランチから新ブランチを作成
  • 作成した新ブランチにコミットする
  • 定期的にpushする
  • Pull Requestを使う
  • 必ずほかの開発者からレビューを受ける
  • マージ後はすぐにデプロイ

9.4 GitHub Flowを実践するための前提条件

  • デプロイ作業は完全自動化する
    • デプロイツールを利用する
    • Web上でデプロイを実行するツール
    • 開発に取り入れる際の注意
  • テストを重要視する
    • テストを自動化する
    • テストを書き,すべてのテストを通過する
    • テストコードをメンテナンスする

9.5 GitHub Flowを疑似体験

  • Fizzbuzzの仕様
  • 新機能を追加
  • 新しいブランチを作成
    • 新たにcloneする場合
    • 以前にcloneしたことがある場合
    • トピックブランチを作成する
  • 新機能を実装
  • Pull Requestを作成
  • フィードバックを受ける
  • インデントを修正
  • テストを追加
  • Pull Requestを育てる
  • Pull Requestがマージされる

9.6 GitHub Flowをチームで実践するために

  • Pull Requestのサイズを小さくする
  • 試せる環境を用意する
  • Pull Requestへのフィードバックを多くしすぎない
  • Pull Requestをためないようにする

9.7 GitHub Flowのまとめ

9.8 Git Flow──リリース中心の開発スタイル

  • 理解しやすい標準的な流れ
  • 複雑すぎる場合がある

9.9 Git Flowを導入するための準備

  • git-flowのインストール
    • Macの場合
    • Linuxなどの場合
    • 動作確認
  • リポジトリの初期設定
    • リポジトリを作成する
    • git flowの初期設定を行う
    • リモートリポジトリにもdevelopブランチを作成する

9.10 Git Flowを疑似体験

  • masterブランチとdevelopブランチの違い
    • masterブランチ
    • developブランチ
  • featureブランチで行うこと
    • ブランチを作成する
    • ブランチでの作業を行う
  • Pull Requestの送信
  • コードレビューでコードの品質を向上
  • ローカルのdevelopブランチを更新
  • releaseブランチで行うこと
  • [column]デフォルトブランチを設定
    • ブランチを作成する
    • ブランチでの作業を行う
    • リリースとマージを行う
    • バージョンのタグを確認する
  • リモートリポジトリへの反映
  • hotfixブランチで行うこと
    • ブランチを作成する
    • タグの作成とリリースを行う
    • hotfixブランチからdevelopブランチへマージする

9.11 Git Flowのまとめ

  • [column]バージョン番号の振り方

第10章:会社でGitHubを使おう

10.1 世界標準の開発環境を企業の現場にも

  • 会社に導入するメリット
  • Organizationを利用
  • GitHubのセキュリティを確認
  • メンテナンス時間に注意
  • 障害情報の確認

10.2 GitHub Enterpriseの検討

  • 概要
  • 導入のメリット
  • 導入のデメリット
  • 導入を検討すると良いケース
    • 社外にソースコードを置けない
  • [column]GitHubのリポジトリをSubversionのリポジトリとして利用する
    • メンテナンス・障害時刻をコントロールしたい

10.3 Gitホスティングを実現するソフトウェア

  • [column]Bitbucket

10.4 まとめ

Appendix A:GitHubをサポートするGUIクライアント

A.1 GitHub for Mac,GitHub for Windows

A.2 SourceTree

Appendix B:Gistで手軽にコードを共有

B.1 Gistの特徴

B.2 Gistを作成

  • UIの解説
    • [1]Gist description...
    • [2]name this file...
    • [3]language
    • [4]ACE Editor
    • [5]ファイル
    • [6]Add Another File
    • [7]Create Secret Gist
    • [8]Create Public Gist

B.3 Gistを閲覧

  • Gistのメニュー
    • (1)Gist Detaill
    • (2)Revisions
    • (3)Download Gist
    • (4)Clone this gist
    • (5)Embed this gist
    • (6)Link to this gist
  • ファイルのメニュー

B.4 Your Gists

B.5 まとめ

著者プロフィール

大塚弘記(おおつかひろき)

アジャイルソフトウェア開発を現場で推進するアジャイルリーダーシッププログラマ。複数の企業やチームにWebアプリケーション開発やサービス改善の指導,コンサルティングを行う。GitHubを活用し,1日に何度も機能をデプロイする開発体制を企業やチームに導入した経験を豊富に持つ。

URL:http://hiroki.jp/
Twitter:@HIROCASTER