こんにちは。
今回はHTMLとJSで、比較的簡単に導入できる診断ツールの作り方を紹介します。診断ツールとは、いくつかの設問に対してはい、いいえなど簡単な回答をして、最後に診断ボタンを押すと、その回答に応じて結果が分岐、表示されるというものです。
どういったことに活用できるかというと、
- 性格タイプ診断
- お仕事適正チェック
- 占い、可能性チェック
- あなたにおすすめの商品はこちら(どれを選んだらいいか迷ってる見込み客に対して)
など、サイトのコンテンツに彩りを添えてくれる楽しいツールです。
採用専門ページなどに組み込んだりして、はいが多い人はうちにぴったりだよ!応募してね!的な使い方ができますよ。ぜひ活用してみてください。
この仕組みでは回答をサーバーに送信して統計を取ったりは出来ません。あくまでお楽しみコンテンツの一つです。
サンプル
実際のサンプルは別ページでご覧ください


質問が8問、選択肢は3つ、分岐パターン4つでサンプルを作ってみましたので一度ご覧ください。
エラー出てたの修正しました!今は使えるはず!


コード紹介
HTMLとJSで作ります。CSSはお好みで。
inputにあるvalueの数値が得点になっていて、選択された得点の合計数に応じて、表示させる回答を分岐させているという仕組みです。
使用するコード: HTML
<form id="personalityTestForm">
<!-- 質問リスト -->
<div class="question">
<p>1. 新しい環境にすぐ慣れるほうだ</p>
<input type="radio" id="q1_yes" name="q1" value="2">
<label for="q1_yes">はい</label>
<input type="radio" id="q1_no" name="q1" value="0">
<label for="q1_no">いいえ</label>
<input type="radio" id="q1_neutral" name="q1" value="1">
<label for="q1_neutral">どちらでもない</label>
<p class="error-message"></p>
</div>
<div class="question">
<p>2. 人と話すのが好きだ</p>
<input type="radio" id="q2_yes" name="q2" value="2">
<label for="q2_yes">はい</label>
<input type="radio" id="q2_no" name="q2" value="0">
<label for="q2_no">いいえ</label>
<input type="radio" id="q2_neutral" name="q2" value="1">
<label for="q2_neutral">どちらでもない</label>
<p class="error-message"></p>
</div>
<div class="question">
<p>3. 一人でいるのが好きだ</p>
<input type="radio" id="q3_yes" name="q3" value="0">
<label for="q3_yes">はい</label>
<input type="radio" id="q3_no" name="q3" value="2">
<label for="q3_no">いいえ</label>
<input type="radio" id="q3_neutral" name="q3" value="1">
<label for="q3_neutral">どちらでもない</label>
<p class="error-message"></p>
</div>
<div class="question">
<p>4. グループでの活動が好きだ</p>
<input type="radio" id="q4_yes" name="q4" value="2">
<label for="q4_yes">はい</label>
<input type="radio" id="q4_no" name="q4" value="0">
<label for="q4_no">いいえ</label>
<input type="radio" id="q4_neutral" name="q4" value="1">
<label for="q4_neutral">どちらでもない</label>
<p class="error-message"></p>
</div>
<div class="question">
<p>5. 計画を立てて行動するのが得意だ</p>
<input type="radio" id="q5_yes" name="q5" value="2">
<label for="q5_yes">はい</label>
<input type="radio" id="q5_no" name="q5" value="0">
<label for="q5_no">いいえ</label>
<input type="radio" id="q5_neutral" name="q5" value="1">
<label for="q5_neutral">どちらでもない</label>
<p class="error-message"></p>
</div>
<div class="question">
<p>6. 突発的な出来事に柔軟に対応できる</p>
<input type="radio" id="q6_yes" name="q6" value="2">
<label for="q6_yes">はい</label>
<input type="radio" id="q6_no" name="q6" value="0">
<label for="q6_no">いいえ</label>
<input type="radio" id="q6_neutral" name="q6" value="1">
<label for="q6_neutral">どちらでもない</label>
<p class="error-message"></p>
</div>
<div class="question">
<p>7. 創造的なことが好きだ</p>
<input type="radio" id="q7_yes" name="q7" value="2">
<label for="q7_yes">はい</label>
<input type="radio" id="q7_no" name="q7" value="0">
<label for="q7_no">いいえ</label>
<input type="radio" id="q7_neutral" name="q7" value="1">
<label for="q7_neutral">どちらでもない</label>
<p class="error-message"></p>
</div>
<div class="question">
<p>8. 他人の気持ちをよく考える</p>
<input type="radio" id="q8_yes" name="q8" value="2">
<label for="q8_yes">はい</label>
<input type="radio" id="q8_no" name="q8" value="0">
<label for="q8_no">いいえ</label>
<input type="radio" id="q8_neutral" name="q8" value="1">
<label for="q8_neutral">どちらでもない</label>
<p class="error-message"></p>
</div>
<button type="button" onclick="calculateResult()">診断する</button>
</form>
<section id="resultArea">
<h2>診断結果</h2>
<div class="resultText"></div>
</section>使用するコード:Java Script
jQueryは使っていません。純粋なバニラjsです。
個別に表示させたい画像は絶対パスで入力してください(https://から始まる)
function calculateResult() {
const form = document.getElementById('personalityTestForm');
let totalScore = 0;
let allAnswered = true;
const questions = form.querySelectorAll('.question');
questions.forEach((question, index) => {
const selectedAnswer = question.querySelector(`input[name="q${index + 1}"]:checked`);
const errorMessage = question.querySelector('.error-message');
if (!selectedAnswer) {
errorMessage.textContent = '選択してね!';
errorMessage.style.color = 'red';
allAnswered = false;
} else {
errorMessage.textContent = '';
totalScore += parseFloat(selectedAnswer.value);
}
});
if (!allAnswered) {
return;
}
// 結果HTML
let resultHTML = '';
if (totalScore <= 3) {
resultHTML = `
<div class="result-box">
<img src="〇〇.png" alt="">
<h3>あなたは内向的タイプです。</h3>
<p>
あなたは落ち着いた性格で、
一人の時間を大切にするタイプです。
</p>
</div>
`;
} else if (totalScore <= 5) {
resultHTML = `
<div class="result-box">
<img src="〇〇.png" alt="">
<h3>あなたはバランスタイプです。</h3>
<p>
状況に応じて柔軟に対応できるタイプです。
</p>
</div>
`;
} else if (totalScore <= 7) {
resultHTML = `
<div class="result-box">
<img src="〇〇.png" alt="">
<h3>あなたは外向的タイプです!</h3>
<p>
人との交流を楽しめるエネルギッシュなタイプです。
</p>
</div>
`;
} else {
resultHTML = `
<div class="result-box">
<img src="〇〇.png" alt="">
<h3>あなたは超社交的タイプです!</h3>
<p>
周囲を巻き込むカリスマ性があります。
</p>
</div>
`;
}
// HTMLとして出力
document.querySelector('.resultText').innerHTML = resultHTML;
// スクロール
document.getElementById('resultArea').scrollIntoView({
behavior: 'smooth',
block: 'start'
});
}おまけCSS
#personalityTestForm .question p {
font-weight: bold;
font-size: 18px;
margin: 22px 0 5px 0 !important;
}
#personalityTestForm button {
margin: 1.5rem auto;
background: #e0048c;
color: #FFF;
border-radius: 10px;
}
#personalityTestForm p#resultText {
font-weight: bold;
font-size: 20px;
color: #044ae0;
}
#personalityTestForm img#resultImage {
width: 30%;
margin: 1.5rem 0;
}
#personalityTestForm .question input[type="radio"] {
opacity: 0;
position: absolute;
}
#personalityTestForm .question label {
margin-right: 20px;
display: inline-block;
padding: 5px 10px;
border: 2px solid #fad1ff;
border-radius: 5px;
cursor: pointer;
font-size: 16px;
background-color: #fff;
transition: all 0.3s;
}
#personalityTestForm .question input:checked + label {
background-color: #f2c9ff;
}
.result-box{
padding: 30px;
border-radius: 20px;
background: #fffcde;
}
いかがでしょうか?自分で作ってみると案外楽しいですよね。
結果の下にCTAエリアをつけたりして、問い合わせフォームやエントリーフォームに誘導する使い方もできそうです。
WordPressに組み込む場合
WordPressに組み込みたい場合は、HTMLは カスタムHTMLブロックを利用して挿入します。
最新のWordPressであればHTML/CSS/JSをまとめて1つのブロックに記述でき、プレビューも見ることができます。
また、コードはプラグインを利用してJSを追加する方法もあります。
たとえば私はいつもSimple Custom CSS and JSというプラグインを使用しています。
jsは、フッターの位置に入れるようにしてください。
コード追加におすすめのプラグイン






