OneTab のTabリストを整理するCLI をgolang で作ってみた #golang #onetab

便利な

みんな知ってるGoogle Chrome 拡張機能OneTab

chrome.google.com

ちょー便利なのでよく使うんですが、気軽に使えすぎてOneTabのリストがどんどん膨れ上がってきませんか?

f:id:uchimanajet7:20170815191634p:plain

・・・と、こんな感じでどんどん増えて行くわけですが

  • OneTab に同じURLが登録されている
  • OneTab 側にリストを整理するような個別な機能がない
    • UI上でマウスを使って移動や削除はできる
    • 数が多くなるとこの操作も大変
  • リストの登録件数が多くなると重くなる
    • PCのスペックにもよるが手元だと2,000件ぐらいから重い
    • 登録や削除が重くなる

というわけで、他に需要があるとは思えないCLIを作ってみました。 自分でも使ったのも1回きりというね・・・

作ったのは

github.com

使い方は簡単でOneTabからURLの書き出しで出力されるリストをファイルに保存して

f:id:uchimanajet7:20170815173341p:plain

コマンドラインで保存したファイルを指定してコマンドを実行するだけ

$ ./tlc run "your_file_path" -w

-wオプションでHTTPリクエストでURLがアクセス可能かどうかをチェックします。

やってること

f:id:uchimanajet7:20170815173328g:plain

すごい単純なことしかやってませんが

  • OneTabから書き出したURLリストを保存したファイルを読み込む
  • 読み込んだファイルからURLをキーにしてURL文字列が完全一致するものを削除
  • URLで削除したリストを今度は名称文字列が完全一致するものを削除
  • -wオプションが指定されていた場合、URLがアクセス可能か(status == 200)かどうかチェックする

だけなので、当然ですが

  • URL文字列が異なり同じWebページだった場合は違うとみなされる
    • 例えばSNSからのリンクがわかるようなパラメータ付きとパラメータ無しのページなど
  • 名称文字列が同一でURLが異なる場合は、同一とみなさせる
    • すべてのページで同じ名称がつけられているページなど
  • URLのアクセスチェックでステータス200以外の場合はアクセスできないとみなされる
    • ブラウザと同等の判定はしていないため、ブラウザで見れるのNGと判定される場合がある

という制限?問題点?はあります。

ダメだったこと

簡単にできそうで、できなかったことを書いておこうかと。

  1. URLからHTMLの内容を取得して、取得した内容をハッシュ値で比較
    • セッションIDや広告IDなどのアクセスするたびに異なる値がHTMLに含まれることがある
    • これによりハッシュ値が同一のページでも毎回異なる
  2. URLにアクセスできるかをブラウザと同等の判断で行う
    • ブラザと同等となるとブラザそのものでチェックした方が早い
    • 現状ではCDNでJSを使ったリダイレクトなどしていると上手く判定できない
    • リダイレクト回数が多い場合に上手く判定できない

そもそもよく考えたら、どれもダメだよねーとw

まとめ

  • とりあえず動くところまでは出来ている
  • golangって便利ですなぁ
  • リストの重複を除く仕組みをもうちょっと考える必要がある
  • 今ならGoogle Chromeのヘッドレスモードを利用できるならした方が良さそう

github.com

  • CLIにしたけどWebでできた方が手軽そう
  • というかOneTab側になんか整理する機能があってもいい気がする
  • そもそもこんな使い方している人が他にいないかもしれないw

以上になります。