Ruby String#splitのまとめ


RubyのString#splitで空白を指定した場合、空白が2つ以上連続しても1つの区切り文字として扱うことを知ったので、仕様を詳しく調べてみた。調べた中で、これは気をつけないといけないという使い方を以下に記載。

仕様は、以下のページで確認
http://ruby-doc.org/core-2.2.0/String.html#split-method

Rubyバージョン:ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-darwin14]

  • 区切り文字に空白1つを指定すると、「1つ以上の空白文字」が区切り文字に指定されたとして動作する。「空白文字」は、タブや改行も含まれるので注意。

  • 区切り文字にnilが指定された場合、空白文字1つが指定された時と同じ動作をする。

  • 区切り文字を指定しない場合、組み込み変数「$;」の値が使用される。

  • splitの第2引数を指定しない場合、末尾の空文字要素が除去される。

  • 空文字に対してsplitを実行した場合、必ず空配列が返される。

Firefoxでも使えるニコレポフィルター用ユーザースクリプトを作成しました


ニコニコ動画のマイページに表示されるニコレポ、便利なのですがお気に入りユーザーをたくさん登録しているとキリ番やマイリスト登録の記事ばかりが表示されて、動画投稿の記事を見落としたり、探すのに時間がかかるようになってしまっていました。同じような悩みを持っている人は多いと思います。

ニコニコ動画の設定でフィルタできればよかったのですが、そういった機能はなし。Chromeにはフィルタしてくれる拡張機能があるのですが、自分は普段Firefoxを使用しており、できればFirefoxで使いたい…。ということで、Firefoxでも使えるニコレポフィルターをつくろうと決意しました。ただアドオンとして作成するのは時間がかかると思い、Greasemonkeyで使えるユーザースクリプトで作ることにしました。

作ったユーザースクリプトは、Githubで公開していますので、ご自由にお使い下さい。(不具合、ご要望等があれば、コメントいただければ対応するかもです)

使ってみると…自己満足かもしれませんが、かなりいい感じです。動画投稿の記事が目立つようになり、マイページで動画を確認する際のストレスが大分減ったと思います。

苦戦した部分など

  • 「過去のニコレポを見る」で追加された要素へのフィルタ。このボタンを押下すると、「追加の記事一覧取得」->「追加記事用のdiv要素を追加」->「取得した記事一覧をdiv要素に追加」->「過去のニコレポを見る」ボタンを削除、という流れで処理しています。記事一覧をdiv要素に追加した後でないとフィルタできないので、ボタン削除のイベントを検知してフィルタ&次の「過去のニコレポを見る」ボタンにイベント追加としたかったのですが、要素の削除を検知するイベントがない!!

この時点でだめかもとも思ったのですが、この記事にjQueryのイベント拡張を使用した方法が記載されており、これで解決できました。ありがとうございます!!
* 設定画面の追加。要素のフィルタは、記事のclass属性を使用して実現しています。はじめは、個人用としてフィルタ対象のclassをベタ書き&編集していたのですが、他の人にも使ってもらうことを考えるとこれはハードルが高過ぎるため、設定画面を作る必要があると感じました。
設定画面を1から作るのは相当時間がかかると考えていたのですが、GM_configという素晴らしいライブラリがありました。このライブラリを使用すると設定画面、設定値の保存/読み取りが非常に簡単にでき、大変助かりました。
* 上記2つに比べると大したことはないのですが、マイページを開くとなぜかユーザースクリプトが複数回実行されていました。複数回動いても機能上は問題ないはずなのですが、性能上よくないし、何か副作用が起きるかもしれないため修正したいと思っていました。
これは、metadata blockに「@noframes」を指定することで解決出来ました。対象ページにiframe要素があると、User Scriptはデフォルトで各フレームで実行されるとのことです。
* あと苦戦した部分ではないですが、柔軟なスクリプトの記述とGM_configの取得の部分で、このページの情報は非常に参考になりました。

今後の拡張など

  • 設定項目の追加(まだ、一部記事の種類が、設定画面に含まれていない)
  • コメントやニコる!の非表示化