採用適性検査
正解・不正解はありません。各問に対して、自分の考えや行動に最も近いものを直感的にお選びください。途中での回答変更はできません。
// ============================================================ // 問題データ // ============================================================ const STORAGE_KEY = 'rc_aptitude_results';
// true=A表示が高スコア側, false=B表示が高スコア側(入れ替え) const SWAP_PATTERN = [ true, true, false, true, true, false, true, true, false, true, false, false, true, false, false, false, false, true, false, false, false, true, false, true, false, true, false, false, false, false, ];
const questions = [ { id:1, axis:'行動力', text:'なにごとも、行動に移す時は', optA:'思いたったらすぐ行動に移す', optB:'よく検討してから行動に移す' }, { id:2, axis:'挑戦', text:'仕事に取り組むときの姿勢は', optA:'多少のリスクがあっても、失敗などおそれず取り組む', optB:'失敗のないように慎重に検討しながら取り組む' }, { id:3, axis:'素直さ', text:'難しい仕事にとりかかる時は', optA:'まず自分で進めてみてから相談することが多い', optB:'まず相談してからとりかかることが多い' }, { id:4, axis:'挑戦', text:'自分の得意なスタイルは', optA:'新しい分野を開拓していくような仕事', optB:'ある程度やり方が決まっている仕事' }, { id:5, axis:'素直さ', text:'会議などで自分の意見の方がすぐれていると思った時は', optA:'それでもグループ全体の意向に従うようにする', optB:'自分の考えを押し通す方(心の中ではゆずらない)' }, { id:6, axis:'自責思考', text:'何かをやろうと決めた時に、他から反対された場合は', optA:'気にしないで決心した通り押しすすめる方', optB:'全体の合意を大切にして中止する方' }, { id:7, axis:'生産性', text:'継続中の仕事をやっているときでも', optA:'その仕事を中断していつでも新しい仕事にとりかかれる', optB:'その仕事をやり遂げてからでないと次の仕事に移りにくい' }, { id:8, axis:'行動力', text:'仕事のすすめ方の反省として', optA:'もう少しきびきび素早くできればよいと思う', optB:'もう少し落ち着いてじっくりできればよいと思う' }, { id:9, axis:'チーム', text:'社員旅行や、社内のクラブ活動などは', optA:'一番先に立って参加する方', optB:'皆におくれない程度に参加する方' }, { id:10, axis:'行動力', text:'自分が得意とする仕事は', optA:'広い視野と知識を必要とする仕事', optB:'一つのことを徹底して追及する必要のある仕事' }, { id:11, axis:'挑戦', text:'初対面の人と会った時や、新しい仕事を引き受けるときは', optA:'まず感覚的、直感的な「全体的判断」が先行する', optB:'まずは分析的で細かい「論理的判断」が先行する' }, { id:12, axis:'チーム', text:'トラブル(いざこざ)が起こったときは', optA:'多くの人に聞いてもらってハッキリさせる', optB:'自分の胸におさめるようにして大きくしないようにする' }, { id:13, axis:'生産性', text:'さまざまな課題が、提示された時は', optA:'むずかしい課題は後にして、やれるものから片付ける', optB:'順序どおり取り組み、一つ一つの課題が解決するまで次に進まない' }, { id:14, axis:'挑戦', text:'趣味として好きなことは', optA:'音楽・絵画的なものより、スポーツ指向のもの', optB:'スポーツ指向のものより、音楽・絵画的なもの' }, { id:15, axis:'素直さ', text:'人と会って話をしなければならない時は', optA:'まず会って話を進めながらまとめていく事が多い', optB:'話す内容をあらかじめよくまとめておく事が多い' }, { id:16, axis:'自責思考', text:'仕事上でわからないことが出てきた時は', optA:'まず自分で調べてからその上でたずねる', optB:'すぐ誰かわかる人に質問してみる' }, { id:17, axis:'チーム', text:'同僚などと話しをする時は', optA:'どちらかといえば話し手になることが多い', optB:'どちらかといえば聞き手になることが多い' }, { id:18, axis:'行動力', text:'自分でやってみたいと思う仕事は', optA:'行動的な仕事の方がよい', optB:'企画的な仕事の方がよい' }, { id:19, axis:'挑戦', text:'「直感・ヒラメキ」と「根気・粘り」とを比較すると', optA:'直感・ヒラメキの方がまさっていると思う', optB:'根気・粘りの方がまさっていると思う' }, { id:20, axis:'生産性', text:'本を読む時の傾向は', optA:'途中をとばしたりして要点をつかむ読み方が多い', optB:'時間をかけて始めから終わりまでじっくり読む方' }, { id:21, axis:'チーム', text:'ストリートパフォーマー(大道芸)など見る時は', optA:'最前列で見る方', optB:'遠巻きで見る方' }, { id:22, axis:'自責思考', text:'自分では善意でやったつもりの言動が', optA:'自分の思った通りに相手に伝わっている', optB:'相手に誤解されてうけとられてしまうことがある' }, { id:23, axis:'挑戦', text:'投資をするとすれば(実際にやらなくても仮定で)', optA:'全部を投資し、大きな利益を狙う方', optB:'一部を投資し、確実さを狙う方' }, { id:24, axis:'生産性', text:'新商品の購入にあたっては', optA:'その商品の性能や機能を重視する', optB:'その商品のスタイルや様式を重視する' }, { id:25, axis:'行動力', text:'ひまな時や、自由になれる時間のある時は', optA:'友達と一緒ににぎやかにやっていることが多い', optB:'本を読んだり音楽を聞いたりして一人でいることが多い' }, { id:26, axis:'チーム', text:'対人関係の上での気配りは', optA:'敏感でよく気がつく方', optB:'あまり気がつかない方' }, { id:27, axis:'素直さ', text:'再就職にあたって会社を選ぶ条件は', optA:'自分の好きなことができることを第一条件とする', optB:'安定性の高いことを第一条件とする' }, { id:28, axis:'生産性', text:'買い物をする時の傾向は', optA:'気に入ったものがあればすぐ買うことが多い', optB:'気に入ったものがあってもすぐ使わないものは買わない' }, { id:29, axis:'自責思考', text:'趣味や、好物などについて人に聞かれた時は', optA:'はっきりしているのですぐ答えられる', optB:'いろいろあってすぐには答えられない' }, { id:30, axis:'チーム', text:'買い物をする時の、商品の買い方は', optA:'一つ一つ選んで買う方が多い', optB:'セットで買う方が多い' }, ];
const SCORE_MAP = { A:4, B:0, C:3, D:1, B_HIGH:4, A_LOW:0, C_SWAP:3, D_SWAP:1 };
// ============================================================ // 状態管理 // ============================================================ let currentQ = 0; let answers = {}; let userName = '';
// 名前入力でボタン有効化 document.getElementById('name-input').addEventListener('input', function() { document.getElementById('start-btn').disabled = !this.value.trim(); }); document.getElementById('name-input').addEventListener('keydown', function(e) { if (e.key === 'Enter' && this.value.trim()) startExam(); });
document.getElementById('start-btn').addEventListener('click', startExam);
function show(id) { ['screen-start','screen-exam','screen-done'].forEach(s => { document.getElementById(s).classList.add('hidden'); }); document.getElementById(id).classList.remove('hidden'); }
function startExam() { userName = document.getElementById('name-input').value.trim(); if (!userName) return; currentQ = 0; answers = {}; show('screen-exam'); renderQuestion(); }
function renderQuestion() { const q = questions[currentQ]; const total = questions.length; const isSwapped = !SWAP_PATTERN[currentQ]; const hiText = isSwapped ? q.optB : q.optA; const loText = isSwapped ? q.optA : q.optB;
document.getElementById('q-progress').textContent = `Q${currentQ+1} / ${total}`; document.getElementById('q-num-circle').textContent = currentQ + 1; document.getElementById('q-text').textContent = q.text; document.getElementById('progress-bar').style.width = `${((currentQ+1)/total)*100}%`;
const opts = [ { label:'A', text: hiText, mid: false }, { label:'B', text: loText, mid: false }, { label:'C', text: 'どちらかといえばAに近い', mid: true }, { label:'D', text: 'どちらかといえばBに近い', mid: true }, ];
const container = document.getElementById('options-container'); container.innerHTML = ''; opts.forEach(opt => { const btn = document.createElement('button'); btn.className = 'opt-btn' + (opt.mid ? ' mid' : ''); btn.innerHTML = `${opt.label}${opt.text}`; btn.onclick = () => handleAnswer(opt.label); container.appendChild(btn); }); }
function handleAnswer(label) { const isSwapped = !SWAP_PATTERN[currentQ]; let scoreLabel = label; if (isSwapped) { if (label === 'A') scoreLabel = 'B_HIGH'; else if (label === 'B') scoreLabel = 'A_LOW'; else if (label === 'C') scoreLabel = 'C_SWAP'; else if (label === 'D') scoreLabel = 'D_SWAP'; }
// ボタン無効化・選択表示 const btns = document.querySelectorAll('.opt-btn'); btns.forEach(b => { b.disabled = true; if (b.querySelector('.opt-label').textContent === label) { b.classList.add('selected'); } });
answers[questions[currentQ].id] = scoreLabel;
setTimeout(() => { if (currentQ < questions.length - 1) { currentQ++; renderQuestion(); } else { saveResult(); show('screen-done'); } }, 280); } function saveResult() { const axes = ['行動力','挑戦','素直さ','自責思考','生産性','チーム']; const byAxis = {}; axes.forEach(ax => { byAxis[ax] = { score:0, max:0 }; }); let total = 0; questions.forEach(q => { const ans = answers[q.id]; const s = ans ? (SCORE_MAP[ans] ?? 0) : 0; total += s; byAxis[q.axis].score += s; byAxis[q.axis].max += 4; }); const pct = Math.round((total / 120) * 100); let label = '再面接の上検討する(-)'; if (pct >= 80) label = '是非採用したい'; else if (pct >= 65) label = '採用してよい'; else if (pct >= 50) label = '適職あれば採用'; else if (pct >= 35) label = 'なるべく採用しない';
const existing = JSON.parse(localStorage.getItem(STORAGE_KEY) || '[]'); existing.push({ id: Date.now(), name: userName, date: new Date().toLocaleDateString('ja-JP'), total, maxScore: 120, result: label, byAxis: Object.fromEntries(axes.map(ax => [ax, Math.round((byAxis[ax].score / byAxis[ax].max)*100)])), answers, }); localStorage.setItem(STORAGE_KEY, JSON.stringify(existing)); }