ghqとpecoでラクラク・リポジトリ管理！ for Windows

<!-- wp:heading -->
<h2>はじめに</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Gitで扱うリポジトリが増えてくると、プロジェクト間の移動が手間になってきませんか？<br>ghqとpecoを組み合わせることで、ターミナルを開いて、すぐに指定したリポジトリに移動できるようになります。<br>また、別のリポジトリに移動するのも楽になります。<br>ghqとpecoを利用したリポジトリ管理の方法は、多くの方がご紹介されてますが、Windowsユーザ向けの説明がないので、とりわけPowershellユーザに向けてご紹介します。</p>
<!-- /wp:paragraph -->

![ghq_peco_sample.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/39308/3bd21fb9-6c06-d6b2-9630-62043aa707cc.gif)

<!-- wp:heading -->
<h2>登場するコマンド</h2>
<!-- /wp:heading -->

<!-- wp:heading {"level":3} -->
<h3>ghq</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>ghqはGitHubなどのリポジトリを管理するツールです。<br>このコマンドによって、Gitのリポジトリのパスを管理します。</p>
<!-- /wp:paragraph -->

<!-- wp:image {"sizeSlug":"large"} -->
<figure class="wp-block-image size-large"><img src="https://gh-card.dev/repos/x-motemen/ghq.svg" alt=""/></figure>
<!-- /wp:image -->

<!-- wp:heading {"level":3} -->
<h3>peco</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>pecoは標準入力で受け取った内容に対して、あいまい検索を行い、選択した行を返します。<br>このコマンドを利用することで、リポジトリの一覧に対して、検索したり、選択することができます。</p>
<!-- /wp:paragraph -->

<!-- wp:image {"sizeSlug":"large"} -->
<figure class="wp-block-image size-large"><img src="https://gh-card.dev/repos/peco/peco.svg" alt=""/></figure>
<!-- /wp:image -->

<!-- wp:heading -->
<h2>インストール</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>ghq・pecoともに、go製のツールなので、まずはgoの環境を作りましょう。</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3>golangのインストール</h3>
<!-- /wp:heading -->

<!-- wp:loos-hcb/code-block {"langType":"bash","langName":"Bash"} -->
<div class="hcb_wrap"><pre class="prism undefined-numbers lang-bash" data-lang="Bash"><code>winget install -e --id GoLang.Go.1.19</code></pre></div>
<!-- /wp:loos-hcb/code-block -->

<!-- wp:heading {"level":3} -->
<h3>ghqのインストール</h3>
<!-- /wp:heading -->

<!-- wp:loos-hcb/code-block {"langType":"bash","langName":"Bash"} -->
<div class="hcb_wrap"><pre class="prism undefined-numbers lang-bash" data-lang="Bash"><code>go install github.com/x-motemen/ghq@latest</code></pre></div>
<!-- /wp:loos-hcb/code-block -->

<!-- wp:heading {"level":3} -->
<h3>pecoのインストール</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>リポジトリのREADMを拝見すると、go install経由でのインストールは非推奨となっておりますので、chocolateyでのインストールを行いましょう。（もしくは、ビルドを行う。）</p>
<!-- /wp:paragraph -->

<!-- wp:loos-hcb/code-block -->
<div class="hcb_wrap"><pre class="prism undefined-numbers lang-plain"><code>choco install peco</code></pre></div>
<!-- /wp:loos-hcb/code-block -->

<!-- wp:paragraph -->
<p>Chocolateyのインストール方法は、1コマンドで済みます。<br>管理者権限でPowerShellを起動し、下記コマンドを実行してください。</p>
<!-- /wp:paragraph -->

<!-- wp:loos-hcb/code-block -->
<div class="hcb_wrap"><pre class="prism undefined-numbers lang-plain"><code>Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString(&#39;https://community.chocolatey.org/install.ps1&#39;))</code></pre></div>
<!-- /wp:loos-hcb/code-block -->

<!-- wp:heading -->
<h2>ghqとpecoの連携</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>頻繁に利用するコマンドとなると思うので、できるだけ短いコマンドでリポジトリ間の移動を済ませるようにしたいものです。 ghq + pecoを実行するコマンドをPowerShellで実行できるようにしましょう。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>PowerShellでは起動時に読み込まれるファイル（プロファイル）に登録しておきましょう。 $PROFILEに、プロファイルのパスが格納されています。</p>
<!-- /wp:paragraph -->

<!-- wp:loos-hcb/code-block -->
<div class="hcb_wrap"><pre class="prism undefined-numbers lang-plain"><code>echo $PROFILE
// 直接vscodeを開きたい方は下記
code $PROFILE</code></pre></div>
<!-- /wp:loos-hcb/code-block -->

<!-- wp:paragraph -->
<p>お好きなエディタで上記のファイルに下記を貼り付けて、PowerShellを再起動してください。</p>
<!-- /wp:paragraph -->

<!-- wp:loos-hcb/code-block -->
<div class="hcb_wrap"><pre class="prism undefined-numbers lang-plain"><code>function psPeco ([switch]$fuzzy) {
  $origin = [System.Console]::OutputEncoding
  $utf8 = [System.Text.Encoding]::UTF8
  $OutputEncoding = $utf8
  [System.Console]::OutputEncoding = $utf8
  if ($fuzzy) {
      $out = $input | peco.exe --initial-filter=Fuzzy
  }
  else {
      $out = $input | peco.exe
  }
  [System.Console]::OutputEncoding = $origin
  return $out
}

function repo() {
  $origin = [System.Console]::OutputEncoding
  $utf8 = [System.Text.Encoding]::UTF8
  $OutputEncoding = $utf8
  [System.Console]::OutputEncoding = $utf8

  $repository =  $(ghq list | peco)
  $repositoryPath = (ghq root) + &#39;/&#39; + $repository
  cd $repositoryPath

  [System.Console]::OutputEncoding = $origin
}</code></pre></div>
<!-- /wp:loos-hcb/code-block -->

<!-- wp:paragraph -->
<p><a href="https://hub.uni-face.co.jp/wp-admin/edit.php?post_type=post"></a></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>これで、<strong>repo</strong>と入力するだけで、リポジトリの移動ができるようになります。 </p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2>リポジトリの操作</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>あとは今後下記コマンドを通して、クローンを行い</p>
<!-- /wp:paragraph -->

<!-- wp:loos-hcb/code-block {"langType":"bash","langName":"Bash"} -->
<div class="hcb_wrap"><pre class="prism undefined-numbers lang-bash" data-lang="Bash"><code>ghq get http://github.com/&lt;username&gt;/&lt;repository&gt;</code></pre></div>
<!-- /wp:loos-hcb/code-block -->

<!-- wp:paragraph -->
<p>下記コマンドで、リポジトリの選択ができるようになります。</p>
<!-- /wp:paragraph -->

<!-- wp:loos-hcb/code-block -->
<div class="hcb_wrap"><pre class="prism undefined-numbers lang-plain"><code>repo</code></pre></div>
<!-- /wp:loos-hcb/code-block -->

<!-- wp:heading -->
<h2>参考文献</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p><strong>ghqとpecoでリポジトリの管理を便利にする</strong><br><a href="https://zenn.dev/obregonia1/articles/e82868e8f66793">https://zenn.dev/obregonia1/articles/e82868e8f66793</a></p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2>おわりに</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>これで、らくらくリポジトリの移動ができるようになります！<br>システム開発を行っていると様々なプロジェクトに携わったり、１つのシステムで複数のリポジトリに分かれていることがあります。<br>そのリポジトリのパスを覚えるのはめんどくさいことだと思うので、ぜひ使ってみてください。</p>
<!-- /wp:paragraph -->