Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What is going on with this article?
@masa0x80

`fresco`:fish向けプラグインマネージャー

More than 3 years have passed since last update.

まとめ

  • frescoというプラグインマネージャーを作りました
  • frescoではghqを使ってプラグインを管理します
  • fishermanと異なりシンボリックリンクは作りません

これまでのあらすじ

fishを使う上で、$HOME/.config/fish/functions/配下のファイルの管理について下記の点が気になり始めました。

  • $HOME/.config/fish/functions/配下にファイルがフラットに配置されている
  • 複数のfunctionが連携して別の機能を実現している場合に、どのファイルが連携しているのかわかりにくい

プラグインマネージャーを使うとプラグインという論理的な単位で管理することができますが、fishermanを使ってプラグインをインストールすると$HOME/.config/fish/conf.d/$HOME/.config/fish/functions/といったディレクトリー配下にシンボリックリンクが配置されます。プラグインマネージャーは使いたいけれど、シンボリックリンクが作られるという点が肌に合いませんでした。

1ヶ月程度fishを使い慣れてたということで、fish自体の機能の勉強と各プラグインがどのような構造になっているのかの調査を兼ねて、シンプルなプラグインマネージャーを作ることに決めました。

開発にあたって

開発にあたっては開発方針を下記3点としました。

  • シンボリックリンクを使わない
  • プラグインはghqで管理する
  • oh-my-fishfisherman向けのプラグインも管理できる

シンボリックリンクを使わない

fishでは$HOME/.config/fish/functions/配下にファイルを配置しておくとオートロードされる仕様(参考リンク)ですので、fishermanが行っているシンボリックリンクをfunctions/配下に配置するというアプローチは合理的な方法です。しかし、これがどうしても気に入らなかったのです。

シンボリックリンクでオートロードというソリューションを使わずファイルを読み込む手段としてsourceが使えそうです。ということで、各プラグインのファイルをsourceするコードを書くというアプローチを採用することにします。

プラグインはghqで管理する

普段からリポジトリーの管理にはghqという便利なツールを使っているので、GitHubに公開されているプラグインの管理にもghqを使いたいと考えました。

frescoを使うためにghqが必要になってしまいますが、携わっているプロジェクトや普段使いのプラグインのリポジトリーを統一的に管理できるのはとてもスッキリします。

oh-my-fishfisherman向けのプラグインも管理できる

fishには既に多数のプラグインが存在します。

これらの資産を活用しない手はありませんので、下記仕様に対応することにします。

  • fishfileに依存するプラグインが記載されている
  • uninstall.fishという後始末スクリプトを準備しておくとプラグイン削除時に呼ばれる

見落としている仕様があれば教えていただけると助かります。

fresco誕生

そんなわけでfrescoができました。

インストール

ghqが入っている状態で下記コマンドを実行することでfrescoをインストールすることができます。

$ curl https://raw.githubusercontent.com/masa0x80/fresco/master/install | fish

このコマンドは内部で下記を実行しているだけです。

  1. ghqfresco自体をダウンロード
  2. source (ghq root)/github.com/masa0x80/fresco/fresco.fishを行う$HOME/.config/fish/conf.d/fresco.fishを作成

frescoの使い方

プラグインの追加

例として、sharkをインストールしてみます。

$ fresco fisherman/shark
Download /Users/masa0x80/.ghq/github.com/fisherman/shark
Download /Users/masa0x80/.ghq/github.com/fisherman/getopts
Enable fisherman/shark

frescoでインストールされたプラグインは$HOME/.config/fish/plugins.fishファイルに記録されるので、確認してみましょう。

$ cat $HOME/.config/fish/plugins.fish
fisherman/getopts
fisherman/shark

fresco listでもfresco管理下のプラグインを確認できます。

$ fresco list
fisherman/getopts
fisherman/shark

インストールができたようなのでsharkコマンドを試してみます。

$ seq 8 | shark
▁▂▃▄▅▆▇█

無事インストールできたようです。

プラグインの更新

プラグイン名を指定してfresco updateを実行することで、特定のプラグインを更新することができます。

$ fresco update fisherman/shark

fresco管理下のプラグインすべてを更新することもできます。

$ fresco update --all

fresco自体を更新したい場合は--selfオプションを指定してください。

$ fresco update --self

プラグインの無効化・削除

プラグインが不要になった場合は下記コマンドで無効化できます。

$ fresco remove fisherman/shark

なお、--forceオプションを付けて実行することで、ghq管理のリポジトリーごと削除することができます。

$ fresco remove --force fisherman/shark

おわりに

frescoはイタリア語で「新鮮な」という意味です。

よろしければ鮮魚をご賞味ください。

1
Help us understand the problem. What is going on with this article?
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.
Sign Up
If you already have a Qiita account Login
1
Help us understand the problem. What is going on with this article?