このハンズオンでは、Goにおけるモダンな静的解析ツールの作り方を学びます。 基本的なGoの文法などは、このハンズオンでは扱いません。
このハンズオンを行うには、以下の準備が必要です。
- Go 1.26以上のインストール
このハンズオンを行うと以下のことが学べます。
- 静的解析ツールの基本的な作り方と
go vetから動かす方法 - 抽象構文木(Abstract Syntax Tree, AST)の走査
- 修正案を提示して自動で適用できるようにする方法
- 型情報を使って検出の精度を上げる方法
- Analyzerに共通処理をまとめる仕組み
このハンズオンでは、fmt.Errorf関数やerrors.New関数の使用を検出するerrvetという静的解析ツールを、ステップを進めながら作っていきます。
一方、学べないことは以下のとおりです。
- Goの開発環境のインストール方法
- IDEやエディタの設定
- 基本的な文法
skeletonディレクトリ以下に問題があり、5つのステップに分けられています。
STEP 01からSTEP 05までステップごとに進めていくことで、Goにおけるモダンな静的解析ツールの作り方に関する知識が学べます。
各ステップに、READMEが用意されていますので、まずはREADMEを読みます。
READMEには、そのステップを理解するための解説が書かれています。
READMEを読んだら、ソースコードを開きTODOコメントが書かれている箇所をコメントに従って修正して行きます。
TODOコメントをすべて修正し終わったら、READMEに書かれた実行例に従ってプログラムをコンパイルして実行します。
途中でわからなくなった場合は、solutionディレクトリ以下に解答例を用意していますので、そちらをご覧ください。
- STEP 01: 静的解析ツールを作って動かそう(解答例)
- STEP 02: 静的解析ツールを modernize しよう(解答例)
- STEP 03: コードを自動修正できるようにしよう(解答例)
- STEP 04: 静的解析の精度を高めよう(解答例)
- STEP 05: 共通処理をまとめよう(解答例)
この資料を元にハンズオンを開催するために@tenntennの許可などはいりません。 好きに開催してください。 @tenntennの行ける範囲であれば、開催するから解説して欲しいという依頼もウェルカムです。
なお、forkして変更してもらっても構いませんが、できればPRをいただけると嬉しいです。 資料に間違えを発見した方もissueやPRを頂ければ対応します。