LoginSignup
26
18

More than 5 years have passed since last update.

fish shellの起動が遅くなった時の解決方法

Last updated at Posted at 2016-03-21

TL;DR

  • fish shellの起動に3〜4秒ぐらいかかるようになった。
  • config.fish$fish_user_pathsの設定方法に問題があった。
  • この問題の原因と解決方法をまとめた。

何が起きたか

  • fish shellを起動してコマンドが入力できるようになるまで、3〜4秒かかっていた。
  • iTermでタブを開いたり、tmuxでタブを開いても同様の時間がかかっていた。
  • 作業効率がめちゃくちゃ落ちていた。

環境

  • OS X (El Capitan) 10.11.3
  • fish, version 2.2.0

原因

fish shellのGitHubに同じ問題についてissueが上がっていた。
https://github.com/fish-shell/fish-shell/issues/2688

In general there should be no set -U lines in config.fish. #2005 tracks warning for this case.

The reason is that set -U calls create variables that persistently remember their values, so running set -U fish_user_paths $fish_user_paths /opt/bin on each launch just make $fish_user_paths longer and longer.

意訳

一般的にconfig.fish内ではset -Uを使うべきではない。#2005 ではこのケースのワーニングについて動きを追っている。
set -Uすると永続的に保存される変数が作られる。毎回起動時に$fish_user_pathsはどんどん長ってしまう。

肥大化した $fish_user_paths を引き継いだまま新しい $fish_user_paths を作ろうとするため、起動に時間がかかってしまう。

解決方法

config.fish に書かれている一番最初の set -U 第3引数を消す。

# before
set -U fish_user_paths /usr/local/bin $fish_user_paths
set -U fish_user_paths ~/.rbenv/shims $fish_user_paths

# after
set -U fish_user_paths /usr/local/bin
set -U fish_user_paths ~/.rbenv/shims $fish_user_paths

意味

set -U fish_user_paths /usr/local/bin $fish_user_paths

これは$fish_user_paths の頭に /user/local/bin を追加して fish_user_paths という変数を作るという意味。
$fish_user_pathsの前回のデータの頭に新しいデータが追加されるため、起動の度に$fish_user_pathsはどんどん大きくなってしまう。

set -U fish_user_paths /usr/local/bin

第3引数を消せば、fish_user_paths/user/local/bin で毎回初期化されるため、$fish_user_paths は肥大化しない。

ちなみに

今回の問題はEl Capitanで発生したが、Yosemiteでは同じ原因でfishが起動できないという問題があった。
https://github.com/fish-shell/fish-shell/issues/2005

このissueで下記のようなコメントがあるため、El Capitanでの問題もfishのv2.3では改善されるかもしれない。
https://github.com/fish-shell/fish-shell/issues/2005#issuecomment-192891400

This probably won't happen for 2.3.

26
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
18