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

[表紙]GitHub実践入門──Pull Requestによる開発の変革

紙版発売
電子版発売

A5判/304ページ

定価2,838円(本体2,580円+税10%)

ISBN 978-4-7741-6366-6

電子版

→学校・法人一括購入ご検討の皆様へ

書籍の概要

この本の概要

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

こんな方におすすめ

  • 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