Webプログラマーの三種の神器の続き
自分がプログラムを書き始めた頃、どんな環境で他のプログラマーが仕事をしているのか分からなかったのですが、昼休みのWebサーフィン中に以下の記事を見つけました。
新入学生/新社会人応援企画: 第3回 あるWebプログラマーの作業環境――豪傑の三種の神器
はてなの伊藤直也さんが新人プログラマー向けに自身の環境を紹介している内容ですごく参考になりました。 そこで紹介しているソフトウェアは次の三つでした。
- Emacs
- Zsh
- Screen
それぞれ使いこなすようになるには大変でしたが、馴れてからはこれらのソフトウェアにものすごく助けられています(まだ使いこなせていない機能も沢山あります)。 この記事は2007年に書かれていて今はインストール方法やパッケージ管理など少し状況が変わっているので、そのあたりをここで書いていこうかと思います(インストール方法はMac環境のみ書いています、事前にHomebrewをインストールしておいてください)。
Emacs
プログラムを書くのに必ず必要なエディターのうちの一つです。 使いこなすのに時間がかかりますが、強力なバッファ管理や打ちやすいキーバインドが指に馴染み生産性をものすごく向上させます。 伊藤直也さんは次のような心構えで覚えるとよいと書いていていたことが、強く印象に残りました。
「エディタの使い方を覚える」のではなく「プログラミングに必要な道具の使い方を覚える」つもりで、...
道具の使い方を覚える、もしくは新しいプログラミング言語を覚えるつもりで取り組めば辛く感じること無くマスターできる...はずです。
インストールは以下のコマンドでできます。
brew install --cocoa emacs
インストール後はユーザのホームディレクトリにある.emacs.dの下のinit.elを編集して必要な設定をしていきます。 とりあえずAlt(Option)キーを多用するのでMacユーザは
- ターミナルの環境設定から「メタキーとしてOptionキーを使用」にチェック
- init.elでスペース左のCmdキーとoptionキーを入れ替えるように設定する
と良いです。 init.elに以下のように設定します
(setq ns-command-modifier (quote meta)) (setq ns-alternate-modifier (quote super))
拡張スクリプトの管理
Emacsは拡張スクリプトを入れることで簡単に必要な機能を追加することができます。タブ機能を実現する「ElScreen」や複数の機能を一つのウィンドウで管理する「Anything」はEmacsユーザには必須だと思います。 拡張スクリプトの紹介はここではせずにこれらの拡張ファイルの管理方法を紹介します。 インターネットからこれらのファイルをダウンロードして自分でファイルを移動するのは大変です。できれば設定ファイルにインストールする拡張ファイル名を書いて、コマンド一発でインストールしたいものです。再インストールも簡単になります。 ここで紹介する「Cask」はそれを実現するものです。
インストールは以下のコマンドでできます。
brew install cask
インストール後、.emacs.d/init.elに以下の設定をします。
(require'cask "/usr/local/Cellar/cask/0.7.2/cask.el") ;; バージョンは各自インストールされたものを指定してください (cask-initialize)
そして.emacs.dディレクトリに「Cask」ファイルを作成し必要なパッケージ名を記述します(最初の3行がインストールするサイトの指定、その下がインストールするスクリプトを指定するサンプルです)
(source gnu) (source melpa) (source marmalade) (depends-on "point-undo") (depends-on "elscreen" :git "https://github.com/knu/elscreen.git") (depends-on "auto-complete") (depends-on "gtags") (depends-on "ctags")
ファイルを作成したら以下コマンドを打つだけで必要なファイルをインストールできます。
cask
これで簡単に拡張スクリプトの管理ができます!!
Zsh
Zshは補完やaliasの細かな設定ができるのでものすごく便利です。インストールは以下のコマンドで出来ます。
brew install zsh
設定は大変なので、「oh-my-zsh」をインストールするとある程度いい感じにしてくれます。
curl -L https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh | sh
設定
インストール後ユーザホームディレクトリの.zshrcファイルに設定を書きます。
export ZSH=$HOME/.oh-my-zsh ZSH_THEME="robbyrussell"
2行目のテーマの指定は以下のサイトから好きなものを選んでください。 https://github.com/robbyrussell/oh-my-zsh/wiki/Themes
~/.oh-my-zsh/pluginsディレクトリにいろいろなプラグインが入っているので~/.zshrcに好きなプラグインを指定します。 私はこんな感じです。
plugins=(git ruby osx brew rails emoji-clock)
ターミナルを再起動するとテーマが変わって表示されます(gitのブランチ名も表示されています)。
補完
Zshは補完が強いのがウリです。試しに「cd Tab」(cdコマンドの後にスペース+Tabキーを押す)と以下のように直下のディレクトリの候補が表示されます。そのままTabでディレクトリを選択してEnterでディレクトリ移動ができます。
ちなみにディレクトリ移動も「cd + ディレクトリ名」だけでなく、「ディレクトリ名」だけの指定で移動できます。
alias
Zshのaliasは コマンドラインの先頭以外の単語も置き換えできます。
こう設定すると
alias -g L='| less' alias -g G='| grep' alias -g H='| head' alias -g M='| more' alias -g T='| tail'
こんな感じで入力できます(ls -lR | moreと同じ)。
ls -lR M
まだまだZshには便利な拡張が沢山あるのですが、キリがないので初期設定の紹介のみにします(興味がある人はpecoをインストールしてみてください、感動します)。
tmux(Screenの代わり)
当時紹介されていたのはGNU Screenですが今はtmuxの方がよく使われています。どちらも仮装端末管理ソフトです。 簡単に説明すると
- 一つの画面で複数の環境を開ける
- 端末(ターミナル)を閉じてもまた再度tmuxを開くと閉じた状態に復元できる
です。あとはペインの分割も便利です(左にemacs、右の上下にシェルを実行しています)。
複数ウィンドウを開くには、現在の状態でPrefix+cキーを押下で新しいウィンドウ(別画面)が開きます。 ウィンドウの一覧を出すにはtmux list-windowsで表示、ウィンドウはPrefix+n or pキーで行き来できます。
インストールは今までと同じく
brew install tmux
で出来ます。 設定はホームディレクトリにある.tmux.confファイルに書いていきます。私はPrefixをC-bからC-tに変更しています。 (その他設定は直前のペインへの移動をPrefix+t、ペインの削除をPrefix+kに変更)
# bind-key C-t send-prefix unbind C-b set -g prefix ^t # last-pane C-t o -> C-t C-t unbind ^A bind ^t last-pane # kill pane bind ^k kill-pane
実はtmuxもTmux Plugin Manager(TPM)というプラグイン管理ソフトがあります。豊富なプラグインが用意されているので、 自分で複雑な設定をするよりもTPMのプラグインをインストールするほうがメンテナンスしやすいです。 興味がある方はインストールしてみてください。 tmux-plugins
ツールを揃える、学習することについて
かの有名な書籍「達人プログラマー」ではプログラマーがツールを揃え、使いこなすことの重要性について次のように書かれています。
職人が巧みの技を追求する際、質の良い道具を揃えるところから始めます。...こういった道具は愛情を込めて選び抜かれ、使い込まれていき、それぞれ固有の役割をこなしながら職人の腕の熟達とともに手に馴染んでいくのです。
また、こんなことも書かれています。
道具を手にいれたあとは、その学習と適合段階が始まります。...それぞれの道具を独自の方法で研ぎ上げ、維持していく必要があるのです。
道具はあなたの力を増幅します。...職人のように、常に道具を増やすことを心がけてください。何をするにも常により良い方法を探すようにするわけです。
プログラマー、エンジニアは自分達の仕事をより良くするために、プログラミング、理論の学習以外に自分達が使う道具についても学んでいく必要があるわけですね。私はまだまだ知らないことだらけで大変ですが、楽しみながら追求していければと思います。