1. ホーム
  2. 記事一覧
  3. 「git clean」でプロジェクトの整理を!安全にきれいを保つ方法

2024.05.12

「git clean」でプロジェクトの整理を!安全にきれいを保つ方法

はじめに

アプリ開発において「Git」は必須スキルになっています。Gitには様々なコマンドが存在し、それらを適切に使用することで、開発作業の安全性を高め、効率化を実現できます。

開発プロジェクトにおいて、テスト実施やバグ修正のために、一時的にテストファイルを作成することがよくあります。テストが終了した後、不要となるファイルを削除する必要がありますが、一つずつ手動で削除するのは大変です。また、必要なファイルを間違えて削除しそうになり、ヒヤっとした経験があります。このような場面では、「git clean」を使用すると、プロジェクト内で不要となったファイルを効率的にクリーンアップすることが可能です。「git clean」の使用には十分な注意が必要ですが、適切に使用すれば便利で強力なコマンドです。この記事では、ファイルを削除するコマンド「git rm」との違いもあわせて「git clean」を解説します。

様々なGitコマンドを習得し、Gitマスターを目指しましょう!

「git clean」について

git cleanコマンドは、Gitの追跡対象外のファイルをワーキングディレクトリから削除します。追跡対象外ファイルとは、リポジトリ内で生成されたが、git addコマンドを使用してステージングされていないファイルのことを指します。テスト実施やバグ修正の過程で一時的に作成されたファイルをはじめ、プロジェクト内で不要となったファイルのクリーンアップにgit cleanは有効です。追跡対象外ファイルは以下のコマンドで調べることができます。この実行結果ではUntracked files:にリストアップされている、Fix.jsxTest.jsxが追跡対象外ファイルです。

git status 
On branch feature#1
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        Fix.jsx
        Test.jsx

nothing added to commit but untracked files present (use "git add" to track)

「git rm」との違い

git rmもファイルを削除するコマンドですが、git cleanと何が異なるのでしょうか?実はgit rmは追跡対象外ファイルを削除することはできません。git rmは現在のHEADに存在し、最新コミットに登録されているファイルに対してのみ実行可能です。これは、git rmが削除できるのは、Gitによって管理されている(追跡されている)ファイルのみであることを意味します。

以下は追跡対象外のファイルにgit rmを試みた際の結果です。メッセージfatal: pathspec 'Fix.jsx' did not match any filesは、Gitの追跡対象外であるか、存在しないファイルということを示しています。git rmは、HEADに存在し追跡されているファイルにのみ機能するということが分かります。

git rm Fix.jsx 
fatal: pathspec 'Fix.jsx' did not match any files

「git clean」使用の際の注意点

データの復元が困難となる

git cleanで削除されるファイルはGitの追跡対象外ファイルのため、Gitを使ってファイルを復元することはできません。コマンド実行前に必ず削除対象となるファイルを確認し、必要なファイルが削除されないようにすることが必須です。

安全な使用のためのオプションの理解

git cleanコマンドを安全に利用するためには、その様々なオプションをしっかりと理解し、適切に活用することが重要です。これにより、コマンドの実行前に具体的にどの操作が行われるかを確認したり、対話モードを利用して削除する項目を細かく指定することが可能になります。開発者が不要データの削除にストレスを感じないよう、様々な工夫が施されています。これらのオプションを理解し適切に使用することで、リスクを最小限に抑えつつ、安全かつ効率的にファイルのクリーンアップを進めることができます。

「git clean」コマンドの開発現場での活用例

  • ビルド後のクリーンアップ

    プロジェクトのビルドプロセス中に生成された一時ファイルやディレクトリが不要になった場合、git cleanを使用することでプロジェクト内を整理できます。

  • テストファイルの削除

    テストコードを書いたりテストデータを生成した際に、後にそのファイルが不要になることがあります。git cleanを使用することで、これらの一時的なファイルを簡単にクリーンアップできます。

  • 新しいブランチへの切り替え時の整理

    開発の中で新しいブランチに切り替える際に、前のブランチで生成した未追跡ファイルがあると、後にプロジェクト内が煩雑になります。git cleanを使用してこれら不要なファイルを削除し、新しいブランチでの作業をスムーズに開始します。

「git clean」の使い方

大規模なプロジェクトでは、ファイル数が急増し、テストやバグ修正の機会も多く発生します。その度にテストデータなどを作成し、修正作業やテストを実施します。作業が終了した後、不要になったテストデータやバグ修正ファイルは、プロジェクトの整理を目的として削除されます。このような場面で、git cleanコマンドが非常に役立ちます。git cleanは通常、様々なオプションを組み合わせて利用されるため、その具体的な使い方は次のセクション「git cleanのオプション紹介」で詳しく説明します。

「git clean」のオプション紹介

このセクションではgit cleanの使い方を、様々なオプションと共に紹介します。実際の開発では、git cleanを安全かつ確実に実行するために、複数のオプションを組み合わせて利用されることが一般的です。実際にコマンドを実行する前に、入力されたコマンドがどのような操作を行うのかをテストし、確認することが推奨されます。さらに、特定のオプションと使用しないとgit cleanが実行されないケースもあります。ファイルが削除された後のデータ復旧は不可能なので、コマンド操作を一つずつ慎重に確認しながら実行しましょう。

項目説明
--force, -f実際にgit cleanを実行
--dry-run, -nコマンドの実行テストを行い「何が削除されるか」を確認
-d未追跡のディレクトリを削除
-x.gitignoreに設定されている未追跡ファイルやディレクトリを含めるすべてのファイルを削除
-X.gitignoreに設定されている未追跡ファイルのみを削除
-iコマンドラインでインタラクティブモードを使用

--force, -f

git cleanを実際に(強制的に)実行するためのオプションです。Gitの設定clean.requireForceはデフォルトでTrueに設定されており、このオプションを指定しないとgit cleanが実行できません。clean.requireForceの設定は、Gitで管理されているファイルやディレクトリを保護するための安全装置として機能します。これは、誤って作業ディレクトリ内のファイルやディレクトリを削除するリスクを減らす目的があります。

git clean -f [削除するファイル名]

clean.requireForceの設定は以下のコマンドで調べられます。以下の実行結果はデフォルトの設定、Trueとなっています。

git config --global clean.requireForce
true

--dry-run, -n

git clean -nは実行前にテスト実行を行い、何が削除されるかを事前に確認することができます。テスト実行することで、誤って重要なファイルを削除するリスクを減らします。-nオプションは、ファイルを安全に削除するための確認ステップとして非常に役立ち、意図しないデータ損失を防ぐための重要なツールです。

git clean -n [削除するファイル名]

git clean -nの実行結果です。以下の実行結果を通して、指定したファイルTest.jsxが削除されることを事前に確認できます。

git clean -n Test.jsx
Would remove Test.jsx

-d

未追跡のファイルだけでなく、未追跡のディレクトリも削除します。削除対象のディレクトリ内にファイルが含まれていても、そのディレクトリと一緒にファイルも削除されます。通常のgit cleanコマンドは未追跡のファイルのみを対象としますが、-dオプションを付けることで、未追跡のディレクトリも削除することが可能になります。このオプションは、作業ディレクトリをより徹底的にクリーンアップしたいときに利用されます。

git clean -d [削除するディレクトリ名]

git clean -dの実行結果です。-dオプションのみでは削除ができないため、-fオプションも併せて使用しています。ディレクトリとその中に格納されているファイルが削除されました。

git clean -df test/
Removing test/

-x

.gitignoreファイルに記載されている、無視される(Gitによって追跡されない)ファイルを含めて、作業ディレクトリ内の未追跡ファイルをすべて削除します。通常、git cleanコマンドはこれらの無視されたファイルを削除しませんが、-xオプションを使用することで、より徹底的なクリーニングを行うことが可能です。

git clean -x

app.logというファイルを作成してテストをします。.gitignore の3行目に*.logの記載があるため、app.logファイルは無視されたファイルとなります。

この状態でgit clean -xnをテスト実行します。通常は削除対象とならない.gitignore に記載されているファイルも削除対象となります。

git clean -xn
Would remove app.log  ←.gitignore に記載されているファイルも削除対象となります
Would remove src/components/Test.jsx 

-X

.gitignoreファイルに記載されている、無視される(Gitによって追跡されない)ファイルだけを削除します。-xと似ていますが、こちらは.gitignoreで設定された無視ファイルのみに対象を限定して削除します。

git clean -X

git clean -Xnの実行結果です。git clean -xnの時とは異なり、.gitignoreに設定されていないsrc/components/Test.jsx は対象外となり、app.logのみが削除対象となります。

git clean -Xn                                                                 
Would remove app.log

-i

コマンドラインでインタラクティブモードを利用します。未追跡のファイルやディレクトリを削除する前に、ユーザーに一つずつ確認を求めるようになります。これにより、ユーザーは削除されるファイルを確認しながら指定することができるため、誤って重要なファイルを削除するリスクを減らすことが可能です。

git clean -i

git clean -iを実行すると、以下のコマンド選択肢が表示されます。インタラクティブモード(対話モード)での作業が可能になります。

 git clean -i
Would remove the following items:
  Test-2.js   Test-2.jsx  Test-3.js   Test-3.jsx  Test.js     Test.jsx
*** Commands ***
    1: clean                2: filter by pattern    3: select by numbers
    4: ask each             5: quit                 6: help

各コマンドの内容は以下のとおりです。

  1. clean:指定したファイルを削除します
  2. filter by pattern:特定のパターンをフィルタリングして削除ファイルを選択します
  3. select by numbers:リストアップされたファイルの中から、削除するファイルを指定します
  4. ask each: リストされた各ファイルについて、1つずつ削除するかどうかを確認します
  5. quit:ファイルを削除せずコマンドを終了します
  6. help:コマンドのヘルプを表示します
  • 2:filter by patternfilter by pattern

    特定のパターンに基づいてファイルをフィルタリングし、削除対象のファイルを選択します。例えば、特定の拡張子を持つファイルを削除する際などに利用されます。

    • フィルタリングする条件を入力して、削除するファイルを選択します。

    • フィルタリングが完了すると、削除対象ファイルが表示されます。実行例の削除対象ファイルは以下の通りです。

      Would remove the following items:Test-2.js Test-3.js Test.js

    • その後、再度コマンド選択肢が表示されるので、cleanを選択しファイルを削除します。

 git clean -i
Would remove the following items:
  Test-2.js   Test-2.jsx  Test-3.js   Test-3.jsx  Test.js     Test.jsx
*** Commands ***
    1: clean                2: filter by pattern    3: select by numbers
    4: ask each             5: quit                 6: help
What now> 2
  Test-2.js   Test-2.jsx  Test-3.js   Test-3.jsx  Test.js     Test.jsx
Input ignore patterns>> *.jsx
  Test-2.js  Test-3.js  Test.js
Input ignore patterns>>   ←未入力の状態でエンターを押すとフィルタリングが終了します
Would remove the following items:
  Test-2.js  Test-3.js  Test.js
*** Commands ***
    1: clean                2: filter by pattern    3: select by numbers
    4: ask each             5: quit                 6: help
What now> c
Removing Test-2.js
Removing Test-3.js
Removing Test.js
  • 3:select by numbersselect by numbers

    リストアップされたファイルの中から、削除したいファイルを番号で指定します。この方法では、コマンドを一つずつ確認しながら、より慎重に作業を進めることができます。

    • 削除対象ファイルがリストアップされた後、削除したいファイルを指定します。

    • 指定が完了すると、削除対象ファイルが表示されます。実行例の削除対象ファイルは以下の通りです。

      Would remove the following item: Test.js

    • その後、再度コマンド選択肢が表示されるので、cleanを選択しファイルを削除します。

git clean -i
Would remove the following items:
  Test-2.js   Test-2.jsx  Test-3.js   Test-3.jsx  Test.js     Test.jsx  
*** Commands ***
    1: clean                2: filter by pattern    3: select by numbers
    4: ask each             5: quit                 6: help
What now> s
    1: Test-2.js     2: Test-2.jsx    3: Test-3.js     4: Test-3.jsx
    5: Test.js       6: Test.jsx
Select items to delete>> 5
    1: Test-2.js     2: Test-2.jsx    3: Test-3.js     4: Test-3.jsx
  * 5: Test.js       6: Test.jsx
Select items to delete>>   ←未入力の状態でエンターを押すとファイル指定が終了します
Would remove the following item:
  Test.js
*** Commands ***
    1: clean                2: filter by pattern    3: select by numbers
    4: ask each             5: quit                 6: help
What now> 1
Removing Test.js
  • 4:ask each

    削除対象となるファイルが1つずつ表示され、ユーザーはそれぞれについて削除するかどうかを順番に選択します。ファイルを1つずつ確認しながら慎重に作業を行うことができます。

    • 削除対象になるファイルが1つずつ表示されます。
    • 削除するかどうか、yまたはNを指定します。
    • すべての削除対象ファイルの指定が完了した後、最終的にyを選択したファイルのみが削除されます。
 git clean -i
Would remove the following items:
  Test-2.js   Test-2.jsx  Test-3.js   Test-3.jsx  Test.js     Test.jsx
*** Commands ***
    1: clean                2: filter by pattern    3: select by numbers
    4: ask each             5: quit                 6: help
What now> a
Remove Test-2.js [y/N]? N
Remove Test-2.jsx [y/N]? N
Remove Test-3.js [y/N]? N
Remove Test-3.jsx [y/N]? N
Remove Test.js [y/N]? y
Remove Test.jsx [y/N]? N
Removing Test.js

この記事で学んだこと

この記事を通じて、「git clean」に関連する様々な知識を得ることができました。簡単に振り返ってみましょう。

「git clean」について

git cleanコマンドは、Gitの追跡対象外のファイルをワーキングディレクトリから削除します。一方、git rmでもファイルを削除できますが、これは追跡されているファイルの削除に用いられ、追跡対象外のファイルを削除することはできません。

git cleanによって削除されるファイルは、Gitを介してファイルを復元することはできないため、誤って必要なファイルを削除しないよう注意が必要です。適切に使用すれば、プロジェクトのクリーンアップを効率的に行うための便利で強力なツールとなります。

オプションへの理解が重要な理由

git cleanコマンドを安全に利用するためには、様々なオプションをしっかりと理解し、適切に活用することが重要です。これらのオプションには、コマンド実行前にどの操作が行われるかを詳細に確認できるものや、対話モードを使って削除対象の項目を細かく選択できるものなどがあります。これは、誤って重要なファイルを削除するリスクを低減させるために、オプションへの理解が不可欠であることを意味します。自分のニーズに合ったオプションを選択し、ファイル削除を安全かつ効果的に行いましょう。

この記事では「git clean」の基本や実際の利用法に至るまで、その活用法を詳しく解説してきました。

ぜひこのコマンドを日々の学習に取り込み、実践を積んで理解を深めていきましょう!

【番外編】USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話

IT未経験者必見 USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話

プログラミング塾に半年通えば、一人前になれると思っているあなた。それ、勘違いですよ。「なぜ間違いなの?」「正しい勉強法とは何なの?」ITを学び始める全ての人に知って欲しい。そう思って書きました。是非読んでみてください。

「フリーランスエンジニア」

近年やっと世間に浸透した言葉だ。ひと昔まえ、終身雇用は当たり前で、大企業に就職することは一種のステータスだった。しかし、そんな時代も終わり「優秀な人材は転職する」ことが当たり前の時代となる。フリーランスエンジニアに高価値が付く現在、ネットを見ると「未経験でも年収400万以上」などと書いてある。これに釣られて、多くの人がフリーランスになろうとITの世界に入ってきている。私もその中の1人だ。数年前、USBも知らない状態からITの世界に没入し、そこから約2年間、毎日勉学を行なった。他人の何十倍も努力した。そして、企業研修やIT塾で数多くの受講生の指導経験も得た。そこで私は、伸びるエンジニアとそうでないエンジニアをたくさん見てきた。そして、稼げるエンジニア、稼げないエンジニアを見てきた。

「成功する人とそうでない人の違いは何か?」

私が出した答えは、「量産型エンジニアか否か」である。今のエンジニア市場には、量産型エンジニアが溢れている!!ここでの量産型エンジニアの定義は以下の通りである。

比較的簡単に学習可能なWebフレームワーク(WordPress, Rails)やPython等の知識はあるが、ITの基本概念を理解していないため、単調な作業しかこなすことができないエンジニアのこと。

多くの人がフリーランスエンジニアを目指す時代に中途半端な知識や技術力でこの世界に飛び込むと返って過酷な労働条件で働くことになる。そこで、エンジニアを目指すあなたがどう学習していくべきかを私の経験を交えて書こうと思った。続きはこちらから、、、、

note記事3000いいね超えの殿堂記事 今すぐ読む

エンベーダー編集部

エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。

RareTECH 無料体験授業開催中! オンラインにて実施中! Top10%のエンジニアになる秘訣を伝授します! RareTECH講師への質疑応答可

関連記事