79
30

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-12-07

はじめに

これは 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 にすると有効化されるみたいです。レッツ!

79
30
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
79
30

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?