Kekeの日記

エンジニア、読書なんでも

Fish shell packageを作成して、公開するまでのいろは!

f:id:bobchan1915:20190227034025p:plain

Fisherとは

FisherとはFish shellに関するパッケージマネージャーです。似たようなものでOh-my-fishがありますが、使い勝手はFisherの方が便利で簡単であるという印象です。

そんなわけで、よくfish shellを自分は書いて、コマンドなどを作成したりするのですが、今回は自分が作った関数(function)を公開するまでの手順を紹介します。

注意点ですが、どれもfish shellで書いているので、bashと移植性がないかもしれません。

他の参考にできるパッケージ

以下のリポジトリで有用なパッケージを見ることができます。

git.io

参考にできるときがあると思います。

前提

まず、Fish shell Functionの仕様を把握することが大事になります。

Fishの関数は、まず呼び出されると~/.config/fish/function/以下で、コマンド名と一致するファイルが実行されます。

また、ファイル名と同様の関数名が呼び出されます。

Fisherでfisher addをしたとしても、ダウンロードした関数は~/.config/fish/function/以下にあります。

Develop段階

ある程度、完成するまでは公開したくない時があると思います。

そのような時は、ローカルで試しながら、Github Private Repoで運用するのが良いと思います。

まず、リポジトリを作成して、ディレクトリを作ってください。今回はそのディレクトリ名をmy-fisher/とします。

現在のディレクトリ構成は

.my-fisher/

です。

最初の関数をmy-fisherを作成します。

以下のように追加します。

.
└── my-fisher.fish

そして中身は以下のような関数になっています。

#!/usr/local/bin/fish

function my-fisher
    echo "hoge"
end

実際にパッケージ管理するまでに、一回実行してみます。

chmod +x ./my-fisher.fish
./my-fisher.fish

すると以下のようにレスポンスが返ってきます。

hoge

そして、以下のようにローカルディレクトを設定します。

$ fisher add (pwd)

すると以下のように関数が叩けるようになります。

$ my-fisher

そして、パッケージは~/.config/fish/fishfileに追加されます。

$  cat ~/.config/fish/fishfile | grep "my-fisher"

また、関数の一覧は以下のコマンドでも知ることができます。

$ functions

ここまでで開発段階が整いました。

公開する

非常に簡単でPublic Repositoryにするだけです。

そして、どのように参照していたかがかかれてあるfishfileをみていきます。

開発段階で

$ fisher add (pwd)

と絶対パスを指定したと思います。それを

[OwnerName]/[RepoName]

に変更をします。例えば、自分が作成したfishpleloggerだと以下のようにします。

KeisukeYamashita/fishplelogger

対応するリポジトリは以下の通りです。

github.com

そして、再度読み込みます。

$ fisher

これで公開ができます。

まとめ

Fisherのおかげで非常に簡単にfish shellパッケージを公開することができます。

どんどん公開して行こうと思います。