Eyes, JAPAN Blog > Shellの設定ファイルでの罠

Shellの設定ファイルでの罠

murakami

この記事は1年以上前に書かれたもので、内容が古い可能性がありますのでご注意ください。

こんばんは。
今年最後のポストということで完全にビビっております、Shell・自作PC担当の村上です。
今日のポストなのですが、先日社内の勉強会でzshスクリプトの話をしたのに関連した話です。
毎年恒例で行くとこの時期はPCの中の(箱的な)大掃除の話をするところなのですが、ちょうど勉強会もやったということで別のことを軽く話します。

話の内容・・・ とは言ってもタイトルそのままで、今回は私が最近shellの設定ファイルを書きなおしていてこれはやばかったんだなと気づいたことをちょっとだけ話します。
ここではbash、ksh、zsh等を扱うことを前提にして話をさせてもらいたいと思います。

さてさてこれまでの私がどんな地雷を踏みぬいてきたかですが、大きいのは以下の3つです。

1. export句をしっかりした使い方で使っていなかった
2. プロンプトの表示で負荷をかけすぎていた
3. パイプを多用しすぎていた

各々について簡単に紹介します。

1. export句をしっかりした使い方で使っていなかった

これは割と皆さんやるんじゃないでしょうか?要はシェル変数と環境変数の違いです。
これまでシェルのこととかをよく理解できていなかった頃から注ぎ足してきた秘伝のタレみたいな設定ファイルを使っていたのでごちゃごちゃになっていました。
基本的にはすべてのシェルで共有するか否かですので、ここでしっかりとexport文を使い分けると良いと思います。
また、exportを書く部分に関しても基本的にはどこかでシェルが立ち上がったタイミングのみで実行されるようにすると尚よいのかなと思います。

2. プロンプトの表示で負荷をかけすぎていた

これは完全にやらかしていました。確かに使っていてたまにプロンプトの表示がすっごい遅い時があったんです。
何かなと思っていたんですが、gitに関連した情報の表示周りが原因で、プロンプトが更新されるたびに全てに対して同じ処理を実行していたため最終的に負荷がすごいことになっていました。
この対策として段階的なバリデーションで出来るだけプロンプトの情報を作成するまでに起動するプロセス数を減らす努力をしました。(たとえばgitの管理下のディレクトリにいるかどうかとか)
最終的に、これまで特に更新が不要であったところが削られたためかなり作業環境・効率の改善になったと思います。

3. パイプを多用しすぎていた

私自身、社内ではシェル芸おじさんとして活動しているため、ところどころでワンライナーを多用しているのですが、ワンライナーを多用したがために起きてしまった問題もあります。
これも詳しく解析していないのでなんとも言えない感じはありますが、ワンライナーに縛りをかけてしまったがためにプロセス数の増大等に関連してこれもまた内部での処理の負荷となってしまいました。
コレに関しては最終的にワンライナー的な改善をするのではなく、該当部分を使っているシェル(私の場合はzsh)のネイティブスクリプトに置き換えることでだいぶ速くなりました。sedの部分を${str/pt1/pt2}みたいな感じに書き換えたりとか。
多分記法等に関して考えると煩雑になる気がしますが、特にプロンプト周りとか、よく使うコマンドとかのパフォーマンスチューニングには使ってみてもいいのではないでしょうか?

ということで簡単ではありますが、年末のシェルの設定ファイルの大掃除ということで簡単にお話をしました。
みなさんも設定ファイルの大掃除、やってみてはいかがでしょうか?

今年も残すところあと数日、よいお年を。

References

担当 : 村上(プレゼン大賞いただきました(∩´∀`)∩ワーイ)

Comments are closed.