はじめに
こんにちは。Gakken LEAPで働いていますkoboriです。
私たちのチームでは、Jiraを活用して日頃の開発タスク管理を行っています。一方でそれとは別に、個人の作業レベルの粒度でタスクを細かく管理したいといった話はよくあるのではないかと思います。私の働いているチームでも、多くの方が各々のやり方でタスク管理メモを運用しているようです。OS標準のメモアプリ、サードパーティのメモアプリ、Notionのプライベートスペースなど、手法は多岐に渡ります。
私の場合、VSCodeのターミナルでVimを起動して、個人のタスク管理メモを運用しています。似たような手法を取っている方が周囲にいなかったこともあり、今回ブログ記事にしてみることにしました。
前提
本題に入る前に、前提の話を少し書いておきます。
エディタについては前述の通り、開発をする際は主にVSCode利用しており、Vimは個人のタスク管理メモとコミットログを書く時に利用することが多いです。
また、OSはWindowsを利用しており、WSL上のUbuntuで開発を行っています。タスク管理メモはWSL上のファイルとして管理しています。Macを利用している方は、よしなに読み替えていただければと思います。
ちなみに弊社では、開発機にMacを利用することもできますので、もし入社を検討されている方でMacを利用したい方もご安心ください。というより、Windowsの方が少数派です。
また、私のこだわりとして、 なるべくVSCodeとブラウザ以外のウィンドウを開かない ということを大切にしています。これは、マルチモニター環境ではウィンドウの切り替えが不要であり、シングルモニター環境では 1回の Alt+tab
だけでウィンドウの切り替えができるようにするためです。
そのような考えから、専用のメモアプリを使うことは選択肢から外れ、ブラウザ or VSCode が私の選択肢となります。
その中でいくつかの方法を検討した結果、自身に最もフィットしたのが今回紹介する方法、ということになります。
タスク管理メモの運用の工夫
冒頭に書いた通り、VSCodeのターミナルからVimを起動してタスク管理メモを編集する。以上。という話ではあるのですが、せっかくなので、私が運用してきた中で改善してきた小さな工夫を紹介してみます。
エイリアスによる起動
まず初めに、シンプルではありますが、下記のようなエイリアスを設定することで、VSCodeのターミナルで todo
と打つだけでVimが起動し、所定のファイルを開けるようにしています。
alias todo='vim $HOME/path_to_todo.md'
VSCodeショートカットキーの設定
次に、ターミナルの操作を楽にするため、VSCodeのショートカットキーの設定を行います。
ターミナルはVSCodeの画面下部のパネルに含まれているため、パネルの操作もスコープに含めていきます。
まず、パネルの表示/非表示を切り替えるコマンドとして workbench.action.togglePanel
が用意されています。このコマンドはデフォルトで Ctrl + j
に割り当てられています。私の場合、使いやすいのでこれはこのまま採用しています。まずこれでパネルの開閉が楽になりました。
以降は、VSCodeコマンドにショートカットキーを割り当てて、ターミナルとパネルの操作環境を整えていきます。デフォルトでショートカットキーが割り当てられているコマンド かつ 使い心地に問題がない場合は、特に設定の必要はありません。
次に、タスク管理メモの編集を快適にするため、下記のコマンドを使用してパネルのサイズを最大化できるようにします。
{
"key": "ctrl+[BracketLeft]",
"command": "workbench.action.toggleMaximizedPanel"
}
ターミナルのタブを新規作成するコマンドとターミナルのタブを切り替えるコマンドにもショートカットキーを割り当てます。コンテナ中で作業をしたい場合など、複数のタブを使う場合の切り替えが楽になります。
{
"key": "ctrl+t",
"command": "workbench.action.terminal.new",
"when": "terminalFocus && !terminalEditorFocus"
},
{
"key": "ctrl+m",
"command": "workbench.action.terminal.focusNext",
"when": "terminalFocus && !terminalEditorFocus"
}
最後に、パネルのビューを切り替えるコマンドにショートカットキーを割り当てます。私の場合、Copilotをパネルに表示させていることもあり、ターミナルとCopilotの切り替えが楽になるように設定しています。
{
"key": "ctrl+shift+m",
"command": "workbench.action.nextPanelView"
},
バックアップ戦略
ここまでのシンプルな設定で、しばらくタスクメモ運用を続けていて、だいぶ快適に過ごすことができています。しかし、せっかくブログ記事を書くならということで、次なる改善についても考えていました。
現状の課題について考えてみた結果、Windows端末の故障、WSLの再構築などの際に、タスク管理メモが失われてしまう懸念が挙がったため、バックアップ戦略を考えることにしました。
バックアップ戦略という大層な題目をかかげましたが、要件としてはシンプルに「異常発生時になるべく最新のものが保持されていること」としました。
手段の検討
GitHub案
まず初めに思いついたのは、GitHubへのバックアップでした。Vimの autocmd
を使用して BufWritePost
を検知し、コミットとPushを自動で行う方法を考えました。または、日次でcronジョブを実行するという手段も考えられます。しかし、これらの手段は下記の理由から採用を見送りました。
- Organizationに専用のプライベートリポジトリを作成する必要があり、もう少しライトな方法を取りたい
- 個人アカウントのプライベートリポジトリを保存先にするのはもちろん無し
- GitHubアカウントにコミットの残骸を残すことに抵抗がある(仮に日次でのコミットにしたとしても無駄なコミットが多く残る)
Box案
弊社では、全社的にストレージサービスとしてBoxを利用しています。Box上では、各個人のプライベートスペースが提供されており、任意のファイルを保存することができます。また、BoxDriveを利用することで、Boxのディレクトリがローカルのディレクトリとしてマウントされます。これらを使用することで、WSL上で管理しているファイルをBox上に保存することができるのではないかと考えました。
Boxを使ってタスク管理メモのバックアップを取る
まずは手動でファイルのコピーする方法について検討をします。
WSL上で下記のようなコマンドを実行し、Windowsのホームディレクトリ直下にマウントされたBoxのディレクトリへのファイルコピーを試みました。
しかし、WSLからBoxのディレクトリを参照することができませんでした。知識が足らず、原因の深掘りはできていません。
cp $HOME/path_to_todo.md /mnt/c/Users/user_name/Box/path_to_todo.md
次に、Windows環境からはBoxのディレクトリを参照することができることは分かっていたので、PowerShellを使ってWSL上のファイルをBoxのディレクトリへコピーすることにしました。
このコマンドは無事成功し、Box上にファイルを保存することができました。
Copy-Item -Path "\\wsl`$\Ubuntu\home\user_name\path_to_todo.md" -Destination "C:\Users\user_name\Box\path_to_todo.md"
このコマンドをPowerShellのスクリプト(.ps1
)として保存します。私がPowerShellの記述に大変不慣れなこともあり、可能な限りシンプルな記述にしました。
#Requires -Version 7.0
Copy-Item -Path "\\wsl`$\Ubuntu\home\user_name\path_to_todo.md" -Destination "C:\Users\user_name\Box\path_to_todo.md"
PowerShellのスクリプトを実行するコマンドをタスクスケジューラに登録をして定期的なバックアップの仕組みが完成します。
仕事をしているであろう時間を狙い、ひとまず実行頻度は10時15分と16時15の1日2回に設定しました。
pwsh.exe -ExecutionPolicy Bypass -File "C:\Users\path_to_script\copy_wsl_to_box.ps1"
最後に、完了通知(失敗通知)について考えました。ここでは、スクリプト実行の成否ではなく、Boxへのファイル配置の成否を知りたいと考えました。Boxの機能で、ディレクトリ配下のファイルの更新を検知してメールを通知することができたので試してみました。しかし、通知は失敗に終わりました。おそらく自分のファイルを自分で変更しても通知は飛ばない、という話だと思われます。それはそうか、という。
現状の構成で当初の目的は達成されてある程度満足したこともあり、完了通知(失敗通知)は次の改善ネタに据えることにしました。
おわりに
以上、日頃の個人のタスク管理メモの運用の経験についてまとめてみました。どなたかの参考になれば幸いです。
エンジニア募集中
Gakken LEAPは日々、教育のアップデートに取り組んでいます。
興味をお持ちいただいた方は、採用サイトをチェックしてみてください。