聞いたら一生の宝,プログラミングの基礎の基礎
第6回 vimの基礎を見直す
みなさんこんにちは,teratail開発チームの本橋です。
みなさんはシステム開発をする時,どのようなエディタを利用しますか。
もちろん開発するシステムの規模や言語,プラットフォームによって選択するエディタは変わってきます。VisualStudioやAndroidStudio, Xcode, Eclipse, IntelliJ IDEAなどのIDE(統合開発環境)や,Atom, Sublime TextなどのGUI上で動くテキストエディタ, そしてUNIX系OSで広く利用されているVim,Emacsなど,さまざまなものがいろいろな場面で選択されています。
本日は,特にUNIX系OSで設定ファイルの編集からシステム開発まで利用されるテキストエディタであるvimについての基礎を見なおしてみましょう。
vimの実際の操作方法や便利なプラグインなどは別の記事に任せるとして,本稿ではどういう時にどういった理由でvimを選択するかという点に焦点を当ててみたいと思います。
vimが使われる理由
vimの利点して一般的に以下のことが言われています。
- 軽量で起動が速い
- 豊富なプラグインによる拡張がある
- 一般的なOSで同じように利用できる
- マウスを利用せずに操作ができる
- ターミナルで操作するため,gitコマンド等がシームレスに実行できる
- etc..
このように軽量で他機能なのに拡張性と汎用性を持ち合わせ,世界中で使われているエディタです。しかし,モードなど独特の概念や操作方法から学習コストが大きく,避けている人は多いように思います。
「vimで本格的に開発している人はいるのでしょうか?」
JavaやAndroid, Xcodeなどの専用のIDEが用意されている言語ではvimが利用されることはほとんどありませんが,Ruby on RailsやPython, PHPなどの軽量プログラミング言語ではどのように使われているのでしょうか。
IDEに見られるような強力な補完機能のないvimを使って,どのような開発が行われているのでしょうか。
先日,teratail上で下記のような質問がありました。
- vimで本格的に開発している人はいるのでしょうか?
- https://teratail.com/questions/15548
いくつかついた回答を抜粋しますと,
- 「PHPで4~5万行くらいのWebサイトを作った」
という大きな開発をした方や,
- 「そんなに環境に依存しないで使えそうだから使ってみた」
といった,gVimやMacVimでUNIX系での利用も含めた汎用性を導入理由にした方もいます。
Mac, Linux, WindowsなどのどのようなOSでも使えるため,環境によって覚え直す必要が無いというのも大きな利点です。
しかし多くの人が長年vimを採用している理由は以下ではないでしょうか。
- 「自分が欲しい機能を自由に組み合わせられることで,自分に特化した最速/最強の開発環境を作ることができる」
UNIX文化で作られたアプリケーションであるvimは,さまざまなプラグインがvimスクリプトで作られ配布されています。
- 参考:vimのステータスラインをかっこよくしたい
- https://teratail.com/questions/293
また,
- 「IDEのキーバインドをvimにしている」
といった方もいます。
私個人も,各テキストエディタ/IDEを使用する際は必ずvimのキーバインドに変更しています。
- 参考:Sublime TextをVimのように使う方法
- https://teratail.com/questions/7330
vimで一番特徴的なのがモードの概念だと思います。コピーペースト,削除やカーソル移動を行うノーマルモード,コピーする文字や削除する範囲を選択するビジュアルモード,テキストの入力を行う挿入モード,検索や設定変更などさまざまなコマンドを実行するコマンドラインモードがあります。
マウスがない時代に作られたvimでは,これらの複雑な操作をマウスなしで行うことができるようにキーマッピングされています。ホームポジションを崩さずに操作ができる点が開発で長時間タイピングをするのに向いている,という意見がとても多いです。
ターミナルで実行する際に便利な理由
開発をする中でコマンドライン上の操作は多く発生します。たとえばサーバ上で実行されるバッチ処理を開発する際にIDEなどのエディタで編集しターミナルで実行し,その往復が完了した際にGUIのgitアプリケーションからcommitする,という動作を行うことがあります。vimで開発した場合,この手順がすべてターミナルの上で行えるため,アプリケーションの切り替えや少なくシームレスに実行できます。
またどのサーバにも入っていることが多く,sshでログイン後でも普段の開発と同じようにファイル編集をすることができます。
最後に
vimを利用するいろいろなシーンを紹介しましたがいかがでしょうか。
何度も触れていますが,UNIX系OSで広く採用されているため,設定ファイル等を触る機会があった際に覚えておいたほうが何かと便利です。
流れの速いITの技術で前身のviから数十年使われ,今も多くの開発者が利用し,またこの先数十年使われるであろうツールというものはそうそうありません。GUIのテキストエディタと比較して学習コストが高いですが,「一生の宝」の候補になりえると思います。
vimは日本のコミュニティが活発で便利なプラグインなどもどんどん開発されています。vim-jp.orgというコミュニティでは頻繁に記事が投稿され,vimdoc-jaというドキュメントページでは初心者からかなり使い込んだ上級者向けの資料が参照できるので,興味があれば参照してみるのもいいでしょう。
どのような開発環境を利用するかはその時その時で最適なものを選択すべきです。IDEでの開発をしている方でもこれを機にvimを利用してスキルの幅を広げてみるのはいかがでしょうか。
vimでの開発をしている方は,逆にIDEやEmacsなどの他のテキストエディタを利用してスキルの幅を広げてみるのもいかがでしょうか。