データ分析向けのGitHubの使い方について考えて、ChatGPTにも聞いてみた

チーム開発と同様に、チームでデータ分析を進める場合にもGitHubによるソースコードの管理を求められることが多い。

目的がデータ分析であれプログラムを作成しているのだからとGitHubを使うことが当たり前に受け入れられがちだが、実際に作業を進めるとGitHubを使いこなせていないと私は感じてきた。

理由のひとつには私がGitHubに習熟していないことがあるのだが、チーム開発とデータ分析ではGitHubの使い方を変えるべきなのにできていないことも別の理由として考えられる。
ところがデータ分析向けのGitHubの使い方を検索しても情報はあまり多く得られなかった。後述するが、話題のChatGPTに質問しても求める回答が得られなかったので、自分の思うところを文章にまとめることにした。

なお、私はチーム開発でGitHubを本格的に使ったことがない(ソフトウェアエンジニアの方から、こうブランチを切ってこうプルリクを出してください、といった指示どおりに使ったことがある程度)ので、チーム開発におけるGitHubの使い方については表層的なことを書いており、もしかしたら適当なことを書いてしまっているかもしれない。

ここでのデータ分析とは

プロダクト開発やサービスへの連携とは切り離されたデータ分析業務の成果物をGitHubで管理する方法について考える。データ分析関連のソースコードがmain(master)ブランチにpushされたら何らかのプロダクトやサービスにデプロイされるようなことはないということだ。言い換えれば、データ分析に閉じた目的でGitHubを使う。

GitHubの機能を改めて整理する

GitHubは複合的な機能を備えたサービスであるが、プロダクト開発と密結合してしまったためにユーザが機能の切り分けをしておらず、データ分析のように一般的な開発からずれたユースケースで違和感をもたらしているのではないかと考える。そこでGitHubの機能を4つに整理した。

第一にソースコードをはじめとするファイルの保管・共有である。GitHubの特徴的な機能というよりは機能の前提となっている仕様といってもいいくらいだが、この観点からだとGitHubはS3やGoogle Driveと似たような機能を提供しているといえる。

第二にバージョン管理である。バージョンごとのソースコードの差分を容易に確認もでき、レビューにも便利である。

第三にブランチの管理である。本番環境と開発環境をブランチで切り分けることで、本番環境への影響を取り除きながらGitHubを活用したチーム開発を進められる。

第四にCI/CDとの連携である。おもにmainブランチをCI/CDに組み入れることで、デプロイが自動化できる。

データ分析で使うGitHubの機能とは

では、4つの機能をデータ分析ではどのように使うのか。

ファイルの保管・共有機能は当然に使う。

バージョン管理はどうだろうか。データ分析はJupyterのようなノートブックで進めることが多いが、ノートブックではバージョン管理自体はできるものの差分をわかりやすく可視化できない。そもそも「ノートブック」はその名のとおり、ソースコードの実行結果を見やすくするフォーマットであり、バージョン管理を前提としていない。

ブランチの管理は本番環境と開発環境の切り分けが肝であるが、データ分析業務単体ならば本番環境という概念は存在しない。ということは、本番環境を前提にしたブランチの管理は不要ということになる。

言わずもがな、CI/CDとの連携も不要である。

こうしてみると、ほとんどファイルの保管・共有にしか使っていない。バージョン管理もできるが、差分を見たりといったチーム開発での用途とは異なる。

データ分析向けのGitHub利用でやらなくていいと思うこと、やったほうがよさそうなこと

以上を踏まえると、開発用ブランチを切ったりせずに最初からmainにpushすればいいのかなと思った。
それに付随して、プルリクエストなどもやらなくてよさそうだ。データ分析におけるレビューはプルリクを介してでなく、pushしてからやればいい性質のものだと思う。
それとは別に、作成したノートブックを見やすくするようなフォルダ構成とか、間違ってほかの作業者のファイルを削除しないようにする運用とか、チーム内でのルールは決めておくべきだろう。

ChatGPTに聞いてみたら

ここまで考えてから、ChatGPTに聞けば全部答えてくれたのではと思い、事後的に質問を投げてみたら、ブランチの管理が〜、バージョン管理が〜、といった答えが返ってきた。私はChatGPTはどんどん活用すべきと考えているのだが、幸か不幸か今回に関してはChatGPTとかぶらない内容になった。