はじめに
作成したWebアプリをGitHub Pagesに公開したら、突然動かなくなってパニックになった経験を共有します。同じ問題で困っている方の助けになれば嬉しいです!
問題発生:完璧だったはずが...
自分のパソコンでは完璧に動いていたおこづかい管理アプリ。ボタンもクリックできるし、機能も全部OK。「よし、GitHub Pagesで公開だ!」と意気込んでアップロードしたところ...
Uncaught ReferenceError: switchMode is not defined
え?switchModeって何?そんな関数作ってないよ?
いや、待って。確実に作ってる。ローカルでは動いてるもん。
犯人は「読み込み速度の差」だった
調べてみると、原因は意外なところにありました。
ローカル環境の場合
- ファイルが手元にある → 瞬時に読み込み完了
- HTMLもJavaScriptも同じタイミングで準備完了
GitHub Pagesの場合
- ファイルをネットから取得 → 時間がかかる
- HTMLの途中でJavaScriptが動き始める
- 「ボタンどこ?」状態で関数が見つからない
つまり、ローカルでは偶然うまくいってただけだったんです。
解決法:たった6文字追加するだけ
解決方法は拍子抜けするほど簡単でした。
変更前
<script src="script.js"></script>
変更後
<script src="script.js" defer></script>
たったこれだけ!
defer属性を追加すると「HTML全部読み込んでからJavaScript動かして」という指示になります。
なぜdeferで解決するのか?
お弁当作りで例えると:
問題があった時
- 「料理開始!」(JavaScript実行)
- 「あれ?材料がない...」(ボタンがまだ作られてない)
- 失敗😭
defer後
- 「材料全部揃ったよ」(HTML読み込み完了)
- 「よし、料理開始!」(JavaScript実行)
- 成功😊
学んだこと
- ローカルで動く ≠ 本番で動く
- 基礎知識って本当に大事
- エラーメッセージは敵じゃない、味方
まとめ
同じ問題で困っている方、とりあえずdeferを試してみてください。90%の確率で解決すると思います!
こういう小さなつまずきがたくさんあるけど、一つずつクリアしていくのが楽しいですね。
この記事が役に立ったら、同じ問題で困っている人にシェアしてもらえると嬉しいです!