はじめに
PRレビューの現場で「grepで確認してください」と言われて困った経験はありませんか?この記事では、PRレビューで実際に使われるgrepコマンドの基本から応用まで、具体例とともに解説します。
grepコマンドとは?
grep
は「Global Regular Expression Print」の略で、ファイル内の文字列を検索するためのコマンドラインツールです。PRレビューでは、コードの品質チェックや潜在的な問題の発見に活用されています。
基本的な使い方
基本構文
grep [オプション] "検索文字列" ファイル名
よく使われるオプション
オプション | 説明 | 使用例 |
---|---|---|
-r |
ディレクトリを再帰的に検索 | grep -r "TODO" src/ |
-n |
行番号を表示 | grep -n "console.log" app.js |
-i |
大文字小文字を無視 | grep -i "error" log.txt |
-v |
マッチしない行を表示 | grep -v "test" app.js |
-c |
マッチした行数をカウント | grep -c "function" app.js |
-l |
マッチしたファイル名のみ表示 | grep -l "API_KEY" *.js |
PRレビューでの実践的な使い方
1. デバッグコードの検出
目的: 本番環境に不要なデバッグコードが残っていないかチェック
# console.logの残存チェック
grep -r "console.log" src/
# debuggerの残存チェック
grep -r "debugger" src/
# alertの残存チェック
grep -r "alert(" src/
2. TODO・FIXMEコメントの確認
目的: 未完了のタスクや修正点を把握
# TODOコメントを検索
grep -rn "TODO" src/
# FIXMEコメントを検索
grep -rn "FIXME" src/
# HACKコメントを検索
grep -rn "HACK" src/
3. セキュリティ関連の検証
目的: 機密情報の漏洩やセキュリティホールを防ぐ
# パスワードやAPIキーの検索
grep -ri "password\|api_key\|secret" src/
# ハードコードされた認証情報をチェック
grep -r "localhost:3000\|127.0.0.1" src/
# SQLインジェクションの可能性をチェック
grep -r "query.*+.*req\." src/
4. コーディング規約の確認
目的: プロジェクトのコーディング規約に準拠しているかチェック
# var宣言の使用チェック(ES6+ではlet/constを推奨)
grep -rn "var " src/
# == の使用チェック(=== を推奨)
grep -rn " == " src/
# タブとスペースの混在チェック
grep -P "\t" src/*.js
5. 依存関係とimport文の確認
目的: 不要なimportや依存関係を検出
# 未使用のimportを検索
grep -r "import.*from" src/ | grep -v "export"
# 特定のライブラリの使用箇所を確認
grep -r "lodash\|moment\|jquery" src/
# 相対パスのimportをチェック
grep -r "from '\.\./\.\./\.\." src/
高度なgrepテクニック
1. 正規表現を使った検索
# メールアドレス形式の文字列を検索
grep -r "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}" src/
# 電話番号形式を検索
grep -r "[0-9]\{3\}-[0-9]\{4\}-[0-9]\{4\}" src/
# URLの検索
grep -r "https\?://[^[:space:]]*" src/
2. 複数条件での検索
# ORで複数パターンを検索
grep -r "error\|Error\|ERROR" src/
# ANDで複数条件(パイプを使用)
grep -r "function" src/ | grep "async"
# 特定の拡張子のみ検索
grep -r "useState" src/ --include="*.js" --include="*.jsx"
3. 除外パターンの指定
# node_modulesを除外して検索
grep -r "import" src/ --exclude-dir=node_modules
# テストファイルを除外
grep -r "console.log" src/ --exclude="*.test.js" --exclude="*.spec.js"
# 複数ディレクトリを除外
grep -r "API_KEY" . --exclude-dir={node_modules,dist,build}
PRレビューでのワークフロー例
ステップ1: 基本的なコード品質チェック
# デバッグコードの確認
grep -rn "console\|debugger\|alert" src/
# コメントアウトされたコードの確認
grep -rn "//.*console\|//.*debugger" src/
ステップ2: セキュリティチェック
# 機密情報の漏洩チェック
grep -ri "password\|secret\|key\|token" src/ --exclude-dir=node_modules
# 開発環境固有の設定が残っていないかチェック
grep -r "localhost\|127.0.0.1\|development" src/
ステップ3: コーディング規約チェック
# 非推奨パターンの使用チェック
grep -rn "var \|==\|!=" src/ --include="*.js"
効率的な使い方のコツ
1. エイリアスの活用
よく使うコマンドはエイリアスに登録しておくと便利です:
# .bashrcや.zshrcに追加
alias grepjs="grep -rn --include='*.js' --include='*.jsx'"
alias greptodo="grep -rn 'TODO\|FIXME\|HACK'"
alias grepsec="grep -ri 'password\|secret\|key' --exclude-dir=node_modules"
2. パイプとの組み合わせ
# 結果を見やすくソート
grep -r "import" src/ | sort
# 重複を除去
grep -r "from 'react'" src/ | sort | uniq
# 結果をカウント
grep -r "useState" src/ | wc -l
3. ファイル形式別の検索
# JavaScript/TypeScriptファイルのみ
grep -r "pattern" src/ --include="*.{js,jsx,ts,tsx}"
# CSSファイルのみ
grep -r "color:" src/ --include="*.{css,scss,sass}"
# 設定ファイルのみ
grep -r "port" . --include="*.{json,yaml,yml,env}"
よくある質問とトラブルシューティング
Q: 検索結果が多すぎて見づらい
# lessでページング表示
grep -r "pattern" src/ | less
# 最初の10件のみ表示
grep -r "pattern" src/ | head -10
Q: バイナリファイルも検索対象になってしまう
# テキストファイルのみ検索
grep -r "pattern" src/ --text
# または-Iオプションでバイナリファイルを除外
grep -rI "pattern" src/
Q: 特定のディレクトリを除外したい
# 複数ディレクトリを除外
grep -r "pattern" . --exclude-dir={node_modules,dist,coverage,build}
まとめ
grepコマンドをPRレビューで活用することで、以下のような効果が期待できます:
- コード品質の向上: デバッグコードや非推奨パターンの早期発見
- セキュリティの強化: 機密情報漏洩リスクの軽減
- レビュー効率の改善: 手動チェックでは見落としがちな問題の自動検出
- チーム全体のスキル向上: 共通のチェック項目の標準化
PRレビューでgrepを使いこなして、より高品質なコードレビューを実現しましょう!