# codespace でのシェルの変更

使い慣れた設定を維持するために、codespace でシェルを変更できます。

codespace で作業している場合は、任意のシェルで新しいターミナル ウィンドウを開いたり、新しいターミナル ウィンドウの既定のシェルを変更したり、新しいシェルをインストールしたりできます。 ドットファイルを使用してシェルを構成することもできます。

既定の開発者コンテナー イメージを使用する codespace には、`bash`、`zsh`、および `fish` のシェルがインストールされています。 VS Code Web クライアントで新しい codespace を開くか、SSH 経由で codespace に接続すると、ターミナルが開き、既定で `bash` セッションが実行されています。 VS Code デスクトップ アプリケーションでは、既定のシェルがローカル設定とオペレーティング システムによって異なります。 詳しい情報については、VS Code のドキュメントの「[ターミナル プロファイル](https://code.visualstudio.com/docs/terminal/profiles)」を参照してください。

## VS Code の既定のシェルからの変更

既定のシェルを使用しない場合は、別のシェルで新しいターミナル セッションを開くことができます。

1. VS Code に統合ターミナルが表示されない場合は、<kbd>Ctrl</kbd>+<kbd>\`</kbd> キーを押します。

2. 新しいターミナル ウィンドウを開く <svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-plus" aria-label="plus" role="img"><path d="M7.75 2a.75.75 0 0 1 .75.75V7h4.25a.75.75 0 0 1 0 1.5H8.5v4.25a.75.75 0 0 1-1.5 0V8.5H2.75a.75.75 0 0 1 0-1.5H7V2.75A.75.75 0 0 1 7.75 2Z"></path></svg> アイコンの右側にあるドロップダウン アイコンを選びます。

   ![VS Code の統合ターミナルのスクリーンショット。 プラス アイコンの横に、下向きの矢印がオレンジ色の枠で囲まれています。](/assets/images/help/codespaces/new-shell-session.png)

3. ドロップダウン メニューで、使用するシェルの名前をクリックします。

## 新しいシェルのインストール

codespace の基本イメージまたは開発コンテナー構成にまだインストールされていないシェルを使用したい場合は、新しいシェルをインストールできます。

既定の開発者コンテナー イメージを使用している場合は、Ubuntu Linux のインストール手順をご確認ください。 1 つのセッションに対して別のシェルを使用するだけの場合は、コマンド ラインを使って、作業中の codespace にシェルをインストールできます。 ただし、codespace でコンテナーをリビルドすると、インストールしたプログラムが失われる可能性があります。 詳しくは、「[GitHub Codespaces に深く迫る](/ja/codespaces/about-codespaces/deep-dive#about-the-directory-structure-of-a-codespace)」をご覧ください。

新しいシェルをインストールするためのより堅牢なオプションは、インストール コマンドをドットファイル リポジトリに含めるか、`postCreateCommand` ファイル内の `devcontainer.json` などのライフサイクル コマンドとして含める方法です。 ドットファイル リポジトリを使用して、すべての独自の codespace で使用するシェルと、特定のリポジトリの共同作成者がインストールする必要があるシェル用の `devcontainer.json` ファイルをインストールする必要があります。 詳細については、「[アカウントGitHub Codespaces のカスタマイズ](/ja/codespaces/setting-your-user-preferences/personalizing-github-codespaces-for-your-account#dotfiles)」および「[開発コンテナーの概要](/ja/codespaces/setting-up-your-project-for-codespaces/adding-a-dev-container-configuration/introduction-to-dev-containers)」を参照してください。

### 新しいシェルの VS Code ターミナル プロファイルの追加

VS Code では、ほとんどの標準シェルが自動的に検出され、ターミナル プロファイルとして追加されるため、インストールしたシェルを使用して新しいターミナル ウィンドウを簡単に開くことができます。

インストールしたシェルが自動的に検出されない場合は、新しいターミナル プロファイルをユーザー設定に追加できます。 この設定はオペレーティング システムによって異なるため、VS Code Web クライアントとデスクトップ アプリケーション用のローカル オペレーティング システムの `linux` を使用する必要があります。

1. Visual Studio Code Command Palette を開くには、<kbd>Command</kbd>+<kbd>Shift</kbd>+<kbd>P</kbd> キー (Mac)、または <kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>P</kbd> キー (Windows) を押します。

2. 「ユーザー設定」と入力し、 **\[基本設定: ユーザー設定を開く (JSON)]** をクリックします。

3. `settings.json` ファイルの JSON オブジェクト内に、次のような新しいプロパティを追加します。
   `OPERATING-SYSTEM` を関連するオペレーティング システム (`linux`、`windows`、`osx` など) に置き換え、`SHELL` をインストールしたシェルに置き換えます。

   ```json copy
   "terminal.integrated.profiles.OPERATING-SYSTEM": {
     "SHELL": {
       "path": "SHELL"
     }
   }
   ```

   次に例を示します。

   ```json
   "terminal.integrated.profiles.linux": {
    "csh": {
      "path": "csh"
    }
   }
   ```

4. ファイルを保存します。

Settings Sync を使うと、VS Code Web クライアントとデスクトップ アプリケーションで開いたすべての codespace でこれらの設定を共有できます。 Web クライアントで作業している場合、Settings Sync は既定で無効になっているため、変更を設定にプッシュしたり別の場所で行った新しい変更をプルしたりするには、Settings Sync を有効にする必要があります。 詳しくは、「[アカウントGitHub Codespaces のカスタマイズ](/ja/codespaces/setting-your-user-preferences/personalizing-github-codespaces-for-your-account#settings-sync)」をご覧ください。

## VS Code の既定のシェルの設定

既定のターミナル プロファイルを設定して、VS Code で開くすべての新しいターミナル ウィンドウに使用される既定のシェルを選ぶことができます。 既定のターミナル プロファイルはオペレーティング システムによって異なるため、VS Code Web クライアントを使用している場合は Linux、デスクトップ アプリケーションを使用している場合はローカル オペレーティング システムの既定のプロファイルを設定できます。

> \[!NOTE]
> 既定のプロファイルに関係なく、Web クライアントで開かれた codespace は常に `bash` セッションが最初に実行された状態で開きます。

1. Visual Studio Code Command Palette を開くには、<kbd>Command</kbd>+<kbd>Shift</kbd>+<kbd>P</kbd> キー (Mac)、または <kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>P</kbd> キー (Windows) を押します。

2. 「ユーザー設定」と入力し、 **\[基本設定: ユーザー設定を開く (JSON)]** をクリックします。

3. JSON オブジェクト内で、関連するオペレーティング システムの既定のシェルを設定するには、行を追加するか、次のように既存の行を編集します。

   ```json
   "terminal.integrated.defaultProfile.OPERATING-SYSTEM": "SHELL"
   ```

   次に例を示します。

   ```json copy
   {
      "terminal.integrated.defaultProfile.osx": "zsh",
      "terminal.integrated.defaultProfile.linux": "bash",
      "terminal.integrated.defaultProfile.windows": "PowerShell"
   }
   ```

4. `settings.json` ファイルを保存します。

Settings Sync を使うと、VS Code Web クライアントとデスクトップ アプリケーションで開いたすべての codespace でこれらの設定を共有できます。 Web クライアントで作業している場合、Settings Sync は既定で無効になっているため、変更を設定にプッシュしたり別の場所で行った新しい変更をプルしたりするには、Settings Sync を有効にする必要があります。 詳しくは、「[アカウントGitHub Codespaces のカスタマイズ](/ja/codespaces/setting-your-user-preferences/personalizing-github-codespaces-for-your-account#settings-sync)」をご覧ください。

## SSH 経由での既定のシェルの設定

SSH 経由でコマンド ラインから codespace に接続する場合、既定では codespace 内の`bash` セッションに接続します。

GitHub Codespaces のドットファイル リポジトリを有効にしている場合は、ドットファイルの `install.sh` などのインストール スクリプトにコマンドを追加することで、接続する既定のシェルを変更できます。 詳細については、「[GitHub CLI での GitHub Codespaces の使用](/ja/codespaces/developing-in-a-codespace/using-github-codespaces-with-github-cli#ssh-into-a-codespace)」および「[アカウントGitHub Codespaces のカスタマイズ](/ja/codespaces/setting-your-user-preferences/personalizing-github-codespaces-for-your-account#dotfiles)」を参照してください。 たとえば、次のコマンドでは、既定のシェルが `zsh` に変更されます。

```shell copy
sudo chsh "$(id -un)" --shell "/usr/bin/zsh"
```

既定で codespace にインストールされていない既定のシェルを使用する場合、またはシェルの最新バージョンがあることを確認する場合は、最初にシェルをインストールできます。

```shell copy
sudo apt-get update -y
sudo apt-get install -y csh
sudo chsh "$(id -un)" --shell "/usr/bin/csh"
```

> \[!NOTE]
> (たとえば、`gh codespace create` を使用して) 新しい codespace を作成する場合は、SSH 経由で codespace に接続する前に、スクリプトの実行が完了するまで十分な時間待機する必要があります。 スクリプトの実行が完了していない場合は、既定の `bash` セッションに接続します。

codespace に接続している場合、ほとんどのシェルでは、コマンド `readlink /proc/$$/exe` を使用して、正しいシェルが実行されていることを確認できます。

## シェルの構成

ほとんどのシェルでは、`.bashrc` などの構成ファイルを使用して、任意の設定でシェルを構成できます。 これらの設定には、別名や環境変数などが含まれる場合があります。

既定では、codespace にはプレインストールされるシェルの定義済みの構成が含まれています。 たとえば、codespace のホーム ディレクトリには `.bashrc` と `.zshrc` のファイルが含まれています。 これらのファイルの内容を変更してから、`source ~/.bashrc` のようなコマンドを使用してシェル構成を更新できます。 ただし、codespace でコンテナーをリビルドすると、これらのファイルに対する変更は失われます。 詳しくは、「[GitHub Codespaces に深く迫る](/ja/codespaces/about-codespaces/deep-dive#about-the-directory-structure-of-a-codespace)」をご覧ください。

一般には、任意の設定でシェルを構成するには、ドットファイル リポジトリを使用する必要があります。 ドットファイルの設定は、作成したすべての codespace に適用され、コンテナーがリビルドされても保持されます。 詳しくは、「[アカウントGitHub Codespaces のカスタマイズ](/ja/codespaces/setting-your-user-preferences/personalizing-github-codespaces-for-your-account#dotfiles)」をご覧ください。

### `fish` シェルのトラブルシューティング

`fish` シェルには、Web ベースの構成インターフェイスが含まれています。
`fish_config` コマンドを使用してローカル Web サーバーを起動し、このインターフェイスを起動してから、ターミナル プロンプトの変更や環境変数の表示などを行うことができます。

codespace で `fish` の Web ベースのインターフェイスを使用することができます。 ただし、VS Code の統合ターミナルの色設定は、選んだ VS Code のテーマによって異なります。`fish_config` インターフェイスで新しいテーマを設定してこれらの設定をオーバーライドすることはできません。

`fish` でローカル サーバーが起動すると、GitHub Codespaces が転送されたポートに提供する既定のリンクは機能しません。 たとえば、ポップアップ メッセージで **\[ブラウザーで開く]** をクリックすると、エラー ページが表示されます。

`fish_config` の Web ベースのインターフェイスにアクセスするには:

1. `fish` セッションを実行しているターミナルで、「`fish_config`」と入力します。

2. ターミナル出力で、<kbd>Command</kbd> キーを押しながらクリックするか、<kbd>Ctrl</kbd> キーを押しながらクリックして `web_config` HTML ファイルへのリンクを 開きます。

   ```shell
   $ fish_config
   Web config started at file:///tmp/web_config60rc9tr3.html
   Hit ENTER to stop.
   ```

3. `web_config` ファイルで、<kbd>Command</kbd> キーを押しながらクリックするか、<kbd>Ctrl</kbd> キーを押しながらクリックして転送されたポートへのリンクを 開きます。

   ```html
   <body>
     <p><a href="http://localhost:8000/1b9411c2469e392b96df5e5b28da485b/">Start the Fish Web config</a></p>
   </body>
   ```

## 参考資料

* [ユーザーの基本設定の設定](/ja/codespaces/setting-your-user-preferences)
* [Codespaces を管理する](/ja/codespaces/managing-your-codespaces)