17 プログラミングの環境管理
快適にプログラミングの作業を続けるためには、コードを書くだけではなく、その「環境」であるフォルダーとファイルを管理することが欠かせない。この講義では、「環境管理」についての考え方と具体的なツールについて説明をする。
- 分類と順序
 - フォルダー構造の整理
 - バージョン管理とGit
 - クラウド保存とGitHub
 - GitHubとRStudioによるGitの活用
 
(「環境」という言葉で、R、パッケージ、関連プログラムのバージョンのことを指すこともありますが、ここではより広い意味で使っています。)
1. 分類と順序
要点
世界には膨大な要素があるが、人が同時に操作できる対象は\(7 \pm 2\) までである
膨大な数の対象を分かりやすく示すには、
1.「近いもの」をグループにして分類し、ピラミッド型にして、各層における対象の数を\(\sim 7\)ほどにすること
- 分類には、“Mutually Exclusive and Collectively Exhaustive” (MECE = ダブりなくモレなし)を心がける
 
- それぞれの順序を論理的に並べること
 
2. フォルダー構造の整理
要点
- フォルダーの分類には3つのタイプがあり、それらを組み合わせて使うことが多い
- by topic: プロジェクトや授業ごと … 一般に、幹に近い枝により適切
 - by time: 日付や学期ごと
 - by type: ワードファイルやRファイルなど … 一般に、枝葉の先により適切
 
 - フォルダーの順序は、デフォルトで「アルファベット順」になっており、頭に”01_…“などの番号をふることにより、論理的な順序に並び替えることができる
- by importance: 重要度順
 - by time: 時系列順
 - by structure: 構造順
 
 - Windowsで「フォルダーツリー」を印刷するには、以下のステップを踏む
 - 補足: 検索機能やショートカットを使うこともできる
 - 補足: 1階層のフォルダーの多さと、階層の深さの間にトレードオフがある
 
3. バージョン管理とGit
要点
- バージョン管理 = 複数のバージョン (ファイルの状態) を保存しておくこと
- 過去のバージョンを回復できるようしつつ
 - 現在のバージョンを明確に区別する必要がある
 
 - 自分なりのアプローチ: ファイルを異なる時点で「ファイル名」を変更して保存する
- 問題点(1) … ファイル名を考えることが大変で、実際と一貫性がないことがある
 - 問題点(2) … 何が最新ファイルか分からなくなることがある
 - 問題点(3) … データが膨大になる
 - 問題点(4) … いつ保存すればよいか分かりづらい
 
 - Gitによるアプローチ: 変更歴を
.gitファイルに保存するrepositoryを用いる- アプローチ(1) … ファイル名ではなく、変更内容をコメントとして「コミット」する (ファイル名はハッシュを使う)
 - アプローチ(2) … 変更歴は「隠れファイル」として封印する
 - アプローチ(3) … テキストファイルについて、
diff(変更点)のみを保存する - アプローチ(4) … (あまり本質的な解決策はない)
 
 - Gitを賢明に活用するコツ
.gitignoreを使って、保存したくないファイルを対象から外す- 可能な限り、
binaryファイルではなく、textファイルを使う 
 
4. クラウド保存とGitHub
要点
- クラウド保存 = 世界中に散らばっているデータセンターにデータを保存すること
- メリット1. 保管の安全性
 - メリット2. 共有の利便性
 - メリット3. 利用の柔軟性
 
 - GitHub = 
.gitのウェブサービス- ローカルとリモートのリポジトリを用いることによって、データの安全性を高める
 - 手順:
 
Clone= リポジトリをダウンロードするPull= 変更をダウンロードするStage= コミットする準備をするCommit= 変更を反映させる (Commit message= メールの件名のように)Push= アップロードをする
 - GitHubを賢明に活用するコツ
README.mdを使って、プロジェクト全体の説明をする
 
5. GitHubとRStudioによるGitの活用
要点
RStudioをGitHubのGraphical User Interface (GUI)として利用できる- Git/ GitHubの設定
自分のGitHubアカウントを作成する (http://github.com/)
Gitをインストールする (https://git-scm.com/downloads/)
RStudioのコンソールでアカウントを登録する(以下のの”TaroYNU”と “YNU_taro@ynumail.com”を自分のものに変更する)
install.packages("usethis") usethis::use_git_config(user.name = "TaroYNU", user.email = "YNU_taro@ynumail.com")リモートリポジトリをクローンする
 - RStudioを賢明に活用するコツ
.Rprojを用いてプロジェクト全体を管理することにより、作業ディレクトリを変更しなくてよくなる
 
(複数人で作業を進めるためには、ブランチやコンフリクトなどの重要な概念などがあるが、今回はここまでとしよう。)
参考文献
Minto, Barbara. “The Pyramid Principle: Logic in Writing and Thinking”. 2009 (originally, 1987.) Financial Times Prentice Hall
佐藤可士和 『佐藤可士和の超整理術』 2011. 日経ビジネス人文庫
株式会社オープングルーヴ, 昌子正俊「よくわかる入門Git」2019. 秀和システム
大串肇/久保靖資/豊沢泰尚 「Gitが、おもしろいほどわかる基本の使い方33 改訂新版」2019. MdNbooks
横田紋奈/宇賀神みずき「いちばんやさしいGit&GitHubの教本 人気講師が教えるバージョン管理&共有入門」2018.インプレス