はじめに
これは Visual Studio Code Advent Calendar 2016 の8日目の記事です。
みなさん、VSCodeつかってますか?
僕はといえば、昔Atomを愛用していたことをすっかり忘れて日々VSCodeライフを満喫しております。
そんなVSCodeですが、日本(語)で働く我々にとって避けては通れぬつらみがありますよね。
そう、デフォルトのファイルエンコードがUTF-8のときに、ほかのエンコードのファイルを開くと文字化けしちゃう、あれです。
これは、VSCodeの非UTF-8エンコーディング問題に立ち向かった一人の男の物語である…!
Preferenceで設定できますよ?
そうなのです。ファイルが全て非UTF-8であれば files.encoding
を変更すれば解決です。
※ 常に非UTF-8ならユーザ設定、そのプロジェクトのみの設定ならワークスペース設定を編集しましょう
でもこの現象に出くわすのって、たいてい誰かからもらったファイル(環境設定メモとか)をちょっと開きたいだけなときなんです。
いつもはUTF-8がいいんです。
エンコード設定の手数が多い
じゃあ標準の方法で都度エンコーディング変えろという話になるのですが、
用意されている手順は
- 下にあるステータスバーのエンコードをクリック or コマンドパレットで
Change file encoding
を選択 -
Reopen with encoding
を選択 (借り物だったり共有のファイルだったりするのでエンコード変更はしないことが多い) - ファイルエンコーディングを選択 (たいていShit-JIS ですよね!)
毎回なんてやってられないですよね。
Atomでは?
拡張機能がありまして。
auto-encoding
これを入れればファイルオープン時に自動で判定したエンコーディングを設定してくれるのです。
たぶん日本Atomユーザのかなりの方が入れているのではないかと。
じゃあVSCodeでも!
そしたらVSCode版の拡張機能を作ればいいじゃない、となるのは当然の摂理ですね。
しかも当時は1.0なりたてだったので、あわよくば人気拡張機能の作成者になれるかもしれない、という下心もありました。
意気揚々としばらく実装(CoffeeScript→TypeScriptの移植)を進めていたのですが、AtomのTextEditor.setEncodingに準ずるAPIがVSCodeにはないことが判明。
コマンドを呼び出せばいけるかもと思ったのですが、workbench.action.editor.changeEncoding
は、[Reopen with encoding
, Save with encodig
]のPickerを表示するだけのコマンドで撃沈。
AtomみたいにドキュメントにないAPIとか呼べるかも、と探しましたが、そんなことはありませんでした。
さすがMicrosoft、ドキュメントがしっかりしていらっしゃる…。
ならば本体に手を入れるしかないようだな
ということでPRしました。
OSSにソースがマージされたらそれこそ夢のようです。(しかもMicrosoftのプロダクト)
https://github.com/Microsoft/vscode/pull/10013
内容はAtomの拡張機能に倣って、jschardetでエンコーディングを自動判別!って感じです。
するとどうでしょう。「ユーザが設定でUTF-8を設定しているのに勝手にエンコード変えちゃうのはおかしくね?」みたいなもっともな意見をもらいました。
ぐぬぬ…としているうちに時間が経ちIssueはCloseされたのでした。
ならば本体に手を入れるしかないようだな その2
今度は、「違うエンコードだよ!変えちゃう?」みたいなメッセージを出してエンコーディングの変更をユーザが選べるようにしました。
https://github.com/Microsoft/vscode/pull/13142
するとなんと。「ファイル開くたびにエンコード判定するのはUX的にどうなのよ?」みたいな、これまたもっともな意見でCloseされました。
また、Close、されました…。
思ったことと分かったこと
こうして、僕の下心と夢は儚く散ったわけですが、この経験で感じたことを書いておきます。
- 拙い英語でもPRとかIssueは何となく理解してもらえる
- わけわかんねー奴がわけわかんねーこと言ってる、とはならない
- たぶん英語ネイティブでないPRとかもいっぱいあるので慣れているのでしょう
- とはいえ英語大事
- 自分の思いがすべて伝わらない
- コードレビュー外の部分でレビュー者になるべく負担をかけたくない
- 自動エンコーディングに需要はある
- PRに誰かしら +1 してくれていた
- でも、たぶん英語ネイティブの人たちはあまり困ってない
- Extension開発は意外と簡単
- TypeScriptで作ればIntellisenseがかなり便利
- ドキュメントがしっかりしている!
あと、PRとかIssueとか出すと急激にプロダクトがかわいくなります!
さいごに
関係するIssueはいまだOpenですので、我こそはと思う方はぜひVSCodeのために、ひと肌脱いでいただければと思います。
僕も何か妙案が浮かんだら、懲りずに再チャレンジするつもりでいます。
この件に限らず、VSCodeへのコントリビュートは、手の届く範囲に不便のある今がねらい目だと思いますが、いかがでしょうか。
ReleaseNote の Thank you に載ってる人かっこいいなー…
追記
コメントで教えてもらいましたが、ついに自動判別機能が実装されたようです!(僕の手柄ではありません)
https://code.visualstudio.com/updates/v1_11#_auto-guess-encoding-of-files
files.autoGuessEncoding
を true
にすると有効化されるみたいです。レッツ!