Help us understand the problem. What is going on with this article?

夢やぶれて・・・ VSCodeでファイルの自動エンコーディングを実現したかった話

More than 1 year has passed since last update.

はじめに

これは 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がいいんです。

エンコード設定の手数が多い

じゃあ標準の方法で都度エンコーディング変えろという話になるのですが、
用意されている手順は

  1. 下にあるステータスバーのエンコードをクリック or コマンドパレットで Change file encoding を選択
  2. Reopen with encoding を選択 (借り物だったり共有のファイルだったりするのでエンコード変更はしないことが多い)
  3. ファイルエンコーディングを選択 (たいてい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.autoGuessEncodingtrue にすると有効化されるみたいです。レッツ!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away