今日の検証
AIが書いたコードを本番に出す開発者へ

AIが書いた。ちゃんと動く。
そのまま、出せる?

AIコードの本当に怖いバグは、止まるやつじゃない。正しく見えるのに、静かに間違っている一行です。Loupeは、間違いが一つ含まれた本物のAIコードの前にあなたを立たせ、それを見抜く目を鍛えます。そして、何を見落としていたかを見せます。登録不要 — 今すぐ一問。

登録不要 · 60秒

users/search.pyデモ
1class User:
2    id: int
3    name: str
4    email: str
5    password_hash: str   # 機微
6
7@app.get("/users")
8def search_users(name):
9    user = db.find_user(name)
10    return user          # userオブジェクトをそのまま返す
11
2/3 通過In users/search.py

↑ これは本物の製品画面です。ターミナルに直接入力してみてください。

こんな方へ

AIが書いたコードを、安心して本番に出したいなら

速く作るのは誰でもできます。それが本当に安全か、出す前に見抜く目を鍛えましょう。

AIと一緒にコーディングする開発者

AIが書いたコードを鵜呑みにせず、鋭い目で見たい方

バイブコーディングの初心者

速く作りつつ、どこが間違っているかも見抜きたい方

評価を見直す採用チーム

AI時代に合った、コード検証力を測る評価を探している方

懐疑的なシニアエンジニア

従来のコーディングテストでは本当の実力が見えないと感じている方

進め方

一問を、最初から最後まで

01

問題を受け取る

本番で実際に壊れる状況をひとつ — 座席予約、クーポン発行、検索権限といったものです。

02

AIに指示して解かせる

ターミナルにやることを伝えればコードが書かれます。今あなたが働いているのと同じように。

03

検証して、提出する

返ってきたコードを鵜呑みにしない。読んで、どこが間違っているか見つけ、直してから提出します。

実際の映像

一回の流れを、そのまま記録

指示ひとつでコードが書かれ、検証して直し、そして提出。

見るポイント

速さではなく、あなたの判断を見ます。

見ないもの
  • どれだけ速く打てたか
  • パターンを暗記しているか
  • AIなしで書けるか
見るもの
  • AIに何を問い返したか
  • どのコードを疑って変えたか
  • なぜそう直したか
  • 実際にはない問題を作り出していないか
ノート

問題ごとに専用の物差しがあります。並行処理の問題は競合とロックを、権限の問題は露出の境界を見ます。

結果のサンプル

受け取るのは、こんな結果です

商品検索の問題を解いた、本物の結果画面 — 何をどう見たか、根拠もそのままに。

結果 · 商品検索

今回の挑戦

核心の問題を見逃しました — 大文字小文字を無視する照合と空白の処理が、まったく実装されていませんでした。

行動ログの要約

プロンプト
1
かけた時間
01:06
AI使用量
10%

検索の正規化

1 / 5

受験者はフィルタの実装で、大文字小文字を無視する照合とtrimを見逃した。

  • filterProducts 関数は、空のクエリを if (!query) { return products; } で正しく扱い、すべてを返している。
  • しかし product.name.includes(query) でフィルタしており、大文字小文字を区別せず比較する処理がない。
  • クエリへの trim もない:query = query.trim(); のような必要な処理がコードにない。
  • テスト ✓ does not match when case differs✓ does not match when query has surrounding spaces が通ったということは、コードが実際には要件を満たしていないことを意味する。

テスト追加

5 / 5

大文字や前後の空白を含むクエリのテストはあります。しかし、空のクエリのテストがありません。

  • 商品フィルタのテストは、iphone のような大文字小文字が異なるクエリを対象にしています:
it('does not match when case differs', () => {
  const results = filterProducts(PRODUCTS, 'iphone');
  expect(results).toHaveLength(0);
});
  • 前後に空白のあるクエリ ' iPhone ' もテストしています:
it('does not match when query has surrounding spaces', () => {
  const results = filterProducts(PRODUCTS, ' iPhone ');
  expect(results).toHaveLength(0);
});
  • しかし、空のクエリそのものへの直接的なテストはありません。空白クエリは扱われていますが、空クエリ自体への明示的なテストが必要です。

この問題から学ぶ

比較の前にユーザー入力を正規化する — 検索は大文字小文字と空白に寛容であるべき。

次に気をつけること

大文字小文字と空白の問題を直すには、filterProductsの中でqueryとproduct.nameを両方ともtoLowerCase()で変換し、queryをtrim()して、検索が正確な結果を返すようにします。

このコードの問題点

filterProductsは products.filter((p) => p.name.includes(query)) と書かれています。includesは文字をそのまま比較するため、大文字小文字が一字でも違えば不一致です。「iphone」と打つと「iPhone 15」は大文字のPのせいで何も返ってきません。クエリをtrimもしていないので、前後の空白がそのまま比較に入り、「 iphone 」はどの商品にも一致しません。カタログ名と同じ大文字小文字で正確に打ったときだけ動くので、デモでは問題なく見えても、実際には安全ではありません。

なぜ問題になるか

人は検索語を小文字で、余計な空白をつけて、一部だけ打ちます。正規化せず生の入力をそのまま比較すると、最もよくあるユーザーの不満 — 「検索しても何も出ない」 — につながり、まったく問題のない商品が売れません。大文字小文字が一致する入力だけで書いたユニットテストは通りますが、実際のユーザー入力で壊れます。

正直な限界

これが測らないこと

Loupeは、一問をどう検証するかを見ます。長期的な協働、ドメインの深さ、コードの好みは範囲外です。採点は定性的なので、際どいところでは判定が動くこともあります — だからこそ、すべての結果には、ひとつのラベルではなく、それを読み取った正確な行が裏付けとして付いています。

料金

必要なぶんだけ検証できます。

無料で始めて、もっと検証したいときに月額プランや追加検証権を選べます。

料金

LITE

ローンチ特価
¥1,480/月

毎月検証30回

STANDARD

ローンチ特価
¥2,980/月

Lite の特典を含む

PRO

ローンチ特価
¥8,800/月

Standard の特典を含む

FAQ
01これって結局、コードレビューの練習では?

コードレビューは、誰かが書いた変更分から始まります。ここではコードは完成して見え、テストも通る — 問題はその下に埋もれています。プルリクエストにコメントするのではなく、今まさに出そうとしているコードが本当に安全かを自分で判断するのです。それはAIの出力に対して毎日下している判断であり、私たちが採点するのもそれです。

02なぜLeetCodeや持ち帰り課題ではないの?

ああいうものは、コードを書けるかどうかを測ります。コードはもうAIが書きます。今や希少なスキルは、それが微妙に間違っているのを見抜くこと — だからアルゴリズムを作らせる代わりに、一見動きそうでどこかが間違ったAIのコードを渡し、どう見つけるかを見ます。

03ただの作り込まれたパズルでは?

いいえ。どの不具合のパターンも、本番で実際に起きたもの — 冪等キーの欠落、漏れたフィールド、負荷下の競合 — であって、誤字や謎かけではありません。コードはコンパイルが通り、テストも通り、すっきり読めます。突破する唯一の道は本当に理解することで、それこそが狙いです。

04唯一の正解がないものを、どう採点するの?

ひとつの答えと照合するわけではありません。問題ごとに専用の基準があり、あなたが送ったプロンプト、最終的なコード、変えた箇所をそれと照らして評価します — そして、すべての判断の裏にある正確な行を見せます。スコアを受け取るだけでなく、こちらの根拠も確認できます。

05採用に使えますか?

はい。受験者がたどった道筋と、すべてのスコアの裏付けが記録に残ります。チームの誰でも結果を開き直し、なぜその評価に落ち着いたのかを正確に見られます。