音速きなこおはぎ

技術ブログです。

ミニマリストに憧れて - 無彩色カラースキームを作った話

これは Vim 駅伝 4/5 の記事です。aomi-grayscale という Vim のカラースキームを作りました。

github.com

その名の通り、無彩色と見せかけてわずかに青みがかっているのが特徴です。カラーパレットは GitHub の default テーマを参考にさせていただきました。

image image

お気に召した方は是非インストールして使ってみてください。以下はなぜこのカラースキームを自作したかの話をつらつらと書いていきます。

「読むための」カラースキームが欲しかった

プログラミングにおいて「読む」という行為は非常に重要です。私自身プログラムを読む機会は多いのですが、たびたび思っていたのは「ハイライトがノイズになるな」ということでした。

たとえば if や for, 文字列中のエスケープ文字など、読解したい内容に対して重要なときもあれば、そうではないときもありますよね。個人的には、それらよりも「同じ変数名」をハイライトした方が読みやすいと感じることの方が多かったです。

なので、注目したい箇所はハイライトに左右されるのではなく、自分の都合で決められる方が望ましいと考えたわけです。そこで無彩色カラースキームの世界に入門しました。

余談ですが、ハイライトがなくとも読みやすいことや、書くことより読むこと/読まれることを重視する態度は Go に影響を受けたものです。

なぜ自作したか

とはいえ無彩色カラースキーム自体は既存のものがいくつか出回っています。それらを使わなかったのは、純粋な無彩色だと少し色がくすんで見えるからでした。このくすみが気に入らなくて、無彩色カラースキームは一瞬だけ導入した後、一度元に戻してしまいました。

色彩には詳しくないので、いったいなぜだろうと首を傾げていたわけですが、あるときふと GitHub の文字色を確かめたところ、わずかに青みがかっているのに気づきました。なるほど、これかと。

というわけで青みがかった無彩色でカラースキームを作ってみたら、くすみもなく、かなりしっくりくる好きな色合いになりました。これが自作に至った理由です。

配色で気をつけたこと

前述の通り読むためのノイズを減らすのが第一目標でしたが、そうは言っても完全に一色では困るところも出てきますから、必要最小限の濃淡はつけてやる必要があります。ではどこに濃淡をつけるべきか。

aomi-grayscale では、文字列などの「行内に異なるコンテキストが混在するとき」の色をグレー寄りにしました。文字列はやはり区別できないとかなり不便ですね。他にも通常のテキストと異なるコンテキストとして、HTML のタグ部分などがあります。これで、大半の言語は自分にとって十分な可読性を得られるようになりました。

ただやはり、これでも厳しい場面はあります。様々なコンテキストが混在する Markdown だったり、HTML も場合によってはそう感じます。それらは仕方ないものと割り切っていますね。

無彩色にして気づいた、ハイライトの意義とLSP

こうして自作したカラースキームをしばらく実用していましたが、気づいたのは「書くときに少し困るな」ということでした。具体的にそう思ったのは、普段書かない Makefile を書くときに、「.PHONY の位置とか変数の記法ってこれで合ってるんだっけ…?」という出来事からでした。

目立つハイライトがあれば、記法があっていれば書いたときにいい感じに光るし、間違っていれば光らないですよね。なるほどハイライトが便利なのは書くときなんだな、と気づきました。

しかし、現代のプログラミングには強力な LSP という武器があります。言語サーバーさえあれば、ハイライトがなくとも構文をミスったとき理由付きで教えてくれます。というわけで、書くときの不便さは、言語サーバーでカバーするように割り切りました。文明の利器サイコーって感じですね。

無彩色という原始に回帰したような見た目とは裏腹に、現代の技術を前提としているのは、ちょっと面白いかも、と思ったりもしました。

で、実際読みやすいの?

自作してから一ヶ月くらい経ちますが、正直よくわからないですね…。読むときにノイズとなる情報が減ったのは確実なのですが、それを「読みやすい」と言っていいかどうかは、さらなる研究が待たれます。

その他のメリットとしては、ハイライトがないことで、なんとなくコードを眺めて気持ちよく読めた気分になることがないので、真に読みやすいコードを書くための矯正ギプスになる、などがあるかもしれません。これもまだ研究不足な分野ですが。

欠点をいろいろと挙げましたが、青みがかった色合い、それとミニマリスト感がクールで気に入ってるし、やはり自作しちゃった以上愛着が湧いてるので(欠点も含めて愛おしい的なところもある)、今後も使い続けると思います。

おしまい

自分で使う分は設定しましたが、ターミナルカラーも設定しないとだし、light テーマも追加したいですね…。

追記: light テーマ追加しました!(冒頭のスクショ参照)

ハイライトもいろいろと足りていないとは思います。ので、プルリク大歓迎です。スクショも添えて出していただけるととても助かります。

今後とも aomi-grayscale をよろしくお願いします。

github.com