
【GIGA端末対応】コピペで5秒!自然言語処理(NLP)とネットリテラシーを同時に学ぶ「対話型HTMLシミュレーター」無料公開【授業・家庭用】
こんにちは!教育現場や家庭で、子どもたちのデジタル教育に伴走しているみなさん。
「GIGAスクール構想でタブレットやパソコンは配られたけれど、授業や家庭でどう活用していいか分からない」
「スクラッチの次は、テキストプログラミング(HTML/JavaScript)の何を教えればいい?」
そんな悩みを抱えていませんか?
また、日常的に目にするテレビやSNSの「過激なバズ(数字)の奪い合い」や「他者を傷つけるいじり・ハラスメント」に対して、子どもたちが無批判に影響されてしまうことに、危機感を覚えている教員や保護者の方も多いと思います。
そこで今回は、文科省が推進する「プログラミング教育(HTML/JavaScriptによる簡易NLP:自然言語処理の基礎)」と、これからの時代に最も必要な「主体的・対話的で深い学び(メディアリテラシー)」を、たった1ファイルのコードをコピペするだけで同時に実践できる、完全無料の学習シミュレーター(NLP搭載版)を作成しました。
外部のネットには一切接続しない「完全に安全な砂場(サンドボックス)」ですので、学校のセキュリティ制限がかかった端末でも安心して起動できます。
記事の最後にあるコードをコピペして、今すぐ授業や家庭での対話のきっかけに活用してください!
🧭 この教材が育む「3つの自律的な力」
このシミュレーターは、子どもたちが直感的に遊びながら、古い常識やネットの数字(再生数)に惑わされない「フラットな視点」を育む仕掛けが施されています。
1. 感情的な違和感を「論理的な問い」に変える力(簡易NLP翻訳エンジン)
子どもがネットの動画やテレビを見て「なんか嫌だな」「これっていじめじゃない?」と感じた生の肉声をシミュレーターに入力すると、ブラウザ裏側のNLPエンジンが単語を解析。
「人権・ダイバーシティ視点」「ガバナンス・現状維持バイアス視点」「経済エコシステム・ESG視点」の3つから、最も合致する「洗練されたアサーティブ(建設的)な問い」へと自動翻訳します。
感情論でぶつかるのではなく、客観的な構造を提示して大人の「因習」や「現状維持バイアス」をフラットにいなすコミュニケーションの基礎を、脳の内部の思考回路にインストールします。
2. 「数字(バズ)」ではなく「価値」に投票する力(分散型エシカル投票)
アプリ内では、全員が完全に匿名のアバターとしてフラットに扱われます。クラス内のスクールカーストや、家庭の教育格差は一切持ち込めません。
他のアバターが立てた「鋭い問い」に対して、お互いに「エシカル投票(価値への承認)」を行い、ポイント(トークン)を付与し合うことで、「再生数が多いものが偉い」という認知の歪みをハッキングし、「本質的な価値(クリーンさ)」を重視する分散型の価値観(DAO思想)を学びます。
3. 社会の裏側の「仕組み(ビジネスモデル)」を見抜く力
優れた問いをパブリッシュ(発信)し続けると、仮想の「クリーンな協賛企業(ESG投資家)」からオファーやメッセージが届くシミュレーション画面が発動します。
「自分の問いが社会(企業)のガバナンスを動かす」という成功体験を通じて、メディアの裏側にある経済構造を客観的に見抜く目を養います。
🛠️ 【授業・家庭で使える】導入手順(たったの3ステップ)
記事の一番下にある「ソースコード」をすべてコピーします。
パソコンやタブレットの「メモ帳」などのテキストエディタに貼り付け、ファイル名を「index.html」としてデスクトップ等に保存します。
保存したファイルをダブルクリックしてブラウザ(ChromeやEdgeなど)で開くだけで、すぐに授業や家庭で使えます!
※外部サーバーとの通信は一切行いません。GIGA端末のローカル環境だけで100%完結するため、個人情報の漏洩リスクは完全にゼロです。
📋 コピペ用ソースコード(index.html)
html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>GIGA 対応: メディアリテラシー&問いの学習シミュレーター(NLP 版)</title>
<style>
:root {
--bg-color: #f8f9fa ;
--card-bg: #ffffff ;
--text-color: #212529 ;
--accent-color: #0d6efd ;
--border-color: #dee2e6 ;
--success-color: #198754 ;
--alert-color: #dc3545 ;
}
body {
font-family: 'Helvetica Neue', Arial, sans-serif;
background-color: var(--bg-color);
color: var(--text-color);
margin: 0;
padding: 20px;
display: flex;
flex-direction: column;
align-items: center;
line-height: 1.6;
}
.container { max-width: 800px; width: 100%; }
header {
text-align: center;
margin-bottom: 30px;
border-bottom: 2px solid var(--border-color);
padding-bottom: 20px;
}
h1 { color: var(--accent-color); margin-bottom: 5px; font-size: 1.8rem; }
.subtitle { font-size: 0.9rem; color: #6c757d ; }
.card {
background-color: var(--card-bg);
border: 1px solid var(--border-color);
border-radius: 8px;
padding: 20px;
margin-bottom: 20px;
box-shadow: 0 2px 4px rgba(0,0,0,0.05);
}
.media-box {
background: #fff3cd ;
padding: 15px;
border-radius: 6px;
margin-bottom: 15px;
border-left: 5px solid #ffc107 ;
font-size: 0.95rem;
}
label { display: block; margin-bottom: 8px; font-weight: bold; }
textarea {
width: 100%; height: 90px; background-color: #fff ;
border: 1px solid var(--border-color); color: var(--text-color);
border-radius: 6px; padding: 10px; box-sizing: border-box;
resize: none; margin-bottom: 15px; font-size: 0.95rem;
}
button {
background-color: var(--accent-color); color: white; border: none;
padding: 12px 24px; border-radius: 6px; cursor: pointer;
font-weight: bold; font-size: 0.95rem;
}
button:hover { opacity: 0.9; }
.timeline { margin-top: 30px; }
.post { border-bottom: 1px solid var(--border-color); padding: 20px 0; }
.post:last-child { border-bottom: none; }
.badge {
background-color: #e9ecef ; color: var(--accent-color);
padding: 3px 10px; border-radius: 20px; font-size: 0.8rem; font-weight: bold;
}
.status-msg {
color: #6c757d ; font-size: 0.8rem; margin-top: 8px;
display: flex; gap: 15px; align-items: center;
}
.vote-btn {
background-color: #e2e3e5 ; color: #383d41 ; padding: 4px 12px;
border-radius: 4px; font-size: 0.8rem; cursor: pointer;
border: none; font-weight: normal;
}
.vote-btn:hover { background-color: #d6d8db ; }
.sponsor-alert {
background-color: #d1e7dd ; border: 1px solid #badbcc ; color: #0f5132 ;
padding: 15px; border-radius: 6px; margin-top: 15px;
display: none; font-size: 0.9rem;
}
.nlp-label {
display: inline-block;
background-color: #fff3cd ;
color: #856404 ;
font-size: 0.75rem;
padding: 2px 6px;
border-radius: 4px;
margin-left: 10px;
border: 1px solid #ffeeba ;
}
</style>
</head>
<body>
<div class="container">
<header>
<h1>対話型・「問い」のパブリッシュシミュレーター</h1>
<div class="subtitle">【プログラミング×リテラシー教育用】 NLP(自然言語処理)搭載版</div>
</header>
<!-- クエストカード -->
<div class="card">
<h3 style="margin-top:0;">今週のワークショップお題 (事例検証)</h3>
<div class="media-box">
<strong>【事例 (テレビやネットの慣習)】 </strong><br>
「ある人気コンテンツで、出演者の失敗や外見を激しく笑いものにする『いじり演出』
が大バズりしています。周囲の大人は『昔からの定番だから』 『視聴率が取れるから』と
現状維持を続けていますが、一部からハラスメントではないかと疑問の声が上がっていま
す。」
</div>
<label for="rawInput">この事例に対する、あなたの「生の違和感や疑問(肉声)」を入力してください: </label>
<textarea id="rawInput" placeholder="例: いじめみたいで見てて嫌。なんで昔のルールをそのまま続けて大人は怒らないの?"></textarea>
<button onclick="publishQuest()">意図を解析して「問い」に変換 (Publish)</button>
<div id="sponsorBox" class="sponsor-alert">
<strong>【システム通知】 クリーン企業 (ESG 投資家) からメッセージ受信:</strong><br>
「あなたの洗練された『問い』は、組織のコンプライアンスリスクを的確に捉えています。当社のブランド倫理基準に合致するため、あなたの探究活動 (トークン) をサポートします。」
</div>
</div>
<!-- タイムライン -->
<div class="card timeline">
<h3 style="margin-top:0;">検閲・削除のない分散型タイムライン(シミュレーション)</h3>
<div id="timelineContainer">
<!-- 投稿がここに追加されます -->
</div>
</div>
</div>
<script>
// ==========================================
// 1. 簡易 NLP エンジン (意図解析と翻訳アルゴリズム)
// ==========================================
function analyzeAndTranslate(rawText) {
const categories = [
{
id: "ethics",
name: "人権・ダイバーシティ視点",
keywords: ["いじめ", "嫌", "かわいそう", "ひどい", "傷", "悲しい", "不快", "ハラスメント", "倫理", "モラル", "最低", "むかつく"],
template: `「${rawText}」という声は、立場の弱い者を犠牲にするエンターテインメント構造への正当な異議申し立てである。これを「昔からの定番」として看過することは、多様性(ダイバーシティ)や人権を重んじる現代市場において、ブランド価値の致命的な低下に直結する。構造的なハラスメントを許容しないシステムを直ちに構築する必要がある。`
},
{
id: "structure",
name: "ガバナンス・現状維持バイアス視点",
keywords: ["大人", "昔から", "ルール", "怒らない", "おかしい", "なんで", "みんな", "当たり前", "常識", "そのまま", "ずるい", "圧力"],
template: `「${rawText}」という違和感の本質は、既存の慣習が「他者への敬意」という社会的資本を毀損しているにも関わらず見過ごされている構造にある。前例踏襲の「現状維持バイアス」に陥るのではなく、このやり方が未来の組織の信頼性(ガバナンス)にどのような長期的リスクを与えるかを、フラットな軸から客観的に検証すべきではないか。`
},
{
id: "economy",
name: "経済エコシステム・ESG 視点",
keywords: ["視聴率", "お金", "バズ", "人気", "数字", "ビジネス", "儲か", "利益", "売上", "テレビ", "ネット", "再生数"],
template: `「${rawText}」という純粋な疑問は、メディア産業のエコシステム自体が抱える倫理적負債を突いている。視聴率(アテンション)という単一の KPI に依存し個人の尊厳をコストにするのではなく、持続可能な(サステナブルな)制作プロセスへと KPI を再定義し、心理的安全性に配慮した新しい評価マトリクスを設計する時期に来ている。`
}
];
let maxScore = 0;
let bestCategory = categories[1];
categories.forEach(category => {
let score = 0;
category.keywords.forEach(keyword => {
const regex = new RegExp(keyword, 'gi');
const matches = rawText.match(regex);
if (matches) {
score += matches.length;
}
});
if (score > maxScore) {
maxScore = score;
bestCategory = category;
}
});
return {
translatedText: bestCategory.template,
categoryName: bestCategory.name,
score: maxScore
};
}
// ==========================================
// 2. メイン処理 (UI との連携)
// ==========================================
function publishQuest() {
const rawText = document.getElementById('rawInput').value.trim();
if (!rawText) {
alert('まずはあなたの生の疑問・違和感を入力してください!');
return;
}
const nlpResult = analyzeAndTranslate(rawText);
const container = document.getElementById('timelineContainer');
const newPost = document.createElement('div');
newPost.className = 'post';
const randomId = Math.floor(1000 + Math.random() * 9000);
newPost.innerHTML = `
<span class="badge">匿名アバター #${randomId}</span>
<span class="nlp-label">NLP 判定: ${nlpResult.categoryName}</span>
<p style="margin: 10px 0 5px 0;"><strong>[ ア サ ー テ ィ ブ 翻 訳 済 ]</strong> ${nlpResult.translatedText}</p>
<div class="status-msg">
<span>分散記録済(前例による削除不可) </span>
<button class="vote-btn" onclick="addVote(this)"> エ シ カ ル 投 票 (<span class="vc">1</span>)</button>
<span style="color:var(--success-color);">+<span class="pt-value">10</span>pt</span>
</div>
`;
container.insertBefore(newPost, container.firstChild);
document.getElementById('rawInput').value = '';
setTimeout(() => {
document.getElementById('sponsorBox').style.display = 'block';
}, 1200);
console.log(`[System] 入力 : "${rawText}" -> スコア : ${nlpResult.score} -> 判定 : ${nlpResult.categoryName}`);
}
function addVote(btn) {
const countSpan = btn.querySelector('.vc');
let currentCount = parseInt(countSpan.textContent);
countSpan.textContent = currentCount + 1;
const ptSpan = btn.nextElementSibling.querySelector('.pt-value');
let currentPt = parseInt(ptSpan.textContent);
ptSpan.textContent = currentPt + 10;
}
</script>
</body>
</html>
コードは注意してご使用ください。
🎁 【最後に】このシミュレーターを動かす「伴走者」のみなさんへのエールと小さなお約束
このシミュレーターは、子どもたちが「生の違和感」を「洗練された問い」へと昇華させるための、完全に閉じられた安全な砂場(ローカル環境)です。外部のインターネットには一切繋がらないため、個人情報の漏洩や外部への誤送信のリスクはシステム的に100%存在しません。
だからこそ、私たちはこの教材を手にした教員や保護者のみなさんに、一つの「エール」と、いくつかの「小さなお約束(注意事項)」を贈りたいと思います。
「答え」を教える先生ではなく、「問い」を面白がる伴走者であってください
子どもたちが立てた問いが、大人側の「前例」や「古い常識(因習)」をチクリと刺すことがあるかもしれません。その時、どうか「そんな生意気なことを言うな」と火消しをしないでください。システム(簡易NLP翻訳)がアサーティブに古い価値観をいなしてくれたその瞬間こそ、子どもの脳が「現状維持バイアス」を打ち破った成長の瞬間です。この砂場(シミュレーター)の中の自由と責任を信じてください
本プログラムはローカル環境で動作する「体験型の教育用モックアップ(プロトタイプ)」です。そのため、アプリ内でのトークン付与や企業からのメッセージは、すべて社会の仕組みを学ぶためのシミュレーション(仮想の演出)であり、実際の経済的価値や外部契約を発生させるものではありません。また、プログラムの改変や授業での配布は自由(著作権フリー)ですが、ローカル環境での実行に伴う万が一の端末の動作不具合等については、各自の自律的な学習管理(自己責任)の範囲内でお楽しみいただくようお願いいたします。万人の開眼ではなく、目の前の「5%のきらめき」を大切に
クラス全員、あるいはすべての子どもがすぐに鋭い問いを立てられるようになる必要はありません。ネットの数字(再生数)の罠に気づき、「これっておかしくない?」とつぶやいた目の前の小さな変化を見逃さず、面白がって伴走してあげてください。
みなさんのそのフラットな眼差し(伴走)こそが、子どもたちを古い因習から守り、他者への敬意を持った未来のクリーンな社会を作る最大の原動力です。私たちは、みなさんの挑戦を心から応援しています!
#プログラミング教育 #メディアリテラシー #GIGAスクール #情報モラル #アクティブラーニング #探究学習 #小学校教育 #教育ICT #子育て #Web3教育