Infer は、Meta(旧Facebook)が開発した プログラムの静的解析ツール です。
ソースコードを実行することなく、潜在的なバグやメモリリーク、ヌルポインタ参照などを検出することができます。
JavaやC/C++/Objective-Cのコードを解析できます。
Infer は、Windows環境をサポートしておらず Linux環境で動作します。
WSL上のUbuntuに Inferをインストールしてみました。
✅ ステップ 1:WSL Ubuntu のセットアップ
WSL Ubuntu、開発ツールをインストールしている場合は、次のステップに行ってください。
以下の手順でセットアップできます。
WSL 2 を使っているか確認
PowerShell(管理者権限)で以下を実行し、WSLがインストール・WSL 2が有効か確認します:
> wsl --list --verbose
NAME STATE VERSION
* Ubuntu-24.04 Running 2
インストールされていると状態が表示されます。
表示されないときはインストールします。
> wsl --install
Ubuntu が WSL 2 として表示されていない場合は設定を行います。
> wsl --set-version Ubuntu-xx.xx *1
*1 xx.xxはubuntu‑20.04や22.04など
インストール後、Ubuntuの初回起動時にユーザー名とパスワードを設定します。
WSL 内 Ubuntu の更新と必要ツールのインストール
Ubuntu ターミナルを開き、以下を実行します。
Ubuntuが起動したら、以下でパッケージを更新
$ sudo apt update
$ sudo apt upgrade -y
必要なツールをインストールします。
これはバイナリ版だけでなく、後のソースビルドにも役立ちます。
$ sudo apt install curl xz-utils build-essential pkg-config git
✅ ステップ 2:Infer のインストール方法
Inferは以下のいずれかの方法でインストールできます。
ソースからビルドすると最新版をインストールできるメリットがありますが、簡単にインストールするためバイナリを使用しました。
参考のためソースからビルドする方法も記載しておきます。
※試していないので異なることがあります。
🔹 バイナリを使う(簡単・推奨)
最新バージョンを確認し、以下のコマンドをUbuntuで実行(VERSION=1.2.0などに置き換えてください):
$ VERSION=1.2.0
$ curl -sSL "https://github.com/facebook/infer/releases/download/v$VERSION/infer-linux-x86_64-v$VERSION.tar.xz" \
| sudo tar -C /opt -xJ && \
sudo ln -s "/opt/infer-linux-x86_64-v$VERSION/bin/infer" /usr/local/bin/infer
インストール確認
$ infer --version
Infer version v1.2.0
Copyright 2009 - present Facebook. All Rights Reserved.
🔹 方法 B:ソースからビルド(時間がかかる)
必要な依存パッケージをインストール:
$ sudo apt install opam pkg-config default-jdk cmake ninja-build gcc g++ autoconf automake
Inferをクローンしてビルド:
$ git clone https://github.com/facebook/infer.git
$ cd infer
# Java解析付き:
$ ./build-infer.sh java
C/C++/Objective‑C解析付きなら:
$ ./build-infer.sh clang
システムにインストール:
# system-wide に導入
$ sudo make install
または、PATHに追加:
# PATHに追加したい場合(/usr/local/binを使わない場合)
$ export PATH="$(pwd)/infer/bin:$PATH"
✅ ステップ 3:動作確認
サンプルのソースコードを用意します。
// hello.c
#include <stdlib.h>
void test() {
int *s = NULL;
*s = 42;
}
実行します。
nullポインターの参照が検出されています。
$ infer -- clang -c sample.c
Capturing in make/cc mode...
Found 1 source file to analyze in /mnt/c/test/infer-out
2/2 [################################################################################] 100% 308ms
sample.c:6: error: Null Dereference
`s` could be null (null value originating from line 5) and is dereferenced.
4. void test() {
5. int *s = NULL;
6. *s = 42;
^
7. }
Found 1 issue
Issue Type(ISSUED_TYPE_ID): #
Null Dereference(NULLPTR_DEREFERENCE): 1