🕒

VS Code の機能拡張でステータスバーにビジュアルタイマーを置いてみた

に公開

tl;dr

  • 手慰みに VS Code の機能拡張を AI に作ってもらった
  • せっかくだからマーケットプレイスで公開するところまで持ってった
  • SVBT Simple Visual Bar Timer です

AI と戯れ

  • 要は AI やってみたでブログ記事を書こうかなって
  • どうせゴミを量産するだけなら個人的に欲しいものを作らないとね
  • これだ!
  • ちょっと欲しいなって思ってるんだけど、購入には至らなかったツール
  • 昨今はワイドなディスプレイも多いし、VS Code を普段遣いしていてデッドスペースになっているステータスバーを有効活用したいなって
  • 今回は Jules - An Asynchronous Coding Agent でやってみよう

雑なプロンプト

- VS Code の機能拡張
- ステータスバーの上で動作するバー型のタイマーを作成する
- バー部分をクリックか、コマンドパネルから起動して、タイマーの時間を指定する
- タイマーの時間は最短1分最長60分とし、デフォルトは30分
- | を 10 個使って時間の割合を表現する
- カウントダウン時間も表示する。フォーマットは MM:SS
- 開始ボタンと停止ボタンを絵文字を使い、トグルで表現する
  • このまんま渡して初版を作ってもらった
  • あちこちダメだけど、手直しすれば十分使えそうなコードが出てきたので、手でごにょごにょして体裁を整えた

公開

  • VSCode の拡張機能を作る手順 から
  • Publishing Extensions | Visual Studio Code Extension API を見ながら登録
  • そういえば個人の Azure があったので、Azure ポータルにしゅっと入った
  • Azure DevOps でオーガニゼーションもしゅっとできた
  • パーソナルアクセストークンを作成するところ、マーケットプレイスのパーミッションをつけるところにうっすら手間取った(リンククリックして開かないと出てこない)
  • パブリッシャーの設定値をどうするかとかちょい悩む
  • ドキュメントがしっかりしてるので概ね問題なくできた
  • パブリッシャー ID を package.json と違う値にしてたので揃えた(エラーになったから)

公開前のコマンド(ドキュメントに書いてあるとおり)

SVBT $ npx vsce login officel
 WARNING  Failed to open credential store. Falling back to storing secrets clear-text in: /home/raki/.vsce
https://marketplace.visualstudio.com/manage/publishers/
Personal Access Token for publisher 'officel': ************************************************************************************

The Personal Access Token verification succeeded for the publisher 'officel'.
SVBT $

パブリッシュしようとしたらエラーになった

SVBT $ npx vsce publish
Executing prepublish script 'npm run vscode:prepublish'...

> simple-visual-bar-timer@0.0.1 vscode:prepublish
> npm run package


> simple-visual-bar-timer@0.0.1 package
> webpack --mode production --devtool hidden-source-map

asset extension.js 2.13 KiB [compared for emit] [minimized] (name: main) 1 related asset
cacheable modules 4.54 KiB
  ./src/extension.ts 3.61 KiB [built] [code generated]
  ./src/Timer.ts 950 bytes [built] [code generated]
external "vscode" 42 bytes [built] [code generated]
external "events" 42 bytes [built] [code generated]
webpack 5.101.3 compiled successfully in 3070 ms
 ERROR  Invalid publisher name 'Office L'. Expected the identifier of a publisher, not its human-friendly name.  Learn more: https://code.visualstudio.com/api/working-with-extensions/publishing-extension#publishing-extensions

package.json の publisher を ID に設定した officel に変更する

SVBT $ npx vsce publish
Executing prepublish script 'npm run vscode:prepublish'...

> simple-visual-bar-timer@0.0.1 vscode:prepublish
> npm run package


> simple-visual-bar-timer@0.0.1 package
> webpack --mode production --devtool hidden-source-map

asset extension.js 2.13 KiB [compared for emit] [minimized] (name: main) 1 related asset
cacheable modules 4.54 KiB
  ./src/extension.ts 3.61 KiB [built] [code generated]
  ./src/Timer.ts 950 bytes [built] [code generated]
external "vscode" 42 bytes [built] [code generated]
external "events" 42 bytes [built] [code generated]
webpack 5.101.3 compiled successfully in 2998 ms
 WARNING  Failed to open credential store. Falling back to storing secrets clear-text in: /home/raki/.vsce
 INFO  Publishing 'officel.simple-visual-bar-timer v0.0.1'...
 INFO  Extension URL (might take a few minutes): https://marketplace.visualstudio.com/items?itemName=officel.simple-visual-bar-timer
 INFO  Hub URL: https://marketplace.visualstudio.com/manage/publishers/officel/extensions/simple-visual-bar-timer/hub
 DONE  Published officel.simple-visual-bar-timer v0.0.1.
SVBT $

今後について

  • VS Code のマーケットプレイスで検索する時はダブルクォーテーションで囲むと早い "simple visual bar timer"
  • README に画像置いたり
  • コードのリファクタリングしたり(同じ文字列をリテラルベタ書きされてる)
  • Copilot にやらせてみたり
  • しようかなって

まとめ

  • AI でコード書かせるの、まだちょっとだるい
  • ただ、学習レベルが足りてないところでもさっとやってくれるのは便利
  • やってみた、はとても大事だけど、自分が欲しいと思うものをちゃんとやるのはもっと大事だと思った
  • 最後までもっていく(作る、正しく公開する、ブログを書く、あとは育てる)ための熱量が違うからね
  • よかったら使ってみて感想などいただけると喜びますw

Discussion