この記事はなに?
僕の作った便利ツールである、これの紹介。身も蓋もない。
下記でインストールできます。
pip install git+https://github.com/uesseu/ntag
タグは便利である
みなさん、タグ使ってますか?使ってますよね。なにしろ、このqiitaの記事にすらタグが付いています。パッと思いつく限り
- gmail
- qiita
- iTunes
などなど、挙げればきりがないです。メール、記事、音楽などを皆さんはタグで管理しています。2025年2月現在、僕は婚活していますが、婚活アプリもタグ管理です。人間すらタグで管理されるのです。
ファイルをタグで管理しよう
WindowsにもMacOSにもタグが標準でついています。皆さん、使っていますか?僕は…使っていません!何故か?僕はTerminalの中に引きこもってvimを弄るキモオタだからです!
GUIにあれだけタグがありますが、CUIの世界にはどうでしょうか?実はあるんですよ。調べれば、あります。詳しくはググれ。でも、僕が満足できるものはなかったのです。
僕が欲しかったのは以下のような性能です。
- ディレクトリ単位で管理
- inode/file indexベース
- CUIやvimで使いやすい
- いろどりが豊かである
- マルチプラットホーム
- pythonとか軽量言語で作ってあとで改造できる
というわけで作ったのです。inode/file indexベースなので、例えファイルやディレクトリを移動してもちゃんと追跡できます。
使い方
gitみたいに特定のディレクトリをリポジトリにします。
ntag init
で、タグを作ります。
echo hoge | ntag make
標準入出力かよ!と思われるでしょうが、このソフトは基本標準入出力で動きます。理由は大量のファイルとタグを管理するためにはコマンドライン引数では苦しいからです。大量のファイルを捌くために、非同期的にファイル名をパイプに渡すように作っていますし。
ここで、タグを確認します。
ntag list
色もつけましょうね。この機能は現時点ではwindowsでは動きません。
ntag color
対話的に設定できます。
では、タグを付けましょう。
echo filename.md | ntag add hoge
あとは
ntag filter red
こんな感じになります。
filename.md [ red ]
これでfilename.mdにredが付いているのが確認できるはずです。ちなみに、タグを指定せずにfilterコマンドを打つと全てのファイルを絞りこまずに表示します。
ntag filter
これはパイプで繋いでいけます。下記はredが付いていてかつblueとyellowのいずれかが付いているのを絞りこみます。
ntag filter red | ntag filter blue yellow
パイプに流す時にはタグは流しません。ttyの上だけでタグを表示します。
例えばこんな感じにすると、currentというタグが付いていて、かつ'.py'という文字列が付いているファイルのみをvimで編集することになります。
vim $(ntag filter current | grep .py)
inode上書き対策
ファイルを上書きする時にinodeを変更されたら追跡できなくなります。vimの場合このようにすればinodeを上書きしなくなるので大丈夫です。
set backupcopy=yes
vscodeやemacsでどうすればいいのかは僕にはわかりませんが、できるでしょう、多分。
他の機能
コメントを付けられます。
現時点での不備
僕自身は割と便利に使っているのですが、僕がlinuxユーザーなのであまりwindowsに配慮していないです。というか、自分しか使わねーだろという発想がある…。
誰か興味あればちゃんと整備します。既知の問題は下記の通りです。
- Windowsでの検証が不十分
- 特に色関連はなにもしていない
- インポート/エクスポートのテストが不十分
- MacOSを持っていないのでそこはわからん
おわりに
本当に僕以外あまり使う人がいないなら、ゆっくりと整備をつづけていくことになろうかと思いますが、興味がある人がいればモチベーションはあがるかも。