コンピューターで作業を行っている際、誘惑が多く集中を維持できないと悩んでいる方は多いかもしれません。
本日紹介するブログ記事「Reclaim your focus with ~12 lines of bash」は、その問題を解決する、わずか12行のbashスクリプトを紹介しています。
紹介されているのはhostsファイルを書き換えて特定のサイトをブロックするテクニックで、ColdTurkey、LeechBlock NG、Freedom、Self Controlといった専用ツールと同じ機能をシンプルなスクリプトで実現しています。
以下の手順をまず実行します。
- 既存の
/etc/hosts
ファイルをバックアップする。 - バックアップを
/etc/hosts-checking
にリネームする。 /etc/hosts-doing
にそのコピーを作成し、邪魔なWebサイトをすべて追加する(GmailやHackerNews、Spotifyなど自分が頻繁にアクセスするサイト)- 以下のchecking関数を
~/.bashrc
に追加する。 - オプション: 毎回パスワードを入力するのをさけるため
/etc/sudoers
にyusername ALL= (root)NOPASSWD
を追加する。
次に~/.bashrc
以下の内容を追加します。
function checking () { set -x set -o errexit export DURATION="${1:-1m}" echo "Starting a Checking session lasting ${DURATION}" sudo ln -sf /etc/hosts-checking /etc/hosts && resolvectl flush-caches echo "Distracting websites and comms unblocked!" sleep $DURATION notify-send "Checking session complete! Close your tabs." sleep 1m sudo ln -sf /etc/hosts-doing /etc/hosts && resolvectl flush-caches echo "Done" systemctl suspend }
この後checking 15m
やchecking 1hr
と実行すると、その間だけネットワークに通常アクセスできる状態となり(hosts-checkingが有効な状態)、それ以外は邪魔なものがブロックされた状態(hosts-doingが有効な状態)となります。
なお、hosts-doingの記載例は次のようになります。邪魔なサイトにIPアドレス: 127.0.0.1を割り当てることで、使えなくするわけです。
127.0.0.1 news.ycombinator.com lobste.rs 127.0.0.1 plausible.io googleanalytics.com goatcounter.com umami.is usefathom.com artists.spotify.com 127.0.0.1 commafeed.com feedly.com inoreader.com 127.0.0.1 reddit.com facebook.com x.com instagram.com bsky.social threads.net craigslist.org 127.0.0.1 gmail.com slack.com discord.com
なお、今回紹介したスクリプトはnotify-sendなどLinuxに特有のコマンドを使用しています。macOS用に書き換える方法や、集中力を高める方法に関する議論がHacker Newsで行われています。