[bash] ToDoコメントを一括で抽出する方法
2 min read
背景
長年運用されたシステムのソースコードから、ToDoコメントを抽出する必要があった。
ソースコードはフロントエンドのソースで、JSDoc形式でコメントが記述されている。
仕様
- 検索する文字列
JSDocからToDoコメントを検索するので@todo
が検索できるようにする。ただし、表記ゆれを考慮しtodo
は大文字小文字を区別しない。 - 検索対象
指定されたディレクトリ内の全てのファイルを検索する。
ただし、node_modules
ディレクトリは除外する。 - 出力フォーマット
出力される各行は、以下の形式で出力する。- ファイル名:
- [ ] ファイルパス
- ToDoコメント:
- [ ] todo: コメントの内容
- ToDoコメント:
- ファイル名:
実装
#!/bin/bash
search_dir="."
search_string="@todo"
find "$search_dir" -type d -name "node_modules" -prune -o -type f -print | while read -r file; do
if grep -iq "$search_string" "$file"; then
echo "- [ ] $file"
grep -in "$search_string" "$file" | awk -F: '{print " - [ ] todo: " $2}'
fi
done
上記を実行することで、以下のような出力が得られる。
- [ ] ./next/src/compiled/react-dom/cjs/react-dom.production.js
- [ ] todo: // @TODO refactor this block to create the instance here in complete
- [ ] ./next/src/compiled/react-dom/cjs/react-dom-server.edge.production.js
- [ ] todo: // @TODO add bootstrap script to implicit preloads
- [ ] todo: // @TODO refactor text separators so we don't have to defensively add
- [ ] ./next/src/compiled/react-dom/cjs/react-dom.profiling.js
- [ ] todo: // @TODO refactor this block to create the instance here in complete
- [ ] ./next/src/compiled/react-dom/cjs/react-dom-server.bun.production.js
- [ ] todo: // @TODO add bootstrap script to implicit preloads
- [ ] todo: // @TODO refactor text separators so we don't have to defensively add