まえがき
みなさんのお使いのエディタは何でしょうか。
きっとそのエディタは、自身のこだわりが幾つかあってそのエディタを選択したのだと思います。
私の身の回りにも当然IDE派とEmacs,Vim派が居て、Vim派の私はよくIDE派に「IDEをなんで使わないの?こんなに便利なのに?」的な姿勢で言われることが多々あります。(仕事でPHP書くので特にPHPStorm派などに…)
IDEにはエディタ単体の機能ではVimは負けるかもしれませんが、個人的にはPCにインストールする系のIDEに共通するダメなところがいくつかあって、私はVimを選択しています。その理由を記事にしてみました。
※ Emacsの人への注意書き
ちなみに私はあまりEmacsを使ったことがない人なので、例という例はVimでの利用例しか書いてないです。
Emacs派からみてココは違うみたいなことがあったらコメントにてお願いします。
この記事で書かないこと
Vim,Emacsの使い方、プラグインの使い方・紹介
Git、SVNを前提とした場合のIDEの不都合
私も仕事を始めた当初はPHPでの開発にEclipseを使っていました。
会社ではSVN(Gitに置き換えて考えて頂いてOKです)を利用しています。
この場合、大抵は自分のPCにSVNでソースをダウンロードし、そのソースを同様に実行用Linux上に展開したりします。(展開の仕方はLinux上でチェックアウトするなり、ファイルを自分のPCと同期させるなど、方法はいくつかあります。)
そして、PC、実行用LinuxどちらかのプロジェクトでSVNを管理し(大抵PC側)、常に実行用とIDE用のソースは同期をとります。誰かがSVNにコミット(gitのpush)したら両方のプロジェクトのソースを更新します。
図にすると以下の状況です。
この場合の実行用LinuxはAWSなのかVagrantなのかは環境によるかと思います。
『2箇所のプロジェクトフォルダを同じソースを維持する努力がある』というのが、個人的にはIDEの最大の嫌なところですね。下手な差分が出ると大変ですし、差分出したら出したで気にし続けなきゃいけないのが嫌です(勝手にココらへんを鎖のイメージにしちゃいましたw)。
Vim,Emacsならプロジェクト管理がこうなります。
ファイルの編集、SVNコミットすべて実行用Linuxの上で行います。
誰かがコミットした場合はsvn update一発で済みます。
(gitで言うと誰かがpushしたらgit pullです。)
特にプロジェクトのブランチ切り替えなどは
$ svn sw [URL]$ git checkout [ブランチ名]
コマンドで数秒で完了します。
ダメなIDEで大きいプロジェクトだと同期待ち、アップロード待ちで数十分かかる場合もあるかと思います。(Linuxにsmbで共有していたディレクトリに、Eclipseで自分のPCからcheckoutしてた時は数時間かかってました・・・今となっては笑い話ですが)
ただし、Vim派、Eclipse派の方はソースのマージなどは最初苦労するかもしれません。
Linux上でVimを使ってマージできるプラグインを入れたり、マージだけローカルPCでGUIで…なんて感じで楽にしてあげる工夫をする必要があります。(個人的には仕事ではTortoiseSVNとWinMergeでマージしてますが、そのうちVimプラグインに移行したいです。)
基本的にIDEでできて、Vim、Emacsでできない機能はほぼない
お使いのIDEのLinter、スニペット、コード補完その他諸々、並の機能はすべてVim、Emacsでできます。
デフォルトでない機能はプラグインを入れるという形になりますが、世界中のプログラマーがこぞって開発したプラグイン郡があって、足りないことはないと思います。
サーバーごとのプラグインの管理はどうなのって話になるかと思いますが、近年はdotfilesという名前で自分だけのリポジトリを作って、そこで設定ファイルを管理する人が多いです(githubでdotfilesで検索してみてください)。
つまり、今時は開発環境もGitで管理するということですね。
Vimの例では、新しいサーバーになったらgit cloneして、設定ファイルを適切に配置して、Vim起動時にプラグインがインストール(私はNeoBundleでプラグイン管理してます)されて環境構築完了です。
Vimのカスタマイズに関してはプラグインを入れる記事や、GitによるDotfiles管理の記事など世に沢山あるかと思いますので、そちらを見てください。
言語を選ばない
アプリ開発のようなIDEに依存した言語を除きますが、特にPHPStormのような課金アイテムでPHPしか書けないなんて状況は作りたくありません(あ、いや、JSとCSSも書けるとは思いますが…)。
個人的には言語選択したあとに「IDEも選定して使い方を覚えなきゃいけない」という煩わしさからは開放されたいです。
その点、Vim、Emacsは長く愛されてきた分の資産があり、大体の言語に対応できるようになってます。
世界中のプログラマーが長く使ってきていて、IDEで出来るあれをVimでやりたいなんてことは大抵プラグインがそろっていますから、あとは言語別のLinterやら入れるだけでいいじゃないですか。
近年のWeb界隈の開発手法
最近はWeb系で言うとDBのマイグレーションや、Gulpなどを筆頭にライブラリのパッケージ管理までSSHしてコマンド入力を要求される機会が特に増えてきました。
もう少し足を伸ばして、サーバーのセットアップもAnsibleなどの台頭で構成管理のファイル管理、実行などもすることもあるかもしれません。(私は個人開発では使ってます。)
サーバー上で実行するためのSSHをする機会は以前より増えてるので、IDE派からしてみたら面倒ごとが増えたのではないかなと思ってます。
…ちょっとこれは動機としては弱かったかもしれませんね。
でも、管理ファイルを編集 → 実行 → 編集 → 実行 → 編集 ・・・
のサイクルがVim(Emacs)だと
[編集中] Ctrl-z → 実行コマンド → [編集に戻る] fgコマンド
で楽ですよ。
あとがき
ただ、落とし穴が一つあって、初めてプログラム書くなんて人にはIDEをおすすめしたいです。
理由はIDEの場合は最初から備わっている機能は、Vimの場合プラグインを探すことから始まるので、デフォルトのVimだけ使ってたらLinterやスニペット(などその他便利な機能)という存在が世の中にあることに、なかなか気づかないだろうなと思うからです。(そこらへんEmacsとかはどうなんだろう。)
でも、私自身Vimで書いていると言語間の障壁が結構なくなったのを感じます。
これから先新たに言語を選択するにしても、Vimひとつあったらきっと満足できることを確信しています。
(たぶんそれはEmacsでも同じことだと思います)
Vimが気になったら過去にも記事を書いているので、そちらもご覧ください。
これからVimを触る人向け!今まで使っていたエディタのようにVimを使いはじめる。
これからVimを触る人向け!Vimの検索機能を駆使して調査と開発をスムーズに