変換は読む側にやってもらうChrome拡張による名前変換小説

## 名前変換小説とは

二次創作・ファンアートの形態の一種です[^1]。
夢小説といったりします。

すっごくすごくおおざっぱに言えば、「登場人物の名前」なんかを「別の文字列に変換」して読む小説です。

「ああ～昔あったよね、魔法のiらんど」だって～～～～～！？！？！？
**夢小説は現役です！**

ちゃんと、ひとつのジャンルとなっています[^2]。

## 一般的な名前変換の手法

**ディスプレイを油性マッキーで塗りつぶし適宜ふせんをはるなどアナロジーな方法をとらないのであれば**、
JavaScriptを使ったものが一般的かと思われます。

小説投稿サイトの機能として用意されていたり、個人サイトの管理人さんが用意してくれたりします。

### その１：置換

フォームで名前を入力してもらって、入力で該当箇所を置換します。
なのでもともと「ラッキー」みたいなキャラクターを置換しようとすると「ラッキーパンチ」みたいな人名ではないところまで置き換わる可能性があります。
例えば、カタカナ二文字で、デフォルトの名前が「サム」とかだと思いがけず苦労するでしょう。
置換用にぜったいに小説本文で登場しなさそうなマークを付けてたら解決はしますが（例：{name}みたいな）、そうなると違和感が出ないように代入です。

pixivだと「単語変換」なので、仕組みとしてはおそらく置換でしょうか（あまり使ったことはありませんが……）。
シリーズで作者さんが許可している場合のみなのでやろうとしたら結構気合がいります。

### その２：代入

フォームで名前を入力してもらって、入力を本文のマーキングした箇所に代入します。
あらかじめタグを埋め込んでおいた部分を変更するので、ウッカリ意味の通らない文に変換されることはありません。
ただし、もちろん、「ナベさん」みたいなニックネームや「た、田中」のように言いよどむ表現は難しいです。
※頭から最大2文字＋さん、や、頭から1文字＋名前、よみがなをひらがなで登録してもらう、みたいなことは技術的に可能です。

たとえばprivatterさんなんかはこっちだと思います。

どっちにしろ文字列をえいやってやってるだけなのでそんな違いはないと思います。

## Chrome拡張機能による名前変換

上記で紹介した技術は、書いた小説を名前変換小説にしたい場合、書き手の側に「えいやっ」という気合がいりました。
もっとも気軽な投稿サイトの変換機能でやるにしても、タグを打ったり、設定をしてやったりする必要があります。
（その意思を持った人のみが実行できるというフィルタではあるので、一概に間口が狭いことは悪いとは言えませんが……）。

Chrome拡張機能を使うことで、書き手の側ではなく、必要な人が「えいやっ」と気合を入れて必要な時に適用する形での名前の変換が可能となります。

### 用意するもの

- manifestファイル 
- JavaScriptファイル （content.js）
を、入れたフォルダ

#### manifest.json
    {
      "name": "[ツール名（英数字がいいかな）]",
      "version": "1.0.0",
      "manifest_version": 3,
      "description": "[説明]",
      "content_scripts": [{
      "matches": ["URL指定"],
      "js": [
          "namechange.js"
        ]
      }]
    
    }


#### namechange.js
    let user = window.prompt("主人公の名前", "デフォルト名");
    
    if(user == '' || user == null){
        user='デフォルト名'
    }
    
    // テキストノードの置換を行う関数
    function replaceTextNodes(node) {
        if (node.nodeType === Node.TEXT_NODE) {
            if (node.textContent.includes('デフォルト名')) {
                node.textContent = node.textContent.replace(/デフォルト名/g, user);
            }
        } else {
            node.childNodes.forEach(replaceTextNodes);
        }
    }
    
    // bodyの全テキストノードに対してreplaceTextNodes関数を適用
    replaceTextNodes(document.body);

### 適用方法
- 適当な場所に「manifest.json」と「namechange.js」の入ったファイルを置きます。
- Google　Chromeの「その他の機能」を開きます。
- デベロッパーモードをオンにし、「拡張ツール」から上のフォルダを指定します。
- 二次創作ページで小説を開くと名前を入力する欄が出てきますので、好きな名前にしてください。


### メリット

- やりたい人だけ名前変換をしてもらえる。
- ブラウザ側でやってもらうので、名前変換のための設定がいらない。（書く側のメリット）
- タグを埋め込む手間がないので、本文の再利用がしやすい。（書く側のメリット）

### デメリット

- 「置換」になるので、正確な名前の変換はできない。
- とくにそういう読み方が想定されていない場合も変更できてしまう（作者の意図に沿わない読み方ができる）

**これを「絶対に」やってほしくない人はいるので、それを防げないのはつらいところです。**
ただ、ブラウザである以上、コンテンツを読み込んでいる以上はこのへんは、そもそもどうとでもできてはしまいますが、お手軽な手段を作るとよくないかもしれない。

ちなみに、私はと言えば、作ってみたはいいものの、manufestで自分のサイトのみにしています。

### 最後に

個人サイトで「よっしゃうちもはじめてみっか、名前変換！」と思い立った場合、それぞれの小説ページをいじってタグを入れるだけでもかなりの労力です。
修正漏れ・変換ミスに対応し続ける労力を思うと、もうね……。

そんなときは、Chrome拡張を用意してあげて、見る側が「えいやっ」とやればやりたい人だけ「なんとかなーれ」ができる、そういう手法もあります。
メンテナンスが圧倒的に楽です。

というわけで、**気軽にやってみませんか。名前変換小説！**
（あと、個人サイト）

## 参考

- [Chrome拡張の作り方 (超概要)](https://qiita.com/RyBB/items/32b2a7b879f21b3edefc)

[^1]:この夢小説の定義についてはちょっと思うところあるんですが、（名前変換小説は～なので/だけじゃないので、私はその定義に含まれる/含まれない、と主張することが、不本意に価値判断を伴ってしまいがち）本題ではないので省略します。

[^2]:しかし、私が活動しているジャンルはおおむね無個性主人公（デフォルト名がある）タイプでして、名前変換機能を伴わないことが多いです。