レベル: 初級 伊藤直也, ITmedia
2007年 5月 11日 はてなという企業でプログラマーとして働くあの人の開発環境には欠かすことのできない三種の神器が存在します。後編となる今回は、前回紹介できなかった神器を紹介するとともに、意外と知られていないWebプログラマーの生態についてもみてみましょう。
Zshを使おう!
前回紹介したWebアプリケーション開発における三種の神器。GNU Emacs、GNU screenと紹介してきましたが、締めくくりはZshです。ZshはBashやtcshなどと同じUNIXのシェルですが、プログラマー向けにさまざまな機能を搭載した高機能シェルといえます。Bashやtcshと比較して、機能的に大きく違うわけではありませんが、細かな使い勝手でほかのシェルにはない便利さが感じられると思います。
またわたしがほかのどのシェルよりもZshを推薦するのには理由があります。
Bashにしてもtcshにしても、シェル上で実行したコマンドをさかのぼる際にはCtrl+Rキーを押して、履歴のインクリメンタルサーチを行うのが便利です。例えばBashでは、
とプロンプトが表示されているときにCtrl+Rキーを押すと、
と履歴のインクリメンタルサーチモードに切り替わり、ここで「pe」と入力すると、
(reverse-i-search)`pe': perl script/server.pl
|
「pe」でコマンド履歴を検索した結果が得られます。このときCtrl+Rキーを再度押すと、
(reverse-i-search)`pe': sudo perl -MCPAN -e shell
|
「pe」での検索結果を1つずつさかのぼっていくことができます。この履歴の検索機能は非常に強力で、一度入力したものならどんな複雑なコマンドもすべて履歴を追うことですぐに実行できます。わたしの場合、UNIXのシェル上で何かコマンドを実行する場合は、よほど簡単なものでない限りは必ず履歴を検索して取り出し、必要に応じてそれを編集し実行するといった具合です。こうすることで、必要最低限のタイプ数でコマンドを実行でき快適です。
さて、前回GNU Screenを紹介しましたが、実はBashやtcshでは複数起ち上げたウインドウをまたいで履歴を共有できないのです。そのため、1番目のウインドウで実行したコマンドの履歴と、2番目のそれがまったく別に管理されてしまい、いざというときに履歴が追えなかったりと不都合が生じます。
Zshではウインドウをまたいだ履歴の共有機能が標準で搭載されているため、この問題が発生しません。わたしがZshをオススメする一番大きな理由がこれです。履歴の共有を有効にするには、~/.zshrcに、リスト1の設定を書いておけばOKです。
リスト1 Zshの履歴を共有する設定
HISTFILE=$HOME/.zsh-history # 履歴の保存先
HISTSIZE=100000 # メモリに展開する履歴の数
SAVEHIST=100000 # 保存する履歴の数
setopt share_history # 同一ホストで動いているZshで履歴を共有
|
なお、ここで紹介したTIPSをはじめ、履歴に関するノウハウは、高林哲氏による「横着プログラミング 第3回:履歴マニア」(『UNIX Magazine』2002年3月号)*に掲載されていますのでぜひご一読ください。
Zshには履歴を共有する以外にも、
- sshの引数のホスト名を補完するなど、実行コマンドに合わせて引数をインテリジェントに補完できる
- Bashやtcshなどのファイルの補完機能があるのはもちろん、補完候補をカーソルで選択できる
- 「./configure――charset=ujis……」など、複数にまたがる長いコマンドの履歴も、改行をくずさずさかのぼることができる
など、かゆいところに手が届く便利機能が満載です。ここで紹介したのはほんのわずかな一例ですので、ぜひ一度Zshもトライしてみてください。コマンドラインから、
とするだけでZshが使えます。
あるWeb開発者の1日
わたしが働くはてなは、ベンチャー企業です。そこでプログラマーとして働いているわけですが、ここではわたしが普段どういう流れで仕事をしているかを紹介してみたいと思います。1プログラマーの日常がリアルに感じられるかもしれません。
7:00 起床
出社は10時ですが、その前にやや早起き。朝は一番脳みそが回転するので、この時間にいろいろやってしまいます。
-
GMailでメールを読んで、返信
-
Plaggerでほかの技術者のブログやニュースサイトなどのRSSフィードを一気読みして技術情報収集
- 気になるサイトをタブブラウザでどんどん開いていって、最後にまとめて読みます
- 集めた情報のうち面白かったものをはてなブックマークに登録
- はてなブックマークやdel.icio.usで技術系情報を一覧してさらに情報収集
- 会社の人にも知ってもらった方がいいなということは、社内のグループウェア(はてなグループ)に書く
というのをだいたい9時くらいまでやります。早く終わったら読書したりゲームしたり。
10:00 出社
10:00~10:10 英会話
プログラマーは、英語ができるかできないかが能力に大きく影響します。そこで会社で毎朝社員と英会話。
10:10~10:30 立って会議
XP(eXtreme Programming)のプラクティスには、「会議が長引かないように立って会議しろ」とありますが、それを実践しています。効果てきめん。
10:30~13:00 コーディング!
午前中は一番仕事がはかどるので、ここでいきなりコーディングです。Mac OS Xにデュアルディスプレイをつないで、Emacsでごりごり開発。使用言語はPerlです。また、仕事がはかどるので、細かいバグフィックスなど、数が多めで一気にやっつけるべきものを優先的にこなしていきます。
13:00 昼ごはん
お昼に頭を休める目的で、外食したり弁当を買いに行ったり。
14:00~15:00 情報収集
またまた情報収集。ご飯直後は頭が回転しません。そこで情報収集。またもやPlagger/はてなブックマークという朝と一緒のサイクルです。
15:00~19:00 コーディング
ひたすらプログラムを書く。疲れたら息抜きをしつつ情報収集。夕方にもなると、午前中のような回転率は出せなくなってくるので、じっくり腰をすえてコードを書きます。例えばフレームワークの改造ですとか。
20:00くらい
帰宅。技術の本を読んだり、ゲームをしたり、あるいは原稿を書いたり。
基本的には日々この繰り返しです。情報のインプットをRSSリーダーやソーシャルブックマークを使って効率的に行い、インプットしたものはプログラムを書いたり、blogに書くなりしてアウトプットしています。
Webアプリケーション開発の世界は、新しいフレームワークが続々と出てきたり、面白いサービスが出てきたりと、進化のスピードがとても速い。ですから、情報収集をいかに効率的に行うか、というのがプログラマーのスキルに大きく影響します。とはいっても、インプットしただけでは何の役にも立ちません。覚えたことをいかに多くアウトプットするかがカギですね。
ちなみにこんな具合で毎日やってると相当疲れるので(笑)、ときには早く仕事を終えて飲みにいったり、週末の半分は遊びにいったり、というふうにしてストレスを発散しています。プログラマーは体が命 !
コラム:Windows、Mac OS X、UNIXの併用
本編にもあるとおり、わたしはWindows、Mac OS X、UNIXを併用しています。もちろんUNIXだけに絞るのもアリなのですが、そうはしていません。これには幾つかの理由があります。
さまざまな環境を利用できるようにしておく
Webアプリケーションのデバッグにはさまざまな環境が必要になります。その理由として、1つはどんなOSとブラウザでも動くように考慮するため、もう1つはデバッグ用のツールのためです。
昨今では、ブラウザの仕様差もだいぶ縮まってきているものの、やはりそれぞれのOSやブラウザで多少の癖があったりします。それらをいつでも試せる環境を用意しておくと、検証やデバッグが迅速に行えるため、結果としてアプリケーションのバグフィックスや機能追加を素早く行うことができます。
また、ApacheやMySQLなどオープンソースのソフトウェア周りには、それらツールを管理するための便利なソフトウェアがたくさんあります。その中にはWindowsやMac OS Xでしか使えないもの、あるいはUNIXでしか使えないものもあります。それらを使える機会を逃さないためにも、複数のプラットフォーム(OS)を扱えるようにしておくのは良い選択だと思っています。
プレゼンテーション用にはやはりWindowsやMac OS X
わたしは仕事の都合上、カンファレンスなどでプレゼンする機会が多くあります。すると、ノートPCが必要になります。いまどきのカンファレンスは、「ノートPCを持ち込んで自分のPCでプレゼンする」というのが普通です。そしてプレゼンテーションに使うツールは、僕の場合PowerPointかKeynoteなので、どうしても「WindowsかMac OS Xが欲しい」ということになります。なおかつ、「そのPCで開発もしたい」となると、UNIXが必要になって併用することになります。
プレゼンテーション用ツールはUNIXにも優れたものがありますし、最近ではブラウザでプレゼンテーションをする人も増えてきました。先日訪れたカンファレンスでは、JavaScriptでプレゼンツールを自作している人も結構いました。が、わたしにはプレゼンツールをHackするモチベーションはほとんどないので(笑)、PowerPointやKeynoteに頼りきりです。
GUIとCUIの良いとこ取り
開発以外の作業でも、いざというときにUNIXのCUIが使えると便利な場面というのは多々あります。例えば、ブラウザで閲覧しているサイトにリンクの一覧があるとします。「この一覧、何行あるのかな」なんて数えたいとき(例えば何かの名簿ですとか)。こういうときにUNIXのコマンドラインツールがすぐ使える環境があると、
としてからこの端末にリンクの一覧をコピー&ペーストしてCtrl+Dキーを押せば、
と即座に結果を返してくれます。ほかにも、簡単な足し算や引き算を行うときに、perlshという対話型のperlシェルを使うと、
$ perlsh
main[25]$ 1 + 1
2
main[26]$ log 10
2.30258509299405
main[27]$
|
という感じで、普段使い慣れたPerlの構文で計算できます。OSに標準搭載の計算機よりも手早く済むし高機能、便利。こんな具合に、日ごろのちょっとした作業をこなすときに、UNIXの基本的なコマンドラインツールが役に立ちます。テキストの置換しかり、検索しかり、計算しかり。
一方で、例えばWebブラウジングを快適にするツールですとか、表計算ソフトやプレゼンテーションといったGUI周りの環境に関して言うと、近ごろのLinuxディストリビューションなどではデスクトップ環境が充実してきているとはいえ、やはり細かい使い勝手、ルック&フィール、サードパーティー製ソフトの充実面から言ってもWindowsやMac OSX に軍配が上がるでしょう。
そこで、「GUIと、CUIの良いとこ取りをするために複数の環境を併用する」というのがわたしなりの解決策でした。
まとめ
駆け足でしたが、2回にわたってわたしの開発環境の一端を紹介してきました。
今回紹介した幾つかのソフトウェアのうち、もう何年もそれを使っている……というのは実はEmacsだけだったりします。さまざまなソフトウェアを試して、ようやく手になじんできたかな……と思っていても、探せばより良い方法が見つかります。Webで先人のノウハウを幾らでも知ることができるこのご時世、ツールの探求に終わりはないのかもしれませんね。
しかし、終わりのない探求ばかりを続けていては、本業であるところの創造の作業がおろそかになってしまいます。先達たちの良いノウハウをどんどん盗んで、効率良く自分のものにしたいですね。本稿が皆さんにとって、何かの助けになればうれしく思います。
このページで出てきた専門用語
-
高林哲氏による「横着プログラミング 第3回:履歴マニア」(『UNIX Magazine』2002年3月号)
-
http://0xcc.net/unimag/3/でも読むことが可能です。
参考文献
著者について  | |  | 伊藤直也,ITmedia |
記事の評価
|