# GitHub Codespaces の GPG 検証のトラブルシューティング

この記事では、codespace でのコミットの署名に関連するエラーのトラブルシューティングに関するアドバイスを提供します。

GPG 検証を有効にすると、GitHub Codespaces は、選んだリポジトリから作成した codespace でコミットに自動的に署名します。 詳しくは、「[GitHub Codespaces の GPG 検証の管理](/ja/codespaces/managing-your-codespaces/managing-gpg-verification-for-github-codespaces)」をご覧ください。

GPG 検証を有効にすると、関連するリポジトリから作成した新しい codespace で自動的に有効になります。 既存のアクティブな codespace で GPG 検証を有効にするには、codespace を停止して再起動する必要があります。 詳しくは、「[コードスペースの停止および開始](/ja/codespaces/developing-in-codespaces/stopping-and-starting-a-codespace)」をご覧ください。

GitHub Codespaces でコミットに署名できない場合は、コマンド ラインまたは Visual Studio Code のポップアップ ウィンドウにエラー メッセージ `gpg failed to sign the data` が表示されることがあります。

この記事の以下のセクションでは、このエラーの一般的な原因に関するトラブルシューティングのアドバイスを提供します。

* GitHub Codespaces の設定で以前に GPG 検証を有効にしており、最近 GPG 検証を無効にしたか、信頼するリポジトリの一覧からリポジトリを削除した場合は、Git が引き続きコミットに署名しようとしている可能性があります。 詳しくは、「[GPG 検証を無効にした後のエラー](#errors-after-disabling-gpg-verification)」をご覧ください。
* codespace に対して GPG 検証が有効になっている場合は、コミットの署名に必要な Git 構成をオーバーライドしている可能性があります。 詳しくは、「[競合する Git 構成によって発生するエラー](#errors-caused-by-conflicting-git-configuration)」をご覧ください。
* codespace に対して GPG 検証が無効になっており、VS Code の \[ソース管理] ビューからコミットしようとしたときにエラーが発生した場合は、VS Code の設定が原因である可能性があります。 詳しくは、「[VS Code の \[ソース管理\] ビューのエラー](#errors-in-the-vs-code-source-control-view)」をご覧ください。

## GPG 検証を無効にした後のエラー

GPG 検証を有効にすると、GitHub Codespaces は、codespace で行ったすべてのコミットに既定で署名します。 これは、`commit.gpgsign` Git 構成値を `true` に設定することによって行われます。

GPG 検証を無効にしていて、既存の codespace で作業している場合、この値は引き続き `true` に設定されます。 つまり、GitHub Codespaces はコミットに署名しようとしますが、GPG 検証設定を無効にしているため、それができません。

codespace で通常の署名なしのコミットを続ける場合は、ターミナルで次のコマンドを入力して、`commit.gpgsign` を `false` の既定値にリセットします。

```shell copy
git config --unset commit.gpgsign
```

値が構成から正しく削除されたことを確認するには、「`git config --list`」と入力します。
`commit.gpgsign` の値は一覧に表示されないはずです。

## 競合する Git 構成によって発生するエラー

コミットに自動的に署名するために、GitHub Codespaces は codespace に特定の Git 構成値を設定します。 GitHub Codespaces によって設定された値をオーバーライドすると、コミットに署名できない可能性があります。

GitHub Codespaces を Git 構成ファイルを含むドットファイル リポジトリにリンクしている場合、これらの値を誤ってオーバーライドしている可能性があります。 GitHub Codespaces でのドットファイルの使用について詳しくは、「[アカウントGitHub Codespaces のカスタマイズ](/ja/codespaces/setting-your-user-preferences/personalizing-github-codespaces-for-your-account#dotfiles)」をご覧ください。

### 構成の競合の確認

GPG でコミットに署名するために、GitHub Codespaces はシステム レベルで次の Git 構成値を自動的に設定します。

| 構成設定                | 必須値                                     |
| ------------------- | --------------------------------------- |
| `user.name`         | GitHub プロファイルに設定されているフル ネームと一致する必要があります |
| `credential.helper` |                                         |

```
          `/.codespaces/bin/gitcredential_github.sh` に設定されている必要があります。 |
```

\| `gpg.program` |
`/.codespaces/bin/gh-gpgsign` に設定されている必要があります。 |

これらの値が codespace で正しく設定されていることを確認するには、`git config --list --show-origin` コマンドを使用します。 GitHub Codespaces はシステム レベルでこの構成を設定するため、必要な構成設定は `/usr/local/etc/gitconfig` から行う必要があります。

```shell
$ git config --list --show-origin
file:/usr/local/etc/gitconfig   credential.helper=/.codespaces/bin/gitcredential_github.sh
file:/usr/local/etc/gitconfig   user.name=Mona Lisa
file:/usr/local/etc/gitconfig   gpg.program=/.codespaces/bin/gh-gpgsign
```

上記の値に加えて、codespace で使用されているドットファイルに次のいずれかの値が含まれていると、エラーが発生する可能性があります。

* `user.signingkey` の Git 構成値
* `commit.gpgsign` の Git 構成値
* 手動で設定された `GITHUB_TOKEN`

### 競合する構成の削除

GitHub Codespaces の自動 GPG 検証を有効にしたままにするには、codespace で使用されているドットファイルから競合する構成を削除する必要があります。

たとえば、ローカル コンピューター上のグローバル `.gitconfig` ファイルに `gpg.program` の値が含まれており、このファイルを GitHub Codespaces にリンクされているドットファイル リポジトリにプッシュした場合、代わりにこのファイルから `gpg.program` を削除し、ローカル コンピューターのシステム レベルで設定することができます。

> \[!NOTE]
> ドットファイル リポジトリに対する変更は、作成した新しい codespace には適用されますが、既存の codespace には適用されません。

1. ローカル コンピューターでターミナルを開きます。

2. 競合する値を `~/.gitconfig` (Mac/Linux) または `C:\Users\YOUR-USER\.gitconfig` (Windows) から削除するには、`git config --global --unset` コマンドを使用します。

   ```shell
   git config --global --unset gpg.program
   ```

3. 変更を GitHub のドットファイル リポジトリにプッシュします。

4. 必要に応じて、ローカル構成を保持するには、ドットファイル リポジトリにプッシュしない Git 構成ファイルで値をもう一度設定します。

   たとえば、`--system` フラグを使用して、`PATH/etc/gitconfig` のシステム レベル ファイルで構成を設定でます。ここで、`PATH` は Git がシステムにインストールされているディレクトリです。

   ```shell
   git config --system gpg.program gpg2
   ```

または、ドットファイル リポジトリに `install.sh` などの認識されたファイルのインストール スクリプトが含まれている場合は、`$CODESPACES` 環境変数を使用して、codespace にいない場合にのみ `gpg.program` を設定するなどの条件付きロジックを追加できます。 次の例では、codespace にいない場合、`-z "$CODESPACES"` が `true` を返します。

```shell copy
if [ -z "$CODESPACES" ]; then
  git config --global gpg.program gpg2
fi
```

## VS Code の \[ソース管理] ビューのエラー

GitHub Codespaces の設定で GPG 検証が無効になっている場合、または codespace を作成したリポジトリが信頼するリポジトリの一覧に含まれていない場合、Git によってコミットへの署名が試みられることはありません。 VS Code の \[ソース管理] ビューからコミットしようとしたときに署名エラーが発生する場合は、codespace で VS Code の設定をチェックする必要があります。

1. ウィンドウの左下隅にある **\[<svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-gear" aria-label="Manage" role="img"><path d="M8 0a8.2 8.2 0 0 1 .701.031C9.444.095 9.99.645 10.16 1.29l.288 1.107c.018.066.079.158.212.224.231.114.454.243.668.386.123.082.233.09.299.071l1.103-.303c.644-.176 1.392.021 1.82.63.27.385.506.792.704 1.218.315.675.111 1.422-.364 1.891l-.814.806c-.049.048-.098.147-.088.294.016.257.016.515 0 .772-.01.147.038.246.088.294l.814.806c.475.469.679 1.216.364 1.891a7.977 7.977 0 0 1-.704 1.217c-.428.61-1.176.807-1.82.63l-1.102-.302c-.067-.019-.177-.011-.3.071a5.909 5.909 0 0 1-.668.386c-.133.066-.194.158-.211.224l-.29 1.106c-.168.646-.715 1.196-1.458 1.26a8.006 8.006 0 0 1-1.402 0c-.743-.064-1.289-.614-1.458-1.26l-.289-1.106c-.018-.066-.079-.158-.212-.224a5.738 5.738 0 0 1-.668-.386c-.123-.082-.233-.09-.299-.071l-1.103.303c-.644.176-1.392-.021-1.82-.63a8.12 8.12 0 0 1-.704-1.218c-.315-.675-.111-1.422.363-1.891l.815-.806c.05-.048.098-.147.088-.294a6.214 6.214 0 0 1 0-.772c.01-.147-.038-.246-.088-.294l-.815-.806C.635 6.045.431 5.298.746 4.623a7.92 7.92 0 0 1 .704-1.217c.428-.61 1.176-.807 1.82-.63l1.102.302c.067.019.177.011.3-.071.214-.143.437-.272.668-.386.133-.066.194-.158.211-.224l.29-1.106C6.009.645 6.556.095 7.299.03 7.53.01 7.764 0 8 0Zm-.571 1.525c-.036.003-.108.036-.137.146l-.289 1.105c-.147.561-.549.967-.998 1.189-.173.086-.34.183-.5.29-.417.278-.97.423-1.529.27l-1.103-.303c-.109-.03-.175.016-.195.045-.22.312-.412.644-.573.99-.014.031-.021.11.059.19l.815.806c.411.406.562.957.53 1.456a4.709 4.709 0 0 0 0 .582c.032.499-.119 1.05-.53 1.456l-.815.806c-.081.08-.073.159-.059.19.162.346.353.677.573.989.02.03.085.076.195.046l1.102-.303c.56-.153 1.113-.008 1.53.27.161.107.328.204.501.29.447.222.85.629.997 1.189l.289 1.105c.029.109.101.143.137.146a6.6 6.6 0 0 0 1.142 0c.036-.003.108-.036.137-.146l.289-1.105c.147-.561.549-.967.998-1.189.173-.086.34-.183.5-.29.417-.278.97-.423 1.529-.27l1.103.303c.109.029.175-.016.195-.045.22-.313.411-.644.573-.99.014-.031.021-.11-.059-.19l-.815-.806c-.411-.406-.562-.957-.53-1.456a4.709 4.709 0 0 0 0-.582c-.032-.499.119-1.05.53-1.456l.815-.806c.081-.08.073-.159.059-.19a6.464 6.464 0 0 0-.573-.989c-.02-.03-.085-.076-.195-.046l-1.102.303c-.56.153-1.113.008-1.53-.27a4.44 4.44 0 0 0-.501-.29c-.447-.222-.85-.629-.997-1.189l-.289-1.105c-.029-.11-.101-.143-.137-.146a6.6 6.6 0 0 0-1.142 0ZM11 8a3 3 0 1 1-6 0 3 3 0 0 1 6 0ZM9.5 8a1.5 1.5 0 1 0-3.001.001A1.5 1.5 0 0 0 9.5 8Z"></path></svg>]** を選択し、 **\[設定]** をクリックします。

   ![VS Code Web クライアントのセクションのスクリーンショット。 メニューの歯車アイコンと \[設定\] オプションの両方がオレンジ色の枠線で強調表示されています。](/assets/images/help/codespaces/vscode-settings.png)

2. \[ユーザー] タブの検索バーで、「gpg」を検索します。

3. \[GPG または X.509 によるコミットの署名を有効にする] 設定がオフになっていることを確認します。

   ![\[User\] 設定タブのスクリーンショット。\[Enables commit signing with GPG or X.509\] というラベルのオフになったチェックボックスがオレンジ色の枠線で囲まれています。](/assets/images/help/codespaces/gpg-vscode-setting.png)

この設定が有効になっている場合は、チェックボックスをオフにして VS Code がコミットを署名しないようにするか、作業するリポジトリに対して GPG 検証を有効にして、コミットを正常に署名できるようにする必要があります。

VS Code の設定を変更する場合に、変更内容を作成した他の codespace と共有する場合は、Settings Sync が有効になっていることを確認する必要があります。 信頼するリポジトリから作成された codespace でのみ Settings Sync をオンにする必要があります。 詳しくは、「[アカウントGitHub Codespaces のカスタマイズ](/ja/codespaces/setting-your-user-preferences/personalizing-github-codespaces-for-your-account#settings-sync)」をご覧ください。

## 参考資料

* [コミット署名の検証について](/ja/authentication/managing-commit-signature-verification/about-commit-signature-verification)
* ```
            Git の公式ドキュメントの [`git config`](https://git-scm.com/docs/git-config) in the official Git documentation
  ```