開発環境としてのMac OS Xカスタマイズ
Mac OS Xを使っていないプログラマは、時間の80%を無駄にしている、かどうかは知りませんが、堅いGUIとUNIX系のコマンドラインツールを使えるMac OS Xは、開発環境として使いやすいことは確か。
が、デフォルトのままでは、Terminal.appで日本語が表示できないとか、lsやfindがGNU系じゃなくてBSD系だとか、要するにOSだってカスタマイズしてなんぼというわけであります。
というわけで、私のMac OS Xのカスタマイズをこのあたりに書いておきます。
※2008/2/3追記: Leopard版書きました > 開発環境としてのMac OS X Leopard
Terminal.app
Mac OS Xにはデフォルトで「ターミナル」(/Applications/Utilities/Terminal.app)が付いてきますが、これがデフォルトではまったくイケてない。主要な問題は以下の3点。
- 日本語を表示できない
- DeleteやHomeキーが使えない
- 色が見にくい
まず日本語が表示できない問題は、Terminal.appの設定と、readlineの設定の2点に起因しているようです。
- Terminal.appの「ウィンドウ設定」をいじる(後述)
- ~/.inputrcを修正
で解決します。~/.inputrcは確かデフォルトでは存在しないので、vimやemacsなどなどお好みのエディタで作成して、以下を記述。
set meta-flag on set convert-meta off set input-meta on set output-meta on
続いてDeleteやHomeキーが使えないのは、これまたTerminal.appの設定と、readlineの設定。というわけで、
- Terminal.appの「ウィンドウ設定」(後述)
- ~/.inputrcの修正
で解決します。Terminal.appのウィンドウ設定は後述として、とりあえず~/.inputrcに以下を追記。
"\033[3~": delete-char
vimな方は~/.vimrcに↓これも書いておくと良いです。
map <C-[>[H <Home> map! <C-[>[H <Home> map <C-[>[F <End> map! <C-[>[F <End>
色が見にくいのは、黒背景にすると青が見にくいし、白背景にすると黄色が見にくいし…。~/.dir_colorsや~/.vimrcで見にくい色を使わないようにするのも手ですが、TerminalColorsを使うのが最適です。これを入れると、Terminal.appでもANSIカラーを変更できるようになります。
さて、Terminal.appの設定ですが、お手軽な方法は↓このファイルを~/Library/Preferences/com.apple.Terminal.plistに上書きすればOKです。(元のファイルはバックアップをとっておいてください)
com.apple.Terminal.plist
手で設定する場合は、Terminal.appの「ウィンドウ設定」で↓を設定すればたぶんOK。
- 「エミュレーション」で、「非ASCII文字をエスケープする」のチェックを外す
- 「ディスプレイ」で、「日本語や中国語などにワイドグリフを使用する」にチェックを入れる
- 「ディスプレイ」で、「ワイドグリフは2桁とカウントする」にチェックを入れる
- 「カラー」と「ANSI Colors」で色をお好みに設定
- 「キーボード」で、↓を追加
キー | 修飾 | 操作 | 操作の内容 |
del(deleteを送出) | なし | 文字列をシェルへ送信する | \033[3~ |
home | なし | 文字列をシェルへ送信する | \033[H |
end | なし | 文字列をシェルへ送信する | \033[F |
page up | なし | 文字列をシェルへ送信する | \033[5~ |
page down | なし | 文字列をシェルへ送信する | \033[6~ |
iTerm.app
iTermは、タブ機能つきのMac OS X用ターミナルエミュレータです。ANSIカラーも変更可能で、デフォルトで日本語も使用可(違ったかも?)
Terminal.appは止めてiTermを使えばいいのでは?とも思うわけですが、残念ながらiTermにも「ターミナル速度が遅い」という問題があります。
画面全体にiTermに表示して、vimでウィンドウを縦に分割して、なんてやっていると、スクロールが遅くて泣きそうになります。
というわけで、Terminal.appとiTermは場面に応じて使い分けるといい感じです。
MacPortsをホームディレクトリにインストール
最近やっとMacPortsを入れました。これはステキです。
ただ、dmgに入っているインストーラでインストールすると、/opt/local以下にインストールされるのが気に入らない。ホームディレクトリに入れて欲しい。というわけでMacPortsをソースからコンパイルして、$HOME/portsにインストールしてみました。以下その手順を。
まずreadlineの最新版を入れておきます。readlineを新しくしないとコンパイル時にエラーが出ます(でももしかしたらウチのMacだけかも?)。GPLがアレな場合はlibeditでも良いかも。
wget http://ftp.gnu.org/pub/gnu/readline/readline-5.2.tar.gz wget http://ftp.gnu.org/pub/gnu/readline/readline-5.2-patches/readline52-00{1,2,3,4,5,6,7} tar zxvf readline-5.2.tar.gz cd readline-5.2 for p in ../readline52-*; do patch -p2 < $p; done ./configure --enable-multibyte --prefix=$HOME/ports make -j3 make install 2>&1 | tee make-install-readline.log
続いてMacPortsをインストール。./configureの引数が長い。
wget http://svn.macports.org/repository/macports/downloads/MacPorts-1.5.0/MacPorts-1.5.0.tar.bz2 tar jxvf MacPorts-1.5.0.tar.bz2 cd MacPorts-1.5.0 LDFLAGS="-L$HOME/ports/lib" CFLAGS="-L$HOME/ports/lib" ./configure --prefix=$HOME/ports --with-included-sqlite3 --with-install-group=`id -g` --with-install-user=`id -u` --with-tclpackage=$HOME/ports/tcl make -j3 make install 2>&1 | tee make-install-macports.log
環境変数で$TCLLIBPATHと$PATHを~/.bashrc(とか~/.zshrcとか~/.cshrc)で設定しておきます。
export TCLLIBPATH="$HOME/ports/tcl" export PATH="$HOME/ports/bin:$PATH"
あとはport selfupdateしてお好みのパッケージをインストールパーティすればOKです。ユーザー権限でインストールできます。sudo要りません。
port selfupdate port install coreutils +with_default_names port install findutils port install wget port install ruby
QuickSilverがたまに暴走する
Mac OS Xの3大アプリと言えば、QuickSilverとKeynoteとiTermなんじゃないかと勝手に思ってます。Ensemble2とCotEditorも入れたい…それからAdiumとCyberduckとSSHKeychainと日めくりと…キリが無いですが、なにはともあれQuickSilver無いことには始まらないわけです。ランチャーなので。
QuickSilverは「マニュアルを読むたびに新機能が見つかる」タイプで、vimやscreenと似たものを感じます。各種機能はプラグインになっていて、かなりの数があります。
このQuickSilverですが、ATOKと干渉するのか、ATOKと共にCPU使用率をごっそり持って行って応答しなくなってしまうことがありました。検索しても全然出てこないので、ウチのMacだけかもしれないのですが…
QuickSilverのPreferencesで、Appearanceの中にある「Superflous visual effects」のチェックを外すと発症しなくなりました。QuickSilverを呼び出したときのエフェクトがなくなってちょっと寂しいのですが、エフェクトが無い分速くなるし、それもいいかなーなんて思ってます。
SSHKeychainをホームディレクトリに入れる
今まで.app単体で配布されていたSSHKeychainですが、最近インストーラ形式になってしまい、ホームディレクトリ以下にインストールできなくなりました。しょうがないので、インストーラをバラして.appを取り出します。(ソースからコンパイルするのもアリです)
まずはSSHKeychian.dmgをダウンロードしてきて、ディスクイメージをマウントします。
そうすると、↓こんな感じになってます。
$ find /Volumes/SSHKeychian /Volumes/SSHKeychain /Volumes/SSHKeychain/.DS_Store /Volumes/SSHKeychain/SSHKeychain.pkg /Volumes/SSHKeychain/SSHKeychain.pkg/Contents /Volumes/SSHKeychain/SSHKeychain.pkg/Contents/Archive.bom /Volumes/SSHKeychain/SSHKeychain.pkg/Contents/Archive.pax.gz /Volumes/SSHKeychain/SSHKeychain.pkg/Contents/Info.plist /Volumes/SSHKeychain/SSHKeychain.pkg/Contents/PkgInfo /Volumes/SSHKeychain/SSHKeychain.pkg/Contents/Resources /Volumes/SSHKeychain/SSHKeychain.pkg/Contents/Resources/.DS_Store /Volumes/SSHKeychain/SSHKeychain.pkg/Contents/Resources/BundleVersions.plist /Volumes/SSHKeychain/SSHKeychain.pkg/Contents/Resources/English.lproj /Volumes/SSHKeychain/SSHKeychain.pkg/Contents/Resources/English.lproj/background.gif /Volumes/SSHKeychain/SSHKeychain.pkg/Contents/Resources/English.lproj/Description.plist /Volumes/SSHKeychain/SSHKeychain.pkg/Contents/Resources/English.lproj/License.txt /Volumes/SSHKeychain/SSHKeychain.pkg/Contents/Resources/English.lproj/ReadMe.txt /Volumes/SSHKeychain/SSHKeychain.pkg/Contents/Resources/English.lproj/SSHKeychain.info /Volumes/SSHKeychain/SSHKeychain.pkg/Contents/Resources/package_version /Volumes/SSHKeychain/SSHKeychain.pkg/Contents/Resources/postinstall /Volumes/SSHKeychain/SSHKeychain.pkg/Contents/Resources/postupgrade /Volumes/SSHKeychain/SSHKeychain.pkg/Contents/Resources/SSHKeychain.bom /Volumes/SSHKeychain/SSHKeychain.pkg/Contents/Resources/SSHKeychain.pax.gz /Volumes/SSHKeychain/SSHKeychain.pkg/Contents/Resources/SSHKeychain.sizes
いわゆるMac OS Xのインストーラの実体は、拡張子がpkgのディレクトリ(いわゆるバンドル)のようです。
怪しいのは拡張子が.gzのSSHKeychain.pax.gz。こやつをfileコマンドで調べてみると、↓こうなります。
$ cd /Volumes/SSHKeychain/SSHKeychain.pkg/Contents $ file Resources/SSHKeychain.pax.gz Resources/SSHKeychain.pax.gz: symbolic link to `../Archive.pax.gz' $ file Archive.pax.gz Archive.pax.gz: gzip compressed data, from Unix
SSHKeychain.pax.gzは../Archive.pax.gzへのシンボリックリンクで、Archive.pax.gzは見たままgzipで圧縮されたデータのようです。というわけでArchive.pax.gzを展開します。
$ cp Archive.pax.gz ~/tmp $ cd ~/tmp $ gunzip Archive.pax.gz $ file Archive.pax Archive.pax: ASCII cpio archive (pre-SVR4 or odc)
Archive.paxはいわゆるold ASCIIタイプのcpioアーカイブのようなので、これをバラします。
$ cpio -ivd < Archive.pax . ./.gdb_history./SSHKeychain.app ./SSHKeychain.app/Contents …以下略…
めでたくSSHKeychain.appが出てきました。あとはこれを~/Applications/にでもコピーしておけばOK。