書籍概要

WEB+DB PRESS plus

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

著者
発売日
更新日

概要

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

こんな方におすすめ

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

本書に関するお知らせ

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

目次

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

第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 まとめ

サポート

補足情報

(2014年4月9日更新)

Pull Request特設サイトについて

本書で解説しているPull Requestを送る/受ける方法は,次のサイトで本書を読みながら実際に試すことができます。

GitHub実践入門 : はじめての Pull Request 特設サイト
http://github-book.github.io/first-pr/

P.34 注5

Markdown記法の作者が解説したページの日本語訳として紹介しているURLがアクセスできなくなっています。以下のいずれかのページを参照してください。

正誤表

本書の以下の部分に誤りがありました。ここに訂正するとともに,ご迷惑をおかけしたことを深くお詫び申し上げます。

(2019年7月25日最終更新)

初版第1刷をお持ちの方(第2刷で修正済み)

P.159 下から7行目

$ git clone git@github.com/ユーザ名/hello-world.git
$ git clone git@github.com/ユーザ名/Hello-World.git

P.196 11行目

前提すべき
前提すべき

初版第1~2刷をお持ちの方(第3刷で修正済み)

P.63 上から4行目

歴史そのものを落ち潰して
歴史そのものを押しつぶして

P.64 下から8行目

誤植などのミスをtypoと呼ぶので、
誤字や脱字などのミスをtypoと呼ぶので、

P.74 3行目

クリエイティブコモンズで公開されているため、
クリエイティブコモンズのCC BY-NC-SA 3.0というライセンスのため、

P.92 18行目

https://github.com/rails/rails/compare/master@{7.days.ago...master}
https://github.com/rails/rails/compare/master@{7.days.ago}...master

※当初「GitHubの仕様変更」と補足情報を掲載しておりましたが,本書の誤りであることが判明しました。

P.93 5行目

https://github.com/rails/rails/compare/master@{2014-03-01...master}
https://github.com/rails/rails/compare/master@{2014-03-01}...master

※当初「GitHubの仕様変更」と補足情報を掲載しておりましたが,本書の誤りであることが判明しました。

P.173 4行目

service_name: travis ←利用しているCIを記述
repo_token: xxxxxyyyyyzzzz  ←実際にはサイトに記述されているtokenを記述
service_name: travis-ci ←利用しているCIを記述
(削除)

P.173 6行目

ここではすでにTravis
CIと連携していることを前提にしています。そのため「service_name」はtravisにしていますが、利用している継続的インテグレーションサーバに合わせて記述してください。
ほかの継続的インテグレーションサーバ(Jenkinsなど)を利用している場合は、「service_name」を必要に応じてわかりやすい名称に変更したほうがよいでしょう。また、その場合には「repo_token」をrepo_token:
xxxxxyyyyyzzzzのように追記する必要があります。

※「service_name」がtravis-ciの場合は「repo_token」を指定する必要はありませんでしたので上記のように修正しました。

初版第1~4刷をお持ちの方(第5刷で修正済み)

P.4 コラム 上から2行目

GitHubとGitと一貫して区別して
GitHubとGit一貫して区別して

P.98 コラム 上から2行目

ガイドラインへリンクが表示させる
ガイドラインへのリンク表示させる

初版第1~5刷をお持ちの方(第6刷で修正済み)

P.236 「Pull Requestの送信」の3段落2~3行目

リモートリポジトリのuser-addブランチが更新されている可能性があるので、user-addブランチの最新のコードをpullしてください。
リモートリポジトリのadd-userブランチが更新されている可能性があるので、add-userブランチの最新のコードをpullしてください。

初版第1~7刷をお持ちの方

P.178 「インストール」の2行目

公式サイトの右側からインストールするパッケージを選んでください。
公式サイトの右側からインストールするパッケージを選んでください。本書ではOS Xを例に解説します。

※続く解説のなかに,別環境だと動作が異なる部分があったため

商品一覧