Money Forward Developers Blog

株式会社マネーフォワード公式開発者向けブログです。技術や開発手法、イベント登壇などを発信します。サービスに関するご質問は、各サービス窓口までご連絡ください。

20230215130734

この春オススメしたい第三のエディタ

こんにちは。萩谷と申します。

この春、心機一転エンジニアデビューを果たした方、新卒でエンジニアとしてのキャリアをスタートさせた方、おめでとうございます。

さて、我々Webエンジニアの職人としての道具といえばPCですが、同時に欠かせないものといえばエディタがございます。

この業界、最大の2大派閥として永きに渡りVim派とEmacs派が覇権を争っていることは一度は耳にしたこともあるでしょう。

どちらも最高のエディタだということには疑いの余地はありませんが、同時に手に馴染むまでにはそれなりの時間的なコストを払わねばならず、挫折する方も少なくないと聞きます。

最近はAtomなどの新しいエディタにも人気が集まっていますが、心ないVim/Emacs派の諸先輩から「そっち行っちゃったかー・・」って言われるのも悲しいですね。

そんなあなたにオススメのエディタ

Spacemacs(すぺーすまっくす)です。

The best editor is neither Emacs nor Vim, it's Emacs and Vim!

そりゃ悟空とベジータがフュージョンしたら最強に決まってます。

Spacemacsの特徴

最近のプログラム言語には、よく使う機能のライブラリのデファクトスタンダードを集めたAwesome xxxxというまとめが存在することが多いです。例えばRubyであればAwesome Rubyですね。

SpacemacsはつまりはAwesome Emacsであると言ってしまって差し支えないかと思います。 尖った機能は乗ってないかもしれないけど、先人の知恵が詰まった最初から強くてカッコいいEmacsなのです。 さらにevil-modeというEmacs上でVimのUIを実現する機能を搭載しており、かつSpacemacs管理のプラグインに関しては、(Vimモードにすれば)VimのUIで統一されるようになっています。すごいですね。

使用感

Vimには最高のUIがあり、Emacsには最高の機能と拡張性がある、というのは議論の余地はないかと思います。 そこからさらにSpacemacsの特徴を挙げると、以下のようになります。

  • 全ての操作がキーボードだけで完結する、最高のUIを持っている
  • 名前が示す通りSpaceを起点とした、デフォルトで最適化された機能の呼び出し
  • vimprocなどで拡張しないと使えなかった、他プロセスと連携する機能がデフォルトで入っている
  • Emacsの資産が全て使える(導入できるかどうかは別ですが)
  • 最初からあると便利〜なきゃ困るレベルの拡張機能がデフォルトで入っている

といったところでしょうか。 私自身Vimを数年使った後、Spacemacsに移行して3ヶ月くらい使っていますが、VimのUIでEmacsを使うというのがこんなに快適なものだとは・・!と未だに感じることが多いです。

さらに

UIについてはVimに詳しい人に教わればいいし、Emacsの人が驚くような機能の呼び出しをしていればそちらを導入してみればいいし、というどちら陣営ともコミュニケーションをとっていけるのも地味に嬉しいポイントです。 (逆に言うと、Spacemacsならではの問題の場合は頼れる人が皆無ということでもあるわけですが・・)

Rubyist視点から見たSpacemacs

いいところ

  • Vim時代憧れだったコード補完系のプラグインが使える
  • rails consoleがエディタ内で起動できる
    • 編集中の行を環境変数とかGemのロードとか考慮した上で、その場で実行できたりとか
    • 逆にcosole上で組んだコードを実コードにサッと持ってこれたりとか
    • Emacsの補完機能がそのままrails console上で動く
  • quickfixなどを設定しなくても、その場でRspecを実行して、実行結果と実コードを行き来できたりとか
  • 起点になるキーさえ記憶しておけば、キーバインドで悩むことから開放される
    • 例えばファイルだったらSPC-f、Ruby関連の操作をするならSPC-mというところ
    • しかもその後続キーはナビゲーションしてくれる。親切! Pasted image at 2016_04_03 04_02 PM

イマイチ?なところ

  • なんか動かない!ことがたまにある
    • Emacsの知識不足だったっぽいことがしばしば。調べればなんとかなることもあります。
  • 情報が少ない
    • そもそもユーザーが少ない。みんな使おう
  • robeの補完が効いていると、バッファ内の文字列の補完が効かなくなる
    • ↑設定の問題な気がするので、詳しい方教えて下さいm( )m

色々書きましたがこれらの機能を使うのに必要な設定は数行だということは特筆すべきところでしょう。 何度も書いている気がしますが、本当にデフォルトの状態が超強力です。

設定など

インストール

https://github.com/syl20bnr/spacemacs#os-x こちらに書かれている通り、emacs-macのSpacemacsを使うのが良いかと思います。私自身、最初はVimの感覚のまま、Terminal内でSpacemacsコマンドを叩く、という実行方法で使っていましたが、Emacs流儀に則り、Emacs内からShellやその他プロセスを呼び出すという方が格段に快適だということに気づきました。

初回起動

最初のセットアップについてはいくつか記事が出ているので、そちらを参考にやれば特に困ることはないと思います。

VimmerであればVimモードを選んでおけば間違いない、くらいだった気がしました。

.spacemacsファイルの設定

筆者の設定です。 https://github.com/hagiyat/dotfiles/blob/master/spacemacs

実質Rubyに関係がある設定は

39行目あたりの

(ruby :variables
  ruby-enable-ruby-on-rails-support t
  ruby-enable-enh-ruby-mode t
  ruby-version-manager 'rbenv
  ruby-test-runner 'rspec
)
ruby-on-rails

と、298行目あたりの

;; ruby
ruby-insert-encoding-magic-comment nil

;; もしかしたら↓も必要かも
;; define our own super awesome hook that will remove the before-save-hook
(defun remove-enh-magic-comment ()
  (remove-hook 'before-save-hook 'enh-ruby-mode-set-encoding t))

;; add the hook to call our super awesome function.
(add-hook 'enh-ruby-mode-hook 'remove-enh-magic-comment)

これだけです!短い!!

一応解説しておくと、

  • ruby layerを有効にする
  • ruby-on-railsサポートを有効にする
  • enhanced ruby modeを有効にする(よくわかってない)
  • バージョンマネージャーはrbenvを使う
  • テストランナーはrspecを使う
  • ruby-on-rails layerを有効にする
    • (ruby-on-railsサポートとかぶってるけど、詳しく調べてない)
  • encoding-magic-commentを無効にする
    • デフォルトは有効だという罠
    • # -*- encoding: utf-8 -*- が勝手に入って泣きをみます
    • Ruby2.0以降の環境で開発しているならすぐ無効にしましょう!!

現状筆者の.spacemacsの行数は325行となっていますが、このほとんどがインストール時に作られたファイルのコメント部分になっています。 まあそれを加味しなくとも、似た感じの機能をVimで実現すると、プラグインを駆使してもvimrcは3000行くらいは書くんじゃないでしょうか。破格です。

おまけ:IME操作を快適に

Terminalなどで日本語入力のまま入力してしまって、ぎt sたつs(git status)などと入力して悔しい思いをした経験のある方は少なくないのではないでしょうか?

そんな方には以下の設定です。 Emacs-mac / Google日本語入力専用の設定になってしまっていますが、少し書き換えれば他の環境でも使えると思います。

;; 入力ソースの設定が必要
(defun mac-selected-keyboard-input-source-change-hook-func ()
  ;; 入力モードが英語の時はカーソルの色をorangeに、日本語の時はredにする
  (set-cursor-color (if (string-match "\\.Roman$" (mac-input-source))
                    "orange" "red")))
(add-hook 'mac-selected-keyboard-input-source-change-hook
          'mac-selected-keyboard-input-source-change-hook-func)
;; evilのnormal-stateになったらIMEを英語に戻す
(add-hook 'evil-normal-state-entry-hook
          '(lambda () (mac-select-input-source "com.google.inputmethod.Japanese.Roman")))
;; EmacsをアクティブにしたらIMEを英語に戻す
(add-hook 'focus-in-hook
          '(lambda () (mac-select-input-source "com.google.inputmethod.Japanese.Roman")))

何ができるかというと、

  • normal-stateになったらIMEを強制的に英語にする
    • 要はESC一発でnormal stateに戻りつつ、IMEを英語にするということです
  • insert stateで日本語入力になったら、カーソルの色を赤に変える
    • normal state(緑) / insert state(オレンジ) / insert state 日本語(赤) という感じです
  • Emacs-macがアクティブになったらIMEを強制的に英語にする
    • 前述の悩みから開放される!!

まとめ

  • The best editor is neither Emacs nor Vim, it's Emacs and Vim!
  • 最初からすごく強い
  • 設定が少なくてすむ
  • テーマがかっこいい

いかがだったでしょうか? セットアップしてみようと思った方は、以下の記事をどうぞ。とても参考になります。筆者もとてもお世話になりました。

最後に

マネーフォワードでは、手元の環境にもこだわりのあるエンジニアを募集しています。 ご応募お待ちしています。

【採用サイト】 ■マネーフォワード採用サイトWantedly | マネーフォワード

【プロダクト一覧】 ■家計簿アプリ・クラウド家計簿ソフト『マネーフォワード』家計簿アプリ・クラウド家計簿ソフト『マネーフォワード』 iPhone,iPad家計簿アプリ・クラウド家計簿ソフト『マネーフォワード』 Androidクラウド型会計ソフト『MFクラウド会計』クラウド型請求書管理ソフト『MFクラウド請求書』クラウド型給与計算ソフト『MFクラウド給与』経費精算システム『MFクラウド経費』消込ソフト・システム『MFクラウド消込』マイナンバー対応『MFクラウドマイナンバー』創業支援トータルサービス『MFクラウド創業支援サービス』お金に関する正しい知識やお得な情報を発信するウェブメディア『マネトク!』