Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
Dialyzer コトハジメ

Dialyzer コトハジメ

更新:2012-12-17
バージョン:0.0.1
作者:@voluntas
URL:http://voluntas.github.com/

概要

URL:http://www.erlang.org/doc/man/dialyzer.html

Dialyzer とは Erlang/OTP に標準で含まれる静的型解析ツールです。

使うまでに準備がいることや、実際どんなことをやってくれるのかがわかりにくいため、まとめてみました。

サンプルコード

コードが無いとわかりにくいのでサンプルコードをまとめました

https://github.com/voluntas/snowflake/tree/feature/dialyzer

Makefile

サンプルコードの Makefile を一部抜粋してます

依存ライブラリが不要な場合もあるため with-deps とそうじゃないものを用意してみました。

# メインのアプリケーション名を指定してください
APP_NAME = snowflake

# ベースとなる Erlang/OTP の PLT ファイルを生成します
# ./dialyzer は自由に変更して頂いてかまいません
# Erlang/OTP のバージョン毎に異なるファイルを作るのがベターだと思います
dialyze-build-otp-plt:
        dialyzer --build_plt --output_plt ~/.dialyzer.plt \
            --apps erts kernel stdlib sasl inets mnesia crypto \
                   public_key snmp reltool ssl

# 依存ライブラリの PLT ファイルを作りましょう
dialyze-build-deps-plt:
        dialyzer --build_plt --output_plt .$(APP_NAME)_deps.plt --apps deps/*

# 依存ライブラリを含んで静的解析を行います
dialyze-with-deps:
        dialyzer --check_plt --plt .$(APP_NAME)_deps.plt -c .
        dialyzer --plts ~/.dialyzer.plt .$(APP_NAME)_deps.plt --src src --no_native \
            -Wunmatched_returns -Werror_handling -Wrace_conditions \
            -Wunderspecs -Woverspecs

# 依存ライブラリを含まないで静的解析を行います
dialyze:
        dialyzer --plts ~/.dialyzer.plt --src src --no_native \
            -Wunmatched_returns -Werror_handling -Wrace_conditions \
            -Wunderspecs -Woverspecs

Erlang ライブラリの plt ファイルの生成

まずは Erlang/OTP コア部分の plt ファイルを生成する必要があります。 これにはとても時間がかかります、30 分程度を見ておいてください。

先ほどのサンプルであれば make dialyze-build-otp-plt と打てば良いです。

アプリケーションを追加したい場合は --apps に追加しましょう

Erlang/OTP のバージョン毎に用意したい場合は --output_plt の次の引数を変更しましょう

依存ライブラリの plt ファイル生成

先ほどのサンプルであれば make dialyze-build-deps-plt と打てば良いです。

こちらはローカルに用意するので問題無いと思います

アプリケーションの plt ファイル生成

今回はこの解説を省きます。--src と --no_native を使ってソースコード解析をするようにしています。

アプリケーションの plt ファイルを生成しないでソースコードのみで解析する

解析例

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment