VisualStudioCodeで「phpcs: Unexpected token P in JSON at position 0」というエラーの対処法



久しぶりにPHPのコードを触ったところ、VisualStudioCodeに入れていたphpcsが動作しないことに気づきました。
ファイルを開いたときに「**phpcs: Unexpected token P in JSON at position 0**」というエラーが出て
phpcsが動作してくれないのです…
PSR-2に準拠しないコードはレビュー通しまへんでー、と言った本人はなぜかこんなところでちょっと苦戦してました…
前は動いていたのに…
調べてもあまり情報がなかったのでお役に立てれば。

## 環境

|名前|バージョン|
|---|--------|
|PHP | 7.1.8    |
|PHP_CodeSniffer| 3.0.2 |
|VS Code | 1.16.1 |
|VS Code phpcs | 0.7.0 |

## エラー内容

VisualStudioCodeでPHPのファイルを開くと以下のメッセージが表示され、
phpcsが動作しませんでした。

```
phpcs: Unexpected token P in JSON at position 0
```

## 解決法

**結論からいうと、PHPライブラリが読み込めていないなどの理由でPHPコマンドでWarningが出ていると、
件のエラーになります。**
なのでWarningを出さないよう環境を直す必要があります。

```
$ php --version
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/local/opt/php71-imagick/imagick.so' - dlopen(/usr/local/opt/php71-imagick/imagick.so, 9): Library not loaded: /usr/local/opt/imagemagick/lib/libMagickWand-7.Q16HDRI.3.dylib
  Referenced from: /usr/local/opt/php71-imagick/imagick.so
  Reason: image not found in Unknown on line 0

Warning: PHP Startup: Unable to load dynamic library '/usr/local/opt/php71-imagick/imagick.so' - dlopen(/usr/local/opt/php71-imagick/imagick.so, 9): Library not loaded: /usr/local/opt/imagemagick/lib/libMagickWand-7.Q16HDRI.3.dylib
  Referenced from: /usr/local/opt/php71-imagick/imagick.so
  Reason: image not found in Unknown on line 0
PHP 7.1.8 (cli) (built: Aug  7 2017 15:02:45) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
    with Zend OPcache v7.1.8, Copyright (c) 1999-2017, by Zend Technologies
    with Xdebug v2.5.5, Copyright (c) 2002-2017, by Derick Rethans
```

imagick関連でWarningのメッセージが出力されています。
もちろんphpcsコマンドを実行してもWarningが出ます。

```
$ phpcs --version
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/local/opt/php71-imagick/imagick.so' - dlopen(/usr/local/opt/php71-imagick/imagick.so, 9): Library not loaded: /usr/local/opt/imagemagick/lib/libMagickWand-7.Q16HDRI.3.dylib
  Referenced from: /usr/local/opt/php71-imagick/imagick.so
  Reason: image not found in Unknown on line 0

Warning: PHP Startup: Unable to load dynamic library '/usr/local/opt/php71-imagick/imagick.so' - dlopen(/usr/local/opt/php71-imagick/imagick.so, 9): Library not loaded: /usr/local/opt/imagemagick/lib/libMagickWand-7.Q16HDRI.3.dylib
  Referenced from: /usr/local/opt/php71-imagick/imagick.so
  Reason: image not found in Unknown on line 0
PHP_CodeSniffer version 3.0.2 (stable) by Squiz (http://www.squiz.net)
```

なので、
php71-imagickはほとんど使用していないので削除しました。

```
$ brew uninstall php71-imagick
$ rm -f /usr/local/etc/php/7.1/conf.d/ext-imagick.ini
```

```
$ php --version
PHP 7.1.8 (cli) (built: Aug  7 2017 15:02:45) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
    with Zend OPcache v7.1.8, Copyright (c) 1999-2017, by Zend Technologies
    with Xdebug v2.5.5, Copyright (c) 2002-2017, by Derick Rethans
```

Warningが消えました。
この状態で再度VisualStudioCodeでPHPファイルを開くとエラーは出ず、正常にphpcsが動作するようになりました。

今回はphp71-imagickをアンインストールしましたが、
Warningを出ないようにすればOKです。

## 参考

[GitHubのissue](https://github.com/ikappas/vscode-phpcs/issues/32) で同様の事象が報告されていましたが、
自分の場合は該当しませんでした。
違うパターンではもしかしたら上記のイシューも役にたつかもしれません。