Visual Studio CodeでAviUtl用スクリプトを書こう！【文字コード等設定編】

　[技育祭serverの人たち Advent Calendar 2020](https://qiita.com/advent-calendar/2020/geek)に滑り込み参加の記事です。
　**多分、他の記事と比べても話題的には被らないんじゃないかな～（大問題）**
（クソガキのメモ書き程度だと思って許してください）

# はじめに
　ボクはよく、[ボクと同一人物のボカロP](https://twitter.com/H_J_Ainashi)にMVを **AviUtl** で作っては提供するのですが、その際、

* 「この表現もっと簡単にできないかな...」
* 「これ絶対使いまわすよな...」

　というような効果が出てきたときはいつもスクリプト化するようにしています。その際、使用するのが皆様もご存じ **Visual Studio Code** 。
　この記事では、Aviutlのスクリプトを製作するときに使用している設定を紹介したいと思います。

　今回、前提条件として **Visual Studio Codeがインストールされている事** とします。[インストール](https://azure.microsoft.com/ja-jp/products/visual-studio-code/)は各自自分で行ってください。

# 結論

* 拡張機能としての `Lua` をマーケットプレースから探してインストールする（複数ある場合は多分どれでもそんなに大きな大差はないと思うけどダウンロード数多いのを選んだほうが良いよ）
* ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/701716/e53bbd01-bc8b-ce9c-6b5a-fababa31e6c9.png)

* 左下歯車ボタンから `設定` を開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/701716/404c25ae-f3c2-4cdf-1d93-3e0738126c24.png)

* 設定項目が開くので、 `設定(JSON)を開く` をクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/701716/bd03da68-31df-9cd2-9c47-4c5b289e654d.png)

* 以下の内容をコピペする（適宜周りに合わせて前後行の終わりにカンマ `,` を入れること）

```json:setting.json
"files.associations": {
    "*.anm": "lua",
    "*.tra": "lua",
    "*.obj": "lua",
    "*.scn": "lua",
    "*.cam": "lua"
},
"[lua]": {
    "files.encoding": "shiftjis"
}
```
* おわり

# 細かい説明

## AviUtlで使用するスクリプトはLua!
　AviUtlではスクリプト言語として `Lua` を用いているので、コードエディタも `Lua` 用のコードエディタを使った方がわかりやすいです。
　そこでまずは拡張機能から `Lua` 用の言語サポートを導入します。
　しかし、それだけでは動作しません。
　AviUtlでは、そのスクリプトが何のスクリプトなのかを区別するためにスクリプトファイルの拡張子が `.anm` だったり、 `.tra` だったりします。
　このために、 **特定の拡張子を、ユーザーが指定した言語モード** で開くように設定する必要があります。VSCodeではこれを `files.associations` 内で一括で管理します。

```json
"files.associations": {
    "<<言語モード1>で開くファイルの条件>": "<言語モード1>",
    "<<言語モード2>で開くファイルの条件>": "<言語モード2>",
    "<以下同様>"                      : "<以下同様>"
}
```
任意の言語モードで開くファイルの条件には `*.anm` のようにワイルドカードを使用することもできます（というかそれが大半だと思ってる）。

## AviUtlで使用する文字コードはShift JIS!
　AviUtlでは文字コードに `Shift JIS` を用いています。Visual Studio Codeでは現在、デフォルトの文字コードに `UTF-8` を使用しているため、その状態で編集を続けると文字化けにより実行ができなくなるというわけです。特に日本語ではそれが顕著に表れます。下の画像はその文字化けした例です（すでにShift JISを用いて記述されたスクリプトファイルをUTF-8を用いて開こうとする）。
　余談ですが、画像のスクリプトファイルは自作したものですが、再編集する予定があるとか、ないとか。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/701716/e5fdf3e6-8fa4-8479-34ed-3c071d8e8b52.png)

　あろうことかVisual Studio Codeは拡張子ごとの既定の文字コードを設定することができません（ボクが知らないだけかもなので知っている方がいらっしゃれば教えてください）。
　代わりに言語モードごとに既定の文字コードを設定することで解決します。（Luaを仕事で使っている方ごめんなさい）

```json
"[<言語モード>]":{
    "files.encoding":"<既定の文字コード>"
}
```

### 付録：文字コード名の探し方
　ShiftJISは `shiftjis` で指定しましたが、これらの文字コード名の調べ方について少し解説。

* 左下の方に文字コード名（ `Shift JIS`とか `UTF-8` とか書いてあるところ）をクリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/701716/eae7a06c-ee12-3f89-2019-f37addf02b1c.png)

* 上の方にエンコード付きで開くという項目が表れるのでクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/701716/151d3a36-c996-bd85-a70a-0c6f12234e16.png)

* 表示に使用できる文字コードの一覧が出てくる。このとき、右側にあるコードが記述に使用できる文字コード名に該当する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/701716/9c9d8516-878e-d93d-f58f-df59c73a9cb2.png)

# 感想
　いかがだったでしょうか。実際、ボクもAviUtlスクリプト制作を始めるときに困惑してたことをまとめてみたつもりです。
　今回はボクがスクリプトを作ってるから、という理由でAviUtlスクリプトに限定してみましたが、結構いろいろなところで応用の利く基礎的な知識となるので覚えておくとよいと思います。

　ありがとうなのだ！

## P.S.
　なんか「これはアライさんの記事だぞ？？？？」みたいに思わせるはじまりとおわりのキメゼリフほしいのだ。
　コメントに書き残してくれたら採用するかもなのだ！