真面目なブログはこっち 👉 blog.s64.jp

DiscordにSpotifyの再生中楽曲を表示する`spoticord`をWindowsで使う

弟が使い方わからなくて困ってたので、他にもわからない人居て困ってるかもと思いメモ。

spoticordとは

nations/spoticord はDiscordのステータスにSpotifyで再生中の楽曲を表示できるコマンドラインツールです。

GitHub上で公開されています。

github.com

必要なもの

実行にあたっての必須要件は以下です。

  • Node.js 8 以降
  • npm 5 以降 (nodeに付属)

今回はWindowsへ導入するにあたり、さらに以下を追加します。

1. Git for Windowsをインストールする

Gitはソフトウェアのソースコードを管理するツールです。今回は主にspoticordのダウンロード / アップデートで内部的に使われます。
Git for Windows の Download から、32bit, 64bitなどお使いのOSに合ったインストーラをダウンロードします。

私の環境の場合、記事執筆時点ではGit-2.15.1.2-64-bit.exeが該当します。

f:id:S64:20171211192814p:plain

インストーラのダウンロードが完了したら、実行しインストールを進めてください。途中複数の選択肢が表示されますが、多くの場合はそのままで問題ありません。

2. GitHubへ会員登録する

この手順は必須ではありませんが、ダウンロード時の制約を受けにくくなる等セットアップをシンプルにできるため行うことを推奨します。

GitHub.comはGitで管理されたソフトウェアを管理・公開できるサービスです。ソフトウェアの利用のみであったり、ソースコードを公開する場合は無償で利用できます。
github.com にアクセスし、Sign upから登録してください。

3. GitHub Desktopをインストールする

GitHub Desktopは GitやGitHub.com上で公開されているソフトウェアを、Git初心者でも簡単に扱えるアプリケーションです。
GitHub Desktop からインストーラをダウンロードします。

f:id:S64:20171211194946p:plain

インストーラのダウンロードが完了したら、実行しインストールを進めます。インストールは自動で進められます。
自動でのインストールが完了すると、以下の画面が表示されます。Sign into GitHub.comをクリックし、さきほど作成したGitHub.comのアカウント情報を入力してください。
もしアカウントを作成しなかった場合、下部のSkip this stepを選択します。

f:id:S64:20171211195334p:plain

入力し進めていくとConfigure Gitなどステップが表示されますが、アカウント情報を入力した場合には原則そのままで問題ありません。最後のステップまで進めFinishをクリックしてください。

4. nodistをインストールする

node (Node.js) はJavaScriptを実行するツールです。nodistはWIndows上でのセットアップを簡略化し、複数バージョンの共存を可能にできるツールです。

nodistのReleasesから、最新のインストーラをダウンロードします。記事執筆時点では、NodistSetup-v0.8.8.exeです。
ダウンロードが完了したら、そのままインストールを進めてください。

5. nodistを使いnodeをインストールする

nodistのインストールが完了したら、nodistでインストールできるnodeの一覧を確認します。コマンドプロンプト (またはPowerShell) を起動し、以下のコマンドを実行します。

nodist dist

列挙されたバージョンの中から、インストールしたいバージョンを確認し、インストール用のコマンドを実行します。例えば今回の場合、spoticordの最低要件を満たしかつ最新の長期サポート版となる8.9.3が良いかもしれません。その場合、以下のコマンドを実行します。

nodist + 8.9.3

プロンプトが返ってきたら、システムで使うnodeのバージョンを設定します。今回は8.9.3を選んだため、以下のようになります。

nodist 8.9.3

Default global pacakge update dsuccessful.と表示されれば問題ありません。

6. spoticordのソースコードをcloneする

GitHub Desktopを開き、[File] -> [Clone repository...] をクリックします。表示されたダイアログのURLタブへ移動し、Repository URL欄に以下のURLを入力します。

git@github.com:nations/spoticord.git

f:id:S64:20171211201519p:plain

[Clone]をクリックし、ソースコードをcloneします。なお、ソースコードはLocal pathに書かれたディレクトリへダウンロードされるため、誤って削除しないようにします。
エラー無く正常に画面が切り替わった場合、cloneが完了しています。今後spoticordをアップデートする際は、この画面のFetch originから行います。

7. spoticordをセットアップする

GitHub Desktopの[Repository] -> [Open in Command Prompt] (またはPowerShell)をクリックすると、spoticordのソースコードが含まれたディレクトリでコマンドプロンプト (またはPowerShell) を開くことが出来ます。コマンドプロンプトを開いたら、以下のコマンドを実行します。

npm install

これにより、spoticordが利用するライブラリがダウンロードされます。
実行できない場合、コマンドプロンプトとGitHub Desktopを一度閉じ再度行ってください。

8. spoticordを起動する / 終了する

前述のセットアップから続けて (または今後同様の手順でコマンドプロンプトを開き) 、以下のコマンドを実行するとspoticordが起動します。

node app.js

終了する際は、一般的なコマンドラインアプリケーション同様に、このプロンプト上で [Ctrl] + [C] を入力すると終了します。

spoticordに貢献する

spoticordは無償で利用でき、さらにオープンソースソフトウェアとして提供されています。
今後も継続的にアップデートされるよう、利用者は以下のような方法で貢献できるでしょう。

  • バグ等を修正し、GitHub上でPull requestを送る
  • GitHub上でプロジェクトにStarを付ける

GitHubに登録している場合、プロジェクトにStarを付けることで開発者を応援することができます。

f:id:S64:20171211202959p:plain

クリックするだけなので、是非Starを付けて応援しましょう。

わからないことあったら聞いてください。

高校時代ハロワに行って、さんざんコケにされた話

マイナーな専門性

マイナーな専門性のみを高めるのは遅かれ早かれ死へ通ずる。
将来スケールしていった時、徐々に自身のリソースが不足し手が足りなくなるか、ある時不要になって手詰まりになると相場が決まっている。
重要なのは関わるタスクを極限までアウトソースできるか、極端な話自身の専門性がいかに陳腐かである。

新たな領域に誰も参入しない理由のひとつに、アウトソースできる人間の有無、属人性の排除可否 からの持続可能性の低さが影響している場合がある。
小難しく言葉をこねたが、要はマイナーな知見があったところで必要とされない、と言えば容易に想像できるはずだ。

雇用が変わる 人材派遣とアウトソーシング ─ 外部人材の戦略的マネジメント The Upheaval of Employment

雇用が変わる 人材派遣とアウトソーシング ─ 外部人材の戦略的マネジメント The Upheaval of Employment

残る生存戦略があるとすれば、これを「自身にしかできないこと」まで昇華させられるか。値付け競争が無くなり、リソースを渇望する人間が居る限りは自身の都合で待たせてもいい。

今の時代、何かの超人になったところで安泰ということはあり得ない。何かにとっての交換可能な価値であることが必要だ。

死んだスーパーマン (こわい話 ふしぎな話)

死んだスーパーマン (こわい話 ふしぎな話)


Twitter User streams APIは今後廃止されます

追記 (2017-06-26 20:58):

2ヶ月前の記事が急に流れ出しましたが、特別変化はありません。公式からのアナウンスを注視してください。

また当初タイトルが Twitter User streams APIは今後数ヶ月以内に廃止されます となっておりましたが、ご指摘頂いたとおり “今後数ヶ月以内” は下書き時点でのミスリードでした。正しくは 新API公開後半年 (数ヶ月) となります。タイトルをTwitter User streams APIは今後廃止されますに改めさせて頂きました。


よく見るとミスってた。正しくコピペすると User streams will eventually be replaced by the Account Activity API. です。


ヒューマンエラーを防ぐ知恵 ミスはなくなるか (朝日文庫)

ヒューマンエラーを防ぐ知恵 ミスはなくなるか (朝日文庫)


明確な時期は出てないものの、User streams API(+ Site streams API) をdeprecateするとアナウンスされました。
deprecateと言っても、その代わりにAccount Activity APIが登場します。重要な通知関連は変わらずリアルタイムで配信されるAPIがあるってことみたい。

Account Activity API (beta) のドキュメントを読んでみると、

The Account Activity API will eventually replace the User streams and Site streams APIs. We plan to provide at least a six month migration window after the Account Activity API graduates from beta. We’ll announce the deprecation date then and encourage you to start using the Account Activity API beta in the meantime.

とあります。こっちの新APIがbeta卒業後 最低6ヶ月の移行期間を用意するってことなので、最悪たとえば明日新APIがproductionに上がった場合は 6ヶ月でUserstreamsが廃止されると取ってもいいかも。
そんなわけはないので、半年以上は使えると思ってよさそう。


Site streamsはもう新規アプリとかで使えてないので割愛。
User streamsが (リアルタイムで) 流してくれていることをおさらいすると、

  • TLのツイート
    • 投稿 / 削除 / 位置情報削除
    • 検閲を受けている場合の国コード
  • APIのrate limit通知
  • 自分のプロフィール更新
  • リプライ
  • RT
    • された / 解除された
  • ダイレクトメッセージ
  • ブロック / ブロック解除
  • ふぁぼ
    • followingが何かふぁぼった / 解除した
    • 自分のツイートがふぁぼられた / 解除された
  • フォロー
    • フォローされた / 解除された
    • followingが誰かフォローした / 解除した
  • リスト
    • 作成 / 削除 / 更新
    • 追加された / 削除された
    • followingが誰か追加した / 削除した
    • 購読された / 解除された
    • followingが何か購読した / 解除した
  • 引用された

あたり。アプリによって全てが配信されるわけではないみたいだけど、ドキュメント上はこれらがある。


新しいAccount Activity APIはWeb Hooksを利用した通知の仕組み。ストリームを繋ぎっぱなしにせず、イベントがある度に都度投げてくれるイメージ。
バッテリー節約になって良さそう。ただ外向きにHTTPを開けておく必要があるので、今後の非公式クライアントは必ずバックエンドのサーバが提供されることになりそう。開発者はサーバ維持が必要になる。

これに関してはsuruyatuでも悩みのタネみたい

Webhooksを受け取ってアプリへPushするサーバ自体はすごく大変ということではないものの、多くのユーザを抱えているアプリにとってはしっかり捌くためにそれなりのコストが発生しそう。けっこう打撃がでかい。


まだAccount Activity APIはBetaなので、これからどんどんUser streamsの提供する内容へ近付いていくと思ってます。
現状で配信がスタートしてるのはdirect_message_events、つまりDM関係のイベントのみ。
おそらくこれは先日新しいDMのAPIが出たのに合わせてということなのだと思うし、多分今後RTや"いいね"の通知も取れるようになるんじゃないかな。

ただし、TLのリアルタイム通知に関してはどうなんだろう?と個人的に疑問。

User streamsは非公式クライアントユーザが ツイートや通知のリアルタイム配信のために使っている、という側面がイメージしやすいのだけど、それ以前にTwitter APIにはけっこう厳しいRate Limitがあるので、ヘビーユーザが規制を受けずに利用するためには必須だったということ。

そういったユーザのTLはめちゃくちゃ早いので、Webhookで送るリクエストの数もバカにならない。HTTPコネクションの確立って意外とコストが高いので、TLがリアルタイムで流れるようなAPIもう出ないんじゃないかな。
出たとしても、だいぶ漏れが多くなりそう。

メッセージングプラットフォームとしてならAPI公開してもいいけど、TLまでAPI経由で読まれちゃうとTwitter, Inc.側からも広告が配信できる余地なくなっちゃうし。非公式クライアント使ってるヘビーユーザが一切収益化できない構造は辞めたいだろうし…



まとめると

  • User streamsが廃止されて、通知まわりが新しくなるよ
  • 開発者はそれなりに大変なので、小さい非公式クライアントは維持が難しいかも
  • TLのリアルタイム配信はどうなるかまだわからないけど、収益化考えると無くなってもおかしくないよね…

あたりまえポエム 君の前で息を止めると呼吸ができなくなってしまうよ

あたりまえポエム 君の前で息を止めると呼吸ができなくなってしまうよ

エンカウント


曙産業 いちどに10貫できる とびだせ! おすし CH-2011

曙産業 いちどに10貫できる とびだせ! おすし CH-2011



COSMOS 国分寺第三中学校合唱部による女声二部合唱

COSMOS 国分寺第三中学校合唱部による女声二部合唱



別れる2人の愛の劇場。 (マーブルコミックス)

別れる2人の愛の劇場。 (マーブルコミックス)



(決定盤)演歌大ヒット大全集

(決定盤)演歌大ヒット大全集

`android.content.res.Resources$NotFoundException: Drawable *:drawable/* with resource ID #0x*`

xmlで記述したdrawableがまれに使えない時がある。
対応は簡単で、XMLの先頭に

<?xml version="1.0" encoding="utf-8"?>

を入れれば動くはず。書き忘れ、不正なXMLということ。
Android Studio標準のVector Drawableジェネレータだと何故かXML宣言が抜けてるので、無駄に時間が溶けちゃうヒト居るかもと思って書いておいた。

思考

すべての男は消耗品である (集英社文庫)

すべての男は消耗品である (集英社文庫)