Tsuzu's Notes

主にIT系備忘録

スクリプトを毛嫌いしていたがCoffeeScriptを使ってみる

CoffeeScriptを使ってみました。 f:id:tsuyochi23182:20160101234544p:plain

CoffeeScript、便利ですね。

型がないし(Python等を除く)、実行時しかコードの安全性がわからないし、遅いし...などスクリプト言語の嫌いな点をあげればキリがないのですが、今回やむを得ずスクリプト言語を使いました。

Slack*1Botを作るためです。SlackのBotは多分頑張ればC++とかでも作れるんでしょうけど公式リファレンスも貧弱だったのでやめました。

何を作ったかというとSlack上にSnippetだったりファイルアップロードだったりで投げたコードを実行するためのBotです。

なぜJavaScriptでなくCoffeeScriptを選んだのかといえば公式リファレンスから飛んだGithubページのコードがCoffeeScriptだったためです。(Homebrewで落とした時はJavaScriptでした。実行はCoffeeScriptJavaScriptに変換し、Node.JSで行っています。)

とりあえず使ってみて思ったことを挙げていきます。

  • HTTP、ソケット周りが楽!
    C++はネットワーク周りがとても弱いです。(Cのsocketとかcurl、Boost.Asioなどはありますが)
    それに比べさすがスクリプト言語はそこらへんが書きやすいです。
    今回、実際のコード実行処理を行ったのはC++のため、二つのプログラムの通信用でSocket.IOを用いました。 これが便利で、ソケットが切れても自動再接続を行ってくれます。イベント処理等も楽で驚きました。

  • 各処理が短く綺麗に書ける
    高階関数正規表現、関数型のような記述法などにより短く書けるようになってます。
    SlackのAPIとSocket.IOはイベントハンドラー式で簡単に書けたのでだいぶ楽でした。

  • ライブラリのインストールが楽
    ご存知npmです。npm install -g socket.ioだけですぐにrequire 'socket.io'できました。

  • 型は気をつけていれば意外と大丈夫
    型周り面倒だろうなあ、と思っていましたが自分で気をつけながら書けば案外問題なく書けました。
    ただ、ネットで拾ったコードとかを読むときは型がないのはつらかったです。
    型がないのはjsonみたいな構造の処理ではすごい楽でした。

  • 実行してみないとコードのエラーが判別できない
    messge.channelとかなっていてもそこの処理に入るまではバグかどうかの判定ができないのがとても不便でした。
    デバッグが超重要です。これがとても辛い...。

こんな感じですね。思ったよりは使えました。
まあでもちゃんとしたものを作ろうと思ったらスクリプト言語ではやりたくないですね...コンパイルによる安全性の保証がないのが怖すぎる。
軽く何かを作りたい時は使ってもいいかなー、というぐらいには思えるようになりました。以上です。

ちなみに今回Slack上で動かすやつは前の記事のonLINEにSocket.IOでリクエスト送ってるだけです。

*1:去年ぐらいから話題になったクローズドなコミュニケーションツール。招待しないと入れない形式でチームごとにほぼ完全に分離されている。ユーザの多くはエンジニア等。