Table of Contents
Atomのパッケージをリリースすることをパブシッシュというが、リリースを取り消すことをアンパブリッシュという。 この記事はそのアンパブリッシュのやり方などについて。
筆者の環境は以下。
- Windows 7 x64
- Atom 1.2.4
- Git for Windows 2.6.3
アンパブリッシュのやり方
リリースしたパッケージのプロジェクトのルートフォルダ(package.jsonがあるところ)にcd
して、apm unpublish
を実行するだけ。
または、任意のフォルダでapm unpublish <パッケージ名>
を実行する。
特定のバージョンだけアンパブリッシュしたい場合は、apm unpublish <パッケージ名>@<バージョン>
。例えばapm unpublish [email protected]
。
注意すべき点 1: Git Bashでアンパブリッシュするとエラー
Git for WindowsのGit Bash上で、Windows版Atomに付属するapmでapm unpublish
を実行すると以下のエラーが出る。
Error: EINVAL, invalid argument
at new Socket (net.js:157:18)
at process.stdin (node.js:693:19)
at Unpublish.module.exports.Unpublish.promptForConfirmation (C:\Users\Kaito\AppData\Local\atom\app-1.2.4\resources\app\apm\lib
\unpublish.js:87:48)
at Unpublish.module.exports.Unpublish.run (C:\Users\Kaito\AppData\Local\atom\app-1.2.4\resources\app\apm\lib\unpublish.js:126:21)
at Object.module.exports.run (C:\Users\Kaito\AppData\Local\atom\app-1.2.4\resources\app\apm\lib\apm-cli.js:226:32)
at Object.<anonymous> (C:\Users\Kaito\AppData\Local\atom\app-1.2.4\resources\app\apm\lib\cli.js:6:7)
at Object.<anonymous> (C:\Users\Kaito\AppData\Local\atom\app-1.2.4\resources\app\apm\lib\cli.js:17:4)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
コマンドプロンプトでやるべし。
注意すべき点 2: アンパブリッシュはパブリッシュの真逆じゃない
以前の記事で
apm publish
は以下の処理をすると書いた。
- (初回のみ)パッケージ名をatom.ioに登録する。
- package.jsonのversionをインクリメントしてコミットする。
apm publish
にminorを指定するので、0.1.0になる。代わりにmajorかpatchを指定すると、1.0.0か0.0.1になる。- Gitのタグを作る。
- GitHubに変更とタグをpushする。
- atom.ioにパッケージを登録する。
この内、apm unpublish
が取り消してくれるのは 5 だけ。
3, 4 のタグ作成も取り消したいのであれば、
$ git tag -d v0.1.0
$ git push origin :v0.1.0
のようにして、ローカルリポジトリとリモートリポジトリ両方のタグを削除する。
また、2 のpackage.jsonのversion変更を取り消したいのであれば、git log
でPrepare 0.1.0 release
みたいなログのコミットをさがしてそのハッシュをメモり、
$ git revert <ハッシュ>
を実行してgit push
。(上記<ハッシュ>の部分は、apm publish
後何もcommitしてないならHEAD
でもよし。)
注意すべき点 3: パッケージのキャッシュ
とあるパッケージ、仮にhoge
を開発していたとき、以下のような操作をした後に変な現象が起こった。
- バージョン
0.1.0
をパブリッシュ。 hoge
をちゃんとインストールできるかを確認するために、apm unlink hoge
で.atom\packages
からリンクを削除。(以前、パブリッシュすると.atom\packages
にはパッケージの実ファイルが入ると書いたが、リンクのままだった。勘違い?)- AtomのSettingsから
hoge
をインストール。
- ちゃんとインストールできなかったので
apm unpublish hoge
して、バージョンも戻す。 hoge
を修正して、再度0.1.0
としてパブリッシュ。hoge
をちゃんとインストールできるかを再度確認するために、apm unlink hoge
して、- AtomのSettingsから
hoge
をインストール。
これをしたら最終的になぜか修正前のhoge
がインストールされた。
どうやらキャッシュがある模様ということで、apmのソースをみたら、パッケージのインストール中に以下のようなことをしていることがわかった。
- AtomのサイトのREST API (https://www.atom.io/api/packages/hoge/) からパッケージ情報を取得。
- また別のREST API (https://www.atom.io/api/packages/hoge/versions/0.1.0/tarball) を実行して、パッケージのアーカイブ(tar.gz)をテンポラリフォルダにダウンロード。 どうもこれは実際にはGitHubのReleasesからダウンロードしている模様。 因みにGitHub Releasesのアーカイブは、リポジトリにタグが追加されると自動で作られる。
npm install
でそのアーカイブを指定してインストール。
この手順の 2 をやる前に、.atom\.apm\hoge\0.1.0\package.tgz
を探して、見つかるとダウンロードせずにこっちをインストールする。
ソースの雰囲気から、.atom\.apm\
に入っているのはキャッシュのようで、いつ作られるかはよくわからないが、これが上記変な現象の原因ぽい。
ということで、.atom\.apm\hoge\0.1.0\package.tgz
を消して再度インストールしたら無事修正後のhoge
が入った。
このキャッシュの件や、apm unpublish
がパッケージのバージョンを戻さないところをみると、同じバージョンを再度パブリッシュするのはダメな操作なのかもしれない。
修正したかったらバージョンを上げろということなのかも。