📦 概要
パッケージ機能を追加する動機
-
Ziは柔軟で機能豊富なプラグインマネージャーですが、ユーザーはその設定に圧倒されることが多いようです。
-
パッケージマネージャーに似た次のような機能が複数あります。
- プラグインのGitリポジトリまたはパッケージのリリースURLを指定できます。
- get the list of the recommended ice-modifiers for the plugin,
- there can be multiple lists of ice-modifiers,
- ice修飾子リストはプロファイルに保存されます。デフォルトでは少なくとも 1 つのプロファイルがあります。
- the ice-modifiers can be selectively overridden.
- バイナリに対していわゆるシム(転送スクリプト)を自動的に提供します。
- extend
$PATH
to expose the binaries, - it can run
Makefile
and more.
-
一般に、Ziには驚くようなことを可能にするフックがたくさんありますが、その内容は徐々に良いものに進化していくことが多く、現在のバージョンをすべて把握することは困難です。
The bin-gem-node annex is recommended, otherwise, some packages will fail to install due to missing functionality.
The any-gem and any-node packages
これらは、新しく作成されたプラグインディレクトリに、任意のGem(複数可)やNodeモジュール(複数可)をローカルインストールすることを可能にします。 例:
zi pack param='GEM -> rails' for any-gem
zi pack param='MOD -> doctoc' for any-node
If the installation is used in the .zshrc
file then use id-as'…'
, then Zi knows that the package is already installed.
Zi の構文では、以下の例のように Unicode 矢印を使用することができます。
zi id-as=jekyll pack param='GEM → jekyll' for any-gem
バイナリは shims 経由で PATH を変更することなく公 開されます。 Shims are correctly removed when deleting a plugin with zi delete …
The so-called packages are GitHub repositories holding a package.json
file with the meta-data in them. This way you don't have to (but still can) specify ice-modifiers, which might be handy when the ice-modifiers list is long and complex.
導入例
This way, instead of the following command used to install fzf
:
zi lucid as=program pick="$ZPFX/bin/(fzf|fzf-tmux)" \
atclone="cp shell/completion.zsh _fzf_completion; \
cp bin/(fzf|fzf-tmux) $ZPFX/bin" \
make="PREFIX=$ZPFX install" for \
junegunn/fzf
必要なもの:
zi pack for fzf
to get the complete setup of the fuzzy finder, including:
- the completion
- the additional executable script
fzf-tmux
The installation is like with package-manager because you don't need to invoke Zi anymore once installed to use fzf
(that's because fzf
is just a binary program and not e.g.: a shell function). You can also update the package with zi update fzf
– it'll cause the project to refresh and rebuild, like with a "normal" package manager such as apt-get
. However, it'll be more like to emerge
from Gentoo, because the installation will be from the source… unless… the user will pick up a binary installation by profile argument specified in the pack'…'
ice.
通常のソフトウェアインストールにZiパッケージを使用する場合の長所
通常のパッケージマネージャでインストールできるソフトウェアをZiでインストールすることには、いくつかの利点があります。
-
Pro: The Zi packages typically use the URLs to the official and latest distributions of the software (e.g.: the ecs-cli package, which uses the URL:
https://amazon-ecs-cli.s3.amazonaws.com/ecs-cli-linux-amd64-latest
when installing on Linux). -
Pro: You can influence the installation easily by specifying Zi ice-modifiers, e.g.:
zi pack=bgn atclone="cp fzy.1 $ZI[MAN_DIR]/man1" for fzy
to install also the man page for the
fzy
fuzzy finder (this omission in the package will be fixed soon). -
Pro: The installation is much more flexible than a normal package manager. 使用可能な自由度の例:
- to install from Git or release-tarball, or a binary-release file,
- to install via shims or via extending
$PATH
, or by copying to$ZPFX/bin
, - to download files and apply patches to the source by using the
patch-dl
annex features.
-
Pro: The installations are located in the user home directory, which doesn't require root access. Also, for Gems and Node modules, they are installed in their plugin directory, which can have advantages (e.g.: isolation allowing e.g: easy removal by
rm -rf …
). -
Con: You're somewhat "on your own", with no support from any package maintainer.
Thus, summing up 1. with 4., it might be nice/convenient too, for example, have the latest ECS CLI binary installed in the home directory, without using root access and always the latest, and – summing up with 2. and 3. – to, for example, have always the latest README
downloaded by additional ice: dl'https://raw.githubusercontent.com/aws/amazon-ecs-cli/master/README.md'
(and then to have the README
converted into a man page by the remark
Markdown processor or other via an atclone''
ice, as the tool doesn't have any official man page).
パッケージの追加
-
Contact the author to have the repository at the Z-Shell organization or set the ZI[PKG_OWNER].
-
Populate the
package.json
– I suggest grabbing the one forfzf
ordoctoc
and doing a few substitutions like doctoc →your-project
and then simply filling thedefault
profile in thezi-ices
object – it is same as passing ice-modifiers tozi ice …
but in JSON. -
The project name in the
package.json
should start withzsh-
. Zi で指定する場合、このプレフィックスはスキップされます。 -
コミットしてプッシュする。