Edited at

Fish-ShellのDesign document読んでみたり、プラグイン試してみたり

More than 3 years have passed since last update.

:computer: 前回、初心者がShellを知りFish〜Fishermanを導入するまで にて

Shellについて学び、プラグインマネージャを入れてみるまでの流れを、ざっくりではありますが書いてみました。

今回は初心者ながらにいろいろチャレンジしてみたいと思います。

前半はFishの考察、後半はプラグインの導入という流れになってます。



ところでFish、やっぱり良い

前回、Fishの魅力として補完機能の高性能さを挙げましたが、実際使ってみるとすごく :laughing: イイ!

具体的に、こんな感じです。

:one: このまっさらなコマンド‥




:two: 'f'と一文字打つと



前回の履歴を出してくれる :angel:




:three: これでOKなら▶キーを押せば



ほらよっつって!

この例のようにsearch等で末尾だけ変えたい時は、普通に書き換えればよし。




これ、実際使ってみると想像してたよりずっと便利です。'gcc -o filename filename.c'とか何回も打って泣きそうになることありませんか。

もうあんな思いはしない。


ちなみに :three: のところで▶️キーではなくtabキーを押すと



その文字で始まるものを提案してくれます。


Fishの設計図を読んでみた

ご存知のとおり、Fishは非常にユーザーフレンドリーです。

どんな風に作ってあるのかな。

Fish-shellのDesign documentを見てみました。本当に重要視して設計されているようです。

意訳してみました。ざっとですのでご了承ください。

難しい文章だったので、要点をわかりやすく伝えるために口語調にしました :speech_balloon:


:tropical_fish: Fishの設計書

:page_facing_up: Overview

Fishは設計において、3つのハイレベルなゴールを掲げている。


  1. 他のシェル言語で出来る全てのことは、Fishでも可能であるべきだ。

  2. Fishはユーザーフレンドリー、かつ、そのことと機能性を引き換えにしたりしない。その問題は、慎重に設計することで回避できる。

  3. Fishは可能な限りこのゴールを壊さず、Posixの構文をフォローする。
    Posixとはunixのツールで、プログラムの設計ツール。Bash等はこれを100%フォローしている。)

このゴールのための独自の信念は、以下の通り。



:one: The law of orthogonality

Shell言語において、いろいろな特徴はミニマムの方がいい。

(例えばJSとか他の言語みたいに、)沢山バリエーションを作ってもいいけど、複雑になってしまう。

だから用途がかぶるものは1つに絞って、できるだけ少なくしよう。

汎用性の高いものを最小限に抑えて使うことで、シンプルで迷わない設計ができる!

ソースコードが膨らむと、プログラムのメンテナンスが大変になるしね。



:two: The law of responsiveness

Fishはいつでもレスポンシブル。

Shellはいつでもユーザーにとってレスポンシブであり続けるべきだ。

何かに対処している時も、ファイルシステムが反応しない場合にも、インターフェイスは通常通り動き、ユーザーの作業を遮らない。

例えば、何かのアップデート中でも、画面をブロックしたりしないよ。

悪いパフォーマンスは、ユーザーにフラストレーションを与え、スピードも落としてしまう。



:three: Configurability is the root of all evil

設定は災いのもと

プログラムにおいて設定オプションは、ユーザーが本当に欲しいものをわかってない。

プログラムもプログラマーも、失敗しがちだし、メンテナンスも悪夢だ。

だからもっともノーマルでベストな設定を最初から使えるように用意しておくぜ :wink:



:four: The law of user focus

首尾一貫

プログラムのデザインにおいて一番に考えるべき事は、どのように直感的でパワフルにするか。

だからどんなシチュエーションでも、ユーザーから見えるインターフェイスは可能な限り、統一したほうがいいよね。

難易度が増してきたり、プロセスが重なることで表現が変わってくるようなことは良くない。

プロセスを効率的に簡略化し、すべての言語を統一することでそれを解決するよ。



:five: The law of discoverability

見つけやすさ

なにか探すときには、見つけやすい、予測しやすいほうがいい。できるだけ直感的で、予想通りで、簡単なインターフェイスや言葉を使おう。

特に新しいユーザーがよく使うメニューは、すぐわかるように設計する。全てのコマンドはtab-completable。

エラーは赤く表示するし、エラーメッセージもわかりやすい言葉で伝える。

あとドキュメンテーションも、文章だけじゃなくサンプルをつけてわかりやすくしておくね。


以上です。

かなり根本的なところから、ユーザーフレンドリーを貫いていますね。新しいユーザーへも配慮したりしてくれていますし、どうりで初心者にも使いやすいわけです。

ありがとう、作者のAxel Liljencrantzさん!!



好きです!!


Fishermanをてにいれた!

さてさて :rice_ball:

そんなFishを愛でるためにも、プラグインを入れていきましょう。

というわけで、再びFisherman

インストールは、前回触れたクイックスタートガイドの通りにしたら、つつがなく入れることができました。ホッ :relieved:

私にとっては、小さな冒険です。






。。まず何をしたらいいんだろう?


ガイドに沿って進んでみる

きっとコマンドの使い手ならあれからやるぞ!これはあるかな?となると思うのですが、素人なのでまずはスタートガイドのまんまに進めることにします。

”プラグイン” → ”ドキュメンテーションについて” → ”プラグインの発見方法”

ここもガイドに従って、問題なく進むことができました。日本語対応助かる。

ふと見るとスペイン語、中国語、ロシア語もあり、気合いを感じます。


Fishermanのプラグイン

ではプラグイン市場ことFisheryへ。

(Fisheryってなに? → こちら

いろいろ見てみます。


Fishtape

:closed_book: Fishtape README

Fishの、Fishによる、Fishのための、テストフレームワーク。 :raised_hands:

Fish唯一のテスト用プラグインで、Fisherman自身もまたそのプラグインもFishtapeを使ってテストされているようです。

:wrench: 機能 :wrench:

TAPという、テストを簡潔に記述するための書き方を使い、テストをシンプルに表示します。

TAPの詳細はここでは細かく触れませんが、テストを実行するとブワーッと内容が表示されていき、終了するとテストの件数が表示されます(gifでは1..54のところ)。

次に、テスト結果・テスト番号・説明がこんな感じに表示されるというものです。

ok 1 - Input file opened

not ok 2 - First line of the input valid
ok 3 - Read the rest of the file
not ok 4 - Summarized correctly # TODO Not written yet

(gifはエラーがないので上記のような表示は出ていません。)

じつは!

最後に出てくる可愛すぎるtap-nyan

tap-nyanは全く違う畑であるNode-JSの出身なのですが、FishtapeはTAPを理解できるという特性があるので、TAPという共通言語を介してここでも使えるようになってるわけです。

tap-nyan以外でもTAPのツールならなんでも使えます

:heartbeat: :sparkles:

ニャンかわいいよニャン〜


Get

:closed_book: Get README

ユーザー(Fishermanのユーザーではなくエンドユーザー)が、何か情報をインプットするときに働きかけます。

FishのReadと一緒に使用します。

:wrench: 機能 :wrench:


  • ユーザーの標準的なインプットの内容をデフォルト設定にする。



  • ユーザーが指定範囲外の値を入力したときに入力を受け付けない。
    さらにエラーメッセージを表示することもできる。






  • ユーザーがパスワードを入力する際に文字を非表示にする。






  • ユーザーのパスワードを*で表示する。






  • 'Press any key to continue...'の際、カーソルおよび押したキーを非表示にする。
    何か1つでもキーを押したらすぐに起動する。


この辺がひとまとめになっているのは便利そうです。


Legacy

:closed_book: Legacy README

Compatibility with Oh My Fish!

:wrench: 機能 :wrench:

Fishermanでは、Oh-my-fishのテーマ、プラグインを使うことができますが、そのまま適合させられないものがいくつか(2016.2月現在4つ)あります。

それに互換性を持たせてくれるのがLegacyです。

fisher install legacy

と入れるだけでOKなので、入れておくに越したことはなし。

前回、今回とあわせてプラグインをいくつか見てみました。あとは現在作成中 :construction: らしきものも結構あります。

Fisherman自体が2016年の頭にリリースされたばかりのようですので、今後を期待。

プラグインの作成ができる方は、「コミュニティとのシェアも簡単」とのことなので、良いのではないでしょうか。


感想

Fish、今後使っていくうちにいろんな気づきがありそうで楽しみです。

プラグインは活用はともかく、導入は比較的スムーズにできました :smiley: 入れてみると、使いこなしたい!と思うようになりますね :muscle:

色々試してみたいなぁと考えているのでオススメのプラグインや、初心者でも活用できる方法などあったら是非教えて頂けたら嬉しいです。

また、記事についてもなにかご指摘などあればコメント頂けたらと思います。