べんりワザ・「今も必要?」と迷う道具

jQueryは今も必要?

結論、新しく学ぶ必要はありません。ただし「読める」と得をします。jQueryが解決していたことと、それが今の素のJavaScriptでどう置きかわったか、どこで出会うかを整理しました。

結論から言うと、jQueryを新しく学ぶ必要はありません。ただし読めると得をします。この記事では「なぜ学ばなくていいのか」と「それでも読めたほうがいい理由」を、具体的な対応関係で整理します。

jQueryは何を解決していたのか

2010年前後のWeb制作には、2つの大きな面倒がありました。

  • ブラウザごとに書き方が違った——同じことをするのに、Internet Explorerと他のブラウザで別のコードを書き分ける必要がありました
  • 素のJavaScriptの記述が長かった——要素をまとめて取ってきて全部に処理する、といった当たり前のことに何行もかかりました

jQueryはこの2つを1つの短い書き方に包んでくれました。だから当時は「入れない理由がない」道具でした。

その2つは、もう解決している

今はブラウザ側が同じ書き方をそろえ、素のJavaScriptにも短い書き方が入りました。よく使うものの対応を並べます。

jQuery今の素のJavaScript
$('.card')document.querySelectorAll('.card')
$('#title')document.querySelector('#title')
.text('こんにちは').textContent = 'こんにちは'
.html('<b>太字</b>').innerHTML = '<b>太字</b>'
.addClass('on').classList.add('on')
.removeClass('on').classList.remove('on')
.toggleClass('on').classList.toggle('on')
.on('click', fn).addEventListener('click', fn)
.attr('href', url).setAttribute('href', url)
.css('color', 'red').style.color = 'red'
$.ajax(...)fetch(...)
$(document).ready(fn)script</body>の直前に置く(またはdefer

見てのとおり、やっていることは同じです。名前が違うだけで、覚え直すほどの新しい概念はありません。

コースWebアニメーションCSSで動きをつける方法は、Webアニメーションのコースへ

それでも読めたほうがいい理由

「新規では選ばれない」道具ですが、すでに公開されているサイトでは動き続けています。あなたが出会う可能性が高いのはこの3つです。

  • WordPressのテーマ・プラグイン——WordPress本体がjQueryを同梱しているため、今も広く使われています
  • 数年前に作られたサイトの改修——「ちょっと直してほしい」という仕事は、たいてい既存のコードの上に乗ります
  • ネット上の解説記事——古い記事はjQuery前提で書かれています。読めれば「これは素のJSでこう書けばいい」と読み替えられます

つまり読む力は保守で効き、書く力は要らない。この非対称を知っておくと、学習時間を無駄にしません。

べんりワザjQueryの読み方$()やメソッドチェーンの読み方は、こちらの記事にまとめました

つまずきやすい2つのエラー

既存サイトを触るときに出会いやすいものだけ、先に知っておくと落ち着けます。

$ is not defined

jQuery本体が読みこまれる前に、jQueryを使うコードが動いたという意味です。scriptタグの順番を直します。

<!-- 本体を先に -->
<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
<!-- 自分のコードは後ろに -->
<script src="script.js"></script>

WordPressの場合は、タグの順番ではなく依存の宣言で順番を決めます。

べんりワザCSSとJavaScriptの正しい読みこみ方(wp_enqueue)WordPressでのCSS・JavaScriptの正しい読みこみ方(依存の指定つき)

WordPressで$が使えない

WordPressは他のライブラリと衝突しないよう、$という別名を無効にした状態でjQueryを読みこみます。そのため$('.card')と書くとエラーになります。次の形で囲むと、その中だけで$が使えます。

jQuery(function ($) {
  // この中では $ が使える
  $('.card').addClass('is-ready');
});

これは「jQueryが壊れている」のではなくWordPressの仕様です。既存テーマのコードがこの形で書かれているのを見たら、そういう理由だと思ってください。

使う・使わないの判断

場面どうする
これから学ぶ素のJavaScript。jQueryは飛ばしていい
新しくサイトを作る素のJavaScript。入れる理由がない
既存サイトの改修そのサイトに合わせる。すでに入っているなら素直に使う
WordPressのテーマを触る既存コードがjQueryなら合わせる。新規なら素のJSでよい
古い解説記事を参考にする読み替えて素のJSで書く

いちばん避けたいのは、すでにjQueryで書かれているサイトに素のJavaScriptを混ぜて、書き方が2種類になることです。1つのファイルの中では、そのファイルの流儀にそろえるのが読みやすさの基本です。

まとめ

  1. jQueryが解決していたブラウザ差と記述の長さは、もう解決している
  2. だから新しく学ぶ必要はない。学ぶのは素のJavaScript
  3. ただしWordPressや既存サイトでは動き続けている——読めると保守で困らない
  4. $ is not defined読みこみ順、WordPressで$が使えないのは仕様
  5. 既存サイトを触るときは、そのファイルの流儀にそろえる
コースJavaScript素のJavaScriptを基本から学ぶなら、JavaScriptコースへ

古い道具を知っていることは、遠回りではありません。読めるだけで、触れる仕事の範囲が確実に広がります。

よくある質問

jQueryは今から学ぶ必要がありますか?
新しく学ぶ必要はありません。jQueryが担っていた「ブラウザごとの違いを吸収する」役目はすでに不要になり、短く書く工夫も素のJavaScriptに取りこまれました。ただし既存サイトやWordPressのテーマでは今も動いているので、書けなくても読めると困りません。
jQueryはもう使われていないのですか?
新しく作るサイトで選ばれることはほぼありません。一方で、すでに公開されている大量のサイトでは動き続けています。つまり「新規では選ばれないが、保守では出会う」という位置です。
$ is not defined というエラーが出ます
jQuery本体が読みこまれる前に、jQueryを使うコードが動いてしまっています。自分のコードのscriptタグを、jQuery本体のscriptタグより後ろに置いてください。WordPressの場合はwp_enqueue_scriptの依存指定で順番を決めます。
WordPressでjQueryを使うとき、$が使えません
WordPressは他のライブラリとの衝突を避けるため、$の別名を無効にした状態でjQueryを読みこみます。jQuery(function ($) { ... }); のように囲むと、その中だけで$が使えるようになります。