entr と rspec を組み合わせて使う
Rails アプリケーションのテストを書いているときに、「テストコードに変更があったら rspec コマンドを実行する」ができるような環境を作っている。
これまでは guard および guard-rspec を使っていたので、spec ディレクトリ以下のファイルに変更があったら rspec を実行してというようなちょっと複雑なルールを Guardfile に書いて置く必要があった。また、guard-rspec は native extension なので bundle install などを実行するとビルドが走る。そのためには libevent を用意しておく必要もある。
最近知った entr を使うと、アプリケーションのルートディレクトリで以下を実行しておけば同じことが実現できる:
$ find spec/**/*.rb | entr bundle exec rspec /_
/_
には変更のあった最初のファイルのパスが入る。もちろん最初にインストールする必要があるが、アプリケーションに設定ファイルを置いたりする必要が無くて良い。Mac OS X の場合は Homebrew を使うだけで簡単にインストールできる。
思えば大学生・大学院生の時は tex ファイルのあるディレクトリを監視対象にして、変更があったら latex コマンドで実行させて PDF を更新させるというのもやっていたな。
最近知った entr コマンドが便利だ https://t.co/FBg4UHCmB8
— Hiroyuki Inoue (@inohiro) April 25, 2018
`find spec/**/*.rb | entr bundle exec rspec /_` で変更があったファイルで rspec 実行してくれる。guard-rspec とその設定ファイルが不要になる
— Hiroyuki Inoue (@inohiro) April 25, 2018
Memo: fish setup
160. Insersection of Two Linked Lists
- https://leetcode.com/problems/intersection-of-two-linked-lists/
- https://github.com/inohiro/LeetCode/blob/master/160_intersection_of_two_linked_lists/src/main/java/Solution.java
スタートが異なる LinkedList が2つ与えられ、途中で合流しているか判定する問題。最初はそれぞれ次を読みながら、ぶつかるか読み切るまですすめる方法でやろうとしたが、途中で HashMap (HashSet)に入れたほうが楽じゃんと思って、そっちで書いた。もろもろ込みで20分くらい。LinkedList を読むだけというのは簡単だよね。繋ぎ変えがめんどくさい。
今回もRubyがサポート外だったので、Java で。最近お仕事でJavaを書いていることもあり、Javaへの心的なハードルが低くなっている。gradle init --type=java-application
でサクッと新しい環境が作れるのも便利だし、Visual Studio Code で簡単にデバッグ実行できるし。