今更ながら Rails Tutorial (その1.5) - posh-gitインストールとVSCodeのカスタマイズ -

## この記事について…

普段はRuby on Railsと無縁なプログラマなんですが、今更ながら**面白そう**という単純な理由から**Ruby on Rails Tutorial**をやってみようと思い立ちました。今回は[前回の記事](https://qiita.com/hideki0145/items/02aedea80c9940ec447a)で残件として挙げたものを解決する番外編という形でやっていければと思います。
尚、Rails 5.1に対応した第4版を用いて、かつVagrantを使用した環境で進めていきます。

## 残件(再掲)

1. PowerShell上でGitコマンドタブ補完ができるようにする。  
posh-gitを使用すると可能になると何処かで読んだことがあるので、挑戦してみようと思います。
2. VSCode上で2つ以上ターミナルを立ち上げたときにキーボードショートカットでターミナル切り替えできるようにする。  
今のところPowerShellを2つ立ち上げて、1つはGit/Herokuのコマンドを打つ、もう1つはVagrantで構築した仮想環境に接続して Railsのコマンドを打つ、という形で学習しています。(この方法がいいのかどうかも含めて試行錯誤中…。)
デフォルト設定ではターミナル切り替えにキーボードショートカットが割り当てられていないようなので、よさげなショートカットを設定しようと思います。

## 1. posh-gitのセットアップ
posh-gitはGitとPowerShellを統合したPowerShellモジュールです。導入するとGitコマンドのタブ補完や現在のブランチ名の表示ができるようですが、"Po"wer"Sh"ellから文字を取ってposhなんでしょうか。
詳細は[GitHub](https://github.com/dahlbyk/posh-git)のREADME.mdを参照します。

### インストールする

1. 前提条件  
   * PowerShell 2.0以上であること。  
     ⇒ Windows 10であればPowerShell 5.0系なので大丈夫です。今回はPowerShell GalleryからインストールするのでPowerShell 5.0以上である必要があります。
   * スクリプト実行ポリシーを`Restricted`から変更すること。  
     ⇒ `Set-ExecutionPolicy RemoteSigned -Scope CurrentUser`として、現在のユーザーのみ`RemoteSigned`に変更します。  
        但し、今回は後述するPowerShellプロファイルを使用して起動後に`Restricted`に戻るようにしています。
   * PowerShell上からGitコマンドを使用できること。  
     ⇒ Git for Windowsのインストール時に「Use Git from the Windows Command Prompt」を選択していれば大丈夫です。

2. PowerShellGit経由でのposh-gitインストール
PowerShellで以下のコマンドを実行します。

```powershell
PowerShellGet\Install-Module posh-git -Scope CurrentUser
Update-Module posh-git
```

3. PowerShellプロファイルからposh-gitをインポートする設定
以降、PowerShellで`Import-Module posh-git`とコマンドを実行するとposh-gitが起動します。
しかし、毎回コマンド実行するのは面倒なので、PowerShellプロファイルを使用しましょう。
PowerShellで以下のコマンドを実行します。

```powershell
notepad $profile.CurrentUserCurrentHost
```

メモ帳が立ち上がると思いますが、次のように記述します。

```ps1:Microsoft.PowerShell_profile.ps1
Import-Module posh-git
Set-ExecutionPolicy Restricted -Scope Process
```

このプロファイルはPowerShell起動時に読み込まれるPowerShellスクリプトです。
従って、スクリプト実行ポリシーが`Restricted`では読み込みできない為に前提条件の項で`RemoteSigned`に変更している訳ですが、デフォルトの実行ポリシーから(現在のユーザーのみとはいえ)変更するというのは気持ちのいいものではありません。
そこで、2行目で`Set-ExecutionPolicy Restricted -Scope Process`とすることで、せめてPowerShell起動中だけは元の実行ポリシーに戻すようにしています。とはいえ、PowerShellスクリプトをエクスプローラから直接起動すれば動作してしまうのでなんだかなぁという感じです。他にいい方法があればご教示いただければ嬉しいです。


以上でPowerShell上からGitコマンドのタブ補完ができるようになりました。便利だなー。


## 2. VSCodeのキーボードショートカットカスタマイズ

VSCodeのキーボードショートカット設定を変更します。
[統合ターミナルウィンドウへフォーカスするショートカットキーを設定する](https://qiita.com/rai_suta/items/05e69f0b9065989b19c1)を参考にさせていただきました。

```json:keybindings.json
// 既定値を上書きするには、このファイル内にキー バインドを挿入します
[
{ "key": "ctrl+;",                "command": "workbench.action.terminal.focus",
                                     "when": "editorTextFocus" },
{ "key": "ctrl+;",                "command": "workbench.action.focusFirstEditorGroup",
                                     "when": "terminalFocus" },
{ "key": "ctrl+tab",              "command": "workbench.action.terminal.focusNext",
                                     "when": "terminalFocus" },
{ "key": "ctrl+shift+tab",        "command": "workbench.action.terminal.focusPrevious",
                                     "when": "terminalFocus" }
]
```

このように記述することで、`ctrl+;`を押下すると編集領域とターミナル領域を行き来し、`ctrl+tab` `ctrl+shift+tab`をターミナル領域で押下すると複数立ち上げたターミナルを切り替えできます。これも便利だなー。


ということで、前回残件として挙げたものは解決できました。またチュートリアルを進める中で開発しづらい点が出てきたときは適宜解決していこうと思います。