blog.syfm

徒然なるままに考えていることなどを書いていくブログ

iTunes をコマンドラインから操作するためのツールを書いた

ふと iTunesコマンドラインから操作したいなぁ…と思い、絶対あるだろうとググってみたら案の定あったのですが、いくつか気に入らないところがあるものばかりだったので作りました。
その他の理由としては、UNIX という考え方 という本を読んでいて CLI ツールを書きたくなったからです。

既存の CLI ツールで気に入らなかった点

  1. 独自の対話型インターフェースに入るもの
    自分の場合、作業をするためにコマンドラインに篭っていて、決して iTunes で音楽を聴くためにいるわけではないので、対話型インターフェースはあんまり…という感じでした。

  2. 検索がしんどい
    絶対一致の検索ではないにせよ、検索サブコマンド → 一致した結果が表示される → 再生サブコマンドに曲を入力する といった動作が面倒でした。

今回作ったもの

iTunes CLI という名前で作りました。

github.com

基本的な機能はほかのツールと同じですが、対話方式ではなく、コマンドで完結するようにしています。
また、検索には fuzzy-search ツールを利用することによって、べんりに選択できるようにしました。
fzf、fzy、peco などの任意の fuzzy-search ツールが利用できます。
動作的には以下のような感じです。

https://github.com/lycoris0731/itunes-cli/raw/master/demo.gif

曲名での検索に加え、プレイリストでも検索ができます。

今回のツールも Go 製で、iTunes のコントロールには AppleScript を使用する必要があるので、以下のライブラリを利用させていただきました。

github.com

ただ、このライブラリに少し不都合があり、それを修正したものを PR として投げていますが、まだ取り込まれていません。 その場合、

$ go get github.com/lycoris0731/mack
$ cd $GOPATH/src/github.com/lycoris0731/mack && git checkout output-tell

を実行する必要があります。

無事取り込まれました 🎉

Go から fuzzy-search をするには、パイプで繋いで OS コマンドを実行する必要があるので、mattn さんの以下のライブラリを利用させていただきました。

github.com

ぶっちゃけ、Go を書く時間より AppleScript の読み書きを調べる時間のほうが圧倒的に大きかったです。AppleScript きびしい…。

残課題

  1. 再生モードの切り替え
  2. アーティスト別での検索
  3. アルバム別での検索

一番上は簡単にできると思いますが、下二つはちょっと AppleScript を書かなければいけなさそうなので少しかかるかもしれません。PR ください 🙇