.projectが存在するにも関わらず「プロジェクト記述ファイル (.project) がありません」によりプロジェクトが開けない

# 注意

本記事は以下の環境で、稼働確認を行いました。

- Windows 10 Home
- Pleiades All in One Eclipse (リリース 2019-06)

ただしWindowsやEclipseの異なるEditionやVersionでも同一の問題が発生することを確認しています。

# 現象

EclipseによるJavaプログラムの開発において、ワークスペースを開くと、プロジェクトがクローズ状態になっていることがあります。もちろん、そのプロジェクトをクローズした記憶などないにもかかわらずです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105859/980dd453-93e0-3138-422c-ccf18ce7aa16.png)

そこでクローズしているプロジェクトをダブルクリックなどで開こうとすると、以下のようなエラーになり、開けないという現象が発生しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105859/e4f35f9d-cb97-c2a2-1827-288df76f6433.png)

エラーメッセージは次の通りです。

> 'sample_project' のプロジェクト記述ファイル (.project) がありません。 このファイルには、プロジェクトに関する重要な情報が含まれています。 このファイルが復元されるまで、プロジェクトは正しく機能しません。

`.project`なる隠しファイルがないとのことですが、ファイルシステム上で確認すると、プロジェクトディレクトリ直下に`.project`が存在しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105859/dd7a65c0-865e-4f6c-e0f7-4df3f9e91dbd.png)


# 再現方法

今回の現象が発生する状況はさまざまだと思いますが、わたしの環境では以下の手順を踏むと問題が再現できました。

1. ワークスペース`workspace_a`を作成し、その配下にJavaプロジェクト`sample_project`を作成する
2. ワークスペース`workspace_b`を作成。ディレクトリ`sample_project`を`workspace_a`の配下から`workspace_b`の配下に移動。Eclipse上で`ファイル > ファイル・システムからプロジェクトを開く`を選択し、`sample_project`をインポートする。
3. ディレクトリ`workspace_c`を作成。ディレクトリ`workspace_b`の配下にあるふたつのディレクトリ`.metadata`と`sample_project`を`workspace_c`配下に移動する。その後`workspace_c`をワークスペースに指定してEclipseを起動すると、上述した現象が再現する。

下図: `ファイル > ファイル・システムからプロジェクトを開く`で`sample_project`をインポートする際のイメージ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105859/0abe06ad-bb73-26af-96db-e2f1adc4f13b.png)


# 対策1 (おすすめ)

まず開けなくなったプロジェクトを右クリックし`削除`を選択。その後`ディスク上からプロジェクト・コンテンツを削除`にチェックをつけずに`OK`を押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105859/96a24ccf-cf38-b104-6c2f-791e4833c8ce.png)

次に`ファイル > インポート > 既存プロジェクトをワークスペースへ`を選択し、`次へ`を押下すると、`プロジェクトのインポート`画面が起動します。ここで`ルートディレクトリの選択`にワークスペースのパスを入力し、さきほど削除したプロジェクトにチェックをつけ、`完了`を押下します。すると、さきほどまで正常に開くことができなかったプロジェクトが開けるようになっているはずです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105859/bada1199-302e-2b2f-9140-84c7914d2efb.png)

# 対策2 (おすすめでない)

プロジェクトが正常に開けなくなる原因はエラーメッセージにある`.project`ファイルではなく、`.location`ファイルが不正な状態に置かれたためです。`.location`ファイルのパスは次の通りになります: `${workspace}/.metadata/.plugins/org.eclipse.core.resources/.projects/${project_name}/.location`

ここでは、開けなくなったプロジェクトの`.location`ファイルを削除します。するとEclipseの再起動などなくとも、開けなかったプロジェクトが開けるようになっています。

ただし`.metadata`以下のファイルやディレクトリの管理はEclipseに任せるべきであり、手動で触るべきではありません。個人的な経験則では`.location`を削除しても問題になったことはありませんが、念のため、事前にバックアップをとるか、非可逆的に破壊されても問題ない環境で実施してください。

# 詳細

`sample_project`の`.location`は次のパスになります: `workspace_c/.metadata/.plugins/org.eclipse.core.resources/.projects/sample_project/.location` `.location`ファイルはバイナリなので、正確な内容は不明ですが、テキストエディタなどで無理やり開いてやると、なにやら絶対パスで`workspace_b/sample_project`を参照しているような記述が見て取れます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105859/bd821415-bcb8-4ac7-8def-4fb4b2df4a5d.png)

「再現方法」の手順3.において、`sample_project`を`workspace_b`から`workspace_c`に移動しており、`workspace_b/sample_project`は存在しません。つまり存在しないパスを参照しているためにプロジェクトが正常に開けなくなっているものと考えられます。

最後に「`.location`ファイルになぜ絶対パスが書かれてしまうのか?」という疑問ですが、正直なところこれはよくわかりません（´・ω・｀） 手順2.の`ファイル > ファイル・システムからプロジェクトを開く`が悪さをしているような気がしますが、詳細は不明です。

そもそも`.metadata`ディレクトリはそのワークスペースのメタデータを格納しています。つまり`.metadata`はワークスペースごとに固有であるべきにもかかわらず、手順3.で別のワークスペースの`.metadata`を移動しています。根本的にはこれがよくないといえそうです。