この世からXを撲滅させるChrome拡張

## はじめに

こんにちは、[@rs_tukki](https://twitter.com/rs_tukki)です。
これは[クソアプリ Advent Calendar 2023](https://qiita.com/advent-calendar/2023/kuso-app)の20日目の記事です。

## 過去に作ったクソ拡張

https://qiita.com/rs_tukki/items/9de350e6276c40f54fc4

https://qiita.com/rs_tukki/items/29656329fd0823dc9ed8

## X(旧:Twitter)

みなさん、**X(旧:Twitter)** は使われてますでしょうか？
自分は仕事用とプライベート用で2つの**X(旧:Twitter)** アカウントを持っています。とはいえ仕事用の**X(旧:Twitter)** アカウントはもっぱら見るだけで自分から呟いたりはしないのですが。
最近は**X(旧:Twitter)** も色々仕様変更があったりで他のSNSへの移動を検討している方もいますが、それでもユーザ数から言えば未だに**X(旧:Twitter)** は社会インフラに近い存在ですから、まだしばらくは**X(旧:Twitter)** のお世話になる方の方が多いでしょう。

## ……めんどくさいな！

TwitterがXに改名された2023年。
まあ自分は普通に使えるのであれば名称くらいは何でも良かったのですが、ニュース番組なんかでもわざわざ**X(旧:Twitter)** なんて但し書きをしているのを見ると、名前を変える意味はあったのかと首を傾げざるを得ません。

なのでこの際、XからTwitterに名前を戻してしまいましょう。

## 完成品

まずは、本拡張機能の導入後、この記事を読んでみてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308803/b878ce66-e441-6502-e87d-5902ac48b85c.png)

煩わしい(旧:Twitter)の但し書きがなくなり、そこにはいつも通りのTwitterの文字が復活しました。
これでもうイライラすることはなさそうです。

## 実装

実装は実に単純で、画面上の(旧:Twitter)の文字を削除し、Xだったりx.comだったりを全てTwitterやtwitter.comに差し替えるだけのコードになっています。

```ts
const init: (() => void) = function() {
  // 「(旧:Twitter)」やその変形を削除
  replaceTextOnPage(/(\(|（)?旧 ?(:|：)?(Twitter|Ｔｗｉｔｔｅｒ|ツイッター)(\)|）)?/gi, '');

  // 「x.com」を「twitter.com」に置換
  replaceTextOnPage(/x\.com/gi, 'twitter.com');

  // 「X」を「Twitter」に置換
  replaceTextOnPage(/(X|Ｘ)/g, 'Twitter');

  // 「エックス」を「ツイッター」に置換
  replaceTextOnPage(/(エックス|ｴｯｸｽ)/g, 'ツイッター');
}

const replaceTextOnPage = (from: string | RegExp, to: string) {
  const elements = document.querySelectorAll('body, body *:not(script):not(noscript):not(style)');

  elements.forEach((element) => {
    element.childNodes.forEach((node) => {
      if (node.nodeType === Node.TEXT_NODE) {
        if (node.textContent) {
          node.textContent = node.textContent.replace(from, to);
        }
      }
    });
  });
}

const mutationObserver = new MutationObserver(init)
const config = {
  childList: true,
  subtree: true
}
mutationObserver.observe(document, config)
```

完成品は以下に置いておいたので、昔懐かしいTwitterに戻りたい方はどうぞ。

https://github.com/rs-tukki/X2Twitter

導入方法はこちらの記事が参考になります。

https://note.com/cute_echium873/n/n997dcf40b3a1

## オチ

本来はこれで終わる……はずでしたが。

https://i-icc.hatenablog.com/entry/2023/12/03/160423

**ネタが被りました。180°逆方向に。**
~~違うんです最初からこのネタで考えてたんです被せてないです信じて~~

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308803/c26f1008-3134-b2bc-bcd5-55e5e82c2aa4.png)

流石に二番煎じオチで終わらすわけにもいかないので、もう少しだけ続行してみます。

## 続行

昔懐かしいTwitterに戻るためには、もっと出来ることがあるはずです。
追加で置換処理を加えましょう。

### (リ)ポスト→(リ)ツイート

今年から、ツイート、リツイートは、それぞれポスト、リポストと言われるようになりました。  
ちなみに、実際は「なった」ではなく「戻った」が正しいそうです。[^1] 知らなかった...
[^1]: 元々ポストと呼ばれていたのが、2009年10月に「ツイート」になったそうです

```ts
  // 「ポスト」を「ツイート」に置換
  replaceTextOnPage(/(ポスト|ﾎﾟｽﾄ)/g, 'ツイート');
```

### いいね→お気に入り

お気に入りがいいねに変わったのは2015年11月3日。8年以上も前でした。
ふぁぼとも言っていたので個人的にはこちらの方がなじみ深いです。

```ts
  // 「いいね」を「お気に入り」に置換
  replaceTextOnPage(/いいね/g, 'お気に入り');
```

## 最終結果

というわけで、色々差し替えた結果は以下のようになりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308803/8acf4213-31a3-9bbb-4acb-c291d6b118f3.png)

右がEdge、左が拡張機能導入後のChromeです。
ああ、なんと懐かしいことか。

## まとめ

まだ改善の余地はありそうですが、ひとまずここまでにしておきます。
TwitterをTwitterとして利用し続けられることのありがたさをしみじみと実感しました。

~~あれ？これクソアプリじゃなくね？~~

## おまけ

この拡張機能を導入しながら執筆していたら、XがTwitterに書き換わったまま記事が自動保存されてしまいました。~~やっぱりクソアプリでした~~
拡張機能は必要ないときはちゃんとOFFにしておきましょう。