広島初日

台風18号が向かっているとのことで、朝6:16東京発で10:03広島着の新幹線で広島に向かった。結果は正解だったようで遅れなく到着することができた。到着後は yahonda さんと「みっちゃん」で Oracle enhanced adapter やその他の話題をしたりしながら、お好み焼きをつついていた。

今後の Oracle enhanced adapter の開発計画については、yahonda さんが Google Group に投稿してくれたので興味のある人はそちらをどうぞ。

groups.google.com

その後は台風がやってきていたので、ホテルに到着後はチェックイン時間までロビーで cop を書いたり Oracle enhanced adapter の Issue に回答をしていたりして、夜は同じ宿の同僚たちと「木々」で広島の酒を飲みながら肴をつついていた。酒を飲んでいるうちに台風が去ったようで、かねてから予定していた竜堂さんたちと Karaoke に行って広島初日の夜は終了となった。

Lint/RedundantWithIndex copのご提案

鋭意 PR レビュー中の cop であり一週間くらい後手に回っていたもの。それにようやく手を入れたりしていた。もともと JRuby のバグを発端に作ろうと思った cop であるが、RuboCop 本体にも offense に掛かる箇所があることから、世の中には不要な with_index を使ったままのコードがあるのかもしれないということで作った。

github.com

フィードバックを読んでいたら、もしかしたらブロック引数の数に依存した作りでは問題があって再設計が必要かもと考えていたのが後手に回った要因だったが、いろいろと試したところブロック引数の数に依存することで問題なさそうだったので、ほとんど現状維持とした。そして、この PR での現状のやりとりで一番変わっているのは cop の名前だったりする。

Ginza.rb 第51回

Ginza.rb 第51回 話題のActive Storage、その実力は?!に行った。会場はみんなのウェディングさんで今回が銀座オフィスでの最後の開催。

ginzarb.doorkeeper.jp

前半は willnet さんが RejectKaigi 2017 で発表されたスライドをもとに進行された。

speakerdeck.com

現状で Active Storage について最もまとまった資料であることもそうですが、オルタナティブのファイルアップロード Gem との比較言及もあり willnet クオリティさすがです。

会の後半は Active Storage のソースコードを眺めながらのディスカッションとなり、クラウドへの URL の時間制限のデフォルト5分や、実アプリケーションとしてはバリデーションをどう解決するかといった点が実践投入への課題点としてありそうという話をしつつ、中身を確認したりしていた。これらの課題について、おそらく Basecamp というコンテキストではこの振る舞いで問題がないのでは?ということで、そうでないコンテキストではじゃあどうあれば幸せになれるのかを考えつつ今後の Active Storage への動向をキャッチアップしたり参加したりすると良いという感じで回としてはおしまい。ファイルアップローダへの各々の知見も聞けたりして良い会でした。

`rake new_cop`タスクのバグ修正などした

RuboCop で新しい cop を作るときのジェネレータとして、RuboCop は rake new_cop というタスクを備えている。先日 cop を作る際にそのタスクのバグを踏んでいたので、再現ケースを作って直していたりした。

github.com

参考として rake new_cop を使って Lint/UriEscapeUnescape cop のベースを zsh で作る時は以下となる。

% bundle exec rake new_cop\[Lint/UriEscapeUnescape\]
Files created:
  - lib/rubocop/cop/lint/uri_escape_unescape.rb
  - spec/rubocop/cop/lint/uri_escape_unescape_spec.rb

Do 3 steps:
  1. Add an entry to the "New features" section in CHANGELOG.md,
     e.g. "Add new `UriEscapeUnescape` cop. ([@your_id][])"
  2. Add an entry into config/enabled.yml or config/disabled.yml
  3. Implement your new cop in the generated file!