46
34

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

UserScriptで楽しくJavaScriptを覚えよう

Last updated at Posted at 2018-12-03

はじめに

クライアントサイドのJavaScriptフレームワークって色々あると思いますが、
それ以前に素のJavaScriptの構文に自信がない人って以外と多いんじゃないでしょうか。

素のJavaScriptを覚えようと思ってるけど、別に作りたいものもないしなあ…って悩んでいる人はいませんか。
それ、もしかしたらUserScriptを作ってみると楽しく覚えられるかもしれません。

UserScriptって?

Webページにアクセスした側が用意したスクリプトで、Webページに対して変更や操作を行うことができる機能のことです。
例えばGoogleで検索したときに、画面を下にスクロールするだけで次ページの検索結果を表示できるようにしたり、
入れ子になって階層化されているli要素をツリービューっぽく改変したりなんてことが可能です。

FirefoxであればGreaseMonkey、ChromeであればTampermonkeyという拡張機能を入れることで利用することができます。

例えばこんなことありませんか

Sublime TextやVS CodeでAsciiDocをシンスタックハイライトさせてるけど、
さくらエディタでもシンスタックハイライトさせたいなあ。
よし、ググって見よう。どれどれ…?
1.png

んん…?

2.png

なんでこんな勝手なことしてるの。俺はOR検索じゃなくてAND検索してるんだ。勝手に除外するんじゃない!
含まれないなんて…駆逐してやる!!この世から…一匹残らず…!!

こんな時はUserScriptを書こう

1.おもむろにF12キーを叩き、開発者ツールを開く

3.png

2.「含まれない」の検索結果を消したいので、「含まれない」の要素と、消したい親要素を探す

マウスカーソルの位置が消したい要素。「含まれない」の6つ分親の要素みたいですね。
4.png

3. コードを書いて、開発者ツールのコンソールで動作確認をする

display:none;にすれば多分消えると思うので、試しにコードを書いてみます。
それにしてもparentNode地獄が酷いですね。CSSの:has()はいつになったらサポートされるんだろう。

let e = document.querySelectorAll('div.TXwUJf span');
for (let i = e.length; i--;) {
  e.item(i).parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.style.display = 'none';
}

まあでもとりあえずコンソール上で叩いて上手く消えてくれました。
5.png

4. 即時関数にする

他のコードと干渉するとまずいので即時関数化します。
letで書いてるから{}で括るだけでいいかもしれない…。

(function() {
  let e = document.querySelectorAll('div.TXwUJf span');
  for (let i = e.length; i--;) {
      e.item(i).parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.style.display = 'none';
  }
})();

5. GreaseMonkeyやTampermonkeyに反映する

拡張機能でスクリプトを追加して、4.で作ったコードを貼り付けます。
Googleの検索結果のページだけで動かしたいので、includeをこんな感じで指定してみました。

// ==UserScript==
// @name     Googleの検索結果から「含まれない」を除外する
// @version  1
// @include  /^(http|https):\/\/www\.google\..+\/search.*/
// @grant    none
// ==/UserScript==
(function() {
  let e = document.querySelectorAll('div.TXwUJf span');
  for (let i = e.length; i--;) {
      e.item(i).parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.style.display = 'none';
  }
})();

6. 検索ページを表示してみる

実際にページを表示して、3.と同じ画面になっていれば成功です。

終わりに

このように、ユーザースクリプトなら普段からWebページにアクセスしたときに不満に思ってるあれそれを題材にできて、
コードを手早く書いて、すぐに結果が確認できるので楽しくコードを覚えることができるかもしれません。

UserCSSなんてものもありますので、CSSに自信がない人はそちらも同じように使ってみてください。

46
34
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
46
34

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?