VSCodeでJUnitの結果表示が文字化けする

VSCodeからJUnitのテストを実行したりテスト結果を確認することができますが、設定によってはテスト結果の漢字が文字化けします。
ちなみに、今回の環境はこんな感じです。

vscode@1.32.3
MS-CEINTL.vscode-language-pack-ja@1.32.4
ms-vscode.PowerShell@1.11.0
ms-vsts.team@1.149.2
redhat.java@0.40.0
VisualStudioExptTeam.vscodeintellicode@1.1.4
vscjava.vscode-java-debug@0.17.0
vscjava.vscode-java-dependency@0.3.0
vscjava.vscode-java-pack@0.6.0
vscjava.vscode-java-test@0.15.0
vscjava.vscode-maven@0.15.1

加えて、ファイルの文字コードをUTF8にしたかったので、settings.jsonに以下の設定を追加しています。

"java.jdt.ls.vmargs":"-Dfile.encoding=UTF-8"

この環境でJUnitを実行すると、漢字部分が文字化けしてしまいました。


原因は、vmargsでファイルエンコードをUTF8にしてるのに、WindowsのデフォルトエンコードがシフトJISなので、テスト結果がシフトJISで作成されて、ちゃんと読み込めないからです。(のはず)
対策としては、setting.jsonに「java.test.config」を追加して、テスト時のエンコードもUTF8にしてしまいます。

"java.test.config": [
    {
        "name": "MyDefault",
        "workingDirectory": "${workspaceFolder}",
        "args": [ "" ],
        "vmargs": [ "-Dfile.encoding=UTF-8" ],
        "env": { }
    }
],
"java.test.defaultConfig": "MyDefault"

これで、テスト結果も文字化けしなくなりました。
(java.test.configについては、2019年1月ぐらいにドキュメントが追加されています。詳細はhttps://github.com/Microsoft/vscode-java-test/blob/master/runner-config.md

Visual Studio CodeでTFVCを使うには その2

その1の続きです。

ここまで設定できたら、VSCodeからTFVCでのチェックインができるようになります。
まず、VSCode起動時のちょっとした注意点ですが、「マッピングしたローカルフォルダを開く」ことが必要です。
→VSCodeで開いたフォルダからTFVCのワークスペースを認識するので、該当フォルダ以外やフォルダ内のファイルを単独で開いたときはチェックインできません。

VSCodeを起動したら、TFSにログインしておきます。すべてのコマンドの表示(Ctrl+Shift+P)から’team signin’コマンド実行→ユーザ名入力→パスワード入力でログインします。
005

006

007

あとはファイルの変更を行い、TFVCにチェックインします。
VSCodeの左側にあるビューバーからソース管理のアイコンをクリックすると、チェックイン時のコメント入力欄と変更を検知したファイルが表示されるので、ソース管理のメニューから「Check In」を選択するか、コメント欄でCtrl+Enterキーを入力するとチェックインが実行されます。
008

なお、ファイルを新規追加したときには、「EXCLUDED CHANGES」に追加したファイルが表示されますが、そのままではチェックイン対象にならないので、ファイル名の右側に表示される「+」部分をクリックすると、「INCLUDED CHANGES」にファイルが移り、チェックイン対象になります。
009

さて、ここで今回のネタの最後の注意点ですが、チェックインコメントに日本語を入力すると、TFS上ではコメントが文字化けします(VSCode上では’初期生成’と入力しています)。
011

対処法ですが、tf.cmd内のJavaコマンドの引数に’-Dfile.encoding=UTF-8’を追加します。
010

これで、「Gitわからない」「xxなのでGit使えない(使わせてくれない)」いう方もTFVCでバージョン管理と連携しながら開発できますね。

Visual Studio CodeでTFVCを使うには その1

発表されてからすごい勢いで拡張されまくっているVisual Studio Codeですが、バージョン管理システムとの連携機能で標準搭載されているのはGitでした。自分の仕事ではほぼ使用しないのであまりフォローしていませんでしたが、最近Team Foundation Version Control(TFVC)が使える拡張機能が本家MSから提供されているのを知ったので、ちょっと使ってみました。

今回は以下の環境を前提にしています。
・オンプレミスのTFS(TFS2015 Update2以降)が接続先
・バージョン管理はTeam Foundation Version Controlを使う
・Visual Studioはインストールしない

まずはMarketplaceから拡張機能をインストールします。

https://marketplace.visualstudio.com/items?itemName=ms-vsts.team

にあるように、Quick Open(Ctrl+P)からコマンドでインストールするか、
001

VSCodeの左側にあるビューバーから拡張機能のアイコンをクリックし、検索ボックスで’team’を入力すると’Visual Studio Team Services’が出てくるので、’インストール’をクリックしてインストールします。
002

これだけで使えるようになればよかったんですが、この拡張機能、内部ではTFコマンドを使用しているので、TFコマンドが使える環境にする必要があります。
Visual Studioをインストールしていれば、VS2017だとTFコマンドが標準でが入っているのですが、今回はVisual Studioをインストールしないので、Team Explorer Everywhereのコマンドラインクライアント(TEE CLC)を使います。
※VS同梱のTFコマンドは、VS2017で標準のインストール先だと「C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer\TF.exe」になります。

TEE CLCを使うためには前提でJava8(以降)が必要ですので、事前にインストールしておきます。
TEE CLCはGithubのサイト(https://github.com/Microsoft/team-explorer-everywhere)から最新版をダウンロードして解凍します。
(今回は、「C:\Program Files\TEE-CLC」に解凍しています)
解凍したら、ライセンス条項への同意を行います。
コマンドプロンプト(or PowerShell)で解凍先フォルダに移動したあと、’.\tf.cmd eula /accept’を実行します。
ライセンス条項を見たい方は’.\tf.cmd eula’で見れますが、注意点が2つあります。
・コードページをUTF-8に変更しないと日本語が正しく表示されません。
 →’chcp 65001’を実行するとUTF-8に切り替わります
・同意するときの入力は、’y’でも’yes’でもなく’はい’と日本語で入力しないといけません。
004

 (「ここを頑張ってローカライズしなくても」という気が・・・)

また、解凍先フォルダに空白を含み、かつPowerShellで解凍先フォルダに移動せずに動かすときは、頭に実行演算子(&)を置き、コマンドをシングルクォーテーション(‘)で括る必要があります(「& ‘C:\Program Files\TEE-CLC\tf.cmd’」)。

次に、VSCodeの拡張機能に対する設定として、’tfvc.location’にTFコマンドの絶対パスを指定します。
003

ここまで来たらTFSと連携できそうなんですが、もう少しだけ作業があり、初期設定としてTFVCのワークスペース作成とマッピングをTFコマンドで割りあてる必要があります。
〇ワークスペースの作成
.\tf.cmd workspace /new /collection:http://tfsserver:8080/tfs/DefaultCollection /location:local ReviewRelease1
〇フォルダマッピング
.\tf.cmd workfold /map /collection:http://tfsserver:8080/tfs/DefaultCollection /workspace:ReviewRelease1  $/ReviewRelease1 C:\repos\ReviewRelease1

<補足>
・TFコマンドの詳細は https://msdn.microsoft.com/ja-jp/library/y901w7se(v=vs.100).aspx になります。
・’ReviewRelease1’はチームプロジェクト名/ワークスペース名です。
 個人的な好みで、単一言語での開発の場合、ベースとする分岐(Gitでいうところのmasterブランチ)に対するワークスペースの名前はチームプロジェクト名に合わせてます。
・ワークスペースの種類に’local’を指定していますが、現時点ではTFVC拡張機能を使うときはローカルワークスペース限定ですので、明示的に指定しています(Github上でIssueが切られてるので、今後対応すると思います)。

その2に続く・・・