GithubとRを連携させてレポートを共同で作成する方法
はじめに
ここではRstudioで作成したRmd
ファイルをGituhubで管理し、複数人で共同で作業する場合の方法について記載する。また、RstudioではUIとしてGitを管理できるようになっているが、ここではターミナル(windows:コマンドプロンプト)を使用する。
仕事であれば、本来はプライベートリポジトリを使うと思うが、ここではパブリックリポジトリを使った例になっている。
あくまでもこれは1例なので非効率、誤りあるかと思います。私も完全に使い方を理解してないので、使用される場合は自己責任でお願いします。
1. ローカルリポジトリを作成(自分)
ターミナルからcd
コマンドで移動し、mkdir
コマンドでフォルダを作成する。ここでは、~/Documents/Github/iris_EDA
でRmd
を管理したいとする。
$ cd ~/Documents/Github/ $ mkdir iris_EDA $ cd iris_EDA
そして、Gitのinit
コマンドでローカルリポジトリを新規に作成する。初期設定みたいなもので、.git
という隠しファイルを生成する。
$ git init Initialized empty Git repository in ~/Documents/Github/iris_EDA/.git/ $ ls -a // 内容を確認できる . .. .git
2. Githubでリモートリポジトリを作成(自分)
Githubに移動し、リモートリポジトリを作成する。ここではiris_EDA
という名前のローカルリポジトリを作成。
ターミナルに戻りリモートリポジトリを登録しておく。
git remote add origin https://github.com/<github name>/iris_EDA.git
3. Rmd
を作成(自分)
Rstudioを起動し、File >> New File >> R Markdown
で新規作成する。
※Rプロジェクトでも良いと思うので、目的にあわせてください。
Document
に必要な情報を記載し、From Template
でGithub Document
を選択しOK
。
Rmd
にスクリプト記入し、レポートを作成。kinit >> Knit to github_document
でKnit
する。
Rmd
ファイルを名前(iris_EDA)をつけて、さきほど作成したローカルリポジトリに保存する。
4. リモートリポジトリにプッシュ(自分)
Rmd
をリモートリポジトリにプッシュしていく。Gitではリモートリポジトリにプッシュする際に、git add >> git commit >> git push
という手順をとる。git add
はステージに変更を記録するコマンドで、git commit
はローカルリポジトリに変更を記録するコマンド、git push
はリモートリポジトリに変更を記録するコマンドである。
現在の状況として、RStudio上でKnit
したので、iris_EDA
フォルダには、.md
と画像データなどが保存されているiris_EDA_files
フォルダが格納されている。ちなみに.md
をGithubないしブラウザ上で開くことでレポートを確認できる。
$ ls iris_EDA.Rmd iris_EDA.md iris_EDA_files
ではgit add >> git commit >> git push
していく。
$ git add . // フォルダのすべてが対象 $ git commit -m "first commit" //-mオブションでコミットメッセージを作成 [master 84c0106] first commit 3 files changed, 66 insertions(+) create mode 100644 iris_EDA.md create mode 100644 iris_EDA_files/figure-gfm/unnamed-chunk-2-1.png create mode 100644 iris_EDA_files/figure-gfm/unnamed-chunk-3-1.png $ git push origin master // リモートポジトリにプッシュ Counting objects: 7, done. [略] Fast-forward iris_EDA.Rmd | 20 +++-- iris_EDA.md | 86 +++++++++++++++------ .../figure-markdown_github/unnamed-chunk-3-1.png | Bin 0 -> 5749 bytes .../figure-markdown_github/unnamed-chunk-4-1.png | Bin 0 -> 9402 bytes 4 files changed, 74 insertions(+), 32 deletions(-) create mode 100644 iris_EDA_files/figure-markdown_github/unnamed-chunk-3-1.png create mode 100644 iris_EDA_files/figure-markdown_github/unnamed-chunk-4-1.png
.md
をGithubないしブラウザ上で開くとこんな感じ。
共同作業者に修正を依頼(自分)
作成したレポートの変数や引数が間違っていたので、共同作業者に修正を依頼する場面を考える。まず、Gituhub上で、Settings >> Collaborators
と進み、枠内に<Github name of Collaborators>
を記入し、コラボレートのリクエストを送り、共同作業者にはメールが届くので、そこから認証してもらう。
共同作業者はリクエストを認証し、作業を進めていく。
4.5. 変更に関するコマンド(自分)
git add >> git commit >> git push
という流れでリモートリポジトリへ変更を記録していくが、その過程で変更を取り消したりしたい場合がある。その時は状態に応じて、下記のコマンドで修正していく。
4.5.1 git checkout -- <file name>
git add
したけれども、ワークツリーのデータへの変更をまるごと取り消したいときは、git checkout -- <file name>
を実行することで、ステージからも取り消され、ワークツリーのファイル自体も以前のバージョンに戻すことが可能。
// 必要に応じて下記は実行する $ git add . // フォルダのすべてが対象 $ git checkout -- <file name> // ワークツリーの変更を前の状態に戻す
4.5.2 git reset HEAD <file name>
また、git add
したけれども、さきほどとは異なりステージへの変更を取り消したいときは、git reset HEAD <file name>
を実行することで、ステージへの変更を取り消すことが可能。この場合、ワークツリーのファイル自体の変更はそのまま。
// 必要に応じて下記は実行する $ git add . // フォルダのすべてが対象 $ git reset HEAD <file name> // ステージの変更を取り消す。つまり、アンステージする。
4.5.3 git commit --amend
git commit
したけれども、ローカルリポジトリへの変更を再度、変更したいと思ったときは、git commit --amend
を実行することで、ローカルリポジトリへコミットした内容の変更を取り消すことが可能。
手順としては、まずはファイルを修正し、git add
でステージに追加し、git commit --amend
でローカルリポジトリへコミットしたコミット内容を修正する。
// 必要に応じて下記は実行する // まずはファイルを修正する $ git add . // フォルダのすべてが対象 $ git commit --amend // コミットの変更を取り消す。
5. ローカルリポジトリを作成(共同作業者)
共同作業者は、ターミナルからcd
コマンドで移動し、ここでは~/Documents/iris_EDA
ディレクトリでRmd
を管理したいとする。まずはDocuments
に移動しgit clone <remote repo url>
でクローンする。
$ cd ~/Documents $ git clone https://github.com/<github name>/iris_EDA.git Cloning into 'iris_EDA'... remote: Enumerating objects: 10, done. remote: Counting objects: 100% (10/10), done. remote: Compressing objects: 100% (8/8), done. remote: Total 10 (delta 0), reused 10 (delta 0), pack-reused 0 Unpacking objects: 100% (10/10), done.
iris_EDA
ディレクトリに移動し、git branch
コマンドでmod_plot
ブランチを作成し、git checkout
コマンドでブランチに移動する。
$ cd iris_EDA $ git branch mod_plot $ git checkout mod_plot
そして、RStudio上で~/Documents/iris_EDA/iris_EDA.Rmd
を開き、修正の依頼に従って修正する。
Sepal.Length
とPetal.Length
の関係を記述していた部分をSepal.Width
とPetal.Length
の関係に変更geom_smooth(method = 'lm')
からgeom_smooth(method = 'loess')
に変更library(tidyverse)
を追加
変更が完了すれば、RStudio上でkinit >> Knit to github_document
でKnit
し、Rmd
を保存する。
6. プルリクエストの作成(共同作業者)
修正が終われば、ターミナルに移動し、git add >> git commit >> git push
でブランチをリモートリポジトリへプッシュし、プルリクエストを作成する。
$ git add . $ git commit -m "first commit" [mod_branch 130ef1f] modify vals and plot 4 files changed, 74 insertions(+), 32 deletions(-) create mode 100644 iris_EDA_files/figure-markdown_github/unnamed-chunk-3-1.png create mode 100644 iris_EDA_files/figure-markdown_github/unnamed-chunk-4-1.png $ git push origin mod_plot Enumerating objects: 12, done. Counting objects: 100% (12/12), done. [略] To https://github.com/<github name>/iris_EDA.git * [new branch] mod_branch -> mod_branch
Githubに移動し、プルリクエストを作成する。緑ボタンのCompare & pull request
から作成する。
コメントの入力やレビュワーを設定し、Create pull request
を押せば、プルリクエストの完成。レビュアーにプルリクエストの連絡がメールで届く。
7. 修正内容をマージ(自分)
共同作業者から修正作業完了の報告を受け取ったら、Githubに移動し、内容をレビューし、マージする。共同作業者のプルリクエストが表示されているので、クリックして内容を確認する。
再度修正を依頼する場合はここで依頼の設定を行う。特に問題なければ、コメントなどしつつMerge pull request
を選択。
Confirm merge
を選択。
これでマージされるので、マージ後の内容を確認する。.md
を開くとこんな感じ。
ターミナルに戻り、git pull
コマンドでプルして、ローカルリポジトリを最新の状態に変更する。
$ git pull origin master remote: Enumerating objects: 13, done. [略] Fast-forward iris_EDA.Rmd | 20 +++-- iris_EDA.md | 86 +++++++++++++++------ .../figure-markdown_github/unnamed-chunk-3-1.png | Bin 0 -> 5749 bytes .../figure-markdown_github/unnamed-chunk-4-1.png | Bin 0 -> 9402 bytes 4 files changed, 74 insertions(+), 32 deletions(-) create mode 100644 iris_EDA_files/figure-markdown_github/unnamed-chunk-3-1.png create mode 100644 iris_EDA_files/figure-markdown_github/unnamed-chunk-4-1.pn $ ls -a . .git iris_EDA.md .. iris_EDA.Rmd iris_EDA_files
8. 不要なブランチを削除(共同作業者)
共同作業者は、マージが終われば、不要なブランチは削除する。
ターミナルからgit checkout
コマンドでマスターブランチに移動し、git branch -D <branch name>
コマンドでブランチを削除する。
$ git checkout master $ git branch -D mod_branch Deleted branch mod_branch (was 130ef1f).
これで作成から修正のマージまでの手順はおしまい。GitとRStudioを連携させて作業させたい方は、@uriさんのRStudioではじめるGitによるバージョン管理を見てください。非常にわかりやすいです。作業していて毎回思いますが、RStuido上でできるっていいですよね。(なんでこの記事を書いたのか…笑)