Development

🍩Vanilla JSにこだわっおいた自分がjQueryに救われた話

はじめに☕

“モダン”なJavaScriptず蚀うず、”React”や”Vue”, “Angular”などを思い浮かべる方が倚いず思いたす。しかし、モダンな朮流に逆らうかのように、本蚘事ではjQueryをテヌマに取り䞊げたす。

※匊瀟では、WordPressなどのプロダクトでjQueryを利甚しおいたすが、基本的に新芏開発ではReact + TypeScriptで開発されおおり、Vueが䜿甚されおいるプロダクトもありたす

私はフロント゚ンドチヌム所属の新卒䞀幎目です。jQueryには偏芋を持っおいたした今でも少しはありたす 。特に深い理由があったわけではなく、蚘事や情報に圱響され、既存のコヌドで「$」が目に入るず、違和感を芚えたした。「$」はjQueryで䜿われる蚘法です

たた、担圓しおいるプロゞェクトのREADMEに「できる限りjQueryは䜿わない」ず蚘茉したこずが、埌に自分を苊しめるこずになりたした 。

jQueryずは🧀

いわずもがな、JavaScriptのラむブラリでありたしお、JavaScriptをより容易に蚘述できるように蚭蚈されたラむブラリ1だそうです。(2006幎にリリヌスされたずのこずで、20幎匱ほど経った今でも倚くのWebサむトで甚いられおいるのは驚きです

ちなみに、WordPressにはデフォルトでjQueryが組み蟌たれおいるそうです。䞖界䞭のサむトの2぀に1぀はWordPressで構築されおいるなんおいうのを聞きたすが、WebサむトにはjQueryの存圚が䞍可欠ずいっおも過蚀ではないようです。

Vanilla JS2ずは🍊

玠のJavaScriptのこずです。恐らくはブラりザに甚意されたAPIのみで曞いたJSのこずだず思いたす。

ラむブラリを読み蟌んだりする必芁がないので、圓たり前ですが軜量です

Vanilla JS の匱点🥲

䞀人で勝手にVanilla JS瞛りをしおいた私ですが、曞いおいる際にあるこずに気が付きたす。

「読みづらい、分かりづらい」

Vanilla JSを甚いた開発で倧きなネックずなるのが、恐らく分かりづらさだず個人的には思いたす。自分の曞いたコヌドが埌から読めなくなる珟象が、特にこのVanilla JSで倚いように感じたす。

Reactやその他ラむブラリはロゞックずUIが分離されお開発できるこずが倚く、Vanilla JSず比范するずずおもわかりやすいず思いたす。

たた、Vanilla JSは䞊蚘の点に加えお、工数もかかるず思いたす…

実際に、ボタンを抌したらその䞋にある芁玠が衚瀺・非衚瀺されるずいう実装の堎合、以䞋のようになりたす。

条件を分岐しおいたすが、クラス名を付䞎する、しないのようなtoggleメ゜ッドを甚いたらもう少し簡玠に曞けたす。

// ボタン芁玠を党お取埗(querySelectorだず最初の䞀぀しか取れおこない)
const buttons = document.querySelectorAll(".button");

// 取れおきた芁玠党おに察しおむベントリスナヌを远加する凊理
buttons.forEach((button) => {
  button.addEventListener("click", () => {
    const fruit = button.nextElementSibling;
    const fruitStyle = fruit.style.display;
    fruitStyle = fruitStyle === "none" || "" ? "block" : "none";
  });
});

このようにVanilla JSのみで曞くず少々耇雑になりたす。この皋床の蚘述ですず問題ないですが、他のDOM操䜜が加わったりすれば1぀のファむルでかなり煩雑なコヌドができあがりたす※JSDoc3などを掻甚すればある皋床は敎理できるず思いたす

そしお、これず党く同じではないですがほずんど同じものをjQueryで蚘述するず以䞋のようになりたす。

$(".button").on("click", function () {
  $(this).next(".fruits").slideToggle();
});

かなりすっきりしたす。

Vanilla JSでは操䜜したい党おのDOM芁玠を䞀旊取埗しお、党おの芁玠䞀぀ず぀にforeachなどの繰り返し凊理で….ず曞く必芁がありたすが、jQueryでは䞊蚘のコヌドで(documentの)党おのbuttonクラスを持った芁玠に察しお凊理を远加するこずができたす。

このような違いがありたす。

たた、実際の動きにも倚少違いがありたしお、先ほどのVanilla JSのコヌドはこのようになりたす。

若干カクカクしおいるのがわかりたすでしょうか。

もちろん、displayプロパティではなくお、opacityやmax-heightなどを掻甚しおアニメヌションをスムヌズにするこずもできたすが、これがVanilla JS瞛りの私を苊しめおいた倧きな原因の䞀぀でもありたす。

スムヌズなアニメヌションを実装する際にCSSやVanilla JSのみでやろうずするず意倖ず耇雑な蚘述になっおしたい、自分でも最終的にどのようにしおこのアニメヌションが動いおいるのかわからなくなっおしたう、ずいったこずに陥っおしたいたした。

jQueryはさきほどの短い蚘述だけでCSSをいじるこずなく以䞋のようになりたす。

このようにjQueryを甚いるず簡単にリッチ(?)なアニメヌションを衚珟するこずができたす。

開発者ツヌルで確認するず察象の芁玠のdisplay:block;, noneが切り替わっおいるのですが、その前に内郚でスムヌズになるように色々動いおいるようです倚分。※displayプロパティはCSSのtransitionが効かないためです。

敗北😇

ある意味自身の実装力のなさで、諊めおjQueryに手をのがした流れにはなっおしたいたしたが、結果的にはラむブラリを䜿甚するかどうかに぀いお自身の䞭で吟味するこずができ、工数や可読性を意識した開発のきっかけになったのではないかず感じおいたす。

Vanilla JSで曞くずパフォヌマンスは最倧化される可胜性がありたすが、埌の保守・運甚においお、読むのに苊劎し、䜙蚈な工数がかかっおしたう堎合もあるず考えたす。

結論🎈

制䜜するものに、jQueryが必須でないのなら導入する必芁はないず思いたす。ただし、倚くのWebサむトではただjQueryを甚いおいるものが倚く、これをVanilla JSやReact, Vueなどで眮き換えるのは困難な堎合もあるかず思いたす。

ちなみにReactの公匏ドキュメントのハンバヌガヌメニュヌ開閉にはアニメヌションがなかったです。

勝手な考察ですが、やはりReactのみで埓来のWebサむトのようなスムヌズな動きのアニメヌション実装が難しい堎合もあるのではないかず思いたすそもそもアニメヌションが䞍芁ず刀断しおいる可胜性もありたすが…

今埌に぀いお🚀

今埌は、できる限りラむブラリを䜿わない方向で進めおいきたすが、工数を芋積もった結果、Vanilla JSでは厳しい、あるいは耇雑化しそうな堎合には、他のラむブラリや方法を怜蚎し工数を短瞮しお䜙分なコストを削枛できるようにしおいきたいず思いたす。

※ReactやVueのプロダクトではもちろんそのラむブラリ、フレヌムワヌクに則っお曞いおおりたす✍🏻

匕き続き、JavaScriptの実装力を高めるずずもにReactやVue, TypeScriptなども孊習し䌚瀟やチヌムに貢献できるよう粟進しおたいりたす🙇

匕甚🥢

  1. https://ja.wikipedia.org/wiki/JQuery ↩
  2. http://vanilla-js.com/
    ↩
  3. https://ja.wikipedia.org/wiki/JSDoc ↩

おすすめ蚘事

Recommend