Python基礎

【保存版】Git/GitHub入門:バージョン管理・ブランチ戦略・レビュー・自動化を“実務の型”で最短習得

「分析やノートブックは作れるけど、壊れない運用の“型”がない…」

「final_v3_fix2_LAST.xlsx地獄から抜け出して、レビューと自動化まで一気通貫で回したい!」

この記事では、未経験〜初学者が週10時間×1〜2週で、Gitの基本 → GitHub Flow → PR/レビュー → Issue運用 → タグ/リリース → GitHub Actions(最小CI)までを、“現場でそのまま使える”テンプレとチェックリストで網羅します。Notebook運用の地雷回避(出力クリア/差分)や.gitignore雛形PR/IssueテンプレコピペOKで配布します。

この記事で身に付く力

  • 壊れないGit運用の型(main保護+PR必須+小さなコミット)
  • 再現できる分析プロジェクト構成(雛形&.gitignore)
  • レビューとIssueの回し方(テンプレ配布)
  • タグ/リリースと最小CI(GitHub Actions雛形)

はじめに:現場で起きる“Git不在”の悲劇

私(ふみと)が最初に分析案件を回したとき、ファイル名はfinal_v3_fix2_LAST.xlsxだらけ。Notebookは出力が巨大で差分が読めず、ZIP共有で履歴も消滅。本番ブランチに直コミットされて壊れた状態を配布…という惨事もありました。解決策はシンプルで、GitHub Flow(main保護+PR運用)をベースに、小さなコミット×レビュー自動チェックを回すことです。

セットアップ:最初に一度だけの設定

# ユーザー情報
git config --global user.name "Your Name"
git config --global user.email "you@example.com"
# デフォルトブランチ名
git config --global init.defaultBranch main
# 改行コード(Windowsの混乱を減らす)
git config --global core.autocrlf input
# 差分を見やすく
git config --global color.ui auto

プロジェクト雛形と .gitignore(コピペOK)

project/
  ├─ data/
  │   ├─ raw/          # 受領データ(非追跡にすることが多い)
  │   └─ warehouse/    # SQLiteなど(非追跡)
  ├─ notebooks/
  ├─ src/
  ├─ reports/          # 図/Excel/PDF(必要に応じ非追跡)
  ├─ tests/
  ├─ .gitignore
  ├─ requirements.txt
  └─ README.md
# Python
__pycache__/
*.pyc
.venv/
.env
# Data / Outputs
/data/*
!/data/README.md
/reports/*
!/reports/README.md
*.sqlite
# Jupyter
.ipynb_checkpoints/
# OS/editor
.DS_Store
Thumbs.db

原則:生データ/DB/大きな成果物は追跡しません(入手手順はREADMEに)。空フォルダはREADME.md.gitkeepで保持します。

最初のコミットとメッセージ規約

cd project
git init
echo "# プロジェクト名" > README.md
git add .
git commit -m "feat: 初期雛形を追加 (構成/ignore/README)"

コミットメッセージの型(Conventional Commits簡易版)

  • feat: 機能追加、fix: バグ修正、docs: ドキュメント、refactor: 仕様不変の整理、chore: 付帯作業
  • 1行目は50文字程度で要約。必要なら空行→詳細/背景

GitHub接続とmain保護(PR必須化)

# GitHubで空のリポジトリ(project名)を作成後に接続
git remote add origin https://github.com/yourname/project.git
git branch -M main
git push -u origin main

Settings → Branchesmainを保護:直接push禁止/PR必須/レビュー1名以上/ステータスチェック必須

GitHub Flow:小さく作って小さくレビュー

基本原則は5つ:①mainはいつでも配布可能、②作業はトピックブランチ、③少し進んだらドラフトPR、④レビュー→CI通過→マージ、⑤配布時にタグ。

git switch -c feat/monthly-report
# 変更→テスト→コミット
git add -p
git commit -m "feat: 月次集計のSQLとNotebookを追加"
git push -u origin feat/monthly-report  # GitHubでPR作成

日常で強いコマンド(小技集)

git status
git diff
git add -p
git commit --amend             # 未push時のみ
git stash && git switch main   # 急用で退避
git log --oneline --graph --decorate --all

マージとリベースの使い分け

基本はマージ(PRでMerge commit or Squash)。リベースはローカル整理用途(自分のブランチをmainへ追随)。

git switch feat/monthly-report
git fetch origin
git rebase origin/main
# コンフリクト解消→テスト
git push --force-with-lease

注意:共有済みブランチへのrebase/force-pushは厳禁。

Notebookの“事故らない”運用(現場メモつき)

ポイントは3つ。①出力をクリアしてコミット(サイズ削減&差分可読)、②図はファイル保存reports/)でNotebookはパスだけ、③前処理は関数化してsrc/(Notebookは実験/説明に専念)。差分可視化にはnbdimeやGitHubのNotebook Diffが便利です。

ふみとの現場メモ

10年で100件以上回した結論:「出力クリア」だけでレビュー効率が段違いでした。画像出力をNotebook外に逃がすと、バージョンの食い違い事故も激減します。

# .git/hooks/pre-commit(chmod +xで実行権限付与)
#!/usr/bin/env bash
find . -name "*.ipynb" -print0 | xargs -0 -I {} jupyter nbconvert --ClearOutputPreprocessor.enabled=True --inplace {}

[内部リンク:Jupyter Notebookの基本] / [内部リンク:可視化入門]

PR(Pull Request)とレビューの型(テンプレ配布)

PRは小さく/短く(目安:〜200行)。依頼前にセルフレビューで誤字・不要ファイルを除去。目的→差分→動作確認の3点セットを明記します。

## 目的
- 例:月次集計と図を追加し、Excel出力まで自動化

## 変更点(Before/After)

* SQL: WITH monthly を追加
* report.py: ExcelWriter で Summary タブ出力

## 動作確認

* `python src/report.py` で report.xlsx が生成される

## 影響範囲

* なし(新規追加のみ)

Issue運用(軽量スクラム)

Issue=タスクの単位。ラベル(bug/feat/docs/…)、マイルストーン、Projects(ToDo → In progress → Review → Done)で流します。

### 概要
### ゴール(受け入れ条件)
### 参考

タグとリリース(配布の節目を明確に)

git switch main && git pull
git tag -a v0.1.0 -m "初回リリース: 月次集計+Excel出力"
git push origin v0.1.0

セマンティックバージョニング(最短メモ)

  • MAJOR:互換性破壊
  • MINOR:後方互換の機能追加
  • PATCH:後方互換の修正

最小のCI(GitHub Actions)で“壊れない”を担保

name: ci
on:
  pull_request:
  push:
    branches: [main]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with: { python-version: '3.11' }
      - run: pip install -r requirements.txt || true
      - run: python -m pip install pytest
      - run: pytest -q || echo "tests not found; skipping"

最初は落ちない仕組みから。のちにflake8/black/ruffNotebook出力クリア検査を追加すればOK。
[内部リンク:単体テストpytest入門(予定)]

セキュリティと秘匿情報の扱い

.envやAPIキーはコミットしない.gitignore)。GitHub ActionsではSecretsに保存して参照。もし誤ってコミットしたら、履歴から除去(git filter-repo等)&即時キー再発行が基本です。

読者タイプ別:最短導入プラン(3タイプ)

ミニプロジェクト課題(提出推奨)

「SQLite×月次レポート」リポジトリを作り、GitHub Flowで開発→PRレビュータグv0.1.0Actionsでpytestまで通す。

  • [ ] .gitignoreデータ/成果物を除外
  • [ ] main保護(PR必須/レビュー1名/ステータスチェック)
  • [ ] PRテンプレ/Issueテンプレを配置
  • [ ] Notebookは出力クリアでコミット
  • [ ] v0.1.0にタグ→GitHub Release作成
  • [ ] Actionsの最小CIが通る

付録A:よく使うコマンド早見表

# ブランチ
git switch -c feat/foo     # 作成+切替
git switch main            # 切替
# 差分/取り消し
git diff                    # 差分
git restore --staged file   # ステージ解除
git restore file            # 変更取り消し
# 追跡をやめる(ファイルは残す)
git rm --cached path/to/file

付録B:READMEテンプレ(最小)

# プロジェクト名
目的:誰の、どの意思決定を支援するか(1文)
再現手順:
1) python -m venv .venv && source .venv/bin/activate
2) pip install -r requirements.txt
3) python src/report.py  # Excel/図を出力
データ:data/raw/ 以下に配置(入手方法を記載)

付録C:トラブルシュートQ&A

Q. 誤って巨大ファイルをコミットgit rm --cachedで追跡解除→.gitignoreへ→新規クローン推奨。
Q. コンフリクトが怖い小さいPRこまめなpullgit add -pで意味の塊を丁寧に。
Q. Notebook差分が読めない出力クリア+図はファイル保存で可読性UP。


この記事から次に読むべきもの(内部リンク)

Jupyter Notebookの基本
【保存版】Jupyter Notebookの基本:環境構築・使い方・再現性・“読みやすいノート”設計まで完全ガイド

Jupyter Notebookは学習・検証・共有に最強の道具ですが、設計を間違えると再現できない・読みにくい・遅いノートになってしまいます。本記事は、未経験〜初学者が週10時間×1〜2週で、環境構築 ...

SQLite
【保存版】SQLite×Pythonで作る“ローカルDWH”——ETL・集計・レポート自動化の最短手順

ローカルでゼロ構築、ファイル1つで完結、サーバ不要。本記事はSQLite×Pythonで“毎日回る”ETL・集計・レポート自動化を最短で作るための完全ガイドです。データ設計→DB作成→ETL(取り込み ...

データレポート納品
【保存版】データレポート納品の型:要件定義→ETL→検証→可視化→Excel/PDF→引き継ぎまで、失注しないワークフロー完全版

“いい分析”より“伝わる納品”。副業や実務で評価されるのは、意思決定に効く1枚と再現できるパッケージを期限通り出せること。 本記事は、未経験〜初学者が週10時間×2〜3週で、要件定義→データ受領→ET ...

ポートフォリオ
【保存版】データ職のポートフォリオ完全ガイド|再現性・評価・LTまで

ポートフォリオって「作ったものの置き場」でしょ? いいえ。採用側が見たいのは「意思決定に効いた証拠」と「再現性」です。 本ガイドは、未経験〜初学者が週10時間×4〜6週で、テーマ選定→要件定義→データ ...

テスト
【コピペOK】pytestで“壊れないPython”を作る12ステップ

「昨日は動いてたのに、今日は壊れた…」 データ分析やETL、機械学習のコードで多発するこの悲劇。実は“テスト不在”が9割です。 本記事は、pytestで“壊れないPython”を作るための実務ガイド。 ...

伴走のご提案(任意)

Gitを押さえると、在宅×副業でも毎月回るレポートML実験が安全に進みます。短期でブランチ運用→PR→CIまで整えるなら、質問対応とレビューのあるスクールが近道。

TechAcademy データサイエンスコース(受講料:174,600円~ ※更に割引あり)

TechAcademy 無料相談

株式会社キカガク AI人材長期育成コース(受講料:237,600円~)

キカガク 無料相談

最近のコメント

    • この記事を書いた人
    • 最新記事

    ふみと

    このブログでは、データサイエンティストとして市場価値を上げる方法を独自にまとめて発信しています。

    【プロフィール】
    ・大手企業データサイエンティスト/マーケティングサイエンティスト(10年、年収900万円台)/案件100件以上
    ・資格:JDLA E資格(日本ディープラーニング協会主催)/JDLA Community(CDLE会員)/Advanced Marketer/ビジネス統計スペシャリスト/統計検定2級/TOEIC 805
    ・スキル:Python/Tableau/SQL/機械学習/Deep Learning/RPA

    -Python基礎