Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

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.

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした