『プリンシプル オブ プログラミング』を10問で学べるクイズサイト

AIでも壊れない堅牢コードへ鍛え直す!
コードレビュー道場 #3:非機能要件

公開日:
最終更新日:

このページでは、AIが見落としやすい非機能要件(性能・信頼性・保守性など)の観点で、実際のコード断片を読むコードレビュー形式の4択クイズを体験します。「動く」だけでは守れない、本番で踏ん張る品質を鍛えるのが狙いです。

4択クイズ(10問・全問解説付き)で腕試し → 解説でなぜ落ちるのか/なぜ運用がつらいのかを言語化。「読む→解く→わかる」で、AI生成コードをプロ品質へ引き上げる現場の勘所を身につけていきましょう。

今すぐクイズに挑戦
(10問・約3分・解説つき)
プリンシプルオブプログラミング
AI時代を生き抜く「101の設計原則」

#3 非機能要件:落ちるコードを鍛え直せ! 目次

  1. クイズに挑戦する(10問)

  1. プログラミング クイズ一覧へ
  2. コードレビュー道場 目次へ
  3. 次のクイズへ(#1 DRY/KISS:AIコードをリファクタせよ!)
  4. 前のクイズへ(#2 凝集度/結合度:疎結合へリファクタ!)
  5. 『プリンシプル オブ プログラミング』101の原理・原則総まとめ

  1. 参考文献・出典
  2. このページの著者
  3. シェア

コードレビュー道場 #3~落ちるコードを非機能要件で鍛え直せ!~

1. 次のコードは、画面を破棄したあともイベントリスナーが残り続け、メモリリークやハンドラの二重実行を引き起こす可能性があります。安定性・保守性の観点から、もっともよい改善はどれでしょうか?

function attach() {
  const btn = document.getElementById('save');
  btn.addEventListener('click', () => {
    save();
  });
}

2. 次のコードは、ダッシュボード表示のたびに重い集計処理を実行しています。性能とスケーラビリティの観点から、もっとも有効な改善はどれでしょうか?

function renderDashboard(userId) {
  const stats = calculateAllStats(userId); // 重い処理
  return buildHtml(stats);
}

3. 次のコードは、外部APIがハングした場合でもいつまでも待ち続けてしまい、スレッドや接続を長時間専有してしまう可能性があります。非機能要件(応答性・信頼性)の観点から、もっとも優先して行うべき改善はどれでしょうか?

async function fetchProfile(userId) {
  const res = await fetch(`https://api.example.com/users/${userId}`);
  if (!res.ok) {
    throw new Error('failed');
  }
  return res.json();
}

4. 次のコードは、機能フラグを毎回リモートから取得しており、外部サービス障害時にアプリ全体が影響を受けやすくなっています。信頼性と性能の観点から、もっとも適切な改善はどれでしょうか?

async function getFeatureFlags() {
  const res = await fetch('https://flags.example.com/config.json');
  return res.json();
}

5. 次のコードは、内部エラーも「404 Not Found」として返しており、運用時に原因の特定が困難です。運用性と信頼性の観点から、もっともよい改善はどれでしょうか?

async function handler(req, res) {
  try {
    const data = await loadFromDb();
    res.end(JSON.stringify(data));
  } catch (e) {
    res.statusCode = 404;
    res.end('Not found');
  }
}

6. 次のコードは、外部サービスが落ちているときでも延々とリトライを続けてしまいます。システム全体の安定性を高めるために、もっとも重要な改善はどれでしょうか?

async function sendNotification(payload) {
  while (true) {
    try {
      await fetch('https://api.example.com/notify', {
        method: 'POST',
        body: JSON.stringify(payload)
      });
      return;
    } catch (e) {
      // 失敗したらリトライ
    }
  }
}

7. 次のコードは、大量のアイテムを描画するときにブラウザが固まりやすくなります。性能とユーザビリティの観点から、もっとも効果が大きい改善はどれでしょうか?

function renderList(items) {
  const container = document.getElementById('list');
  container.innerHTML = '';
  items.forEach(item => {
    const li = document.createElement('li');
    li.textContent = item.name;
    container.appendChild(li);
  });
}

8. 次のコードは、重い処理のたびに詳細なログを出しており、高負荷時にログI/O自体がボトルネックになる恐れがあります。性能と運用性のバランスをとるために、もっとも適切な改善はどれでしょうか?

function processItem(item) {
  console.log('START PROCESS', item);
  doHeavyWork(item);
  console.log('END PROCESS', item);
}

9. 次のコードは、エラーを握りつぶしてしまい、問題の検知や復旧が困難になります。非機能要件(信頼性・保守性)の観点から、もっとも望ましいエラーハンドリングはどれでしょうか?

async function saveUser(user, db) {
  try {
    await db.insert('users', user);
  } catch (e) {
    // なにもしない
  }
}

10. 次のコードは、典型的なN+1クエリ問題を抱えています。性能とスケーラビリティの観点から、もっともインパクトの大きい改善はどれでしょうか?

async function listOrdersWithUser(db) {
  const orders = await db.query('SELECT * FROM orders');
  for (const order of orders) {
    const rows = await db.query(
      'SELECT * FROM users WHERE id = ?',
      [order.user_id]
    );
    order.user = rows[0] ?? null;
  }
  return orders;
}

落ちるコードを非機能要件で鍛え直せ!
採点結果

正答率:0%

-

-

参考文献・出典

  • プリンシプル オブ プログラミング ~3年目までに身につけたい一生役立つ101の原理原則~
  • 上田 勲(著)/秀和システム/第1版14刷/2025年/ISBN978-4-7980-4614-3

※本ページは学習支援を目的とした要約です。実務適用時は原典もご参照ください。

このサイトの運営者

もちもちみかん(社内SE)

運営者は、グループ企業向けの業務アプリを要件定義から運用まで担当している社内SEです。PHP・JavaScript・MySQL・CSSを使った実務経験をもとに、一次情報や実際の運用で得た気づきを整理しています。

AIにコードを書かせて終わりではなく、どこで迷ったか・どこを人がレビューすべきかまで含めて、 やさしく噛みくだいてまとめています。

経験:Webアプリ・業務システム

得意:PHP・JavaScript・MySQL・CSS

制作・運用中:フォーム生成基盤クイズ学習プラットフォームhtmx逆引きレシピ

AI時代のエンジニアタイプ診断:CSPF/とろとろみかん

詳しいプロフィールはこちら!  もちもちみかんのプロフィール

もちもちみかん0系くん
TOPへ

もちもちみかん.comとは


もちもちみかん.com は、AI時代に必要なプログラミングの基礎・設計・改善の考え方を、やさしく学べるサイトです。


『プリンシプル オブ プログラミング』の原則まとめ、用語集、クイズ、htmx逆引きレシピを通じて、「分かったつもり」で終わらず、実際に使える判断軸まで身につくようにしています。


フォームジェネレーターなどの便利ツールも用意しつつ、AIにコードを書かせる時代にこそ大切な設計・責務・レビューの視点を、実務と検証の目線で届けます。


むずかしい内容でも親しみやすく学べるように、「もちもちみかん」らしいやわらかさも大切にしています!