Salesforce CLI のオートコンプリートを Windows 端末で試してみた

:writing_hand: この記事は Salesforce 開発者向けブログキャンペーンへのエントリー記事です。

> - [Salesforce 開発者ブログ投稿キャンペーン](https://developer.salesforce.com/jpblogs/2020/02/salesforce-developer-blog-campaign-2020/)
> - [#SalesforceDevBlogCampaign](https://twitter.com/hashtag/SalesforceDevBlogCampaign)

# はじめに

こんにちは。このエントリでは、[Spring '20 のリリースノート](https://releasenotes.docs.salesforce.com/ja-jp/spring20/release-notes/rn_forcecom_development.htm) で紹介されていた開発系機能のうち、**Salesforce CLI のオートコンプリート** に対してあれこれした私の体験を綴ります。

> [オートコンプリートを使用した時間の節約とエラーの削減](https://releasenotes.docs.salesforce.com/ja-jp/spring20/release-notes/rn_sf_cli_autocomplete.htm)

# コマンドプロンプトから

さっそくインストールしてみます :muscle:

```sh
echo y | sfdx plugins:install @oclif/plugin-autocomplete
sfdx autocomplete

>> Error: Autocomplete is not currently supported in Windows
```

... あれ？
Windows ではサポートされていない？？ ... 別のコマンドラインでやってみます :sweat_smile:

# PowerShell から

```sh
echo y | sfdx plugins:install @oclif/plugin-autocomplete
sfdx autocomplete

>> Error: Autocomplete is not currently supported in Windows
```

... あれ？？ 同じだ。やっぱだめなのかな！？

# Git Bash から

```sh
echo y | sfdx plugins:install @oclif/plugin-autocomplete
sfdx autocomplete

>> Error: Autocomplete is not currently supported in Windows
```

... 全然ダメですね :thinking:

# 結論

リリースノートに書いてなかったけど、Windows 端末ではオートコンプリートの恩恵を受けられなさそうですね。（最初から書いておいてほしい... :frowning2:）

# おまけ： 仕方ないので奥の手、WSL だ

いよいよ Windows っぽくなくなってきましたが、WSL 1 でやってみます。

```sh
# wsl を起動します
wsl
# 事前準備
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install build-essential
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash
# 再起動します
exit
wsl
# Node.js の LTS を最新化します
nvm install --lts
node -v  # v12.16.1
npm -v  # 6.13.4
# Salesforce CLI をインストールします
npm install --global sfdx-cli
```

いよいよです。

```sh
echo y | sfdx plugins:install @oclif/plugin-autocomplete
sfdx autocomplete

>> Building the autocomplete cache... done
>> 
>> Setup Instructions for SFDX CLI Autocomplete ---
>> 
>> 1) Add the autocomplete env var to your bash profile and source it
>> $ printf "$(sfdx autocomplete:script bash)" >> ~/.bashrc; source ~/.bashrc
>> 
>> NOTE: If your terminal starts as a login shell you may need to print the init script into ~/.bash_profile or ~/.profile.
>> 
>> 2) Test it out, e.g.:
>> $ sfdx <TAB><TAB>                 # Command completion
>> $ sfdx command --<TAB><TAB>       # Flag completion
>> 
>> Enjoy!
```

お！いままでと違う！！ 続けてみましょう :grinning:

```sh
printf "$(sfdx autocomplete:script bash)" >> ~/.bashrc; source ~/.bashrc
```

> ちなみに `<TAB>` とは、キーボードのタブキーを押下すること、とします。

```sh
sfdx <TAB><TAB>

>> Display all 123 possibilities? (y or n)
```

あれ？ 期待してる表示と違うけど... `y` を押下します。ドキドキ...

```sh
autocomplete                         force:lightning:lwc:test:run         force:package:uninstall:report
commands                             force:lightning:lwc:test:setup       force:package:update
force:alias:list                     force:lightning:test:create          force:package:version:create
force:alias:set                      force:lightning:test:install         force:package:version:create:list
force:analytics:template:create      force:lightning:test:run             force:package:version:create:report
force:apex:class:create              force:limits:api:display             force:package:version:list
force:apex:execute                   force:mdapi:convert                  force:package:version:promote
force:apex:log:get                   force:mdapi:deploy                   force:package:version:report
force:apex:log:list                  force:mdapi:deploy:cancel            force:package:version:update
force:apex:log:tail                  force:mdapi:deploy:report            force:project:create
force:apex:test:report               force:mdapi:describemetadata         force:project:upgrade
force:apex:test:run                  force:mdapi:listmetadata             force:schema:sobject:describe
force:apex:trigger:create            force:mdapi:retrieve                 force:schema:sobject:list
force:auth:device:login              force:mdapi:retrieve:report          force:source:convert
force:auth:jwt:grant                 force:org:clone                      force:source:delete
force:auth:list                      force:org:create                     force:source:deploy
force:auth:logout                    force:org:delete                     force:source:deploy:cancel
force:auth:sfdxurl:store             force:org:display                    force:source:deploy:report
force:auth:web:login                 force:org:list                       force:source:open
force:community:create               force:org:open                       force:source:pull
force:community:publish              force:org:shape:create               force:source:push
force:community:template:list        force:org:shape:delete               force:source:retrieve
force:config:get                     force:org:shape:list                 force:source:status
force:config:list                    force:org:snapshot:create            force:user:create
force:config:set                     force:org:snapshot:delete            force:user:display
force:data:bulk:delete               force:org:snapshot:get               force:user:list
force:data:bulk:status               force:org:snapshot:list              force:user:password:generate
force:data:bulk:upsert               force:org:status                     force:user:permset:assign
force:data:record:create             force:package1:version:create        force:visualforce:component:create
force:data:record:delete             force:package1:version:create:get    force:visualforce:page:create
force:data:record:get                force:package1:version:display       help
force:data:record:update             force:package1:version:list          plugins
force:data:soql:query                force:package:create                 plugins:generate
force:data:tree:export               force:package:hammertest:list        plugins:install
force:data:tree:import               force:package:hammertest:report      plugins:link
force:lightning:app:create           force:package:hammertest:run         plugins:trust:sign
force:lightning:component:create     force:package:install                plugins:trust:verify
force:lightning:event:create         force:package:install:report         plugins:uninstall
force:lightning:interface:create     force:package:installed:list         plugins:update
force:lightning:lint                 force:package:list                   update
force:lightning:lwc:test:create      force:package:uninstall              which
```

で、でたーーー しかも3列も :laughing:

```sh
sfdx force <TAB><TAB>
```

... あれ！？
だめです... なにも動きません... やっぱだめか... :joy:

> WSL 2 が使えるようになったらまた試すことにします :sweat_drops:

>（2020.05.27 追記）WSL 2 を試しました。。。が、結果は同じでした。やっぱり Windows はだめそうですね。

# なんで？

Windows に関する Issue が出てるみたいです。

> [Code completion should work in Bash on Windows #6](https://github.com/oclif/plugin-autocomplete/issues/6)

それに対するプルリクエストが作成されているので、マージされるのを待ちたいと思います。

> [Allow functioning on Bash for Windows. Fixes #6 #7](https://github.com/oclif/plugin-autocomplete/pull/7)

経過が気になるかたは、私と一緒に「Subscribe」ボタンを押しておとなしく待ちましょう。

# さいごに

あとあじのよくないエントリでしたが、しばらくは Mac 端末で楽しくオートコンプリートしていきましょう！

![20200314.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212555/4a67ac8d-a6aa-8919-5bed-e249aec1f48d.gif)

Spring '20 の新機能の検証レポートでした。それではまた。

# おまけ

`@oclif/plugin-autocomplete 0.1.5` だと次のコマンドがオートコンプリートできなかったです。
 
```sh
sfdx force:auth:logout
```