Twitter への接続を時間指定でブロックする

諸々が降りかかってきていてやることが多い状況だというのに、リモートワークに伴い周囲の目を気にする必要がなくなった影響で Twitter にかなりの時間を浪費するようになってしまった。アカウント消せという話ではあるのだけど、一人暮らしをしている中で外部とのつながりが断たれるというのもそれはそれで寂しく、息抜きに TL を眺めるくらいはしたいなあという気持ちがある。

そこで、今回はせめて業務中にツイ禁できるよう、時間を指定して Twitter にアクセス制限を掛ける方法について記述する。以下、macOS (10.15.6) と Windows10 (バージョン 1909) での手順を述べる。

macOS

SelfControl

macOS で特定サイトへのアクセスを遮断するフリーソフトウェアとしては SelfControl が有名である。使い方は非常に単純で、接続を許可したいサイトを block list に入力し、ブロックする時間 (15 分-24 時間) を指定すればその間アクセスが禁止される。

技術的な詳細としては、ファイアウォールの設定を弄るほか、/private/etc にある hosts ファイルに

# BEGIN SELFCONTROL BLOCK
127.0.0.1   example.com
# END SELFCONTROL BLOCK

のような内容を追記することによりアクセス制限を掛けているようだ。これに加え、Windows でいう ipconfig /flushdns やブラウザの DNS キャッシュのリセットも行っているのかもしれない (詳細不明)。レポジトリ でコードが公開されているので暇なときに眺めてみたい。

ちなみに、上記の原理上 VPN を使用するとブロックを回避できてしまう。そのため、うっかり VPN につなげて Twitter を見ることがないよう、念には念を入れて大学のサーバアドレスもブロックしている。

Auto-SelfControl

SelfControl は優秀なソフトウェアではあるが、ブロック開始を自分で操作しなくてはならないという問題がある。そこで、そもそもブロックするのを忘れるような私のような人間向けに、指定時刻に自動的に SelfControl を起動してくれる auto-selfcontrol というものが公開されている。

導入方法は上記レポジトリの README を参照 (homebrew のインストールが必要)。config.json を編集すればブロックする時刻を曜日別に設定できる仕組みになっている。注意点として、ブロックを設定している時間帯に auto-selfcontrol activate を実行しても正常に完了できないことがある (ここ でも報告がある)。新規設定や設定変更を行う際は、config.json に記載の時間外に行うようにしよう。

わざわざ Thank you! なんていう issue が立っていて驚いたが、私もこのユーティリティにはめちゃくちゃ助けられている。ありがとう andreasgrill さん。

Windows

同様のことを Windows で行うにあたって、SelfControl の FAQ には以下の代替ソフトウェアが挙げられていた。しかし、

  • selfrestraint: どういうわけか手元の Windows10 (バージョン 1909) ではブロックを開始したものの何も起こらなかった (ここ でも報告されている)
  • Cold Turkey: 時間指定オプションが有料であり、コマンドラインからの操作も厳しそう

ということで、自力で頑張ることにした。

まず考えられるのは、auto-selfcontrol のように C:\Windows\System32\drivers\etc\hosts を編集する方法である。この操作および ipconfig /flushdns で Client Resolver Cache をクリアすることまではできるのだが、その後ブラウザ (Google Chrome) でコマンドラインから DNS キャッシュを消去する方法が分からず (ここ でいろいろ議論されてはいる) 断念し、結局 firewall を弄ることにした。

ブロックする IP の範囲を取得する

まずは手元で

nslookup twitter.com

を実行してみて、得られた addressAmerican Registry for Internet Numbers の検索窓に打ち込む。すると

Net Range    104.244.40.0 - 104.244.47.255

が得られるため、この範囲の IP をブロックすることにする。

Firewall の設定

このサイト の手順に従い、上記の範囲の IP をブロックする block_twitter という新しい規則を作成する。

時刻設定

ブロックの開始・終了する用の bat ファイルを作成する。ブロックを開始する場合は

netsh advfirewall firewall set rule name="block_twitter" new enable=Yes

で、終了する場合は

netsh advfirewall firewall set rule name="block_twitter" new enable=No

でよい。

次にこれを定期実行させる設定をするが、これには Windows のタスクスケジューラを用いることができる (管理者権限が必要なことに注意)。今回は ここ の手順に従い、

  • 7 時, 12 時, 23 時にブロック解除
  • 8 時, 13 時, 24 時にブロック発動

のタスクを登録し、結果的に 7-8 時、12-13 時、23-24 時の間のみ Twitter につながるよう設定できた。やったね!