1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

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を使いこなして、より高品質なコードレビューを実現しましょう!

関連記事・参考リンク


1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?