🍲

2024年と2025年の自分の生産性を比較してみました

に公開

はじめに

こんにちは。
SKIYAKIのエンジニアの家(@ie_webengineer)です。

バイブコーディングを会社でざっくりと利用し始めたのが半年前ぐらいというのもあり、
年末も近いので現状で去年と今年でどれだけ生産性が上がったのか去年と比較してみます。

擦りに擦られたネタということは百も承知なのですが、個人的にバイブコーディング元年ということもありやってみます。

やったこと

会社で利用しているgithubアカウントの2024年と2025年を比較するスクリプト作成をGemini3.0に依頼

たったこれだけ!
いやーいい世の中になりましたね。

依頼内容

githubで自分の2024年と2025年のコミット数/マージ数などを比較して何%生産性が上がったのか出しして。普段python使わへんからインストールとか不要なスクリプトでいける?

すみません、プロンプトにも関西弁出していくタイプです..笑

出てきたスクリプト

import urllib.request
import json
import datetime

# ================= 設定エリア =================
TOKEN = "ここにあなたのGITHUB_TOKENを貼り付けてください"
USERNAME = "ここにあなたのGitHubユーザー名"
YEAR_A = 2024
YEAR_B = 2025
# ============================================

def get_data_from_github(query, variables):
    url = "https://api.github.com/graphql"
    headers = {
        "Authorization": f"Bearer {TOKEN}",
        "Content-Type": "application/json",
        "User-Agent": "Python-Script"
    }
    
    # リクエストの作成
    data = json.dumps({'query': query, 'variables': variables}).encode('utf-8')
    req = urllib.request.Request(url, data=data, headers=headers)
    
    try:
        with urllib.request.urlopen(req) as response:
            response_body = response.read().decode('utf-8')
            json_data = json.loads(response_body)
            if "errors" in json_data:
                raise Exception(f"Query Error: {json_data['errors']}")
            return json_data['data']
    except urllib.error.HTTPError as e:
        raise Exception(f"Request failed: {e.code} {e.reason}")

def get_year_stats(year):
    # 期間設定
    start_date = f"{year}-01-01T00:00:00Z"
    end_date = f"{year}-12-31T23:59:59Z"
    
    # 検索クエリ: その年に作られ、かつマージされた自分のPR
    search_query = f"author:{USERNAME} is:pr is:merged created:{year}-01-01..{year}-12-31"

    # GraphQLクエリ: コントリビューション数と、検索結果(マージ数)を同時に取得
    query = """
    query($user: String!, $start: DateTime!, $end: DateTime!, $search_query: String!) {
      user(login: $user) {
        contributionsCollection(from: $start, to: $end) {
          totalCommitContributions
          totalPullRequestContributions
          totalPullRequestReviewContributions
        }
      }
      search(query: $search_query, type: ISSUE, first: 0) {
        issueCount
      }
    }
    """
    
    variables = {
        "user": USERNAME,
        "start": start_date,
        "end": end_date,
        "search_query": search_query
    }
    
    data = get_data_from_github(query, variables)
    
    # データを整理して返す
    contribs = data['user']['contributionsCollection']
    merged_count = data['search']['issueCount']
    
    return {
        "commits": contribs['totalCommitContributions'],
        "created_prs": contribs['totalPullRequestContributions'],
        "reviews": contribs['totalPullRequestReviewContributions'],
        "merged_prs": merged_count
    }

def calculate_growth(old, new):
    if old == 0:
        return "N/A"
    growth = ((new - old) / old) * 100
    return f"{growth:+.2f}%"

# --- メイン処理 ---
try:
    print(f"--- {USERNAME} さんの生産性比較(マージ数含む) ---")
    print("データ取得中...")
    
    stats_a = get_year_stats(YEAR_A)
    stats_b = get_year_stats(YEAR_B)
    
    # 表示項目
    metrics = [
        ("Commits (コミット数)", "commits"),
        ("Created PRs (作成PR数)", "created_prs"),
        ("Merged PRs (マージ数)", "merged_prs"), # 追加しました!
        ("Reviews (レビュー数)", "reviews")
    ]
    
    print("-" * 65)
    print(f"{'Metric':<25} | {YEAR_A} | {YEAR_B} | 成長率")
    print("-" * 65)
    
    for label, key in metrics:
        val_a = stats_a[key]
        val_b = stats_b[key]
        growth = calculate_growth(val_a, val_b)
        print(f"{label:<25} | {val_a:>4} | {val_b:>4} | {growth}")

except Exception as e:
    print(f"\nエラーが発生しました: {e}")
\text{Growth Rate} = \left( \frac{\text{2025年の数値} - \text{2024年の数値}}{\text{2024年の数値}} \right) \times 100

計算式もご丁寧に出していただきまして、
なんか上手くいきそうなスクリプトが一発で出力されたわ。
個人のgithub_tokenと個人アカウント名を入れて出力してみましょう!

結果

Metric 2024 2025 成長率
Commits(コミット数) 1127 1785 +58.39%
Created PRs (作成PR数) 195 226 +15.90%
Merged PRs (マージ数) 177 211 +19.21%
Reviews(レビュー数) 273 379 +38.83%

最後に

基本的にバイブコーディングの指標になるかというとそうではないのですが、
50%ぐらいバイブコーディングになり始めたのもつい最近なためまだまだ成長率は上げられると感じています。

またコミット数やレビュー数に関してはいかにPR単位で変更数を減らせるかもいつもより意識したり、
メンバーも増えたためレビューを極力早くするということも意識しておりました。

バイブコーディングの恩恵もさることながら、コミットメッセージ、PRの作成、セルフレビューをAIレビューに切り替えたことも大きいと思っております。

気軽に使えるスクリプトでもありますので、来年はさらに今回確認した数値が爆上がりすることでしょう。

SKIYAKI Tech Blog

Discussion