<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>＃無料アプリ アーカイブ - じゅにさん子育てブログ</title>
	<atom:link href="https://jouniorsankosodate.com/tag/%EF%BC%83%E7%84%A1%E6%96%99%E3%82%A2%E3%83%97%E3%83%AA/feed/" rel="self" type="application/rss+xml" />
	<link>https://jouniorsankosodate.com/tag/＃無料アプリ/</link>
	<description>受験のその先へ｜子どもたちのより良い未来を育てる</description>
	<lastBuildDate>Thu, 04 Jun 2026 09:51:31 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://jouniorsankosodate.com/wp-content/uploads/2026/02/cropped-44f1f7a5e508593f7c057572c07f45a3-32x32.jpg</url>
	<title>＃無料アプリ アーカイブ - じゅにさん子育てブログ</title>
	<link>https://jouniorsankosodate.com/tag/＃無料アプリ/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【国語】動詞の分類をわかりやすく解説｜自動詞・他動詞・補助動詞の見分け方</title>
		<link>https://jouniorsankosodate.com/5852-2/</link>
					<comments>https://jouniorsankosodate.com/5852-2/#respond</comments>
		
		<dc:creator><![CDATA[じゅにさん]]></dc:creator>
		<pubDate>Sun, 17 May 2026 06:00:42 +0000</pubDate>
				<category><![CDATA[📖国語学習]]></category>
		<category><![CDATA[＃同氏の分類]]></category>
		<category><![CDATA[#国語]]></category>
		<category><![CDATA[＃無料アプリ]]></category>
		<guid isPermaLink="false">https://jouniorsankosodate.com/?p=5852</guid>

					<description><![CDATA[<p>🐙 動詞の分類とは？ 動詞は、働き方によって次の3つに分けられます。 ① 自動詞（じどうし） 👉 目的語（〜を）をとらない動詞 👉 主語が自分で動いたり、変化したりする動詞。 🌟 見分け方 「〜を」をつけると不自然になる [&#8230;]</p>
<p>投稿 <a href="https://jouniorsankosodate.com/5852-2/">【国語】動詞の分類をわかりやすく解説｜自動詞・他動詞・補助動詞の見分け方</a> は <a href="https://jouniorsankosodate.com">じゅにさん子育てブログ</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[
<h1 class="wp-block-heading">🐙 動詞の分類とは？</h1>



<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="1000" height="667" src="https://jouniorsankosodate.com/wp-content/uploads/2026/05/8a41f6751fff11e47e551f14b0ccb537.jpg" alt="" class="wp-image-5884" srcset="https://jouniorsankosodate.com/wp-content/uploads/2026/05/8a41f6751fff11e47e551f14b0ccb537.jpg 1000w, https://jouniorsankosodate.com/wp-content/uploads/2026/05/8a41f6751fff11e47e551f14b0ccb537-300x200.jpg 300w, https://jouniorsankosodate.com/wp-content/uploads/2026/05/8a41f6751fff11e47e551f14b0ccb537-768x512.jpg 768w" sizes="(max-width: 1000px) 100vw, 1000px" /></figure>



<p class="wp-block-paragraph">動詞は、働き方によって次の3つに分けられます。</p>



<ol class="wp-block-list">
<li><strong>自動詞（じどうし）</strong></li>



<li><strong>他動詞（たどうし）</strong></li>



<li><strong>補助動詞（ほじょどうし）</strong></li>
</ol>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">① 自動詞（じどうし）</h1>



<p class="wp-block-paragraph">👉 <strong>目的語（〜を）をとらない動詞</strong></p>



<p class="wp-block-paragraph">👉 主語が自分で動いたり、変化したりする動詞。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">🌟 見分け方</h2>



<p class="wp-block-paragraph">「〜を」をつけると不自然になる。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">📝 例</h2>



<ul class="wp-block-list">
<li>ドアが 開く。</li>



<li>花が 咲く。</li>



<li>電車が 止まる。</li>



<li>子どもが 起きる。</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">🐙 イメージ</h2>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">自分で動く！</p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">② 他動詞（たどうし）</h1>



<p class="wp-block-paragraph">👉 <strong>目的語（〜を）をとる動詞</strong></p>



<p class="wp-block-paragraph">👉 何かに働きかける動詞。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">🌟 見分け方</h2>



<p class="wp-block-paragraph">「〜を」をつけると自然。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">📝 例</h2>



<ul class="wp-block-list">
<li>ドアを 開ける。</li>



<li>花を 飾る。</li>



<li>電車を 止める。</li>



<li>子どもを 起こす。</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">🐙 イメージ</h2>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">だれか・何かに働きかける！</p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">🎯 自動詞と他動詞のセット</h1>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>自動詞</th><th>他動詞</th></tr></thead><tbody><tr><td>開く</td><td>開ける</td></tr><tr><td>閉まる</td><td>閉める</td></tr><tr><td>止まる</td><td>止める</td></tr><tr><td>起きる</td><td>起こす</td></tr><tr><td>落ちる</td><td>落とす</td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">③ 補助動詞（ほじょどうし）</h1>



<p class="wp-block-paragraph">👉 他の動詞の後ろについて、意味を付け足す動詞。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">📝 例</h2>



<h3 class="wp-block-heading">食べている</h3>



<ul class="wp-block-list">
<li>食べて → 本来の動詞</li>



<li>いる → 補助動詞</li>
</ul>



<h3 class="wp-block-heading">読んでみる</h3>



<ul class="wp-block-list">
<li>読んで → 本来の動詞</li>



<li>みる → 補助動詞</li>
</ul>



<h3 class="wp-block-heading">宿題をしてしまう</h3>



<ul class="wp-block-list">
<li>して → 本来の動詞</li>



<li>しまう → 補助動詞</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">🌟 よく出る補助動詞</h2>



<ul class="wp-block-list">
<li>いる</li>



<li>ある</li>



<li>みる</li>



<li>おく</li>



<li>しまう</li>



<li>いく</li>



<li>くる</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">🐙 補助動詞の見分け方</h1>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">「〜て」「〜で」の後ろについて、意味を足している。</p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">📝 例</h1>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>文</th><th>補助動詞</th></tr></thead><tbody><tr><td>本を読んでいる</td><td>いる</td></tr><tr><td>食べてみる</td><td>みる</td></tr><tr><td>宿題をしておく</td><td>おく</td></tr><tr><td>泣いてしまった</td><td>しまう</td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">🎯 まとめ</h1>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>種類</th><th>特徴</th></tr></thead><tbody><tr><td>自動詞</td><td>〜を をとらない</td></tr><tr><td>他動詞</td><td>〜を をとる</td></tr><tr><td>補助動詞</td><td>後ろについて意味を足す</td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">🌟 一言で覚えるなら</h1>



<ul class="wp-block-list">
<li>自動詞 → 自分で動く</li>



<li>他動詞 → 相手に働きかける</li>



<li>補助動詞 → 意味を足す</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">🐙 タコタ式まとめ</h1>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">自分で動く・相手に働きかける・意味を足す</p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">📝 例題</h1>



<h3 class="wp-block-heading">ドアが開く</h3>



<p class="wp-block-paragraph">→ 開く = 自動詞</p>



<h3 class="wp-block-heading">ドアを開ける</h3>



<p class="wp-block-paragraph">→ 開ける = 他動詞</p>



<h3 class="wp-block-heading">ドアを開けてみる</h3>



<p class="wp-block-paragraph">→ みる = 補助動詞</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">📌 品詞との違い</h1>



<ul class="wp-block-list">
<li>品詞 → 動詞</li>



<li>動詞の分類 → 自動詞・他動詞・補助動詞</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">🎯 まとめ</h1>



<p class="wp-block-paragraph">動詞は、働き方によって自動詞・他動詞・補助動詞に分けられます。<br><strong>「自分で動く」「相手に働きかける」「意味を足す」</strong>の3つで覚えましょう🐙✨</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"><span class="fz-24px">🐙</span> <strong><span class="fz-32px">練習問題</span></strong></p>



<div id="doushi-bunrui-quiz">
  <style>
    #doushi-bunrui-quiz{
      max-width:820px;
      margin:24px auto;
      font-family:"Hiragino Sans","Yu Gothic",sans-serif;
      color:#333;
    }
    #doushi-bunrui-quiz *{box-sizing:border-box;}
    #doushi-bunrui-quiz .quiz-card,
    #doushi-bunrui-quiz .finish-card{
      background:#fff;
      border:3px solid #dff3ff;
      border-radius:24px;
      padding:24px 16px 28px;
      box-shadow:0 8px 24px rgba(0,0,0,.08);
    }
    #doushi-bunrui-quiz .title{
      text-align:center;
      font-size:clamp(26px,4.5vw,38px);
      color:#2c6fa8;
      margin:0 0 8px;
      font-weight:bold;
    }
    #doushi-bunrui-quiz .sub{
      text-align:center;
      color:#666;
      margin:0 0 18px;
    }
    #doushi-bunrui-quiz .rule{
      background:#eef9ff;
      border:2px dashed #9cd6f5;
      border-radius:16px;
      padding:14px;
      margin-bottom:18px;
      line-height:1.8;
      font-weight:bold;
    }
    #doushi-bunrui-quiz .status{
      display:flex;
      justify-content:space-between;
      gap:10px;
      flex-wrap:wrap;
      color:#2b5d84;
      font-weight:bold;
      margin-bottom:16px;
    }
    #doushi-bunrui-quiz .question-box{
      background:#fffdf7;
      border:2px solid #ffe4a8;
      border-radius:18px;
      padding:18px 14px;
    }
    #doushi-bunrui-quiz .badge{
      display:inline-block;
      background:#ffd76a;
      color:#6a4b00;
      padding:4px 12px;
      border-radius:999px;
      font-size:14px;
      font-weight:bold;
      margin-bottom:12px;
    }
    #doushi-bunrui-quiz .question{
      font-size:22px;
      font-weight:bold;
      text-align:center;
      margin:10px 0 18px;
      line-height:1.7;
    }
    #doushi-bunrui-quiz .choices{
      display:grid;
      gap:10px;
    }
    #doushi-bunrui-quiz .choice-btn{
      width:100%;
      border:none;
      border-radius:14px;
      padding:14px 12px;
      background:#eef7ff;
      color:#234;
      font-size:18px;
      font-weight:bold;
      cursor:pointer;
      box-shadow:0 3px 8px rgba(0,0,0,.05);
    }
    #doushi-bunrui-quiz .choice-btn.correct{
      background:#d8f7df;
      color:#17612c;
    }
    #doushi-bunrui-quiz .choice-btn.wrong{
      background:#ffe1e1;
      color:#9d2d2d;
    }
    #doushi-bunrui-quiz .choice-btn:disabled{
      opacity:1;
      cursor:default;
    }
    #doushi-bunrui-quiz .answer{
      display:none;
      margin-top:14px;
      padding:14px;
      border-radius:14px;
      line-height:1.8;
    }
    #doushi-bunrui-quiz .answer.show{display:block;}
    #doushi-bunrui-quiz .answer.correct{
      background:#ecfff1;
      border:2px solid #9fe0af;
    }
    #doushi-bunrui-quiz .answer.wrong{
      background:#fff2f2;
      border:2px solid #f0b4b4;
    }
    #doushi-bunrui-quiz .btn-area{
      text-align:center;
      margin-top:16px;
      display:flex;
      justify-content:center;
      gap:10px;
      flex-wrap:wrap;
    }
    #doushi-bunrui-quiz .next-btn,
    #doushi-bunrui-quiz .retry-btn,
    #doushi-bunrui-quiz .wrong-btn{
      border:none;
      border-radius:999px;
      padding:12px 24px;
      background:#5db7f0;
      color:#fff;
      font-size:17px;
      font-weight:bold;
      cursor:pointer;
      box-shadow:0 4px 10px rgba(93,183,240,.3);
    }
    #doushi-bunrui-quiz .wrong-btn{
      background:#ff9f43;
    }
    #doushi-bunrui-quiz .next-btn:disabled{
      opacity:.45;
      cursor:default;
      box-shadow:none;
    }
    #doushi-bunrui-quiz .finish-card{
      display:none;
      text-align:center;
    }
    #doushi-bunrui-quiz .finish-card.show{
      display:block;
    }
    #doushi-bunrui-quiz .final-score{
      font-size:34px;
      font-weight:bold;
      color:#2b6fa5;
      margin:12px 0;
    }
    #doushi-bunrui-quiz .review{
      text-align:left;
      margin-top:18px;
      background:#f8fcff;
      border-radius:16px;
      padding:14px;
    }
    #doushi-bunrui-quiz .review-item{
      border-bottom:1px dashed #cfe5f3;
      padding:10px 0;
      line-height:1.8;
    }
    #doushi-bunrui-quiz .review-item:last-child{
      border-bottom:none;
    }
    #doushi-bunrui-quiz .tag{
      display:inline-block;
      font-size:13px;
      font-weight:bold;
      border-radius:999px;
      padding:2px 10px;
      margin-right:6px;
      background:#e9f5ff;
      color:#2a648f;
    }
  </style>

  <div class="quiz-card" id="db-card">
    <h2 class="title">動詞の分類クイズ</h2>
    <p class="sub">自動詞・他動詞・補助動詞を見分けよう</p>

    <div class="rule">
      自動詞 → 自分で動く・「〜を」をとらない<br>
      他動詞 → 相手に働きかける・「〜を」をとる<br>
      補助動詞 → 「〜て」「〜で」の後ろについて意味を足す
    </div>

    <div class="status">
      <div id="db-progress">1問目 / 30問</div>
      <div id="db-score">正解 0問</div>
    </div>

    <div class="question-box">
      <div class="badge" id="db-badge">第1問</div>
      <div class="question" id="db-question"></div>
      <div class="choices" id="db-choices"></div>
      <div class="answer" id="db-answer"></div>
      <div class="btn-area">
        <button class="next-btn" id="db-next" disabled>つぎへ</button>
      </div>
    </div>
  </div>

  <div class="finish-card" id="db-finish">
    <h2 class="title">クイズ終了</h2>
    <div class="final-score" id="db-final"></div>
    <p id="db-comment"></p>

    <div class="btn-area">
      <button class="wrong-btn" id="db-wrong-retry" style="display:none;">まちがえた問題だけもう一回</button>
      <button class="retry-btn" onclick="location.reload()">全部もういちど</button>
    </div>

    <div class="review">
      <strong>ふくしゅう</strong>
      <div id="db-review"></div>
    </div>
  </div>

  <script>
    (function(){
      function shuffle(array){
        var arr = array.slice();
        for(var i = arr.length - 1; i > 0; i--){
          var j = Math.floor(Math.random() * (i + 1));
          var tmp = arr[i];
          arr[i] = arr[j];
          arr[j] = tmp;
        }
        return arr;
      }

      var choices = ["自動詞","他動詞","補助動詞"];

var originalQuiz = [
  {q:"「ドアが開く」の「開く」は？", a:"自動詞", e:"「ドアが」となっていて、ドア自身が開くので自動詞です。"},
  {q:"「食べている」の「いる」は？", a:"補助動詞", e:"「食べて」の後ろについて意味を足しているので補助動詞です。"},
  {q:"「ドアを開ける」の「開ける」は？", a:"他動詞", e:"「ドアを」となっていて、ドアに働きかけているので他動詞です。"},

  {q:"「花を飾る」の「飾る」は？", a:"他動詞", e:"「花を」となっていて、花に働きかけているので他動詞です。"},
  {q:"「花が咲く」の「咲く」は？", a:"自動詞", e:"「花が」となっていて、花自身が咲くので自動詞です。"},
  {q:"「ドアを開けてみる」の「みる」は？", a:"補助動詞", e:"「開けて」の後ろについて意味を足しているので補助動詞です。"},

  {q:"「電車を止める」の「止める」は？", a:"他動詞", e:"「電車を」となっていて、電車に働きかけているので他動詞です。"},
  {q:"「電車が止まる」の「止まる」は？", a:"自動詞", e:"「電車が」となっていて、電車自身が止まるので自動詞です。"},
  {q:"「宿題をしてしまう」の「しまう」は？", a:"補助動詞", e:"「して」の後ろについて、完了などの意味を足しているので補助動詞です。"},

  {q:"「子どもを起こす」の「起こす」は？", a:"他動詞", e:"「子どもを」となっていて、子どもに働きかけているので他動詞です。"},
  {q:"「先に読んでおく」の「おく」は？", a:"補助動詞", e:"「読んで」の後ろについて、前もってする意味を足しているので補助動詞です。"},
  {q:"「子どもが起きる」の「起きる」は？", a:"自動詞", e:"「子どもが」となっていて、子ども自身が起きるので自動詞です。"},

  {q:"「ボールが落ちる」の「落ちる」は？", a:"自動詞", e:"「ボールが」となっていて、ボール自身が落ちるので自動詞です。"},
  {q:"「食べてみる」の「みる」は？", a:"補助動詞", e:"「食べて」の後ろについて、試しにする意味を足しているので補助動詞です。"},
  {q:"「ボールを落とす」の「落とす」は？", a:"他動詞", e:"「ボールを」となっていて、ボールに働きかけているので他動詞です。"},

  {q:"「窓を閉める」の「閉める」は？", a:"他動詞", e:"「窓を」となっていて、窓に働きかけているので他動詞です。"},
  {q:"「窓が閉まる」の「閉まる」は？", a:"自動詞", e:"「窓が」となっていて、窓自身が閉まるので自動詞です。"},
  {q:"「走っていく」の「いく」は？", a:"補助動詞", e:"「走って」の後ろについて意味を足しているので補助動詞です。"},

  {q:"「水をこぼす」の「こぼす」は？", a:"他動詞", e:"「水を」となっていて、水に働きかけているので他動詞です。"},
  {q:"「読んでくる」の「くる」は？", a:"補助動詞", e:"「読んで」の後ろについて意味を足しているので補助動詞です。"},
  {q:"「水がこぼれる」の「こぼれる」は？", a:"自動詞", e:"「水が」となっていて、水自身がこぼれるので自動詞です。"},

  {q:"「鳥が飛ぶ」の「飛ぶ」は？", a:"自動詞", e:"「鳥が」となっていて、鳥自身が飛ぶので自動詞です。"},
  {q:"「紙を切る」の「切る」は？", a:"他動詞", e:"「紙を」となっていて、紙に働きかけているので他動詞です。"},
  {q:"「泣いてしまう」の「しまう」は？", a:"補助動詞", e:"「泣いて」の後ろについて意味を足しているので補助動詞です。"},

  {q:"「明かりをつける」の「つける」は？", a:"他動詞", e:"「明かりを」となっていて、明かりに働きかけているので他動詞です。"},
  {q:"「明かりがつく」の「つく」は？", a:"自動詞", e:"「明かりが」となっていて、明かり自身がつくので自動詞です。"},
  {q:"「勉強している」の「いる」は？", a:"補助動詞", e:"「勉強して」の後ろについて意味を足しているので補助動詞です。"},

  {q:"「ドアを閉める」の「閉める」は？", a:"他動詞", e:"「ドアを」となっていて、ドアに働きかけているので他動詞です。"},
  {q:"「書いてみる」の「みる」は？", a:"補助動詞", e:"「書いて」の後ろについて、試しにする意味を足しているので補助動詞です。"},
  {q:"「ドアが閉まる」の「閉まる」は？", a:"自動詞", e:"「ドアが」となっていて、ドア自身が閉まるので自動詞です。"}
];

      var quiz = shuffle(originalQuiz);
      var current = 0;
      var score = 0;
      var answered = false;
      var wrongQuiz = [];
      var results = [];
      var reviewMode = false;

      var progress = document.getElementById("db-progress");
      var scoreEl = document.getElementById("db-score");
      var badge = document.getElementById("db-badge");
      var question = document.getElementById("db-question");
      var choicesBox = document.getElementById("db-choices");
      var answer = document.getElementById("db-answer");
      var next = document.getElementById("db-next");
      var card = document.getElementById("db-card");
      var finish = document.getElementById("db-finish");
      var final = document.getElementById("db-final");
      var comment = document.getElementById("db-comment");
      var review = document.getElementById("db-review");
      var wrongRetry = document.getElementById("db-wrong-retry");

      function load(){
        answered = false;
        next.disabled = true;
        answer.className = "answer";
        answer.innerHTML = "";

        var item = quiz[current];

        progress.textContent = (current + 1) + "問目 / " + quiz.length + "問";
        scoreEl.textContent = "正解 " + score + "問";
        badge.textContent = reviewMode ? "復習 第" + (current + 1) + "問" : "第" + (current + 1) + "問";
        question.textContent = item.q;
        choicesBox.innerHTML = "";

        var shuffledChoices = shuffle(choices);

        shuffledChoices.forEach(function(choice){
          var btn = document.createElement("button");
          btn.className = "choice-btn";
          btn.type = "button";
          btn.textContent = choice;
          btn.onclick = function(){
            check(choice, btn, item);
          };
          choicesBox.appendChild(btn);
        });
      }

      function check(selected, btn, item){
        if(answered) return;
        answered = true;

        var correct = selected === item.a;
        var buttons = choicesBox.querySelectorAll(".choice-btn");

        buttons.forEach(function(b){
          b.disabled = true;
          if(b.textContent === item.a){
            b.classList.add("correct");
          }
        });

        if(!correct){
          btn.classList.add("wrong");
          wrongQuiz.push(item);
        }else{
          score++;
        }

        scoreEl.textContent = "正解 " + score + "問";

        results.push({
          question:item.q,
          selected:selected,
          answer:item.a,
          correct:correct,
          explanation:item.e
        });

        answer.className = "answer show " + (correct ? "correct" : "wrong");
        answer.innerHTML = correct
          ? "<strong>正解です。</strong><br>" + item.e
          : "<strong>ざんねん。</strong><br>正解は「" + item.a + "」です。<br>" + item.e;

        next.disabled = false;
      }

      function finishQuiz(){
        card.style.display = "none";
        finish.classList.add("show");
        final.textContent = score + " / " + quiz.length;

        if(score === quiz.length){
          comment.textContent = "全問正解です。動詞の分類はばっちりです。";
        }else if(score >= Math.ceil(quiz.length * 0.8)){
          comment.textContent = "かなりできています。まちがえた問題だけもう一度やるとさらに定着します。";
        }else if(score >= Math.ceil(quiz.length * 0.5)){
          comment.textContent = "いい感じです。自動詞・他動詞・補助動詞の違いをもう一度確認しましょう。";
        }else{
          comment.textContent = "まずは、自動詞は自分で動く、他動詞は相手に働きかける、補助動詞は意味を足す、と覚えましょう。";
        }

        wrongRetry.style.display = (!reviewMode && wrongQuiz.length > 0) ? "inline-block" : "none";

        review.innerHTML = "";
        results.forEach(function(r, index){
          var div = document.createElement("div");
          div.className = "review-item";
          div.innerHTML =
            '<span class="tag">' + (r.correct ? "正解" : "要復習") + '</span>' +
            '<strong>第' + (index + 1) + '問</strong> ' + r.question + '<br>' +
            '選んだ答え：' + r.selected + '<br>' +
            '正解：' + r.answer + '<br>' +
            r.explanation;
          review.appendChild(div);
        });
      }

      next.onclick = function(){
        current++;
        if(current < quiz.length){
          load();
        }else{
          finishQuiz();
        }
      };

      wrongRetry.onclick = function(){
        quiz = shuffle(wrongQuiz);
        current = 0;
        score = 0;
        answered = false;
        wrongQuiz = [];
        results = [];
        reviewMode = true;
        finish.className = "finish-card";
        card.style.display = "block";
        load();
      };

      load();
    })();
  </script>
</div>



<div style="display:flex;gap:10px;justify-content:center;flex-wrap:wrap;margin:30px 0;">

  <a href="https://jouniorsankosodate.com/5845-2/"
     style="display:inline-block;background:#eaf5ff;color:#245f8e;text-decoration:none;font-weight:bold;padding:12px 18px;border-radius:999px;border:2px solid #bfe5ff;">
    前のページ
  </a>

  <a href="https://jouniorsankosodate.com/kokugo-learning/"
     style="display:inline-block;background:#fff8e6;color:#8a5a00;text-decoration:none;font-weight:bold;padding:12px 18px;border-radius:999px;border:2px solid #ffcc66;">
    一覧へ戻る
  </a>

  <a href="次のページURL"
     style="display:inline-block;background:#eaffef;color:#17612c;text-decoration:none;font-weight:bold;padding:12px 18px;border-radius:999px;border:2px solid #b9efc6;">
    次のページ
  </a>

</div>



<p class="wp-block-paragraph">📚 中学英語の復習・先取りに</p>



<p class="wp-block-paragraph">むすこの学校でもスタディサプリが導入されています。</p>



<p class="wp-block-paragraph">昔は有名な先生の授業を受けるために塾や予備校へ通うイメージでしたが、今は自宅で人気講師の授業を受けられる時代なんですね。</p>



<p class="wp-block-paragraph">特にスタディサプリは、</p>



<p class="wp-block-paragraph">✅ 英語の苦手単元に戻れる<br>✅ 定期テスト対策ができる<br>✅ 部活後でも好きな時間に学習できる<br>✅ 塾より費用を抑えやすい</p>



<p class="wp-block-paragraph">という点が魅力だと思います😊</p>



<p class="wp-block-paragraph">英検対策だけでなく、中学英語全体の理解にも役立つので気になる方はチェックしてみてください。</p>



<a rel="nofollow" href="https://px.a8.net/svt/ejp?a8mat=4B3G6H+G9UKT6+36T2+TSJ42">スタディサプリ中学講座はこちら</a>
<img decoding="async" border="0" width="1" height="1" src="https://www18.a8.net/0.gif?a8mat=4B3G6H+G9UKT6+36T2+TSJ42" alt="">



<p class="wp-block-paragraph"></p>



<a href="https://blogmura.com/profiles/11199271?p_cid=11199271"><img decoding="async" src="https://blogparts.blogmura.com/parts_image/user/pv11199271.gif" alt="PVアクセスランキング にほんブログ村" /></a>



<p class="wp-block-paragraph">読んだよ！の応援クリック嬉しいです👇</p>



<a rel="noopener" href="https://blogmura.com/ranking/in?p_cid=11199271" target="_blank"><img decoding="async" src="https://b.blogmura.com/original/1411684" width="240" height="240" border="0" alt="にほんブログ村 にほんブログ村へ" /></a><br /><a rel="noopener" href="https://blogmura.com/ranking/in?p_cid=11199271" target="_blank">にほんブログ村</a>



<p class="wp-block-paragraph"></p>
<p>投稿 <a href="https://jouniorsankosodate.com/5852-2/">【国語】動詞の分類をわかりやすく解説｜自動詞・他動詞・補助動詞の見分け方</a> は <a href="https://jouniorsankosodate.com">じゅにさん子育てブログ</a> に最初に表示されました。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://jouniorsankosodate.com/5852-2/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【国語】文の成分とは？主語・述語・修飾語・接続語・独立語をわかりやすく解説</title>
		<link>https://jouniorsankosodate.com/5845-2/</link>
					<comments>https://jouniorsankosodate.com/5845-2/#respond</comments>
		
		<dc:creator><![CDATA[じゅにさん]]></dc:creator>
		<pubDate>Sun, 17 May 2026 05:36:00 +0000</pubDate>
				<category><![CDATA[📖国語学習]]></category>
		<category><![CDATA[＃国語]]></category>
		<category><![CDATA[＃文の成分]]></category>
		<category><![CDATA[＃無料アプリ]]></category>
		<guid isPermaLink="false">https://jouniorsankosodate.com/?p=5845</guid>

					<description><![CDATA[<p>🐙 文の成分とは？ 文の中で、それぞれの言葉がどんな役割をしているかを表したものを文の成分（ぶんのせいぶん） といいます。 たとえば、 タコタが 元気に あいさつする。 この文には、 という役割があります。 🎯 文の成分 [&#8230;]</p>
<p>投稿 <a href="https://jouniorsankosodate.com/5845-2/">【国語】文の成分とは？主語・述語・修飾語・接続語・独立語をわかりやすく解説</a> は <a href="https://jouniorsankosodate.com">じゅにさん子育てブログ</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"></p>



<h1 class="wp-block-heading">🐙 文の成分とは？</h1>



<figure class="wp-block-image size-full is-resized"><img decoding="async" width="1000" height="667" src="https://jouniorsankosodate.com/wp-content/uploads/2026/05/41e1c64fc65b9c5d03be1dd445fee061.jpg" alt="" class="wp-image-5846" style="width:739px;height:auto" srcset="https://jouniorsankosodate.com/wp-content/uploads/2026/05/41e1c64fc65b9c5d03be1dd445fee061.jpg 1000w, https://jouniorsankosodate.com/wp-content/uploads/2026/05/41e1c64fc65b9c5d03be1dd445fee061-300x200.jpg 300w, https://jouniorsankosodate.com/wp-content/uploads/2026/05/41e1c64fc65b9c5d03be1dd445fee061-768x512.jpg 768w" sizes="(max-width: 1000px) 100vw, 1000px" /></figure>



<p class="wp-block-paragraph">文の中で、それぞれの言葉がどんな役割をしているかを表したものを<br><strong>文の成分（ぶんのせいぶん）</strong> といいます。</p>



<p class="wp-block-paragraph">たとえば、</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">タコタが 元気に あいさつする。</p>
</blockquote>



<p class="wp-block-paragraph">この文には、</p>



<ul class="wp-block-list">
<li>「だれが？」 → タコタが</li>



<li>「どうする？」 → あいさつする</li>



<li>「どのように？」 → 元気に</li>
</ul>



<p class="wp-block-paragraph">という役割があります。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">🎯 文の成分は5つ</h1>



<ol class="wp-block-list">
<li>主語（しゅご）</li>



<li>述語（じゅつご）</li>



<li>修飾語（しゅうしょくご）</li>



<li>接続語（せつぞくご）</li>



<li>独立語（どくりつご）</li>
</ol>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">① 主語（しゅご）</h1>



<p class="wp-block-paragraph">👉 「だれが」「なにが」にあたる言葉。</p>



<h3 class="wp-block-heading">例</h3>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">タコタが 勉強する。</p>
</blockquote>



<p class="wp-block-paragraph">→ 「タコタが」が主語。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">② 述語（じゅつご）</h1>



<p class="wp-block-paragraph">👉 文の中心になる言葉。<br>「どうする」「どんなだ」「何だ」にあたる。</p>



<h3 class="wp-block-heading">例</h3>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">タコタが <strong>勉強する。</strong></p>
</blockquote>



<p class="wp-block-paragraph">→ 「勉強する」が述語。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">③ 修飾語（しゅうしょくご）</h1>



<p class="wp-block-paragraph">👉 他の言葉をくわしく説明する言葉。</p>



<h3 class="wp-block-heading">例</h3>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">タコタが <strong>毎日</strong> 勉強する。</p>
</blockquote>



<p class="wp-block-paragraph">→ 「毎日」が修飾語。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>赤い</strong> 本</p>
</blockquote>



<p class="wp-block-paragraph">→ 「赤い」が修飾語。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">④ 接続語（せつぞくご）</h1>



<p class="wp-block-paragraph">👉 文と文をつなぐ言葉。</p>



<h3 class="wp-block-heading">例</h3>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">雨が降った。<strong>だから</strong>、家にいた。</p>
</blockquote>



<p class="wp-block-paragraph">→ 「だから」が接続語。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">⑤ 独立語（どくりつご）</h1>



<p class="wp-block-paragraph">👉 他の言葉と直接関係しない言葉。</p>



<h3 class="wp-block-heading">例</h3>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>はい</strong>、わかりました。</p>
</blockquote>



<p class="wp-block-paragraph">→ 「はい」が独立語。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>もしもし</strong>、聞こえますか。</p>
</blockquote>



<p class="wp-block-paragraph">→ 「もしもし」が独立語。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">🐙 例文でまとめてみよう</h1>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">もしもし、タコタが いつも 元気に 勉強する。だから、成績が上がった。</p>
</blockquote>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>言葉</th><th>文の成分</th></tr></thead><tbody><tr><td>もしもし</td><td>独立語</td></tr><tr><td>タコタが</td><td>主語</td></tr><tr><td>いつも</td><td>修飾語</td></tr><tr><td>元気に</td><td>修飾語</td></tr><tr><td>勉強する</td><td>述語</td></tr><tr><td>だから</td><td>接続語</td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">🎯 見分け方のコツ</h1>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>文の成分</th><th>見分け方</th></tr></thead><tbody><tr><td>主語</td><td>だれが・なにが</td></tr><tr><td>述語</td><td>どうする・どんなだ・何だ</td></tr><tr><td>修飾語</td><td>くわしく説明</td></tr><tr><td>接続語</td><td>文と文をつなぐ</td></tr><tr><td>独立語</td><td>呼びかけ・返事</td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">🌟 一言で覚えるなら</h1>



<ul class="wp-block-list">
<li>主語 → だれが</li>



<li>述語 → どうする</li>



<li>修飾語 → くわしく</li>



<li>接続語 → つなぐ</li>



<li>独立語 → ひとりぼっち</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">🐙 タコタ式まとめ</h1>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>だれが・どうする・くわしく・つなぐ・ひとりぼっち</strong></p>
</blockquote>



<p class="wp-block-paragraph">これで文の成分はバッチリ✨</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">📚 品詞との違い</h1>



<ul class="wp-block-list">
<li>品詞 → 言葉の種類</li>



<li>文の成分 → 文の中での役割</li>
</ul>



<h3 class="wp-block-heading">例</h3>



<p class="wp-block-paragraph">「元気に」</p>



<ul class="wp-block-list">
<li>品詞 → 副詞</li>



<li>文の成分 → 修飾語</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"><span class="fz-24px">🐙</span> <strong><span class="fz-32px">練習問題</span></strong></p>



<div id="bunseibun-quiz">
  <style>
    #bunseibun-quiz{
      max-width:820px;
      margin:24px auto;
      font-family:"Hiragino Sans","Yu Gothic",sans-serif;
      color:#333;
    }
    #bunseibun-quiz *{box-sizing:border-box;}
    #bunseibun-quiz .quiz-card,
    #bunseibun-quiz .finish-card{
      background:#fff;
      border:3px solid #dff3ff;
      border-radius:24px;
      padding:24px 16px 28px;
      box-shadow:0 8px 24px rgba(0,0,0,.08);
    }
    #bunseibun-quiz .title{
      text-align:center;
      font-size:clamp(26px,4.5vw,38px);
      color:#2c6fa8;
      margin:0 0 8px;
      font-weight:bold;
    }
    #bunseibun-quiz .sub{
      text-align:center;
      color:#666;
      margin:0 0 18px;
    }
    #bunseibun-quiz .rule{
      background:#eef9ff;
      border:2px dashed #9cd6f5;
      border-radius:16px;
      padding:14px;
      margin-bottom:18px;
      line-height:1.8;
      font-weight:bold;
    }
    #bunseibun-quiz .status{
      display:flex;
      justify-content:space-between;
      gap:10px;
      flex-wrap:wrap;
      color:#2b5d84;
      font-weight:bold;
      margin-bottom:16px;
    }
    #bunseibun-quiz .question-box{
      background:#fffdf7;
      border:2px solid #ffe4a8;
      border-radius:18px;
      padding:18px 14px;
    }
    #bunseibun-quiz .badge{
      display:inline-block;
      background:#ffd76a;
      color:#6a4b00;
      padding:4px 12px;
      border-radius:999px;
      font-size:14px;
      font-weight:bold;
      margin-bottom:12px;
    }
    #bunseibun-quiz .question{
      font-size:22px;
      font-weight:bold;
      text-align:center;
      margin:10px 0 18px;
      line-height:1.7;
    }
    #bunseibun-quiz .choices{
      display:grid;
      gap:10px;
    }
    #bunseibun-quiz .choice-btn{
      width:100%;
      border:none;
      border-radius:14px;
      padding:14px 12px;
      background:#eef7ff;
      color:#234;
      font-size:18px;
      font-weight:bold;
      cursor:pointer;
      box-shadow:0 3px 8px rgba(0,0,0,.05);
    }
    #bunseibun-quiz .choice-btn.correct{
      background:#d8f7df;
      color:#17612c;
    }
    #bunseibun-quiz .choice-btn.wrong{
      background:#ffe1e1;
      color:#9d2d2d;
    }
    #bunseibun-quiz .choice-btn:disabled{
      opacity:1;
      cursor:default;
    }
    #bunseibun-quiz .answer{
      display:none;
      margin-top:14px;
      padding:14px;
      border-radius:14px;
      line-height:1.8;
    }
    #bunseibun-quiz .answer.show{display:block;}
    #bunseibun-quiz .answer.correct{
      background:#ecfff1;
      border:2px solid #9fe0af;
    }
    #bunseibun-quiz .answer.wrong{
      background:#fff2f2;
      border:2px solid #f0b4b4;
    }
    #bunseibun-quiz .btn-area{
      text-align:center;
      margin-top:16px;
      display:flex;
      justify-content:center;
      gap:10px;
      flex-wrap:wrap;
    }
    #bunseibun-quiz .next-btn,
    #bunseibun-quiz .retry-btn,
    #bunseibun-quiz .wrong-btn{
      border:none;
      border-radius:999px;
      padding:12px 24px;
      background:#5db7f0;
      color:#fff;
      font-size:17px;
      font-weight:bold;
      cursor:pointer;
      box-shadow:0 4px 10px rgba(93,183,240,.3);
    }
    #bunseibun-quiz .wrong-btn{
      background:#ff9f43;
    }
    #bunseibun-quiz .next-btn:disabled{
      opacity:.45;
      cursor:default;
      box-shadow:none;
    }
    #bunseibun-quiz .finish-card{
      display:none;
      text-align:center;
    }
    #bunseibun-quiz .finish-card.show{
      display:block;
    }
    #bunseibun-quiz .final-score{
      font-size:34px;
      font-weight:bold;
      color:#2b6fa5;
      margin:12px 0;
    }
    #bunseibun-quiz .review{
      text-align:left;
      margin-top:18px;
      background:#f8fcff;
      border-radius:16px;
      padding:14px;
    }
    #bunseibun-quiz .review-item{
      border-bottom:1px dashed #cfe5f3;
      padding:10px 0;
      line-height:1.8;
    }
    #bunseibun-quiz .review-item:last-child{
      border-bottom:none;
    }
    #bunseibun-quiz .tag{
      display:inline-block;
      font-size:13px;
      font-weight:bold;
      border-radius:999px;
      padding:2px 10px;
      margin-right:6px;
      background:#e9f5ff;
      color:#2a648f;
    }
  </style>

  <div class="quiz-card" id="bs-card">
    <h2 class="title">文の成分クイズ</h2>
    <p class="sub">文の中の役割を見分けよう</p>

    <div class="rule">
      主語 → だれが・なにが<br>
      述語 → どうする・どんなだ・何だ<br>
      修飾語 → くわしく説明<br>
      接続語 → 文と文をつなぐ<br>
      独立語 → 呼びかけ・返事・あいさつ
    </div>

    <div class="status">
      <div id="bs-progress">1問目 / 30問</div>
      <div id="bs-score">正解 0問</div>
    </div>

    <div class="question-box">
      <div class="badge" id="bs-badge">第1問</div>
      <div class="question" id="bs-question"></div>
      <div class="choices" id="bs-choices"></div>
      <div class="answer" id="bs-answer"></div>
      <div class="btn-area">
        <button class="next-btn" id="bs-next" disabled>つぎへ</button>
      </div>
    </div>
  </div>

  <div class="finish-card" id="bs-finish">
    <h2 class="title">クイズ終了</h2>
    <div class="final-score" id="bs-final"></div>
    <p id="bs-comment"></p>

    <div class="btn-area">
      <button class="wrong-btn" id="bs-wrong-retry" style="display:none;">まちがえた問題だけもう一回</button>
      <button class="retry-btn" onclick="location.reload()">全部もういちど</button>
    </div>

    <div class="review">
      <strong>ふくしゅう</strong>
      <div id="bs-review"></div>
    </div>
  </div>

  <script>
    (function(){
      function shuffle(array){
        var arr = array.slice();
        for(var i = arr.length - 1; i > 0; i--){
          var j = Math.floor(Math.random() * (i + 1));
          var tmp = arr[i];
          arr[i] = arr[j];
          arr[j] = tmp;
        }
        return arr;
      }

      var choices = ["主語","述語","修飾語","接続語","独立語"];

      var originalQuiz = [
        {q:"「タコタが 勉強する。」の「タコタが」は？", a:"主語", e:"「だれが」にあたる言葉なので主語です。"},
        {q:"「タコタが 勉強する。」の「勉強する」は？", a:"述語", e:"文の中心になる動きなので述語です。"},
        {q:"「タコタが 毎日 勉強する。」の「毎日」は？", a:"修飾語", e:"「勉強する」をくわしく説明しているので修飾語です。"},
        {q:"「雨が降った。だから、家にいた。」の「だから」は？", a:"接続語", e:"前の文と後ろの文をつないでいるので接続語です。"},
        {q:"「はい、わかりました。」の「はい」は？", a:"独立語", e:"返事の言葉で、ほかの言葉と直接関係しないので独立語です。"},

        {q:"「むすこくんが 本を読む。」の「むすこくんが」は？", a:"主語", e:"「だれが」にあたる言葉なので主語です。"},
        {q:"「むすこくんが 本を読む。」の「読む」は？", a:"述語", e:"文の中心になる動きなので述語です。"},
        {q:"「むすこくんが 静かに 本を読む。」の「静かに」は？", a:"修飾語", e:"「読む」をくわしく説明しているので修飾語です。"},
        {q:"「しかし、あきらめなかった。」の「しかし」は？", a:"接続語", e:"文と文をつなぐ働きがあるので接続語です。"},
        {q:"「もしもし、聞こえますか。」の「もしもし」は？", a:"独立語", e:"呼びかけの言葉なので独立語です。"},

        {q:"「ねこが 走る。」の「ねこが」は？", a:"主語", e:"「なにが」にあたる言葉なので主語です。"},
        {q:"「ねこが 走る。」の「走る」は？", a:"述語", e:"文の中心になる動きなので述語です。"},
        {q:"「ねこが すばやく 走る。」の「すばやく」は？", a:"修飾語", e:"「走る」をくわしく説明しているので修飾語です。"},
        {q:"「そして、昼寝をした。」の「そして」は？", a:"接続語", e:"文をつなぐ言葉なので接続語です。"},
        {q:"「おい、待って！」の「おい」は？", a:"独立語", e:"呼びかけの言葉なので独立語です。"},

        {q:"「先生が 話す。」の「先生が」は？", a:"主語", e:"「だれが」にあたる言葉なので主語です。"},
        {q:"「先生が 話す。」の「話す」は？", a:"述語", e:"文の中心になる動きなので述語です。"},
        {q:"「先生が ゆっくり 話す。」の「ゆっくり」は？", a:"修飾語", e:"「話す」をくわしく説明しているので修飾語です。"},
        {q:"「だから、宿題をした。」の「だから」は？", a:"接続語", e:"前の内容を受けて文をつなぐので接続語です。"},
        {q:"「こんにちは、先生。」の「こんにちは」は？", a:"独立語", e:"あいさつの言葉なので独立語です。"},

        {q:"「犬が 鳴く。」の「犬が」は？", a:"主語", e:"「なにが」にあたる言葉なので主語です。"},
        {q:"「犬が 鳴く。」の「鳴く」は？", a:"述語", e:"文の中心になる動きなので述語です。"},
        {q:"「犬が 大きな声で 鳴く。」の「大きな声で」は？", a:"修飾語", e:"「鳴く」をくわしく説明しているので修飾語です。"},
        {q:"「ところで、明日の予定は？」の「ところで」は？", a:"接続語", e:"話題をつなぐ言葉なので接続語です。"},
        {q:"「さようなら。」の「さようなら」は？", a:"独立語", e:"あいさつの言葉なので独立語です。"},

        {q:"「妹が 歌う。」の「妹が」は？", a:"主語", e:"「だれが」にあたる言葉なので主語です。"},
        {q:"「妹が 歌う。」の「歌う」は？", a:"述語", e:"文の中心になる動きなので述語です。"},
        {q:"「妹が 楽しく 歌う。」の「楽しく」は？", a:"修飾語", e:"「歌う」をくわしく説明しているので修飾語です。"},
        {q:"「それから、公園へ行った。」の「それから」は？", a:"接続語", e:"文と文をつなぐ働きがあるので接続語です。"},
        {q:"「はい、おねがいします。」の「はい」は？", a:"独立語", e:"返事の言葉なので独立語です。"}
      ];

      var quiz = shuffle(originalQuiz);
      var current = 0;
      var score = 0;
      var answered = false;
      var wrongQuiz = [];
      var results = [];
      var reviewMode = false;

      var progress = document.getElementById("bs-progress");
      var scoreEl = document.getElementById("bs-score");
      var badge = document.getElementById("bs-badge");
      var question = document.getElementById("bs-question");
      var choicesBox = document.getElementById("bs-choices");
      var answer = document.getElementById("bs-answer");
      var next = document.getElementById("bs-next");
      var card = document.getElementById("bs-card");
      var finish = document.getElementById("bs-finish");
      var final = document.getElementById("bs-final");
      var comment = document.getElementById("bs-comment");
      var review = document.getElementById("bs-review");
      var wrongRetry = document.getElementById("bs-wrong-retry");

      function load(){
        answered = false;
        next.disabled = true;
        answer.className = "answer";
        answer.innerHTML = "";

        var item = quiz[current];

        progress.textContent = (current + 1) + "問目 / " + quiz.length + "問";
        scoreEl.textContent = "正解 " + score + "問";
        badge.textContent = reviewMode ? "復習 第" + (current + 1) + "問" : "第" + (current + 1) + "問";
        question.textContent = item.q;
        choicesBox.innerHTML = "";

        var shuffledChoices = shuffle(choices);

        shuffledChoices.forEach(function(choice){
          var btn = document.createElement("button");
          btn.className = "choice-btn";
          btn.type = "button";
          btn.textContent = choice;
          btn.onclick = function(){
            check(choice, btn, item);
          };
          choicesBox.appendChild(btn);
        });
      }

      function check(selected, btn, item){
        if(answered) return;
        answered = true;

        var correct = selected === item.a;
        var buttons = choicesBox.querySelectorAll(".choice-btn");

        buttons.forEach(function(b){
          b.disabled = true;
          if(b.textContent === item.a){
            b.classList.add("correct");
          }
        });

        if(!correct){
          btn.classList.add("wrong");
          wrongQuiz.push(item);
        }else{
          score++;
        }

        scoreEl.textContent = "正解 " + score + "問";

        results.push({
          question:item.q,
          selected:selected,
          answer:item.a,
          correct:correct,
          explanation:item.e
        });

        answer.className = "answer show " + (correct ? "correct" : "wrong");
        answer.innerHTML = correct
          ? "<strong>正解です。</strong><br>" + item.e
          : "<strong>ざんねん。</strong><br>正解は「" + item.a + "」です。<br>" + item.e;

        next.disabled = false;
      }

      function finishQuiz(){
        card.style.display = "none";
        finish.classList.add("show");
        final.textContent = score + " / " + quiz.length;

        if(score === quiz.length){
          comment.textContent = "全問正解です。文の成分はばっちりです。";
        }else if(score >= Math.ceil(quiz.length * 0.8)){
          comment.textContent = "かなりできています。まちがえた問題だけもう一度やるとさらに定着します。";
        }else if(score >= Math.ceil(quiz.length * 0.5)){
          comment.textContent = "いい感じです。くり返し練習すると見分けやすくなります。";
        }else{
          comment.textContent = "まずは、主語・述語・修飾語・接続語・独立語の役割をもう一度確認しましょう。";
        }

        wrongRetry.style.display = (!reviewMode && wrongQuiz.length > 0) ? "inline-block" : "none";

        review.innerHTML = "";
        results.forEach(function(r, index){
          var div = document.createElement("div");
          div.className = "review-item";
          div.innerHTML =
            '<span class="tag">' + (r.correct ? "正解" : "要復習") + '</span>' +
            '<strong>第' + (index + 1) + '問</strong> ' + r.question + '<br>' +
            '選んだ答え：' + r.selected + '<br>' +
            '正解：' + r.answer + '<br>' +
            r.explanation;
          review.appendChild(div);
        });
      }

      next.onclick = function(){
        current++;
        if(current < quiz.length){
          load();
        }else{
          finishQuiz();
        }
      };

      wrongRetry.onclick = function(){
        quiz = shuffle(wrongQuiz);
        current = 0;
        score = 0;
        answered = false;
        wrongQuiz = [];
        results = [];
        reviewMode = true;
        finish.className = "finish-card";
        card.style.display = "block";
        load();
      };

      load();
    })();
  </script>
</div>



<div style="display:flex;gap:10px;justify-content:center;flex-wrap:wrap;margin:30px 0;">

  <a href="https://jouniorsankosodate.com/%f0%9f%90%99%e3%80%90%e3%82%bf%e3%82%b3%e3%82%bf%e3%81%ae%e5%9b%bd%e8%aa%9e%e3%83%ac%e3%83%83%e3%82%b9%e3%83%b3%e3%80%91%e6%b4%bb%e7%94%a8%e5%bd%a2%e3%81%ae%e8%a6%8b%e5%88%86%e3%81%91%e6%96%b9/"
     style="display:inline-block;background:#eaf5ff;color:#245f8e;text-decoration:none;font-weight:bold;padding:12px 18px;border-radius:999px;border:2px solid #bfe5ff;">
    前のページ
  </a>

  <a href="https://jouniorsankosodate.com/kokugo-learning/"
     style="display:inline-block;background:#fff8e6;color:#8a5a00;text-decoration:none;font-weight:bold;padding:12px 18px;border-radius:999px;border:2px solid #ffcc66;">
    一覧へ戻る
  </a>

  <a href="https://jouniorsankosodate.com/5845-2/"
     style="display:inline-block;background:#eaffef;color:#17612c;text-decoration:none;font-weight:bold;padding:12px 18px;border-radius:999px;border:2px solid #b9efc6;">
    次のページ
  </a>

</div>



<p class="wp-block-paragraph">📚 中学英語の復習・先取りに</p>



<p class="wp-block-paragraph">むすこの学校でもスタディサプリが導入されています。</p>



<p class="wp-block-paragraph">昔は有名な先生の授業を受けるために塾や予備校へ通うイメージでしたが、今は自宅で人気講師の授業を受けられる時代なんですね。</p>



<p class="wp-block-paragraph">特にスタディサプリは、</p>



<p class="wp-block-paragraph">✅ 英語の苦手単元に戻れる<br>✅ 定期テスト対策ができる<br>✅ 部活後でも好きな時間に学習できる<br>✅ 塾より費用を抑えやすい</p>



<p class="wp-block-paragraph">という点が魅力だと思います😊</p>



<p class="wp-block-paragraph">英検対策だけでなく、中学英語全体の理解にも役立つので気になる方はチェックしてみてください。</p>



<p class="wp-block-paragraph"></p>



<a rel="nofollow" href="https://px.a8.net/svt/ejp?a8mat=4B3G6H+G9UKT6+36T2+TSJ42">スタディサプリ中学講座はこちら</a>
<img decoding="async" border="0" width="1" height="1" src="https://www18.a8.net/0.gif?a8mat=4B3G6H+G9UKT6+36T2+TSJ42" alt="">



<a href="https://blogmura.com/profiles/11199271?p_cid=11199271"><img decoding="async" src="https://blogparts.blogmura.com/parts_image/user/pv11199271.gif" alt="PVアクセスランキング にほんブログ村" /></a>



<p class="wp-block-paragraph">読んだよ！の応援クリック嬉しいです👇</p>



<a rel="noopener" href="https://blogmura.com/ranking/in?p_cid=11199271" target="_blank"><img decoding="async" src="https://b.blogmura.com/original/1411684" width="240" height="240" border="0" alt="にほんブログ村 にほんブログ村へ" /></a><br /><a rel="noopener" href="https://blogmura.com/ranking/in?p_cid=11199271" target="_blank">にほんブログ村</a>



<p class="wp-block-paragraph"></p>
<p>投稿 <a href="https://jouniorsankosodate.com/5845-2/">【国語】文の成分とは？主語・述語・修飾語・接続語・独立語をわかりやすく解説</a> は <a href="https://jouniorsankosodate.com">じゅにさん子育てブログ</a> に最初に表示されました。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://jouniorsankosodate.com/5845-2/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>🐙【タコタの国語レッスン】活用形の見分け方｜6つの活用形をやさしく解説</title>
		<link>https://jouniorsankosodate.com/%f0%9f%90%99%e3%80%90%e3%82%bf%e3%82%b3%e3%82%bf%e3%81%ae%e5%9b%bd%e8%aa%9e%e3%83%ac%e3%83%83%e3%82%b9%e3%83%b3%e3%80%91%e6%b4%bb%e7%94%a8%e5%bd%a2%e3%81%ae%e8%a6%8b%e5%88%86%e3%81%91%e6%96%b9/</link>
					<comments>https://jouniorsankosodate.com/%f0%9f%90%99%e3%80%90%e3%82%bf%e3%82%b3%e3%82%bf%e3%81%ae%e5%9b%bd%e8%aa%9e%e3%83%ac%e3%83%83%e3%82%b9%e3%83%b3%e3%80%91%e6%b4%bb%e7%94%a8%e5%bd%a2%e3%81%ae%e8%a6%8b%e5%88%86%e3%81%91%e6%96%b9/#respond</comments>
		
		<dc:creator><![CDATA[じゅにさん]]></dc:creator>
		<pubDate>Sun, 17 May 2026 04:57:31 +0000</pubDate>
				<category><![CDATA[📖国語学習]]></category>
		<category><![CDATA[＃わかりやすい]]></category>
		<category><![CDATA[#国語]]></category>
		<category><![CDATA[#活用形]]></category>
		<category><![CDATA[＃無料アプリ]]></category>
		<guid isPermaLink="false">https://jouniorsankosodate.com/?p=5831</guid>

					<description><![CDATA[<p>🎯 結論 👉 どの活用の種類でも、後ろにつく言葉で活用形を見分ける。 つまり、 👉 全部同じルールで判断できる！ 🐙 例で確認 書く（五段活用） 食べる（下一段活用） 見る（上一段活用） くる（カ変） する（サ変） 🎯  [&#8230;]</p>
<p>投稿 <a href="https://jouniorsankosodate.com/%f0%9f%90%99%e3%80%90%e3%82%bf%e3%82%b3%e3%82%bf%e3%81%ae%e5%9b%bd%e8%aa%9e%e3%83%ac%e3%83%83%e3%82%b9%e3%83%b3%e3%80%91%e6%b4%bb%e7%94%a8%e5%bd%a2%e3%81%ae%e8%a6%8b%e5%88%86%e3%81%91%e6%96%b9/">🐙【タコタの国語レッスン】活用形の見分け方｜6つの活用形をやさしく解説</a> は <a href="https://jouniorsankosodate.com">じゅにさん子育てブログ</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"></p>



<figure class="wp-block-image size-full"><img decoding="async" width="1000" height="667" src="https://jouniorsankosodate.com/wp-content/uploads/2026/05/2af93bc26bbd745e559c3ca258deeb16.jpg" alt="" class="wp-image-5832" srcset="https://jouniorsankosodate.com/wp-content/uploads/2026/05/2af93bc26bbd745e559c3ca258deeb16.jpg 1000w, https://jouniorsankosodate.com/wp-content/uploads/2026/05/2af93bc26bbd745e559c3ca258deeb16-300x200.jpg 300w, https://jouniorsankosodate.com/wp-content/uploads/2026/05/2af93bc26bbd745e559c3ca258deeb16-768x512.jpg 768w" sizes="(max-width: 1000px) 100vw, 1000px" /></figure>



<h1 class="wp-block-heading">🎯 結論</h1>



<p class="wp-block-paragraph">👉 <strong>どの活用の種類でも、後ろにつく言葉で活用形を見分ける。</strong></p>



<p class="wp-block-paragraph">つまり、</p>



<ul class="wp-block-list">
<li>五段活用</li>



<li>上一段活用</li>



<li>下一段活用</li>



<li>カ変</li>



<li>サ変</li>
</ul>



<p class="wp-block-paragraph">👉 <strong>全部同じルールで判断できる！</strong></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">🐙 例で確認</h1>



<h2 class="wp-block-heading"><span id="toc1">書く（五段活用）</span></h2>



<ul class="wp-block-list">
<li>書かない → 未然形</li>



<li>書きます → 連用形</li>



<li>書けば → 仮定形</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc2">食べる（下一段活用）</span></h2>



<ul class="wp-block-list">
<li>食べない → 未然形</li>



<li>食べます → 連用形</li>



<li>食べれば → 仮定形</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc3">見る（上一段活用）</span></h2>



<ul class="wp-block-list">
<li>見ない → 未然形</li>



<li>見ます → 連用形</li>



<li>見れば → 仮定形</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc4">くる（カ変）</span></h2>



<ul class="wp-block-list">
<li>こない → 未然形</li>



<li>きます → 連用形</li>



<li>くれば → 仮定形</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc5">する（サ変）</span></h2>



<ul class="wp-block-list">
<li>しない → 未然形</li>



<li>します → 連用形</li>



<li>すれば → 仮定形</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">🎯 ポイント</h1>



<p class="wp-block-paragraph">見るべきなのは</p>



<p class="wp-block-paragraph">👉 <strong>「どんな言葉がついているか」</strong></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">🌟 覚え方</h1>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>後ろにつく言葉</th><th>活用形</th></tr></thead><tbody><tr><td>ない</td><td>未然形</td></tr><tr><td>ます</td><td>連用形</td></tr><tr><td>。</td><td>終止形</td></tr><tr><td>名詞</td><td>連体形</td></tr><tr><td>ば</td><td>仮定形</td></tr><tr><td>命令</td><td>命令形</td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">🐙 つまり</h1>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">活用の種類が違っても、見分け方は全部同じ！</p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">📝 例題</h1>



<h3 class="wp-block-heading"><span id="toc6">食べない</span></h3>



<p class="wp-block-paragraph">→ 「ない」がついている<br>→ 未然形</p>



<h3 class="wp-block-heading"><span id="toc7">きます</span></h3>



<p class="wp-block-paragraph">→ 「ます」がついている<br>→ 連用形</p>



<h3 class="wp-block-heading"><span id="toc8">すれば</span></h3>



<p class="wp-block-paragraph">→ 「ば」がついている<br>→ 仮定形</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">🎯 大事な事</h1>



<p class="wp-block-paragraph">活用の種類が違っても、後ろにつく言葉を見れば活用形を同じように見分けることができます。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">🐙 タコタ式まとめ</h1>



<p class="wp-block-paragraph">👉 <strong>「ない・ます・。・名詞・ば・命令」で全部見分けられる！</strong></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"><span class="fz-24px">🐙</span> <strong><span class="fz-32px">練習問題</span></strong></p>



<div id="katsuyokei-quiz">
  <style>
    #katsuyokei-quiz{
      max-width:820px;
      margin:24px auto;
      font-family:"Hiragino Sans","Yu Gothic",sans-serif;
      color:#333;
    }
    #katsuyokei-quiz *{box-sizing:border-box;}
    #katsuyokei-quiz .quiz-card,
    #katsuyokei-quiz .finish-card{
      background:#fff;
      border:3px solid #dff3ff;
      border-radius:24px;
      padding:24px 16px 28px;
      box-shadow:0 8px 24px rgba(0,0,0,.08);
    }
    #katsuyokei-quiz .title{
      text-align:center;
      font-size:clamp(26px,4.5vw,38px);
      color:#2c6fa8;
      margin:0 0 8px;
      font-weight:bold;
    }
    #katsuyokei-quiz .sub{
      text-align:center;
      color:#666;
      margin:0 0 18px;
    }
    #katsuyokei-quiz .rule{
      background:#eef9ff;
      border:2px dashed #9cd6f5;
      border-radius:16px;
      padding:14px;
      margin-bottom:18px;
      line-height:1.8;
      font-weight:bold;
    }
    #katsuyokei-quiz .status{
      display:flex;
      justify-content:space-between;
      gap:10px;
      flex-wrap:wrap;
      color:#2b5d84;
      font-weight:bold;
      margin-bottom:16px;
    }
    #katsuyokei-quiz .question-box{
      background:#fffdf7;
      border:2px solid #ffe4a8;
      border-radius:18px;
      padding:18px 14px;
    }
    #katsuyokei-quiz .badge{
      display:inline-block;
      background:#ffd76a;
      color:#6a4b00;
      padding:4px 12px;
      border-radius:999px;
      font-size:14px;
      font-weight:bold;
      margin-bottom:12px;
    }
    #katsuyokei-quiz .question{
      font-size:24px;
      font-weight:bold;
      text-align:center;
      margin:10px 0 18px;
      line-height:1.6;
    }
    #katsuyokei-quiz .choices{
      display:grid;
      gap:10px;
    }
    #katsuyokei-quiz .choice-btn{
      width:100%;
      border:none;
      border-radius:14px;
      padding:14px 12px;
      background:#eef7ff;
      color:#234;
      font-size:18px;
      font-weight:bold;
      cursor:pointer;
      box-shadow:0 3px 8px rgba(0,0,0,.05);
    }
    #katsuyokei-quiz .choice-btn.correct{
      background:#d8f7df;
      color:#17612c;
    }
    #katsuyokei-quiz .choice-btn.wrong{
      background:#ffe1e1;
      color:#9d2d2d;
    }
    #katsuyokei-quiz .choice-btn:disabled{
      opacity:1;
      cursor:default;
    }
    #katsuyokei-quiz .answer{
      display:none;
      margin-top:14px;
      padding:14px;
      border-radius:14px;
      line-height:1.8;
    }
    #katsuyokei-quiz .answer.show{display:block;}
    #katsuyokei-quiz .answer.correct{
      background:#ecfff1;
      border:2px solid #9fe0af;
    }
    #katsuyokei-quiz .answer.wrong{
      background:#fff2f2;
      border:2px solid #f0b4b4;
    }
    #katsuyokei-quiz .next-wrap{
      text-align:center;
      margin-top:16px;
    }
    #katsuyokei-quiz .next-btn,
    #katsuyokei-quiz .retry-btn{
      border:none;
      border-radius:999px;
      padding:12px 24px;
      background:#5db7f0;
      color:#fff;
      font-size:17px;
      font-weight:bold;
      cursor:pointer;
      box-shadow:0 4px 10px rgba(93,183,240,.3);
    }
    #katsuyokei-quiz .next-btn:disabled{
      opacity:.45;
      cursor:default;
      box-shadow:none;
    }
    #katsuyokei-quiz .finish-card{
      display:none;
      text-align:center;
    }
    #katsuyokei-quiz .finish-card.show{
      display:block;
    }
    #katsuyokei-quiz .final-score{
      font-size:34px;
      font-weight:bold;
      color:#2b6fa5;
      margin:12px 0;
    }
  </style>

  <div class="quiz-card" id="kq-card">
    <h2 class="title"><span id="toc9">🐙 活用形クイズ</span></h2>
    <p class="sub">後ろにつく言葉を見て、何形か答えよう！</p>

    <div class="rule">
      👉 ない → 未然形<br>
      👉 ます → 連用形<br>
      👉 。 → 終止形<br>
      👉 名詞 → 連体形<br>
      👉 ば → 仮定形<br>
      👉 命令 → 命令形
    </div>

    <div class="status">
      <div id="kq-progress">1問目 / 30問</div>
      <div id="kq-score">正解 0問</div>
    </div>

    <div class="question-box">
      <div class="badge" id="kq-badge">第1問</div>
      <div class="question" id="kq-question"></div>
      <div class="choices" id="kq-choices"></div>
      <div class="answer" id="kq-answer"></div>
      <div class="next-wrap">
        <button class="next-btn" id="kq-next" disabled>つぎへ</button>
      </div>
    </div>
  </div>

  <div class="finish-card" id="kq-finish">
    <h2 class="title"><span id="toc10">🎉 クイズ終了！</span></h2>
    <div class="final-score" id="kq-final"></div>
    <p id="kq-comment"></p>
    <button class="retry-btn" onclick="location.reload()">もういちどやる</button>
  </div>

  <script>
    (function(){
      function shuffle(array){
        var arr = array.slice();
        for(var i = arr.length - 1; i > 0; i--){
          var j = Math.floor(Math.random() * (i + 1));
          var tmp = arr[i];
          arr[i] = arr[j];
          arr[j] = tmp;
        }
        return arr;
      }

      var choices = ["未然形","連用形","終止形","連体形","仮定形","命令形"];

      var quiz = [
        {q:"「書かない」の「書か」は？", a:"未然形", e:"「ない」につながるので未然形です。"},
        {q:"「読みます」の「読み」は？", a:"連用形", e:"「ます」につながるので連用形です。"},
        {q:"「本を読む。」の「読む」は？", a:"終止形", e:"文を終える形なので終止形です。"},
        {q:"「読む人」の「読む」は？", a:"連体形", e:"名詞「人」につながるので連体形です。"},
        {q:"「読めば」の「読め」は？", a:"仮定形", e:"「ば」につながるので仮定形です。"},
        {q:"「読め！」の「読め」は？", a:"命令形", e:"命令しているので命令形です。"},

        {q:"「食べない」の「食べ」は？", a:"未然形", e:"「ない」につながるので未然形です。"},
        {q:"「食べました」の「食べ」は？", a:"連用形", e:"「ました」につながるので連用形です。"},
        {q:"「ケーキを食べる。」の「食べる」は？", a:"終止形", e:"文を終える形なので終止形です。"},
        {q:"「食べる人」の「食べる」は？", a:"連体形", e:"名詞「人」につながるので連体形です。"},
        {q:"「食べれば」の「食べれ」は？", a:"仮定形", e:"「ば」につながるので仮定形です。"},
        {q:"「食べろ！」の「食べろ」は？", a:"命令形", e:"命令しているので命令形です。"},

        {q:"「見ない」の「見」は？", a:"未然形", e:"「ない」につながるので未然形です。"},
        {q:"「見ました」の「見」は？", a:"連用形", e:"「ました」につながるので連用形です。"},
        {q:"「空を見る。」の「見る」は？", a:"終止形", e:"文を終える形なので終止形です。"},
        {q:"「見る人」の「見る」は？", a:"連体形", e:"名詞「人」につながるので連体形です。"},
        {q:"「見れば」の「見れ」は？", a:"仮定形", e:"「ば」につながるので仮定形です。"},
        {q:"「見ろ！」の「見ろ」は？", a:"命令形", e:"命令しているので命令形です。"},

        {q:"「こない」の「こ」は？", a:"未然形", e:"「ない」につながるので未然形です。"},
        {q:"「きます」の「き」は？", a:"連用形", e:"「ます」につながるので連用形です。"},
        {q:"「学校にくる。」の「くる」は？", a:"終止形", e:"文を終える形なので終止形です。"},
        {q:"「くる人」の「くる」は？", a:"連体形", e:"名詞「人」につながるので連体形です。"},
        {q:"「くれば」の「くれ」は？", a:"仮定形", e:"「ば」につながるので仮定形です。"},
        {q:"「こい！」の「こい」は？", a:"命令形", e:"命令しているので命令形です。"},

        {q:"「しない」の「し」は？", a:"未然形", e:"「ない」につながるので未然形です。"},
        {q:"「します」の「し」は？", a:"連用形", e:"「ます」につながるので連用形です。"},
        {q:"「勉強する。」の「する」は？", a:"終止形", e:"文を終える形なので終止形です。"},
        {q:"「する人」の「する」は？", a:"連体形", e:"名詞「人」につながるので連体形です。"},
        {q:"「すれば」の「すれ」は？", a:"仮定形", e:"「ば」につながるので仮定形です。"},
        {q:"「しろ！」の「しろ」は？", a:"命令形", e:"命令しているので命令形です。"}
      ];

      quiz = shuffle(quiz);

      var current = 0;
      var score = 0;
      var answered = false;

      var progress = document.getElementById("kq-progress");
      var scoreEl = document.getElementById("kq-score");
      var badge = document.getElementById("kq-badge");
      var question = document.getElementById("kq-question");
      var choicesBox = document.getElementById("kq-choices");
      var answer = document.getElementById("kq-answer");
      var next = document.getElementById("kq-next");
      var card = document.getElementById("kq-card");
      var finish = document.getElementById("kq-finish");
      var final = document.getElementById("kq-final");
      var comment = document.getElementById("kq-comment");

      function load(){
        answered = false;
        next.disabled = true;
        answer.className = "answer";
        answer.innerHTML = "";

        var item = quiz[current];

        progress.textContent = (current + 1) + "問目 / " + quiz.length + "問";
        scoreEl.textContent = "正解 " + score + "問";
        badge.textContent = "第" + (current + 1) + "問";
        question.textContent = item.q;
        choicesBox.innerHTML = "";

        var wrong = choices.filter(function(c){ return c !== item.a; });
        wrong = shuffle(wrong).slice(0,3);
        var fourChoices = shuffle([item.a].concat(wrong));

        fourChoices.forEach(function(choice){
          var btn = document.createElement("button");
          btn.className = "choice-btn";
          btn.type = "button";
          btn.textContent = choice;
          btn.onclick = function(){
            check(choice, btn, item);
          };
          choicesBox.appendChild(btn);
        });
      }

      function check(selected, btn, item){
        if(answered) return;
        answered = true;

        var correct = selected === item.a;
        var buttons = choicesBox.querySelectorAll(".choice-btn");

        buttons.forEach(function(b){
          b.disabled = true;
          if(b.textContent === item.a){
            b.classList.add("correct");
          }
        });

        if(!correct){
          btn.classList.add("wrong");
        }else{
          score++;
        }

        scoreEl.textContent = "正解 " + score + "問";

        answer.className = "answer show " + (correct ? "correct" : "wrong");
        answer.innerHTML = correct
          ? "⭕ <strong>せいかい！</strong><br>" + item.e
          : "❌ <strong>ざんねん！</strong><br>正解は「" + item.a + "」です。<br>" + item.e;

        next.disabled = false;
      }

      next.onclick = function(){
        current++;
        if(current < quiz.length){
          load();
        }else{
          card.style.display = "none";
          finish.classList.add("show");
          final.textContent = score + " / " + quiz.length;

          if(score === quiz.length){
            comment.textContent = "すごい！全問正解！活用形ばっちりやで🐙✨";
          }else if(score >= 24){
            comment.textContent = "かなりできてる！まちがえたところだけ見直そう👍";
          }else if(score >= 15){
            comment.textContent = "いい感じ！くり返せばもっと覚えられるで✨";
          }else{
            comment.textContent = "大丈夫！まずは「ない・ます・名詞・ば」を覚えよう😊";
          }
        }
      };

      load();
    })();
  </script>
</div>



<div style="display:flex;gap:10px;justify-content:center;flex-wrap:wrap;margin:30px 0;">

  <a href="https://jouniorsankosodate.com/%E6%B4%BB%E7%94%A8%E3%81%A8%E3%81%AF%EF%BC%9F%E5%8B%95%E8%A9%9E%E3%81%AE%E5%A4%89%E3%82%8F%E3%82%8A%E6%96%B9%E3%82%92%E3%82%8F%E3%81%8B%E3%82%8A%E3%82%84%E3%81%99%E3%81%8F%E8%A7%A3%E8%AA%AC%EF%BD%9C/"
     style="display:inline-block;background:#eaf5ff;color:#245f8e;text-decoration:none;font-weight:bold;padding:12px 18px;border-radius:999px;border:2px solid #bfe5ff;">
    前のページ
  </a>

  <a href="https://jouniorsankosodate.com/kokugo-learning/"
     style="display:inline-block;background:#fff8e6;color:#8a5a00;text-decoration:none;font-weight:bold;padding:12px 18px;border-radius:999px;border:2px solid #ffcc66;">
    一覧へ戻る
  </a>

  <a href="https://jouniorsankosodate.com/5845-2/"
     style="display:inline-block;background:#eaffef;color:#17612c;text-decoration:none;font-weight:bold;padding:12px 18px;border-radius:999px;border:2px solid #b9efc6;">
    次のページ
  </a>

</div>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">📚 中学英語の復習・先取りに</p>



<p class="wp-block-paragraph">むすこの学校でもスタディサプリが導入されています。</p>



<p class="wp-block-paragraph">昔は有名な先生の授業を受けるために塾や予備校へ通うイメージでしたが、今は自宅で人気講師の授業を受けられる時代なんですね。</p>



<p class="wp-block-paragraph">特にスタディサプリは、</p>



<p class="wp-block-paragraph">✅ 英語の苦手単元に戻れる<br>✅ 定期テスト対策ができる<br>✅ 部活後でも好きな時間に学習できる<br>✅ 塾より費用を抑えやすい</p>



<p class="wp-block-paragraph">という点が魅力だと思います😊</p>



<p class="wp-block-paragraph">英検対策だけでなく、中学英語全体の理解にも役立つので気になる方はチェックしてみてください。</p>



<a rel="nofollow" href="https://px.a8.net/svt/ejp?a8mat=4B3G6H+G9UKT6+36T2+TSJ42">スタディサプリ中学講座はこちら</a>
<img decoding="async" border="0" width="1" height="1" src="https://www18.a8.net/0.gif?a8mat=4B3G6H+G9UKT6+36T2+TSJ42" alt="">



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"></p>



<a href="https://blogmura.com/profiles/11199271?p_cid=11199271"><img decoding="async" src="https://blogparts.blogmura.com/parts_image/user/pv11199271.gif" alt="PVアクセスランキング にほんブログ村" /></a>



<p class="wp-block-paragraph">読んだよ！の応援クリック嬉しいです👇</p>



<a rel="noopener" href="https://blogmura.com/ranking/in?p_cid=11199271" target="_blank"><img decoding="async" src="https://b.blogmura.com/original/1411684" width="240" height="240" border="0" alt="にほんブログ村 にほんブログ村へ" /></a><br /><a rel="noopener" href="https://blogmura.com/ranking/in?p_cid=11199271" target="_blank">にほんブログ村</a>



<p class="wp-block-paragraph"></p>
<p>投稿 <a href="https://jouniorsankosodate.com/%f0%9f%90%99%e3%80%90%e3%82%bf%e3%82%b3%e3%82%bf%e3%81%ae%e5%9b%bd%e8%aa%9e%e3%83%ac%e3%83%83%e3%82%b9%e3%83%b3%e3%80%91%e6%b4%bb%e7%94%a8%e5%bd%a2%e3%81%ae%e8%a6%8b%e5%88%86%e3%81%91%e6%96%b9/">🐙【タコタの国語レッスン】活用形の見分け方｜6つの活用形をやさしく解説</a> は <a href="https://jouniorsankosodate.com">じゅにさん子育てブログ</a> に最初に表示されました。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://jouniorsankosodate.com/%f0%9f%90%99%e3%80%90%e3%82%bf%e3%82%b3%e3%82%bf%e3%81%ae%e5%9b%bd%e8%aa%9e%e3%83%ac%e3%83%83%e3%82%b9%e3%83%b3%e3%80%91%e6%b4%bb%e7%94%a8%e5%bd%a2%e3%81%ae%e8%a6%8b%e5%88%86%e3%81%91%e6%96%b9/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>英検４級 フラッシュ英単語 No.12｜天気・季節（音声対応）</title>
		<link>https://jouniorsankosodate.com/eiken4-set12/</link>
					<comments>https://jouniorsankosodate.com/eiken4-set12/#respond</comments>
		
		<dc:creator><![CDATA[じゅにさん]]></dc:creator>
		<pubDate>Wed, 06 May 2026 13:36:36 +0000</pubDate>
				<category><![CDATA[🟩 英検4級 英語シリーズ]]></category>
		<category><![CDATA[＃フラッシュ]]></category>
		<category><![CDATA[＃無料アプリ]]></category>
		<category><![CDATA[#英単語]]></category>
		<category><![CDATA[＃英検４級]]></category>
		<guid isPermaLink="false">https://jouniorsankosodate.com/?p=5450</guid>

					<description><![CDATA[<p>英検４級 フラッシュ英単語 No.12｜天気・季節（音声対応） 英検４級 フラッシュ英単語 No.12 天気・季節 日本語からスタート 🔊 音声ON — — 英語⇆日本語 ▶ 読み上げ わかった 👍 わからん！あとで復習 [&#8230;]</p>
<p>投稿 <a href="https://jouniorsankosodate.com/eiken4-set12/">英検４級 フラッシュ英単語 No.12｜天気・季節（音声対応）</a> は <a href="https://jouniorsankosodate.com">じゅにさん子育てブログ</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[
<!doctype html>
<html lang="ja">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>英検４級 フラッシュ英単語 No.12｜天気・季節（音声対応）</title>

<style>
:root{
  --bg:#f7f7fb;
  --card:#ffffff;
  --ink:#111827;
  --muted:#6b7280;
  --accent:#16a34a;
  --accent-weak:#dcfce7;
  --good:#22c55e;
  --review:#f59e0b;
  --shadow:0 6px 24px rgba(0,0,0,.08);
}

body{
  margin:0;
  background:var(--bg);
}

.wrap{
  max-width:760px;
  margin:0 auto;
  padding:16px 16px 28px;
  font-family:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial;
  color:var(--ink);
}

header{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:12px;
  margin:8px 0 16px;
  flex-wrap:wrap;
}

h1{
  font-size:18px;
  margin:0;
  font-weight:700;
}

.badge{
  font-size:11px;
  color:var(--accent);
  background:var(--accent-weak);
  padding:3px 8px;
  border-radius:999px;
}

.switches{
  display:flex;
  align-items:center;
  gap:14px;
  flex-wrap:wrap;
  color:var(--muted);
  font-size:13px;
}

.switches input{
  accent-color:var(--accent);
}

.card-outer{
  position:relative;
  perspective:1200px;
  margin:12px 0 8px;
}

.card{
  position:relative;
  width:100%;
  min-height:190px;
  background:var(--card);
  border-radius:18px;
  box-shadow:var(--shadow);
  cursor:pointer;
  transform-style:preserve-3d;
  transition:transform .5s ease;
}

.card.flipped{
  transform:rotateY(180deg);
}

.face{
  position:absolute;
  inset:0;
  border-radius:18px;
  display:flex;
  align-items:center;
  justify-content:center;
  backface-visibility:hidden;
  padding:24px;
  text-align:center;
}

.frontText{
  font-size:30px;
  font-weight:800;
}

.backText{
  font-size:24px;
  font-weight:700;
}

.card-face-back{
  transform:rotateY(180deg);
}

.controls{
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:8px;
  margin:12px 0;
}

.btn{
  appearance:none;
  border:1px solid #e5e7eb;
  background:#fff;
  padding:11px 12px;
  border-radius:13px;
  font-size:14px;
  font-weight:700;
  line-height:1.2;
  cursor:pointer;
  color:var(--ink);
}

.btn:hover{
  background:#f0fdf4;
}

.btn.primary{
  background:var(--accent);
  color:#fff;
  border-color:var(--accent);
}

.btn.good{
  background:var(--good);
  color:#fff;
  border-color:var(--good);
}

.btn.review{
  background:var(--review);
  color:#fff;
  border-color:var(--review);
}

.meta{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:8px;
  margin-top:10px;
  color:var(--muted);
  font-size:13px;
}

.progress{
  height:8px;
  background:var(--accent-weak);
  border-radius:999px;
  overflow:hidden;
  flex:1;
}

.bar{
  height:100%;
  width:0;
  background:var(--accent);
  transition:.25s;
}

.index{
  min-width:90px;
  text-align:right;
}

.hint{
  margin-top:8px;
  color:var(--muted);
  font-size:12px;
}

.result-box{
  display:none;
  background:#fff;
  border-radius:18px;
  box-shadow:var(--shadow);
  padding:24px;
  text-align:center;
  margin-top:16px;
}

.result-box h2{
  margin:0 0 10px;
  font-size:22px;
}

.result-box p{
  color:#475569;
  font-weight:700;
}

.series-back-wrap{
  margin:24px 0 8px;
  text-align:center;
}

.series-back-btn{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  gap:6px;
  padding:10px 18px;
  border-radius:999px;
  background:linear-gradient(135deg,#e0f2fe,#cffafe);
  color:#0f172a;
  font-weight:700;
  font-size:14px;
  text-decoration:none;
  box-shadow:0 3px 8px rgba(0,0,0,.08);
}

.series-nav-wrap{
  display:flex;
  justify-content:center;
  gap:10px;
  margin:10px 0 20px;
  flex-wrap:wrap;
}

.series-nav-btn{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  padding:10px 18px;
  border-radius:999px;
  font-weight:700;
  font-size:14px;
  text-decoration:none;
  box-shadow:0 3px 8px rgba(0,0,0,.08);
}

.series-nav-btn.prev{
  background:#f1f5f9;
  color:#334155;
}

.series-nav-btn.next{
  background:linear-gradient(135deg,#22c55e,#16a34a);
  color:#fff;
}

@media (min-width:560px){
  .frontText{font-size:36px}
  .backText{font-size:26px}
  .card{min-height:220px}
}

@media(max-width:480px){
  .controls{grid-template-columns:1fr}

  .series-back-btn,
  .series-nav-btn{
    width:100%;
    font-size:15px;
    padding:12px 18px;
  }
}
</style>
</head>

<body>

<div class="wrap" id="app" aria-live="polite">

<header>

  <h1>
    英検４級 フラッシュ英単語
    <span class="badge">No.12 天気・季節</span>
  </h1>

  <div class="switches">

    <label>
      <input type="checkbox" id="jpFirst">
      日本語からスタート
    </label>

    <label>
      <input type="checkbox" id="speakOn">
      🔊 音声ON
    </label>

  </div>

</header>

<div id="studyArea">

  <div class="card-outer">

    <div class="card" id="card">

      <div class="face card-face-front">
        <div class="frontText" id="frontText">—</div>
      </div>

      <div class="face card-face-back">
        <div class="backText" id="backText">—</div>
      </div>

    </div>

  </div>

  <div class="controls">

    <button class="btn primary" id="flipBtn">
      英語⇆日本語
    </button>

    <button class="btn" id="speakBtn">
      ▶ 読み上げ
    </button>

    <button class="btn good" id="knownBtn">
      わかった 👍
    </button>

    <button class="btn review" id="wrongBtn">
      わからん！あとで復習 📌
    </button>

    <button class="btn" id="shuffleBtn">
      🔀 シャッフル
    </button>

    <button class="btn" id="resetBtn">
      ↩︎ はじめから
    </button>

  </div>

  <div class="meta">

    <div class="progress">
      <div class="bar" id="bar"></div>
    </div>

    <div class="index">
      <span id="pos">1</span>/<span id="total">—</span>
    </div>

  </div>

  <p class="hint">
    カードをタップして答えを確認。わかったら「わかった」、不安なら「あとで復習」を押してね。
  </p>

</div>

<div class="result-box" id="resultBox">

  <h2 id="resultTitle">おつかれさま！✨</h2>

  <p id="resultText"></p>

  <div class="controls">

    <button class="btn review" id="reviewBtn">
      復習する 🔁
    </button>

    <button class="btn" id="againBtn">
      もう一回やる
    </button>

  </div>

</div>

<div class="series-back-wrap">

  <a class="series-back-btn"
     href="https://jouniorsankosodate.com/eiken4-series/">

    <span>📘</span>
    英検4級フラッシュ英単語シリーズ一覧にもどる

  </a>

</div>

<div class="series-nav-wrap">

  <a class="series-nav-btn prev"
     href="https://jouniorsankosodate.com/eiken4-set11/">

    ← 前のレッスン

  </a>

  <a class="series-nav-btn next"
     href="https://jouniorsankosodate.com/eiken4-set13/">

    次のレッスンへ →

  </a>

</div>

</div>

<script>
const ITEMS = [
  { word:"windy", jp:"風が強い" },
  { word:"cloudy", jp:"くもった" },
  { word:"snowy", jp:"雪の" },
  { word:"warm", jp:"暖かい" },
  { word:"cool", jp:"涼しい" },
  { word:"dry", jp:"乾燥した" },
  { word:"season", jp:"季節" },
  { word:"spring", jp:"春" },
  { word:"summer", jp:"夏" },
  { word:"autumn", jp:"秋" },
  { word:"winter", jp:"冬" },
  { word:"weather", jp:"天気" },
  { word:"sunny", jp:"晴れた" },
  { word:"rainy", jp:"雨の" },
  { word:"hot", jp:"暑い" }
];

let _voice = null;

function pickVoice(){

  const voices = speechSynthesis.getVoices() || [];

  const femaleNames = [
    "Sonia","Serena","Susan","Kate","Libby","Maisie",
    "Google UK English Female",
    "Microsoft Sonia",
    "Microsoft Libby",
    "Microsoft Susan"
  ];

  return voices.find(v =>
    v.lang === "en-GB" &&
    femaleNames.some(name => v.name.includes(name))
  )
  || voices.find(v => v.lang === "en-GB")
  || voices.find(v => (v.lang || "").startsWith("en"))
  || null;
}

(() => {

const card = document.getElementById("card");
const frontText = document.getElementById("frontText");
const backText = document.getElementById("backText");

const posEl = document.getElementById("pos");
const totalEl = document.getElementById("total");
const bar = document.getElementById("bar");

const jpFirst = document.getElementById("jpFirst");
const speakOnChk = document.getElementById("speakOn");

const flipBtn = document.getElementById("flipBtn");
const speakBtn = document.getElementById("speakBtn");

const knownBtn = document.getElementById("knownBtn");
const wrongBtn = document.getElementById("wrongBtn");

const shuffleBtn = document.getElementById("shuffleBtn");
const resetBtn = document.getElementById("resetBtn");

const studyArea = document.getElementById("studyArea");

const resultBox = document.getElementById("resultBox");
const resultTitle = document.getElementById("resultTitle");
const resultText = document.getElementById("resultText");

const reviewBtn = document.getElementById("reviewBtn");
const againBtn = document.getElementById("againBtn");

let order = [...Array(ITEMS.length).keys()];
let idx = 0;

let isFlipped = false;
let showJpFirst = false;
let speakOn = false;

let reviewList = [];

totalEl.textContent = order.length;

speechSynthesis.addEventListener("voiceschanged", () => {
  _voice = pickVoice();
});

function speak(text){

  try{

    if(!("speechSynthesis" in window)) return;

    if(!_voice){
      _voice = pickVoice();
    }

    const u = new SpeechSynthesisUtterance(text.trim());

    if(_voice){
      u.voice = _voice;
      u.lang = _voice.lang || "en-GB";
    }else{
      u.lang = "en-GB";
    }

    u.rate = 0.9;
    u.pitch = 1.05;

    speechSynthesis.cancel();
    speechSynthesis.speak(u);

  }catch(e){}

}

function currentItem(){
  return ITEMS[order[idx]];
}

function render(){

  const it = currentItem();

  card.classList.remove("flipped");
  isFlipped = false;

  frontText.textContent =
    showJpFirst ? it.jp : it.word;

  backText.textContent =
    showJpFirst ? it.word : it.jp;

  posEl.textContent = idx + 1;

  totalEl.textContent = order.length;

  bar.style.width =
    `${((idx + 1) / order.length) * 100}%`;

  if(speakOn){
    speak(it.word);
  }
}

function flip(){

  isFlipped = !isFlipped;

  card.classList.toggle("flipped", isFlipped);
}

function nextCard(){

  if(idx >= order.length - 1){
    showResult();
    return;
  }

  idx++;

  render();
}

function showResult(){

  studyArea.style.display = "none";
  resultBox.style.display = "block";

  if(reviewList.length === 0){

    resultTitle.textContent =
      "ぜんぶできた！すごい！！🎉";

    resultText.textContent =
      "あとで復習する単語は 0こ です。";

    reviewBtn.style.display = "none";

  }else{

    resultTitle.textContent =
      "おつかれさま！✨";

    resultText.textContent =
      `あとで復習する単語は ${reviewList.length}こ あるよ。`;

    reviewBtn.style.display = "inline-block";
  }
}

function startStudy(newOrder){

  order = [...newOrder];
  idx = 0;

  studyArea.style.display = "block";
  resultBox.style.display = "none";

  render();
}

function resetAll(){

  reviewList = [];

  startStudy(
    [...Array(ITEMS.length).keys()]
  );
}

function shuffleOrder(){

  for(let i = order.length - 1; i > 0; i--){

    const j =
      Math.floor(Math.random() * (i + 1));

    [order[i], order[j]] =
      [order[j], order[i]];
  }

  idx = 0;

  render();
}

card.addEventListener("click", flip);

flipBtn.addEventListener("click", flip);

speakBtn.addEventListener("click", () => {
  speak(currentItem().word);
});

knownBtn.addEventListener("click", nextCard);

wrongBtn.addEventListener("click", () => {

  const currentIndex = order[idx];

  if(!reviewList.includes(currentIndex)){
    reviewList.push(currentIndex);
  }

  nextCard();
});

reviewBtn.addEventListener("click", () => {

  if(reviewList.length === 0) return;

  const list = [...reviewList];

  reviewList = [];

  startStudy(list);

});

againBtn.addEventListener("click", resetAll);

shuffleBtn.addEventListener("click", shuffleOrder);

resetBtn.addEventListener("click", resetAll);

jpFirst.addEventListener("change", e => {

  showJpFirst = e.target.checked;

  render();

});

speakOnChk.addEventListener("change", e => {

  speakOn = e.target.checked;

  if(speakOn){
    speak(currentItem().word);
  }

});

window.addEventListener("keydown", e => {

  if(e.key === " "){
    e.preventDefault();
    flip();
  }

});

render();

})();
</script>

</body>
</html>



<p class="wp-block-paragraph"></p>
<p>投稿 <a href="https://jouniorsankosodate.com/eiken4-set12/">英検４級 フラッシュ英単語 No.12｜天気・季節（音声対応）</a> は <a href="https://jouniorsankosodate.com">じゅにさん子育てブログ</a> に最初に表示されました。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://jouniorsankosodate.com/eiken4-set12/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>英検４級 フラッシュ英単語 No.10｜家・生活（音声対応）</title>
		<link>https://jouniorsankosodate.com/eiken4-set10/</link>
					<comments>https://jouniorsankosodate.com/eiken4-set10/#respond</comments>
		
		<dc:creator><![CDATA[じゅにさん]]></dc:creator>
		<pubDate>Wed, 06 May 2026 13:19:34 +0000</pubDate>
				<category><![CDATA[🟩 英検4級 英語シリーズ]]></category>
		<category><![CDATA[＃フラッシュ]]></category>
		<category><![CDATA[＃無料アプリ]]></category>
		<category><![CDATA[#英単語]]></category>
		<category><![CDATA[＃英検４級]]></category>
		<guid isPermaLink="false">https://jouniorsankosodate.com/?p=5444</guid>

					<description><![CDATA[<p>英検４級 フラッシュ英単語 No.10｜家・生活（音声対応） 英検４級 フラッシュ英単語 No.10 家・生活 日本語からスタート 🔊 音声ON — — 英語⇆日本語 ▶ 読み上げ わかった 👍 わからん！あとで復習 📌 [&#8230;]</p>
<p>投稿 <a href="https://jouniorsankosodate.com/eiken4-set10/">英検４級 フラッシュ英単語 No.10｜家・生活（音声対応）</a> は <a href="https://jouniorsankosodate.com">じゅにさん子育てブログ</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[
<!doctype html>
<html lang="ja">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>英検４級 フラッシュ英単語 No.10｜家・生活（音声対応）</title>

<style>
:root{
  --bg:#f7f7fb; --card:#ffffff; --ink:#111827; --muted:#6b7280;
  --accent:#16a34a; --accent-weak:#dcfce7;
  --good:#22c55e; --review:#f59e0b;
  --shadow:0 6px 24px rgba(0,0,0,.08);
}
body{margin:0;background:var(--bg);}
.wrap{max-width:760px;margin:0 auto;padding:16px 16px 28px;font-family:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial;color:var(--ink);}
header{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:8px 0 16px;flex-wrap:wrap;}
h1{font-size:18px;margin:0;font-weight:700;}
.badge{font-size:11px;color:var(--accent);background:var(--accent-weak);padding:3px 8px;border-radius:999px;}
.switches{display:flex;align-items:center;gap:14px;flex-wrap:wrap;color:var(--muted);font-size:13px;}
.switches input{accent-color:var(--accent);}
.card-outer{position:relative;perspective:1200px;margin:12px 0 8px;}
.card{position:relative;width:100%;min-height:190px;background:var(--card);border-radius:18px;box-shadow:var(--shadow);cursor:pointer;transform-style:preserve-3d;transition:transform .5s ease;}
.card.flipped{transform:rotateY(180deg);}
.face{position:absolute;inset:0;border-radius:18px;display:flex;align-items:center;justify-content:center;backface-visibility:hidden;padding:24px;text-align:center;}
.frontText{font-size:30px;font-weight:800;}
.backText{font-size:24px;font-weight:700;}
.card-face-back{transform:rotateY(180deg);}
.controls{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:12px 0;}
.btn{appearance:none;border:1px solid #e5e7eb;background:#fff;padding:11px 12px;border-radius:13px;font-size:14px;font-weight:700;line-height:1.2;cursor:pointer;color:var(--ink);}
.btn:hover{background:#f0fdf4;}
.btn.primary{background:var(--accent);color:#fff;border-color:var(--accent);}
.btn.good{background:var(--good);color:#fff;border-color:var(--good);}
.btn.review{background:var(--review);color:#fff;border-color:var(--review);}
.meta{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:10px;color:var(--muted);font-size:13px;}
.progress{height:8px;background:var(--accent-weak);border-radius:999px;overflow:hidden;flex:1;}
.bar{height:100%;width:0;background:var(--accent);transition:.25s;}
.index{min-width:90px;text-align:right;}
.hint{margin-top:8px;color:var(--muted);font-size:12px;}
.result-box{display:none;background:#fff;border-radius:18px;box-shadow:var(--shadow);padding:24px;text-align:center;margin-top:16px;}
.result-box h2{margin:0 0 10px;font-size:22px;}
.result-box p{color:#475569;font-weight:700;}
.series-back-wrap{margin:24px 0 8px;text-align:center;}
.series-back-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:10px 18px;border-radius:999px;background:linear-gradient(135deg,#e0f2fe,#cffafe);color:#0f172a;font-weight:700;font-size:14px;text-decoration:none;box-shadow:0 3px 8px rgba(0,0,0,.08);}
.series-nav-wrap{display:flex;justify-content:center;gap:10px;margin:10px 0 20px;flex-wrap:wrap;}
.series-nav-btn{display:inline-flex;align-items:center;justify-content:center;padding:10px 18px;border-radius:999px;font-weight:700;font-size:14px;text-decoration:none;box-shadow:0 3px 8px rgba(0,0,0,.08);}
.series-nav-btn.prev{background:#f1f5f9;color:#334155;}
.series-nav-btn.next{background:linear-gradient(135deg,#22c55e,#16a34a);color:#fff;}
@media (min-width:560px){.frontText{font-size:36px}.backText{font-size:26px}.card{min-height:220px}}
@media(max-width:480px){.controls{grid-template-columns:1fr}.series-back-btn,.series-nav-btn{width:100%;font-size:15px;padding:12px 18px;}}
</style>
</head>

<body>
<div class="wrap" id="app" aria-live="polite">

<header>
  <h1>英検４級 フラッシュ英単語 <span class="badge">No.10 家・生活</span></h1>
  <div class="switches">
    <label><input type="checkbox" id="jpFirst"> 日本語からスタート</label>
    <label><input type="checkbox" id="speakOn"> 🔊 音声ON</label>
  </div>
</header>

<div id="studyArea">
  <div class="card-outer" aria-label="フラッシュカード" role="button" tabindex="0">
    <div class="card" id="card">
      <div class="face card-face-front"><div class="frontText" id="frontText">—</div></div>
      <div class="face card-face-back"><div class="backText" id="backText">—</div></div>
    </div>
  </div>

  <div class="controls">
    <button class="btn primary" id="flipBtn">英語⇆日本語</button>
    <button class="btn" id="speakBtn">▶ 読み上げ</button>
    <button class="btn good" id="knownBtn">わかった 👍</button>
    <button class="btn review" id="wrongBtn">わからん！あとで復習 📌</button>
    <button class="btn" id="shuffleBtn">🔀 シャッフル</button>
    <button class="btn" id="resetBtn">↩︎ はじめから</button>
  </div>

  <div class="meta">
    <div class="progress"><div class="bar" id="bar"></div></div>
    <div class="index"><span id="pos">1</span>/<span id="total">—</span></div>
  </div>

  <p class="hint">カードをタップして答えを確認。わかったら「わかった」、不安なら「あとで復習」を押してね。</p>
</div>

<div class="result-box" id="resultBox">
  <h2 id="resultTitle">おつかれさま！✨</h2>
  <p id="resultText"></p>
  <div class="controls">
    <button class="btn review" id="reviewBtn">復習する 🔁</button>
    <button class="btn" id="againBtn">もう一回やる</button>
  </div>
</div>

<div class="series-back-wrap">
  <a class="series-back-btn" href="https://jouniorsankosodate.com/eiken4-series/">
    <span>📘</span>英検4級フラッシュ英単語シリーズ一覧にもどる
  </a>
</div>

<div class="series-nav-wrap">
  <a class="series-nav-btn prev" href="https://jouniorsankosodate.com/eiken4-set9/">← 前のレッスン</a>
  <a class="series-nav-btn next" href="https://jouniorsankosodate.com/eiken4-set11/">次のレッスンへ →</a>
</div>

</div>

<script>
const ITEMS = [
  { word:"kitchen", jp:"台所" },
  { word:"window", jp:"窓" },
  { word:"floor", jp:"床" },
  { word:"bath", jp:"お風呂" },
  { word:"bed", jp:"ベッド" },
  { word:"breakfast", jp:"朝食" },
  { word:"dinner", jp:"夕食" },
  { word:"clean", jp:"掃除する・きれいな" },
  { word:"wash", jp:"洗う" },
  { word:"cook", jp:"料理する" },
  { word:"door", jp:"ドア" },
  { word:"chair", jp:"いす" },
  { word:"table", jp:"テーブル" },
  { word:"room", jp:"部屋" },
  { word:"homework", jp:"宿題" }
];

let _voice = null;

function pickVoice(){
  const voices = speechSynthesis.getVoices() || [];
  const femaleNames = ["Sonia","Serena","Susan","Kate","Libby","Maisie","Google UK English Female","Microsoft Sonia","Microsoft Libby","Microsoft Susan"];
  return voices.find(v => v.lang === "en-GB" && femaleNames.some(name => v.name.includes(name)))
  || voices.find(v => v.lang === "en-GB")
  || voices.find(v => (v.lang || "").startsWith("en"))
  || null;
}

(() => {
  const card = document.getElementById("card");
  const frontText = document.getElementById("frontText");
  const backText = document.getElementById("backText");
  const posEl = document.getElementById("pos");
  const totalEl = document.getElementById("total");
  const bar = document.getElementById("bar");
  const jpFirst = document.getElementById("jpFirst");
  const speakOnChk = document.getElementById("speakOn");
  const flipBtn = document.getElementById("flipBtn");
  const speakBtn = document.getElementById("speakBtn");
  const knownBtn = document.getElementById("knownBtn");
  const wrongBtn = document.getElementById("wrongBtn");
  const shuffleBtn = document.getElementById("shuffleBtn");
  const resetBtn = document.getElementById("resetBtn");
  const studyArea = document.getElementById("studyArea");
  const resultBox = document.getElementById("resultBox");
  const resultTitle = document.getElementById("resultTitle");
  const resultText = document.getElementById("resultText");
  const reviewBtn = document.getElementById("reviewBtn");
  const againBtn = document.getElementById("againBtn");

  let order = [...Array(ITEMS.length).keys()];
  let idx = 0;
  let isFlipped = false;
  let showJpFirst = false;
  let speakOn = false;
  let reviewList = [];

  totalEl.textContent = order.length;
  speechSynthesis.addEventListener("voiceschanged", () => {_voice = pickVoice();});

  function speak(text){
    try{
      if(!("speechSynthesis" in window)) return;
      if(!_voice) _voice = pickVoice();
      const u = new SpeechSynthesisUtterance(text.trim());
      if(_voice){u.voice = _voice; u.lang = _voice.lang || "en-GB";}
      else{u.lang = "en-GB";}
      u.rate = 0.9;
      u.pitch = 1.05;
      speechSynthesis.cancel();
      speechSynthesis.speak(u);
    }catch(e){}
  }

  function currentItem(){return ITEMS[order[idx]];}

  function render(){
    const it = currentItem();
    card.classList.remove("flipped");
    isFlipped = false;
    frontText.textContent = showJpFirst ? it.jp : it.word;
    backText.textContent = showJpFirst ? it.word : it.jp;
    posEl.textContent = idx + 1;
    totalEl.textContent = order.length;
    bar.style.width = `${((idx + 1) / order.length) * 100}%`;
    if(speakOn){speak(it.word);}
  }

  function flip(){
    isFlipped = !isFlipped;
    card.classList.toggle("flipped", isFlipped);
  }

  function nextCard(){
    if(idx >= order.length - 1){showResult(); return;}
    idx++;
    render();
  }

  function showResult(){
    studyArea.style.display = "none";
    resultBox.style.display = "block";
    if(reviewList.length === 0){
      resultTitle.textContent = "ぜんぶできた！すごい！！🎉";
      resultText.textContent = "あとで復習する単語は 0こ です。";
      reviewBtn.style.display = "none";
    }else{
      resultTitle.textContent = "おつかれさま！✨";
      resultText.textContent = `あとで復習する単語は ${reviewList.length}こ あるよ。`;
      reviewBtn.style.display = "inline-block";
    }
  }

  function startStudy(newOrder){
    order = [...newOrder];
    idx = 0;
    studyArea.style.display = "block";
    resultBox.style.display = "none";
    render();
  }

  function resetAll(){
    reviewList = [];
    startStudy([...Array(ITEMS.length).keys()]);
  }

  function shuffleOrder(){
    for(let i = order.length - 1; i > 0; i--){
      const j = Math.floor(Math.random() * (i + 1));
      [order[i], order[j]] = [order[j], order[i]];
    }
    idx = 0;
    render();
  }

  card.addEventListener("click", flip);
  flipBtn.addEventListener("click", flip);
  speakBtn.addEventListener("click", () => speak(currentItem().word));
  knownBtn.addEventListener("click", nextCard);
  wrongBtn.addEventListener("click", () => {
    const currentIndex = order[idx];
    if(!reviewList.includes(currentIndex)){reviewList.push(currentIndex);}
    nextCard();
  });
  reviewBtn.addEventListener("click", () => {
    if(reviewList.length === 0) return;
    const list = [...reviewList];
    reviewList = [];
    startStudy(list);
  });
  againBtn.addEventListener("click", resetAll);
  shuffleBtn.addEventListener("click", shuffleOrder);
  resetBtn.addEventListener("click", resetAll);
  jpFirst.addEventListener("change", e => {showJpFirst = e.target.checked; render();});
  speakOnChk.addEventListener("change", e => {speakOn = e.target.checked; if(speakOn) speak(currentItem().word);});
  window.addEventListener("keydown", e => {if(e.key === " "){e.preventDefault(); flip();}});
  render();
})();
</script>
</body>
</html>
<p>投稿 <a href="https://jouniorsankosodate.com/eiken4-set10/">英検４級 フラッシュ英単語 No.10｜家・生活（音声対応）</a> は <a href="https://jouniorsankosodate.com">じゅにさん子育てブログ</a> に最初に表示されました。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://jouniorsankosodate.com/eiken4-set10/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>英検４級 フラッシュ英単語 No.9｜健康・体調</title>
		<link>https://jouniorsankosodate.com/eiken4-set9/</link>
					<comments>https://jouniorsankosodate.com/eiken4-set9/#respond</comments>
		
		<dc:creator><![CDATA[じゅにさん]]></dc:creator>
		<pubDate>Wed, 06 May 2026 13:08:30 +0000</pubDate>
				<category><![CDATA[🟩 英検4級 英語シリーズ]]></category>
		<category><![CDATA[＃フラッシュ]]></category>
		<category><![CDATA[＃無料アプリ]]></category>
		<category><![CDATA[#英単語]]></category>
		<category><![CDATA[＃英検４級]]></category>
		<guid isPermaLink="false">https://jouniorsankosodate.com/?p=5441</guid>

					<description><![CDATA[<p>英検４級 フラッシュ英単語 No.9｜健康・体調（音声対応） 英検４級 フラッシュ英単語 No.9 健康・体調 日本語からスタート 🔊 音声ON — — 英語⇆日本語 ▶ 読み上げ わかった 👍 わからん！あとで復習 📌 [&#8230;]</p>
<p>投稿 <a href="https://jouniorsankosodate.com/eiken4-set9/">英検４級 フラッシュ英単語 No.9｜健康・体調</a> は <a href="https://jouniorsankosodate.com">じゅにさん子育てブログ</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[
<!doctype html>
<html lang="ja">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>英検４級 フラッシュ英単語 No.9｜健康・体調（音声対応）</title>

<style>
:root{
  --bg:#f7f7fb;
  --card:#ffffff;
  --ink:#111827;
  --muted:#6b7280;
  --accent:#16a34a;
  --accent-weak:#dcfce7;
  --good:#22c55e;
  --review:#f59e0b;
  --shadow:0 6px 24px rgba(0,0,0,.08);
}
body{margin:0;background:var(--bg);}
.wrap{max-width:760px;margin:0 auto;padding:16px 16px 28px;font-family:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial;color:var(--ink);}
header{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:8px 0 16px;flex-wrap:wrap;}
h1{font-size:18px;margin:0;font-weight:700;}
.badge{font-size:11px;color:var(--accent);background:var(--accent-weak);padding:3px 8px;border-radius:999px;}
.switches{display:flex;align-items:center;gap:14px;flex-wrap:wrap;color:var(--muted);font-size:13px;}
.switches input{accent-color:var(--accent);}
.card-outer{position:relative;perspective:1200px;margin:12px 0 8px;}
.card{position:relative;width:100%;min-height:190px;background:var(--card);border-radius:18px;box-shadow:var(--shadow);cursor:pointer;transform-style:preserve-3d;transition:transform .5s ease;}
.card.flipped{transform:rotateY(180deg);}
.face{position:absolute;inset:0;border-radius:18px;display:flex;align-items:center;justify-content:center;backface-visibility:hidden;padding:24px;text-align:center;}
.frontText{font-size:30px;font-weight:800;}
.backText{font-size:24px;font-weight:700;}
.card-face-back{transform:rotateY(180deg);}
.controls{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:12px 0;}
.btn{appearance:none;border:1px solid #e5e7eb;background:#fff;padding:11px 12px;border-radius:13px;font-size:14px;font-weight:700;line-height:1.2;cursor:pointer;color:var(--ink);}
.btn:hover{background:#f0fdf4;}
.btn.primary{background:var(--accent);color:#fff;border-color:var(--accent);}
.btn.good{background:var(--good);color:#fff;border-color:var(--good);}
.btn.review{background:var(--review);color:#fff;border-color:var(--review);}
.meta{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:10px;color:var(--muted);font-size:13px;}
.progress{height:8px;background:var(--accent-weak);border-radius:999px;overflow:hidden;flex:1;}
.bar{height:100%;width:0;background:var(--accent);transition:.25s;}
.index{min-width:90px;text-align:right;}
.hint{margin-top:8px;color:var(--muted);font-size:12px;}
.result-box{display:none;background:#fff;border-radius:18px;box-shadow:var(--shadow);padding:24px;text-align:center;margin-top:16px;}
.result-box h2{margin:0 0 10px;font-size:22px;}
.result-box p{color:#475569;font-weight:700;}
.series-back-wrap{margin:24px 0 8px;text-align:center;}
.series-back-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:10px 18px;border-radius:999px;background:linear-gradient(135deg,#e0f2fe,#cffafe);color:#0f172a;font-weight:700;font-size:14px;text-decoration:none;box-shadow:0 3px 8px rgba(0,0,0,.08);}
.series-nav-wrap{display:flex;justify-content:center;gap:10px;margin:10px 0 20px;flex-wrap:wrap;}
.series-nav-btn{display:inline-flex;align-items:center;justify-content:center;padding:10px 18px;border-radius:999px;font-weight:700;font-size:14px;text-decoration:none;box-shadow:0 3px 8px rgba(0,0,0,.08);}
.series-nav-btn.prev{background:#f1f5f9;color:#334155;}
.series-nav-btn.next{background:linear-gradient(135deg,#22c55e,#16a34a);color:#fff;}
@media (min-width:560px){.frontText{font-size:36px}.backText{font-size:26px}.card{min-height:220px}}
@media(max-width:480px){.controls{grid-template-columns:1fr}.series-back-btn,.series-nav-btn{width:100%;font-size:15px;padding:12px 18px;}}
</style>
</head>

<body>
<div class="wrap" id="app" aria-live="polite">

<header>
  <h1>英検４級 フラッシュ英単語 <span class="badge">No.9 健康・体調</span></h1>
  <div class="switches">
    <label><input type="checkbox" id="jpFirst"> 日本語からスタート</label>
    <label><input type="checkbox" id="speakOn"> 🔊 音声ON</label>
  </div>
</header>

<div id="studyArea">
  <div class="card-outer" aria-label="フラッシュカード" role="button" tabindex="0">
    <div class="card" id="card">
      <div class="face card-face-front"><div class="frontText" id="frontText">—</div></div>
      <div class="face card-face-back"><div class="backText" id="backText">—</div></div>
    </div>
  </div>

  <div class="controls">
    <button class="btn primary" id="flipBtn">英語⇆日本語</button>
    <button class="btn" id="speakBtn">▶ 読み上げ</button>
    <button class="btn good" id="knownBtn">わかった 👍</button>
    <button class="btn review" id="wrongBtn">わからん！あとで復習 📌</button>
    <button class="btn" id="shuffleBtn">🔀 シャッフル</button>
    <button class="btn" id="resetBtn">↩︎ はじめから</button>
  </div>

  <div class="meta">
    <div class="progress"><div class="bar" id="bar"></div></div>
    <div class="index"><span id="pos">1</span>/<span id="total">—</span></div>
  </div>

  <p class="hint">カードをタップして答えを確認。わかったら「わかった」、不安なら「あとで復習」を押してね。</p>
</div>

<div class="result-box" id="resultBox">
  <h2 id="resultTitle">おつかれさま！✨</h2>
  <p id="resultText"></p>
  <div class="controls">
    <button class="btn review" id="reviewBtn">復習する 🔁</button>
    <button class="btn" id="againBtn">もう一回やる</button>
  </div>
</div>

<div class="series-back-wrap">
  <a class="series-back-btn" href="https://jouniorsankosodate.com/eiken4-series/">
    <span>📘</span>英検4級フラッシュ英単語シリーズ一覧にもどる
  </a>
</div>

<div class="series-nav-wrap">
  <a class="series-nav-btn prev" href="https://jouniorsankosodate.com/eiken4-set8/">← 前のレッスン</a>
  <a class="series-nav-btn next" href="https://jouniorsankosodate.com/eiken4-set10/">次のレッスンへ →</a>
</div>

</div>

<script>
const ITEMS = [
  { word:"headache", jp:"頭痛" },
  { word:"fever", jp:"熱" },
  { word:"medicine", jp:"薬" },
  { word:"hospital", jp:"病院" },
  { word:"doctor", jp:"医者" },
  { word:"nurse", jp:"看護師" },
  { word:"hurt", jp:"痛む・けがをする" },
  { word:"sick", jp:"病気の・気分が悪い" },
  { word:"healthy", jp:"健康な" },
  { word:"tired", jp:"疲れた" },
  { word:"rest", jp:"休む・休息" },
  { word:"cold", jp:"風邪・寒い" },
  { word:"toothache", jp:"歯痛" },
  { word:"stomachache", jp:"腹痛" },
  { word:"exercise", jp:"運動する・運動" }
];

let _voice = null;

function pickVoice(){
  const voices = speechSynthesis.getVoices() || [];
  const femaleNames = ["Sonia","Serena","Susan","Kate","Libby","Maisie","Google UK English Female","Microsoft Sonia","Microsoft Libby","Microsoft Susan"];
  return voices.find(v => v.lang === "en-GB" && femaleNames.some(name => v.name.includes(name)))
  || voices.find(v => v.lang === "en-GB")
  || voices.find(v => (v.lang || "").startsWith("en"))
  || null;
}

(() => {
  const card = document.getElementById("card");
  const frontText = document.getElementById("frontText");
  const backText = document.getElementById("backText");
  const posEl = document.getElementById("pos");
  const totalEl = document.getElementById("total");
  const bar = document.getElementById("bar");
  const jpFirst = document.getElementById("jpFirst");
  const speakOnChk = document.getElementById("speakOn");
  const flipBtn = document.getElementById("flipBtn");
  const speakBtn = document.getElementById("speakBtn");
  const knownBtn = document.getElementById("knownBtn");
  const wrongBtn = document.getElementById("wrongBtn");
  const shuffleBtn = document.getElementById("shuffleBtn");
  const resetBtn = document.getElementById("resetBtn");
  const studyArea = document.getElementById("studyArea");
  const resultBox = document.getElementById("resultBox");
  const resultTitle = document.getElementById("resultTitle");
  const resultText = document.getElementById("resultText");
  const reviewBtn = document.getElementById("reviewBtn");
  const againBtn = document.getElementById("againBtn");

  let order = [...Array(ITEMS.length).keys()];
  let idx = 0;
  let isFlipped = false;
  let showJpFirst = false;
  let speakOn = false;
  let reviewList = [];

  totalEl.textContent = order.length;
  speechSynthesis.addEventListener("voiceschanged", () => {_voice = pickVoice();});

  function speak(text){
    try{
      if(!("speechSynthesis" in window)) return;
      if(!_voice) _voice = pickVoice();
      const u = new SpeechSynthesisUtterance(text.trim());
      if(_voice){u.voice = _voice; u.lang = _voice.lang || "en-GB";}
      else{u.lang = "en-GB";}
      u.rate = 0.9;
      u.pitch = 1.05;
      speechSynthesis.cancel();
      speechSynthesis.speak(u);
    }catch(e){}
  }

  function currentItem(){return ITEMS[order[idx]];}

  function render(){
    const it = currentItem();
    card.classList.remove("flipped");
    isFlipped = false;
    frontText.textContent = showJpFirst ? it.jp : it.word;
    backText.textContent = showJpFirst ? it.word : it.jp;
    posEl.textContent = idx + 1;
    totalEl.textContent = order.length;
    bar.style.width = `${((idx + 1) / order.length) * 100}%`;
    if(speakOn){speak(it.word);}
  }

  function flip(){
    isFlipped = !isFlipped;
    card.classList.toggle("flipped", isFlipped);
  }

  function nextCard(){
    if(idx >= order.length - 1){showResult(); return;}
    idx++;
    render();
  }

  function showResult(){
    studyArea.style.display = "none";
    resultBox.style.display = "block";
    if(reviewList.length === 0){
      resultTitle.textContent = "ぜんぶできた！すごい！！🎉";
      resultText.textContent = "あとで復習する単語は 0こ です。";
      reviewBtn.style.display = "none";
    }else{
      resultTitle.textContent = "おつかれさま！✨";
      resultText.textContent = `あとで復習する単語は ${reviewList.length}こ あるよ。`;
      reviewBtn.style.display = "inline-block";
    }
  }

  function startStudy(newOrder){
    order = [...newOrder];
    idx = 0;
    studyArea.style.display = "block";
    resultBox.style.display = "none";
    render();
  }

  function resetAll(){
    reviewList = [];
    startStudy([...Array(ITEMS.length).keys()]);
  }

  function shuffleOrder(){
    for(let i = order.length - 1; i > 0; i--){
      const j = Math.floor(Math.random() * (i + 1));
      [order[i], order[j]] = [order[j], order[i]];
    }
    idx = 0;
    render();
  }

  card.addEventListener("click", flip);
  flipBtn.addEventListener("click", flip);
  speakBtn.addEventListener("click", () => speak(currentItem().word));
  knownBtn.addEventListener("click", nextCard);
  wrongBtn.addEventListener("click", () => {
    const currentIndex = order[idx];
    if(!reviewList.includes(currentIndex)){reviewList.push(currentIndex);}
    nextCard();
  });
  reviewBtn.addEventListener("click", () => {
    if(reviewList.length === 0) return;
    const list = [...reviewList];
    reviewList = [];
    startStudy(list);
  });
  againBtn.addEventListener("click", resetAll);
  shuffleBtn.addEventListener("click", shuffleOrder);
  resetBtn.addEventListener("click", resetAll);
  jpFirst.addEventListener("change", e => {showJpFirst = e.target.checked; render();});
  speakOnChk.addEventListener("change", e => {speakOn = e.target.checked; if(speakOn) speak(currentItem().word);});
  window.addEventListener("keydown", e => {if(e.key === " "){e.preventDefault(); flip();}});
  render();
})();
</script>
</body>
</html>
<p>投稿 <a href="https://jouniorsankosodate.com/eiken4-set9/">英検４級 フラッシュ英単語 No.9｜健康・体調</a> は <a href="https://jouniorsankosodate.com">じゅにさん子育てブログ</a> に最初に表示されました。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://jouniorsankosodate.com/eiken4-set9/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>英検４級 フラッシュ英単語 No.8｜交通・移動（音声対応）</title>
		<link>https://jouniorsankosodate.com/eiken4-set8/</link>
					<comments>https://jouniorsankosodate.com/eiken4-set8/#respond</comments>
		
		<dc:creator><![CDATA[じゅにさん]]></dc:creator>
		<pubDate>Wed, 06 May 2026 13:01:57 +0000</pubDate>
				<category><![CDATA[🟩 英検4級 英語シリーズ]]></category>
		<category><![CDATA[＃フラッシュ]]></category>
		<category><![CDATA[＃無料アプリ]]></category>
		<category><![CDATA[#英単語]]></category>
		<category><![CDATA[#英検４級]]></category>
		<guid isPermaLink="false">https://jouniorsankosodate.com/?p=5438</guid>

					<description><![CDATA[<p>英検４級 フラッシュ英単語 No.8｜交通・移動（音声対応） 英検４級 フラッシュ英単語 No.8 交通・移動 日本語からスタート 🔊 音声ON — — 英語⇆日本語 ▶ 読み上げ わかった 👍 わからん！あとで復習 📌 [&#8230;]</p>
<p>投稿 <a href="https://jouniorsankosodate.com/eiken4-set8/">英検４級 フラッシュ英単語 No.8｜交通・移動（音声対応）</a> は <a href="https://jouniorsankosodate.com">じゅにさん子育てブログ</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[
<!doctype html>
<html lang="ja">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>英検４級 フラッシュ英単語 No.8｜交通・移動（音声対応）</title>

<style>
:root{
  --bg:#f7f7fb;
  --card:#ffffff;
  --ink:#111827;
  --muted:#6b7280;

  --accent:#16a34a;
  --accent-weak:#dcfce7;

  --good:#22c55e;
  --review:#f59e0b;

  --shadow:0 6px 24px rgba(0,0,0,.08);
}

body{
  margin:0;
  background:var(--bg);
}

.wrap{
  max-width:760px;
  margin:0 auto;
  padding:16px 16px 28px;
  font-family:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial;
  color:var(--ink);
}

header{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:12px;
  margin:8px 0 16px;
  flex-wrap:wrap;
}

h1{
  font-size:18px;
  margin:0;
  font-weight:700;
}

.badge{
  font-size:11px;
  color:var(--accent);
  background:var(--accent-weak);
  padding:3px 8px;
  border-radius:999px;
}

.switches{
  display:flex;
  align-items:center;
  gap:14px;
  flex-wrap:wrap;
  color:var(--muted);
  font-size:13px;
}

.switches input{
  accent-color:var(--accent);
}

.card-outer{
  position:relative;
  perspective:1200px;
  margin:12px 0 8px;
}

.card{
  position:relative;
  width:100%;
  min-height:190px;
  background:var(--card);
  border-radius:18px;
  box-shadow:var(--shadow);
  cursor:pointer;
  transform-style:preserve-3d;
  transition:transform .5s ease;
}

.card.flipped{
  transform:rotateY(180deg);
}

.face{
  position:absolute;
  inset:0;
  border-radius:18px;
  display:flex;
  align-items:center;
  justify-content:center;
  backface-visibility:hidden;
  padding:24px;
  text-align:center;
}

.frontText{
  font-size:30px;
  font-weight:800;
}

.backText{
  font-size:24px;
  font-weight:700;
}

.card-face-back{
  transform:rotateY(180deg);
}

.controls{
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:8px;
  margin:12px 0;
}

.btn{
  appearance:none;
  border:1px solid #e5e7eb;
  background:#fff;
  padding:11px 12px;
  border-radius:13px;
  font-size:14px;
  font-weight:700;
  line-height:1.2;
  cursor:pointer;
  color:var(--ink);
}

.btn:hover{
  background:#f0fdf4;
}

.btn.primary{
  background:var(--accent);
  color:#fff;
  border-color:var(--accent);
}

.btn.good{
  background:var(--good);
  color:#fff;
  border-color:var(--good);
}

.btn.review{
  background:var(--review);
  color:#fff;
  border-color:var(--review);
}

.meta{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:8px;
  margin-top:10px;
  color:var(--muted);
  font-size:13px;
}

.progress{
  height:8px;
  background:var(--accent-weak);
  border-radius:999px;
  overflow:hidden;
  flex:1;
}

.bar{
  height:100%;
  width:0;
  background:var(--accent);
  transition:.25s;
}

.index{
  min-width:90px;
  text-align:right;
}

.hint{
  margin-top:8px;
  color:var(--muted);
  font-size:12px;
}

.result-box{
  display:none;
  background:#fff;
  border-radius:18px;
  box-shadow:var(--shadow);
  padding:24px;
  text-align:center;
  margin-top:16px;
}

.result-box h2{
  margin:0 0 10px;
  font-size:22px;
}

.result-box p{
  color:#475569;
  font-weight:700;
}

.series-back-wrap{
  margin:24px 0 8px;
  text-align:center;
}

.series-back-btn{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  gap:6px;
  padding:10px 18px;
  border-radius:999px;
  background:linear-gradient(135deg,#e0f2fe,#cffafe);
  color:#0f172a;
  font-weight:700;
  font-size:14px;
  text-decoration:none;
  box-shadow:0 3px 8px rgba(0,0,0,.08);
}

.series-nav-wrap{
  display:flex;
  justify-content:center;
  gap:10px;
  margin:10px 0 20px;
  flex-wrap:wrap;
}

.series-nav-btn{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  padding:10px 18px;
  border-radius:999px;
  font-weight:700;
  font-size:14px;
  text-decoration:none;
  box-shadow:0 3px 8px rgba(0,0,0,.08);
}

.series-nav-btn.prev{
  background:#f1f5f9;
  color:#334155;
}

.series-nav-btn.next{
  background:linear-gradient(135deg,#22c55e,#16a34a);
  color:#fff;
}

@media (min-width:560px){

  .frontText{font-size:36px}
  .backText{font-size:26px}

  .card{
    min-height:220px;
  }
}

@media(max-width:480px){

  .controls{
    grid-template-columns:1fr;
  }

  .series-back-btn,
  .series-nav-btn{
    width:100%;
    font-size:15px;
    padding:12px 18px;
  }
}
</style>
</head>

<body>

<div class="wrap" id="app">

<header>

  <h1>
    英検４級 フラッシュ英単語
    <span class="badge">No.8 交通・移動</span>
  </h1>

  <div class="switches">

    <label>
      <input type="checkbox" id="jpFirst">
      日本語からスタート
    </label>

    <label>
      <input type="checkbox" id="speakOn">
      🔊 音声ON
    </label>

  </div>

</header>

<div id="studyArea">

  <div class="card-outer">

    <div class="card" id="card">

      <div class="face card-face-front">
        <div class="frontText" id="frontText">—</div>
      </div>

      <div class="face card-face-back">
        <div class="backText" id="backText">—</div>
      </div>

    </div>

  </div>

  <div class="controls">

    <button class="btn primary" id="flipBtn">
      英語⇆日本語
    </button>

    <button class="btn" id="speakBtn">
      ▶ 読み上げ
    </button>

    <button class="btn good" id="knownBtn">
      わかった 👍
    </button>

    <button class="btn review" id="wrongBtn">
      わからん！あとで復習 📌
    </button>

    <button class="btn" id="shuffleBtn">
      🔀 シャッフル
    </button>

    <button class="btn" id="resetBtn">
      ↩︎ はじめから
    </button>

  </div>

  <div class="meta">

    <div class="progress">
      <div class="bar" id="bar"></div>
    </div>

    <div class="index">
      <span id="pos">1</span>/<span id="total">—</span>
    </div>

  </div>

  <p class="hint">
    カードをタップして答えを確認。わかったら「わかった」、不安なら「あとで復習」を押してね。
  </p>

</div>

<div class="result-box" id="resultBox">

  <h2 id="resultTitle">おつかれさま！✨</h2>

  <p id="resultText"></p>

  <div class="controls">

    <button class="btn review" id="reviewBtn">
      復習する 🔁
    </button>

    <button class="btn" id="againBtn">
      もう一回やる
    </button>

  </div>

</div>

<div class="series-back-wrap">

  <a class="series-back-btn"
     href="https://jouniorsankosodate.com/eiken4-series/">

    <span>📘</span>
    英検4級フラッシュ英単語シリーズ一覧にもどる

  </a>

</div>

<div class="series-nav-wrap">

  <a class="series-nav-btn prev"
     href="https://jouniorsankosodate.com/eiken4-set7/">

    ← 前のレッスン

  </a>

  <a class="series-nav-btn next"
     href="https://jouniorsankosodate.com/eiken4-set9/">

    次のレッスンへ →

  </a>

</div>

</div>

<script>
const ITEMS = [
  { word:"train", jp:"電車" },
  { word:"station", jp:"駅" },
  { word:"arrive", jp:"到着する" },
  { word:"leave", jp:"出発する・去る" },
  { word:"ride", jp:"乗る" },
  { word:"traffic", jp:"交通" },
  { word:"road", jp:"道路" },
  { word:"bridge", jp:"橋" },
  { word:"corner", jp:"角・曲がり角" },
  { word:"cross", jp:"渡る・横切る" },
  { word:"turn", jp:"曲がる" },
  { word:"straight", jp:"まっすぐに" },
  { word:"map", jp:"地図" },
  { word:"airport", jp:"空港" },
  { word:"bus stop", jp:"バス停" }
];

let _voice = null;

function pickVoice(){

  const voices = speechSynthesis.getVoices() || [];

  const femaleNames = [
    "Sonia","Serena","Susan","Kate","Libby","Maisie",
    "Google UK English Female",
    "Microsoft Sonia",
    "Microsoft Libby",
    "Microsoft Susan"
  ];

  return voices.find(v =>
    v.lang === "en-GB" &&
    femaleNames.some(name => v.name.includes(name))
  )
  || voices.find(v => v.lang === "en-GB")
  || voices.find(v => (v.lang || "").startsWith("en"))
  || null;
}

(() => {

const card = document.getElementById("card");
const frontText = document.getElementById("frontText");
const backText = document.getElementById("backText");

const posEl = document.getElementById("pos");
const totalEl = document.getElementById("total");
const bar = document.getElementById("bar");

const jpFirst = document.getElementById("jpFirst");
const speakOnChk = document.getElementById("speakOn");

const flipBtn = document.getElementById("flipBtn");
const speakBtn = document.getElementById("speakBtn");

const knownBtn = document.getElementById("knownBtn");
const wrongBtn = document.getElementById("wrongBtn");

const shuffleBtn = document.getElementById("shuffleBtn");
const resetBtn = document.getElementById("resetBtn");

const studyArea = document.getElementById("studyArea");

const resultBox = document.getElementById("resultBox");
const resultTitle = document.getElementById("resultTitle");
const resultText = document.getElementById("resultText");

const reviewBtn = document.getElementById("reviewBtn");
const againBtn = document.getElementById("againBtn");

let order = [...Array(ITEMS.length).keys()];
let idx = 0;

let isFlipped = false;
let showJpFirst = false;
let speakOn = false;

let reviewList = [];

totalEl.textContent = order.length;

speechSynthesis.addEventListener("voiceschanged", () => {
  _voice = pickVoice();
});

function speak(text){

  try{

    if(!("speechSynthesis" in window)) return;

    if(!_voice){
      _voice = pickVoice();
    }

    const u = new SpeechSynthesisUtterance(text.trim());

    if(_voice){
      u.voice = _voice;
      u.lang = _voice.lang || "en-GB";
    }else{
      u.lang = "en-GB";
    }

    u.rate = 0.9;
    u.pitch = 1.05;

    speechSynthesis.cancel();
    speechSynthesis.speak(u);

  }catch(e){}

}

function currentItem(){
  return ITEMS[order[idx]];
}

function render(){

  const it = currentItem();

  card.classList.remove("flipped");
  isFlipped = false;

  frontText.textContent =
    showJpFirst ? it.jp : it.word;

  backText.textContent =
    showJpFirst ? it.word : it.jp;

  posEl.textContent = idx + 1;

  totalEl.textContent = order.length;

  bar.style.width =
    `${((idx + 1) / order.length) * 100}%`;

  if(speakOn){
    speak(it.word);
  }
}

function flip(){

  isFlipped = !isFlipped;

  card.classList.toggle("flipped", isFlipped);
}

function nextCard(){

  if(idx >= order.length - 1){
    showResult();
    return;
  }

  idx++;

  render();
}

function showResult(){

  studyArea.style.display = "none";
  resultBox.style.display = "block";

  if(reviewList.length === 0){

    resultTitle.textContent =
      "ぜんぶできた！すごい！！🎉";

    resultText.textContent =
      "あとで復習する単語は 0こ です。";

    reviewBtn.style.display = "none";

  }else{

    resultTitle.textContent =
      "おつかれさま！✨";

    resultText.textContent =
      `あとで復習する単語は ${reviewList.length}こ あるよ。`;

    reviewBtn.style.display = "inline-block";
  }
}

function startStudy(newOrder){

  order = [...newOrder];
  idx = 0;

  studyArea.style.display = "block";
  resultBox.style.display = "none";

  render();
}

function resetAll(){

  reviewList = [];

  startStudy(
    [...Array(ITEMS.length).keys()]
  );
}

function shuffleOrder(){

  for(let i = order.length - 1; i > 0; i--){

    const j =
      Math.floor(Math.random() * (i + 1));

    [order[i], order[j]] =
      [order[j], order[i]];
  }

  idx = 0;

  render();
}

card.addEventListener("click", flip);

flipBtn.addEventListener("click", flip);

speakBtn.addEventListener("click", () => {
  speak(currentItem().word);
});

knownBtn.addEventListener("click", nextCard);

wrongBtn.addEventListener("click", () => {

  const currentIndex = order[idx];

  if(!reviewList.includes(currentIndex)){
    reviewList.push(currentIndex);
  }

  nextCard();
});

reviewBtn.addEventListener("click", () => {

  if(reviewList.length === 0) return;

  const list = [...reviewList];

  reviewList = [];

  startStudy(list);

});

againBtn.addEventListener("click", resetAll);

shuffleBtn.addEventListener("click", shuffleOrder);

resetBtn.addEventListener("click", resetAll);

jpFirst.addEventListener("change", e => {

  showJpFirst = e.target.checked;

  render();

});

speakOnChk.addEventListener("change", e => {

  speakOn = e.target.checked;

  if(speakOn){
    speak(currentItem().word);
  }

});

window.addEventListener("keydown", e => {

  if(e.key === " "){
    e.preventDefault();
    flip();
  }

});

render();

})();
</script>

</body>
</html>
<p>投稿 <a href="https://jouniorsankosodate.com/eiken4-set8/">英検４級 フラッシュ英単語 No.8｜交通・移動（音声対応）</a> は <a href="https://jouniorsankosodate.com">じゅにさん子育てブログ</a> に最初に表示されました。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://jouniorsankosodate.com/eiken4-set8/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>英検４級 フラッシュ英単語 No.7｜買い物・お金（音声対応）</title>
		<link>https://jouniorsankosodate.com/eiken4-set7/</link>
					<comments>https://jouniorsankosodate.com/eiken4-set7/#respond</comments>
		
		<dc:creator><![CDATA[じゅにさん]]></dc:creator>
		<pubDate>Wed, 06 May 2026 12:54:24 +0000</pubDate>
				<category><![CDATA[🟩 英検4級 英語シリーズ]]></category>
		<category><![CDATA[＃フラッシュ]]></category>
		<category><![CDATA[＃無料アプリ]]></category>
		<category><![CDATA[#英単語]]></category>
		<category><![CDATA[＃英検４級]]></category>
		<guid isPermaLink="false">https://jouniorsankosodate.com/?p=5434</guid>

					<description><![CDATA[<p>英検４級 フラッシュ英単語 No.7｜買い物・お金（音声対応） 英検４級 フラッシュ英単語 No.7 買い物・お金 日本語からスタート 🔊 音声ON — — 英語⇆日本語 ▶ 読み上げ わかった 👍 わからん！あとで復習 [&#8230;]</p>
<p>投稿 <a href="https://jouniorsankosodate.com/eiken4-set7/">英検４級 フラッシュ英単語 No.7｜買い物・お金（音声対応）</a> は <a href="https://jouniorsankosodate.com">じゅにさん子育てブログ</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[
<!doctype html>
<html lang="ja">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>英検４級 フラッシュ英単語 No.7｜買い物・お金（音声対応）</title>

<style>
:root{
  --bg:#f7f7fb;
  --card:#ffffff;
  --ink:#111827;
  --muted:#6b7280;

  --accent:#16a34a;
  --accent-weak:#dcfce7;

  --good:#22c55e;
  --review:#f59e0b;

  --shadow:0 6px 24px rgba(0,0,0,.08);
}

body{
  margin:0;
  background:var(--bg);
}

.wrap{
  max-width:760px;
  margin:0 auto;
  padding:16px 16px 28px;
  font-family:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial;
  color:var(--ink);
}

header{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:12px;
  margin:8px 0 16px;
  flex-wrap:wrap;
}

h1{
  font-size:18px;
  margin:0;
  font-weight:700;
}

.badge{
  font-size:11px;
  color:var(--accent);
  background:var(--accent-weak);
  padding:3px 8px;
  border-radius:999px;
}

.switches{
  display:flex;
  align-items:center;
  gap:14px;
  flex-wrap:wrap;
  color:var(--muted);
  font-size:13px;
}

.switches input{
  accent-color:var(--accent);
}

.card-outer{
  position:relative;
  perspective:1200px;
  margin:12px 0 8px;
}

.card{
  position:relative;
  width:100%;
  min-height:190px;
  background:var(--card);
  border-radius:18px;
  box-shadow:var(--shadow);
  cursor:pointer;
  transform-style:preserve-3d;
  transition:transform .5s ease;
}

.card.flipped{
  transform:rotateY(180deg);
}

.face{
  position:absolute;
  inset:0;
  border-radius:18px;
  display:flex;
  align-items:center;
  justify-content:center;
  backface-visibility:hidden;
  padding:24px;
  text-align:center;
}

.frontText{
  font-size:30px;
  font-weight:800;
}

.backText{
  font-size:24px;
  font-weight:700;
}

.card-face-back{
  transform:rotateY(180deg);
}

.controls{
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:8px;
  margin:12px 0;
}

.btn{
  appearance:none;
  border:1px solid #e5e7eb;
  background:#fff;
  padding:11px 12px;
  border-radius:13px;
  font-size:14px;
  font-weight:700;
  line-height:1.2;
  cursor:pointer;
  color:var(--ink);
}

.btn:hover{
  background:#f0fdf4;
}

.btn.primary{
  background:var(--accent);
  color:#fff;
  border-color:var(--accent);
}

.btn.good{
  background:var(--good);
  color:#fff;
  border-color:var(--good);
}

.btn.review{
  background:var(--review);
  color:#fff;
  border-color:var(--review);
}

.meta{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:8px;
  margin-top:10px;
  color:var(--muted);
  font-size:13px;
}

.progress{
  height:8px;
  background:var(--accent-weak);
  border-radius:999px;
  overflow:hidden;
  flex:1;
}

.bar{
  height:100%;
  width:0;
  background:var(--accent);
  transition:.25s;
}

.index{
  min-width:90px;
  text-align:right;
}

.hint{
  margin-top:8px;
  color:var(--muted);
  font-size:12px;
}

.result-box{
  display:none;
  background:#fff;
  border-radius:18px;
  box-shadow:var(--shadow);
  padding:24px;
  text-align:center;
  margin-top:16px;
}

.result-box h2{
  margin:0 0 10px;
  font-size:22px;
}

.result-box p{
  color:#475569;
  font-weight:700;
}

.series-back-wrap{
  margin:24px 0 8px;
  text-align:center;
}

.series-back-btn{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  gap:6px;
  padding:10px 18px;
  border-radius:999px;
  background:linear-gradient(135deg,#e0f2fe,#cffafe);
  color:#0f172a;
  font-weight:700;
  font-size:14px;
  text-decoration:none;
  box-shadow:0 3px 8px rgba(0,0,0,.08);
}

.series-nav-wrap{
  display:flex;
  justify-content:center;
  gap:10px;
  margin:10px 0 20px;
  flex-wrap:wrap;
}

.series-nav-btn{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  padding:10px 18px;
  border-radius:999px;
  font-weight:700;
  font-size:14px;
  text-decoration:none;
  box-shadow:0 3px 8px rgba(0,0,0,.08);
}

.series-nav-btn.prev{
  background:#f1f5f9;
  color:#334155;
}

.series-nav-btn.next{
  background:linear-gradient(135deg,#22c55e,#16a34a);
  color:#fff;
}

@media (min-width:560px){

  .frontText{font-size:36px}
  .backText{font-size:26px}

  .card{
    min-height:220px;
  }
}

@media(max-width:480px){

  .controls{
    grid-template-columns:1fr;
  }

  .series-back-btn,
  .series-nav-btn{
    width:100%;
    font-size:15px;
    padding:12px 18px;
  }
}
</style>
</head>

<body>

<div class="wrap" id="app">

<header>

  <h1>
    英検４級 フラッシュ英単語
    <span class="badge">No.7 買い物・お金</span>
  </h1>

  <div class="switches">

    <label>
      <input type="checkbox" id="jpFirst">
      日本語からスタート
    </label>

    <label>
      <input type="checkbox" id="speakOn">
      🔊 音声ON
    </label>

  </div>

</header>

<div id="studyArea">

  <div class="card-outer">

    <div class="card" id="card">

      <div class="face card-face-front">
        <div class="frontText" id="frontText">—</div>
      </div>

      <div class="face card-face-back">
        <div class="backText" id="backText">—</div>
      </div>

    </div>

  </div>

  <div class="controls">

    <button class="btn primary" id="flipBtn">
      英語⇆日本語
    </button>

    <button class="btn" id="speakBtn">
      ▶ 読み上げ
    </button>

    <button class="btn good" id="knownBtn">
      わかった 👍
    </button>

    <button class="btn review" id="wrongBtn">
      わからん！あとで復習 📌
    </button>

    <button class="btn" id="shuffleBtn">
      🔀 シャッフル
    </button>

    <button class="btn" id="resetBtn">
      ↩︎ はじめから
    </button>

  </div>

  <div class="meta">

    <div class="progress">
      <div class="bar" id="bar"></div>
    </div>

    <div class="index">
      <span id="pos">1</span>/<span id="total">—</span>
    </div>

  </div>

  <p class="hint">
    カードをタップして答えを確認。わかったら「わかった」、不安なら「あとで復習」を押してね。
  </p>

</div>

<div class="result-box" id="resultBox">

  <h2 id="resultTitle">おつかれさま！✨</h2>

  <p id="resultText"></p>

  <div class="controls">

    <button class="btn review" id="reviewBtn">
      復習する 🔁
    </button>

    <button class="btn" id="againBtn">
      もう一回やる
    </button>

  </div>

</div>

<div class="series-back-wrap">

  <a class="series-back-btn"
     href="https://jouniorsankosodate.com/eiken4-series/">

    <span>📘</span>
    英検4級フラッシュ英単語シリーズ一覧にもどる

  </a>

</div>

<div class="series-nav-wrap">

  <a class="series-nav-btn prev"
     href="https://jouniorsankosodate.com/eiken4-set6/">

    ← 前のレッスン

  </a>

  <a class="series-nav-btn next"
     href="https://jouniorsankosodate.com/eiken4-set8/">

    次のレッスンへ →

  </a>

</div>

</div>

<script>
const ITEMS = [
  { word:"buy", jp:"買う" },
  { word:"sell", jp:"売る" },
  { word:"pay", jp:"支払う" },
  { word:"cost", jp:"費用がかかる" },
  { word:"price", jp:"値段" },
  { word:"money", jp:"お金" },
  { word:"shop", jp:"店・買い物をする" },
  { word:"store", jp:"店" },
  { word:"ticket", jp:"切符・チケット" },
  { word:"change", jp:"おつり・変化" },
  { word:"cheap", jp:"安い" },
  { word:"expensive", jp:"高価な" },
  { word:"cash", jp:"現金" },
  { word:"wallet", jp:"財布" },
  { word:"customer", jp:"客" }
];

let _voice = null;

function pickVoice(){

  const voices = speechSynthesis.getVoices() || [];

  const femaleNames = [
    "Sonia","Serena","Susan","Kate","Libby","Maisie",
    "Google UK English Female",
    "Microsoft Sonia",
    "Microsoft Libby",
    "Microsoft Susan"
  ];

  return voices.find(v =>
    v.lang === "en-GB" &&
    femaleNames.some(name => v.name.includes(name))
  )
  || voices.find(v => v.lang === "en-GB")
  || voices.find(v => (v.lang || "").startsWith("en"))
  || null;
}

(() => {

const card = document.getElementById("card");
const frontText = document.getElementById("frontText");
const backText = document.getElementById("backText");

const posEl = document.getElementById("pos");
const totalEl = document.getElementById("total");
const bar = document.getElementById("bar");

const jpFirst = document.getElementById("jpFirst");
const speakOnChk = document.getElementById("speakOn");

const flipBtn = document.getElementById("flipBtn");
const speakBtn = document.getElementById("speakBtn");

const knownBtn = document.getElementById("knownBtn");
const wrongBtn = document.getElementById("wrongBtn");

const shuffleBtn = document.getElementById("shuffleBtn");
const resetBtn = document.getElementById("resetBtn");

const studyArea = document.getElementById("studyArea");

const resultBox = document.getElementById("resultBox");
const resultTitle = document.getElementById("resultTitle");
const resultText = document.getElementById("resultText");

const reviewBtn = document.getElementById("reviewBtn");
const againBtn = document.getElementById("againBtn");

let order = [...Array(ITEMS.length).keys()];
let idx = 0;

let isFlipped = false;
let showJpFirst = false;
let speakOn = false;

let reviewList = [];

totalEl.textContent = order.length;

speechSynthesis.addEventListener("voiceschanged", () => {
  _voice = pickVoice();
});

function speak(text){

  try{

    if(!("speechSynthesis" in window)) return;

    if(!_voice){
      _voice = pickVoice();
    }

    const u = new SpeechSynthesisUtterance(text.trim());

    if(_voice){
      u.voice = _voice;
      u.lang = _voice.lang || "en-GB";
    }else{
      u.lang = "en-GB";
    }

    u.rate = 0.9;
    u.pitch = 1.05;

    speechSynthesis.cancel();
    speechSynthesis.speak(u);

  }catch(e){}

}

function currentItem(){
  return ITEMS[order[idx]];
}

function render(){

  const it = currentItem();

  card.classList.remove("flipped");
  isFlipped = false;

  frontText.textContent =
    showJpFirst ? it.jp : it.word;

  backText.textContent =
    showJpFirst ? it.word : it.jp;

  posEl.textContent = idx + 1;

  totalEl.textContent = order.length;

  bar.style.width =
    `${((idx + 1) / order.length) * 100}%`;

  if(speakOn){
    speak(it.word);
  }
}

function flip(){

  isFlipped = !isFlipped;

  card.classList.toggle("flipped", isFlipped);
}

function nextCard(){

  if(idx >= order.length - 1){
    showResult();
    return;
  }

  idx++;

  render();
}

function showResult(){

  studyArea.style.display = "none";
  resultBox.style.display = "block";

  if(reviewList.length === 0){

    resultTitle.textContent =
      "ぜんぶできた！すごい！！🎉";

    resultText.textContent =
      "あとで復習する単語は 0こ です。";

    reviewBtn.style.display = "none";

  }else{

    resultTitle.textContent =
      "おつかれさま！✨";

    resultText.textContent =
      `あとで復習する単語は ${reviewList.length}こ あるよ。`;

    reviewBtn.style.display = "inline-block";
  }
}

function startStudy(newOrder){

  order = [...newOrder];
  idx = 0;

  studyArea.style.display = "block";
  resultBox.style.display = "none";

  render();
}

function resetAll(){

  reviewList = [];

  startStudy(
    [...Array(ITEMS.length).keys()]
  );
}

function shuffleOrder(){

  for(let i = order.length - 1; i > 0; i--){

    const j =
      Math.floor(Math.random() * (i + 1));

    [order[i], order[j]] =
      [order[j], order[i]];
  }

  idx = 0;

  render();
}

card.addEventListener("click", flip);

flipBtn.addEventListener("click", flip);

speakBtn.addEventListener("click", () => {
  speak(currentItem().word);
});

knownBtn.addEventListener("click", nextCard);

wrongBtn.addEventListener("click", () => {

  const currentIndex = order[idx];

  if(!reviewList.includes(currentIndex)){
    reviewList.push(currentIndex);
  }

  nextCard();
});

reviewBtn.addEventListener("click", () => {

  if(reviewList.length === 0) return;

  const list = [...reviewList];

  reviewList = [];

  startStudy(list);

});

againBtn.addEventListener("click", resetAll);

shuffleBtn.addEventListener("click", shuffleOrder);

resetBtn.addEventListener("click", resetAll);

jpFirst.addEventListener("change", e => {

  showJpFirst = e.target.checked;

  render();

});

speakOnChk.addEventListener("change", e => {

  speakOn = e.target.checked;

  if(speakOn){
    speak(currentItem().word);
  }

});

window.addEventListener("keydown", e => {

  if(e.key === " "){
    e.preventDefault();
    flip();
  }

});

render();

})();
</script>

</body>
</html>



<p class="wp-block-paragraph"></p>
<p>投稿 <a href="https://jouniorsankosodate.com/eiken4-set7/">英検４級 フラッシュ英単語 No.7｜買い物・お金（音声対応）</a> は <a href="https://jouniorsankosodate.com">じゅにさん子育てブログ</a> に最初に表示されました。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://jouniorsankosodate.com/eiken4-set7/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>英検５級 フラッシュ英単語 No.12｜前置詞（音声対応）</title>
		<link>https://jouniorsankosodate.com/n5-no12/</link>
					<comments>https://jouniorsankosodate.com/n5-no12/#respond</comments>
		
		<dc:creator><![CDATA[じゅにさん]]></dc:creator>
		<pubDate>Sat, 02 May 2026 08:20:32 +0000</pubDate>
				<category><![CDATA[🟧英検５級 英語シリーズ]]></category>
		<category><![CDATA[＃フラッシュ]]></category>
		<category><![CDATA[＃無料アプリ]]></category>
		<category><![CDATA[#英単語]]></category>
		<category><![CDATA[＃英検]]></category>
		<category><![CDATA[＃英検５級]]></category>
		<guid isPermaLink="false">https://jouniorsankosodate.com/?p=5327</guid>

					<description><![CDATA[<p>英検５級 フラッシュ英単語 No.12｜前置詞（音声対応） 英検５級 フラッシュ英単語 No.12 前置詞 日本語からスタート 🔊 音声ON — — 英語⇆日本語 ▶ 読み上げ わかった 👍 わからん！あとで復習 📌 🔀 [&#8230;]</p>
<p>投稿 <a href="https://jouniorsankosodate.com/n5-no12/">英検５級 フラッシュ英単語 No.12｜前置詞（音声対応）</a> は <a href="https://jouniorsankosodate.com">じゅにさん子育てブログ</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[
<!doctype html>
<html lang="ja">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>英検５級 フラッシュ英単語 No.12｜前置詞（音声対応）</title>

<style>
:root{
  --bg:#f7f7fb; --card:#ffffff; --ink:#111827; --muted:#6b7280;
  --accent:#6366f1; --accent-weak:#e0e7ff;
  --good:#22c55e; --review:#f59e0b;
  --shadow:0 6px 24px rgba(0,0,0,.08);
}
body{margin:0;background:var(--bg);}
.wrap{max-width:760px;margin:0 auto;padding:16px 16px 28px;font-family:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial;color:var(--ink);}
header{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:8px 0 16px;flex-wrap:wrap;}
h1{font-size:18px;margin:0;font-weight:700;}
.badge{font-size:11px;color:var(--accent);background:var(--accent-weak);padding:3px 8px;border-radius:999px;}
.switches{display:flex;align-items:center;gap:14px;flex-wrap:wrap;color:var(--muted);font-size:13px;}
.switches input{accent-color:var(--accent);}
.card-outer{position:relative;perspective:1200px;margin:12px 0 8px;}
.card{position:relative;width:100%;min-height:190px;background:var(--card);border-radius:18px;box-shadow:var(--shadow);cursor:pointer;transform-style:preserve-3d;transition:transform .5s ease;}
.card.flipped{transform:rotateY(180deg);}
.face{position:absolute;inset:0;border-radius:18px;display:flex;align-items:center;justify-content:center;backface-visibility:hidden;padding:24px;text-align:center;}
.frontText{font-size:30px;font-weight:800;}
.backText{font-size:24px;font-weight:700;}
.card-face-back{transform:rotateY(180deg);}
.controls{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:12px 0;}
.btn{appearance:none;border:1px solid #e5e7eb;background:#fff;padding:11px 12px;border-radius:13px;font-size:14px;font-weight:700;line-height:1.2;cursor:pointer;color:var(--ink);}
.btn:hover{background:#eef2ff;}
.btn:active{transform:translateY(1px);}
.btn.primary{background:var(--accent);color:#fff;border-color:var(--accent);}
.btn.good{background:var(--good);color:#fff;border-color:var(--good);}
.btn.review{background:var(--review);color:#fff;border-color:var(--review);}
.meta{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:10px;color:var(--muted);font-size:13px;}
.progress{height:8px;background:var(--accent-weak);border-radius:999px;overflow:hidden;flex:1;}
.bar{height:100%;width:0;background:var(--accent);transition:.25s;}
.index{min-width:90px;text-align:right;}
.hint{margin-top:8px;color:var(--muted);font-size:12px;}
.result-box{display:none;background:#fff;border-radius:18px;box-shadow:var(--shadow);padding:24px;text-align:center;margin-top:16px;}
.result-box h2{margin:0 0 10px;font-size:22px;}
.result-box p{color:#475569;font-weight:700;}
.series-nav-wrap{margin:32px 0 12px;display:flex;justify-content:center;gap:12px;flex-wrap:wrap;}
.series-nav-btn{display:inline-flex;align-items:center;justify-content:center;text-decoration:none;font-weight:700;border-radius:999px;padding:10px 18px;background:#fff;box-shadow:0 6px 18px rgba(0,0,0,.08);transition:.2s;font-size:14px;}
.series-nav-btn.nav-back{color:#6366f1;border:2px solid #c7d2fe;}
.series-nav-btn.next{color:#4338ca;border:2px solid #c7d2fe;background:linear-gradient(135deg,#eef2ff,#e0e7ff);}
.series-nav-btn:hover{transform:translateY(-2px);}
@media (min-width:560px){.frontText{font-size:36px}.backText{font-size:26px}.card{min-height:220px}}
@media(max-width:480px){.controls{grid-template-columns:1fr}.series-nav-btn{width:100%;font-size:15px;padding:12px 18px}}
</style>
</head>

<body>
<div class="wrap" id="app" aria-live="polite">

<header>
  <h1>英検５級 フラッシュ英単語 <span class="badge">No.12 前置詞</span></h1>
  <div class="switches">
    <label><input type="checkbox" id="jpFirst"> 日本語からスタート</label>
    <label><input type="checkbox" id="speakOn"> 🔊 音声ON</label>
  </div>
</header>

<div id="studyArea">
  <div class="card-outer" aria-label="フラッシュカード" role="button" tabindex="0">
    <div class="card" id="card">
      <div class="face card-face-front"><div class="frontText" id="frontText">—</div></div>
      <div class="face card-face-back"><div class="backText" id="backText">—</div></div>
    </div>
  </div>

  <div class="controls">
    <button class="btn primary" id="flipBtn">英語⇆日本語</button>
    <button class="btn" id="speakBtn">▶ 読み上げ</button>
    <button class="btn good" id="knownBtn">わかった 👍</button>
    <button class="btn review" id="wrongBtn">わからん！あとで復習 📌</button>
    <button class="btn" id="shuffleBtn">🔀 シャッフル</button>
    <button class="btn" id="resetBtn">↩︎ はじめから</button>
  </div>

  <div class="meta">
    <div class="progress"><div class="bar" id="bar"></div></div>
    <div class="index"><span id="pos">1</span>/<span id="total">—</span></div>
  </div>

  <p class="hint">カードをタップして答えを確認。わかったら「わかった」、不安なら「あとで復習」を押してね。</p>
</div>

<div class="result-box" id="resultBox">
  <h2 id="resultTitle">おつかれさま！✨</h2>
  <p id="resultText"></p>
  <div class="controls">
    <button class="btn review" id="reviewBtn">復習する 🔁</button>
    <button class="btn" id="againBtn">もう一回やる</button>
  </div>
</div>

<div class="series-nav-wrap">
  <a href="https://jouniorsankosodate.com/eiken5-no11/" class="series-nav-btn nav-back">← 前のレッスンへ</a>
  <a href="https://jouniorsankosodate.com/category/learn/english-flash/" class="series-nav-btn nav-back">英単語フラッシュのカテゴリ一覧に戻る</a>
</div>

</div>

<script>
const ITEMS = [
  { word: "in", jp: "中に" },
  { word: "on", jp: "上に" },
  { word: "under", jp: "下に" },
  { word: "near", jp: "近くに" },
  { word: "by", jp: "そばに" },
  { word: "between", jp: "間に" },
  { word: "behind", jp: "後ろに" },
  { word: "in front of", jp: "前に" },
  { word: "to", jp: "〜へ" },
  { word: "from", jp: "〜から" },
  { word: "with", jp: "〜と一緒に／〜を使って" },
  { word: "for", jp: "〜のために" },
  { word: "at", jp: "〜で（場所・時）" },
  { word: "about", jp: "〜について" }
];

let _voice = null;

function pickVoice(){
  const voices = speechSynthesis.getVoices() || [];
  const femaleNames = ["Sonia","Serena","Susan","Kate","Libby","Maisie","Google UK English Female","Microsoft Sonia","Microsoft Libby","Microsoft Susan"];

  return voices.find(v => v.lang === "en-GB" && femaleNames.some(name => v.name.includes(name)))
  || voices.find(v => v.lang === "en-GB")
  || voices.find(v => (v.lang || "").startsWith("en"))
  || null;
}

(() => {
  const card = document.getElementById("card");
  const frontText = document.getElementById("frontText");
  const backText = document.getElementById("backText");
  const posEl = document.getElementById("pos");
  const totalEl = document.getElementById("total");
  const bar = document.getElementById("bar");
  const jpFirst = document.getElementById("jpFirst");
  const speakOnChk = document.getElementById("speakOn");
  const flipBtn = document.getElementById("flipBtn");
  const speakBtn = document.getElementById("speakBtn");
  const knownBtn = document.getElementById("knownBtn");
  const wrongBtn = document.getElementById("wrongBtn");
  const shuffleBtn = document.getElementById("shuffleBtn");
  const resetBtn = document.getElementById("resetBtn");
  const studyArea = document.getElementById("studyArea");
  const resultBox = document.getElementById("resultBox");
  const resultTitle = document.getElementById("resultTitle");
  const resultText = document.getElementById("resultText");
  const reviewBtn = document.getElementById("reviewBtn");
  const againBtn = document.getElementById("againBtn");

  let order = [...Array(ITEMS.length).keys()];
  let idx = 0;
  let isFlipped = false;
  let showJpFirst = false;
  let speakOn = false;
  let reviewList = [];

  totalEl.textContent = order.length;

  speechSynthesis.addEventListener("voiceschanged", () => {_voice = pickVoice();});

  function speak(text){
    try{
      if(!("speechSynthesis" in window)) return;
      if(!_voice) _voice = pickVoice();

      const u = new SpeechSynthesisUtterance(text.trim());
      if(_voice){
        u.voice = _voice;
        u.lang = _voice.lang || "en-GB";
      }else{
        u.lang = "en-GB";
      }

      u.rate = 0.9;
      u.pitch = 1.05;
      speechSynthesis.cancel();
      speechSynthesis.speak(u);
    }catch(e){}
  }

  function currentItem(){return ITEMS[order[idx]];}

  function render(){
    const it = currentItem();
    card.classList.remove("flipped");
    isFlipped = false;

    frontText.textContent = showJpFirst ? it.jp : it.word;
    backText.textContent = showJpFirst ? it.word : it.jp;

    posEl.textContent = idx + 1;
    totalEl.textContent = order.length;
    bar.style.width = `${((idx + 1) / order.length) * 100}%`;

    if(speakOn){speak(it.word);}
  }

  function flip(){
    isFlipped = !isFlipped;
    card.classList.toggle("flipped", isFlipped);
  }

  function nextCard(){
    if(idx >= order.length - 1){
      showResult();
      return;
    }
    idx++;
    render();
  }

  function showResult(){
    studyArea.style.display = "none";
    resultBox.style.display = "block";

    if(reviewList.length === 0){
      resultTitle.textContent = "ぜんぶできた！すごい！！🎉";
      resultText.textContent = "あとで復習する単語は 0こ です。";
      reviewBtn.style.display = "none";
    }else{
      resultTitle.textContent = "おつかれさま！✨";
      resultText.textContent = `あとで復習する単語は ${reviewList.length}こ あるよ。`;
      reviewBtn.style.display = "inline-block";
    }
  }

  function startStudy(newOrder){
    order = [...newOrder];
    idx = 0;
    studyArea.style.display = "block";
    resultBox.style.display = "none";
    render();
  }

  function resetAll(){
    reviewList = [];
    startStudy([...Array(ITEMS.length).keys()]);
  }

  function shuffleOrder(){
    for(let i = order.length - 1; i > 0; i--){
      const j = Math.floor(Math.random() * (i + 1));
      [order[i], order[j]] = [order[j], order[i]];
    }
    idx = 0;
    render();
  }

  card.addEventListener("click", flip);
  flipBtn.addEventListener("click", flip);
  speakBtn.addEventListener("click", () => speak(currentItem().word));
  knownBtn.addEventListener("click", nextCard);

  wrongBtn.addEventListener("click", () => {
    const currentIndex = order[idx];
    if(!reviewList.includes(currentIndex)){reviewList.push(currentIndex);}
    nextCard();
  });

  reviewBtn.addEventListener("click", () => {
    if(reviewList.length === 0) return;
    const list = [...reviewList];
    reviewList = [];
    startStudy(list);
  });

  againBtn.addEventListener("click", resetAll);
  shuffleBtn.addEventListener("click", shuffleOrder);
  resetBtn.addEventListener("click", resetAll);

  jpFirst.addEventListener("change", e => {
    showJpFirst = e.target.checked;
    render();
  });

  speakOnChk.addEventListener("change", e => {
    speakOn = e.target.checked;
    if(speakOn) speak(currentItem().word);
  });

  window.addEventListener("keydown", e => {
    if(e.key === " "){
      e.preventDefault();
      flip();
    }
  });

  render();
})();
</script>
</body>
</html>
<p>投稿 <a href="https://jouniorsankosodate.com/n5-no12/">英検５級 フラッシュ英単語 No.12｜前置詞（音声対応）</a> は <a href="https://jouniorsankosodate.com">じゅにさん子育てブログ</a> に最初に表示されました。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://jouniorsankosodate.com/n5-no12/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>英検５級 フラッシュ英単語 No.11｜職業（音声対応）</title>
		<link>https://jouniorsankosodate.com/eiken5-no11/</link>
					<comments>https://jouniorsankosodate.com/eiken5-no11/#respond</comments>
		
		<dc:creator><![CDATA[じゅにさん]]></dc:creator>
		<pubDate>Sat, 02 May 2026 08:19:03 +0000</pubDate>
				<category><![CDATA[🟧英検５級 英語シリーズ]]></category>
		<category><![CDATA[＃フラッシュ]]></category>
		<category><![CDATA[＃無料アプリ]]></category>
		<category><![CDATA[#英単語]]></category>
		<category><![CDATA[＃英検]]></category>
		<category><![CDATA[＃英検５級]]></category>
		<guid isPermaLink="false">https://jouniorsankosodate.com/?p=5324</guid>

					<description><![CDATA[<p>英検５級 フラッシュ英単語 No.11｜職業・人を表すことば（音声対応） 英検５級 フラッシュ英単語 No.11 職業・人を表すことば 日本語からスタート 🔊 音声ON — — 英語⇆日本語 ▶ 読み上げ わかった 👍  [&#8230;]</p>
<p>投稿 <a href="https://jouniorsankosodate.com/eiken5-no11/">英検５級 フラッシュ英単語 No.11｜職業（音声対応）</a> は <a href="https://jouniorsankosodate.com">じゅにさん子育てブログ</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[
<!doctype html>
<html lang="ja">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>英検５級 フラッシュ英単語 No.11｜職業・人を表すことば（音声対応）</title>

<style>
:root{
  --bg:#f7f7fb; --card:#ffffff; --ink:#111827; --muted:#6b7280;
  --accent:#ec4899; --accent-weak:#fce7f3;
  --good:#22c55e; --review:#f59e0b;
  --shadow:0 6px 24px rgba(0,0,0,.08);
}
body{margin:0;background:var(--bg);}
.wrap{max-width:760px;margin:0 auto;padding:16px 16px 28px;font-family:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial;color:var(--ink);}
header{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:8px 0 16px;flex-wrap:wrap;}
h1{font-size:18px;margin:0;font-weight:700;}
.badge{font-size:11px;color:var(--accent);background:var(--accent-weak);padding:3px 8px;border-radius:999px;}
.switches{display:flex;align-items:center;gap:14px;flex-wrap:wrap;color:var(--muted);font-size:13px;}
.switches input{accent-color:var(--accent);}
.card-outer{position:relative;perspective:1200px;margin:12px 0 8px;}
.card{position:relative;width:100%;min-height:190px;background:var(--card);border-radius:18px;box-shadow:var(--shadow);cursor:pointer;transform-style:preserve-3d;transition:transform .5s ease;}
.card.flipped{transform:rotateY(180deg);}
.face{position:absolute;inset:0;border-radius:18px;display:flex;align-items:center;justify-content:center;backface-visibility:hidden;padding:24px;text-align:center;}
.frontText{font-size:30px;font-weight:800;}
.backText{font-size:24px;font-weight:700;}
.card-face-back{transform:rotateY(180deg);}
.controls{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:12px 0;}
.btn{appearance:none;border:1px solid #e5e7eb;background:#fff;padding:11px 12px;border-radius:13px;font-size:14px;font-weight:700;line-height:1.2;cursor:pointer;color:var(--ink);}
.btn:hover{background:#fdf2f8;}
.btn:active{transform:translateY(1px);}
.btn.primary{background:var(--accent);color:#fff;border-color:var(--accent);}
.btn.good{background:var(--good);color:#fff;border-color:var(--good);}
.btn.review{background:var(--review);color:#fff;border-color:var(--review);}
.meta{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:10px;color:var(--muted);font-size:13px;}
.progress{height:8px;background:var(--accent-weak);border-radius:999px;overflow:hidden;flex:1;}
.bar{height:100%;width:0;background:var(--accent);transition:.25s;}
.index{min-width:90px;text-align:right;}
.hint{margin-top:8px;color:var(--muted);font-size:12px;}
.result-box{display:none;background:#fff;border-radius:18px;box-shadow:var(--shadow);padding:24px;text-align:center;margin-top:16px;}
.result-box h2{margin:0 0 10px;font-size:22px;}
.result-box p{color:#475569;font-weight:700;}
.series-nav-wrap{margin:32px 0 12px;display:flex;justify-content:center;gap:12px;flex-wrap:wrap;}
.series-nav-btn{display:inline-flex;align-items:center;justify-content:center;text-decoration:none;font-weight:700;border-radius:999px;padding:10px 18px;background:#fff;box-shadow:0 6px 18px rgba(0,0,0,.08);transition:.2s;font-size:14px;}
.series-nav-btn.nav-back{color:#ec4899;border:2px solid #fbcfe8;}
.series-nav-btn.next{color:#be185d;border:2px solid #fbcfe8;background:linear-gradient(135deg,#fdf2f8,#fce7f3);}
.series-nav-btn:hover{transform:translateY(-2px);}
@media (min-width:560px){.frontText{font-size:36px}.backText{font-size:26px}.card{min-height:220px}}
@media(max-width:480px){.controls{grid-template-columns:1fr}.series-nav-btn{width:100%;font-size:15px;padding:12px 18px}}
</style>
</head>

<body>
<div class="wrap" id="app" aria-live="polite">

<header>
  <h1>英検５級 フラッシュ英単語 <span class="badge">No.11 職業・人を表すことば</span></h1>
  <div class="switches">
    <label><input type="checkbox" id="jpFirst"> 日本語からスタート</label>
    <label><input type="checkbox" id="speakOn"> 🔊 音声ON</label>
  </div>
</header>

<div id="studyArea">
  <div class="card-outer" aria-label="フラッシュカード" role="button" tabindex="0">
    <div class="card" id="card">
      <div class="face card-face-front"><div class="frontText" id="frontText">—</div></div>
      <div class="face card-face-back"><div class="backText" id="backText">—</div></div>
    </div>
  </div>

  <div class="controls">
    <button class="btn primary" id="flipBtn">英語⇆日本語</button>
    <button class="btn" id="speakBtn">▶ 読み上げ</button>
    <button class="btn good" id="knownBtn">わかった 👍</button>
    <button class="btn review" id="wrongBtn">わからん！あとで復習 📌</button>
    <button class="btn" id="shuffleBtn">🔀 シャッフル</button>
    <button class="btn" id="resetBtn">↩︎ はじめから</button>
  </div>

  <div class="meta">
    <div class="progress"><div class="bar" id="bar"></div></div>
    <div class="index"><span id="pos">1</span>/<span id="total">—</span></div>
  </div>

  <p class="hint">カードをタップして答えを確認。わかったら「わかった」、不安なら「あとで復習」を押してね。</p>
</div>

<div class="result-box" id="resultBox">
  <h2 id="resultTitle">おつかれさま！✨</h2>
  <p id="resultText"></p>
  <div class="controls">
    <button class="btn review" id="reviewBtn">復習する 🔁</button>
    <button class="btn" id="againBtn">もう一回やる</button>
  </div>
</div>

<div class="series-nav-wrap">
  <a href="https://jouniorsankosodate.com/eiken5-no10/" class="series-nav-btn nav-back">← 前のレッスンへ</a>
  <a href="https://jouniorsankosodate.com/category/learn/english-flash/" class="series-nav-btn nav-back">英単語フラッシュのカテゴリ一覧に戻る</a>
  <a href="https://jouniorsankosodate.com/eiken5-no12/" class="series-nav-btn next">次のレッスンへ →</a>
</div>

</div>

<script>
const ITEMS = [
  { word: "teacher", jp: "先生" },
  { word: "doctor", jp: "医者" },
  { word: "nurse", jp: "看護師" },
  { word: "police officer", jp: "警察官" },
  { word: "firefighter", jp: "消防士" },
  { word: "cook", jp: "料理人" },
  { word: "driver", jp: "運転手" },
  { word: "farmer", jp: "農家" },
  { word: "shop clerk", jp: "店員" },
  { word: "student", jp: "生徒／学生" }
];

let _voice = null;

function pickVoice(){
  const voices = speechSynthesis.getVoices() || [];
  const femaleNames = ["Sonia","Serena","Susan","Kate","Libby","Maisie","Google UK English Female","Microsoft Sonia","Microsoft Libby","Microsoft Susan"];

  return voices.find(v => v.lang === "en-GB" && femaleNames.some(name => v.name.includes(name)))
  || voices.find(v => v.lang === "en-GB")
  || voices.find(v => (v.lang || "").startsWith("en"))
  || null;
}

(() => {
  const card = document.getElementById("card");
  const frontText = document.getElementById("frontText");
  const backText = document.getElementById("backText");
  const posEl = document.getElementById("pos");
  const totalEl = document.getElementById("total");
  const bar = document.getElementById("bar");
  const jpFirst = document.getElementById("jpFirst");
  const speakOnChk = document.getElementById("speakOn");
  const flipBtn = document.getElementById("flipBtn");
  const speakBtn = document.getElementById("speakBtn");
  const knownBtn = document.getElementById("knownBtn");
  const wrongBtn = document.getElementById("wrongBtn");
  const shuffleBtn = document.getElementById("shuffleBtn");
  const resetBtn = document.getElementById("resetBtn");
  const studyArea = document.getElementById("studyArea");
  const resultBox = document.getElementById("resultBox");
  const resultTitle = document.getElementById("resultTitle");
  const resultText = document.getElementById("resultText");
  const reviewBtn = document.getElementById("reviewBtn");
  const againBtn = document.getElementById("againBtn");

  let order = [...Array(ITEMS.length).keys()];
  let idx = 0;
  let isFlipped = false;
  let showJpFirst = false;
  let speakOn = false;
  let reviewList = [];

  totalEl.textContent = order.length;

  speechSynthesis.addEventListener("voiceschanged", () => {_voice = pickVoice();});

  function speak(text){
    try{
      if(!("speechSynthesis" in window)) return;
      if(!_voice) _voice = pickVoice();

      const u = new SpeechSynthesisUtterance(text.trim());
      if(_voice){
        u.voice = _voice;
        u.lang = _voice.lang || "en-GB";
      }else{
        u.lang = "en-GB";
      }

      u.rate = 0.9;
      u.pitch = 1.05;
      speechSynthesis.cancel();
      speechSynthesis.speak(u);
    }catch(e){}
  }

  function currentItem(){return ITEMS[order[idx]];}

  function render(){
    const it = currentItem();
    card.classList.remove("flipped");
    isFlipped = false;

    frontText.textContent = showJpFirst ? it.jp : it.word;
    backText.textContent = showJpFirst ? it.word : it.jp;

    posEl.textContent = idx + 1;
    totalEl.textContent = order.length;
    bar.style.width = `${((idx + 1) / order.length) * 100}%`;

    if(speakOn){speak(it.word);}
  }

  function flip(){
    isFlipped = !isFlipped;
    card.classList.toggle("flipped", isFlipped);
  }

  function nextCard(){
    if(idx >= order.length - 1){
      showResult();
      return;
    }
    idx++;
    render();
  }

  function showResult(){
    studyArea.style.display = "none";
    resultBox.style.display = "block";

    if(reviewList.length === 0){
      resultTitle.textContent = "ぜんぶできた！すごい！！🎉";
      resultText.textContent = "あとで復習する単語は 0こ です。";
      reviewBtn.style.display = "none";
    }else{
      resultTitle.textContent = "おつかれさま！✨";
      resultText.textContent = `あとで復習する単語は ${reviewList.length}こ あるよ。`;
      reviewBtn.style.display = "inline-block";
    }
  }

  function startStudy(newOrder){
    order = [...newOrder];
    idx = 0;
    studyArea.style.display = "block";
    resultBox.style.display = "none";
    render();
  }

  function resetAll(){
    reviewList = [];
    startStudy([...Array(ITEMS.length).keys()]);
  }

  function shuffleOrder(){
    for(let i = order.length - 1; i > 0; i--){
      const j = Math.floor(Math.random() * (i + 1));
      [order[i], order[j]] = [order[j], order[i]];
    }
    idx = 0;
    render();
  }

  card.addEventListener("click", flip);
  flipBtn.addEventListener("click", flip);
  speakBtn.addEventListener("click", () => speak(currentItem().word));
  knownBtn.addEventListener("click", nextCard);

  wrongBtn.addEventListener("click", () => {
    const currentIndex = order[idx];
    if(!reviewList.includes(currentIndex)){reviewList.push(currentIndex);}
    nextCard();
  });

  reviewBtn.addEventListener("click", () => {
    if(reviewList.length === 0) return;
    const list = [...reviewList];
    reviewList = [];
    startStudy(list);
  });

  againBtn.addEventListener("click", resetAll);
  shuffleBtn.addEventListener("click", shuffleOrder);
  resetBtn.addEventListener("click", resetAll);

  jpFirst.addEventListener("change", e => {
    showJpFirst = e.target.checked;
    render();
  });

  speakOnChk.addEventListener("change", e => {
    speakOn = e.target.checked;
    if(speakOn) speak(currentItem().word);
  });

  window.addEventListener("keydown", e => {
    if(e.key === " "){
      e.preventDefault();
      flip();
    }
  });

  render();
})();
</script>
</body>
</html>
<p>投稿 <a href="https://jouniorsankosodate.com/eiken5-no11/">英検５級 フラッシュ英単語 No.11｜職業（音声対応）</a> は <a href="https://jouniorsankosodate.com">じゅにさん子育てブログ</a> に最初に表示されました。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://jouniorsankosodate.com/eiken5-no11/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
