SublimeSocket + TypeScript ~さよなら! node.js強依存~ 編


概要

node.jsを貶める意図は無いです。


下記の続きです。

謎レシピ:TypeScriptのSublimeSocketフィルタ書いた



どーーーにもnode-tailの遅さに納得いかない。ファイルの更新拾うのが亀過ぎる

+

wsがOriginパラメータ持ってなくて大変めんどくさい

+

この2つのモジュールに依存するのどうなの? 残念なんじゃないの?


と思っていた昨今、

案の定、知り合いに使ってもらったら環境構築の時点でいろいろ躓いたので、

脱node.jsして、tsc以外のnode.js依存の部分を、すべてChromeのExtensionにおんぶに抱っこしてもらう事にしました。

俺の使い方が悪いんです。nodeはいいコです。


前提

・node.jsは結局使う

tscを内部で使っています。

よって、node.jsとtscがインストールしてある必要があります。


・Chromeに、SublimeSocket/tool内のExtensionをインストールしてもらう必要がある

nodeのwsとtailの代替になります。Developerモードでフォルダからインストしてもらう想定。

https://github.com/sassembla/SublimeSocket/tree/master/tool/chromeClient


・SublimeSocketが必要

はい。

現在0.8.5

https://github.com/sassembla/SublimeSocket



動画

百文は一動画にしかず

http://vimeo.com/63188211

TypeScriptのファイルを開いて編集するとエラー行が光ったり、エラー詳細がNotifyされたりする。

以前のようなコマンドラインでの入力がほぼ無いのがうれしい。


最初にlogファイルを作り出すために、touch使ってるけど。



スクリーンショット

同一フォルダに入っているところをフォルダ単位でコンパイルされ、クラス名の重複を怒られている時の図

スクリーンショット 2013-04-02 23.07.25.png



結果

最終的に、Chrome Extensionsで、nodeがやってた上記の内容をすべて肩代わりし、

かつ私的な科学の進歩でいろいろなことができるようになった。


・コンパイルにはtscを使用しているが、nodeとか一切表に出てこない

清々した。


一点、

tscが内部で node 表記でnode実行してるんだけど、Pythonからの実行だと環境変数が継げないので、参っている。

tsc自体に「どこのnodeを渡すのか」とかが指定できると良かったんだけど。

環境変数入れるところからのshellを作る事で解決した。

https://github.com/sassembla/SublimeSocket/blob/master/tool/chromeClient/tscshell.sh



・コンパイルモードが増えた

編集中フォルダのみをコンパイルするFocusモード、

対象のフォルダの中にある.tsをすべてコンパイルするFolderモード、

対象フォルダを含む内包物すべての中の.tsを見つけてきてコンパイルするRecursiveモード(未完どころか未制作)

から選べるようになるそのうち。今は内部の値で、直値でFolderモードに指定してある。

動画の中でもFolderモードにしてある。



・省エネ指向

コンパイル前後をフックする事で、Chromeでのtail自体の処理を、必要な時だけに絞ったりしてる。

SublimeSocketに動作設定を入力する際のファイルの、setReactorのあたり。

https://github.com/sassembla/SublimeSocket/blob/master/tool/chromeClient/TypeScriptFilter.txt


nodeでのtail時よりちょっと省エネです。でんちながもち。

、、、まあ、Chrome自体が、「これなんかめっちゃ電池喰ってないか?」と思う事はある。メモリも。


インストール手順

1.TypeScriptのファイルを適当なフォルダに用意します

スクリーンショット 2013-04-03 17.23.04.png


2.SublimeTextを入れます

(略)

tsファイルを開くとこんな感じです。シンタックスハイライトとかは、このへん がいい感じです。

スクリーンショット 2013-04-03 17.23.20.png

3.SublimeSocketを入れます

PackageControlには申請してないので、cloneして落としてください。ST3に向けて作業中です。

masterブランチそのままで良いと思います。

git clone https://github.com/sassembla/SublimeSocket.git


4.Chromeを起動して ChromeExtensionsにSublimeSocketChromeClient プラグインを追加

パッケージ化してないプラグインがSublimeSocketに入ってるので、インストール。

デベロッパーモードにチェックが入っていないと出ないので要チェックや。

スクリーンショット 2013-04-03 17.23.52.png

場所は、

/Users/ユーザー名/Library/Application Support/Sublime Text 2/Packages/SublimeSocket/tool/chromeClients/TypeScriptClient

TypeScriptClient フォルダを選んで、選択。


できた。 「ファイルのURLへのアクセスを許可する」 にチェック入ってるのを確認してくださいませ。

スクリーンショット 2013-04-03 17.20.20.png

5. .tsが置いてあるフォルダに、適当な名前でログファイルを作成する

コンソールで、

touch something.log

とかすれば良いと思う。日本語、スペースが含まれるファイル名はやめといたほうがいい。

スクリーンショット 2013-04-03 17.21.02.png

ここまでで準備完了。


作業する時は、ここから



6.編集したい.tsをSublimeTextで開いて、SublimeSocketをonにする

command + shift + p -> soon とか打てばOK

スクリーンショット 2013-04-03 17.25.19.png


7.  5で作ったlogファイルをChromeに喰わせる

スクリーンショット 2013-04-03 17.22.25.png

スクリーンショット 2013-04-03 17.24.52.png


8.SublimeSocketChromeClient プラグインをOnにする

a.png


☆6と8がこの順番に行われる必要があります。

6でサーバ起動、8でそのサーバに繋ぎに行ってるので。

つなげなかったら落とすとか今度入れよう。



準備完了

これでSublimeTextとChromeが接続されるので、あとは保存するたびにコンパイルが走る。

スクリーンショット 2013-04-03 17.25.38.png

STのコンソール開く (shift + control + `) と、いろいろコンパイル成功したよーとかエラーだよーとか表示される。

スクリーンショット 2013-04-03 17.26.18.png

エラー出す内容書いて保存すると、その場に表示される。 necomimiクラスなんか無い!!

スクリーンショット 2013-04-03 17.26.41.png

エラーは、赤丸のポッチをクリックすると、詳細をNotificationで表示するようにしてある。necomimi、スコープ内に存在しないってよ。

スクリーンショット 2013-04-03 17.26.50.png

以上。



構造

変なシーケンス図みたいなもので書くと、下記のような感じ。

tscのコンパイル結果をChromeがtailし、WebSocketでSublimeSocketに送付、

Errorの表示などを行っている。

STでの保存に反応して、コンパイルが走る。

スクリーンショット 2013-04-05 23.51.23.png



今後

プラグイン内で、結局 tscを使っているので、node.js に依存している。


node tscに依存せずにコンパイル、、、は、目指さない方がいいような気がしている。

なんだかんだ追従が面倒くさそうなので。


あと、フォルダ階層を潜りつつコンパイルするようにします。きっと。そのうち。



メモ

・ChromeExtensions側からWbSocketがcloseできない

SublimeSocketの既知のバグ。直す。

closeがSublimeSocket側に来ないんだよなー。WebSocketSharpのCloseはくるんだけどな。



・設定ファイルでいろいろセットできるようにしたい

コンパイルモードが3種あり、


モード切り替え を設定画面にもつ、、とかが出来ると思うんで、やろうかとおもってたんだけど、

localStrage使うしか無さそうで、とても面倒くさくなった。

コード内の値を直に書き換えると良いのでは。

https://github.com/sassembla/SublimeSocket/blob/master/tool/chromeClient/SublimeSocketChromeClient.js#L28



・そろそろrunShellをrunSeqShellとrunKVShellに分けないとなー。

SublimeSocketの中の不整合。

置換系の差が出るはず。バグとしてそのうち気付く気がする。

禁止文字replaceはかかってるので、その辺に追記すれば、、

⇒分けない方がいいって言われたなー。うーん。そだね。


なんかあれば、@toru_inoue まで。