JavaScript学習を始めよう!
ゲーム感覚でプログラミングの基礎を学べます
学習進捗
0/32 問題完了
学習統計
レッスン一覧
レッスン1: 変数と値
プログラムで情報を保存する方法を学ぼう(5問)
レッスン2: 計算と演算子
コンピューターに計算をさせてみよう(6問)
レッスン3: 条件分岐(if文)
プログラムに判断をさせよう(5問)
レッスン4: 繰り返し処理(for文)
同じ処理を繰り返してみよう(5問)
レッスン5: 関数の基礎
処理をまとめて再利用しよう(5問)
レッスン6: 配列の操作
複数のデータを管理しよう(5問)
レッスン7: 文字列の操作
文字列を自在に操ろう(5問)
レッスン8: オブジェクトの基礎
データをまとめて管理しよう(5問)
レッスン9: より複雑な条件分岐
複雑な判断をプログラムに任せよう(5問)
レッスン10: 配列の高度な処理
配列をもっと活用しよう(5問)
レッスン11: 高度な関数
関数をマスターしよう(5問)
レッスン12: 配列メソッド入門
配列を効率的に操作しよう(5問)
レッスン13: 文字列メソッド
文字列を効率的に操作しよう(5問)
レッスン14: 演算子の応用
便利な演算子を覚えよう(5問)
レッスン15: while文とdo-while文
条件による繰り返し処理(5問)
レッスン16: ネストした構造
構造を組み合わせよう(5問)
レッスン17: オブジェクトの操作
オブジェクトを自在に操ろう(5問)
レッスン18: 高度な配列メソッド
配列メソッドをマスターしよう(5問)
レッスン19: 関数式とスコープ
関数の高度な概念を理解しよう(5問)
レッスン20: スコープと定数
スコープと定数を使いこなそう(5問)
レッスン21: DOM操作の基礎
Webページを動的に変更しよう(5問)
レッスン22: イベント処理
ユーザーの操作に反応しよう(5問)
レッスン23: フォーム操作
フォームデータを扱おう(5問)
レッスン24: ローカルストレージ
データを保存しよう(5問)
レッスン25: JSON操作
データ形式を理解しよう(5問)
レッスン26: エラーハンドリング
エラーに対処しよう(5問)
レッスン27: 非同期処理入門
時間のかかる処理を扱おう(5問)
レッスン28: Web API連携
外部データを取得しよう(5問)
レッスン29: モジュール化
コードを整理しよう(5問)
レッスン30: 総合プロジェクト
これまでの知識を活用しよう(5問)
演習問題
実践プロジェクト
簡単な計算機
足し算、引き算ができる計算機を作ろう
レッスン2: 計算と演算子
計算をしてみよう
JavaScriptでは、コンピューターに計算をさせることができます。
例:基本的な計算
console.log(5 + 3); // 8
console.log(10 - 4); // 6
console.log(3 * 4); // 12
console.log(8 / 2); // 4
試してみよう
演習問題
問題1: 基本的な計算
10と5を足した結果をコンソールに表示してください。
プロジェクト
計算機アプリ
学んだ知識を使って計算機を作ろう
MBTI風心理テスト
あなたの性格タイプを診断する心理テスト
おみくじアプリ
ランダムな結果を表示するアプリ
計算機アプリ
ディスプレイの作成
計算結果を表示する画面を作ろう
数字ボタンの実装
0-9の数字ボタンを作ろう
演算子ボタンの実装
+, -, ×, ÷ ボタンを作ろう
計算機能の実装
実際に計算できるようにしよう
クリア機能の実装
C、AC ボタンを実装しよう
ステップ1: ディスプレイの作成
まずは計算結果を表示するディスプレイ部分を作成しましょう。
HTML構造
<div class="calculator-display">
<input type="text" id="display" readonly value="0">
</div>
ステップ2: 数字ボタンの実装
0から9までの数字ボタンを作成しましょう。
ボタンのHTML
<div class="calculator-numbers">
<button onclick="addNumber('7')">7</button>
<button onclick="addNumber('8')">8</button>
<button onclick="addNumber('9')">9</button>
// 他の数字ボタンも追加
</div>
ステップ3: 演算子ボタンの実装
+、-、×、÷ の演算子ボタンを作成しましょう。
ステップ4: 計算機能の実装
入力された式を計算する機能を実装しましょう。
ステップ5: クリア機能の実装
Cボタン(1文字削除)とACボタン(全削除)を実装しましょう。
プレビュー
ここに作成した計算機が表示されます
MBTI風 性格診断テスト
あなたの性格タイプを発見しよう!
このテストは、MBTIの理論に基づいてあなたの性格タイプを診断します。
診断される16タイプ
建築家
論理学者
指揮官
討論者
提唱者
仲介者
主人公
運動家
管理者
擁護者
幹部
領事官
巨匠
冒険家
起業家
エンターテイナー
あなたの性格タイプは...
特性の内訳
性格の特徴
強み
改善点
向いている職業
MBTI風心理テスト - 開発解説
🎯 プロジェクト概要
MBTI理論の実装
4つの軸(E/I, S/N, T/F, J/P)で16タイプの性格を判定する心理学理論をWebアプリケーションとして実装
データ駆動設計
質問データベース、スコア計算、結果マッピングを体系的に設計した本格的な診断システム
リッチなUI/UX
プログレスバー、アニメーション、レスポンシブデザインを駆使したモダンなユーザー体験
インタラクティブ機能
結果シェア、データ保存、再テスト機能など、実用的なWebアプリケーション機能を完備
🚀 実装した主要機能
🏗️ アプリケーション構造
プレゼンテーション層
ロジック層
データ層
📁 ファイル構成
🧮 MBTI判定ロジック
質問設計
4つの軸(E/I, S/N, T/F, J/P)を各5問ずつ、計20問で構成
{ text: "パーティーでは?",
answers: {
A: { text: "新しい人と話す", trait: "E" },
B: { text: "知人とじっくり", trait: "I" }
}}
スコア蓄積
各回答で対応する特性にスコア+1。リアルタイムで4軸のスコアを管理
this.mbtiScores = { E: 0, I: 0, S: 0, N: 0, T: 0, F: 0, J: 0, P: 0 };
this.mbtiScores[selectedTrait]++;
タイプ判定
各軸でスコアの高い方を選択し、4文字の性格タイプを決定
type += this.mbtiScores.E > this.mbtiScores.I ? 'E' : 'I';
type += this.mbtiScores.S > this.mbtiScores.N ? 'S' : 'N';
// → "ENFP" など
結果マッピング
判定されたタイプから詳細情報(説明、強み、適職など)を表示
this.personalityTypes[mbtiType] = {
name: "運動家", icon: "🎪",
description: "情熱的で創造力豊か...",
strengths: ["熱意", "創造性"]
};
🎯 4つの判定軸
E vs I (外向性 vs 内向性)
エネルギーの方向性:外部から得るか内部から得るか
S vs N (感覚 vs 直感)
情報の処理方法:具体的事実か抽象的可能性か
T vs F (思考 vs 感情)
意思決定の基準:論理的分析か価値観・感情か
J vs P (判断 vs 知覚)
外界への態度:計画的・規則的か柔軟・適応的か
🎨 UI/UX設計のポイント
直感的操作
A/Bの明確な選択肢、視覚的フィードバック、自動遷移で迷わない操作フロー
進捗の可視化
プログレスバー、質問番号で現在位置を明確に。完了感を演出
エンゲージメント
楽しいアニメーション、アイコン、カラフルなデザインで飽きさせない
レスポンシブ
スマホからPCまで、デバイスサイズに応じた最適な表示
✨ アニメーション一覧
💻 重要なコード解説
🏗️ クラス設計
class PersonalityTest {
constructor() {
this.currentQuestionIndex = 0;
this.answers = [];
this.mbtiScores = { E: 0, I: 0, S: 0, N: 0, T: 0, F: 0, J: 0, P: 0 };
this.questions = [...]; // 20問のデータ
this.personalityTypes = {...}; // 16タイプの詳細
}
}
📝 状態管理を一元化し、テスト進行を制御するメインクラス
🎯 回答処理ロジック
selectAnswer(target) {
const value = answerBtn.getAttribute('data-value');
this.answers[this.currentQuestionIndex] = value;
// MBTIスコア更新
const question = this.questions[this.currentQuestionIndex];
const selectedTrait = question.answers[value].trait;
this.mbtiScores[selectedTrait]++;
// 自動遷移
setTimeout(() => this.nextQuestion(), 800);
}
📝 回答選択と同時にスコア更新、UX向上の自動遷移実装
🧮 性格タイプ算出
calculateMBTIType() {
let type = '';
type += this.mbtiScores.E > this.mbtiScores.I ? 'E' : 'I';
type += this.mbtiScores.S > this.mbtiScores.N ? 'S' : 'N';
type += this.mbtiScores.T > this.mbtiScores.F ? 'T' : 'F';
type += this.mbtiScores.J > this.mbtiScores.P ? 'J' : 'P';
return type; // "ENFP" など
}
📝 4軸の比較で16通りの性格タイプを決定する核心ロジック
📊 結果可視化
updateTraitBars() {
traits.forEach(trait => {
const firstScore = this.mbtiScores[trait.first];
const secondScore = this.mbtiScores[trait.second];
const percentage = (firstScore / (firstScore + secondScore)) * 100;
// アニメーション付きでバー表示
setTimeout(() => {
bar.style.width = `${percentage}%`;
}, 100);
});
}
📝 スコアをパーセンテージ化し、視覚的なバーグラフで表現
💾 データ永続化
saveResults() {
const results = {
mbtiType: mbtiType,
personalityName: personalityName,
scores: this.mbtiScores,
date: new Date().toISOString(),
answers: this.answers
};
localStorage.setItem('personality-test-results', JSON.stringify(results));
}
📝 テスト結果をlocalStorageで永続化、再訪時の体験向上
📚 学習ポイント
JavaScript設計パターン
- ES6クラス設計
- モジュラープログラミング
- イベント駆動アーキテクチャ
データ構造とアルゴリズム
- オブジェクト指向データ管理
- スコア計算アルゴリズム
- 条件分岐による分類
Web API活用
- localStorage データ永続化
- Web Share API連携
- Clipboard API使用
CSS/アニメーション
- CSS Grid/Flexbox レイアウト
- CSS Transform/Transition
- レスポンシブデザイン
プロフィール
学習統計
獲得バッジ
設定
学習データのリセット
すべての学習進捗、ポイント、バッジをリセットします。この操作は取り消せません。