@ryoppippi

ray.soをNeovim/Vimから快適に使えるプラグインを書いた

4 Jul 2024 ・ 6 min read


Note

この​記事はVim 駅伝の​ 7/5 の​記事です。

0.gif

https://github.com/ryoppippi/ray-so.vim/

はじめに

皆さんはray.soを​ご存知でしょうか?​)

https://ray.so/

ray.soは、​プログラミング言語の​コードを​画像に​変換してくれる​サービスです。 コードを​画像に​してくれる​サービスや​ツールと​いえば、​他にもCarbonSiliconFreeze などが​ありますが、​ray.soは​ブラウザから​使えて​尚且つとてもかっこいい​デザインが​特徴です。

元々Raycastと​いう​Macの​ランチャーアプリを​作っている​会社が​運営している​サービスで、​Raycastで​使う​ことを​想定されているだけ​あって、​デザインが​とても​洗練されています。

https://www.raycast.com/garrett/ray-so

ところが​この​Raycast用の​プラグイン、​いく​つか​問題が​あります。

  • そも​そも​Raycastは​Mac専用なので、​Windowsや​Linuxの​ユーザーは​ブラウザに​いって​コードを​入力して​画像を​生成する​しかない
  • ray.soの​プラグインは​Macの​標準の​テキストエリアから​しか​コードを​取得できないので、​VSCodeや​Neovimなどの​ちょっと​特殊な​テキストエリアを​使っている​アプリケーションからは​使えない

そこで、​ray.soを​Neovim/Vimから​使える​プラグインを​作りました。

ray-so.vim

https://github.com/ryoppippi/ray-so.vim/

実装にはDenopsを​使いました。 Denopsは​Denoと​TypeScriptを​使って​Vim/Neovimの​プラグインを​書く​ための​エコシステムです。 TypeScriptを​使える​ため、

  • 通信が​発生する​もの
  • 非同期処理が​必要な​もの
  • 豊富な​外部​便利な​ライブラリを​使いたい​とき に​とても​便利です。 また、​Denopsの​プラグインを​書くと​Vim/Neovimどちらでも​動作するのも​いいですね。

自分は​普段は​Luaで​プラグインを​書いているのですが、​今回は​勉強も​兼ねて​Denopsを​使ってみました。

処理の​流れは​至って​簡単です。

  • RaySoコマンドを​実行
  • Vim/Neovimで​選択している​コードを​取得
  • Denops で​実装した​Pluginに​コードを​渡す。
  • Denops で​ ray.so で​コードを​含んだ​画像の​ページを​開く​ための​URLを​組み立てる
  • Denops で​ URLを​ブラウザで​開く

実際の​URLを​組み立てる​コードは​こちらです。 ufostr-fnsなどの​普段​使っている​TypScriptの​ライブラリを​使えるのは​とても​便利でした。 https://github.com/ryoppippi/ray-so.vim/blob/4b6ffc9ba3048bffb041b533b8701f119e561450/denops/ray-so/ray-so.ts

また、RaySoClipboardと​いう​コマンドも​実装しています。 これは、Astralと​いう​puppeteerや​playwrightのように​ブラウザを​操作できる​Deno向けの​ライブラリを​使った​コマンドです。 コマンドが​実行されると、​URLを​ブラウザ(Chromeである​ことが​多い)で​開く​->ブラウザ上でCMD + Cを​実行->クリップボードに​コピーする​->ブラウザを​閉じる、と​いう​処理を​全自動で​行います。

https://jsr.io/@astral/astral

ray.soでは​見た目の​オプションが​いくつか​用意されています。​こちらも​初期値と​して​設定できるように​しています。 https://github.com/ryoppippi/ray-so.vim/blob/main/denops/ray-so/types.ts

Future Work

この​記事を​書いている​最中に、​ray.soの​コードが​OSS化されました。

https://github.com/raycast/ray-so

画像生成の​実装は​完全に​TypScriptで​書かれているので、​これを​組み込んで​ブラウザを​開く​必要なしに​画像を​生成できたら​いいなぁと​思っています。

おわりに

  • ray.soを​Neovim/Vimから​使える​プラグインを​作りました
  • Denopsは​いいぞ

宣伝! vim-jpラジオが​始まります!

7/8 (月)より、vim-jpラジオと​いう​番組が​始まります!

https://vim-jp-radio.com/ https://audee.jp/voice/show/85325

宣伝文を​引用します。

エンジニアが​集まる​インターネット上の​コミュニティvim-jpから​生まれた​初の​音声プログラム。 vim-jpは​プログラミングから​子育てに​至るまで​無数の​チャンネルを​抱えた​コミュニティです。 そんな​コミュニティの​面白さを​生かして、​各分野の​様々な​ゲストを​交えながら​楽しく​雑談していきます。

ぜひ聞いてみてください! よろしく​お願いします!

https://x.com/vimjpradio/status/1807660836972032410

宣伝2 GitHub Sponsorsを​始めました

https://github.com/sponsors/ryoppippi/

この​度GitHub Sponsorsを​始めました。 色々​ライブラリ等の​メンテナンスを​しているので、​よろしければ​サポートしていただけると​嬉しいです。

comment on bluesky / twitter
CC BY-NC-SA 4.0 2022-PRESENT © ryoppippi