FiraCode

tonsky/FiraCode: Monospaced font with programming ligatures

「FiraCode」というプログラミング言語の表示を最適化するフォントが開発されてるのを知ったので使ってみている。どういうふうに最適化するかというと、基本はモノスペースなんだけど、プログラミング言語に特徴的な記号の並び(「!=」とか「::」とか「=>」とかいった)に対する合字やマージン調整が定義されていて、プログラミング言語における意味に即した文字の並びが実現されているという。ただ一般的にプログラミングに使うエディタでは合字処理が必要とされないので対応しているエディタでないと使用できないみたい。IntellijのIDEの最新版ではちょうど正式サポートされたようで、フォント設定でEnable Font LigaturesをEnableにすることで使用できる。

最初はちょっと違和感があった(とくに記号をバックスペースで削除するときの動きとかに)けどすぐ慣れたし、快適に感じてきた。目立つ演算子の合字もいいんだけど、「::」「..」「//」のようなデリミタ的な連続記号のスペーシングが適切になるのが気持ちいい。このフォント使って区切りのスペースを最低限にするといいかもしれないな。


JetBrains製品のIssue Navigation機能

Issue Navigation

PhpStorm立ち上げたらTips of the Dayで知らない機能が出てきて設定してみた。VersionControlパネルに表示されるメッセージ(コミットメッセージ、chengeListのタイトルなど)のなかに正規表現にマッチするissue番号を見つけたら該当するissueのwebページにリンクしてくれる機能。

Task & ContextでissueのChangeListをつくるとリンクしてくれていつでも開けるので進めてるissueページのタブを閉じないようにしておいたりしなくていいのでこれはいいな。


IDEプラグイン型の自動テストツール「Wallaby.js」を導入してみた

Wallaby - intelligent test runner for JavaScript, TypeScript, and CoffeeScript

BCCKSの組版エンジンに安定性と大規模な拡張が同時に求められる局面が生じてきたのでちゃんとテストを書いてからいじるようにしようとjsのテストフレームワークやら自動テスト環境やらを調べていたら、Intellij系のIDE(やVisual StudioとAtom)向けのプラグインとして提供され、テストのパス状態や結果がエディタのコード上に完全なかたちで統合されるというツール「Wallaby.js」を見つけたので導入してみた。1ライセンス$100でまあちょっと高いなと思うけど、1日使ってみてこれはテストうんぬんより開発ツールとして非常に便利なので確実に定着するしすでに誰かにオススメしたい感じがしている。

僕が使っているのはIntellij IDE(PhpStorm / Intellij IDEA)なのでIntellij プラグイン版のみの評価になる(Atomプラグイン版もどんな感じなのか気になるけど)。もともとIntellijのIDEには標準でもテストランナープラグインが提供されていて、それを使ってみるつもりでいろいろ調べていたんだけど、ブラウザjsのテストはjsTestDriverを起動してからブラウザを起動しないといけなかったり、いまいち乗りきれない感じがあった。Wallabyはプラグインにヘッドレスブラウザ(PhantomJS)が完全に隠蔽された形で統合されていて、テストフレームワークのインストールと設定(テスト対象のソースとテストソースの定義)をすれば実行過程のことはなにも気にしなくてもテストが実行されるようになる。導入が楽。

テスト結果のエディタ統合も想像した以上の完成度で、テスト側のソースの各行にカラーチップでテストのパス状態が信号のように表示されるのはもちろん、テストするソース側も現在のテストスイートでの各行のカバレッジ状態がやはりカラーチップで表示されるので、テストがぜんぜんないコードにテストを足していく今回のような場合でもモチベーションを上がりやすいし、キーになるロジックのテストを先に書こうといった判断もしやすい。コード修正後の反映パフォーマンスもまったく問題ない(これはまだテストが少ないせいかもしれないけど)。

Wallaby.jsのサイトからアニメgifを引用

さらに体験してみて眼からうろこが落ちたのは、Wallabyの環境だとほんとうに「テスト駆動開発」ができるということ。Wallabyプラグインはテストの状態だけでなく、テスト実行時の各行での出力やエラー内容もインラインで表示される(Chromeのjsデバッガのステップ実行状態とおなじ感じ)。コードにconsole.logを追記すれば即座にそのブロックに関するテストが実行され、出力された変数の値がインラインに表示される。Wallabyの環境でテストが書かれた環境でコードを書くと、まさにテストというエンジンに接続された動いているプログラムを動いたまま触っているような感覚で開発ができる。あまりテストツールをさわったことがないので他のツールでもできることなのかもしれないけど、これは新鮮だった。

なにしろきのう導入したばかりなのでもうちょっと使ってみないとわからない部分もあるけど(テストが増えるとどうなるかとか)、現時点ではWallabyによってコーディングの進めかた自体が変わりそうな気がしている。


添削したコードを共有するサービス

第8回。前回授業の課題(グラフィックツール的なものを作る)の制作実習の日だけど、その前の課題(パターン模写)の提出を確認してプログラムを添削してフィードバックを返したりした。

テキストを公開したりコードを共有するようなサービスっていろいろあるから、元のコードと添削後のコードを並べて差分表示できるようないかしたコードシェアサービスがきっとあるんだろうと思って調べていたんだけどあまり見つからなかった。まあgithubのdiffのスプリットビューでいいだろとも思ったんだけど(processingnのシンタックスハイライトもあるし)、githubのスプリットビューはコードが分断されてしまうので慣れてないとプログラムを追えないような気がしたので、差分表示されつつ双方のコードは分断されないオンラインdiff系のサービスのmergelyにコードを貼って課題のフィードバックをしてみた。mergelyもそんなにいい感じはしてないんだけど。他にないものかな。


プログラマーじゃない人に使ってもらう運用ツールをなにで作るか

今している仕事ではアプリの開発のほかに既存の紙の本の組版データからコンテンツのデータを再構成するような作業があって、xlsxファイルに変換+人力で構造化された本のデータと画像ファイル群からhtmlとsqlite3のdbファイルを作るようなスクリプトを僕がrubyで作ってまわしていたんだけど、スケジュールが逼迫しているため修正後のhtml状態での確認を作業者にしてもらうためにrubyスクリプトを渡して作業してもらうことになった。さいわい作業者のマシンもMacだったのでruby実行環境の心配は必要なかったんだけど、sqlite3のgemはネイティブライブラリなのでビルドのためにXCodeもインストールしてもらう必要があり、しかもそれが判明したのが出先だったのでモバイル回線で3GBとかのXCodeをダウンロードされるのを待たなければならなくなってしまい…みたいな。

こういう事態を考えると、各機種むけのバイナリをクロスコンパイルできるというGoを使えるようにしておくといいのかなとかなり思った。sqlite3とかxlsファイルの読み込みもあるみたい。余裕あるときにたいしたことしてない今回のをGoに移植できるとよさそう(その余裕がないのだけど…)

ちなみにこういう非開発者にインストールして作業してもらう想定の運用ツールって何度かつくったことがあり、一度はこういうときこそTitanium Desktopだろ! と思って乗り出したのだけどけっこう痛い目にあった(gemのpathの問題があって開発時は動いても別環境では動かないとか… Titanium Desktopってもうプロダクト継続してないのかな?)。別の機会のときにはOpenOfficeでシートに所定の項目を埋めてスクリプトを実行するとhtmlが生成されるみたいなツールで渡したこともあった。これは環境がつくってもらいやすいというメリットを期待したんだけど、それでもけっこう苦労した記憶がある(どういう問題だったのか忘れてしまった)。いまだとGoogle Spreadsheetのスクリプトだともうちょっとよさそう。