2018年のWindowsのテキスト編集環境

## TL;DR
- テキストエディタは軽量なvimとモダンなatomの併用がおすすめ
- フォントはMeiryoKeが万人向け妥協点、それ以上を求めるならMacTypeが必要そう
- markdownやAsciiDocを普及させよう

## 対象読者
Windows上での作業を余儀なくされているプログラマー。とりわけ、2010年以前の資産やら文化が残っている現場の皆様。

## Windowsのテキスト軽視文化
旧来、Windows界隈には「テキストファイル」を扱う文化がありませんでした。たとえば…

- 設定はバイナリ (レジストリ)
- ドキュメントもバイナリ (「拡張子 `doc` のバイナリファイル」は、MSWordにより強引に普及がなされたもの。元来 `.doc` はテキストファイルに用いられるものでした)

そしてWindows界隈には「GUI内で黒い窓を開く」文化もありませんでした。つい最近[^1]PowerShellが登場するまで、コマンドプロンプトはこの30年間ほぼ進歩していません。「DOS窓」の俗称がWindows7時代になっても使われ続けていたことからも、どれだけ等閑にされていたかわかろうというものです。

昨今業界御用達のような扱いになっているMacにしても、かつて(OS9まで)のMacintoshではそもそもDOS窓に相当するものすらないという有様でした。ハッカーたちが細々とPC UNIXや中古のSPARCstationで使い続けていたものが、Mac OS X の普及でようやく変な目で見られなくなった感がありますが、Windowsはまだそこに追いついていません[^2]。

### プログラマーたるもの「コードを書くためのエディタ」を常用すべし
標準でテキストファイルを扱うために用意された唯一のツールが「メモ帳」というあたりにWindowsのテキスト軽視がいかに徹底していたかがわかるでしょう。00年代からWindowsで仕事をしていた人たちは、いくらなんでもそれでは困るためにサードパーティーのテキストエディタを導入するようになりました。たとえば「秀丸エディタ」。これが有償ソフト不可の現場になると「サクラエディタ」や「TeraPad」になるわけです。

ただし、これらは「仕事のできるビジネスマン向けのメモ帳」として有能であっても、プログラマーがコードを書くためのエディターというより、DOS時代の仕事道具の延長線上の存在として捉えるべきでしょう。

## vimを普段使いしよう
「プログラミングのためのエディタ」は、天地開闢[^3]以来、Emacsとviが二大巨頭として君臨していました。最近はviの進化系であるvimがEmacsに対して優勢なようです。AdSenseとかでよく見かける「転職ドラフト」調べでは [人気のテキストエディタ](https://job-draft.jp/articles/206)No.1だそうで、しかも若年層からの支持が厚いということからもわかります。

vimの使い方については幾多の優れたvimmer様方の記事にお譲りして、本記事は「Windows内でvimを快適に普段使いする」ことにフォーカスしたいと思います。

### vimを育てる
#### 開封の儀
Windowsでは、[香り屋版](https://www.kaoriya.net/software/vim/)というバイナリが最近10年くらい普及していますのでダウンロード。zip は適当な場所 (`C:\Program Files\` でいいと思います) に展開してOK。展開先にある `gvim.exe` をダブルクリックで起動しましょう。

きっとのけぞると思います。多くの人はここでやる気をなくします。

#### 調教
くじけずに設定とプラグインをバシバシ叩き込みます。

##### バックアップやスワップファイルなどのゴミ対策
デフォルトだと作業用ファイルを散らかす悪い癖があるので、道具箱を作ってやります。

```bash
# git bashやPoweshellでの例。
mkdir -p ~/.vim/work
```
`:e ~/_vimrc`で個人用設定ファイルのC:\Users\(ユーザー名)\_vimrcを編集して、道具は道具箱にしまうようにします。バックアップは人間かファイルシステムのどちらかがやればいいので不要でしょう。新規ファイル_vimrcに以下を記述します。

```vimrc
set nobackup
set directory=~/.vim/work
set undodir=~/.vim/work
```

`C:\Users\(ユーザー名)` をUnixのホームディレクトリと同様に `~` と読み替えてくれます。

##### ウィンドウサイズの保存
これまたデフォルトだと毎回好き勝手な場所でこじんまりとしたウィンドウで起動するので、しつけましょう。GUI関係の設定ファイルは`_gvimrc`です。`:e ~/_gvimrc`で新規ファイルを開き、以下を記述します[^4]。

```vimrc
let g:save_window_file = expand('~/.vimwinpos')
augroup SaveWindow
  autocmd!
  autocmd VimLeavePre * call s:save_window()
  function! s:save_window()
    let options = [
      \ 'set columns=' . &columns,
      \ 'set lines=' . &lines,
      \ 'winpos ' . getwinposx() . ' ' . getwinposy(),
      \ ]
    call writefile(options, g:save_window_file)
  endfunction
augroup END

if filereadable(g:save_window_file)
  execute 'source' g:save_window_file
endif
```

##### その他おすすめの_vimrc向け設定

```vimrc
set list
set listchars=tab:>-,trail:-,eol:$
set number
```

##### その他おすすめの_gvimrc向け設定

```vimrc
set showtabline=2
```

##### プラグイン管理システム
以前からVundleなどのプラグイン管理システムがあったのですが、流行り廃りがあるようで、いま流行っているのは[dein](https://qiita.com/yoza/items/2f8bd33a18225754f346)。流行ろうが廃れようが「プラグインの指定先はgithubのリポジトリ」という点は変わらないようなので、互換性を気にする必要はあまりなさそうです。
インストールするにはdeinの作業用ディレクトリを準備する必要がありますが、それさえやってやればプラグイン管理は驚くほど楽になります。なお、gitが利用できることが前提となります。

```bash
mkdir -p ~/.vim/dein/repos/github.com/Shougo/dein.vim
git clone https://github.com/Shougo/dein.vim.git ~/.vim/dein/repos/github.com/Shougo/dein.vim
```

さらに`_vimrc`を編集。

```vimrc
set runtimepath+=~/.vim/dein/repos/github.com/Shougo/dein.vim

call dein#begin(expand('~/.vim/dein'))
call dein#add('Shougo/dein.vim')
" インストールしたいプラグインを以下に記述する
" call dein#add('developer-a/plugin_you_want_to_install-1')
" ...
" call dein#add('developer-z/plugin_you_want_to_install-xx')
call dein#end()

" install non-installed plugins
if dein#check_install()
  call dein#install()
endif
```

`_vimrc`を再読み込みさせます。

```
:source ~/_vimrc
```

##### Vim-airline
これを叩き込めば一気にモダンなエディタに様変わり。

`_vimrc`を編集。

```vimrc
" deinの設定外に
set laststatus=2

" deinの設定内に
call dein#add('tpope/vim-fugitive')
call dein#add('vim-airline/vim-airline')
call dein#add('vim-airline/vim-airline-themes')
```

その他、[vim-airline にカーソル下の文字コードを表示する](https://qiita.com/yuyuchu3333/items/872cf67860a0d76091db)などの記事を参考にカスタマイズして、快適な環境を構築してください。

##### カラーテーマ
デフォルトのライトガルグレーみたいな背景色ではいまいちテンションが上がらないので、自分の気に入ったカラースキームを探してみましょう。基本的にdeinでインストールできます。私のお気に入りは[Vim の割と新しいおすすめ colorscheme たちを紹介する](https://qiita.com/lesguillemets/items/f4cdf359a89585ad1324)の記事で見つけたnefertitiというものです。

ダウンロード方法は`_vimrc`のdein設定部に以下を追記

```vimrc
call dein#add('jeetsukumaran/vim-nefertiti')
```

設定は、`_gvimrc`に以下を追記

```vimrc
colorscheme nefertiti
```

## フォントにこだわる
### MSゴシック/MS Ｐゴシックを撲滅せよ
30年前の遺物、といってもHelveticaなんかは半世紀以上前からある書体ですので、古さのみが問題となるわけではありません。
しかし、このフォントに限って言えば登場当時からそもそも`0`(ゼロ)と`O`(オー)の見分けもつかず、プログラマーが使うべき代物ではありませんでした。(Windows95のころは、これを避けるために和文セットのないCourier Newなどを我慢して使っていたように記憶しています)
もうひとつの問題は、ビットマップフォントとしての使用を前提としていることです。解像度`640*480`のブラウン管モニターに最適化されたようなギザギザフォントを、2010年代に使い続ける理由はありません。
[デザイナーもまずこんなフォントを使うことはありません。](https://news.mynavi.jp/article/20150611-mspg/)

最近のWindowsには「メイリオ」と、それを画面表示向けにカスタマイズした「MeiryoUI」というそれなりにまともなフォントがバンドルされています。しかし、これらはプロポーショナルフォントのみの提供となっているため、プログラマーとしては大変困ります。逆に、等幅のLucida ConsoleやConsolasには和文セットがありません。

### 21世紀のフォントの選択肢
2018年初頭の時点で万人にお薦めできるローリスクな解決策はMeiryoUIに等幅化パッチを当てて、[MeiryoKe](https://qiita.com/uhooi/items/43c9fcb7b5b59bc613a4)というフォントを生成して利用することです。
さらに、Mac/Linux界隈[^5]では以前よりコンソール作業に適したフォントとして

* [VLゴシック](http://vlgothic.dicey.org/)
* [Ricty](http://www.rs.tus.ac.jp/yyusa/ricty.html) ([Diminished](https://github.com/mzyy94/RictyDiminished-for-Powerline))

が使われており、とくにRictyはMac界隈では高い評価を受けています[^6]。しかし、これらのモダンなフォントはWindowsのレンダリングの貧弱さのためにひどく滲んでしまいます。ですが、これについては、[MacType](http://www.mactype.net/)というレンダリング改善ソフトで解決することができます。驚くほどフォントの表示が美しくなりますので、一旦は試してみてください。
ただし、MacTypeは環境によっては他ソフトの動作に影響をおよぼす場合があるなどの不具合が報告されており、リスクを伴った利用が前提となります。MacTypeを導入できなかったとしても、先述のMeiryoKeだけでも十分に改善と言えるでしょう。

vimへの適用は、`_gvimrc`に

```vimrc
set guifont=MeiryoKe_Console:h12:cSHIFTJIS
```
のように追記
すればOKです。

ここまで設定してきたサンプルファイルは https://github.com/mskako/vimrc に上げております。

## 軽量マークアップ言語
テキスト編集環境も快適になると、いろいろなもののテキスト化を企みたくなります。そこのあなた、Excel方眼の設計書、駆逐したいですよね? 私たちのプロジェクトでは、かつてドキュメントを脱Excelしてwiki(Confluence)にもっていき、編集と閲覧、なにより検索の容易さを実現したまではよかったのですが、こんどはバージョン管理の壁にぶつかってしまいました。

テキストファイルで管理したい…でも設計書くらいになると文書構造は必要…だからといって見出しを

```
#############
## 項目一覧 ##
#############
```

みたいに装飾するのは避けたい… そんなとき、ふとある日にREADME.mdを書きながら、「これだ」と思ったのでした。

### markdown
githubなどでおなじみのREADME.mdは、markdownというフォーマットで書かれています(Qiitaの記事もですね)。簡単な説明文くらいなら十分な表現力があるうえ、いちばん目にする場がgithubのリポジトリというくらいなので、VCSとの相性もバッチリです。

* 単なるテキストファイルに見せかけられるくらい単純なので書きやすい
* テキストファイルなので、gitで差分管理ができる
    * ということは、設計書をこれで書けばブランチもプルリクエストもマージも自由自在では?
        * うわーゆめがひろがりんぐ

ただし、

* 設計書に採用するには表現力が少々弱すぎる

というわけで、設計書にはもっと表現力のある軽量マークアップ言語が必要と考え、AsciiDocの導入を検討することになりました。

### AsciiDoc
ですが、まだ実用に堪えるかの検証中です。テーブルの記述がより強力になった点を最も評価していますが…

## atom
markdown/asciidocはvimでもある程度直感的な編集ができますが、リモートにpushする前にプレビューできないのは流石に困ります。
そこで、ローカルでのビューワーがほしいという動機でatomをインストールしてみました。github謹製というだけあって、git操作の容易さはさすがと言った感じです。
ただ、私の感覚としてはvimとIDEの隙間を埋める存在かなと見ています。メモリも結構食いますしね。

## 資料
- [テキストエディタ比較](https://techacademy.jp/magazine/10569)
- [dein.vimを使ってみる](https://qiita.com/yoza/items/2f8bd33a18225754f346)
- [エクセルやワードの仕様書をマークダウン仕様書に変えよう](https://qiita.com/kitfactory/items/170c4ea17e8047ea0c95)
- [API仕様書をMarkDownで書き、GitHubをつかって運用する方法](https://engineer.blog.lancers.jp/2016/12/api%E4%BB%95%E6%A7%98%E6%9B%B8%E3%82%92markdown%E3%81%A7%E6%9B%B8%E3%81%8D%E3%80%81github%E3%82%92%E3%81%A4%E3%81%8B%E3%81%A3%E3%81%A6%E9%81%8B%E7%94%A8%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/)
- [AsciiDocによる継続的ドキュメント開発〜１．インストールと基本的な使い方](http://dackdive.hateblo.jp/entry/2016/06/14/210832)
- [AsciiDoc入門](https://qiita.com/xmeta/items/de667a8b8a0f982e123a)
- [asciidoctor公式マニュアル](http://asciidoctor.org/docs/user-manual/#tables)

[^1]: いうて登場から10年は経っている。ただし、認知度的には…
[^2]: 現状Windows7な筆者はCygwinを我慢しながら使っております。ターミナル環境の決定版がまだ見えていないため、本記事はgvimにフォーカスすることにしました。ご容赦ください。
[^3]: 1970-01-01T00:00:00Z
[^4]: http://vim-jp.org/vim-users-jp/2010/01/28/Hack-120.html
[^5]: 標準でバンドルされているという意味ではない
[^6]: それ以上に、Ricty Diminishedはpowerline-symbols同梱版が配布されているのでvim-airlineで使うととてもハッピーになれますが、詳細については本記事では扱いません。