Linterを追加する
This commit is contained in:
parent
12d5c43c9e
commit
8ca1878481
14
Dockerfile.devtools
Normal file
14
Dockerfile.devtools
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
# mus
|
||||||
|
FROM alpine:3.20
|
||||||
|
|
||||||
|
# 必要なツールをインストール
|
||||||
|
RUN apk add --no-cache \
|
||||||
|
doxygen \
|
||||||
|
graphviz \
|
||||||
|
cppcheck \
|
||||||
|
clang-extra-tools # clang-tidy を含む
|
||||||
|
|
||||||
|
# 作業ディレクトリを設定
|
||||||
|
WORKDIR /work
|
||||||
|
|
||||||
|
ENTRYPOINT []
|
||||||
@ -1,11 +0,0 @@
|
|||||||
# mus
|
|
||||||
FROM alpine:3.20
|
|
||||||
|
|
||||||
# 必要なツールをインストール
|
|
||||||
RUN apk add --no-cache \
|
|
||||||
doxygen \
|
|
||||||
graphviz
|
|
||||||
|
|
||||||
WORKDIR /work
|
|
||||||
|
|
||||||
CMD ["doxygen", "Doxyfile"]
|
|
||||||
@ -2,10 +2,15 @@
|
|||||||
|
|
||||||
- [C/C++の開発環境](#ccの開発環境)
|
- [C/C++の開発環境](#ccの開発環境)
|
||||||
- [Linter](#linter)
|
- [Linter](#linter)
|
||||||
|
- [導入方法](#導入方法)
|
||||||
|
- [Dockerを活用する](#dockerを活用する)
|
||||||
|
- [Linterの使い方](#linterの使い方)
|
||||||
|
- [clang-tidy の使い方(C++向け)](#clang-tidy-の使い方c向け)
|
||||||
|
- [ccppcheck の使い方(C / C++ 両対応)](#ccppcheck-の使い方c--c-両対応)
|
||||||
- [テスト](#テスト)
|
- [テスト](#テスト)
|
||||||
- [Doc(ドキュメンテーション)](#docドキュメンテーション)
|
- [Doc(ドキュメンテーション)](#docドキュメンテーション)
|
||||||
- [環境構築](#環境構築)
|
- [環境構築](#環境構築)
|
||||||
- [Dockerを活用する](#dockerを活用する)
|
- [Dockerを活用する](#dockerを活用する-1)
|
||||||
- [doxygen 使い方](#doxygen-使い方)
|
- [doxygen 使い方](#doxygen-使い方)
|
||||||
- [CI / CDによる実行](#ci--cdによる実行)
|
- [CI / CDによる実行](#ci--cdによる実行)
|
||||||
- [Doxyfileの設定](#doxyfileの設定)
|
- [Doxyfileの設定](#doxyfileの設定)
|
||||||
@ -14,7 +19,121 @@
|
|||||||
|
|
||||||
## Linter
|
## Linter
|
||||||
|
|
||||||
TODO: TBD
|
ライブラリの候補
|
||||||
|
* **clang-tidy**
|
||||||
|
* 精度はかなり高い
|
||||||
|
* C++向け(Cはカバー範囲が狭い)
|
||||||
|
* **cppcheck**
|
||||||
|
* C/C++ 両方対応・軽量
|
||||||
|
* 導入が簡単にできる
|
||||||
|
|
||||||
|
### 導入方法
|
||||||
|
|
||||||
|
**Macの場合**
|
||||||
|
|
||||||
|
```sh
|
||||||
|
brew install cppcheck llvm
|
||||||
|
# パスの追加が必要
|
||||||
|
export PATH="/opt/homebrew/opt/llvm/bin:$PATH"
|
||||||
|
clang-tidy --version
|
||||||
|
cppcheck --version
|
||||||
|
```
|
||||||
|
|
||||||
|
* llvm: clang-tidy は llvm に含まれています
|
||||||
|
|
||||||
|
**Linux(Ubuntu)の場合**
|
||||||
|
|
||||||
|
```sh
|
||||||
|
sudo apt install cppcheck clang-tidy
|
||||||
|
clang-tidy --version
|
||||||
|
cppcheck --version
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Dockerを活用する
|
||||||
|
|
||||||
|
[Dockerfileはこちら](../Dockerfile.devtools)
|
||||||
|
|
||||||
|
Dockerイメージをビルドする
|
||||||
|
|
||||||
|
```sh
|
||||||
|
docker build -f Dockerfile.devtools -t c-dev-tools .
|
||||||
|
```
|
||||||
|
|
||||||
|
```sh
|
||||||
|
# docker run --rm -v "$(pwd)":/work -w /work c-dev-tools <コマンド>
|
||||||
|
```
|
||||||
|
|
||||||
|
### Linterの使い方
|
||||||
|
|
||||||
|
#### clang-tidy の使い方(C++向け)
|
||||||
|
|
||||||
|
**単一ファイルをチェックする例**
|
||||||
|
|
||||||
|
```sh
|
||||||
|
clang-tidy src/cpp/hello.cpp -- -Iinclude -std=c++17
|
||||||
|
# Docker
|
||||||
|
docker run --rm -v "$(pwd)":/work -w /work clang-tidy src/cpp/hello.cpp -- -Iinclude -std=c++17
|
||||||
|
```
|
||||||
|
|
||||||
|
* `--`以降がコンパイラフラグ(g++に渡すものと同じ)
|
||||||
|
* -Iinclude : ヘッダファイルのパス
|
||||||
|
* -std=c++17 : 使用している C++ のバージョン
|
||||||
|
|
||||||
|
**チェック内容を絞る使い方**
|
||||||
|
|
||||||
|
```sh
|
||||||
|
clang-tidy src/cpp/hello.cpp \
|
||||||
|
-checks='modernize-*,bugprone-*,readability-*' \
|
||||||
|
-- -Iinclude -std=c++17
|
||||||
|
```
|
||||||
|
|
||||||
|
よく使うチェックカテゴリ:
|
||||||
|
* bugprone-* : バグにつながるコード
|
||||||
|
* modernize-* : モダンC++スタイルへの改善提案
|
||||||
|
* readability-* : 可読性の改善
|
||||||
|
|
||||||
|
**プロジェクト全体**
|
||||||
|
|
||||||
|
CMake + compile_commands.jsonがある場合に以下の内容でできます
|
||||||
|
(clang-tidy は「コンパイル情報」がないと正しく解析できない)
|
||||||
|
compile_commands.jsonについては別途解説します。
|
||||||
|
|
||||||
|
```sh
|
||||||
|
mkdir -p build
|
||||||
|
cd build
|
||||||
|
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ..
|
||||||
|
|
||||||
|
# プロジェクト全体に対して実行
|
||||||
|
run-clang-tidy -p build
|
||||||
|
```
|
||||||
|
|
||||||
|
#### ccppcheck の使い方(C / C++ 両対応)
|
||||||
|
|
||||||
|
cppcheckはコンパイル不要で実行できる静的解析ツールです。
|
||||||
|
CでもC++でも同じコマンドで使えます。
|
||||||
|
|
||||||
|
**基本的な使い方**
|
||||||
|
|
||||||
|
```sh
|
||||||
|
cppcheck src/
|
||||||
|
# Docker
|
||||||
|
docker run --rm -v "$(pwd)":/work -w /work c-dev-tools cppcheck src/
|
||||||
|
```
|
||||||
|
|
||||||
|
**チェックレベルを広げる(おすすめ)**
|
||||||
|
|
||||||
|
```sh
|
||||||
|
cppcheck --enable=warning,style,performance,portability src/
|
||||||
|
# Docker
|
||||||
|
docker run --rm -v "$(pwd)":/work -w /work c-dev-tools \
|
||||||
|
cppcheck --enable=warning,style,performance,portability src/
|
||||||
|
```
|
||||||
|
|
||||||
|
* warning : 危険なコードやバグの可能性
|
||||||
|
* style : コーディングスタイル上の問題
|
||||||
|
* performance : 非効率なコード
|
||||||
|
* portability : 環境依存のコード
|
||||||
|
|
||||||
|
|
||||||
## テスト
|
## テスト
|
||||||
|
|
||||||
@ -47,28 +166,25 @@ sudo apt install doxygen graphviz
|
|||||||
|
|
||||||
#### Dockerを活用する
|
#### Dockerを活用する
|
||||||
|
|
||||||
[Dockerfileはこちら](../Dockerfile.doxygen)
|
[Dockerfileはこちら](../Dockerfile.devtools)
|
||||||
|
|
||||||
Dockerイメージをビルドする
|
Dockerイメージをビルドする
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
docker build -f Dockerfile.doxygen -t dev-doxygen .
|
docker build -f Dockerfile.devtools -t c-dev-tools .
|
||||||
```
|
```
|
||||||
|
|
||||||
Linuxでコマンドを実行する
|
Linuxでコマンドを実行する
|
||||||
|
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
mkdir -p docs
|
mkdir -p docs
|
||||||
# docker run --rm -v "$(pwd)":/work -w /work/docs dev-doxygen <コマンド>
|
# docker run --rm -v "$(pwd)":/work -w /work/docs c-dev-tools <コマンド>
|
||||||
# 初期化コマンド
|
# 初期化コマンド
|
||||||
docker run --rm -v "$(pwd)":/work -w /work/docs dev-doxygen doxygen -g
|
docker run --rm -v "$(pwd)":/work -w /work/docs c-dev-tools doxygen -g
|
||||||
# ドキュメントを生成する
|
# ドキュメントを生成する
|
||||||
docker run --rm -v "$(pwd)":/work -w /work/docs dev-doxygen doxygen Doxyfile
|
docker run --rm -v "$(pwd)":/work -w /work/docs c-dev-tools doxygen Doxyfile
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### doxygen 使い方
|
### doxygen 使い方
|
||||||
|
|
||||||
**設定ファイルを生成**
|
**設定ファイルを生成**
|
||||||
|
|||||||
@ -4,6 +4,10 @@
|
|||||||
// run: ./dist/hello
|
// run: ./dist/hello
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Main function
|
||||||
|
* @return int Exit status
|
||||||
|
*/
|
||||||
int main() {
|
int main() {
|
||||||
std::cout << "Hello, world!" << std::endl;
|
std::cout << "Hello, world!" << std::endl;
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user