1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

コーディング中の過集中を防止する簡易アプリをPythonで作ってみた【Windows・VSCode用】

Posted at

目次

1. こんな感じのアプリ
2. 主な機能
3. なぜ作ろうと思ったか
4. アプリのセットアップ

5 使用方法

6. 処理の内容
7. 使ってみてどうだったか

こんな感じのアプリ

毎時指定された時間内のとき、自動的にVSCodeを保存して終了するアプリです。
image.png

主な機能

  • 毎時アプリで設定した時間内(デフォルトだと30分から59分の間)になると、VSCodeのプロセスを終了する
  • VSCodeのウィンドウが最小化されていない場合、自動でファイル保存のショートカットキーを実行してからプロセスを終了する
  • VSCodeのウィンドウが最小化されている場合、単にプロセスを終了する(保存されていないファイルがあっても、再度VSCodeでファイルを開けば変更内容は引き継がれます)

なぜ作ろうと思ったか

コーディングをしていると、ついつい集中しすぎてしまって体は休みたいと思っているのに、数時間辞め時がわからないまま続けてしまうことが度々ありました。
その結果「作業は終わったけど、疲れすぎてもう何もしたくない、、」みたいな状況になることが多く、長期的な生産性を考えたときに良くないなとずっと思っていました。
そこで、過集中を防止するために、毎時指定の時間になったらVSCodeを強制終了してくれるようなアプリがあったらなと思い作ってみました。
会社のPCで使いたかったので、余計な外部ソフトウェアに頼りたくなかったことも自作した理由の一つです。

アプリのセットアップ

コードのインストール

コードをGithubに挙げているので、適当なディレクトリにダウンロードしてください。

アイコンの設定

vscode_blocker.pyの20行目の

icon_path = "/path/to/your/icon.jpg"

をご自分の環境に合わせて、変更してください。
icon.jpgをGithubにも上げていますが、好きな画像をアイコンにすることもできます。

ライブラリのインストール

ライブラリインストール:
アプリケーションを実行するために必要なライブラリを以下でインストールします。

pip install pyautogui psutil PyQt5

exeファイルの作成

スクリプトファイル(vscode_blocker.py)があるディレクトリで以下のコマンドを実行してください。

pip install pyinstaller
pyinstaller --onefile --noconsole .\vscode_blocker.py

これにより、distディレクトリが作成され、その中にvscode_blocker.exeが生成されます。

使用方法

アプリケーションの起動:

distディレクトリ内のvscode_blocker.exeをダブルクリックしてアプリケーションを起動します。アイコンがシステムトレイに表示され、アプリケーションがバックグラウンドで実行を開始します。
プログラムが開始すると、以下のようなアイコンがタスクバーに表示されます(以下の画像はGithubに上げたアイコンの画像を使った場合)。
image.png

時間帯の設定:

システムトレイのアイコンを右クリックし、「Set Time Limits」を選択して、VS Codeを終了させたい時間帯を設定します。
image.png

デフォルトでは毎時30分から59分までになっていますが、この30-59の範囲を変更できます。
以下のように一つ目のボックスで開始時間を設定してOKを押すと、二つ目のボックスが表示され、そこで終了時間を設定するようになっています。
image.png

終了:

システムトレイのアイコンを右クリックし、「Exit」を選択することでアプリケーションを終了させることができます。

注意点

デバッグをきちんとしていないので、予期せぬ動作によってクラッシュしてしまう可能性があることは使用の際ご了承ください。

処理の内容

全体のソースコードはGithubをご覧ください。
複雑な処理はしていないですが、

def is_vscode_running():
    for process in psutil.process_iter(["pid", "name"]):
        if process.info["name"] == "Code.exe":
            return True
    return False

によって、VSCodeが起動しているかの確認を行い、VSCodeが起動している場合は、以下のコードによってファイルの自動保存を行います。

def save_all_in_vscode():
    windows = pyautogui.getWindowsWithTitle("Visual Studio Code")
    if windows:
        try:
            print("VS Code is running.")
            windows[0].activate()

            # 「全て保存」のショートカットを実行
            pyautogui.hotkey("ctrl", "k")
            time.sleep(0.2)  # キー入力の間に短い遅延を設ける
            pyautogui.press("s")
        except:
            pass

そして、

def kill_vscode():
    try:
        subprocess.run(
            ["taskkill", "/f", "/im", "Code.exe"],
            check=True,
            stdout=subprocess.DEVNULL,
            stderr=subprocess.DEVNULL,
        )
    except subprocess.CalledProcessError:
        pass  # Visual Studio Code is not running or already closed.

によって、VSCodeのプロセスを終了させています。

使ってみてどうだったか

集中していても、設定時間になってVSCodeが強制終了されると「あぁ、休憩しなきゃ」という気持ちになるので、今のところ良い感じです。
過集中は自分の意志では対策が難しいと感じているので、集中を邪魔する仕組み化が大事だなと思いました。

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?