Homebrew-cask のお陰で Homebrew でアプリも管理出来ますが、 App Storeからダウンロードするような物は管理できません。
そこさえ出来ればMacにインストールが必要な物のほぼ全てが管理出来るのですが、 その辺、やはり結構難しいみたいで少なくともインストールをコマンドラインから 行う様な方法は今のところ分かりません。
ですが、すでにインストールされてるアプリの中でApp Storeからインストールされた 物を探したり、 それらをアンインストールする方法はあるみたいなので、 その辺を homebrew-file に組み込んでみました。
App Storeからインストールされたアプリをコマンドラインで探す
App Storeからインストールされたアプリは その中にContents/_MASReceipt/receipt というファイルを持っています。
List All Apps Downloaded from the Mac App Store via Command Line
このファイルを探すことによってインストールされたアプリを App Storeからインストールされたものかどうか判断することが出来ます。
上の参考サイトでは
$ find /Applications -path '*Contents/_MASReceipt/receipt' -maxdepth 4 -print |\sed 's#.app/Contents/_MASReceipt/receipt#.app#g; s#/Applications/##'
こんな感じでfind
を使った方法が紹介されてます。
homebrew-file
の中ではpython
なので
1 2 3 4 |
|
こんな感じで取ってきています。
homebrew-fileをアップデートしてもらってbrew file init
してもらうと
Brewfileの最後に
1 2 3 4 5 6 7 8 |
|
こんな感じでApp Storeからインストールされたアプリ一覧が載るようになります。
App Storeからインストールされたアプリをコマンドラインでアンインストールする
App Store以外から取ってきたアプリは基本的には そのアプリ自体を消してしまうだけです。 (ただし、設定ファイル等全てキレイにしたい場合はApp Cleanr等使う方が良いです。)
一方、App Storeからインストールするものは、 その方法で消してしまうと後からApp Storeから再インストール出来なくなったり してしまうので、きちんと消すためには Launchpadを立ち上げてそこから削除します。
Launchpadの画面でどれでもいいからアイコンをクリック長押し、 そうすると全部のアイコンがゆらゆらし始めてApp Storeから インストールされたものに関しては右上に印が出るのでそれをクリックすれば Macからアンインストールされます。
ただ、何やらLaunchpadにものすごいバグがあって Launchpadからの削除にはちょっと注意が必要みたいですが。 (未だこれに関してのアップデートは無いように見えます。)
Launchpadからアプリを削除するだけでApplication Support以下のファイルを全消ししてしまうバグが見つかる - Macの手書き説明書
ともかく、アンインストールするときに
単にrm
とかで消してしまうと問題が起こるので
きちんと扱おうとするとLaunchpad経由等、正しく情報を書き換える事が必要です。
実はこの様なApp Storeからインストールされたアプリに関して、
OS Xではuninstall
という隠し?コマンドがあってこれを使ってアンインストールすることが出来ます。
アプリの位置をfile:///
で指定して管理者権限で
$ sudo uninstall "file:///Applications/App Language Chooser.app"
の様に実行してあげればOK。
追記: 2014/11/16
空白のあるアプリの場合には"
で囲っても
1
$ sudo uninstall "fle:///Applications/App Language Chooser.app"
2014-11-XX XX:XX:XX.XXX uninstall[46524:15841339] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSSetM addObject:]: object cannot be nil'
*** First throw call stack:
(
0 CoreFoundation 0x00007fff8a3a764c __exceptionPreprocess + 172
1 libobjc.A.dylib 0x00007fff8cbb16de objc_exception_throw + 43
2 CoreFoundation 0x00007fff8a2b4cb9 -[__NSSetM addObject:] + 329
3 uninstall 0x00000001078355ab uninstall + 5547
4 libdyld.dylib 0x00007fff8fea95c9 start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
$
みたいにエラーが出ます。
これを回避するには下のページで指摘されてる様に、
空白を%20
にしたり、URIエンコードしてあげる必要があります。
App\ Language\ Chooser.app
の様に空白をセスケープしてもダメなので
きちんとApp%20Language%20Chooser.app
の様にエンコードしてあげる必要があります。
Brew-fileの中では
1 2 3 |
|
みたいな感じでurllib2
のquote
関数を使ってエンコードすることにしました。
これで
App Language Chooser.appの様な空白入りのアプリも大丈夫です。
追記ここまで
ここで管理者権限としてパスワードを聞かれますが、 アンインストール時にさらにポップアップが出て管理者のパスワードを要求されます。
なので、コマンドラインから実行できるものですが、 実際にMacそのものにログインしてGUIでポップアップを処理できる様になってないと 使えないみたいです。 (外からsshした様な場合には使えない。)
なのでちょっと面倒がありますが、一応コマンドラインから アンインストールを始める事が可能です。
また、このコマンドをApp Store以外からインストールしたものに行うと アンインストール出来ない、と出ます。
homebrew-fileでは、clean
するときにBrewfileにないアプリが
インストールされてた場合はそれをuninstall
するようにしました。
追記: 2016/02/12
どうもOS X El Capitan (10.11)からはuninstall
コマンドが無くなったようです。
その代わり、普通にアプリをそのまま削除しても App Storeから再インストールが問題なく出来る様になっています。
追記ここまで
まとめ
Homebrew-fileで出来る様になったことは
init
等でリスト作成時にApp StoreのアプリもBrewfileに書き出す。clean
時にBrewfileにないものは削除する。(ただし、最初にsudo
のパスワードを コマンドラインから聞かれ、さらにポップアップでアプリ毎に聞かれます。)install
時には今のところコマンドラインベースのインストール方法がわからないので 取り敢えずインストールされてないものがあったらPlease install App Language Chooser from App Store!
みたいな メッセージを出す。
と言った感じ。
brew file init
すると
したみたいな感じで
appstore
というコマンドともに記述される様になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
インストールではappstore
のアプリについては
手作業で入れて!という表示が出るだけですが、
それでもインストールされてるものを簡単に管理できて、
他の環境で合わせたりするには便利だと思います。
追記: 2016/02/13
mas
というコマンドラインツールが開発され、これによって
コマンドラインからApp Storeのアプリをインストールすることが可能になりました。
のでそれを使ってBrew-fileでも App Storeのアプリを自動で入れられるようにしました。
追記ここまで
出来そうなこと
インストール自体はApple IDを使ってApp Storeからインストール、と言う作業を 他から行うことが殆ど無理そうな感じです。
唯一できることとしたら、1つ自分の大元サーバーMacを作っておいて
そこではApp Storeを使ってダウンロードし、
他のMacでは、scp
でもなんでも手段は良いのでそのサーバーからコピーしてくる、
と言う方法。
一応License的な面でも両方自分で使ってるものなら問題ないみたいです。
アップデートだけに関してAutometerを使ってごにょごにょする、 と言うものもありました。 その辺使えばインストールも出来そうなできなそうな感じですが、 いずれにしろAutometerの方で設定を行わないとダメなので 一筋縄では行かない感じ。
osx - Can Mac App Store installs & upgrades be automated? - Ask Different
osx - How to apply Mac App Store software updates from the command line? - Super User
それから、OS Xには
softwareupdate
というコマンドがあります。
$ softwareupdate -l
Software Update Tool
Copyright 2002-2012 Apple Inc.
Finding available software
Software Update found the following new or updated software:
* RAWCameraUpdate6.01-6.01
デジタルカメラ RAW 互換性アップデート (6.01), 7083K [recommended]
$
な感じでアップデート情報が見れたりsoftwareupdate -i -a
でアップデートのインストールをコマンドラインから行う事ができます。
ただ、これはOS自体や、iTunes等、システムに組み込まれたアプリ (従ってApp Storeにも出てこないもの) に関してのアップデートだけを行えるものなのでApp Storeからインストールしたアプリなんかは したものにアップデートできません。
なので、結局これは自動アップデートで行える事が出来るだけのコマンドなので 余り使う機会はないかな、と言った感じ。
ということで、インストールに関してはやはり難しそうだな、というのが 今のところです。
-
実際に、空白のないもの(LINE.app, 名前が短かったから。。。)で試したんですが 空白入りのものは試してませんでした、すいません。 App Language Chooserはリストの一番上にあったので今度はそのまま書いた感じです。。。
ちなみに空白入りを
"
で囲わないと$ sudo uninstall fle:///Applications/App Language Chooser.app URL is not uninstallable: Language URL is not uninstallable: Chooser.app URL is not uninstallable: fle:///Applications/App
と別の物としてそれぞれ認識されます。
逆に言うと、複数のアプリを同時にアンインストールすることも可能です。