医療データ解析者へ向けた Git・GitHub 入門
Yui Tomo
October 25, 2020
@tomoybs
Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 1 / 59
目次
1 目的
2 解析プログラムのバージョン管理(よくある実態)
3 どういった問題があるのか?
4 Git · GitHub の紹介
5 Git · GitHub を使ってみよう
6 実際のプロジェクト運用の例
7 さらなる話題
Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 2 / 59
目的
目的
本資料の目的
• Git, GitHub というツールを知る
• Git, GitHub を使ったコード開発のイメージを掴む
• Git, GitHub の最小限の機能を使って開発ができるようになる
Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 3 / 59
解析プログラムのバージョン管理
(よくある実態)
解析プログラムのバージョン管理(よくある実態)
あるある管理(?)
• XX 試験統計解析.sas
• XX 試験統計解析 _2.sas
• XX 試験統計解析 _2(〇〇先生更新).sas
• XX 試験統計解析 _3(統合済み).sas
• XX 試験統計解析 _4.sas
• XX 試験統計解析 _4_1.sas
• XX 試験統計解析 _4_ 最終版.sas
• XX 試験統計解析 _var1 固定.sas
Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 4 / 59
解析プログラムのバージョン管理(よくある実態)
少し進化した管理方法
• 20200829_XX 試験統計解析.sas
• 20200904_XX 試験統計解析.sas
• 20200928_XX 試験統計解析.sas
Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 5 / 59
どういった問題があるのか?
どういった問題があるのか?
Case 1. 変更前に戻りたい
Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 6 / 59
どういった問題があるのか?
Case 1. 変更前に戻りたい
日付管理でも大丈夫?
Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 7 / 59
どういった問題があるのか?
Case 1. 変更前に戻りたい
しかし現実には...
Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 8 / 59
どういった問題があるのか?
Case 1. 変更前に戻りたい
しかし現実には...
Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 9 / 59
どういった問題があるのか?
Case 1. 変更前に戻りたい
問題点
• 現実には変更内容が多岐にわたり、単純に追跡して統合するのは大きな
労力が必要
• 度重なる修正を保ったまま変更前に戻ることはほとんど不可能
• 変更のたびに管理表のような書類を別に作成するのも面倒
Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 10 / 59
どういった問題があるのか?
Case 2. 複数人での作業
追加機能を切り分ければ大丈夫?
Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 11 / 59
どういった問題があるのか?
Case 2. 複数人での作業
しかし現実には...
Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 12 / 59
どういった問題があるのか?
Case 2. 複数人での作業
しかし現実には...
Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 13 / 59
どういった問題があるのか?
Case 1. 変更前に戻りたい
問題点
• 現実には変更内容が多岐にわたり、単純に追跡して統合するのは大きな
労力が必要
• 作業者それぞれが独自に行った変更まで追跡するのは非常に面倒
• 変更の競合を追跡することも面倒
Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 14 / 59
Git · GitHub の紹介
Git · GitHub の紹介
Git とは?
• 分散型バージョン管理システム
• コマンドラインで動作するソフトウェア
Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 15 / 59
Git · GitHub の紹介
分散型とは?
• リモートとローカルにそれぞれ作業用のリポジトリ(変更管理場所)が
存在する
• 用語は後ほど説明します
Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 16 / 59
Git · GitHub の紹介
GitHub とは?
• ソースコードホスティングサービス(クラウドのようなもの)
• ローカルとリモートの「リモート側」
• ブラウザからアクセスできる Web サービス
Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 17 / 59
Git · GitHub の紹介
Git, GitHub を使うと何が嬉しいのか?
• ファイル名変更や管理表によるバージョン管理に頼らなくて良い
•「枝」のように分枝させコード更新ができる
• 複数人での共同開発がやりやすい
Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 18 / 59
Git · GitHub を使ってみよう
Git · GitHub を使ってみよう
Git のインストール
Windows の場合:
• Git for windows をダウンロード
• https://git-scm.com/download/win
•(慣れている方は WSL で)
Mac の場合:
• コマンドライン・デベロッパー・ツールをダウンロード
Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 19 / 59
Git · GitHub を使ってみよう
Git をどこから使う?
Windows の場合:
• Git Bash を使用
• Git for windows をインストールすると入っている
•(慣れている方は WSL で)
Mac の場合:
• ターミナルを使用
Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 20 / 59
Git · GitHub を使ってみよう
Bash コマンド(最低限)
息をするように使えるようになっておくと楽です
Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 21 / 59
Git · GitHub を使ってみよう
GitHub を使用する準備
• GitHub(https://github.com )へアクセスしユーザー登録
• コマンドラインから接続(SSH 接続)できるように、SSH キーを作成し
GitHub へ登録(下記 URL などを参照)
• https://qiita.com/shizuma/items/2b2f873a0034839e47ce
Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 22 / 59
Git · GitHub を使ってみよう
Git · GitHub の用語
• リポジトリ
• ローカルリポジトリ
• リモートリポジトリ
• ブランチ
• プルリクエスト
• マージ
Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 23 / 59
Git · GitHub を使ってみよう
リポジトリ
• ファイルやフォルダ(ディレクトリ)の変更履歴を管理する場所のこと
•「バージョン管理したいコード類が入っているフォルダ」
Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 24 / 59
Git · GitHub を使ってみよう
ローカルリポジトリ
• 自分の(手元の)作業環境にあるリポジトリ
Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 25 / 59
Git · GitHub を使ってみよう
リモートリポジトリ
• 自分の環境から「離れた」専用サーバー上にあるリポジトリ
• GitHub 上のリポジトリはリモートリポジトリに該当
Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 26 / 59
Git · GitHub を使ってみよう
リモートリポジトリ
• リモートリポジトリは複数人(複数の作業環境)で共有できる
Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 27 / 59
Git · GitHub を使ってみよう
ブランチ
• 並行して 複数のファイル変更やバージョンを管理する機能
Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 28 / 59
Git · GitHub を使ってみよう
プルリクエスト
• レビューアー(他の作業者 or 自分)に変更(ブランチ)の統合を依頼す
ること
• プルリクエストを受けたレビューアーがコードレビューを行い、変更を
統合する
Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 29 / 59
Git · GitHub を使ってみよう
マージ
• 異なるブランチを統合すること
Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 30 / 59
Git · GitHub を使ってみよう
Git コマンドの使い方(最低限)
• add
• commit
• push
• pull
• checkout
• branch
• clone
Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 31 / 59
Git · GitHub を使ってみよう
add コマンド
• 更新内容を管理対象に追加する
$ git add 更新対象としたいもの
• 更新したファイル(main_analysis.sas)を管理対象に追加する
$ git add main_analysis.sas
• 更新したフォルダ・ディレクトリ(analysis/)を管理対象に追加する
$ git add analysis
• カレントディレクトリ以降の階層にある更新したファイル, フォルダ・デ
ィレクトリを全て管理対象に追加する
$ git add .
Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 32 / 59
Git · GitHub を使ってみよう
commit コマンド
• add で管理対象にした更新内容を保存する
• –m オプションで更新メッセージ(コミットメッセージ)を追加する
$ git commit –m ” メッセージ(変更の概要など)”
• ”modify covariates of linear regression” というメッセージを付与して変
更内容を保存する
$ git commit –m ”modify covariates of linear regression”
Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 33 / 59
Git · GitHub を使ってみよう
push コマンド
• ローカルリポジトリでの変更内容(commit した内容)をリモートリポジ
トリに反映する
$ git push origin ブランチ名
• コミット内容をリモートの master ブランチへ反映する
$ git push origin master
Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 34 / 59
Git · GitHub を使ってみよう
pull コマンド
• リモートリポジトリの内容をローカルリポジトリに反映する
$ git pusll origin ブランチ名
• リモートの master ブランチをローカルの master ブランチへ反映する
$ git pull origin master
Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 35 / 59
Git · GitHub を使ってみよう
checkout コマンド
• 新しいブランチを作成してそこへ移動する
$ git checkout -b 新しいブランチ名
• ローカルリポジトリでブランチを移動する
$ git checkout ブランチ名
• develop ブランチを作成しそこへ移動する
$ git checkout -b develop
• master ブランチへ移動する
$ git checkout master
Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 36 / 59
Git · GitHub を使ってみよう
branch コマンド
• 現在のブランチ一覧を表示する
$ git branch
• リモートリポジトリのブランチも含めた一覧を表示する
$ git branch -a
• master, develop ブランチが存在し、master にいる際に現在のブランチ
一覧を表示する
$ git branch
> develop
> * master
Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 37 / 59
Git · GitHub を使ってみよう
clone コマンド
• リモートリポジトリと同じものをローカルに作成する
$ git clone クローン URL
• リモートリポジトリの特定のブランチと同じものをローカルに作成する
$ git clone –b ブランチ名クローン URL
• t-yui の causaltrtRiskRatioCI リポジトリと同じものをローカルに作成す
る(HTTPS URL, SSH URL のいずれでも可)
$ git clone https://github.com/t-yui/causaltrtRiskRatioCI.git
$ git clone git@github.com:t-yui/causaltrtRiskRatioCI.git
Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 38 / 59
実際のプロジェクト運用の例
実際のプロジェクト運用の例
リポジトリの作成とクローン
• GitHub へアクセスし、リポジトリを作成する
Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 39 / 59
実際のプロジェクト運用の例
リポジトリの作成とクローン
Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 40 / 59
実際のプロジェクト運用の例
リポジトリの作成とクローン
Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 41 / 59
実際のプロジェクト運用の例
リポジトリの作成とクローン
• Git Bash (Windows) やターミナル (Mac) へ移動し、リポジトリをローカ
ルにクローンする
$ cd ∼/Develop    # リポジトリを置きたいディレクトリへ移動
$ git clone https://github.com/t-yui/test_repo.git
$ ls
> test_repo/   # test_repo リポジトリが作成されている
$ cd test_repo
$ ls –a
> ./ ../ .git/   # .git/というディレクトリが git 管理の本体
Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 42 / 59
実際のプロジェクト運用の例
README ファイルの作成
README ファイルとは?
• リポジトリの説明を記述するファイル
• マークダウン形式で記述する
$ touch README.md    # touch コマンドでファイル作成
• touch コマンドなどでファイルを作成する
• その後は、VSCode, Atom, メモ帳などのテキストエディタで編集する
• コマンドラインで作業を続けたい場合は vim 等で作成&編集しても OK
Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 43 / 59
実際のプロジェクト運用の例
.gitignore ファイルの作成
.gitignore ファイルとは?
• 管理対象にしたくないものを記述するファイル
• 特に、医学系研究ではデータ(xlsx, csv, sas7bdat, sav など)を誤ってア
ップロードしないためにも、作成を推奨。
$ touch .gitignore    # touch コマンドでファイル作成
• touch コマンドなどでファイルを作成する
• その後は、VSCode, Atom, メモ帳などのテキストエディタで編集する
• コマンドラインで作業を続けたい場合は vim 等で作成&編集しても OK
Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 44 / 59
実際のプロジェクト運用の例
.gitignore ファイルの作成
右の書き方で、下記のものを管理対象にしないことになる
• csv ファイル
• xlsx ファイル
• report ディレクトリ(フォルダ)
より詳細な書き方は下記などを参照
• https://qiita.com/inabe49/
items/16ee3d9d1ce68daa9fff
Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 45 / 59
実際のプロジェクト運用の例
README と.gitignore をリモートに反映
• 作成したファイルを、デフォルトのブランチである master に反映させる
$ git add README.md
$ git commit –m ”create README.md”
$ git add .gitignore
$ git commit –m ”create .gitignore”
$ git push origin master
Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 46 / 59
実際のプロジェクト運用の例
ブランチの作成
目標とするブランチ構造と各ブランチの役割
Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 47 / 59
実際のプロジェクト運用の例
ブランチの作成
1. master ブランチ
• 固定した版(動くことが保証されている版)を置く
• develop からのみマージする
2. develop ブランチ
• 開発中の版を置く
• 機能開発用ブランチはここから枝分かれさせる
3. dev_function_X
• 機能 X を開発するためのブランチ
• 機能が完成したら develop へマージする
Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 48 / 59
実際のプロジェクト運用の例
ブランチの作成
• ブランチを作成し枝分かれさせる(push でリモートにも反映させる)
• 俗に「ブランチを切る」と言う
$ git checkout –b develop
> Switched to a new branch ’develop’
$ git branch
> * develop   # 新たに作成した develop ブランチへ移動した
> master
$ git push origin develop
Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 49 / 59
実際のプロジェクト運用の例
コードの開発
• develop ブランチでコードの雛形を作成し、push する
• 解析用ディレクトリの構成をここで作成してもよい
$ touch main_analysis.sas
           ↓  
~~~main_analysis.sas を編集~~~
           ↓  
$ git add main_analysis.sas
$ git commit –m ”create main_analysis.sas”
$ git push origin develop    # develop ブランチへ push
Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 50 / 59
実際のプロジェクト運用の例
コードの開発
• dev_function_1 ブランチを作成し(ブランチを切り)、main_analysis.sas
に機能 1 を追加する
$ git checkout –b dev_function_1
$ git push origin dev_function_1
           ↓  
~~~main_analysis.sas を編集し機能 1 を追加~~~
           ↓  
$ git add main_analysis.sas
$ git commit –m ” 機能 1 を追加”  # 日本語でも OK
$ git push origin dev_function_1 # dev_function_1 ブランチへ push
Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 51 / 59
実際のプロジェクト運用の例
プルリクエストを出す
Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 52 / 59
実際のプロジェクト運用の例
プルリクエストを出す
Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 53 / 59
実際のプロジェクト運用の例
マージする
Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 54 / 59
実際のプロジェクト運用の例
develop ブランチの変更をローカルに反映する
• ローカルで develop ブランチへ戻り、リモートでなされた変更
(dev_function_1 の統合)を pull コマンドにより反映する
$ git checkout develop
$ git pull origin develop
• ブランチ移動は commit 後でないとできないので注意(stash コマンドと
いう一時的な回避方法はある)
• あとは同様に機能 2, 機能 3, …を追加していく
Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 55 / 59
さらなる話題
さらなる話題
master ブランチが main ブランチに
• リポジトリのデフォルトブランチ名が、2020 年 10 月より master ブラン
チ -> main ブランチへと変更になるようです
• 2020 年 10 月以前より存在するリポジトリでは変わらず master ブランチ
がデフォルトのようです
• 現在はまだ master として使用しても動作上の問題はありません
Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 56 / 59
さらなる話題
Git はコマンドラインでなくても使える
• 今回はコマンドラインによる CUI での操作方法の紹介がメインであった
• CUI はハードルが高いと感じる場合、GUI での操作が可能なツールも開発
されている(GitGUI, TortoiseGit, SourceTree, GitHub Desktop)
• ただし、Git の機能をフル活用しようと思った場合は CUI の方が良い
Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 57 / 59
さらなる話題
GitHub がコマンドラインでも使える
• GitHub CLI ver.1.0 が最近リリースされ、GitHub がコマンドラインでも使
用できるようになりました
• Web ブラウザにアクセスして手動で行っていた作業をコマンドラインで
実現できます
Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 58 / 59
さらなる話題
運用ルールの策定
複数人や組織で使用する場合、ルールを策定することで運用がスムーズ
になる
• リポジトリの命名規則
• プルリクエストの記入項目(どのような変更を、どのような目的で行っ
たのか?)
• README に書く項目(ex. 各ディレクトリやファイルの役割, 動作環境,
etc…引継ぎコストを下げる)
• etc ...
Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 59 / 59

医療データ解析者へ向けた Git・GitHub 入門

  • 1.
    医療データ解析者へ向けた Git・GitHub 入門 YuiTomo October 25, 2020 @tomoybs Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 1 / 59
  • 2.
    目次 1 目的 2 解析プログラムのバージョン管理(よくある実態) 3どういった問題があるのか? 4 Git · GitHub の紹介 5 Git · GitHub を使ってみよう 6 実際のプロジェクト運用の例 7 さらなる話題 Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 2 / 59
  • 3.
  • 4.
    目的 本資料の目的 • Git, GitHubというツールを知る • Git, GitHub を使ったコード開発のイメージを掴む • Git, GitHub の最小限の機能を使って開発ができるようになる Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 3 / 59
  • 5.
  • 6.
    解析プログラムのバージョン管理(よくある実態) あるある管理(?) • XX 試験統計解析.sas •XX 試験統計解析 _2.sas • XX 試験統計解析 _2(〇〇先生更新).sas • XX 試験統計解析 _3(統合済み).sas • XX 試験統計解析 _4.sas • XX 試験統計解析 _4_1.sas • XX 試験統計解析 _4_ 最終版.sas • XX 試験統計解析 _var1 固定.sas Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 4 / 59
  • 7.
    解析プログラムのバージョン管理(よくある実態) 少し進化した管理方法 • 20200829_XX 試験統計解析.sas •20200904_XX 試験統計解析.sas • 20200928_XX 試験統計解析.sas Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 5 / 59
  • 8.
  • 9.
    どういった問題があるのか? Case 1. 変更前に戻りたい YuiTomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 6 / 59
  • 10.
    どういった問題があるのか? Case 1. 変更前に戻りたい 日付管理でも大丈夫? YuiTomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 7 / 59
  • 11.
    どういった問題があるのか? Case 1. 変更前に戻りたい しかし現実には... YuiTomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 8 / 59
  • 12.
    どういった問題があるのか? Case 1. 変更前に戻りたい しかし現実には... YuiTomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 9 / 59
  • 13.
    どういった問題があるのか? Case 1. 変更前に戻りたい 問題点 •現実には変更内容が多岐にわたり、単純に追跡して統合するのは大きな 労力が必要 • 度重なる修正を保ったまま変更前に戻ることはほとんど不可能 • 変更のたびに管理表のような書類を別に作成するのも面倒 Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 10 / 59
  • 14.
    どういった問題があるのか? Case 2. 複数人での作業 追加機能を切り分ければ大丈夫? YuiTomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 11 / 59
  • 15.
    どういった問題があるのか? Case 2. 複数人での作業 しかし現実には... YuiTomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 12 / 59
  • 16.
    どういった問題があるのか? Case 2. 複数人での作業 しかし現実には... YuiTomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 13 / 59
  • 17.
    どういった問題があるのか? Case 1. 変更前に戻りたい 問題点 •現実には変更内容が多岐にわたり、単純に追跡して統合するのは大きな 労力が必要 • 作業者それぞれが独自に行った変更まで追跡するのは非常に面倒 • 変更の競合を追跡することも面倒 Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 14 / 59
  • 18.
    Git · GitHubの紹介
  • 19.
    Git · GitHubの紹介 Git とは? • 分散型バージョン管理システム • コマンドラインで動作するソフトウェア Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 15 / 59
  • 20.
    Git · GitHubの紹介 分散型とは? • リモートとローカルにそれぞれ作業用のリポジトリ(変更管理場所)が 存在する • 用語は後ほど説明します Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 16 / 59
  • 21.
    Git · GitHubの紹介 GitHub とは? • ソースコードホスティングサービス(クラウドのようなもの) • ローカルとリモートの「リモート側」 • ブラウザからアクセスできる Web サービス Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 17 / 59
  • 22.
    Git · GitHubの紹介 Git, GitHub を使うと何が嬉しいのか? • ファイル名変更や管理表によるバージョン管理に頼らなくて良い •「枝」のように分枝させコード更新ができる • 複数人での共同開発がやりやすい Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 18 / 59
  • 23.
    Git · GitHubを使ってみよう
  • 24.
    Git · GitHubを使ってみよう Git のインストール Windows の場合: • Git for windows をダウンロード • https://git-scm.com/download/win •(慣れている方は WSL で) Mac の場合: • コマンドライン・デベロッパー・ツールをダウンロード Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 19 / 59
  • 25.
    Git · GitHubを使ってみよう Git をどこから使う? Windows の場合: • Git Bash を使用 • Git for windows をインストールすると入っている •(慣れている方は WSL で) Mac の場合: • ターミナルを使用 Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 20 / 59
  • 26.
    Git · GitHubを使ってみよう Bash コマンド(最低限) 息をするように使えるようになっておくと楽です Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 21 / 59
  • 27.
    Git · GitHubを使ってみよう GitHub を使用する準備 • GitHub(https://github.com )へアクセスしユーザー登録 • コマンドラインから接続(SSH 接続)できるように、SSH キーを作成し GitHub へ登録(下記 URL などを参照) • https://qiita.com/shizuma/items/2b2f873a0034839e47ce Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 22 / 59
  • 28.
    Git · GitHubを使ってみよう Git · GitHub の用語 • リポジトリ • ローカルリポジトリ • リモートリポジトリ • ブランチ • プルリクエスト • マージ Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 23 / 59
  • 29.
    Git · GitHubを使ってみよう リポジトリ • ファイルやフォルダ(ディレクトリ)の変更履歴を管理する場所のこと •「バージョン管理したいコード類が入っているフォルダ」 Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 24 / 59
  • 30.
    Git · GitHubを使ってみよう ローカルリポジトリ • 自分の(手元の)作業環境にあるリポジトリ Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 25 / 59
  • 31.
    Git · GitHubを使ってみよう リモートリポジトリ • 自分の環境から「離れた」専用サーバー上にあるリポジトリ • GitHub 上のリポジトリはリモートリポジトリに該当 Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 26 / 59
  • 32.
    Git · GitHubを使ってみよう リモートリポジトリ • リモートリポジトリは複数人(複数の作業環境)で共有できる Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 27 / 59
  • 33.
    Git · GitHubを使ってみよう ブランチ • 並行して 複数のファイル変更やバージョンを管理する機能 Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 28 / 59
  • 34.
    Git · GitHubを使ってみよう プルリクエスト • レビューアー(他の作業者 or 自分)に変更(ブランチ)の統合を依頼す ること • プルリクエストを受けたレビューアーがコードレビューを行い、変更を 統合する Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 29 / 59
  • 35.
    Git · GitHubを使ってみよう マージ • 異なるブランチを統合すること Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 30 / 59
  • 36.
    Git · GitHubを使ってみよう Git コマンドの使い方(最低限) • add • commit • push • pull • checkout • branch • clone Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 31 / 59
  • 37.
    Git · GitHubを使ってみよう add コマンド • 更新内容を管理対象に追加する $ git add 更新対象としたいもの • 更新したファイル(main_analysis.sas)を管理対象に追加する $ git add main_analysis.sas • 更新したフォルダ・ディレクトリ(analysis/)を管理対象に追加する $ git add analysis • カレントディレクトリ以降の階層にある更新したファイル, フォルダ・デ ィレクトリを全て管理対象に追加する $ git add . Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 32 / 59
  • 38.
    Git · GitHubを使ってみよう commit コマンド • add で管理対象にした更新内容を保存する • –m オプションで更新メッセージ(コミットメッセージ)を追加する $ git commit –m ” メッセージ(変更の概要など)” • ”modify covariates of linear regression” というメッセージを付与して変 更内容を保存する $ git commit –m ”modify covariates of linear regression” Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 33 / 59
  • 39.
    Git · GitHubを使ってみよう push コマンド • ローカルリポジトリでの変更内容(commit した内容)をリモートリポジ トリに反映する $ git push origin ブランチ名 • コミット内容をリモートの master ブランチへ反映する $ git push origin master Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 34 / 59
  • 40.
    Git · GitHubを使ってみよう pull コマンド • リモートリポジトリの内容をローカルリポジトリに反映する $ git pusll origin ブランチ名 • リモートの master ブランチをローカルの master ブランチへ反映する $ git pull origin master Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 35 / 59
  • 41.
    Git · GitHubを使ってみよう checkout コマンド • 新しいブランチを作成してそこへ移動する $ git checkout -b 新しいブランチ名 • ローカルリポジトリでブランチを移動する $ git checkout ブランチ名 • develop ブランチを作成しそこへ移動する $ git checkout -b develop • master ブランチへ移動する $ git checkout master Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 36 / 59
  • 42.
    Git · GitHubを使ってみよう branch コマンド • 現在のブランチ一覧を表示する $ git branch • リモートリポジトリのブランチも含めた一覧を表示する $ git branch -a • master, develop ブランチが存在し、master にいる際に現在のブランチ 一覧を表示する $ git branch > develop > * master Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 37 / 59
  • 43.
    Git · GitHubを使ってみよう clone コマンド • リモートリポジトリと同じものをローカルに作成する $ git clone クローン URL • リモートリポジトリの特定のブランチと同じものをローカルに作成する $ git clone –b ブランチ名クローン URL • t-yui の causaltrtRiskRatioCI リポジトリと同じものをローカルに作成す る(HTTPS URL, SSH URL のいずれでも可) $ git clone https://github.com/t-yui/causaltrtRiskRatioCI.git $ git clone git@github.com:t-yui/causaltrtRiskRatioCI.git Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 38 / 59
  • 44.
  • 45.
    実際のプロジェクト運用の例 リポジトリの作成とクローン • GitHub へアクセスし、リポジトリを作成する YuiTomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 39 / 59
  • 46.
    実際のプロジェクト運用の例 リポジトリの作成とクローン Yui Tomo (@tomoybs)医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 40 / 59
  • 47.
    実際のプロジェクト運用の例 リポジトリの作成とクローン Yui Tomo (@tomoybs)医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 41 / 59
  • 48.
    実際のプロジェクト運用の例 リポジトリの作成とクローン • Git Bash(Windows) やターミナル (Mac) へ移動し、リポジトリをローカ ルにクローンする $ cd ∼/Develop    # リポジトリを置きたいディレクトリへ移動 $ git clone https://github.com/t-yui/test_repo.git $ ls > test_repo/   # test_repo リポジトリが作成されている $ cd test_repo $ ls –a > ./ ../ .git/   # .git/というディレクトリが git 管理の本体 Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 42 / 59
  • 49.
    実際のプロジェクト運用の例 README ファイルの作成 README ファイルとは? •リポジトリの説明を記述するファイル • マークダウン形式で記述する $ touch README.md    # touch コマンドでファイル作成 • touch コマンドなどでファイルを作成する • その後は、VSCode, Atom, メモ帳などのテキストエディタで編集する • コマンドラインで作業を続けたい場合は vim 等で作成&編集しても OK Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 43 / 59
  • 50.
    実際のプロジェクト運用の例 .gitignore ファイルの作成 .gitignore ファイルとは? •管理対象にしたくないものを記述するファイル • 特に、医学系研究ではデータ(xlsx, csv, sas7bdat, sav など)を誤ってア ップロードしないためにも、作成を推奨。 $ touch .gitignore    # touch コマンドでファイル作成 • touch コマンドなどでファイルを作成する • その後は、VSCode, Atom, メモ帳などのテキストエディタで編集する • コマンドラインで作業を続けたい場合は vim 等で作成&編集しても OK Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 44 / 59
  • 51.
    実際のプロジェクト運用の例 .gitignore ファイルの作成 右の書き方で、下記のものを管理対象にしないことになる • csvファイル • xlsx ファイル • report ディレクトリ(フォルダ) より詳細な書き方は下記などを参照 • https://qiita.com/inabe49/ items/16ee3d9d1ce68daa9fff Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 45 / 59
  • 52.
    実際のプロジェクト運用の例 README と.gitignore をリモートに反映 •作成したファイルを、デフォルトのブランチである master に反映させる $ git add README.md $ git commit –m ”create README.md” $ git add .gitignore $ git commit –m ”create .gitignore” $ git push origin master Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 46 / 59
  • 53.
  • 54.
    実際のプロジェクト運用の例 ブランチの作成 1. master ブランチ •固定した版(動くことが保証されている版)を置く • develop からのみマージする 2. develop ブランチ • 開発中の版を置く • 機能開発用ブランチはここから枝分かれさせる 3. dev_function_X • 機能 X を開発するためのブランチ • 機能が完成したら develop へマージする Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 48 / 59
  • 55.
    実際のプロジェクト運用の例 ブランチの作成 • ブランチを作成し枝分かれさせる(push でリモートにも反映させる) •俗に「ブランチを切る」と言う $ git checkout –b develop > Switched to a new branch ’develop’ $ git branch > * develop   # 新たに作成した develop ブランチへ移動した > master $ git push origin develop Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 49 / 59
  • 56.
    実際のプロジェクト運用の例 コードの開発 • develop ブランチでコードの雛形を作成し、pushする • 解析用ディレクトリの構成をここで作成してもよい $ touch main_analysis.sas            ↓   ~~~main_analysis.sas を編集~~~            ↓   $ git add main_analysis.sas $ git commit –m ”create main_analysis.sas” $ git push origin develop    # develop ブランチへ push Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 50 / 59
  • 57.
    実際のプロジェクト運用の例 コードの開発 • dev_function_1 ブランチを作成し(ブランチを切り)、main_analysis.sas に機能1 を追加する $ git checkout –b dev_function_1 $ git push origin dev_function_1            ↓   ~~~main_analysis.sas を編集し機能 1 を追加~~~            ↓   $ git add main_analysis.sas $ git commit –m ” 機能 1 を追加”  # 日本語でも OK $ git push origin dev_function_1 # dev_function_1 ブランチへ push Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 51 / 59
  • 58.
    実際のプロジェクト運用の例 プルリクエストを出す Yui Tomo (@tomoybs)医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 52 / 59
  • 59.
    実際のプロジェクト運用の例 プルリクエストを出す Yui Tomo (@tomoybs)医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 53 / 59
  • 60.
    実際のプロジェクト運用の例 マージする Yui Tomo (@tomoybs)医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 54 / 59
  • 61.
    実際のプロジェクト運用の例 develop ブランチの変更をローカルに反映する • ローカルでdevelop ブランチへ戻り、リモートでなされた変更 (dev_function_1 の統合)を pull コマンドにより反映する $ git checkout develop $ git pull origin develop • ブランチ移動は commit 後でないとできないので注意(stash コマンドと いう一時的な回避方法はある) • あとは同様に機能 2, 機能 3, …を追加していく Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 55 / 59
  • 62.
  • 63.
    さらなる話題 master ブランチが mainブランチに • リポジトリのデフォルトブランチ名が、2020 年 10 月より master ブラン チ -> main ブランチへと変更になるようです • 2020 年 10 月以前より存在するリポジトリでは変わらず master ブランチ がデフォルトのようです • 現在はまだ master として使用しても動作上の問題はありません Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 56 / 59
  • 64.
    さらなる話題 Git はコマンドラインでなくても使える • 今回はコマンドラインによるCUI での操作方法の紹介がメインであった • CUI はハードルが高いと感じる場合、GUI での操作が可能なツールも開発 されている(GitGUI, TortoiseGit, SourceTree, GitHub Desktop) • ただし、Git の機能をフル活用しようと思った場合は CUI の方が良い Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 57 / 59
  • 65.
    さらなる話題 GitHub がコマンドラインでも使える • GitHubCLI ver.1.0 が最近リリースされ、GitHub がコマンドラインでも使 用できるようになりました • Web ブラウザにアクセスして手動で行っていた作業をコマンドラインで 実現できます Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 58 / 59
  • 66.
    さらなる話題 運用ルールの策定 複数人や組織で使用する場合、ルールを策定することで運用がスムーズ になる • リポジトリの命名規則 • プルリクエストの記入項目(どのような変更を、どのような目的で行っ たのか?) •README に書く項目(ex. 各ディレクトリやファイルの役割, 動作環境, etc…引継ぎコストを下げる) • etc ... Yui Tomo (@tomoybs) 医療データ解析者へ向けた Git・GitHub 入門 October 25, 2020 59 / 59