CraftLaunchのパスの件

# 概要

ランチャーソフトのCraftLaunchから起動したアプリと、Win+Rで起動したアプリではPATH設定が異なっているため、動かないものがありました。それを（泥臭く）解決する方法です。

#### 追記：

ここに書いてある方法は不要で、CraftLaunchを再起動をするだけで治りました。CraftLaunchを起動してからPATHが変わったとしても、変更後のPATHを使うわけじゃなくて、起動時点のPATHを使います。あとから入れたnodejsとか見つからないのは当たり前なんですよね、、、初歩的なことでした。

## まとめと解決策

CraftLaunchからnvimを起動したときに、nodeが見つからないといわれました。調べるとnodeだけでなく、Rubyやnvmも動かず、PATHが通っていませんでした。そこで`config.py`で次のような関数を定義、呼び出すことでパスを設定、解決できました。
```python:config.pyの一部
    def set_path():
        paths = os.environ['PATH'].split(';')
        paths_append = [
            r'C:\Ruby-on-Windows\rbenv\bin',
            r'C:\Ruby-on-Windows\shims',
            r'C:\Users\ユーザー名\scoop\apps\pwsh\current',
            r'C:\Users\ユーザー名\scoop\apps\nvm\current',
            r'C:\Users\ユーザー名\scoop\apps\nvm\current\nodejs\nodejs'
        ]
        os.environ['PATH'] = ';'.join(list(set(paths + paths_append)))

    set_path()
```

## ちょっと詳しく

### CraftLaunchとは

CraftLaunchはキーボードだけで操作できるランチャーアプリです。

アプリの説明をはこのサイトがわかりやすいと思います。→ [【PC作業効率化】おすすめフリーソフト「CraftLaunch」 – 微風 on the web…](https://web-breeze.net/craftlaunch/)
公式ページ：[craftware - CraftLaunch](https://sites.google.com/site/craftware/clnch)

アプリ起動だけでなく、VMの操作（起動・停止・スナップショット作成）、特定のサイズ指定で画面のスクショ、よく変更するファイルを開く、などなどに使いまくってます、、、が、今回、困ったことがおきました。

## なにが起きたか

僕はnvimを使ってます。で、CraftLaunchにnvimを登録して起動したら`[coc.nvim] *node* is not executable, checkout https://nodejs.org/en/download/`というエラーが出ました。あらー、と思って`:checkhealth`するとなんだかよくわからんエラーがでます。
```
Running healthchecks...
E5009:無効な 'runtimepath' です                                                                                         Error executing lua: function health#coc#check[3]..<SNR>55_checkInitialize, line 5: Vim(call):E118: 関数の引数が多過ぎます: <SNR>55_report_error                                                                                                stack traceback:                                                                                                                [C]: in function 'call'                                                                                                 ...pps/neovim/current/share/nvim/runtime/lua/vim/health.lua:429: in function '_check'                                   [string "<nvim>"]:1: in main chunk  
```

では、とCraftLaunchから登録したpwsh.exeを起動して、そこからnvimを立ち上げても同様。nvimを閉じて`node -v`したところアプリが見つからないというエラー。nvmも同様。pythonは見つかる、、
PATHを確認するとこんなでした。nodejsがPATHにないです。
```posh
> $env:path
C:\Users\(ユーザー名)\OneDrive\デスクトップ\PortableApps\CraftLaunch/lib;C:\Windows\system32; C:\Windows; C:\Windows\System32\Wbem; C:\Windows\System32\WindowsPowerShell\v1.0\; C:\Windows\System32\OpenSSH\; C:\Users\(ユーザー名)\scoop\apps\python\current\Scripts; C:\Users\(ユーザー名)\scoop\apps\python\current; C:\Users\(ユーザー名)\scoop\shims; C:\Users\(ユーザー名)\AppData\Local\Microsoft\WindowsApps;
```
Win+Rでcmd.exeを起動してPATHを確認するとあります
```
> echo %PATH%
C:¥Users¥(ユーザー名)¥OneDrive¥デスクトップ¥PortableApps¥CraftLaunch/lib;C:¥Windows¥system32;C:¥Windows;C:¥Windows¥System32¥Wbem;C:¥Windows¥System32¥WindowsPowerShell¥v1.0¥;C:¥Windows¥System32¥OpenSSH¥;C:¥Users¥(ユーザー名)¥scoop¥apps¥nvm¥current;C:¥Users¥(ユーザー名)¥scoop¥apps¥nvm¥current¥nodejs¥nodejs;C:¥Users¥(ユーザー名)¥scoop¥apps¥python¥current¥Scripts;C:¥Users¥(ユーザー名)¥scoop¥apps¥python¥current;C:¥Users¥(ユーザー名)¥scoop¥shims;C:¥Users¥(ユーザー名)¥AppData¥Local¥Microsoft¥WindowsApps; 
```

CraftLaunchにprint(os.environ['PATH'])する関数を登録して呼び出すと、nodejsのは入ってません。
きっとCraftLaunchは何かの理由でPATHに入れてくれないんだ、と想像しました。
(→ じつはこれは間違いで、単にCraftLaunchの起動時期が問題だっただけでした。)

## PATHを登録する関数の追加

登録されないなら自分で登録してしまえばいい、ということでconfig.pyのなかでPATHをセットするようにしました。手順で考えたのは

1. 今のPATHをos.environ['PATH']でとってきてlistにする
1. 追加したいパスのlistを作る
1. 二つのlistをつないで、重複を省く
1. listの各要素を「；」でつないでい一つの文字列にする
1. os.environ['PATH']に登録する

で、できたのが最初の[まとめと解決策](#まとめと解決策)の関数です。nodejsだけでなくRubyも抜けていたので追加してあります。

## 解決した！けどこれは根本的にいろいろ違っていた

追記に書いた通り、こんな関数使わずともCraftLaunchの再起動で解決します。いろいろ知ることができてよかったけど、なんだか視野が狭くなってたなーと反省です。

### ところで、nvmとrbenvもWindowsで使えます！（全然関係ない）

nvm ： `scoop install nvm` 
rbenv :  [RubyMetric/rbenv-for-windows: rbenv for Windows - Manage your app's Ruby environment on Windows](https://github.com/RubyMetric/rbenv-for-windows) (`scoop install vcredist`が必須）