コーディング用フォント Emberiza Sans を公開

f:id:scientre:20180324222352j:plain

Emberiza Sans はコーディング/プログラミングのために開発されたフォントです。フォントのダウンロードページはこちら。

制作の経緯

現在コーディング用として公開されているフォントは固定幅のものばかりだ。唯一の例外である Input も、伝統的な欧文書体と大きくプロポーションが異なっている。

一方「普通」の文字幅を持ち、視認性に長けるヒューマニストサンセリフである Avenir や Lucida Sans, Myriad, Segoe などはプログラミングに使われることを想定して作られたわけではないので、一部の文字や記号が判別しづらかったり、隣り合う文字同士がくっついて見にくかったりする。

その中で 1996 年に提供開始された Verdana は、視認性・記号の分離という点において非常に優秀だ。そして小サイズでも文字が潰れないように x-ハイトがかなり高く作られている。しかしながら画面が広く、高解像度になった現代のディスプレイでは、 x-ハイトの高さゆえに画面上に文字が溢れたようになり、やや煩さを感じる。

そこで、コード上で重要な記号の判別性を保ちつつ、現代のディスプレイ環境に合った密度で表示できるコーディング用フォントを作ることに決めた。

デザイン上の特徴

ヒューマニストサンセリフの書体は現代的なプロポーションを持っていることが多いが、 Emberiza Sans は伝統的なローマン体に近い骨格を持っている。

f:id:scientre:20180326223541p:plain:w533

また b d p q のボール部分は全体の雰囲気を損なわない程度に非対称になっており、これが鏡文字として誤認されるのを防いでいる。

f:id:scientre:20180326223545p:plain:w533

幅広の記号類

Emberiza Sans はコーディングに使用する記号が隣接する文字に接触してしまわないよう、次の記号のサイドベアリングを広く取っている。

f:id:scientre:20180326223639p:plain:w533

また次の記号は演算子として使われることも考慮し、位置と大きさを変更している。

f:id:scientre:20180326223653p:plain:w533

似た文字の区別

固定幅のフォントでは 0 ゼロと O オーを区別するために 0 ゼロに斜線や点が入っているものが多い。一方 Emberiza Sans の場合はもともと O オーが円に近い形状になっているため、見比べるまでもなく 0 ゼロと違うことが分かる。

f:id:scientre:20180326223710p:plain:w533

また l 小文字エル、I 大文字アイ、1 数字のイチについては、I 大文字アイにのみセリフを付ける処理を施している。まず 1 数字のイチは起筆部の出っぱりで区別がつく。そして l 小文字エルは collection のような単語で連続して使用されることも多く、終端を曲げたりすると文字を並べたときに煩雑になり、かえって視認性が下がる。

そして I 大文字アイにセリフを付けた最大の理由は、プログラムの識別子はパスカルケースやキャメルケースが使われることがあり、そこに何もつけていない普通のアイが来ると単語の始まりとして認識しづらいためだ。

f:id:scientre:20180326223730p:plain:w533

リガチャーの設定

Emberiza Sans では -> や => といったアロー演算子を合字にして、ひとつの演算子であることを分かりやすくしている。通常のフォントでは特に -> の高さが揃わない。

f:id:scientre:20180326223812p:plain:w533

今後の課題

  • 複数ウェイトの作成: 現在は Regular のみだが、ディスプレイ環境に応じて特に Light から Medium 相当の細いウェイトを充実させる。また、シンタックスハイライトで太字を使用するエディタもあるので、最低でも 1 ウェイト用意する。
  • イタリック体の作成: 一部のエディタはコメント等にイタリック体を使用するものがあるのであったほうがよい。
  • TrueType ヒンティング: Windows のネイティブ API を使用して文字を描画しているエディタではレンダリングの品質が悪い。そのためサイズによって文字のアウトラインを変形できる TrueType 形式を用意し、ヒンティングを施す。ただし作業量が莫大になるので後回しになると思う。

Noto Sans Display / Noto Serif Display を使おう

自由に使用・改変ができ、収録文字数も豊富、極細から極太まで揃っている向かうところ敵なしということで話題となった Noto Sans / Noto Serif 和文はそれぞれ源ノ角ゴシック、源ノ明朝と呼ばれる)

このフォントファミリー(統一されたデザインを持ちながら、太さやスタイルを変えて作られた書体グループ)には Display スタイルのフォントが用意されているのはご存知だろうか。

収録文字はラテン文字(いわゆるアルファベット)キリル文字ギリシャ文字に限られるが、見出しなどで十分利用価値はある。

Display スタイルとは

ファミリー内で Display と名の付くフォントは、大きなサイズで使用するためのもので、次の特徴がある。

  • 大きなサイズで美しく見えるよう、線の向きや長さなどが異なる
  • 細い線が文字を大きくしても細く見えるよう、より細く作られている(冒頭の画像を参照)
  • 文字間が間延びするのを避けるため、通常よりも狭く作られている

Noto Sans の場合、S の形や a, n の曲線と縦線の接続部分の違いが顕著だ。もともと画面表示用に作られているため、通常の Noto Sans は拡大すると野暮ったいところがある。

Condensed スタイル

Noto Sans/Serif Display には、主に限られたスペースに情報を載せるための、文字幅を狭くしたコンデンスドスタイルも用意されている。しかも文字幅が異なる3種類が用意されている。

  • Normal(無印)
  • SemiCondensed
  • Condensed
  • ExtraCondensed

さらにそれぞれのコンデンスドスタイルに対し、9種類のウェイトとイタリック体が用意されている。

  • Thin
  • ExtraLight
  • Light
  • Regular
  • Medium
  • SemiBold
  • Bold
  • ExtraBold
  • Black

Noto Sans/Serif Display の入手

Noto Sans/Serif Display はこちらから入手できる。

石川県金沢市の光インターネット接続料金比較

初年度の月額利用料(工事費別)

事業者 戸建て住宅 集合住宅
フレッツ 光ネクス*1 + Asahi ネット*2 3,810
(税込 4,114円)
2,530
(税込 2,732円)*3
ネスクかがやき*4 4,600
(税込 4,870円)
3,600
(税込 3,888円)
Au ひかり*5 5,100
(税込 5,508円)
3,800
(税込 4,104円)

*1 Web 光もっと2割(初回2年、以降3年ごとの契約)適用
*2 キャンペーン(初年度無料)適用
*3 集合住宅の世帯数が15以下の場合割増
*4 3年契約
*5 2年目、3年目以降割引あり

Windows で Atom Commander を使うとドライブのルートに移動できない問題を解消する

WindowsAtom Commander を使用していたところ、ユーザのホームディレクトリのあるドライブで次々と親ディレクトリに移動していくと、 C:\ に移動しようとした途端に C:\Users\ユーザ名\AppData\Local\atom\app-1.23.3 というディレクト(新規インストール時のバージョンにより数字が異なる)に移動してしまう。

これは node の fs パッケージの realpathSync メソッドに由来する問題のようだが、これを変更するには影響範囲が大きいのでなんとか Atom 側で対応したい。

ちなみに atom-commander < atom/node-pathwatcher < atom/fs-plus < fs という依存関係になっている。

どうやら C:\ に移動しようとしたときに Atom の実行ディレクトリに移動するようなので、実行ディレクトリを変更してしまおう。 Atom を起動するためのショートカットのプロパティを開き、作業フォルダを C:\ に設定する。

これで Atom Commander で C ドライブのルートへ移動できるようになった。

Windows 7 で Git Bash も zsh も使いたい

Windows 7コマンドライン版 Git を使用するには Git for Windows をインストールし、 Git Bash を使うのが簡単だWindows 10 には Windows Subsystem for Linux があるのでもう少し簡単にできるらしい)

ところがこの Git Bash では他のシェルは使用できず、bash のみしかサポートしていない。そのため MSYS2 というソフトウェアパッケージを使用し、シェルの設定から行う。

以下 Git Bash がインストールされているものとして話を進める。

MSYS2 を使用する

MSYS2 は簡単にいうと bash 等の PC UNIX 用ソフトウェアを Windows で動かすためのソフトウェアの寄せ集めだ。

インストーラをダウンロード・起動し、インストールが完了したらスタートメニューから MSYS2 MinGW 64-bit(環境によっては 32-bit を選択)を開く。これで bash が起動するが、まずはパッケージのアップデートを行う。

MSYS2 のパッケージマネージャは pacman という名前で、MSYS2 用に独自に作られたものだ。次のコマンドでアップデートができる。

pacman -Suy

次のメッセージが表示されたらアップデートが完了した合図なので MinGW x64 のウィンドウを閉じ、もう一度起動する。

terminate MSYS2 without returning to shell and check for updates again
for example close your terminal window instead of calling exit

そして再び pacman を使用し、必要な、あるいは使いそうなソフトウェアをインストールしていく。パッケージのインストールは pacman -S パッケージ名 で行える。

pacman -S vim sed tar unzip zsh

MSYS2 のログインシェル設定

MSYS2 には chsh コマンドが含まれていない。そのため起動のための Windows コマンド スクリプトから直接シェルの指定を行う。

また標準の状態では Windows 側の環境変数 PATH が引き継がれないので、それを引き継ぐ設定をしておこう。

ここでは MSYS2 をインストールしたディレクトリにある msys2_shell.cmd を terminal.cmd という名前でコピーし、次の箇所を編集した。

15行目:
set MSYS2_PATH_TYPE=inherit

79行目:
  start "%CONTITLE%" "%WD%mintty" -i /msys2.ico -t "%CONTITLE%" /usr/bin/zsh --login %1 %2 %3 %4 %5 %6 %7 %8 %9

これで terminal.cmd を開けば zsh が起動する。

zsh の補完設定

zsh の設定は通常通り ~/.zshrc で行える。普段のように補完設定を行う。

autoload -U compinit
compinit

# 補完時に大小文字を区別しない
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'
zstyle ':completion:*' menu select=1

ところが MSYS2 上のディレクトリ(例えば /mingw64)では補完が効くが、 Windows 上のドライブ(例えば /c/Windows)では補完ができない問題が発覚した。

どうやら Windows 上のドライブは automount のような仕組みでマウントされているため、次のような fake-files の設定が必要なようだ。

drives=$(mount | sed -rn 's#^[A-Z]: on /([a-z]).*#\1#p' | tr '\n' ' ')
zstyle ':completion:*' fake-files /: "/:$drives"
unset drives

Git を使用する

ここまで設定すれば which git コマンドを叩くと Git for Windows でインストールされた git コマンドの場所が出力されるはずだ。

あとは Git Bash と同様に使用すればよい。