レベル: 初級 伊藤直也, ITmedia
2007年 5月 11日 春は出会いと別れの季節。入学や就職で、新しい生活を始める人も多いでしょう。それを機にPC環境もそろそろ大人への階段を上ってもいいかもしません。ここでは、はてなという企業でプログラマーとして働くあの人の開発環境を紹介することで、プロが好む作業環境を考えてみます。
わたしははてなという企業でプログラマーとして働いています。はてなは、ブログやソーシャルブックマークなどWeb上のサービスを提供する会社ですが、それらのほとんどはPerlで書かれており、LinuxやApache、MySQLをはじめとするオープンソースソフトウェアの上で動作しています。そんな理由から、開発環境も自然とオープンソースのツールを使うことになります。今回から2回に分けて、そんなわたしの開発環境を簡単に紹介させていただきたいと思います。
ノートPC1台で開発する
本題のツール類の話に入る前に、開発に使っているハードウェアの話を先にしておきましょう。
まず、開発はすべてノートPC1台で行っています。いろいろ理由はあるのですが、一番の利点は自宅でも会社でも同じ環境で開発を続けられる、というところでしょうか。わたしは仕事でサービスを開発する以外にも、プライベートでPerlのライブラリを書いてみたり、オープンソースソフトウェアのプロジェクトに参加したりしています。
こういった状況なので、開発環境が会社と自宅でバラバラですと、ちょっとしたツールの設定を2回行う必要があるなど、何かと面倒です。また、後述するcoLinuxやMac OS Xを使えば、ノートPCの中に完結したUNIX環境が手に入る*ため、ノートPCさえ持っていれば、例えば飛行機の中など移動中でも開発を続けられたりします。実際、先日も国際線の退屈な長時間のフライトで、コードを書いて暇をつぶすことができました :) 。
1つのPCにUNIX環境を構築する
さて、ソフトウェアの話に入っていきます。まずはOS。ノートで開発する、と聞いて例えばWindows向けPCのOSを換装してLinuxなどのPC UNIXをインストールしている、あるいはノートPCをデュアルブートさせてUNIX環境と使い分けている、なんていう姿を想像された方も多いかもしれません。
しかし、いまどきはローカルのPCにUNIX環境を構築するのに、UNIXをインストールするというストレートな方法以外にもいろいろやり方があります。
- Windows上でcoLinuxやVMware Playerを使ってLinuxを動かす
- Mac OS Xを利用する
などがその例です。
WindowsをベースにcoLinuxやVMware Playerを使ってLinuxを動かす
図1を見てください。わたしのデスクトップのスクリーンショットです。一見すると何の変哲もないWindows XPのデスクトップですが、中央にはターミナル(Tera Term)が起ち上がっており、どこかのUNIXへログインしてシェルを操作しています。
図1. わたしのデスクトップのスクリーンショット
この、「どこかのUNIXへログインして」がポイントです。普通に考えるとリモートのUNIXサーバにログインしているように思えますが、実はこれはローカルに起ち上がったLinuxにターミナルでログインして操作しています。coLinuxを使うと、Windowsの上でLinuxを動作させることができるのです。つまり、1つのPCの中で2つOSが動いているというわけです。このWindowsの上で動いているLinuxをサーバにして、そこにログインして開発を行う、という感じですね。
わざわざWindowsの上でLinuxを動かすメリットは、
- デスクトップ環境には慣れたWindowsが使える
- OfficeなどWindowsアプリケーションが使える
- Windowsを使いつつも開発はLinux上で行える
- 外部ネットワークにあるサーバとは異なり、ネットワークにつながっていなくても開発が続けられる
などなどいろいろあります。
coLinux上にアプリケーション開発環境を構築する
わたしはcoLinuxにDebian GNU/Linuxをインストールして、そこにPerlやRubyなどの言語や、Apache、MySQLといったアプリケーションの開発/動作に必要なソフトウェアをインストールして利用しています。
また、coLinux上に構築されたユーザーのホームディレクトリは、Sambaを使ってWindowsからネットワークドライブとしてアクセスできるようにしてあります。これで、Windows上のアプリケーション、例えばテキストエディタなどから、直接coLinux上のファイルを編集できます。こうしてプログラムの編集は使い慣れたエディタで、その動作環境はLinuxでというように使い分けています。
単一のマシンにLinuxをインストールした場合、最近ではGNOMEなどのデスクトップ環境がGUI周りの機能を提供していますが、coLinux on Windowsはそれらデスクトップ環境が、Windowsに置き換わったような使い勝手だと想像していただけば良いでしょう。
無償のエミュレータVMware Player
coLinuxのようにWindows上で別のOSを動かすソフトウェアとしては、VMware Playerもあります。VMwareは、WindowsやLinux、Solarisなどの上で仮想的にハードウェア環境を提供し、ほかのOSを動かすエミュレータです。もともと有償のソフトウェアでしたが、ライセンス体系が変更され、無償で利用できるようになりました。元が有償のソフトウェアということもあり、非常に安定しており、信頼のおけるエミュレータです。また、coLinuxと異なりLinux以外のさまざまなOSをサポートしていたり、OSのインストールが比較的簡単などのうれしいポイントもあります。
Mac OS XでUNIX環境を手に入れる
Windows+coLinuxのように「使い慣れたデスクトップアプリケーションを使いつつ、開発環境の下地はUNIXで……」という意味では、Mac OS Xを使うのが手っ取り早いという話もあります。
Mac OS Xは見た目こそ美しくグラフィカルなOSですが、そのベースはUNIXです。Windowsの上でcoLinuxを動作させているときのように、仮想的にUNIXが動いているわけではなく、Mac OS XそのものがUNIXです。従って、ローカルでUNIXのコマンドが使えますし、サーバでも何でもUNIX向けのソフトウェアはたいがいのものが使えます。Windows+coLinuxのように環境が2つに分かれていたりもしないので、デスクトップアプリケーションとUNIXプログラムとで非常にスムーズな連携が行えます。
わたしは1年以上前にWindowsからMac OS Xにスイッチしました*が、開発環境も特に問題なく移行できています。図2の画面はわたしのデスクトップのスクリーンショットです。Emacsでソースコードを書き、Mac OS X標準のターミナルでRubyを実行し、ブラウザでWebを閲覧しています。EmacsもRubyもローカルにインストールされていて、ローカルで動作するので、Webの閲覧以外は、ネットワークにつながっていなくても可能です。
図2.Mac OS X上で、Emacs/Rubyを実行し、Webブラウザで調べものをしているところ
Webアプリケーション開発三種の神器
Webアプリケーション開発には、プログラムを書くためのエディタはもちろんのこと、小さなコマンドラインツールからデバッガ、大きなテスト用ツールまでさまざまなものを利用します。それらすべてを紹介するのは難しいので、ここではわたしが個人的に「三種の神器」と思っている次の3つのソフトウェアを紹介します。
- GNU Emacs(テキストエディタ)
- GNU screen(端末マルチプレクサ)
- Zsh(シェル)
エディタはGNU Emacsで決まり
プログラムを書くに当たって最も利用頻度が高いものといえば、間違いなくエディタだと思います。わたしは以前からEmacsを愛用しています(図3)。
図3. Emacsの画面
Emacsの何が良いかは挙げればきりがないのですが、一言でいうと「プログラマーがプログラムを書くために作られたエディタ」であるところでしょう。
例えばプログラムを書く際には、カーソルをその行の先頭や行末に移動したり、1行をまとめて消すといった類の操作を頻繁に行います。そのためそれら操作はショートカットで簡単に行えるのが望ましく、さらに言うとキーボードのホームポジションに置いた手をあまり動かさずに押下できるキーバインドが理想的です。Emacsのキーバインドは、そういったかゆいところが非常に丁寧に設計されており、一度手になじむと、一般的なエディタでプログラムを記述する場合の数倍の効率で作業できるようになります(問題は頭の回転までは数倍にならないところですが)。
なお、一般的なシェルのカーソル移動キーバインドは、デフォルトでEmacsキーバインドと同一になっています(例えば「Ctrl+Aキーで行頭に戻る」など)。ですから、Emacsキーバインドを覚えると、シェル操作が非常に効率的に行えるという特典もあります :) 。
キーバインド1つとってもこんなあんばいですが、Emacsにはほかにもいろいろな利点があります。
- プログラミング言語に応じてソースコードが色付けされる
- ソースが自動でインデント(整形)される(自動整形なしではもうソースコードは書けません)
- 大量のファイルを編集する際も、ウインドウ1つで扱える。またショートカットキー1つでそれらを切り替えられる
- ファイラがエディタに統合されているので、必要なファイルを瞬時に探し出すことができる
- 任意の個所のマーキング、アンドゥや置換、コピーした内容をさかのぼって取り出せるなど、プログラミングに必要な機能はすべて持っている
- 一度入力した単語を動的に補完できる(動的略語展開と呼ばれます)。例えば「p」と打ってショートカット1つで「printf」と補完するなど
- Emacs上からCVSやSubversionなど、ソースコードのバージョン管理システムにアクセスする手段が提供されている
利点を挙げるとキリがないのでこのくらいにしておきます :) 。プログラマーでEmacsを利用したことがない方は、だまされたと思ってぜひ一度トライしてみてください。ただし、Emacsは高度な半面、非常にとっつきにくいエディタでもあります。一般的なエディタであれば、特にマニュアルなどに目を通さなくても問題なく扱得るところですが、Emacsの場合そうはいきません。「エディタの使い方を覚える」のではなく「プログラミングに必要な道具の使い方を覚える」つもりで、チュートリアルから始めることをオススメします。
なお、はてな社内のプログラマーは、大半がEmacs、残る数人がVimでコードを書いています。EmacsとVimは、どちらもとっつきにくいエディタですが、一度手になじめば手放せないツール、ということですね。
WindowsではMeadow、Mac OS XではCarbon Emacs
ところでEmacsは、各種プラットフォーム向けに移植されているという点も特徴的です。わたしがWindowsからMac OS Xにスムーズに移行できたのは、WindowsでもMac OS XでもEmacsが使えたからこそです。
WindowsではMeadow、Mac OS XではCarbon EmacsがEmacsの移植版*になります。インストールや操作方法については、それぞれ以下のサイトが参考になるでしょう。
Emacsの拡張
Emacsのもう1つ大きな特徴として拡張性の高さがあります。Emacsは標準の状態でもたくさんの機能を持っていますが、任意の拡張スクリプト(Emacs Lisp)を導入することで、さまざまな機能を追加できます。
わたしが利用している拡張の幾つかを表1、表2、表3に紹介します。これ以外にも、標準でC、C++、Java/Perlなどメジャーな言語用のモードがサポートされていますし、欲しいものはたいていWeb上で手に入ると思います。
表1. エディタの使い勝手を良くするEmacsスクリプト
表2 ネットワークサービスを利用するEmacsスクリプト
表3 各種プログラミング言語用のEmacsスクリプト
xkeymacsでWindowsもEmacsキーバインドに
Emacsに慣れ親しむと「何でもかんでもEmacsのキーバインドで操作したい!」という欲求にかられます。例えばWebブラウザのURL入力欄。Ctrl+Eキーでカーソルを行末に持っていき、Ctrl+Hキーで1文字削ったり。あるいはタブブラウザのタブを、まるでEmacsのバッファ切り替えのようなキーバインドで切り替えてみたり。
これを実現する、Emacs使いには夢のようなソフトウェアがあります。それがxkeymacsです。Windows向けのソフトウェアですが、これを導入すると、すべてのWindowsアプリケーションでEmacsキーバインドが利用できるようになります*。
- Webのフォームに何かを入力するとき
- Excelに文章を書き込むとき
- エクスプローラで画面をスクロールさせるとき
- ブラウザで1つ前の画面に戻るとき
などなど、そのすべてがEmacsキーバインドになります。Emacsキーバインドを適用させたくないアプリケーションはそのむね設定できたりと、かゆいところにも手が行き届いたツールです。Emacsユーザーの方はぜひ一度お試しください。
GNU Screenで、ターミナルだらけからおさらば
皆さんは、デスクトップ上に幾つぐらいウインドウを開いていますか? 特にターミナルエミュレータは、例えば「2つのコマンド出力を比較したい」、あるいは「何かコマンドを実行しつつ、待ち時間に別の作業をしたい」といったことから、むやみにウインドウの数が増える傾向にあります。すなわち、
|
原始的な方法:ターミナルを2つ起ち上げて、それぞれで同じホストにログイン、両者を使い分ける
|
|
という状況です。これでは作業が増えてくると、画面上がターミナルウインドウだらけになって使いづらいでしょう。そこで、
|
一歩進んだ方法:タブ型エミュレータのPoderosaなどを使って同じホストにログイン、両者を使い分ける
|
|
という方法があります。Poderosaは便利でオススメです。とは言っても、やはり単一のホストに何度もログインするのは面倒でしょう。もう一歩進めて、
|
別な方法:GNU screenを利用して1つのログインセッションに対して複数ウインドウを起ち上げる
|
|
というのはいかがでしょうか。GNU Screenは端末マルチプレクサに分類されるソフトウェアで、これを利用することで1つの端末で同時に複数の仮想端末を起ち上げ操作できます。つまり、1つのターミナルウインドウの中で必要に応じて画面を複数に切り替えられる、というわけです。
図4がScreenの使用例です。Screenには画面を2分割する機能もありますので、ここではそれを使ってみました。どちらもMac OS X上のローカルマシンでの出力です。上部はMySQLクライアントを操作しているところ、下部はシェルでコマンドを実行しているところになります。
図4. GNU Screenを使用しているところ
見づらいかとは思いますが、最下段には「0 mysql 1 ls 2 zsh」と出力されています。現在3つのウインドウを開いていて、それぞれで別の出力が吐き出されていることを示しています。各画面はキー操作で簡単に切り替えられます。
Screenには複数仮想端末の機能以外にも、
- リモートマシンにログインして何かジョブを実行中に回線を切っても後で復帰できる
- 画面出力をさかのぼってスクロールさせることができる
- 画面上の文字をコピーして、別の端末にコピーできる
などの機能があり、コマンドラインシェルをヘビーに利用するUNIXハッカーにとっては、間違いなく必須ツールといえるでしょう(といいつつ、わたしもScreenを本格的に使い始めたのはつい1年ほど前だったりしますが……)。
Screenの使い方は、
などが参考になるでしょう*。
次回は
さて、次回は三種の神器の締めくくりとなるZshを紹介します。Bashやtcshと比較して、機能的に大きく違うわけではありませんが、細かな使い勝手でほかのシェルにはない便利さが感じられると思います。
このページで出てきた専門用語
-
ノートPCの中に完結したUNIX環境が手に入る
- ちなみに一時期まではLenovoのThinkPad X40を使っていたが、その後MacにスイッチしてPowerBookを使っています。
-
WindowsからMac OS Xにスイッチしました
- 昨年、米国西海岸で開催されたETechというカンファレンスに出席しました。ETechは、技術系、特にWeb関連の技術に特化していますが、参加者の半数近くがMac(iBookやPowerBook)を使っていたのが非常に印象的でした。Mac OS Xが、Web開発者に支持されていることの表れとも言えそうです。
-
Emacsの移植版
- 正確には、Carbon EmacsはGNU EmacsをMac OS X GUIサポートでビルドしたものです。
- すべてのWindowsアプリケーションでEmacsキーバインドが利用できるようになります
- Mac OS Xは標準で各種アプリケーションがEmacsキーバインドに対応しています。とはいっても、Windowsでxkeymacsを使うときほど徹底されてはいません。Mac OS X環境でも使えるxkeymacsのようなソフトウェアがリリースされるのを待つばかりです。
- 参考になるでしょう
- また、筆者の主観によって、Screen関連の話題を、naoyaのはてなダイアリー-GNU screenいろいろまとめ。にまとめてあります。こちらもぜひ参考にしてください。
参考文献
著者について  | |  | 伊藤直也,ITmedia |
記事の評価
|