LoginSignup
1
2

More than 1 year has passed since last update.

[PHP]Windowsで静的解析ツールPhanを動かす

Last updated at Posted at 2021-04-21

Windowsで静的解析ツールPhanを使ってみたので、手順の覚え書き。

環境

  • OS: Windows 10
  • PHP: 7.4.11
    → PHP7.2以上である必要あり
  • Phan 4.0.4 → 今回インストールされたバージョン

手順

ほとんど公式GitHubの

辺りに従った内容となります。

1. composerのインストール

phanのインストール方法はいくつかありますが、今回はcomposerを用いました。

未導入の場合は、
Download Composer | getcomposer.org
のComposer-Setup.exe のリンクをクリックして、インストーラをダウンロード。
その後、ウィザードの内容に従ってインストール。

2. php-astのダウンロードと設定

(1) まず、PHPのバージョンを確認します。

> php -v

ast 1.0.10 for Windows | pecl.php.netより、対応バージョンのzipファイルをダウンロード。

Non Thread Safe(NTS)とThread Safe(TS)がありますが、間違った方を選ぶと実行時にエラーになるので、環境にあった方を選択。
自分の場合は、Thread Safe(TS)が正解でした。

(2) 続いて、ダウンロードしたzipファイルを展開し、php_ast.dllをextension_dirに移動させます(他のファイルは配置しなくて大丈夫)。
extension_dirの確認コマンドは以下の通り。

> php -i | findstr /I extension_dir

(3) php.iniに、php-astに関する記述を追記します。
どこにあるか確認したい場合は、ルートフォルダに移動して、dirコマンドで検索。
/sをつけることで、サブディレクトリ込で探してくれます。

> cd /
> dir /s php.ini

php.iniに追記する内容は以下の通り。

php.ini
extension=php_ast.dll

3. phanのインストールと設定

(1) 任意の場所で、以下のコマンドを実行してphanをインストールします。
専用のフォルダで行うのがよいでしょう。

> composer require --dev "phan/phan:4.x"

(2) 設定ファイルを作成します。
(1) のコマンドを実行したフォルダで以下のコマンドを実行。
--init-levelは、1から5の任意の数字を設定してください。
解析レベルは、1が最も厳密で、5が最少となります。

> vendor\bin\phan --init --init-level=5

今回は最低限でよいので、5をチョイス。

完了すると、同フォルダ配下に、

.phan\config.php

という設定ファイルができあがっています。

(3) 解析対象の設定
(2) で作成された.phan\config.phpを開き、directory_listで検索、その中に解析対象を記入しましょう。
依存関係のあるフォルダ or ファイルも記入します。

解析対象がC:\php\srcで、C:\php\lib配下のファイルに依存している場合は以下の通り。

    'directory_list' => [
         'C:\php\src',
         'C:\php\lib',
         'vendor',
    ],

(4) 解析対象外の設定

解析結果出力対象以外は、exclude_analysis_directory_listに記載しておくことで、除外できます。

今回は、C:\php\srcのみ解析したいので以下の通り記述。

    'exclude_analysis_directory_list' => [
         'C:\php\lib',
         'vendor',
    ],

4. 解析の実行

解析を実行します。
analyze.txtファイルに解析結果を出力する場合は以下の通り。

> phan -p -o analyze.txt

※コマンド実行でファイルも作成されるので、あらかじめ作っておく必要はありません。

以上!

終わりに

プログラムの整合性チェックや、バージョンアップなどに重宝しそう♪

参考

1
2
0

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
1
2