クロード vs. ChatGPT vs. Gemini: 実際のコーディングの課題でテストしたところ、1 つが優勢でした

in tech

おそらく、ある男性がさまざまなブラウザ タブで人気の AI チャットボットをすべて開き、同じコーディング プロンプトを表示し、それぞれの出力をチェックして、最適なものをコピーするというミームを見たことがあるでしょう。一瞬、私も同じ実験をしてみようかと思いました。そこで、最も人気のある AI を 3 つ選び、同じ問題を解決してもらいました。それぞれのパフォーマンスはこんな感じでした。

適切な問題の選択と判断基準

簡単すぎず、難しすぎず、ちょうどいい中間地点を獲得

コンピュータープログラミングまたはソフトウェア開発の概念。画面にコードが表示されたラップトップ コンピューター。ハート、メッセージ、歯車、ホーム、ユーザー、クラウド、ロックのアイコン。 クレジット: Coralnes / Shutterstock

このテストでは、どのようなコーディングの課題を選択できるかをブレインストーミングしていました。ほとんどの AI は同じ方法でアプローチするため、「リストから重複を見つける」などの方法は選択したくありませんでした。また、LeetCode スタイルの問題には挑戦したくありませんでした。それは、多くの人の頭を悩ませることになるからです。

さらに、ほとんどの人に関係があり、何らかの現実世界の機能があり、明確な答えがないものを使ってテストしたいとも思いました。特に、明確な答えがないからこそ、それぞれのAIの思考や創造性のレベルが観察できて、より興味深いです。

ということで、最終的に決めた問題は「パスワード強度チェッカー」でした。通常、サービスにサインアップすると、これらの動作が表示されます。パスワードを作成すると、システムは多くの場合、パスワードの強度と、パスワードを強化するために何をする必要があるかを表示します。

このプログラムを使用すると、各 AI がソリューションをどの程度適切に設計しているか、コーディング スタイル、ベスト プラクティスに従っているか、使いやすさ、ソリューションが業界標準であるかどうかをテストできます。スコアはこれらの基準に基づいて決定されます。

プロンプトのデザイン

各チャットボットが最適なソリューションに到達するためにどの程度のガイダンスが必要かを観察する

自宅の机に座っている AI チャットボット。 クレジット:

Matt Klein / DALL-E 3 / How-To Geek

チャレンジの問題が解決したら、今度はプロンプトのテクニックについて考えます。公平性を保つために、ChatGPT、Gemini、および Claude に同じ最初のプロンプトを与えます。最初のアウトプットが得点の最大の決め手となる。最初のプロンプトの後、出力に応じて、解決策の説明、特殊なケースの処理、コードのリファクタリングなど、いくつかのフォローアップ プロンプトを表示する場合があります。

最初のプロンプトは次のとおりです。

Write a Python function that checks the strength of a password and labels it as Weak, Medium, or Strong.

Explain your logic clearly for a beginner.

かなり短くシンプルにしました。これは、私が明示的に指示を与えなくても、AI ツールがどれだけ自力で考えることができるかを確認するためです。

チャットGPT

きれいなコード、平均的な説明

ChatGPT に Python でパスワード強度チェッカーを作成するよう依頼します。

このチャレンジでは、ChatGPT の通常の無料 Web バージョンを使用しました。使用したモデルはGPT5.2でした。私が受け取った解決策は次のとおりです。

import re

def check_password_strength(password):
    length = len(password)
    
    # Conditions
    has_lower = re.search(r"(a-z)", password)
    has_upper = re.search(r"(A-Z)", password)
    has_digit = re.search(r"(0-9)", password)
    has_special = re.search(r"(!@#$%^&*(),.?\":{}|<>)", password)
    
    score = 0
    
    # Scoring rules
    if length >= 8:
        score += 1
    if has_lower:
        score += 1
    if has_upper:
        score += 1
    if has_digit:
        score += 1
    if has_special:
        score += 1
    
    # Strength levels
    if score <= 2:
        return "Weak"
    elif score == 3 or score == 4:
        return "Medium"
    else:
        return "Strong"

ChatGPT は文字検索に Python の re モジュールを利用していて興味深いです。ただし、初心者レベルとしては、正規表現の代わりに一般的な Python ロジックを使用することを期待していました。 ChatGPT は応答の最後に、正規表現ではなく基本的な Python を使用するバージョンが必要かどうかを尋ねました。それ以外の場合、コードは非常にきれいで、初心者にとっても理解しやすいように見えます。

コードに追加されたコメントは基本的なものであり、コードが何をしているのかを説明するものではありません。セクションを説明するだけです。コードセクションの後にChatGPTが提供した説明は問題ありませんでした。セクションごとに説明し、各部分が何をしているのかを説明しました。しかし、それは一流ではありませんでした。

最後に、私が要求した Python 関数を提供することで、解決策は短く抑えられました。これは、入力を求めたり、パスワードに関するフィードバック (番号の欠落など) を返したり、メッセージを出力したりする本格的なプログラムではないため、ユーザーフレンドリー性がやや低く、実稼働グレードのコードとは程遠いものになっています。 ChatGPT が他に提供したのは、いくつかのテスト行だけです。

print(check_password_strength("abc"))          # Weak
print(check_password_strength("abc12345"))     # Medium
print(check_password_strength("Abc@12345"))    # Strong

ジェミニ

弱いシステム、初心者向けのコードと説明

Gemini に Python でパスワード強度チェッカーを作成するよう依頼します。

Gemini の場合は、Gemini 3 Fast モデルの無料 Web バージョンを使用しました。ジェミニの解決策は次のとおりです。

def check_password_strength(password):
    # Initialize our score
    score = 0
    length = len(password)
    
    # 1. Check Length
    if length >= 8:
        score += 1
        
    # 2. Check for Uppercase letters
    has_upper = any(char.isupper() for char in password)
    if has_upper:
        score += 1
        
    # 3. Check for Numbers
    has_digit = any(char.isdigit() for char in password)
    if has_digit:
        score += 1

    # Final Labeling Logic
    if length < 5:
        return "Very Weak (Too short!)"
    
    if score == 3 and length >= 10:
        return "Strong"
    elif score >= 2:
        return "Medium"
    else:
        return "Weak"

# Testing the function
print(f"'12345': {check_password_strength('12345')}")
print(f"'Password123': {check_password_strength('Password123')}")
print(f"'qwerty': {check_password_strength('qwerty')}")

Gemini は、ジェネレーター式、組み込みメソッド、および any() 関数。コード内のコメントはより説明的で、各セクションで何が起こっているかを説明しています。コード後の解説部分も充実していました。各セクションや行ごとにわかりやすく説明しました。

ただし、ChatGPT のコードとは異なり、それほどきれいではありません。チェックをグループ化し、スコア条件をグループ化すると、見栄えが良くなったでしょう。しかし、Gemini はチェックと関連するスコアリングをまとめてコードを読みにくくしました。

Gemini のコードの最大の問題は、そのスコアリング システムです。小文字のチェックや特殊文字のチェックがないため、このプログラムは実際の使用には適していません。このシステムでは、弱いパスワードであっても、強力なものとして表示されます。

クロード

数マイルの差で明らかな勝者

クロードに Python でパスワード強度チェッカーを作成するよう依頼します。

最後の出場者、クロードの話になります。このために、無料の Web バージョンを使用し、Sonnet 4.6 モデルを選択しました。出力は次のとおりです。

import re

def check_password_strength(password):
    """
    Checks the strength of a password and returns a label:
    'Weak', 'Medium', or 'Strong'.
    """
    score = 0
    feedback = ()

    # --- Rule 1: Length ---
    # Longer passwords are exponentially harder to crack.
    if len(password) >= 12:
        score += 2          # Big bonus for long passwords
    elif len(password) >= 8:
        score += 1          # Minimum acceptable length
    else:
        feedback.append("Use at least 8 characters.")

    # --- Rule 2: Uppercase letters (A-Z) ---
    # Mixing cases increases the number of possible combinations.
    if re.search(r'(A-Z)', password):
        score += 1
    else:
        feedback.append("Add at least one uppercase letter.")

    # --- Rule 3: Lowercase letters (a-z) ---
    if re.search(r'(a-z)', password):
        score += 1
    else:
        feedback.append("Add at least one lowercase letter.")

    # --- Rule 4: Digits (0-9) ---
    if re.search(r'(0-9)', password):
        score += 1
    else:
        feedback.append("Add at least one number.")

    # --- Rule 5: Special characters ---
    # Symbols dramatically expand the character set an attacker must guess from.
    if re.search(r'(!@#$%^&*(),.?":{}|<>)', password):
        score += 2          # Big bonus — special chars are very effective
    else:
        feedback.append("Add at least one special character (e.g. !, @, #).")

    # --- Scoring ---
    # Max possible score = 7 (2+1+1+1+2)
    if score >= 6:
        label = "Strong 💪"
    elif score >= 4:
        label = "Medium ⚠"
    else:
        label = "Weak ❌"

    return label, score, feedback


# ── Demo ──────────────────────────────────────────────────────────────────────
test_passwords = (
    "abc",                    # Too short, nothing good
    "password123",            # Common, no symbols, no uppercase
    "Hello@2024",             # Good mix, decent length
    "X!9kP#mQ2$vL",          # Long, all character types
)

for pwd in test_passwords:
    label, score, tips = check_password_strength(pwd)
    print(f"\nPassword : {pwd}")
    print(f"Strength : {label}  (score: {score}/7)")
    if tips:
        print("Tips     :", " | ".join(tips))

すぐにわかるように、コードはプロフェッショナルに見えます。クロードはチェックに正規表現も使用しました。よく考えられた採点システムが導入されています。

関数は、その動作を説明する docstring で開始されます。これは、実際のコーディングでは非常に一般的です。追加されたコメントは説明的なものであり、コード部分自体が一目瞭然になります。たとえ説明セクションに行かなくても、ここでコードが何をしているのかはわかります。コメントのせいでコードがあまりきれいではなくなったと言わざるを得ません。

スコアリング システムに関しては、ChatGPT と同様に、Claude がすべての一般的なシナリオをカバーしました。明確な違いの 1 つは、長いパスワードと特殊文字の追加に対するクロードのボーナス ポイントです。これにより、パスワードが大幅に強化されます。また、便宜のために、さまざまな強度でパスワードをテストするためのデモ セクションも追加されました。

しかし、クロードの解決策を最もエレガントなものにしているのは、 feedback 一部。チェックごとに、パスワードがミスした場合、クロードは feedback リストに、何をする必要があるかについての提案を追加します。正直、他の 2 つの AI ボットにもこれを期待していましたが、裏切られました。

ただし公平を期すために言うと、Claude の説明セクションは Gemini や ChatGPT に比べて少し弱かったです。コード自体の説明よりも、システムとその仕組みの説明に重点を置きました。ただし、コメントは非常に役に立ち、説明のギャップを補うのに十分であるため、このチャレンジではクロードが勝者となりました。


すべての AI が同じコーディング能力を備えているわけではありません

これは、各 AI ボットがコーディングの課題をどのように理解し、処理し、ソリューションを実装するかを強調した楽しい実験でした。彼らのアプローチにはすべて良い面と悪い面がありました。これは、AI とコーディングの未来について本当に考えさせられます。

関連記事

前の投稿
決して手に入らない再販価値を求めて携帯電話を甘やかすのはやめましょう
次の投稿
Excel スライサーのスタイルと色をカスタマイズする方法

関連記事