データサイエンティストのためのEmacs

Robert Vescoは、ニューヨーク市で開催されたInsightプログラム、2015年1月期のメンバーです。彼は最近、メリーランド大学で経営学の博士号を取得しました。以下の記事は彼の個人ブログに元々投稿された記事で、データサイエンティスト向けのツールとしてEmacsを紹介したものです。彼は現在、Bloomberg LPでデータサイエンティストとして働いています。

RやPython、SAS、Stata、SQL、そして、ありとあらゆるデータサイエンスのプログラミング言語に対応したエディタが欲しい。IDEライクな機能を持つエディタが欲しい。全てのプラットフォームやターミナルで機能するエディタが欲しい。文芸的プログラミングのファンである。高度なカスタマイズが可能で、ほとんどのエディタが消え去ってしまった後でも存続するようなエディタが欲しい。こういった希望を満たしてくれるエディタはEmacs以外にないでしょう。

各プログラミング言語には、テキストエディタ、またはその言語に適したIDEが備わっています。あなたが、もっぱらRで作業をしているのであれば、RStudioを使うでしょうし、PythonであればSpyderを使いたくなるでしょう。どのような言語で作業していても、それに特化したIDEが存在します。しかし、それこそが厄介なのです。もし、他の言語で作業したいときはどうしますか? 言語を統合したい時はどうでしょう? こういった場合は、知識のない複数のIDEを使う羽目になるでしょう。それに、これらのIDEの人気が落ちてしまったり、アップデートがされなかったりというようなことになれば、努力して得た知識が無駄になってしまいます。その対極には、Notepad++やSublimeといったテキストエディタがあります。これらは、あなたが想像した通りの様々な言語や、追加機能として得られるいくつかのアドオンと一緒に機能します。しかし、これらは特定のプラットフォームでしか使えなかったり、カスタマイズが容易ではなかったりします。

現代のデータサイエンティストは、しばしば複数の言語を用いて、複数のプラットフォームで仕事をすることがあります。あるプロジェクトではRを、他のプロジェクトではPythonを、または、GUIを使用していないクラスタで仕事をすることもあるかもしれませんし、LaTexを用いて文章を作成する必要があるかもしれません。Emacsでは、これら全てを行うことができ、好きなようにカスタマイズすることもできます。ウソはつきません。学習するには時間がかかるかもしれませんが、それだけの価値はあるはずです。

以下に、データサイエンティストにとってEmacsが素晴らしいエディタであるという、いつかの主な機能を挙げたいと思います。

IDEライクな機能

ほとんどのプログラム言語では、すぐに使えるシンタックスハイライトが含まれています。ESSElpyといったパッケージでは、オートコンプリート、ドキュメンテーション、デバッグの機能が追加されています。プログラミング言語によって、利用可能なIDEの機能の数は異なりますが、最低でもシンタックスハイライトやある種のオートコンプリートは備わっているはずです。


図1: “オートコンプリート”

ヘルプや関数パラメータ…に簡単にアクセスできるのは、とても便利です。これは、しばしば、オートコンプリートと一緒に提供されています。


図2: “関数のヘルプ”


図3: “関数パラメータのヘルプ”

Printステートメント、RやPythonのコードのデバッグにはうんざりです!


図4: “条件付きブレークポイントを使った、インタラクティブなデバッグ”

私がEmacsを受け入れるきっかけとなった最初の機能が、インタラクティブなコマンドでした。これは、キーボードのショートカットを使って、バッファや関数、パラグラフ、ラインをインタープリターに送ることができるのです。はっきりさせておきますが、コードをハイライトする必要もないのです。これは、統計分析を行う上で、大幅な時間の節約になります1


図5: “インタラクティブなコマンド”

同様の機能がSQLにも

データベースを扱うことはありますか? 上記で挙げた有効な機能は、SQLにも適用されています。SQLiteやPostgreSQL、MySQL、その他、様々なデータベースでインタラクティブに作業をすることができます。長いSQLステートメントをデバッグすることはありませんか? 問題ありません。簡単にイテレートできます。


図6: “インタラクティブなSQL”

Org-mode/文芸的プログラミング

パブリケーションを作成することはありますか? コードと文章をまとめたいとは思いませんか? 再現可能なデータ分析を信じますか? Emacsでは、どんな言語でもドキュメントに入れることができます。RStudioでもこれが可能ですが、RとLaTexに限定されます。


図7: “文芸的プログラミング: コードとStata”

LaTexが必要ですか? いいでしょう。

    #+BEGIN_LaTeX
    \frac{3}{4}
    #+END_LaTeX

このマジックの鍵となるのは、org-modeと呼ばれるモンスターパッケージで、Emacsの目玉となっている機能の1つです。この機能で、コードだけでなくあなたの生活をも整理することができるでしょう。

$$\frac{3}{4}$$

ターミナル/リモート編集

まれに、リモートでサーバへのアクセスが必要になることがあります。または、GUIを使用していないクラスタで仕事をしていて、スクリプトをインタラクティブにデバッグする必要があるかもしれません。


図8: “ターミナルで作業すれば好都合”

シェルとの関わり

あなたが実行したいと思うターミナルコマンドはありますか? Emacsでは、ターミナルコマンドが簡単に実行できます。この機能が何よりも素晴らしいのは、テキスト上で操作できるということです。コードの範囲を選択し、ターミナルコマンドに送ったら、バッファ内でstdoutがテキストを置き換えてくれるのです。


図9: “SEDを使って、バッファ内でテキストを探して置き換える”

矩形編集

データサイエンティストは、しばしば表形式のデータを扱うことがあります。そんな時、列を削除したり、動かしたり、またホワイトスペースの列を変更する必要があったりします。


図10: “矩形モードを使ってテキストのブロックを修正する”

全てが指先の操作一つでできる

Emacsには、ファイルや関数、ありとあらゆるものを検索したり見つけたりすることができる、様々なパッケージが備わっています。しかし、ずば抜けてすごいのは、helmです。簡単な操作で、探していたものを瞬時に探し出すのですから。十分に説明することができませんが、以下のデモを見ていただければ、helmがどんなに素晴らしいものなのかが分かるはずです。

http://tuhdo.github.io/helm-intro.html

必要な機能を入手できる

Sublimeのマルチカーソルがお気に入りの方は、http://emacsrocks.comから入手できます。長年vimをお使いの方なら、Evil Modeを使うことでEmacsにvimの編集機能が追加されます。Gitユーザには、gitを使うためのmagitもあります。足りないものがあればパッケージを確認しましょう。Emacsは最もカスタマイズ性に富んだエディタです。あなたのワークフローに合わせて、Emacsに関するほとんど全てをカスタマイズすることができるのです。

30年以上の歴史がある巨大なユーザベース

Emacsには長い歴史があります。10年前に書かれたほとんどのコードが、まだ動作します。そして毎年のように進化を続けています。とりわけ優れているのがEmacs 24です。Emacsを何年か前に使ったことがある方は、もう一度使ってみてください。今はパッケージ管理が組み込まれているため、テストパッケージを簡単に追加することができます。さらに重要なのは、Emacsは今後しばらく廃止される兆候がなく、しかも無料であるということです。少なくともあと10年は存続するでしょう。

では、欠点は?

インターネット上に残っているレガシーコードが混乱を招く

繰り返しますが、Emacsには長い歴史があります。Emacs 24では大々的な改善が行われましたが、改善により使えなくなったものも多々あります。同じことはOrg-modeのバージョン7と8の間にも言えます。ネットに残る様々な内容があなたを混乱させ、知らず知らずにストレスの原因となります。

カスタマイズのためのEmacs Lisp

Lispは他の言語と大きく異なるため、私は使っていて楽しいのですが、多くの人はPythonのような言語の方が好きなようです。

初心者には扱いにくい

Emacsは臆病な人には向いていません。インストール先によっては、操作の助けとなるGUIがない場合もあります。たとえGUIがあっても、それだけでは分からない場合もあります。Emacsは目的に合わせてすぐにカスタマイズできるという良さがありますが、使い始めたばかりのユーザには分からないかもしれません。

こうした使いにくさを軽減するため、Emacsには役立つ機能がすぐに使えるスターターパッケージがいくつか用意されています。サイエンティストにはKieran Healyのスターターパッケージが役立つでしょう:http://kieranhealy.org/resources/emacs-starter-kit/

Preludeのパッケージも役に立ちます:https://github.com/bbatsov/prelude

Macをお使いの方なら、Aquamacsがオススメのようです:http://aquamacs.org/

これらを使えば、Emacsの威力をすぐに活用できます。個人的には、必要な動作だけが行われるようにEmacsを一から構築するのが好きですが、こうしたパッケージを使えばEmacsの威力を実感できることは間違いありません。

パッケージが複数ある

Emacsにはデータサイエンティストのためのすぐに使えるツールが多数含まれていますが、特定の言語にフォーカスしたパッケージもあります。R、Stata、Julia、SASを使用する方には、統計アプリケーションを使用するための全体的なフレームワークを提供するhttp://ess.r-project.org/が欠かせません。

しかし、PythonやScalaを使いたい方は、他の言語を使わなければならないかもしれません。

たとえば、Emacsには基本的なPythonのサポートはありますが、lint、リファクタリングなどの便利な機能を使いたい場合もあるでしょう。多くのパッケージがこれらの機能を実装しようとしており、その中には優れたものもあります。個人的にはelpyが好きですが、完璧ではありません。IPythonには、emacs-ipython-notebookがあります。Org-modeのIPythonのために、ob-ipythonもあります。

このように、目的の言語を使用するためのパッケージはありますが、その場合、自力で対処しなければなりません。これが時には面倒に感じることがあります。

伝え忘れた内容は…?

データサイエンティストにとって耳寄りな機能はここでほとんど紹介したと思いますが、もし重要な機能を忘れているようであれば、お知らせください。私のTwitter(https://twitter.com/robertvesco)で紹介させていただきます。

脚注:

Insight Data Science Fellows Programについて詳しくはこちらから。スタートアップデータプロジェクトの今後のセッションでInsight Fellowとの共同作業をご希望の方は、info@insightdatascience.comまでご連絡ください。


  1. 他の多くの機能と同様、これはインストールしたパッケージによって異なりますが、この機能は好きな言語に合わせて簡単に実装することができます。