2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

クソコードお焚き上げの会Advent Calendar 2024

Day 21

ChatGPT先生にクソコードを生成してもらいお焚き上げしてもらう。

Posted at

はじめに

この記事は、クソコードお焚き上げの会 Advent Calendar 2024の21日目の記事です。

ChatGPTは世の中の多数のクソコードを学習しているはずなので、ChatGPT先生にクソコードを出してもらい、それをお焚き上げしてもらおうという企画です。

ChatGPT 4oでチャレンジ。

ChatGPTはクソコードを知っているか

スクリーンショット 2024-12-21 15.06.57.png

誘導尋問だぜ。出でよ!悪GPT。

スクリーンショット 2024-12-21 15.07.07.png

クソ、調教済みか。(悪い情報が出てこないように制御されているのは、ほんとすごい)
歯切れ悪いな。(あくまでポジティブ・中立に制御されている)
しかも、こちらの意図まで先読みしてくるとは、やるな。

クソコードを出してもらおう

スクリーンショット 2024-12-21 15.07.15.png
スクリーンショット 2024-12-21 15.07.23.png

kuso.py
# 全体的にひどい設計のプログラム例
# 注意:絶対に実運用では使わないでください!

# 1. 無意味なコメント
# この関数は何かをする
def do_something(x):
    # xを1000で割るけどエラーは無視
    try:
        return x / 1000
    except:
        pass  # 何もしない

# 2. 無駄に長い関数名
def thisFunctionDoesSomethingButIDontKnowWhatExactlyButItWorks():
    for i in range(0, 10):
        print("Doing something...")

# 3. グローバル変数の乱用
data = [1, 2, 3, 4]
def modify_data():
    for i in range(len(data)):
        data[i] = i * 2

# 4. マジックナンバーと意味不明なロジック
def calculate_weirdness(a, b):
    return a ** b - 42 / 7 + 3.14159

# 5. 過剰なネスト
def deeply_nested_function():
    if True:
        if True:
            if True:
                if True:
                    return "Help!"

# 6. 意味不明な変数名
def zzz():
    a = 10
    b = 20
    c = a + b
    return c

# 7. 実行されないコード
if False:
    print("このコードは絶対に実行されません")

# 8. 例外の濫用
try:
    1 / 0  # 意図的にエラーを起こす
except:
    raise ValueError("何かが壊れた...多分")

# 9. ハードコーディングされたデータ
def get_user_password():
    return "password123"

# メイン関数を意味不明な呼び出し方で実行
if __name__ == "__main__":
    thisFunctionDoesSomethingButIDontKnowWhatExactlyButItWorks()
    print(do_something("abc"))  # 意図的な型エラー
    modify_data()
    print(data)
    print(calculate_weirdness(2, 3))
    print(deeply_nested_function())
    print(zzz())
    print(get_user_password())

スクリーンショット 2024-12-21 15.20.27.png

うん。さっきオレが書いた覚えのあるようなコードが出てきた。

#全体的にひどい設計のプログラム例
#注意:絶対に実運用では使わないでください!

とかコメントまで安全性に配慮してくるとはさすがChatGPT先生。

お焚き上げしてもらう

ではこれをChatGPTにお焚き上げしてもらおう。
流石のChatGPTも「お焚き上げ」の意味はわからんだろう。

スクリーンショット 2024-12-21 15.21.25.png

スクリーンショット 2024-12-21 15.21.59.png

え?すご!この文脈での「お焚き上げ」の意味を完全に把握している。

otakiage.py
# 良い設計を心がけたコード例
# シンプルで、分かりやすく、再利用性を重視

def divide_by_thousand(value):
    """
    安全に値を1000で割る関数。
    :param value: 数値
    :return: value / 1000, またはエラーメッセージ
    """
    if not isinstance(value, (int, float)):
        return "Error: Input must be a number"
    return value / 1000

def perform_task(task_count=10):
    """
    指定回数タスクを実行する。
    :param task_count: タスクを実行する回数
    """
    for i in range(task_count):
        print(f"Task {i+1} is being performed...")

def modify_list(input_list):
    """
    リスト内の各要素を2倍にする関数。
    :param input_list: 数値のリスト
    :return: 変更されたリスト
    """
    if not all(isinstance(i, (int, float)) for i in input_list):
        return "Error: List must contain only numbers"
    return [i * 2 for i in input_list]

def calculate_power(base, exponent):
    """
    指定された底数と指数を使って計算する。
    :param base: 底数
    :param exponent: 指数
    :return: 計算結果
    """
    return base ** exponent

def get_user_password():
    """
    実際のシステムでは、ハードコーディングを避ける。
    ここでは例としてハードコーディング。
    """
    # 本来ならセキュアな方法で保存・取得するべき
    return "example_secure_password"

# メイン関数
def main():
    print(divide_by_thousand(5000))
    print(divide_by_thousand("abc"))  # エラー例
    perform_task()
    updated_list = modify_list([1, 2, 3, 4])
    print(updated_list)
    print(calculate_power(2, 3))
    print(get_user_password())

if __name__ == "__main__":
    main()

スクリーンショット 2024-12-21 15.24.15.png

そうだ、そうなんだ。
技術はもちろんだが、「清々しい気持ち」になるコードを書くには、清々しい健全な心が必要なのだ。

まとめ

  • ChatGPT先生はクソコードも良いコードも学習している
  • 良い表現で出力されるように制御されている
  • 文脈に沿って次のチャット内容の提案もしてくれる
  • クソコードの典型例は当然に把握している
  • お焚き上げの意味を文脈に沿って理解してくる
  • 「気持ち」にも触れてくる

すごすぎる。進化が早過ぎる。>ChatGPT

最後までご覧いただきましてありがとうございました。

以上、「ChatGPT先生にクソコードを生成してもらいお焚き上げしてもらう。」でした。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?