こんにちは!VOYAGE GROUP新卒エンジニアの井手上です!
今回の記事はSkypeテキストチャットのためのコマンドラインインターフェースを作ろう
という内容です。
突然ですが、皆さんは仕事でのコミュニケーションにどのようなツールを利用していますか?
事業部にもよりますが、私の所属するadingoプラットフォーム本部では
Skypeインスタントメッセージ(テキストチャット)を利用しています。
Skypeの良い点は、やはり多くのプラットフォームで利用できるところです。
WindowsやMac、Linux等のOSにとらわれずに誰でもチャットに参加できるので
エンジニアだけではなく、業務に関わる全員と効率的なやり取りが可能です。
しかしSkypeを活用するようになって出てきた問題が2点あります。
- グループが増えてくると切り替えが大変
- 黒い画面が恋しい
私のSkypeのグループを見てみると、業務関係のグループであったり、エンジニアが
プログラミングの話をするグループであったり、同期が集まってワイワイするグループ
であったりと、小さなものから大きなものまで多くのグループがあります。
グループが多くなると、あるグループで会話が進んでいる裏で、別のグループでも
進んでいるという状況が多くなり、カーソルでグループをポチポチ選択してから
切り替える必要があります。このような場合はSkypeの画面を並べてチャットの一覧性
を高めたくなりますね。
(2)については好みによりますが、エンジニアの中には端末とかターミナルなどと呼ばれる
黒くて地味な画面を愛してやまず、一瞬でも長く黒い画面と付き合いたい方が一定数います(自分調べ)。
確かに操作がキーボードのみで完結しますし、zshのようなシェルを使用すると単語レベルでの
カーソル移動ができたりと、Skypeのチャット入力画面よりも編集能力は高いかもしれませんね。
と長くなりましたが、結局下の図のようにテキストチャットを利用したいわけです。
さて、このさいきょうのSkypeを実現するために以下のことができる必要があります。
- コマンドラインからチャットを読んだり発言できたりする
- 画面を分割できる
(2)の「画面を分割できる」ですが、iTermやscreenの画面分割機能を使用すれば実現できそうです。
(1)についてはこれといったものが見つからないのでオレオレSkypeコマンドラインインターフェース(CLI)を
サクッと作っちゃいましょう。ようやく本題です。
Apple eventでアプリケーションと通信
CLIを作るためのプログラミング言語は何であれ、Skypeアプリケーションにコマンドを送信してチャットの
情報を取得したり発言する方法が必要です。
D-BusやApple eventを利用するとプロセス間通信でアプリケーションと対話できます。
D-BusやApple eventを利用するとプロセス間通信でアプリケーションと対話できます。
下のスクリプトはAppleScriptからApple eventを利用した例です。
tell application "Skype"send command "SEARCH RECENTCHATS" script name "recentchat"end tell
commandに続く"SEARCH RECENTCHATS"に注目してください。この例ではSkypeアプリケーションに
"最近のチャットを探してください"というコマンドを送信しています。そうすると以下のような
メッセージが帰ってきます。
CHATS #user1/$e18dd512f98ce425, #user2/user1;bc0710cb4a32bdc2
CHATS以降、カンマで区切られた文字列は最近のチャットのIDを表します。あるチャットでの会話を
取得したい場合は、"IDがXXのチャットの会話をください"とSkypeアプリケーションにまたコマンドを
送信します。
他にもいろいろなコマンドが用意されており、リファレンスが公開されています。
発言したりメッセージを取得するだけでなく、電話もできるようですね。
様々なプログラミング言語でApple eventを利用するためのライブラリが公開されているので、好きな
プログラミング言語でオレオレSkype CLIを作り放題ですよ!
オレオレSkype CLI
今回作成したオレオレSkype CLIをGitHubに公開しています。
インストール:
$ git clone https://github.com/jewel12/skype_chat.git$ cd skype_chat$ gem build skype_chat.gemspec$ gem install skype_chat-0.0.1.gem
インストールするとskyというコマンドが利用できます。
チャット一覧
$ sky liste4 VGエンジニア user1 user2 user386 同期とチャット user1 user2 user3...
sky listと実行するとチャットの一覧が表示されます。トピック名があればトピック名が表示され、
チャットに参加しているユーザーも最大3名まで表示しています。
最初に"e4"や"86"と表示されている文字はチャットのIDになり、他のコマンドで利用できます。
チャットを読む
チャットに参加しているユーザーも最大3名まで表示しています。
最初に"e4"や"86"と表示されている文字はチャットのIDになり、他のコマンドで利用できます。
チャットを読む
$ sky read e4ユーザー1 : やっほー [06-24 23:45] e4ユーザー2 : Common Lisp [06-25 08:35] e4...
sky read e4とチャットIDを渡すと、会話の内容が表示されます。
sky stream e4とすると、新しいメッセージが投稿されたらそれを表示し続けます。
発言する
sky send e4 こんにちは〜
sendコマンドで発言を投稿できます。
応用する
会話を表示しているだけなのでgrepでフィルタリングしたりすることもできます。
sky send でちょっとしたSkype botを作ってみるのも良いかもしれませんね。
sky stream e4 | grep Java
sky send e4 "`date`"
ここまで読んでいただきありがとうございました。
皆さんも色々なCLIを作成して、黒い画面を愛でましょう!!