あなたがもしVisual Studio Codeなどのテキストエディタを使ってソースコードを書くのなら、「スニペット」や「オートコンプリート」と呼ばれる機能は必須である。
入力された最初の数文字から、利用できる変数や関数などをサジェスト (提案) してくれるオートコンプリート機能の助けが無ければ、ユーザーはありとあらゆる名前を記憶しておかなければならず、またスペルミスは避けられない。
そしてその機能は、もちろん通常の文章を扱うアプリ、たとえばObsidianでも有用である。
Various Complements!
日本語/英語のみならず中国語にまで対応する、Obsidianのオートコンプリートプラグイン。
フロントマター補完、内部リンク補完など多くの機能を備えるこのプラグインを使いこなせれば、文字入力全般の大幅な効率アップは間違いない。
しかしその多機能さゆえ、設定やマニュアルから押し寄せる情報量の多さに圧倒されてしまうユーザーも多いのではないだろうか。
ならばここに、うってつけのガイドを召喚しよう。
tadashi-aikawa!
彼こそVarious Complementsの生みの親であり、バリバリの現役プログラマー。
Various Complementsの解説に彼ほど相応しい人間など、他にいるはずもない!
「迫る!」シリーズはこのブログにソフトウェア開発者を迎え、執筆者ぷーおんが開発者へのインタビューを通してプログラムを丸裸にしていく、開発者 vs ユーザーの対談企画である。
紆余曲折あったVarious Complements
Pouhon: はい。ということで天の声から始まりました「迫る!」シリーズ。記念すべき第1回目のゲストとして、tadashi-aikawaさんにお越しいただきました! よろしくお願いします。
tadashi-aikawa: よろしくお願いします。Pouhonさんのブログは以前から『これは勝てないわー』と思いながら拝見しておりました。なので、お声がけいただき嬉しく思います。
Pouhon: いやいや……こちらこそ長いことプラグインを使わせていただいているし、ブログも拝見していて、個人的に聞きたい話は山ほどあるんですよ。
tadashi-aikawa: VimとかAutoHotkeyとか……
Pouhon: ご自覚はされているということで、安心しました(笑) ちなみに、キーボードは何をお使いです?
tadashi-aikawa: 基本はHHKBですね。
Pouhon: やっぱり行き着くところはそこになるのか……といった話は尽きないんですが、この記事ではObsidianのプラグインである「Various Complements」について、いくつかお伺いできればと思います。
tadashi-aikawa: はい。Various Complementsは初めて開発したObsidianプラグインということもあり、色々と思い入れがあります。
実は一旦開発を中断したこともありました。開発のきっかけからこれまでの流れは私のサイト「Minerva」のブログに記載していますので、こちらもぜひご覧ください。
プラグインの名称について
tadashi-aikawa: 本当は名前も「Auto Complete」にしたかったんですが、すでに同名のプラグインがあったので断念しました。
Pouhon: 名前についてはかなり苦労されたことがブログからも窺えますが、現在の名前はあまりよろしくない?
tadashi-aikawa: 「Various Complements (以下VC) 」という名前は、ネイティブの英語話者にとっては機能に合致していないらしく、なかなか通じませんね。
「Intelligent Complete」という名称を提案されたこともありました。ただ、「Intelligent」とか「Better」はあまり付けたくなくて……
Pouhon: サジェストするプラグインならSuggestionはどうでしょう? SNSアイコンがフクロウだから「Owl Suggestion」とか。
tadashi-aikawa: 「Owl」を付けるのは好きなんですが、Obsidianプラグインの場合、多分リジェクトされます。結構名前やパフォーマンスに関しては厳しいんですよね。
現在の補完機能は6種類
Pouhon: この記事によると、元々は「アクティブなノートに入力した文字列」が再び登場したときに、その入力を補完するものだったと。
tadashi-aikawa: そうです。最初に実装したのは「Current file complement」で、当初はそれだけの機能でした。しかし紆余曲折を経て、主な補完機能は6つにまで拡大しました。
それぞれの機能については、英語ですがマニュアルをご用意しています。
Pouhon: しっかりしたドキュメントがあるのはありがたいところですね。
ただこのプラグイン、設定項目もかなり多くて、「どの項目を変更すればどうなるのか」がわかりにくい方もいると思います。
「どんな機能があるのか」についての網羅的な情報は上記2つの記事にも掲載されていますが、ここでは改めてざっくりと、ユーザーが変更する可能性の高い設定項目を一覧にした上で、そこから個々の機能の話題へとつなげていきましょう。
Various Complementsの設定項目
Main
名称 | 意味 |
---|---|
Strategy | 日本語を使うなら「Japanese」 |
Match strategy | 前方一致か部分一致か |
Complement automatically | 自動的に候補を表示 |
Disable suggestions during IME on | 日本語入力時にサジェストをOFF |
Insert space after completion | 補完の直後にスペースを挿入 (英文用) |
Appearance
上3つはステータスバーに情報を表示するかどうか。表示させたい場合はONに設定してください。
名称 | 意味 |
---|---|
Show Match strategy | |
Show Complement automatically | |
Show indexing status | |
Description on a suggestion | 候補ウインドウに表示する情報量 |
Key customization
名称 | 意味 |
---|---|
Select a suggestion key | 選択された候補を入力するキー |
Additional cycle through suggestions keys | 選択を移動するキー |
Disable the up/down keys for cycle through suggestions keys | ↑↓キーを選択移動に使わないならON |
Open source file key | サジェストされた内部リンクを新規ペインで開くキー |
Propagate ESC | Vimモードを使用している場合、 サジェストに関わらずEsc1回でNormalモードに |
その他
基本的には「Enable 〇〇」で各種サジェスト機能をON/OFF。詳細な設定項目はかなり多いですが、最初はデフォルトでも問題は無いでしょう。
名称 | 意味 |
---|---|
Enable Current file complement | 現在のノートを元にしたサジェスト |
Enable Current vault complement | 現在のVault全体を元にしたサジェスト |
Enable Custom dictionary complement | ユーザー辞書からのサジェスト |
Enable Internal link complement | 内部リンクのサジェスト |
Enable Front matter complement | フロントマターのサジェスト |
さらにコマンドパレット「Predictable complement」(カーソル近くの単語を再び入力するとき、サジェストするのではなく、文字の先頭が一致する最も近い候補を直接入力する) を加えた6つが、VCの主要機能ということになります。
このコマンドはホットキーに登録するのが基本の使い方。
導入ハードルは高くない
Pouhon: 一見複雑に見えるVCも、こうして見れば割とシンプルに感じますね。最初にチェックしておいた方が良い項目としては、
- サジェスト機能のON/OFF
- Key Customization (特にSelect a suggestion key)
の2ヶ所程度で、ここさえきちんと設定してしまえば、あとは「入力した文字によってサジェストされる候補を選択する」というのが基本の使い方。なので導入ハードルは決して高くありません。
この中で特徴的な機能と言えば「Internal link complement」でしょうか。
これは記事の冒頭に掲載した画像のように、他のノートタイトルをサジェストして、自動的に内部リンクを作成してくれる便利機能です。
ただ僕が一番気になるのはその上の「Custom dictionary」なんですよね……これはいわゆる「ユーザー辞書」なんですが、(Google日本語入力などの) IMEにもユーザー辞書機能は存在します。
IMEの辞書機能との棲み分けや、便利な使い方などあれば教えてください。
Custom dictionaryについて
tadashi-aikawa: まず、日本語入力のときはIMEを使った方がいいと思います。英語入力のときだけ、ユーザー辞書として使うのがおすすめです。
VCは日本語で利用するために開発したプラグインですが、Custom dictionary complementは英語圏のユーザーから強い要望があって実装された機能となっています。
Custom dictionaryの使用例
tadashi-aikawa: では日本語ユーザーがCustom dictionaryを全く使えないのかというと、そんなことはありません。私の場合は以下の用途で使います。
- 英語の単語/フレーズ補完
- スニペット (コードブロックやcalloutなどの入力補助)
- 絵文字やタグのエイリアス (別名) として
具体的にはこの動画のような感じですね。
Pouhon: これは良い例! Calloutの入力は僕もTwitterで拝見した記憶があります。
確かにこんな使い方なら、IMEよりVCの方が適してますね。このプラグインの有用性も伝わりそうです。
ユーザー辞書の作成方法
Pouhon: Custom dictionaryについての詳細な情報は下のページにも記載されているんですが、「試しに使ってみたい」という方のために、簡単な使い方を教えていただいてもよろしいでしょうか?
tadashi-aikawa: ローカルファイルを使う方法と、Web上のファイルを使う方法の2通りあります。
ローカルファイルなら、まずVault内に辞書用のファイルを作成します。
形式は.mdでも.txtでもかまいませんが、今回はObsidianで編集することを念頭に置いて.mdにしておきましょう。
VCの設定画面を開き、【Custom dictionary paths】にVaultからのパスを記入しておきます。
現在のライブプレビューでは、Tabキーの入力で行全体が字下げされる仕様になっているので、ライブプレビューをお使いの方はその下、【Column delimiter】を「Comma」か「Pipe」に設定しておいた方がいいかもしれません。
後は辞書ファイルを開いて、サジェストしてほしい語句を改行で区切って記入していくだけです。コメント機能や複数行の文章、エイリアス機能にも対応しています。
登録後、コマンドパレット「Reload custom dictionaries」で辞書の内容を読み込ませれば、登録した語句がサジェストされるはずです。
またコマンドパレット「Add a word to a custom dictionary」を呼び出すと、ダイアログ形式でフレーズを登録できます。
こちらから登録すると、「Reload custom dictionaries」コマンドは不要です。改行も\n
を使う必要がないので直感的ですね。
また登録したい文字を選択すると、右クリックメニューに「Add to custom dictionary」という項目が表示されるので、そこからでも登録できます。
Web上のファイルを辞書として利用する
tadashi-aikawa: 辞書機能を使うためのもう1つの手段として、Web上にアップロードされたファイルを参照するという手もあります。
私はローカルの辞書ファイルの他に、こちらのURLを登録して使用していますね。Googleによって作られた、公開Webページで利用頻度の高い単語リストです。
https://raw.githubusercontent.com/first20hours/google-10000-english/master/google-10000-english-usa-no-swears-long.txt
https://raw.githubusercontent.com/first20hours/google-10000-english/master/google-10000-english-usa-no-swears-medium.txt
この2つはWeb上にあるというだけで実際は.txtファイルなので、どんな環境でも問題無く動くと思います。【Custom dictionary paths】にコピペしてもらえればOKです。
開発者はVarious Complementsをこう使う!
Pouhon: 僕は今まで「フロントマター補完機能」をメインで使用していましたが、Custom dictionaryってこんな簡単な書式で書けたんですね……今までもったいないことしてたなぁ。
tadashi-aikawa: 逆に私はフロントマター補完を使いません。エイリアス以外の用途でフロントマターを使うことはないので……というのもあり、フロントマター補完の完成度はあまり高くないと思います(苦笑)
Pouhon: 参考までに、aikawaさんご自身がこのプラグインをどのように使っているか、もう少しお聞きしたいんですが。
tadashi-aikawa: 普段私が有効にしている機能は、以下の2つだけです。
- Internal link complement
- Custom dictionary complement
私のVaultでは情報をつなげるための材料として、ディレクトリやタグではなく内部リンクを一番重要視しています。そのため、Internal link complementは欠かせません。
「何度も入力したい重要な固有名詞が補完に出なかった場合は、その固有名詞をタイトルとしたノートを作成して、それを内部リンクにすべき」という考えで運用しています。
ノートの99%は公開している
Pouhon: そうすると、aikawaさんのノートはWikipediaのような、内部リンクがバンバン入り込んでくる文章になっている?
tadashi-aikawa: そうですね。内部リンクベースで文章を組み立てていくメリットとして、後から単語を修正したいときに楽というのもあります。ノートのタイトルを変更すれば自動で同期しますし。
ただリンクの数が増えすぎるとObsidianやプラグインの処理速度にも影響しそうで、将来的なパフォーマンスには若干の不安がありますが。
通の人向けに言うと『内部リンクは最も多用するDiMFiTです』という感じかな……
Pouhon: お、いいフレーズいただきました(笑)「DiMFiT」に関しては僕が書いたObsidian本をご一読くださいということで。
そうするとノートタイトルやエイリアスに関してもかなり工夫されていると思いますが、ノートのとり方やタイトルの付け方に関して、一般ユーザーの参考になるようなポイントは何かあるでしょうか?
tadashi-aikawa:
- ノートのタイトルはそれだけで意味の分かる名前にすること (アトミックノート)
- 内部リンクを躊躇なく使うこと
この2つをサボらずに続けていけば、ノートの数が1000や2000になった頃に効果を実感できると思います。
実際に私が運用している例はMinervaをご覧ください。デイリーノートを除いた99%のノートが含まれていますので、ほぼObsidianで編集しているVaultそのままの状態になっています。
Pouhon: 「Minervaを見ればわかる」と。これ以上無い、完璧な答えですねこれは。
使用しているIMEによっては注意?
Pouhon: 1つ注意点として挙げておきたいのが、使用しているIMEと確定キーの設定によっては、意図しない挙動になってしまう点です。
僕はMacの標準IMEで使用しているんですが、長い間【Disable suggestions during IME on】を有効にして、IMEがONのときはVCのサジェストをOFFにしていました。
その理由がこれです。一般的な語句を入力すると、かなりの頻度でIMEのサジェストとVCのサジェスト、両方が重なって現れます。
この重なり自体は問題無いんですが、VCの【Select a suggestion key】をデフォルトの「Enter」に設定している場合、Enterで入力を確定すると、
こんなふうに入力されてしまうんですね。VCのサジェストが確定した後、IME側が確定して入力しているんでしょう。
この問題を回避するには、VCのサジェストを確定しないというのが最も簡単で、【Select a suggestion key】を「Enter」や「Space」以外にしておくのがおすすめです。
tadashi-aikawa: Mac標準IMEのライブ変換とは相性が良くないかもしれませんね。私がMacを使っていないため、Mac特有の混み入った問題には対処しにくいという課題もあります。
IMEによってはObsidianと相性が悪く、うまく動かない可能性があります。私はObsidianを使う前までATOKを使っていたのですが、相性の問題でWindows IMEに変更したりもしました。Microsoft IMEやGoogle日本語入力はグローバルなアプリケーションだと強いですね。
今後のアップデートについて
Pouhon: Obsidianはv0.16で「タブ」の概念が追加されるという大きなアップデートがありました。これに伴って、VCの方でも何か変更が予定されているということはありますか?
tadashi-aikawa: VCでは予定していません。v0.16の変更点はオートコンプリートに影響ないためです。
ただ別に開発しているプラグイン、「Another Quick Switcher」に関しては大きなリリースを予定しています。
Pouhon: Another Quick Switcherについては、次かその次の記事で取り上げる予定で、僕自身も楽しみにしています。
ということで、今回はtadashi-aikawaさんとVarious Complementsに迫っていきました。aikawaさん、色々と参考になるお話、ありがとうございました! また次回、よろしくお願いします。
tadashi-aikawa: ありがとうございました。