• リフト株式会社
    • マーケティング部
    • 関根謙志郎

    好きな技術書で知るエンジニア判定法④ 『入門vi』

    目次

    プログラマの間で有名な宗教戦争があるのをご存知でしょうか?

    Mac vs Windows vs GNU/Linux vs ……

    というOSの宗教戦争ではありません。

    Vim vs Emacs vs Atom vs VSCode vs ……

    というエディタに対するこだわりが、エディタの宗教戦争と呼ばれています。

    宗教戦争と言っても、あくまでエディタ、つまり、プログラマの作業環境はどちらが快適か、というもので、共同開発する上で大きな軋轢になることは多くありません。あくまで、どのソフトウェアで開発する方が快適で効率がいいかというもので、成果物自体は他のプログラマが開発したものと互換性があります。チームで開発するときに、

    Vimで作ったPythonのコードがEmacsで動かない」

    ということは、ほぼ起こりません。

    本記事でお伝えしたい重要な点は、どのエディタを好んで使用しているかにそのプログラマの性向がかいまみえることがあるということです。

    エディタとは

    そもそも、エディタとは何でしょうか? エディタとはテキストエディタの略称で、その名の通りテキストを編集するためのソフトウェアです。

    テキストを作成、編集、保存するのに有名なものにMicrosoft Wordがありますが、これはあくまで日本語や英語などの自然言語を書くためのもので、プログラミングコードを書くのには向いていません。Wordが扱うリッチテキストには、フォントサイズ、フォントカラー、フォントの種類などの情報が含まれてしまいますし、勝手にスペルを変更されたり、小文字を大文字に変換されたり、インデントが付けられたりと、プログラミングをする上で余計なことまでしてしまうため、Wordでプログラマがコードを書くことはほぼありません。

    プログラミングを行う環境として、大きく分けてエディタIDEがあります。

    エディタとIDEはPython、JavaScript、Java、Ruby、HTML、CSS、TeX、XML、SQLなどを直接編集するソフトウェアという点では同じです。違いは、そのソフトウェアの規模です。

    IDEはIntegrated Development Environment、つまり、統合開発環境という名の通り、コンパイル、ビルド、デバッグと言ったファイルの編集以外の作業を自動で行ってくれます。エディタでもプラグインや設定ファイルを自分好みに変えれば同じような作業環境にすることはできますが、IDEは大量の機能を最初から取り揃えていて、深い理解がなくてもすぐに開発に取りかかれます。

    例えば、大規模開発で使われやすいJavaではEclipse, IntelliJなどのIDEを使うことが一般的です。エディタでJavaの開発を行ってるプログラマは少数派です。それは、Javaの言語特性と使われるシーンを考えれば自然なことです。JavaはPythonやRubyなどと比較して、直接処理に関係のない記述が多く、プログラマがそうしたロジックに関係ないコードを手打ちで入力するのは手間です。その手間を省くために、補完や表示が洗練され、大規模開発に伴うストレスを感じないように支援してくれます。スニペットだけでなく、今までに出てきた関数名、クラス名、変数名などを管理してわかりやすく表示してくれるため、プロジェクトが巨大になっても安心です。

    では、なぜ機能不足なエディタが好まれているのでしょうか?

    それは、機能を絞っているからこそ、メモリの少ないマシンでもテキパキ動き、場所を問わないからです。必要な機能があれば後から追加することもできます。更に、エディタ毎の特色が、エディタがプログラマを魅了してやまない理由にもなっています。特に尖っているエディタにVimがあります。

    Vimとは

    Viとはエディタの一種で、Viが進化したのがVimです。操作方法も共通しているので、ほぼ同じものだと思っていただいて構いません。

    Vimは、数あるエディタの中で最も有名で、Emacs派と人気を二分しています。実際、年収700万円以上のプログラマの30%がVim派であり、2位のエディタを10%以上引き離しています。プログラマ全体でみるとVisual Studio Codeユーザーが多いですが、玄人からは

    「慣れ親しんだVimの方がいい」

    という声を多く聞きます。Visual Studio Codeは初心者を中心に人気を得ており、一方でベテランプログラマからはVimとEmacsのどちらかという状況なのです。

     

    参考記事:https://job-draft.jp/articles/323

     

    なぜ、長い間支持されているVimよりもVisual Studio Codeのユーザーが増えるということが起きるのでしょうか?

    それは、VimやEmacsは非常に学習コストが高いソフトウェアだからです。Vimを使いこなそうとすれば、数多くのコマンドを覚えなければなりませんし、モードと言われるVim特有の機能についても理解しなければなりません。有名なモードだけでも

    normal mode

    insert mode

    visual mode

    visual block mode

    command-line mode

    があり、めったに使われないモードも含めれば更に数が多くなります。

    文字を入力して保存するだけでも

     

    iと打って、insert modeに入る(a, o, I, A, Oでも可)

    文字を入力する

    Ctrl-[で normal modeに戻る(Escでも可)

    :と打って、command modeに入る

    :wqと打って、保存し、Vimから抜ける(ノーマルモードでZZでも可)

     

    という一連の操作を覚えなければなりませんし、その方法は幾通りもあります。Wordなどであれば、ツールバーなどにクリックできるボタンなどがあり、初心者でも画面を見ながら操作できます。しかし、Vimにはそうした親切な機能が付いておらず、プログラマがモードやコマンドやモードを理解していなければ簡単なファイルの編集すら行えません。insert modeの入り方でよく使われるものだけでも

    i, a, o, I, A, O

    と6種類の方法があり、しかも、それぞれ効果が違います。VimのユーザーをVimmerと言うのですが、Vimmerはそれらの違いを理解した上で、最もタイプ数が少ない方法を考えてVimを操作します。その上、

    normal modeからinsert modeに入る

    だけではなく、

    「visual block modeからIを押してinsert modeに入り、その状態で文字を入力すれば複数行に亘って編集ができる」

    などの細かい仕様も覚えなければなりません。最低限のことができるようになるまでに平均して数十時間程度の慣れが必要で、プログラミング初心者なら道具であるエディタの使い方を覚えるだけでヘトヘトになってしまいます。Vimの仕様は膨大で、数百時間ぐらい使い込んで、やっと業務でストレスなく使用できるようになったという声も聞くほどです。

    Vim scriptでプラグインを開発したり、他人のプラグインにPull Requestを送ったりするなどの使い方をしてる凄腕プログラマを前にすると、

    「十年以上かかってもVimを使いこなせると胸を張れない」

    と考えるプログラマも多数います。それほどにVimは奥が深く、それ故に、多くの狂信者を生み出してきた驚異のソフトウェアなのです。徹底的に無駄を省き、システマティックに設計されたコマンドとモードに一度慣れてしまえば、Vim以外の環境で開発することは考えられなくなります。慣れれば思考スピードでファイルを編集できるようになるので、爆速で開発を行うことができます。

    熟練のVimmerの指捌きは、洗練されたピアニストの演奏のようです。

    『入門Vi』とは

    深遠で膨大なVimの仕様を理解するガイドブックが『入門Vi』です。

    「Viって、Vimの昔のバージョンなんでしょ? 内容が古いんじゃない?」

    と思われるかもしれませんが、ViもVimも基本的な操作は同じなので、特に古さを感じずに読み進めるとができます。単なる操作方法のチュートリアルだけではなく、Viの歴史についても触れています。例えば、Viに影響を与えたedやexなどのエディタの歴史に触れており、この本を読むことで最初は複雑怪奇に思えるViの仕様を、理路整然とクリアに理解できます。

    また、Viは膨大なコマンドがあるために、タイプミスで全く未知の操作が行われてしまい、初心者が途方に暮れるということがよく起こります。他のソフトウェアですと

    「便利な機能だけ覚えて、あとは徐々にマニアックな機能を覚えていこう」

    で済みますが、Viだと、

    「隣のキーをタイプしてしまっただけで、何が起こってるのかわからなくなってしまった。今までに編集した内容が消えるのは嫌だし、どうしようか」

    ということが起こります。『入門Vi』では、一通りの仕様について網羅的に扱っているので、この本を一冊読むことで、予想外のことが起こって右往左往したという苦いトラウマを克服できるようになります。他のソフトウェアと違って、誤操作で未知の状態になることが多いViは網羅的な仕様の理解が必要不可欠です

    この本全部に目を通して一通りのことを実際に操作しながら覚えていこうとすれば、百時間以上は掛かるでしょうが、業務で使うことを考えれば、それぐらいのトレーニングは必要です。慣れるまでは大変ですが、他のエディタやIDEでもVimの*キーバインドをインストールできることが多く、一度慣れてしまえば一生モノのスキルになります。

    ※キーバインドとは、押すキーと、実行される操作の対応関係のこと。

    『入門Vi』が好きな人はこんな人

    1. 自分の道具や作業環境にこだわりを持つベテランプログラマ

    プログラマは怠け者だと言われます。それは、やるべきことを先延ばししていたり、無責任であることを意味しません。

    ・やるべきことは何であるか

    ・その仕事は本当に必要なのか

    ・削ぎ落とせる無駄はないのか

    を考え、最小の努力で最大の効果を出すのを美徳とするのがプログラマという人種です。そのため、時代が変わっても最速で開発が行える環境に対して強いこだわりがあります。その筆頭に来るのがエディタという、コードを書くためのソフトウェアです。熟練した職人が自分の商売道具に磨きをかけるように、熟練したVimmerも自分のVimの環境に対してこだわりと誇りを持っています。長い時間を掛けてVimを自分のものにしたVimmerはそれだけプログラミングに対する努力をしてきたということです。この本を足掛かりにVimに慣れ親しんだ人は、仕事に対しても誠実で高いパフォーマンスを発揮してくれるでしょう。

     

    2. サーバーサイドエンジニア

    サーバー上で動いているOSとして有名なものにCentOSがあります。サーバーサイドをはsshなどを使って、サーバーの中に入って作業することが多いのですが、CentOSはGNU/Linuxの一種で、ほとんどをUNIXコマンドによるCLIで操作を行います。これはどういうことかというと、特定の機能を持ったアプリを立ち上げて、その中で作業するということができないことを意味します。

    そのため、ターミナル上で動かないソフトウェアは使うことができず、UNIXコマンドですぐに立ち上がるエディタでファイルを編集しなければなりません。VimやEmacsはほとんどのサーバーにインストールされており、もしインストールされてなくてもコマンド1つでインストールできる環境が整っているので、必然的にサーバーサイドエンジニアはVimを使えるようになっていなければなりません。

    今までスマホアプリやフロントエンドを担当してきたエンジニアが、サーバーサイドにジョブチェンジを希望している場合、

    「今までに触ってきた開発環境は何ですか?」

    と聞いてみるといいでしょう。

    「Sublime TextとXcodeは経験がありますが、Vimは詳しくないです」

    といった返答があったときは、先にVimやEmacsに慣れてから、サーバーサイドの業務を任せた方が安心です。

     

    3. 複雑な仕様を理解するのが好きな人

    プロジェクトの大黒柱になってくれるような人材を採用したいというときに、判断基準に困ったことはありませんか?

    ソフトウェアを開発する上で躓くポイントは幾つかありますが、その一つに、必要なことだけを瞬時に調べて実装する能力はあるのに、複雑で巨大な仕様を一度に頭に頭に入れて、整合性のあるコードが書けないというのがあります。

    瞬発力はプログラマにとって必要なことですが、そういった能力だけの人でプロジェクトを回すと、どこかで綻びが生まれるリスクが高まります。

    巨大なプロジェクトの仕様を仔細に理解、記憶し、全体のことをわかっている人も社内に必要です。お互いが何をやってるのかわからずに縦割りでプロジェクトを進めていくと、依存関係でバグが発生する可能性が高まります。そんなときに複雑な仕様を根気よく解きほぐし、全体を理解する素地があるVimmerは頼りになります

    まとめ

    エディタはプログラマにとって居心地のいい家であり、同時に戦場です。熟練工が道具にこだわるように、プログラマもエディタにこだわりを持っています。その中でも特に玄人御用達のエディタであるVimを使っているプログラマは生産性が高く、ひたむきに一つのことに取り組む粘り強さを持っています。

    サーバーサイドならVimかEmacsの理解がほぼ必須になります。Vimのキーバインドは他の環境にもインストールできることが多いため、サーバー管理以外の業務でも強みを発揮できます。

    学習コストの高い道具を使いこなせるということは、それだけプログラミングに対して誠実に取り組んできた証拠でもあります。根気よくプロジェクトに関わってほしい人を採用したいならVimmerという選択肢は魅力的です。

     
    無料Ebook: 外国人雇用は難しくない!
    外国人雇用は難しくない

    外国人雇用の必要性は理解している。だけど始め方が分からない。

    そんなお悩みをお持ちではありませんか?

    本書は弊社が初めて外国人雇用をされる企業様をサポートする中でよく質問に上がる項目を参考に、外国人雇用の7ステップ毎の実務と注意点をまとめたものです。

    • ・自社に合った人材を採用する方法
    •  
    • ・違法就労を防ぐ方法
    •  
    • ・外国人を雇用する企業が利用できる可能性が高い助成金

    など、全37ページに渡って詳細に解説しています。

    ぜひ、外国人雇用の初めの一歩にご活用ください。

    Ebookをダウンロードする
     

    マーケティング部

    福島県内の高校卒業後、東北大学に入学。在学中は硬式野球部に所属。英語学、心理学、英語教育学を専攻。卒業後は社会を構成する『ヒト・モノ・カネ・情報』が遍在することで生じる歪み(社会問題)をビジネスを通して適正化するというミッションに共感しリフト株式会社に入社。現在はマーケティングを担当。