{"id":9131,"date":"2025-12-04T11:16:46","date_gmt":"2025-12-04T02:16:46","guid":{"rendered":"https:\/\/rakkokeyword.com\/techo\/?p=9131"},"modified":"2026-03-18T14:08:37","modified_gmt":"2026-03-18T05:08:37","slug":"tool-web-roulette","status":"publish","type":"post","link":"https:\/\/rakkokeyword.com\/techo\/tool-web-roulette\/","title":{"rendered":"\u30eb\u30fc\u30ec\u30c3\u30c8\u30c4\u30fc\u30eb"},"content":{"rendered":"\n<div id=\"rouletteToolContainer\" style=\"width:100%;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;color:#000;box-sizing:border-box\">\n<style>\n#rouletteToolContainer *,\n#rouletteToolContainer *::before,\n#rouletteToolContainer *::after {\n  box-sizing: border-box;\n}\n\n.roulette-section {\n  margin-bottom: 24px;\n}\n\n.roulette-section-title {\n  font-size: 18px;\n  font-weight: 600;\n  margin: 0 0 12px 0;\n  color: #000;\n}\n\n.roulette-canvas-wrapper {\n  position: relative;\n  max-width: 600px;\n  margin: 0 auto 20px;\n  aspect-ratio: 1;\n}\n\n.roulette-canvas {\n  width: 100%;\n  height: 100%;\n  display: block;\n}\n\n.roulette-pointer {\n  position: absolute;\n  top: 10px;\n  left: 50%;\n  transform: translateX(-50%);\n  width: 0;\n  height: 0;\n  border-left: 15px solid transparent;\n  border-right: 15px solid transparent;\n  border-top: 30px solid #ff4444;\n  z-index: 10;\n  filter: drop-shadow(0 2px 4px rgba(0,0,0,0.2));\n}\n\n.roulette-controls {\n  display: flex;\n  justify-content: center;\n  gap: 12px;\n  margin-bottom: 24px;\n  flex-wrap: wrap;\n}\n\n.roulette-btn {\n  padding: 14px 32px;\n  background: #13284B;\n  color: #fff;\n  border: none;\n  border-radius: 4px;\n  font-size: 18px;\n  font-weight: 600;\n  cursor: pointer;\n  transition: opacity 0.2s;\n  min-height: 48px;\n}\n\n.roulette-btn:hover:not(:disabled) {\n  opacity: 0.9;\n}\n\n.roulette-btn:disabled {\n  opacity: 0.5;\n  cursor: not-allowed;\n}\n\n.roulette-btn-secondary {\n  background: #666;\n  padding: 10px 20px;\n  font-size: 15px;\n  min-height: 40px;\n}\n\n.roulette-result-modal {\n  display: none;\n  position: fixed;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  background: rgba(0, 0, 0, 0.7);\n  z-index: 10000;\n  justify-content: center;\n  align-items: center;\n}\n\n.roulette-result-modal.show {\n  display: flex;\n  animation: modalFadeIn 0.3s ease-out;\n}\n\n@keyframes modalFadeIn {\n  from {\n    opacity: 0;\n  }\n  to {\n    opacity: 1;\n  }\n}\n\n.roulette-result-area {\n  max-width: 600px;\n  width: 90%;\n  margin: 0 auto;\n  padding: 32px;\n  background: #f5f5f5;\n  border: 2px solid #ddd;\n  border-radius: 8px;\n  text-align: center;\n  min-height: 180px;\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n  position: relative;\n  overflow: hidden;\n  animation: modalContentSlideIn 0.4s ease-out;\n}\n\n@keyframes modalContentSlideIn {\n  from {\n    transform: translateY(-30px);\n    opacity: 0;\n  }\n  to {\n    transform: translateY(0);\n    opacity: 1;\n  }\n}\n\n.roulette-result-area.empty {\n  opacity: 0.5;\n}\n\n.roulette-result-area.show {\n  opacity: 1;\n  animation: resultPulse 0.4s ease-out;\n}\n\n@keyframes resultPulse {\n  0% {\n    transform: scale(0.98);\n  }\n  50% {\n    transform: scale(1.02);\n  }\n  100% {\n    transform: scale(1);\n  }\n}\n\n.roulette-result-label {\n  font-size: 16px;\n  color: #666;\n  margin-bottom: 8px;\n  font-weight: 500;\n}\n\n.roulette-result-value {\n  font-size: 48px;\n  font-weight: 700;\n  color: #13284B;\n  margin: 16px 0 24px;\n  word-break: break-word;\n}\n\n.roulette-result-buttons {\n  display: flex;\n  gap: 12px;\n  justify-content: center;\n  flex-wrap: wrap;\n}\n\n.roulette-confetti {\n  position: absolute;\n  width: 10px;\n  height: 10px;\n  pointer-events: none;\n}\n\n.roulette-font-size-control {\n  max-width: 600px;\n  margin: 0 auto 24px;\n  padding: 16px;\n  background: #f9f9f9;\n  border-radius: 8px;\n}\n\n.roulette-font-size-label {\n  font-size: 15px;\n  color: #333;\n  margin-bottom: 10px;\n  display: block;\n  font-weight: 600;\n}\n\n.roulette-font-size-slider {\n  width: 100%;\n  height: 6px;\n  border-radius: 3px;\n  background: #ddd;\n  outline: none;\n  -webkit-appearance: none;\n  appearance: none;\n  cursor: pointer;\n}\n\n.roulette-font-size-slider::-webkit-slider-thumb {\n  -webkit-appearance: none;\n  appearance: none;\n  width: 20px;\n  height: 20px;\n  border-radius: 50%;\n  background: #13284B;\n  cursor: pointer;\n}\n\n.roulette-font-size-slider::-moz-range-thumb {\n  width: 20px;\n  height: 20px;\n  border-radius: 50%;\n  background: #13284B;\n  cursor: pointer;\n  border: none;\n}\n\n.roulette-font-size-value {\n  display: inline-block;\n  margin-left: 8px;\n  font-weight: 600;\n  color: #13284B;\n}\n\n.roulette-textarea {\n  width: 100%;\n  min-height: 140px;\n  padding: 12px;\n  border: 1px solid #ddd;\n  border-radius: 4px;\n  font-size: 16px;\n  resize: vertical;\n  line-height: 1.6;\n  color: #000;\n}\n\n.roulette-presets {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  margin-top: 12px;\n}\n\n.roulette-preset-btn {\n  padding: 10px 16px;\n  background: #fff;\n  border: 1px solid #ddd;\n  border-radius: 4px;\n  font-size: 14px;\n  cursor: pointer;\n  transition: all 0.2s;\n  color: #000;\n}\n\n.roulette-preset-btn:hover {\n  background: #f5f5f5;\n  border-color: #13284B;\n}\n\n.roulette-history-list {\n  display: flex;\n  flex-direction: column;\n  gap: 8px;\n  margin-top: 12px;\n}\n\n.roulette-history-item {\n  padding: 10px;\n  background: #f9f9f9;\n  border-left: 3px solid #13284B;\n  border-radius: 4px;\n  font-size: 15px;\n  color: #000;\n}\n\n.roulette-url-box {\n  display: flex;\n  gap: 8px;\n  margin-top: 12px;\n  flex-wrap: wrap;\n}\n\n.roulette-url-input {\n  flex: 1;\n  min-width: 200px;\n  padding: 10px;\n  border: 1px solid #ddd;\n  border-radius: 4px;\n  font-size: 14px;\n  background: #f9f9f9;\n  color: #000;\n}\n\n.roulette-error-message {\n  color: #d32f2f;\n  font-size: 14px;\n  margin-top: 8px;\n  text-align: center;\n  display: none;\n}\n\n.roulette-error-message.show {\n  display: block;\n}\n\n@media (max-width: 640px) {\n  .roulette-result-value {\n    font-size: 36px;\n  }\n  \n  .roulette-btn {\n    padding: 12px 24px;\n    font-size: 16px;\n  }\n  \n  .roulette-result-area {\n    padding: 24px 16px;\n    width: 95%;\n  }\n  \n  .roulette-preset-btn {\n    padding: 8px 12px;\n    font-size: 13px;\n  }\n  \n  .roulette-font-size-control {\n    padding: 12px;\n  }\n}\n<\/style>\n\n<div class=\"roulette-section\">\n  <div class=\"roulette-canvas-wrapper\">\n    <div class=\"roulette-pointer\"><\/div>\n    <canvas id=\"rouletteCanvas\" class=\"roulette-canvas\" aria-label=\"\u30eb\u30fc\u30ec\u30c3\u30c8\u8868\u793a\u30a8\u30ea\u30a2\"><\/canvas>\n  <\/div>\n  <div class=\"roulette-controls\">\n    <button id=\"rouletteSpinBtn\" class=\"roulette-btn\" aria-label=\"\u30eb\u30fc\u30ec\u30c3\u30c8\u3092\u56de\u3059\">\u56de\u3059<\/button>\n  <\/div>\n  <div id=\"rouletteInputError\" class=\"roulette-error-message\"><\/div>\n<\/div>\n\n<div class=\"roulette-section\">\n  <p class=\"roulette-section-title\">\ud83d\udcdd \u9805\u76ee\u5165\u529b\uff08\u6539\u884c\u533a\u5207\u308a\uff09<\/p>\n  <textarea id=\"rouletteItemsInput\" class=\"roulette-textarea\" placeholder=\"1\n2\n3\n4\n5\n6\" aria-label=\"\u30eb\u30fc\u30ec\u30c3\u30c8\u9805\u76ee\u5165\u529b\">1\n2\n3\n4\n5\n6<\/textarea>\n<\/div>\n\n<div class=\"roulette-font-size-control\">\n  <label class=\"roulette-font-size-label\">\n    \u30eb\u30fc\u30ec\u30c3\u30c8\u5185\u306e\u6587\u5b57\u30b5\u30a4\u30ba\n    <span id=\"rouletteFontSizeValue\" class=\"roulette-font-size-value\">18px<\/span>\n  <\/label>\n  <input type=\"range\" id=\"rouletteFontSizeSlider\" class=\"roulette-font-size-slider\" min=\"12\" max=\"28\" value=\"18\" step=\"1\">\n<\/div>\n\n<div class=\"roulette-section\">\n  <p class=\"roulette-section-title\">\ud83d\udccb \u30d7\u30ea\u30bb\u30c3\u30c8<\/p>\n  <div class=\"roulette-presets\">\n    <button class=\"roulette-preset-btn\" data-preset=\"binary\">\u4e8c\u629e<\/button>\n    <button class=\"roulette-preset-btn\" data-preset=\"dice\">\u30b5\u30a4\u30b3\u30ed<\/button>\n    <button class=\"roulette-preset-btn\" data-preset=\"janken\">\u3058\u3083\u3093\u3051\u3093<\/button>\n    <button class=\"roulette-preset-btn\" data-preset=\"amida\">\u3042\u307f\u3060\u304f\u3058<\/button>\n    <button class=\"roulette-preset-btn\" data-preset=\"weekday\">\u66dc\u65e5<\/button>\n    <button class=\"roulette-preset-btn\" data-preset=\"direction\">\u65b9\u89d2<\/button>\n    <button class=\"roulette-preset-btn\" data-preset=\"blood\">\u8840\u6db2\u578b<\/button>\n    <button class=\"roulette-preset-btn\" data-preset=\"season\">\u5b63\u7bc0<\/button>\n    <button class=\"roulette-preset-btn\" data-preset=\"trump\">\u30c8\u30e9\u30f3\u30d7<\/button>\n    <button class=\"roulette-preset-btn\" data-preset=\"duty\">\u5f53\u756a<\/button>\n    <button class=\"roulette-preset-btn\" data-preset=\"lunch\">\u30e9\u30f3\u30c1<\/button>\n    <button class=\"roulette-preset-btn\" data-preset=\"drink\">\u98f2\u307f\u7269<\/button>\n    <button class=\"roulette-preset-btn\" data-preset=\"dessert\">\u30c7\u30b6\u30fc\u30c8<\/button>\n    <button class=\"roulette-preset-btn\" data-preset=\"seat\">\u5e2d\u9806<\/button>\n    <button class=\"roulette-preset-btn\" data-preset=\"bingo\">\u30d3\u30f3\u30b4<\/button>\n  <\/div>\n<\/div>\n\n<div class=\"roulette-section\">\n  <p class=\"roulette-section-title\">\ud83d\udd17 \u30b7\u30a7\u30a2\u7528URL<\/p>\n  <div class=\"roulette-url-box\">\n    <input type=\"text\" id=\"rouletteUrlInput\" class=\"roulette-url-input\" readonly aria-label=\"\u5171\u6709URL\">\n    <button id=\"rouletteCopyUrlBtn\" class=\"roulette-btn roulette-btn-secondary\">URL\u3092\u30b3\u30d4\u30fc<\/button>\n  <\/div>\n<\/div>\n\n<div class=\"roulette-section\">\n  <p class=\"roulette-section-title\">\ud83d\udcdc \u5f53\u9078\u5c65\u6b74<\/p>\n  <div id=\"rouletteHistoryList\" class=\"roulette-history-list\" role=\"log\" aria-live=\"polite\"><\/div>\n<\/div>\n\n<div id=\"rouletteResultModal\" class=\"roulette-result-modal\" role=\"dialog\" aria-modal=\"true\">\n  <div id=\"rouletteResultArea\" class=\"roulette-result-area\">\n    <div class=\"roulette-result-label\">\u7d50\u679c<\/div>\n    <div id=\"rouletteResultValue\" class=\"roulette-result-value\"><\/div>\n    <div class=\"roulette-result-buttons\">\n      <button id=\"rouletteSpinAgainBtn\" class=\"roulette-btn\">\u3082\u3046\u4e00\u5ea6\u56de\u3059<\/button>\n      <button id=\"rouletteExcludeBtn\" class=\"roulette-btn roulette-btn-secondary\">\u3053\u306e\u9805\u76ee\u3092\u9664\u5916<\/button>\n      <button id=\"rouletteCloseModalBtn\" class=\"roulette-btn roulette-btn-secondary\">\u9589\u3058\u308b<\/button>\n    <\/div>\n  <\/div>\n<\/div>\n\n<script>\n(function() {\n  'use strict';\n  \n  const ROULETTE_CONFIG = {\n    colors: ['#FF6B6B', '#4ECDC4', '#45B7D1', '#FFA07A', '#98D8C8', '#F7DC6F', '#BB8FCE', '#85C1E2', '#F8B88B', '#AAB7B8'],\n    maxItems: 100,\n    maxTextLength: 200,\n    spinDuration: 3000,\n    minSpinInterval: 1500,\n    maxHistoryItems: 20,\n    presets: {\n      binary: '\u5f53\u305f\u308a\\n\u30cf\u30ba\u30ec',\n      dice: '1\\n2\\n3\\n4\\n5\\n6',\n      janken: '\u30b0\u30fc\\n\u30c1\u30e7\u30ad\\n\u30d1\u30fc',\n      amida: 'A\\nB\\nC\\nD',\n      weekday: '\u6708\u66dc\u65e5\\n\u706b\u66dc\u65e5\\n\u6c34\u66dc\u65e5\\n\u6728\u66dc\u65e5\\n\u91d1\u66dc\u65e5\\n\u571f\u66dc\u65e5\\n\u65e5\u66dc\u65e5',\n      direction: '\u6771\\n\u897f\\n\u5357\\n\u5317',\n      blood: 'A\u578b\\nB\u578b\\nO\u578b\\nAB\u578b',\n      season: '\u6625\\n\u590f\\n\u79cb\\n\u51ac',\n      trump: 'A\\n2\\n3\\n4\\n5\\n6\\n7\\n8\\n9\\n10\\nJ\\nQ\\nK',\n      duty: '\u6383\u9664\u5f53\u756a\\n\u30b4\u30df\u51fa\u3057\\n\u98df\u5668\u6d17\u3044\\n\u6d17\u6fef\\n\u8cb7\u3044\u7269',\n      lunch: '\u30e9\u30fc\u30e1\u30f3\\n\u30ab\u30ec\u30fc\\n\u30d1\u30b9\u30bf\\n\u5bff\u53f8\\n\u5b9a\u98df\\n\u30b5\u30f3\u30c9\u30a4\u30c3\u30c1',\n      drink: '\u30b3\u30fc\u30d2\u30fc\\n\u7d05\u8336\\n\u7dd1\u8336\\n\u30b8\u30e5\u30fc\u30b9\\n\u6c34\\n\u304a\u8336',\n      dessert: '\u30b1\u30fc\u30ad\\n\u30a2\u30a4\u30b9\\n\u30d7\u30ea\u30f3\\n\u30bc\u30ea\u30fc\\n\u30d5\u30eb\u30fc\u30c4',\n      seat: '1\u756a\\n2\u756a\\n3\u756a\\n4\u756a\\n5\u756a\\n6\u756a\\n7\u756a\\n8\u756a\\n9\u756a\\n10\u756a',\n      bingo: Array.from({length: 100}, (_, i) => i + 1).join('\\n')\n    }\n  };\n\n  let rouletteState = {\n    items: [],\n    isSpinning: false,\n    currentRotation: 0,\n    history: [],\n    excludedIndices: new Set(),\n    audioContext: null,\n    lastSpinTime: 0,\n    fontSize: 18\n  };\n\n  const elements = {\n    container: document.getElementById('rouletteToolContainer'),\n    itemsInput: document.getElementById('rouletteItemsInput'),\n    inputError: document.getElementById('rouletteInputError'),\n    canvas: document.getElementById('rouletteCanvas'),\n    spinBtn: document.getElementById('rouletteSpinBtn'),\n    resultModal: document.getElementById('rouletteResultModal'),\n    resultArea: document.getElementById('rouletteResultArea'),\n    resultValue: document.getElementById('rouletteResultValue'),\n    spinAgainBtn: document.getElementById('rouletteSpinAgainBtn'),\n    excludeBtn: document.getElementById('rouletteExcludeBtn'),\n    closeModalBtn: document.getElementById('rouletteCloseModalBtn'),\n    historyList: document.getElementById('rouletteHistoryList'),\n    urlInput: document.getElementById('rouletteUrlInput'),\n    copyUrlBtn: document.getElementById('rouletteCopyUrlBtn'),\n    fontSizeSlider: document.getElementById('rouletteFontSizeSlider'),\n    fontSizeValue: document.getElementById('rouletteFontSizeValue')\n  };\n\n  function sanitizeInput(input) {\n    if (typeof input !== 'string') return '';\n    return input.replace(\/[<>\\\"'&]\/g, function(char) {\n      const entities = {\n        '<': '&lt;',\n        '>': '&gt;',\n        '\"': '&quot;',\n        \"'\": '&#39;',\n        '&': '&amp;'\n      };\n      return entities[char] || char;\n    }).trim();\n  }\n\n  function showError(message) {\n    elements.inputError.textContent = message;\n    elements.inputError.classList.add('show');\n    setTimeout(function() {\n      elements.inputError.classList.remove('show');\n    }, 5000);\n  }\n\n  function parseItems() {\n    const text = elements.itemsInput.value.trim();\n    if (!text) {\n      rouletteState.items = [];\n      return;\n    }\n    \n    const lines = text.split('\\n').filter(function(line) {\n      return line.trim().length > 0;\n    });\n    \n    const uniqueLines = [];\n    const seen = new Set();\n    for (let i = 0; i < lines.length; i++) {\n      const line = lines[i].trim();\n      if (!seen.has(line)) {\n        seen.add(line);\n        uniqueLines.push(line);\n      }\n    }\n    \n    rouletteState.items = uniqueLines.slice(0, ROULETTE_CONFIG.maxItems).map(function(line, index) {\n      return {\n        text: sanitizeInput(line.slice(0, ROULETTE_CONFIG.maxTextLength)),\n        color: ROULETTE_CONFIG.colors[index % ROULETTE_CONFIG.colors.length]\n      };\n    });\n  }\n\n  function drawRoulette() {\n    const canvas = elements.canvas;\n    const ctx = canvas.getContext('2d');\n    const dpr = window.devicePixelRatio || 1;\n    const rect = canvas.getBoundingClientRect();\n    \n    canvas.width = rect.width * dpr;\n    canvas.height = rect.height * dpr;\n    ctx.scale(dpr, dpr);\n    \n    const centerX = rect.width \/ 2;\n    const centerY = rect.height \/ 2;\n    const radius = Math.min(centerX, centerY) - 10;\n    \n    ctx.clearRect(0, 0, rect.width, rect.height);\n    \n    if (rouletteState.items.length === 0) {\n      ctx.fillStyle = '#ddd';\n      ctx.beginPath();\n      ctx.arc(centerX, centerY, radius, 0, Math.PI * 2);\n      ctx.fill();\n      ctx.fillStyle = '#666';\n      ctx.font = '18px sans-serif';\n      ctx.textAlign = 'center';\n      ctx.textBaseline = 'middle';\n      ctx.fillText('\u9805\u76ee\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044', centerX, centerY);\n      return;\n    }\n    \n    const activeItems = rouletteState.items.filter(function(item, idx) {\n      return !rouletteState.excludedIndices.has(idx);\n    });\n    \n    if (activeItems.length === 0) {\n      ctx.fillStyle = '#ddd';\n      ctx.beginPath();\n      ctx.arc(centerX, centerY, radius, 0, Math.PI * 2);\n      ctx.fill();\n      ctx.fillStyle = '#666';\n      ctx.font = '18px sans-serif';\n      ctx.textAlign = 'center';\n      ctx.textBaseline = 'middle';\n      ctx.fillText('\u9664\u5916\u306b\u3088\u308a\u9805\u76ee\u304c\u3042\u308a\u307e\u305b\u3093', centerX, centerY);\n      return;\n    }\n    \n    const sliceAngle = (Math.PI * 2) \/ activeItems.length;\n    let currentAngle = rouletteState.currentRotation;\n    \n    activeItems.forEach(function(item) {\n      ctx.fillStyle = item.color;\n      ctx.beginPath();\n      ctx.moveTo(centerX, centerY);\n      ctx.arc(centerX, centerY, radius, currentAngle, currentAngle + sliceAngle);\n      ctx.closePath();\n      ctx.fill();\n      \n      ctx.strokeStyle = '#fff';\n      ctx.lineWidth = 2;\n      ctx.stroke();\n      \n      const textAngle = currentAngle + sliceAngle \/ 2;\n      const textRadius = radius * 0.7;\n      const textX = centerX + Math.cos(textAngle) * textRadius;\n      const textY = centerY + Math.sin(textAngle) * textRadius;\n      \n      ctx.save();\n      ctx.translate(textX, textY);\n      ctx.rotate(textAngle + Math.PI \/ 2);\n      \n      ctx.fillStyle = '#fff';\n      ctx.font = 'bold ' + rouletteState.fontSize + 'px sans-serif';\n      ctx.textAlign = 'center';\n      ctx.textBaseline = 'middle';\n      ctx.shadowColor = 'rgba(0,0,0,0.3)';\n      ctx.shadowBlur = 2;\n      ctx.fillText(item.text.slice(0, 20), 0, 0);\n      ctx.shadowBlur = 0;\n      \n      ctx.restore();\n      currentAngle += sliceAngle;\n    });\n    \n    ctx.fillStyle = '#13284B';\n    ctx.beginPath();\n    ctx.arc(centerX, centerY, 20, 0, Math.PI * 2);\n    ctx.fill();\n  }\n\n  function playSound(frequency, duration) {\n    try {\n      if (!rouletteState.audioContext) {\n        const AudioContext = window.AudioContext || window.webkitAudioContext;\n        if (AudioContext) {\n          rouletteState.audioContext = new AudioContext();\n        }\n      }\n      \n      if (!rouletteState.audioContext) return;\n      \n      const oscillator = rouletteState.audioContext.createOscillator();\n      const gainNode = rouletteState.audioContext.createGain();\n      \n      oscillator.connect(gainNode);\n      gainNode.connect(rouletteState.audioContext.destination);\n      \n      oscillator.frequency.value = frequency;\n      oscillator.type = 'sine';\n      \n      gainNode.gain.setValueAtTime(0.1, rouletteState.audioContext.currentTime);\n      gainNode.gain.exponentialRampToValueAtTime(0.01, rouletteState.audioContext.currentTime + duration);\n      \n      oscillator.start();\n      oscillator.stop(rouletteState.audioContext.currentTime + duration);\n    } catch (e) {\n      return;\n    }\n  }\n\n  function createConfetti() {\n    const resultArea = elements.resultArea;\n    const colors = ['#ff0', '#f0f', '#0ff', '#f00', '#0f0', '#00f'];\n    const confettiCount = 40;\n    \n    for (let i = 0; i < confettiCount; i++) {\n      setTimeout(function() {\n        const confetti = document.createElement('div');\n        confetti.className = 'roulette-confetti';\n        confetti.style.left = Math.random() * 100 + '%';\n        confetti.style.top = '-10px';\n        confetti.style.background = colors[Math.floor(Math.random() * colors.length)];\n        confetti.style.animation = 'rouletteConfettiFall ' + (2 + Math.random() * 2) + 's linear forwards';\n        resultArea.appendChild(confetti);\n        \n        setTimeout(function() {\n          if (confetti.parentNode) {\n            confetti.parentNode.removeChild(confetti);\n          }\n        }, 4000);\n      }, i * 30);\n    }\n  }\n\n  function spinRoulette() {\n    const now = Date.now();\n    if (rouletteState.isSpinning) {\n      showError('\u56de\u8ee2\u4e2d\u3067\u3059');\n      return;\n    }\n    \n    if (now - rouletteState.lastSpinTime < ROULETTE_CONFIG.minSpinInterval) {\n      showError('\u5c11\u3057\u5f85\u3063\u3066\u304b\u3089\u518d\u5ea6\u304a\u8a66\u3057\u304f\u3060\u3055\u3044');\n      return;\n    }\n    \n    const activeItems = rouletteState.items.filter(function(item, idx) {\n      return !rouletteState.excludedIndices.has(idx);\n    });\n    \n    if (activeItems.length === 0) {\n      showError('\u9078\u629e\u3067\u304d\u308b\u9805\u76ee\u304c\u3042\u308a\u307e\u305b\u3093');\n      return;\n    }\n    \n    elements.resultModal.classList.remove('show');\n    \n    rouletteState.isSpinning = true;\n    rouletteState.lastSpinTime = now;\n    elements.spinBtn.disabled = true;\n    \n    const selectedIndex = Math.floor(Math.random() * activeItems.length);\n    \n    const baseRotations = 5;\n    const sliceAngle = (Math.PI * 2) \/ activeItems.length;\n    \n    \/\/ \u30dd\u30a4\u30f3\u30bf\u30fc\u4f4d\u7f6e\u306f12\u6642\u65b9\u5411\uff08-\u03c0\/2 = 3\u03c0\/2\uff09\n    const pointerAngle = -Math.PI \/ 2;\n    \n    \/\/ \u9078\u629e\u3055\u308c\u305f\u9805\u76ee\u306e\u4e2d\u5fc3\u89d2\u5ea6\n    const selectedItemCenterAngle = selectedIndex * sliceAngle + sliceAngle \/ 2;\n    \n    \/\/ \u73fe\u5728\u306e\u56de\u8ee2\u89d2\u5ea6\u3092\u6b63\u898f\u5316\n    const normalizedCurrentRotation = rouletteState.currentRotation % (Math.PI * 2);\n    \n    \/\/ \u9078\u629e\u9805\u76ee\u3092\u30dd\u30a4\u30f3\u30bf\u30fc\u4f4d\u7f6e\u306b\u5408\u308f\u305b\u308b\u305f\u3081\u306e\u76ee\u6a19\u89d2\u5ea6\n    \/\/ pointerAngle - selectedItemCenterAngle \u306b\u5408\u308f\u305b\u308b\u5fc5\u8981\u304c\u3042\u308b\n    let targetRotation = pointerAngle - selectedItemCenterAngle;\n    \n    \/\/ \u8ca0\u306e\u89d2\u5ea6\u3092\u6b63\u306e\u89d2\u5ea6\u306b\u5909\u63db\uff08\u6642\u8a08\u56de\u308a\u306e\u56de\u8ee2\u306b\u3059\u308b\uff09\n    while (targetRotation < normalizedCurrentRotation) {\n      targetRotation += Math.PI * 2;\n    }\n    \n    \/\/ \u57fa\u672c\u56de\u8ee2\u6570\uff085\u56de\u8ee2\uff09\u3092\u8ffd\u52a0\n    targetRotation += baseRotations * Math.PI * 2;\n    \n    const startRotation = rouletteState.currentRotation;\n    const startTime = Date.now();\n    \n    function animate() {\n      const elapsed = Date.now() - startTime;\n      const progress = Math.min(elapsed \/ ROULETTE_CONFIG.spinDuration, 1);\n      const easeProgress = 1 - Math.pow(1 - progress, 3);\n      \n      rouletteState.currentRotation = startRotation + (targetRotation - startRotation) * easeProgress;\n      drawRoulette();\n      \n      if (progress < 1) {\n        if (Math.random() > 0.95) {\n          playSound(200 + Math.random() * 400, 0.05);\n        }\n        requestAnimationFrame(animate);\n      } else {\n        rouletteState.currentRotation = targetRotation % (Math.PI * 2);\n        rouletteState.isSpinning = false;\n        elements.spinBtn.disabled = false;\n        drawRoulette();\n        showResult(activeItems[selectedIndex]);\n      }\n    }\n    \n    requestAnimationFrame(animate);\n  }\n\n  function showResult(item) {\n    elements.resultValue.textContent = item.text;\n    elements.resultModal.classList.add('show');\n    elements.spinAgainBtn.focus();\n    \n    rouletteState.history.unshift({\n      text: item.text,\n      time: new Date().toLocaleString('ja-JP', {\n        year: 'numeric',\n        month: '2-digit',\n        day: '2-digit',\n        hour: '2-digit',\n        minute: '2-digit'\n      })\n    });\n    \n    if (rouletteState.history.length > ROULETTE_CONFIG.maxHistoryItems) {\n      rouletteState.history = rouletteState.history.slice(0, ROULETTE_CONFIG.maxHistoryItems);\n    }\n    \n    updateHistory();\n    createConfetti();\n    playSound(523.25, 0.3);\n  }\n\n  function updateHistory() {\n    if (rouletteState.history.length === 0) {\n      elements.historyList.innerHTML = '<p style=\"color:#666;font-size:15px;\">\u5c65\u6b74\u306f\u307e\u3060\u3042\u308a\u307e\u305b\u3093<\/p>';\n      return;\n    }\n    \n    elements.historyList.innerHTML = '';\n    rouletteState.history.forEach(function(entry, index) {\n      const item = document.createElement('div');\n      item.className = 'roulette-history-item';\n      item.textContent = (index + 1) + '. ' + entry.text + ' (' + entry.time + ')';\n      elements.historyList.appendChild(item);\n    });\n  }\n\n  function generateUrl() {\n    try {\n      const url = new URL(window.location.href.split('?')[0]);\n      const items = rouletteState.items.map(function(item) {\n        return encodeURIComponent(item.text);\n      }).join(',');\n      \n      if (items) {\n        url.searchParams.set('items', items);\n      }\n      \n      return url.toString();\n    } catch (e) {\n      return window.location.href;\n    }\n  }\n\n  function loadFromUrl() {\n    try {\n      const params = new URLSearchParams(window.location.search);\n      const itemsParam = params.get('items');\n      \n      if (!itemsParam) return;\n      \n      const items = itemsParam.split(',').map(function(item) {\n        return sanitizeInput(decodeURIComponent(item));\n      }).filter(function(item) {\n        return item.length > 0;\n      }).slice(0, ROULETTE_CONFIG.maxItems);\n      \n      if (items.length > 0) {\n        elements.itemsInput.value = items.join('\\n');\n        parseItems();\n        drawRoulette();\n      }\n    } catch (e) {\n      return;\n    }\n  }\n\n  elements.itemsInput.addEventListener('input', function() {\n    parseItems();\n    drawRoulette();\n    elements.urlInput.value = generateUrl();\n  });\n\n  elements.fontSizeSlider.addEventListener('input', function() {\n    rouletteState.fontSize = parseInt(this.value);\n    elements.fontSizeValue.textContent = rouletteState.fontSize + 'px';\n    drawRoulette();\n  });\n\n  elements.spinBtn.addEventListener('click', spinRoulette);\n\n  elements.spinAgainBtn.addEventListener('click', function() {\n    elements.resultModal.classList.remove('show');\n    setTimeout(spinRoulette, 300);\n  });\n\n  elements.excludeBtn.addEventListener('click', function() {\n    const resultText = elements.resultValue.textContent;\n    const index = rouletteState.items.findIndex(function(item) {\n      return item.text === resultText;\n    });\n    \n    if (index !== -1) {\n      rouletteState.excludedIndices.add(index);\n      drawRoulette();\n      elements.resultModal.classList.remove('show');\n    }\n  });\n\n  elements.closeModalBtn.addEventListener('click', function() {\n    elements.resultModal.classList.remove('show');\n  });\n\n  elements.resultModal.addEventListener('click', function(e) {\n    if (e.target === elements.resultModal) {\n      elements.resultModal.classList.remove('show');\n    }\n  });\n\n  document.addEventListener('keydown', function(e) {\n    if (e.key === 'Escape' && elements.resultModal.classList.contains('show')) {\n      elements.resultModal.classList.remove('show');\n    }\n  });\n\n  elements.copyUrlBtn.addEventListener('click', function() {\n    const url = generateUrl();\n    elements.urlInput.value = url;\n    elements.urlInput.select();\n    \n    if (navigator.clipboard && navigator.clipboard.writeText) {\n      navigator.clipboard.writeText(url).then(function() {\n        const originalText = elements.copyUrlBtn.textContent;\n        elements.copyUrlBtn.textContent = '\u30b3\u30d4\u30fc\u3057\u307e\u3057\u305f!';\n        setTimeout(function() {\n          elements.copyUrlBtn.textContent = originalText;\n        }, 2000);\n      }).catch(function() {\n        fallbackCopyText();\n      });\n    } else {\n      fallbackCopyText();\n    }\n    \n    function fallbackCopyText() {\n      try {\n        document.execCommand('copy');\n        const originalText = elements.copyUrlBtn.textContent;\n        elements.copyUrlBtn.textContent = '\u30b3\u30d4\u30fc\u3057\u307e\u3057\u305f!';\n        setTimeout(function() {\n          elements.copyUrlBtn.textContent = originalText;\n        }, 2000);\n      } catch (e) {\n        showError('URL\u306e\u30b3\u30d4\u30fc\u306b\u5931\u6557\u3057\u307e\u3057\u305f');\n      }\n    }\n  });\n\n  document.querySelectorAll('.roulette-preset-btn').forEach(function(btn) {\n    btn.addEventListener('click', function() {\n      const preset = btn.dataset.preset;\n      if (ROULETTE_CONFIG.presets[preset]) {\n        elements.itemsInput.value = ROULETTE_CONFIG.presets[preset];\n        parseItems();\n        drawRoulette();\n        elements.urlInput.value = generateUrl();\n      }\n    });\n  });\n\n  const animationStyle = document.createElement('style');\n  animationStyle.textContent = '@keyframes rouletteConfettiFall{to{transform:translateY(500px) rotate(360deg);opacity:0;}}';\n  document.head.appendChild(animationStyle);\n\n  let resizeTimer;\n  window.addEventListener('resize', function() {\n    clearTimeout(resizeTimer);\n    resizeTimer = setTimeout(function() {\n      drawRoulette();\n    }, 100);\n  });\n\n  loadFromUrl();\n  parseItems();\n  drawRoulette();\n  updateHistory();\n  elements.urlInput.value = generateUrl();\n})();\n<\/script>\n<\/div>\n\n\n<p><\/p><div id=\"ad_hide_toggle_container\">\n  <style>\n    #ad_hide_toggle_container {\n      font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif;\n    }\n    \n    .ad_hide_toggle_wrapper {\n      display: inline-flex;\n      align-items: center;\n      gap: 8px;\n      padding: 8px 12px;\n      background: #f5f5f5;\n      border: 1px solid #ddd;\n      border-radius: 6px;\n    }\n    \n    .ad_hide_toggle_checkbox {\n      width: 18px;\n      height: 18px;\n      cursor: pointer;\n      margin: 0;\n      flex-shrink: 0;\n    }\n    \n    .ad_hide_toggle_label {\n      font-size: 14px;\n      color: #333;\n      cursor: pointer;\n      margin: 0;\n      user-select: none;\n      white-space: nowrap;\n    }\n    \n    \/* \u5e83\u544a\u975e\u8868\u793a\u7528 *\/\n    .ad_hide_active .sticky-sidebar,\n    .ad_hide_active .sticky-footer {\n      display: none !important;\n    }\n  <\/style>\n  \n  <div class=\"ad_hide_toggle_wrapper\">\n    <input type=\"checkbox\" id=\"ad_hide_toggle_checkbox\" class=\"ad_hide_toggle_checkbox\">\n    <label for=\"ad_hide_toggle_checkbox\" class=\"ad_hide_toggle_label\">\u5e83\u544a\u3092\u96a0\u3059<\/label>\n  <\/div>\n  \n  <script>\n    (function() {\n      'use strict';\n      \n      const AD_HIDE_STORAGE_KEY = 'ad_hide_toggle_state';\n      const AD_HIDE_CLASS = 'ad_hide_active';\n      \n      let adHideCheckbox = null;\n      \n      function initAdHideToggle() {\n        adHideCheckbox = document.getElementById('ad_hide_toggle_checkbox');\n        \n        if (!adHideCheckbox) return;\n        \n        \/\/ \u4fdd\u5b58\u3055\u308c\u305f\u72b6\u614b\u3092\u5fa9\u5143\n        loadAdHideState();\n        \n        \/\/ \u30c1\u30a7\u30c3\u30af\u30dc\u30c3\u30af\u30b9\u306e\u30a4\u30d9\u30f3\u30c8\u30ea\u30b9\u30ca\u30fc\n        adHideCheckbox.addEventListener('change', function() {\n          if (this.checked) {\n            document.body.classList.add(AD_HIDE_CLASS);\n            saveAdHideState(true);\n          } else {\n            document.body.classList.remove(AD_HIDE_CLASS);\n            saveAdHideState(false);\n          }\n        });\n      }\n      \n      function loadAdHideState() {\n        try {\n          const hideAds = localStorage.getItem(AD_HIDE_STORAGE_KEY);\n          if (hideAds === 'true') {\n            adHideCheckbox.checked = true;\n            document.body.classList.add(AD_HIDE_CLASS);\n          }\n        } catch (e) {\n          \/\/ \u30ed\u30fc\u30ab\u30eb\u30b9\u30c8\u30ec\u30fc\u30b8\u4f7f\u7528\u4e0d\u53ef\u6642\u306f\u7121\u8996\n        }\n      }\n      \n      function saveAdHideState(checked) {\n        try {\n          localStorage.setItem(AD_HIDE_STORAGE_KEY, checked ? 'true' : 'false');\n        } catch (e) {\n          \/\/ \u30ed\u30fc\u30ab\u30eb\u30b9\u30c8\u30ec\u30fc\u30b8\u4f7f\u7528\u4e0d\u53ef\u6642\u306f\u7121\u8996\n        }\n      }\n      \n      \/\/ DOMContentLoaded\u5bfe\u5fdc\n      if (document.readyState === 'loading') {\n        document.addEventListener('DOMContentLoaded', initAdHideToggle);\n      } else {\n        initAdHideToggle();\n      }\n    })();\n  <\/script>\n<\/div>\n<br>\n\n\n\n<p>\u767b\u9332\u4e0d\u8981\u30fb\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u4e0d\u8981\u3001\u30d6\u30e9\u30a6\u30b6\u4e0a\u3067\u9805\u76ee\u3092\u5165\u529b\u3059\u308b\u3060\u3051\u3067\u3059\u3050\u306b\u4f7f\u3048\u308b\u7121\u6599\u306eWeb\u30eb\u30fc\u30ec\u30c3\u30c8\u30c4\u30fc\u30eb\u3067\u3059\u3002\u30e9\u30f3\u30c1\u306e\u5834\u6240\u6c7a\u3081\u3084\u7f70\u30b2\u30fc\u30e0\u3001\u30a4\u30d9\u30f3\u30c8\u306e\u62bd\u9078\u306a\u3069\u3001\u8ff7\u3063\u305f\u3068\u304d\u306e\u6c7a\u65ad\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<div class=\"wp-block-sgb-say\"><div class=\"sgb-block-say sgb-block-say--left\"><div class=\"sgb-block-say-avatar\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/rakkokeyword.com\/techo\/wp-content\/uploads\/2025\/10\/image-27.png\" alt=\"\u30e9\u30c3\u30b3\" width=\"80\" height=\"80\" style=\"border-color:#eaedf2\"><div class=\"sgb-block-say-avatar__name\">\u30e9\u30c3\u30b3<\/div><\/div><div class=\"sgb-block-say-text\"><div class=\"sgb-block-say-text__content\" style=\"color:#333;border-color:#d5d5d5;background-color:#FFF\">\n<p><strong><span class=\"keiko_yellow\">\u30eb\u30fc\u30ec\u30c3\u30c8\u306fURL\u3067\u5171\u6709\u3067\u304d\u307e\u3059\u3002<\/span><\/strong><\/p>\n<span class=\"sgb-block-say-text__before\" style=\"border-right-color:#d5d5d5\"><\/span><span class=\"sgb-block-say-text__after\" style=\"border-right-color:#FFF\"><\/span><\/div><\/div><\/div><\/div>\n\n\n\n<p class=\"is-style-sango-paragraph-memo-alt\">\u3010\u95a2\u9023\u30c4\u30fc\u30eb\u3011<br>\u30fb<a href=\"https:\/\/rakkokeyword.com\/techo\/tool-russian-roulette-game\/\">\u30ed\u30b7\u30a2\u30f3\u30eb\u30fc\u30ec\u30c3\u30c8<\/a><br>\u30fb<a href=\"https:\/\/rakkokeyword.com\/techo\/tool-bingo-machine\/\">\u30d3\u30f3\u30b4\u30c4\u30fc\u30eb<\/a><br>\u30fb<a href=\"https:\/\/rakkokeyword.com\/techo\/tool-amidakuji-maker\/\">\u3042\u307f\u3060\u304f\u3058\u30c4\u30fc\u30eb<\/a><br>\u30fb<a href=\"https:\/\/rakkokeyword.com\/techo\/tool-gacha-probability-calculator\/\">\u30ac\u30c1\u30e3\u30b7\u30df\u30e5\u30ec\u30fc\u30bf\u30fc<\/a><br>\u30fb<a href=\"https:\/\/rakkokeyword.com\/techo\/tool-coin-toss\/\">\u30b3\u30a4\u30f3\u30c8\u30b9<\/a><br>\u30fb<a href=\"https:\/\/rakkokeyword.com\/techo\/tool-random-lottery\/\">\u304f\u3058\u5f15\u304d\u62bd\u9078\u30c4\u30fc\u30eb<\/a><br>\u30fb<a href=\"https:\/\/rakkokeyword.com\/techo\/tool-topic-roulette\/\" data-type=\"link\" data-id=\"https:\/\/rakkokeyword.com\/techo\/tool-topic-roulette\/\">\u8a71\u984c\u30eb\u30fc\u30ec\u30c3\u30c8\u30c4\u30fc\u30eb<\/a><\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-0\">\u3053\u306eWeb\u30eb\u30fc\u30ec\u30c3\u30c8\u30c4\u30fc\u30eb\u3067\u3067\u304d\u308b\u3053\u3068<\/h2>\n\n\n\n<p>\u3053\u306e\u30c4\u30fc\u30eb\u306f\u3001\u3042\u306a\u305f\u306e\u5165\u529b\u3057\u305f\u9078\u629e\u80a2\u304b\u3089\u30e9\u30f3\u30c0\u30e0\u306b1\u3064\u3092\u9078\u3076\u3053\u3068\u304c\u3067\u304d\u308b\u30aa\u30f3\u30e9\u30a4\u30f3\u62bd\u9078\u30c4\u30fc\u30eb\u3067\u3059\u3002<\/p>\n\n\n\n<p><strong>\u30aa\u30ea\u30b8\u30ca\u30eb\u306e\u30eb\u30fc\u30ec\u30c3\u30c8\u4f5c\u6210<\/strong> <br>\u30c6\u30ad\u30b9\u30c8\u30dc\u30c3\u30af\u30b9\u306b\u9078\u629e\u80a2\u3092\u5165\u529b\u3059\u308b\u3060\u3051\u3067\u3001\u81ea\u52d5\u7684\u306b\u5186\u30b0\u30e9\u30d5\u72b6\u306e\u30eb\u30fc\u30ec\u30c3\u30c8\u304c\u751f\u6210\u3055\u308c\u307e\u3059\u3002\u9805\u76ee\u306e\u6570\u306f2\u3064\u304b\u3089\u6700\u5927100\u500b\u307e\u3067\u5bfe\u5fdc\u3057\u3066\u304a\u308a\u3001\u4e8c\u629e\u306e\u6c7a\u65ad\u304b\u3089\u5927\u4eba\u6570\u306e\u62bd\u9078\u307e\u3067\u5e45\u5e83\u304f\u5229\u7528\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>\u4fbf\u5229\u306a\u52dd\u3061\u629c\u3051\uff08\u9664\u5916\uff09\u6a5f\u80fd<\/strong> <br>\u5f53\u9078\u3057\u305f\u9805\u76ee\u3092\u30ea\u30b9\u30c8\u304b\u3089\u9664\u5916\u3057\u3066\u3001\u518d\u5ea6\u30eb\u30fc\u30ec\u30c3\u30c8\u3092\u56de\u3059\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u30d3\u30f3\u30b4\u5927\u4f1a\u3084\u30d7\u30ec\u30bc\u30f3\u30c8\u4ea4\u63db\u306e\u3088\u3046\u306b\u300c\u4e00\u5ea6\u5f53\u305f\u3063\u305f\u4eba\u306f\u9664\u5916\u3059\u308b\u300d\u3068\u3044\u3046\u30b7\u30fc\u30f3\u3067\u5f79\u7acb\u3061\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>\u8c4a\u5bcc\u306a\u30d7\u30ea\u30bb\u30c3\u30c8<\/strong> <br>\u300c\u30b5\u30a4\u30b3\u30ed\u300d\u300c\u3058\u3083\u3093\u3051\u3093\u300d\u300c\u66dc\u65e5\u306e\u6c7a\u5b9a\u300d\u306a\u3069\u3001\u3088\u304f\u4f7f\u308f\u308c\u308b\u30ea\u30b9\u30c8\u306f\u30dc\u30bf\u30f3\u4e00\u3064\u3067\u547c\u3073\u51fa\u3057\u53ef\u80fd\u3067\u3059\u3002\u5165\u529b\u306e\u624b\u9593\u3092\u7701\u304d\u3001\u3059\u3050\u306b\u62bd\u9078\u3092\u59cb\u3081\u3089\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>\u8a2d\u5b9a\u306e\u4fdd\u5b58\u3068\u5171\u6709<\/strong> <br>\u4f5c\u6210\u3057\u305f\u30eb\u30fc\u30ec\u30c3\u30c8\u306e\u5185\u5bb9\u306fURL\u306b\u4fdd\u5b58\u3055\u308c\u307e\u3059\u3002\u305d\u306eURL\u3092\u30b3\u30d4\u30fc\u3057\u3066LINE\u3084SNS\u3067\u9001\u308c\u3070\u3001\u53cb\u9054\u3084\u540c\u50da\u3068\u540c\u3058\u30eb\u30fc\u30ec\u30c3\u30c8\u3092\u3059\u3050\u306b\u5171\u6709\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-1\">\u30eb\u30fc\u30ec\u30c3\u30c8\u3068\u30e9\u30f3\u30c0\u30e0\u9078\u51fa\u306e\u57fa\u790e\u77e5\u8b58<\/h2>\n\n\n\n<p><strong>Web\u30eb\u30fc\u30ec\u30c3\u30c8\u306e\u4ed5\u7d44\u307f<\/strong> <br>\u3053\u306e\u30c4\u30fc\u30eb\u3067\u306f\u3001\u30d6\u30e9\u30a6\u30b6\u306e\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\uff08JavaScript\uff09\u304c\u751f\u6210\u3059\u308b\u4e71\u6570\u3092\u5229\u7528\u3057\u3066\u7d50\u679c\u3092\u6c7a\u5b9a\u3057\u3066\u3044\u307e\u3059\u3002\u7269\u7406\u7684\u306a\u30eb\u30fc\u30ec\u30c3\u30c8\u306e\u3088\u3046\u306a\u6469\u64e6\u3084\u50be\u304d\u306b\u3088\u308b\u504f\u308a\u304c\u751f\u3058\u306a\u3044\u305f\u3081\u3001\u6570\u5b66\u7684\u306b\u516c\u5e73\u306a\u78ba\u7387\u3067\u7d50\u679c\u304c\u9078\u3070\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>\u516c\u5e73\u6027\u3092\u4fdd\u3064\u30dd\u30a4\u30f3\u30c8<\/strong> <br>\u3059\u3079\u3066\u306e\u9805\u76ee\u306e\u9762\u7a4d\uff08\u5f53\u9078\u78ba\u7387\uff09\u306f\u3001\u5165\u529b\u3055\u308c\u305f\u9805\u76ee\u6570\u306b\u5fdc\u3058\u3066\u5747\u7b49\u306b\u5206\u5272\u3055\u308c\u307e\u3059\u3002\u5b8c\u5168\u306b\u904b\u4efb\u305b\u3067\u7269\u4e8b\u3092\u6c7a\u3081\u305f\u3044\u5834\u5408\u3084\u3001\u610f\u56f3\u7684\u306a\u64cd\u4f5c\u3092\u6392\u9664\u3057\u305f\u3044\u5834\u9762\u3067\u4fe1\u983c\u3057\u3066\u5229\u7528\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-2\">\u3053\u306e\u30c4\u30fc\u30eb\u304c\u5f79\u7acb\u3064\u3068\u304d\u306f\u3069\u3093\u306a\u3068\u304d\uff1f<\/h2>\n\n\n\n<p>\u65e5\u5e38\u306e\u4e9b\u7d30\u306a\u6c7a\u65ad\u304b\u3089\u30a4\u30d9\u30f3\u30c8\u306e\u6f14\u51fa\u307e\u3067\u3001\u3055\u307e\u3056\u307e\u306a\u30b7\u30fc\u30f3\u3067\u6d3b\u7528\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>\u65e5\u5e38\u306e\u6c7a\u65ad\u306b<\/strong> <br>\u300c\u4eca\u65e5\u306e\u30e9\u30f3\u30c1\u306f\u4f55\u3092\u98df\u3079\u308b\uff1f\u300d\u300c\u6b21\u306e\u65c5\u884c\u5148\u306f\u3069\u3053\u306b\u3059\u308b\uff1f\u300d\u300c\u6383\u9664\u5f53\u756a\u306f\u8ab0\uff1f\u300d\u306a\u3069\u3001\u8a71\u3057\u5408\u3044\u3067\u6c7a\u307e\u3089\u306a\u3044\u3068\u304d\u306e\u89e3\u6c7a\u7b56\u3068\u3057\u3066\u3002<\/p>\n\n\n\n<p><strong>\u30b2\u30fc\u30e0\u3084\u30a8\u30f3\u30bf\u30e1\u306b<\/strong> <br>\u300c\u738b\u69d8\u30b2\u30fc\u30e0\u306e\u547d\u4ee4\u5185\u5bb9\u300d\u300c\u7f70\u30b2\u30fc\u30e0\u306e\u62bd\u9078\u300d\u300cTRPG\u306e\u30e9\u30f3\u30c0\u30e0\u30a4\u30d9\u30f3\u30c8\u6c7a\u5b9a\u300d\u306a\u3069\u3001\u30d1\u30fc\u30c6\u30a3\u30fc\u3084\u904a\u3073\u306e\u76db\u308a\u4e0a\u3052\u5f79\u3068\u3057\u3066\u3002<\/p>\n\n\n\n<p><strong>\u30d3\u30b8\u30cd\u30b9\u3084\u5b66\u6821\u3067<\/strong> <br>\u300c\u30d7\u30ec\u30bc\u30f3\u306e\u767a\u8868\u9806\u300d\u300c\u30b0\u30eb\u30fc\u30d7\u5206\u3051\u300d\u300c\u5ea7\u5e2d\u306e\u6c7a\u5b9a\u300d\u306a\u3069\u3001\u516c\u5e73\u6027\u304c\u6c42\u3081\u3089\u308c\u308b\u5834\u9762\u3067\u306e\u62bd\u9078\u30c4\u30fc\u30eb\u3068\u3057\u3066\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-3\">\u4f7f\u3044\u65b9\u306e\u30d2\u30f3\u30c8\u3068\u30ab\u30b9\u30bf\u30de\u30a4\u30ba<\/h2>\n\n\n\n<p><strong>\u9805\u76ee\u306e\u5165\u529b\u65b9\u6cd5<\/strong> <br>\u5165\u529b\u6b04\u306b\u9078\u629e\u80a2\u30921\u884c\u306b1\u3064\u305a\u3064\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u6539\u884c\u3059\u308b\u3053\u3068\u3067\u65b0\u3057\u3044\u9805\u76ee\u3068\u3057\u3066\u8a8d\u8b58\u3055\u308c\u307e\u3059\u3002\u9805\u76ee\u304c\u5897\u3048\u3059\u304e\u3066\u6587\u5b57\u304c\u8aad\u307f\u3065\u3089\u3044\u5834\u5408\u306f\u3001\u30b9\u30e9\u30a4\u30c0\u30fc\u3092\u64cd\u4f5c\u3057\u3066\u6587\u5b57\u30b5\u30a4\u30ba\u3092\u8abf\u6574\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>\u30aa\u30f3\u30e9\u30a4\u30f3\u98f2\u307f\u4f1a\u3084\u914d\u4fe1\u3067\u306e\u6d3b\u7528<\/strong> <br>\u3053\u306e\u30c4\u30fc\u30eb\u306f\u5168\u753b\u9762\u3067\u306e\u8996\u8a8d\u6027\u3092\u8003\u616e\u3057\u3066\u8a2d\u8a08\u3055\u308c\u3066\u3044\u307e\u3059\u3002Zoom\u3084Discord\u306a\u3069\u3067\u753b\u9762\u5171\u6709\u3092\u884c\u3044\u306a\u304c\u3089\u30eb\u30fc\u30ec\u30c3\u30c8\u3092\u56de\u305b\u3070\u3001\u30ea\u30e2\u30fc\u30c8\u74b0\u5883\u3067\u3082\u81e8\u5834\u611f\u306e\u3042\u308b\u62bd\u9078\u4f1a\u3092\u697d\u3057\u3080\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n<p><\/p><h2 id=\"i-4\">\u30e9\u30a4\u30d6\u914d\u4fe1\u7b49\u3067\u306e\u3054\u5229\u7528\u306b\u3064\u3044\u3066<\/h2>\n<p>\u30e9\u30a4\u30d6\u914d\u4fe1\u7b49\u3067\u5f53\u30c4\u30fc\u30eb\u3092\u3054\u5229\u7528\u3044\u305f\u3060\u304f\u5834\u5408\u3001\u4ee5\u4e0b\u306e\u3044\u305a\u308c\u304b1\u3064\u3092\u6e80\u305f\u3057\u3066\u3044\u305f\u3060\u3051\u308c\u3070\u3001\u4e8b\u524d\u306e\u8a31\u53ef\u3084\u7533\u8acb\u306a\u304f\u3054\u5229\u7528\u3044\u305f\u3060\u3051\u307e\u3059\u3002<\/p>\n<ul>\n\t<li>\u914d\u4fe1\u753b\u9762\u4e0a\u306b\u30b5\u30a4\u30c8\u540d\uff08\u30e9\u30c3\u30b3\u624b\u5e33\uff09\u306e\u30af\u30ec\u30b8\u30c3\u30c8\u3092\u8868\u8a18\u3059\u308b<\/li>\n\t<li>\u914d\u4fe1\u753b\u9762\u4e0a\u306b\u5f53\u30b5\u30a4\u30c8\u306e\u30ed\u30b4\u304c\u6620\u308b\u3088\u3046\u306b\u3059\u308b<\/li>\n\t<li>\u914d\u4fe1\u3084\u52d5\u753b\u306e\u6982\u8981\u6b04\u306b\u5f53\u30b5\u30a4\u30c8\u306eURL\u3092\u8a18\u308b<\/li>\n\t<li>\u914d\u4fe1\u4e2d\u3001\u300c\u30e9\u30c3\u30b3\u624b\u5e33\u306e\u3007\u3007\u30c4\u30fc\u30eb\u3092\u4f7f\u3063\u3066\u3044\u308b\u300d\u306a\u3069\u3001\u30b5\u30a4\u30c8\u540d\u30fb\u30c4\u30fc\u30eb\u540d\u304c\u308f\u304b\u308b\u3088\u3046\u767a\u8a00\u3044\u305f\u3060\u304f<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>\u56de\u3059 \ud83d\udcdd \u9805\u76ee\u5165\u529b\uff08\u6539\u884c\u533a\u5207\u308a\uff09 1 2 3 4 5 6 \u30eb\u30fc\u30ec\u30c3\u30c8\u5185\u306e\u6587\u5b57\u30b5\u30a4\u30ba 18px \ud83d\udccb \u30d7\u30ea\u30bb\u30c3\u30c8 \u4e8c\u629e \u30b5\u30a4\u30b3\u30ed \u3058\u3083\u3093\u3051\u3093 \u3042\u307f\u3060\u304f\u3058 \u66dc\u65e5 \u65b9\u89d2 \u8840\u6db2\u578b \u5b63\u7bc0 \u30c8\u30e9\u30f3\u30d7 \u5f53\u756a \u30e9\u30f3\u30c1 \u98f2\u307f\u7269 \u30c7\u30b6\u30fc\u30c8 \u5e2d &#8230; <\/p>\n","protected":false},"author":4,"featured_media":11467,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13,44,39,43],"tags":[],"class_list":{"0":"post-9131","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-tool","8":"category-game","9":"category-life","10":"category-lottery","11":"entry"},"_links":{"self":[{"href":"https:\/\/rakkokeyword.com\/techo\/wp-json\/wp\/v2\/posts\/9131","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rakkokeyword.com\/techo\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rakkokeyword.com\/techo\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rakkokeyword.com\/techo\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/rakkokeyword.com\/techo\/wp-json\/wp\/v2\/comments?post=9131"}],"version-history":[{"count":27,"href":"https:\/\/rakkokeyword.com\/techo\/wp-json\/wp\/v2\/posts\/9131\/revisions"}],"predecessor-version":[{"id":11205,"href":"https:\/\/rakkokeyword.com\/techo\/wp-json\/wp\/v2\/posts\/9131\/revisions\/11205"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/rakkokeyword.com\/techo\/wp-json\/wp\/v2\/media\/11467"}],"wp:attachment":[{"href":"https:\/\/rakkokeyword.com\/techo\/wp-json\/wp\/v2\/media?parent=9131"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rakkokeyword.com\/techo\/wp-json\/wp\/v2\/categories?post=9131"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rakkokeyword.com\/techo\/wp-json\/wp\/v2\/tags?post=9131"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}