Claude 4 Sonnetのコーディング能力を試す 10


Claude 4 が話題を呼んでいる.今回はスライド形式での勉強サイトを作成してみた.

すると,スライドとしてある程度まとまったものができた.簡易的なものでよければこのスライドで説明も可能かもしれない.

プロンプトは下記.

次の内容を学べるようにわかりやすくスライドに整理した動的なwebページを作成.
エラーが出ないように自己点検して.
 一切の遠慮は不要です!!最高品質を追い求めて.
---
ノーベル・チョムスキーの生成文法は、20世紀言語学に革命をもたらし、その理論は『文法の構造』における初期生成文法から、最新のミニマリスト・プログラムに至るまで、絶え間ない変遷を遂げてきました。
初期生成文法(1957年)では、句構造規則と変換規則を導入し、無限の文を生成する言語の創造性を説明しました。人間の生得的な言語能力である普遍文法(UG)の萌芽が見られます。
---
標準理論(1965年)では、深層構造と表層構造を区別し、深層構造が意味解釈の基盤となるとしました。統語・意味・音韻部門を統合したモデルを提示しましたが、変換の意味保存性に関する課題を残しました。
---
拡大標準理論(1970年代)では、表層構造の意味解釈における役割を増大させ、Xバー理論による句構造の一般化と、変換への制約(時制文条件など)を導入しました。痕跡理論により、移動と意味解釈の整合性を図りました。
---
統率・束縛理論(GB理論、1981年)は、普遍的な「原理」と個別言語の「パラメータ」からなるモジュール理論として発展しました。シータ理論、格理論、束縛理論など複数の下位理論を統合し、言語獲得の解明を目指しました。
---
ミニマリスト・プログラム(1995年)は、GB理論の複雑性を排し、理論の経済性と最適性を追求しました。D構造やS構造などを排除し、「併合」と「一致」という少数の基本操作、素性照合、フェイズ理論を中心に、言語能力が最も効率的な方法で設計されているという「完璧な設計」の仮説を探求しています。
---
チョムスキーの生成文法は、常に「刺激の貧困」という言語獲得の謎と「説明的妥当性」の追求を原動力として、普遍文法の概念を深化させながら進化してきました。その理論的変遷は、形式的厳密性と概念的探求が織りなす科学的ダイナミズムを示しており、現代言語学および認知科学に多大な影響を与え続けています。
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>チョムスキー生成文法の変遷</title>
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        body {
            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            color: #333;
            overflow: hidden;
            height: 100vh;
        }

        .container {
            display: flex;
            height: 100vh;
            position: relative;
        }

        .sidebar {
            width: 280px;
            background: rgba(255, 255, 255, 0.95);
            backdrop-filter: blur(10px);
            padding: 20px;
            box-shadow: 2px 0 20px rgba(0,0,0,0.1);
            overflow-y: auto;
            z-index: 100;
        }

        .sidebar h2 {
            color: #4a5568;
            margin-bottom: 20px;
            font-size: 1.2em;
            border-bottom: 2px solid #667eea;
            padding-bottom: 10px;
        }

        .slide-nav {
            list-style: none;
        }

        .slide-nav li {
            margin-bottom: 10px;
            padding: 12px 15px;
            background: #f7fafc;
            border-radius: 8px;
            cursor: pointer;
            transition: all 0.3s ease;
            border-left: 4px solid transparent;
        }

        .slide-nav li:hover {
            background: #e2e8f0;
            transform: translateX(5px);
        }

        .slide-nav li.active {
            background: #667eea;
            color: white;
            border-left-color: #4c51bf;
            box-shadow: 0 4px 12px rgba(102, 126, 234, 0.3);
        }

        .slide-nav li span {
            font-size: 0.9em;
            font-weight: 600;
        }

        .main-content {
            flex: 1;
            display: flex;
            align-items: center;
            justify-content: center;
            padding: 40px;
            position: relative;
        }

        .slide {
            display: none;
            background: rgba(255, 255, 255, 0.95);
            backdrop-filter: blur(15px);
            padding: 60px;
            border-radius: 20px;
            box-shadow: 0 20px 40px rgba(0,0,0,0.1);
            max-width: 900px;
            width: 100%;
            animation: slideIn 0.6s ease-out;
            position: relative;
            overflow: hidden;
        }

        .slide.active {
            display: block;
        }

        .slide::before {
            content: '';
            position: absolute;
            top: 0;
            left: 0;
            right: 0;
            height: 4px;
            background: linear-gradient(90deg, #667eea, #764ba2);
        }

        .slide h1 {
            font-size: 2.5em;
            color: #2d3748;
            margin-bottom: 30px;
            text-align: center;
            position: relative;
        }

        .slide h2 {
            font-size: 2em;
            color: #4a5568;
            margin-bottom: 25px;
            border-bottom: 3px solid #667eea;
            padding-bottom: 15px;
            display: flex;
            align-items: center;
        }

        .slide h2::before {
            content: '';
            width: 8px;
            height: 8px;
            background: #667eea;
            border-radius: 50%;
            margin-right: 15px;
            box-shadow: 0 0 10px rgba(102, 126, 234, 0.5);
        }

        .slide p {
            font-size: 1.1em;
            line-height: 1.8;
            color: #4a5568;
            margin-bottom: 20px;
            text-align: justify;
        }

        .slide ul {
            margin-left: 20px;
            margin-bottom: 20px;
        }

        .slide li {
            font-size: 1.05em;
            line-height: 1.7;
            color: #4a5568;
            margin-bottom: 12px;
            position: relative;
            padding-left: 10px;
        }

        .slide li::before {
            content: '▸';
            color: #667eea;
            font-weight: bold;
            position: absolute;
            left: -15px;
        }

        .controls {
            position: absolute;
            bottom: 30px;
            right: 30px;
            display: flex;
            gap: 15px;
        }

        .btn {
            padding: 12px 20px;
            background: #667eea;
            color: white;
            border: none;
            border-radius: 25px;
            cursor: pointer;
            font-size: 1em;
            transition: all 0.3s ease;
            box-shadow: 0 4px 15px rgba(102, 126, 234, 0.3);
        }

        .btn:hover {
            background: #5a67d8;
            transform: translateY(-2px);
            box-shadow: 0 6px 20px rgba(102, 126, 234, 0.4);
        }

        .btn:disabled {
            opacity: 0.5;
            cursor: not-allowed;
            transform: none;
        }

        .progress-bar {
            position: absolute;
            bottom: 0;
            left: 0;
            height: 4px;
            background: #667eea;
            transition: width 0.3s ease;
        }

        .timeline {
            display: flex;
            justify-content: space-between;
            align-items: center;
            margin: 30px 0;
            padding: 20px 0;
            border-top: 2px solid #e2e8f0;
            border-bottom: 2px solid #e2e8f0;
        }

        .timeline-item {
            text-align: center;
            flex: 1;
            position: relative;
        }

        .timeline-item::after {
            content: '';
            position: absolute;
            top: 50%;
            right: -50%;
            width: 100%;
            height: 2px;
            background: #e2e8f0;
            z-index: -1;
        }

        .timeline-item:last-child::after {
            display: none;
        }

        .timeline-year {
            background: #667eea;
            color: white;
            padding: 8px 16px;
            border-radius: 20px;
            font-weight: bold;
            margin-bottom: 8px;
            display: inline-block;
        }

        .timeline-theory {
            font-size: 0.9em;
            color: #4a5568;
        }

        .key-concepts {
            background: #f7fafc;
            padding: 20px;
            border-radius: 10px;
            margin: 20px 0;
            border-left: 4px solid #667eea;
        }

        .key-concepts h3 {
            color: #4a5568;
            margin-bottom: 15px;
            font-size: 1.2em;
        }

        .concept-tag {
            display: inline-block;
            background: #667eea;
            color: white;
            padding: 6px 12px;
            border-radius: 15px;
            font-size: 0.9em;
            margin: 4px;
            transition: transform 0.2s ease;
        }

        .concept-tag:hover {
            transform: scale(1.05);
        }

        @keyframes slideIn {
            from {
                opacity: 0;
                transform: translateY(30px);
            }
            to {
                opacity: 1;
                transform: translateY(0);
            }
        }

        @keyframes pulse {
            0%, 100% { transform: scale(1); }
            50% { transform: scale(1.05); }
        }

        .highlight {
            background: linear-gradient(120deg, #ffd89b 0%, #19547b 100%);
            -webkit-background-clip: text;
            -webkit-text-fill-color: transparent;
            background-clip: text;
            font-weight: bold;
        }

        .slide-counter {
            position: absolute;
            top: 30px;
            right: 30px;
            background: rgba(255, 255, 255, 0.9);
            padding: 10px 15px;
            border-radius: 20px;
            font-weight: bold;
            color: #4a5568;
        }

        @media (max-width: 768px) {
            .sidebar {
                width: 100%;
                height: auto;
                position: absolute;
                top: 0;
                left: -100%;
                transition: left 0.3s ease;
            }

            .sidebar.open {
                left: 0;
            }

            .main-content {
                padding: 20px;
            }

            .slide {
                padding: 30px;
            }

            .slide h1 {
                font-size: 2em;
            }

            .slide h2 {
                font-size: 1.5em;
            }
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="sidebar">
            <h2>📚 目次</h2>
            <ul class="slide-nav">
                <li data-slide="0" class="active">
                    <span>生成文法の概要</span>
                </li>
                <li data-slide="1">
                    <span>初期生成文法 (1957)</span>
                </li>
                <li data-slide="2">
                    <span>標準理論 (1965)</span>
                </li>
                <li data-slide="3">
                    <span>拡大標準理論 (1970s)</span>
                </li>
                <li data-slide="4">
                    <span>統率・束縛理論 (1981)</span>
                </li>
                <li data-slide="5">
                    <span>ミニマリスト・プログラム (1995)</span>
                </li>
                <li data-slide="6">
                    <span>理論の意義と影響</span>
                </li>
            </ul>
        </div>

        <div class="main-content">
            <div class="slide-counter">
                <span id="current-slide">1</span> / <span id="total-slides">7</span>
            </div>

            <div class="slide active" data-slide="0">
                <h1>🧠 チョムスキー生成文法の変遷</h1>
                <p>ノーベル・チョムスキーの生成文法は、20世紀言語学に革命をもたらした理論体系です。</p>
                
                <div class="timeline">
                    <div class="timeline-item">
                        <div class="timeline-year">1957</div>
                        <div class="timeline-theory">初期生成文法</div>
                    </div>
                    <div class="timeline-item">
                        <div class="timeline-year">1965</div>
                        <div class="timeline-theory">標準理論</div>
                    </div>
                    <div class="timeline-item">
                        <div class="timeline-year">1970s</div>
                        <div class="timeline-theory">拡大標準理論</div>
                    </div>
                    <div class="timeline-item">
                        <div class="timeline-year">1981</div>
                        <div class="timeline-theory">GB理論</div>
                    </div>
                    <div class="timeline-item">
                        <div class="timeline-year">1995</div>
                        <div class="timeline-theory">ミニマリスト</div>
                    </div>
                </div>

                <p>『文法の構造』における初期生成文法から、最新のミニマリスト・プログラムに至るまで、<span class="highlight">絶え間ない変遷</span>を遂げてきました。</p>
                
                <div class="key-concepts">
                    <h3>🎯 核心概念</h3>
                    <span class="concept-tag">普遍文法 (UG)</span>
                    <span class="concept-tag">言語の創造性</span>
                    <span class="concept-tag">刺激の貧困</span>
                    <span class="concept-tag">説明的妥当性</span>
                </div>
            </div>

            <div class="slide" data-slide="1">
                <h2>🌱 初期生成文法 (1957)</h2>
                <p><strong>『文法の構造』</strong>で発表された革命的理論です。</p>
                
                <div class="key-concepts">
                    <h3>🔑 主要な革新</h3>
                    <ul>
                        <li><strong>句構造規則</strong>:文の階層構造を形式化</li>
                        <li><strong>変換規則</strong>:構造間の関係性を説明</li>
                        <li><strong>言語の創造性</strong>:無限の文を生成する能力の解明</li>
                        <li><strong>普遍文法の萌芽</strong>:人間の生得的言語能力の概念</li>
                    </ul>
                </div>

                <p>この理論は、従来の構造主義言語学では説明できなかった<span class="highlight">言語の創造性</span>を形式的に説明することに成功しました。</p>

                <div class="key-concepts">
                    <h3>💡 理論的意義</h3>
                    <span class="concept-tag">形式文法</span>
                    <span class="concept-tag">生成能力</span>
                    <span class="concept-tag">統語理論</span>
                </div>
            </div>

            <div class="slide" data-slide="2">
                <h2>📊 標準理論 (1965)</h2>
                <p><strong>『統語理論の諸相』</strong>で体系化された理論モデルです。</p>

                <div class="key-concepts">
                    <h3>🏗️ 構造の区別</h3>
                    <ul>
                        <li><strong>深層構造</strong>:意味解釈の基盤となる抽象的構造</li>
                        <li><strong>表層構造</strong>:実際に発音される表面的構造</li>
                        <li><strong>変換規則</strong>:深層構造から表層構造への変換</li>
                    </ul>
                </div>

                <p>統語・意味・音韻の<span class="highlight">三部門統合モデル</span>を提示し、言語の包括的な記述を目指しました。</p>

                <div class="key-concepts">
                    <h3>⚠️ 理論的課題</h3>
                    <ul>
                        <li>変換の意味保存性に関する問題</li>
                        <li>深層構造の心理的実在性への疑問</li>
                        <li>意味解釈の複雑化</li>
                    </ul>
                </div>

                <div class="key-concepts">
                    <h3>🎯 核心概念</h3>
                    <span class="concept-tag">深層構造</span>
                    <span class="concept-tag">表層構造</span>
                    <span class="concept-tag">変換文法</span>
                </div>
            </div>

            <div class="slide" data-slide="3">
                <h2>🔄 拡大標準理論 (1970年代)</h2>
                <p>標準理論の問題点を修正し、理論をより洗練化しました。</p>

                <div class="key-concepts">
                    <h3>🎯 主要な改革</h3>
                    <ul>
                        <li><strong>表層構造の意味解釈</strong>:意味解釈における役割の増大</li>
                        <li><strong>Xバー理論</strong>:句構造の一般化と統一</li>
                        <li><strong>変換制約</strong>:時制文条件などの制約の導入</li>
                        <li><strong>痕跡理論</strong>:移動と意味解釈の整合性</li>
                    </ul>
                </div>

                <p><span class="highlight">Xバー理論</span>により、すべての句構造が統一的な原理で説明可能になりました。</p>

                <div class="key-concepts">
                    <h3>🔧 技術的革新</h3>
                    <span class="concept-tag">Xバー理論</span>
                    <span class="concept-tag">痕跡理論</span>
                    <span class="concept-tag">時制文条件</span>
                    <span class="concept-tag">島の制約</span>
                </div>

                <p>これらの革新により、言語の<strong>形式的記述</strong>がより精密になり、普遍文法の概念がさらに具体化されました。</p>
            </div>

            <div class="slide" data-slide="4">
                <h2>🎯 統率・束縛理論 (GB理論, 1981)</h2>
                <p><strong>『統率・束縛理論の講義』</strong>で体系化されたモジュール理論です。</p>

                <div class="key-concepts">
                    <h3>🧩 理論の構成</h3>
                    <ul>
                        <li><strong>原理とパラメータ</strong>:普遍的原理と個別言語の変異</li>
                        <li><strong>シータ理論</strong>:意味役割の割り当て</li>
                        <li><strong>格理論</strong>:名詞句の格付与</li>
                        <li><strong>束縛理論</strong>:照応関係の制約</li>
                        <li><strong>統率理論</strong>:統語関係の定義</li>
                    </ul>
                </div>

                <p><span class="highlight">原理とパラメータ</span>のアプローチにより、言語獲得の謎である「刺激の貧困」問題に対する解答を提示しました。</p>

                <div class="key-concepts">
                    <h3>🌍 言語獲得の解明</h3>
                    <ul>
                        <li>子どもがなぜ短期間で言語を習得できるのか</li>
                        <li>限られた入力から豊かな知識をどう獲得するのか</li>
                        <li>言語間の共通性と変異をどう説明するのか</li>
                    </ul>
                </div>

                <div class="key-concepts">
                    <h3>🎯 核心概念</h3>
                    <span class="concept-tag">原理とパラメータ</span>
                    <span class="concept-tag">モジュール性</span>
                    <span class="concept-tag">刺激の貧困</span>
                </div>
            </div>

            <div class="slide" data-slide="5">
                <h2>⚡ ミニマリスト・プログラム (1995)</h2>
                <p>GB理論の複雑性を排し、<strong>理論の経済性と最適性</strong>を追求した最新理論です。</p>

                <div class="key-concepts">
                    <h3>🔬 理論の簡素化</h3>
                    <ul>
                        <li><strong>構造レベルの削減</strong>:D構造、S構造の廃止</li>
                        <li><strong>基本操作の最小化</strong>:併合(Merge)と一致(Agree)</li>
                        <li><strong>素性照合</strong>:解釈可能素性と解釈不可能素性</li>
                        <li><strong>フェイズ理論</strong>:計算の局所性の原理</li>
                    </ul>
                </div>

                <p><span class="highlight">「完璧な設計」</span>の仮説:言語能力が最も効率的な方法で設計されているという革命的な考え方です。</p>

                <div class="key-concepts">
                    <h3>🎯 設計原理</h3>
                    <ul>
                        <li><strong>最小化の原理</strong>:必要最小限の操作と表示</li>
                        <li><strong>効率性の追求</strong>:計算コストの最小化</li>
                        <li><strong>インターフェース条件</strong>:外部システムとの整合性</li>
                    </ul>
                </div>

                <div class="key-concepts">
                    <h3>🚀 革新的概念</h3>
                    <span class="concept-tag">併合 (Merge)</span>
                    <span class="concept-tag">一致 (Agree)</span>
                    <span class="concept-tag">フェイズ</span>
                    <span class="concept-tag">完璧な設計</span>
                </div>
            </div>

            <div class="slide" data-slide="6">
                <h2>🌟 理論の意義と現代への影響</h2>
                <p>チョムスキーの生成文法は、言語学を超えて<strong>認知科学全体</strong>に革命をもたらしました。</p>

                <div class="key-concepts">
                    <h3>🎯 一貫した探求テーマ</h3>
                    <ul>
                        <li><strong>「刺激の貧困」</strong>:言語獲得の根本的謎の解明</li>
                        <li><strong>「説明的妥当性」</strong>:なぜ人間だけが言語を持つのか</li>
                        <li><strong>普遍文法の深化</strong>:人間の生得的言語能力の本質</li>
                    </ul>
                </div>

                <div class="key-concepts">
                    <h3>🔬 科学的ダイナミズム</h3>
                    <p>形式的厳密性と概念的探求が織りなす理論的進化の軌跡は、現代科学の模範となっています。</p>
                </div>

                <div class="key-concepts">
                    <h3>🌍 学際的影響</h3>
                    <span class="concept-tag">心理学</span>
                    <span class="concept-tag">哲学</span>
                    <span class="concept-tag">コンピュータ科学</span>
                    <span class="concept-tag">神経科学</span>
                    <span class="concept-tag">人工知能</span>
                </div>

                <p>現在も進化を続ける生成文法は、<span class="highlight">人間の心の本質</span>を探求する科学的プロジェクトとして、未来への道筋を示し続けています。</p>
            </div>

            <div class="controls">
                <button class="btn" id="prevBtn">← 前へ</button>
                <button class="btn" id="nextBtn">次へ →</button>
            </div>

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

    <script>
        class SlidePresentation {
            constructor() {
                this.currentSlide = 0;
                this.totalSlides = document.querySelectorAll('.slide').length;
                this.slides = document.querySelectorAll('.slide');
                this.navItems = document.querySelectorAll('.slide-nav li');
                this.prevBtn = document.getElementById('prevBtn');
                this.nextBtn = document.getElementById('nextBtn');
                this.progressBar = document.getElementById('progressBar');
                this.currentSlideSpan = document.getElementById('current-slide');
                this.totalSlidesSpan = document.getElementById('total-slides');
                
                this.init();
            }

            init() {
                this.updateSlide();
                this.bindEvents();
                this.updateProgress();
                this.totalSlidesSpan.textContent = this.totalSlides;
            }

            bindEvents() {
                // ナビゲーションクリック
                this.navItems.forEach((item, index) => {
                    item.addEventListener('click', () => {
                        this.goToSlide(index);
                    });
                });

                // ボタンクリック
                this.prevBtn.addEventListener('click', () => {
                    this.previousSlide();
                });

                this.nextBtn.addEventListener('click', () => {
                    this.nextSlide();
                });

                // キーボードナビゲーション
                document.addEventListener('keydown', (e) => {
                    switch(e.key) {
                        case 'ArrowLeft':
                        case 'ArrowUp':
                            e.preventDefault();
                            this.previousSlide();
                            break;
                        case 'ArrowRight':
                        case 'ArrowDown':
                        case ' ':
                            e.preventDefault();
                            this.nextSlide();
                            break;
                        case 'Home':
                            e.preventDefault();
                            this.goToSlide(0);
                            break;
                        case 'End':
                            e.preventDefault();
                            this.goToSlide(this.totalSlides - 1);
                            break;
                    }
                });

                // タッチ操作(スワイプ)
                let startX = 0;
                let startY = 0;
                
                document.addEventListener('touchstart', (e) => {
                    startX = e.touches[0].clientX;
                    startY = e.touches[0].clientY;
                });

                document.addEventListener('touchend', (e) => {
                    if (!startX || !startY) return;
                    
                    const endX = e.changedTouches[0].clientX;
                    const endY = e.changedTouches[0].clientY;
                    
                    const diffX = startX - endX;
                    const diffY = startY - endY;
                    
                    if (Math.abs(diffX) > Math.abs(diffY)) {
                        if (Math.abs(diffX) > 50) {
                            if (diffX > 0) {
                                this.nextSlide();
                            } else {
                                this.previousSlide();
                            }
                        }
                    }
                    
                    startX = 0;
                    startY = 0;
                });
            }

            updateSlide() {
                // スライドの表示切り替え
                this.slides.forEach((slide, index) => {
                    slide.classList.toggle('active', index === this.currentSlide);
                });

                // ナビゲーションの更新
                this.navItems.forEach((item, index) => {
                    item.classList.toggle('active', index === this.currentSlide);
                });

                // ボタンの状態更新
                this.prevBtn.disabled = this.currentSlide === 0;
                this.nextBtn.disabled = this.currentSlide === this.totalSlides - 1;

                // スライド番号の更新
                this.currentSlideSpan.textContent = this.currentSlide + 1;

                // プログレスバーの更新
                this.updateProgress();
            }

            updateProgress() {
                const progress = ((this.currentSlide + 1) / this.totalSlides) * 100;
                this.progressBar.style.width = `${progress}%`;
            }

            goToSlide(index) {
                if (index >= 0 && index < this.totalSlides) {
                    this.currentSlide = index;
                    this.updateSlide();
                }
            }

            nextSlide() {
                if (this.currentSlide < this.totalSlides - 1) {
                    this.currentSlide++;
                    this.updateSlide();
                }
            }

            previousSlide() {
                if (this.currentSlide > 0) {
                    this.currentSlide--;
                    this.updateSlide();
                }
            }
        }

        // アプリケーション初期化
        document.addEventListener('DOMContentLoaded', () => {
            new SlidePresentation();
        });

        // パフォーマンス最適化
        window.addEventListener('load', () => {
            // 画像の遅延読み込み
            const images = document.querySelectorAll('img[data-src]');
            const imageObserver = new IntersectionObserver((entries, observer) => {
                entries.forEach(entry => {
                    if (entry.isIntersecting) {
                        const img = entry.target;
                        img.src = img.dataset.src;
                        img.removeAttribute('data-src');
                        observer.unobserve(img);
                    }
                });
            });

            images.forEach(img => imageObserver.observe(img));

            // アニメーション効果の追加
            const observeElements = document.querySelectorAll('.key-concepts, .timeline-item');
            const elementObserver = new IntersectionObserver((entries) => {
                entries.forEach(entry => {
                    if (entry.isIntersecting) {
                        entry.target.style.animation = 'slideIn 0.6s ease-out';
                    }
                });
            });

            observeElements.forEach(el => elementObserver.observe(el));
        });

        // エラーハンドリング
        window.addEventListener('error', (e) => {
            console.error('アプリケーションエラー:', e.error);
        });

        // サービスワーカー登録(オフライン対応)
        if ('serviceWorker' in navigator) {
            window.addEventListener('load', () => {
                navigator.serviceWorker.register('/sw.js')
                    .then(registration => {
                        console.log('SW registered: ', registration);
                    })
                    .catch(registrationError => {
                        console.log('SW registration failed: ', registrationError);
                    });
            });
        }
    </script>
</body>
</html>

参考文献

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です