データサイエンティストのための Git 入門

2022-07-04
How to be a Developer

Author : 宇賀神みずき

皆様こんにちは。AWS の パートナーソリューションアーキテクトの 宇賀神みずき こと しょぼちむ(@syobochim) です。開発プロセスの改善が好きで、「いちばんやさしい Git & GitHub の教本」という書籍も執筆しました。

データサイエンティストの皆様は日頃チームで開発をされているでしょうか ?
機械学習の研究・開発を一人で進めている方もいらっしゃると思います。一方で、完成したモデルを活用するために、サービスやプロダクトを開発するチームに参加する予定の方もいらっしゃると思います。

私がパートナーソリューションアーキテクトとして様々なチームをご支援させていただく中で、 Git は頻繁に使われていました。そのため、データサイエンティストの方もチームでの開発に加わるときは Git を使えることが求められると思います。

そこで、データサイエンティストの方に向けた「チーム開発を意識した Git の使い方」について連載記事でご紹介していきます。
初回となる本記事では、基本的な Git の操作についてご紹介します。まずは Git で変更履歴を記録して GitHub にアップロードしてみましょう。チームでの開発に不可欠な使い方は次回ご紹介していきます。

Git の操作は、 Amazon SageMaker Studio Lab (以降、Studio Lab) を利用します。 Studio Lab はデータサイエンティストの方に馴染みがある JupyterLab がインターネット上で手軽に利用でき、かつ Git の操作を GUI で簡単に行えるため練習に適しています。なお、普段利用されている JupyterLab を使って操作を学びたい方は、jupyterlab-git  のプラグインを利用すると同じ操作ができます。


Amazon SageMaker Studio Lab とは

Studio Lab はメールアドレスのみで利用できる無料の JupyterLab 環境です。 AWS アカウントなしに利用できます。

Studio Lab を使うと、ターミナルを使わずに画面の操作だけで簡単に Git が扱えます。もちろんターミナルも使えるので、慣れている方はターミナルを使うこともできます。12 時間の CPU と4 時間の GPU 、 15GB の静的ストレージが使えるため機械学習の検証をするには十分な環境です。 Studio Lab について更に知りたい方は「データサイエンスの学びを支援する Amazon SageMaker Studio Lab をグラレコで解説」でイラストを使いながら解説しているので読んでみてください。

Studio Lab のアカウントは Request Account から申請できます。使い方は Studio Lab 日本コミュニティのページ をご参照ください。


Git と GitHub

Git はファイルの変更履歴を記録できるオープンソースのソフトウェアです。(バージョン管理ツールとも呼ばれます。) そして、 GitHub は Git で管理したファイルと変更履歴を世界中の開発者と共有できるサービスです。

開発をしていると日々たくさんのファイルを作成・変更すると思います。変更を繰り返す中で「何を変更したのか差分が見たい」「あの時の状態にファイルを戻したい」といった理由から、ファイルをコピーしてバックアップを取った経験がある方もいるのではないでしょうか。

Git を利用することで、バックアップを取らなくても手軽に差分を確認したり、記録した状態にいつでも戻って作業したりできるので、開発をスムーズに進めることができます。

今回は Studio Lab 上から Git を操作しますが、パソコンにインストールして Git を使うこともできます。

変更履歴を共同で使うネットワーク上のリポジトリ (リモートリポジトリと呼ばれます) にアップロードすることで、他の人と変更内容を共有できます。リモートリポジトリをホスティングするサービスはたくさんありますが、今回は GitHub を利用していきます。

GitHub のアカウントをお持ちでない方は GitHubのトップページ  からアカウントを作成してください。


練習用の GitHub リポジトリを用意しよう

実際に Git でファイルの履歴を管理したり、 GitHub に履歴をアップロードしてみましょう !

そのために、まずは GitHub のリポジトリを用意します。 GitHub は他の人が作ったリポジトリを自分のリポジトリとして複製する「フォーク」という機能を提供しています。フォークを使うことで、複製元のリポジトリに影響を与えずにファイルの変更や履歴の管理ができます。

今回は機械学習モデルの開発プロセスを学ぶためのリポジトリである aws-ml-enablement-handson  を利用します。リンクをクリックし、 GitHub のページが開いたら画面右上の「Fork」のボタンをクリックしてリポジトリをフォークしましょう。

Create a new fork のページではそのままの設定で 「Create fork」をクリックします。
しばらく待つとあなたのアカウントに aws-ml-enablement-handson のリポジトリが作成されました ! これはあなた専用のリポジトリであり、自由にファイルの変更を試してみることができます。

Code」のボタンをクリックし、 HTTPS のタブをクリックします。表示された .git で終わる URL をメモしておきましょう。

それでは、フォークしたリポジトリを使って、 Git の操作を学んでいきましょう。


Studio Lab にリポジトリをクローンしよう

GitHub のようなリモートリポジトリからファイルを手元にコピーしてくる操作のことを「クローン」(Clone) と呼びます。

早速、先ほどフォークしたリポジトリをクローンして、 Studio Lab の環境上でファイルを利用できるようにしましょう。

Studio Lab のプロジェクトを開いたら、左のサイドバーの上から 3 つ目にある、 Git の操作をするためのアイコンをクリックします。

環境を作ったばかりの方は、まだ Git のリポジトリが無いという意味のメッセージが表示されているかと思います。

Clone a Repository」のボタンをクリックしましょう。

表示された画面の「Git repository URL (.git)」のフォームに先ほどメモした GitHub のクローン用の URL を入力し、「Clone」のボタンをクリックします。

Confirm you want to build Conda environment」のポップアップが表示されたら「OK」ボタンをクリックします。この操作により、 environment.yml ファイルの定義に沿って必要なライブラリがインストールされた環境が構築されます。

これにより GitHub のリポジトリが Studio Lab の環境にコピーされ、ファイルを変更できるようになりました。


ファイルを変更しよう

変更履歴を記録するために、、ファイルを変更しておきましょう。

notebooks/02_analyze.ipynb を開き、編集していきます。

「プログラミング演習のセクション」のエディタの左側に [2] と表示されている以下の箇所を、基本統計量を確認するように変更してみましょう。統計量の確認には describe 関数 を利用します。

Before

house_price_df.info()

After

house_price_df.describe()

書き換えが終わったら Shift + Enter キー もしくは、メニューバーの Run から「Run Selected Cells」をクリックして実行しましょう。変更した箇所のすぐ下に実行結果が反映されます。

このように Studio Lab を使うと簡単にプログラムを実行し、その結果をドキュメントに反映できます。結果を確認したら Ctrl + S (Mac の方は Command + S) でファイルを保存しましょう。


ファイルの状態を履歴として管理しよう

ファイルの状態をバージョンとして記録し、履歴の管理をしていきましょう !
なお、 Git ではファイルの状態を記録する操作を「コミット」と言い、その記録自体も「コミット」と呼びます。

コミットすることで、後からコミットした状態に戻れたり、ファイルの状態を確認したりできるようになります。

コミットは「分析の手法を変えた」「新しいデータを追加した」など、作業単位ごとに分けておけば、後から履歴を行き来することも容易になります。また、コミットがきれいに分割されていることにより、他の人が履歴を追いやすくなります。

左のサイドバーにある Git のマークをクリックすると、Changed に 先ほど変更した 02_analyze.ipynb が表示されています。

ファイル名にマウスオーバーすると表示される「」マークをクリックしましょう。 Changed から Staged にファイルが移動しました。 Staged に表示されたファイルだけが次の操作でコミットされ、ファイルの状態が記録されます。

(ファイルを新しく作成した場合は Untracked にファイルが表示されますが、同じ手順で Staged に移動できます。)

画面下部に表示された Summary のフォームに変更内容を以下のように記載して、 「COMMIT」ボタンをクリックします。ここで Summary のフォームに書いたメッセージは「コミットメッセージ」と言い、コミットと共に保存されます。

コミットメッセージは、他の方が読んだ時にコミットの内容がわかるように書いておきましょう。また、「日本語で書くか、英語で書くか」や「1行で書くか、複数行で書くか」などは、チームの方針に合わせましょう。

house_prices の基本統計量を表示するよう変更

一番最初にコミットした時には、誰がコミットしたのかを設定するためのポップアップが表示されます。

GitHub のアカウントのユーザー名とメールアドレスと同じものを設定しておくと、 GitHub 上でもコミットとアカウントの紐付けが行われるのでオススメです。

これでコミットができました !

History タブを見てみると、先ほど作成したコミットが表示されています。この History の一覧では、誰が・いつコミットしたのかと、コミットメッセージが表示されています。

表示されているコミットをクリックすると、そのコミットでどのファイルが変更されたのか確認できます。

クリックすると拡大します

さらに、ファイル名をクリックするとそのコミットでの差分を確認できます。削除されたものは赤い背景、追加されたものは緑の背景でご確認いただけます。

Studio Lab を利用すると実行結果の差分もこのようにわかりやすく表示されます。

クリックすると拡大します


コミットを GitHub にアップロードしよう

コミットを GitHub にアップロードしましょう。リモートリポジトリにコミットを反映させる操作を「プッシュ」と言います。GitHub にプッシュしておくことで、変更履歴がアップロードされ、他の人があなたのファイルの変更を見られるようになります。また、万が一、操作ミスをして手元のリポジトリが消えてしまっても、 GitHub から再びクローンすることで復元できます。

プッシュする前に、認証のために GitHub のアクセストークンの作成をしておきましょう。アクセストークンの作成方法については GitHub の公式ドキュメント「個人アクセストークンを使用する」をご参照ください。(repo の権限が設定されたアクセストークンが必要です。)

Git のメニューに表示されている雲と上矢印が書かれたボタンをクリックします。

ポップアップが表示されるので、 GitHub のユーザー名とアクセストークンを入力し、 OK をクリックします。(パスワードでの認証は利用できないのでご注意ください。)

これで、 GitHub へコミットがプッシュされました !

GitHub のリポジトリを見てみましょう。

プッシュが成功すると、フォークしたリポジトリに先ほどのコミットが表示されます。また、ここで表示されているコミットメッセージをクリックすると、ファイルの差分を確認できます。

クリックすると拡大します

GitHub では、実行結果の差分がJSON形式で表示されました。
これは、実行ファイルの「.ipynb」が内部でJSON形式になっているためです。

Studio Lab では、実行結果の差分をビジュアライズして表示してくれるので、 Studio Lab の方が差分が見やすくなっていますね。

クリックすると拡大します

参考:Studio Lab での差分
(クリックすると拡大します)


Git で管理したくないファイル

Gitには、バージョン管理したくないファイルを無視する機能もあります。
Python だと、実行を高速化するために .pyc ファイルや __pycache__ フォルダが自動生成されます。開発者自身で作成したコードではないので、変更管理に含める必要はないでしょう。また、パスワードなどのセキュリティ情報が記載されたファイルをバージョン管理しないチームもあります。

そのような Git で管理したくないものがある場合は、 .gitignore ファイルを作成し、ファイルとフォルダを指定しましょう。指定したファイルやフォルダは Git から無視されます。

メニューバーの「Git」から「Open .gitignore」をクリックすると、このリポジトリに既に格納されていた .gitignore ファイルが開きます。( .gitignore ファイルが存在しない場合はファイルが新規に作成されます。)

.gitignore ファイルの中身を見ていきましょう。

先頭に記載されているフォルダやファイルは、 Python のモジュールをコンパイルしたときに作成されるものです。

フォルダを指定すると、そのフォルダに入っているファイルは全て無視されます。
正規表現を使って対象を指定することも出来、 *.py[cod] の指定では、拡張子が .pyc .pyo .pyd のファイルを全て無視します。

# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

クリックすると拡大します

クリックすると拡大します


まとめ

いかがでしたでしょうか ? 本記事では、 Studio Lab を使った Git の基本的な操作についてご紹介しました。このように、 Studio Lab を使うと、 GUI を使って簡単に Git を操作できます。

一人で Git を使う場合は今回の操作ができていれば問題ありません。しかし、チーム開発をする時には、他にも意識しなければいけないことがあります。

次回は、そんな、チーム開発をするときのポイントについてご紹介していきます。お楽しみに !


builders.flash メールメンバーへ登録することで
AWS のベストプラクティスを毎月無料でお試しいただけます


筆者プロフィール

宇賀神 みずき (しょぼちむ)
アマゾン ウェブ サービス ジャパン合同会社
パートナーソリューションアーキテクト

SIer でのアプリケーション開発者を経験後、2020 年にパートナーソリューションアーキテクトとして AWS Japan に入社。主に開発者の方に向けてセミナーやワークショップを提供しています。
初心者向けの『いちばんやさしいGit&GitHubの教本』という本も書きました。
インドア派で家から一歩も出ずに生きられるよう画策中。

AWS を無料でお試しいただけます

AWS 無料利用枠の詳細はこちら ≫
5 ステップでアカウント作成できます
無料サインアップ ≫
ご不明な点がおありですか?
日本担当チームへ相談する