SC2002: 不要なcat — パイプラインでのcatの不必要な使用
シェルパイプラインでの不要なcatコマンドを排除。入力リダイレクトとコマンド引数を使った効率的な代替方法を解説します。
Anti-Patterns
詳細な説明
不要なcatの使用
「不要なcatの使用」(UUOC)は、ファイルを直接読み取れるコマンドにファイルの内容をパイプするためにcatを不必要に使用する、よく知られたシェルスクリプトのアンチパターンです。
アンチパターン
# 悪い例: 不要なcat
cat file.txt | grep "error"
cat file.txt | wc -l
cat file.txt | sort | uniq
cat config.yml | head -20
修正方法
ほとんどのコマンドは引数または入力リダイレクションでファイルを直接読み取れます:
# 良い例: ファイルを直接引数に
grep "error" file.txt
wc -l file.txt
sort file.txt | uniq
head -20 config.yml
# 良い例: 入力リダイレクション
grep "error" < file.txt
wc -l < file.txt
sort < file.txt | uniq
なぜ重要か
- パフォーマンス: 不要な追加プロセスとパイプ
- エラーハンドリング: ファイルが存在しない場合、catのエラーメッセージがパイプラインの出力と混在
- シグナル: パイプラインに不要なプロセスを追加
catが有用な場合
# 複数ファイルの連結(catの本来の目的)
cat header.txt body.txt footer.txt > page.html
# ファイル内容のターミナル表示
cat file.txt # 正当な使用
# 特殊オプション付きのcat
cat -n file.txt # 行番号表示
cat -A file.txt # 非表示文字を表示
ユースケース
コードレビュー、スクリプト最適化、スタイル強制。機能的なバグではありませんが、不要なcatの排除は読みやすさの向上、プロセスオーバーヘッドの削減、シェルスクリプトの能力を示します。