物書きに贈る個人的おすすめ拡張機能と設定

# 前置き

この記事は[Visual Studio Code Advent Calendar 2019](https://qiita.com/advent-calendar/2019/vscode)の7日目の記事になります。

# はじめに

何でも拡張できるVisual Studio Codeですが、実のところ物書き用エディタとしても重宝します。
私はエンジニアの傍ら評論サークル「恢徳堂」[^1]で主筆をしていたり、その他諸々物書きをしていたりします。
実のところ、こういった物書き用途でもVisual Studio Codeは **すごく** 優秀なのです。
ということで、物書きサイドで使っている拡張機能や設定をお伝えできれば幸いです。

[^1]: 年末のコミックマーケット97では「月曜南ホ18b」で参加していますが新刊はありません。落としました。

# おすすめ拡張機能と設定

さて、ここからは評論や技術書を書いたりするのによい拡張機能と設定と、小説（およびそれに類するもの）を書くのによい拡張機能をお伝えできればと思います。
なお、独断によるものなので、皆さんにとって必ずしも使い勝手がよいとは限りません。この点はあしからず。

## 私が入れている拡張機能

### [CharacterCount](https://marketplace.visualstudio.com/items?itemName=8amjp.charactercount)

文字数をカウントしてくれる拡張機能です。
Markdownとプレーンテキストのみ有効ですが、物書き系の中には文字数が重要なものもあり、これを入れることによって今何文字書いたかがわかる仕組みになっています。

### [vscode-textlint](https://marketplace.visualstudio.com/items?itemName=taichi.vscode-textlint)

[textlint](https://textlint.github.io/)という日本語の校正支援ツールをVisual Studio Codeで使えるようにする拡張機能です。
これを使う事で、日本語や英語で気をつけるべき点をアドバイスしてくれるのです。
なお、ルールとなる`.textlintrc`は評論・技術文書用と小説用を分けています。

#### 評論・技術文書用の設定

```json
{
    "rules": {
        "incremental-headers": true,
        "max-ten": {
            "max" : 3
        },
        "no-doubled-conjunctive-particle-ga": true,
        "no-dropping-the-ra": true,
        "one-white-space-between-zenkaku-and-hankaku-eiji": true,
        "common-misspellings": {
            // Misspellings to be ignored (case-insensitive)
            "ignore": []
        },
        "sjsj": {
            // spelling errors are an edit distance of 1 from the target.
            "distance": 1
        },
        "preset-jtf-style": true,
        "prh": {
            "rulePaths": [
                "./node_modules/prh/prh-rules/languages/ja/typo.yml",
                "./node_modules/prh/prh-rules/media/techbooster.yml",
                "./node_modules/prh/prh-rules/media/WEB+DB_PRESS.yml"
            ]
        }
    },
    "plugins": [
        "review"
    ]
}
```

#### 小説用の設定

```json
{
    "filters": {},
    "rules": {
        "general-novel-style-ja": {
            // 各段落の先頭に許可する文字 (false: チェックしない)
            "chars_leading_paragraph": "　「『【〈《（(“\"‘'［[〔｛{＜<●",
            // 閉じ括弧の手前に句読点(。、)を置かない
            "no_punctuation_at_closing_quote": true,
            // 疑問符(？)と感嘆符(！)の直後にスペースを置く
            "space_after_marks": true,
            // 連続した三点リーダー(…)の数は偶数にする
            "even_number_ellipsises": true,
            // 連続したダッシュ(―)の数は偶数にする
            "even_number_dashes": true,
            // 連続した句読点(。、)を許可しない
            "appropriate_use_of_punctuation": true,
            // 連続した中黒(・)を許可しない
            "appropriate_use_of_interpunct": true,
            // 連続した長音符(ー)を許可しない
            "appropriate_use_of_choonpu": true,
            // マイナス記号(−)は数字の前にしか許可しない
            "appropriate_use_of_minus_sign": true,
            // アラビア数字の桁数は2桁まで (false: チェックしない)
            "max_arabic_numeral_digits": 5
        },
        "common-misspellings": {
            // Misspellings to be ignored (case-insensitive)
            "ignore": []
        },
        "max-ten": {
            "max" : 3
        },
        "no-doubled-conjunctive-particle-ga": true,
        "no-dropping-the-ra": true
    }
}
```

### [Convert Width](https://marketplace.visualstudio.com/items?itemName=8amjp.convertwidth)

半角文字と全角文字を変換する拡張機能ですが、実のところあんまり使っていません。ただ、小説など縦書きにする可能性のある文章を書いているときは入れておいた方がよいでしょう。

### [Format Novel](https://marketplace.visualstudio.com/items?itemName=8amjp.formatnovel)

小説のフォーマットに合わせた変換をしてくれるツールです。

> (1) 行頭に全角スペースを挿入します。ただし、下記と一致する行を除きます。
>
> 鉤括弧(「、『)で始まる行
> Markdownの見出し記号(#)で始まる行
> 既に全角スペースが挿入されている行
> 空行
> (2) 全角の感嘆符(！)、疑問符(？)のあとに全角スペースを挿入します。ただし、下記と一致する場合を除きます。
>
> 直後が感嘆符(！)、疑問符(？)、鉤括弧(」、』)、半角スペースの場合
> 既に全角スペースが挿入されている場合

これらの設定はtextlintで引っかかるようにしてあるので、大体手で直されてしまっていてこれを使う事はまれなのですが……。

### [Re:VIEW](https://marketplace.visualstudio.com/items?itemName=atsushieno.language-review)

技術書を書く人ならお馴染みの[Re:VIEW](https://github.com/kmuto/review)用のシンタックスハイライトをしてくれる拡張機能です。
いろいろ機能はあるのですが、まだまだ対応していない書式もあるのでそこはエラーが出ていても気にしないのがよいと思います。

## 私がしている設定

続いて設定です。これを設定しておくとけっこう楽になります。

### 自動保存

`files.autoSave`をOnにすると書きかけのファイルを自動保存してくれます。
また、`files.autoSaveDelay`で何ミリ秒間隔で保存するかを選べますが、私は5000ミリ秒、つまり5秒に1回の保存にしています。
こうすることで、書きかけのドキュメントが飛ぶという事態を避けられます。

### Git設定

テキストファイルなら、プレーンテキストであれMarkdownであれRe:VIEW形式であれ使ってしまった方が楽だと思います。
こうすることで、書きまちがえても直せたり、他のPCなどで作業を共有することも可能になってきます。
ただし、書きかけの文章が見られて困る場合は非公開設定を忘れずに。

### 行の折り返し

`editor.wordWrap` は `bounded` とし、`editor.rulers` は80文字で設定してあります。
おまけに、 `editor.wrappingIndent` は `none` にする事で、インデントをしないように設定してあります。

# 終わりに

これらの拡張機能と設定を駆使して、よい物書きライフを送ってください。