windows copilotに聞いてみた | kidproのブログ

kidproのブログ

プログラミング教育情報と私の日常を徒然に

こどもの笑顔を見たいです

b2sfukazawa@gmail.com

kahootに魅せられて2種類のクイズアプリを作った。
なかなかいい出来だと思う

でも実際に作るには結構大変
WIN+Cでcopilotを起動して、助けてもらってみた

「kahootのようなクイズツールをWEBでつくりたい。コードを教えてください」

それなりのアプリを作ってくれましたが、kahootのように複数の人が参加するものではなく、一人で遊ぶものでした
このレベルを簡単に作ってくれるのはすごいです
コードを作るときには、文法、関数、テクニックなどをネットで検索して参考にします。実際にこの作業時間が結構かかります
AIを使えば、プログラマの生産性が飛躍的に向上するでしょう

 

プログラミング用AIのcode interpreterなどは、たった月額20ドルで使えます。

仕事で、これを使わない選択はあり得ないですね

 

生成されたコードは 265行です。ちゃんと動きます

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Kahoot風クイズツール</title>
    <style>
        * {
            box-sizing: border-box;
            margin: 0;
            padding: 0;
        }

        body {
            font-family: Arial, sans-serif;
            background-color: #f9f9f9;
        }

        .container {
            max-width: 800px;
            margin: 0 auto;
            padding: 20px;
        }

        .quiz-container {
            background-color: white;
            border: 1px solid #ddd;
            box-shadow: 0 2px 4px rgba(0,0,0,0.1);
            padding: 20px;
        }

        .quiz-header {
            display: flex;
            align-items: center;
            justify-content: space-between;
        }

        .quiz-title {
            font-size: 24px;
            font-weight: bold;
        }

        .quiz-score {
            font-size: 18px;
        }

        .quiz-question {
            margin-top: 20px;
            font-size: 20px;
        }

        .quiz-options {
            margin-top: 20px;
            display: grid;
            grid-template-columns: repeat(2, 1fr);
            gap: 10px;
        }

        .quiz-option {
            background-color: #eee;
            border-radius: 5px;
            padding: 10px;
            cursor: pointer;
        }

        .quiz-option:hover {
            background-color: #ddd;
        }

        .quiz-option.correct {
            background-color: limegreen;
            color: white;
        }

        .quiz-option.wrong {
            background-color: crimson;
            color: white;
        }

        .quiz-next {
            margin-top: 20px;
            display: none;
        }

        .quiz-next button {
            background-color: dodgerblue;
            color: white;
            border: none;
            border-radius: 5px;
            padding: 10px 20px;
            cursor: pointer;
        }

        .quiz-next button:hover {
            background-color: darkblue;
        }

        .quiz-result {
            margin-top: 20px;
            display: none;
        }

        .quiz-result h2 {
            font-size: 24px;
            text-align: center;
        }

    </style>
</head>
<body>
    <div class="container">
        <div class="quiz-container">
            <div class="quiz-header">
                <h1 class="quiz-title">Kahoot風クイズツール</h1>
                <span class="quiz-score">スコア:0</span>
            </div>
            
                <p class="quiz-question">問題文</p>
                <div class="quiz-options">
                    <div class="quiz-option">選択肢1</div>
                    <div class="quiz-option">選択肢2</div>
                    <div class="quiz-option">選択肢3</div>
                    <div class="quiz-option">選択肢4</div>
                </div>
                <div class="quiz-next">
                    <button>次へ</button>
                </div>
                <div class="quiz-result">
                    <h2>あなたのスコアは<span id="score"></span>点です!</h2>
                </div>
            
        </div>
    </div>
    <script>
        // クイズのデータを配列で定義する
        const quizData = [
            {
                question: "日本の首都はどこ?",
                a: "大阪",
                b: "東京",
                c: "京都",
                d: "名古屋",
                correct: "b"
            },
            {
                question: "世界で一番人口が多い国はどこ?",
                a: "中国",
                b: "インド",
                c: "アメリカ",
                d: "インドネシア",
                correct: "a"
            },
            {
                question: "太陽系で一番大きい惑星はどれ?",
                a: "地球",
                b: "木星",
                c: "土星",
                d: "海王星",
                correct: "b"
            },
            {
                question: "ピカソの出身国はどこ?",
                a: "フランス",
                b: "イタリア",
                c: "スペイン",
                d: "ポルトガル",
                correct: "c"
            },
            {
                question: "サッカーのワールドカップで最も優勝回数が多い国はどこ?",
                a: "ブラジル",
                b: "ドイツ",
                c: "イタリア",
                d: "アルゼンチン",
                correct: "a"
            }
        ];

        // HTML要素を変数に代入する
        const quizQuestion = document.querySelector(".quiz-question");
        const quizOptions = document.querySelectorAll(".quiz-option");
        const quizScore = document.querySelector(".quiz-score");
        const quizNext = document.querySelector(".quiz-next");
        const quizResult = document.querySelector(".quiz-result");
        const scoreSpan = document.getElementById("score");

        // クイズの現在のインデックスとスコアを変数に代入する
        let currentQuiz = 0;
        let score = 0;

        // クイズをロードする関数を定義する
        function loadQuiz() {
            // クイズのデータを変数に代入する
            const currentQuizData = quizData[currentQuiz];
            // 問題文と選択肢をHTMLに反映させる
            quizQuestion.innerText = currentQuizData.question;
            quizOptions.forEach((option, index) => {
                option.innerText = currentQuizData["abcd"[index]];
            });
            // 選択肢の色やクラスをリセットする
            quizOptions.forEach(option => {
                option.style.backgroundColor = "#eee";
                option.style.color = "#000";
                option.classList.remove("correct");
                option.classList.remove("wrong");
            });
            // 次へボタンと結果表示を非表示にする
            quizNext.style.display = "none";
            quizResult.style.display = "none";
        }

        // 最初のクイズをロードする
        loadQuiz();

        // 選択肢をクリックしたときの処理を定義する
        quizOptions.forEach(option => {
            option.addEventListener("click", () => {
                // 正解かどうか判定する
                if (option.innerText === quizData[currentQuiz][quizData[currentQuiz].correct]) {
                    // 正解ならば、選択肢を緑色にし、正解クラスを付与する
                    option.style.backgroundColor = "limegreen";
                    option.style.color = "#fff";
                    option.classList.add("correct");
                    // スコアを加算する
                    score++;
                    // スコアをHTMLに反映させる
                    quizScore.innerText = `スコア:${score}`;
                    
                } else {
                    // 不正解ならば、選択肢を赤色にし、不正解クラスを付与する
                    option.style.backgroundColor = "crimson";
                    option.style.color = "#fff";
                    option.classList.add("wrong");
                    // 正解の選択肢を緑色にする
                    quizOptions.forEach(option => {
                        if (option.innerText === quizData[currentQuiz][quizData[currentQuiz].correct]) {
                            option.style.backgroundColor = "limegreen";
                            option.style.color = "#fff";
                            option.classList.add("correct");
                        }
                    });
                }
                // 次へボタンを表示する
                quizNext.style.display = "block";
            });
        });

        // 次へボタンをクリックしたときの処理を定義する
        quizNext.addEventListener("click", () => {
            // クイズのインデックスを増やす
            currentQuiz++;
            // クイズがまだ残っていれば、次のクイズをロードする
            if (currentQuiz < quizData.length) {
                loadQuiz();
            } else {
                // クイズが終わったら、結果表示を表示する
                quizResult.style.display = "block";
                scoreSpan.innerText = score;
            }
        });
    </script>
</body>
</html>