🛷

PowerShell 用の Git 補完モジュールをリリースしました

に公開
4

PowerShell 用の Git 補完モジュール

PowerShell 用の Git 補完モジュール git-completion-pwsh をリリースしました。posh-git の補完がかなり限られているので、bash の補完の完全再現と PowerShell 用の最適化を目指して作りました。Windows PowerShell でも最新のマルチプラットフォーム PowerShell でも動作します。

Usage of git-completion

インストール

お使いの PowerShell で

Install-Module git-completion

と実行するだけです。

機能の特徴

Bash の補完と同等の機能

Bash では ls-files などのあらゆるサブコマンドに対して補完が効きます。posh-git では一般的なコマンドは網羅されていますが、あらゆるコマンドに対処できるとは言い難いです。また、posh-git ではオプションをスクリプトに埋め込んでいるので git の更新に追従できないという問題もあります。Bash での 補完は git コマンドの持つ --git-completion-helper という補完用のオプションを活用して、git の更新にも対処しやすい構成となっています。これを PowerShell でも再現して変更に強いモジュールにしました。

オプションの補完

posh-git ではショートオプションも補完してくれますが、Bash では不便なことにショートオプションは補完してくれません。オプションを覚えなくてはならないのは面倒なのでショートオプションもロングオプションも補完してくれるようにしています。

さらに、Bash の補完と同様にオプションの値に基づいて補完する内容を動的に変更するなどの機能も備えています。

ファイルパスの補完

Bash の補完でも posh-git の補完でも状態に基づいてファイルを補完するので、git-completion-pwsh でも補完してくれるように実装しました。例えば、git add では新規ファイルや修正されたファイルのみを補完対象とするなど、必要なファイルのみを賢く選択します。

Tooltip の活用

デフォルトのタブ補完だと表示されないのですが、下記のように MenuComplete モードにしたうえでの補完では Tooltip が表示されます。上記のスクリーンショットは MenuComplete モードでの動作です。

Set-PSReadLineKeyHandler -Chord Tab -Function MenuComplete

commit completion

ブランチを選択したらコミットの内容が表示されたり、オプションの説明が表示されるので直感的な選択ができます。

余談

この記事の内容を元に ChatGPT に英語翻訳してもらって Medium にも投稿 しています。いい感じの文章を作ってくれるので、LLM は Google 翻訳や DeepL とは別格の力強さを感じました。

GitHubで編集を提案

Discussion

sugartarousugartarou

ちょうど欲しいと思っていたものをありがとうございます。

さっそく使ってみて1点だけ気になったので、もしよろしければ教えていただきたいです。
$PROFILEにImport-Moduleを追加したところ、初回のPowershell起動に10秒以上かかるようになったのですが、このくらいかかるのは想定通りでしょうか?(追加前までは以下のようなパフォーマンスに関するメッセージは出たことがなかったです。)

パーソナル プロファイルとシステム プロファイルの読み込みにかかった時間は 11015 ミリ秒です。
KZRNMKZRNM

10秒もかかるのは想定してないです。 -NoProfile で起動してから手動で Import-Module としても同様でしょうか。

モジュール関係なく CPU が激遅だと PowerShell の起動はかなり時間がかかる印象はあります。

sugartarousugartarou

ご返信ありがとうございます!
-NoProfileで起動してから手動でImport-Moduleする際にMeasure-Commandで計測してみましたが、同じく10秒程度かかっていました。

CPUはIntel Core Ultra 7 165UでノートPCを電源に接続した状態で電源プランをハイパフォーマンスにして使っています。
このCPUがそんなに遅いとは思えないのですが思い当たる原因も特になく……