Mac でハック
(その1: 基礎環境編—2014Q1)
2014-03-07 改訂
目次
1. はじめに
1.0 改訂版について
1.1 世に裏切り者の種は尽きまじ
1.2 右往左往の成果?
2. 環境整備
2.1 こけつまろびつ (Mountain) Lion
2.2 MacPorts と基本コマンドのインストール
3. Application の設定
3.1 Terminal.app と Zsh
3.2 Emacs
3.3 Python
1. はじめに
1.0 改訂版について
この「Mac でハック(基礎環境編)」を書いて、はや一年あまりになる。 すぐに「応用編」が続くはずだったのだが、 なかなか手が付けられず、伸び伸びになっていた(実は、Mail 環境がなかなか収束しなかった。)そうこうしているうちに、 「基礎環境編」が一部古くなってしまって……。 以下では、改訂した部分(書換えであれ、追加であれ)を maroon で示す。1.1 世に裏切り者の種は尽きまじ
ちょっとしたでき心で(実は自分のチョンボのせいで) 「Mac でオタク」を始めて、もうかれこれ 7 年くらいにもなる。 「とりあえず Linux Machine の frontend になれば良いや」 というくらいの気持で始めたが、使ってみると、オタクにも MacOSX はなかなか快適。 どれくらい快適かというと、「(Server 用途はともかく) Desktop 機や Lap Top 機ではもう Linux に帰る気は失せてしまう」くらい……
実は、MacOS へ出戻ってから暫くは、少々疚しいような気もしていたのだが、 今となっては、何の負い目もない。(いや、本当は "Live Free, or Die" なんて標語を見ると、どこかがチクリとするんですけどね。) なにせ世の中はどうやら「Mac でオタク」どころか「Mac でハック」まであたり前の事になったようなのである。 それを裏付ける事例には事欠かない
- もう Linux Desktop は死んだ、という事になってるらしい。しかも、MacOS X に殺されたんだとか……
- Emacs for Mac の完成度は Carbon 版あたりで Unix/Linux 版を追い越していた。(← 個人の印象です。)Cocoa になってから少し遅れを取った事も有ったようだが、 また追い付いている。むしろ今や、Native Aqua 版(というか Emacs 界で言うところの GNUstep 版)の方が、X11 版より進んでいる(ような気がする。)
- Python でも MacOSX のサポートは手厚くなってきているようで、 バイナリパッケージがソースのリリースと略同時に出る。 何より感心するのは、Python-3.x では、Mac 独特のモジュールが無くなっている事 (モジュールのリストには、 後に "(Mac)" とつくモジュールは無い。) これはつまり、MacOSX で動くように作っておけば、Unix でも Windows でも問題なく動作する、という事だろう。 加えて、β版や RC (Release Candidate) 版が、MacOSX のために dmg ファイルでも提供されるようになった。
- GnuCash とか Gimp というような Free Software の大物が Aqua で動くようになっている。 (以前のように port された古いバージョンが、細々とメンテナンスされているのではなく、 最新版が、開発チームによって MacOSX バイナリになっている、という事のようだ。) 加えて、LTspice IV も MacOSX Native になった。
- Software Design 誌の 8 月号で、「今あらためてお勧めする OS はこれだ」という特集の中で、全部で五人の著者のうち二人までが front end に MacOSX (の載った MacBook Air)を使っているんだとか。(隠れユーザがまだ他にもゐるに違ひない。)
1.2 右往左往の成果?
七年もの間つきあってきたのだから、 それなりの進歩というか変化は有ってしかるべきである。 が、目指す目標は「Mac でオタク」に書いたのそれと然程変わらない。 しかし、その実現方法は右往左往の末の淘汰・洗練 (?) を経てより単純・明快になっている。
- 何よりまずサーバ機能は、ThinkPad の myhome (Linux) server に任せる。Web ページのステージング用の httpd だけは MacOSX でも動かす事にした。
- Terminal Emulator ⇒ Terminal.app (MLterm, xterm 等の事はもう忘れた)
- Shell ⇒ zsh (Z-shell) (これは変わりなし)
- かな漢字変換:
- ⇒ DDSKK (Emacs),
- ⇒ AquaSKK (Emacs 以外)
- Python ⇒ Python-3.3 from MacPorts (git-core や一部の CGI 以外では Pythyon-2.7 は不要となった)
- Editor ⇒ (GNU) Emacs-24.2
EmacsMac.app
from
MacPort (XEmacs, Aquamacs, Carbon
Emacs などへの遍歴のあげく、結局 GNU Emacs に戻った。
さらに遍歴して、今は EmacsMac.app (emacs-mac-app)
に落ち着いている)
- Email reader (IMAP Client) ⇒ Wanderlust (前には Mew, Gnus 等も試してみたが、結局これに落ち着いた)
- かな漢字変換 ⇒ DDSKK
- 言語サポート ⇒ python-mode.el (一度は python.el に浮気した事もあったが …… その後も python.el との間を行ったりきたりしたが、packages で、python-mode.el を導入する事にしてから、python-mode.el で安定している。)
- 辞書検索 ⇒ eblook + lookup on Emacs (Mac には Dictionary というアプリケーションが付いてくるが、 もはや殆んど使う事がない。)
この基本環境をできるだけ簡単に作り上げる、つまり「オタクを卒業する」 というのも長らくの(しかもちっとも解決に近付かない)課題であった。 これまたこの何年かの右往左往の結果、
- 追加コマンド・アプリケーションは MacPort からインストール
- 文字コードは、全て UTF-8 に(メールを除く)
- 自作のコマンドと Emacs の el ファイルは、Git でバージョン管理
- Python での開発環境は、IDLE その他より、Emacs 上の Python-mode で
2. 環境整備
2.1 こけつまろびつ (Mountain) Lion
先のこけつまろびつ MacOSX Tiger では、「なんでこんな風に変えるかねぇ」と結構泣きが入ったが、 さすがにもう慣れてきた……。一部重複もあるが、再度まとめてみた。
- ディレクトリ構成:
- home directory (以下 '~'):
/Users/user_name/
(root のための home は無い) - CUI commands:
/usr/bin/, /bin/
等。 (MacPorts は/opt/local/bin/
へ) - GUI Applications:
/Applications/, /Applications/Utilities/
等。 (MacPorts は/Applications/MacPorts/
へ) - 特殊なディレクトリ: ディフォルトで作られるもののうち、
オタクに特に意味があるのは、
~/Downloads/
(Firefox 他でファイルをダウンロードすると、ディフォルトでここに入る)、~/Library/
(個人用環境設定パラメータが入る)等
- home directory (以下 '~'):
- 環境変数の設定:
- shell から起動される場合: Linux 等と同様(
~/.bashrc, ~/.zshrc
などで定義) - double click で起動される場合:
~/.MacOSX/environment.plist
(ML では、ディフォルトでは作られない)(サンプル) これらは、再ログインしないと有効にならない事に注意。
- shell から起動される場合: Linux 等と同様(
- アプリケーションの設定ファイル:
~/Library
もしくは~/Library/Application Support
以下に置かれる。 - daemon の起動: これはあまり変ってないようなので、「こけまろ Tiger」を参照。
2.2 MacPorts と基本コマンドのインストール
何とか、「プチオタク」を卒業しよう、つまり、 環境構築・維持に手間暇を掛けないようにしたい、と色々右往左往してきたが、 得られた結論は「できる限り MacPort に頼る」につきる。 何故 MacPort か?
- パッケージングのバグが減り、 またバイナリで供給されるパッケージが増えてきた事もあり、 インストール・メンテナンスが楽(ML では、まだ数が少ないようだが。) (今や MacOSX のバージョンへの依存より、サーバの混み具合の影響の方が大きい。 サーバの空いている時間・時期を選ぶと、 大抵の場合バイナリがインストールされる——とても迅速。)
- かつては Emacs, Wine 等はソースが出てから MacPort になるまで、かなり時間がかかっていたものだが、 最近は迅速に提供されるようになった。 極め付けは、gnuradio だろうか。(長らく、MacPort には -2.x.x 版しか無かったが、最近いきなり最新版の -3.6.2 になった。)
- Python, Emacs 等かつては個別にインストールしていたものも、 MacPorts に統一する。
- なるべく xorg, gnome 等への依存は避ける
- コンパイラはなるべく標準のを用いる
ただ、Apple さん、どうやら「どうしてもユーザからオタク環境を取り上げたい」 と思っているらしく、MacPorts のインストールがちょっとづつ面倒になっていくような気がする。
- (もしまだなら)App Center から最新の Xcode をダウンロードしてインストール
- Apple Developer Site から、Command Line Tools をダウンロードしてインストール。 (Xcode が最新だと、Lion でもこれが必要)
- macports.org
から、MacOSX に応じた Package Installer をダウンロードして、インストール。
port
コマンドは、/opt/local/bin/
にインストールされる。 - Launchpad から、Utilities の箱の中にある、Terminal をクリックして起動。(ML では、Utilities が Others に変わっている。)(この後、ずっと使うので、Dock のアイコンを右クリックして、Options ⇒ "Keep in Dock" としておいた方が良い。)
- とりあえず、Menu bar ⇒ Preferences... ⇒ Settings ⇒ Text で font size を 14 もしくは 18 pt くらいに設定し、 Encodings で、UTF-8 を選んでおく。(Font は Menlo のままでも可) 以降はもっぱらこの上で作業する。
-
/opt/local/etc/macports/variants.conf
を編集して# Example: -x11 +no_x11 +quartz -x11 +no_x11 +quartz # +gcc48 # +universal
とする。(上の「X11 や xorg_gnome を避ける」を徹底するため。) - 基本コマンドをインストール。
% /opt/local/bin/port install xxxx
で、xxxx に次のようなパッケージ名を入れる (複数並べても OK):aspell aspell-dict-en binutils coreutils eb eblook gnupg git-core lv readline rsync w3m wget python27 py27-numpy py27-readline sqlite3emacs-app mercurial zsh-devel apache2 emacs-mac-app gawk gnutils gnuplot python33 py33-setuptools py33-pip python-select zsh
(git-core を入れると python27 は強制的にインストールされる) - System に密着しているコマンド類は、(たとえ MacPort に有っても)MacOSX 附属のものを使い続けた方が吉。 例えば、ifconfig, locate, sudo 等。
3. アプリケーション・コマンドの設定
3.1 Terminal.app と Zsh
何はともあれ CUI がなくては始まらないのだが、 今のところこの組合せがベストと思われる。ただ、まだ完璧とは行かない……
- Terminal.app は、文字幅の扱い方がおかしいという問題がある。 ML についてくる Terminal-2.3 では、Terminal on Menubar => Preferences => Advanced で、"Unicode East Asian Ambiguous Charasters are wide" にチェックを入れれば改善されるが、まだ完全ではない。 (ML の Terminal-2.3 ではほぼ問題無いレベルまで改善されたが、Lion の Terminal-2.2 はこの件に関して放置されている。)
- AquaSKK を「ひらがな」モードに入れるための Control-J を Terminal が奪って return と解する。 今のところこれを避ける方法が見付からないので、 AquaSKK の設定を弄って、Control-; でも「ひらがな」モードに入れるようにして凌いでいる。
- Sytem Preferences => Keyboard => 'Modifier Keys...' で、Caps Lock を Control にする。(お好みに合わせて)
- Terminal.app を起動し、Terminal
(on Menu bar) ⇒ Preferences... ⇒ Settings で、最小限次の設定をしておく。
- Text => Text: 'Antialias text' にチェック
- Advanced => International => Character encoding: Unicode (UTF-8)
- Zsh の設定ファイルを作る。zsh を初めて立ち上げたら、menu に沿って、簡単な設定は可能。でも、 お急ぎの人はこのサンプルを使うと良いかも(ファイル名を .zshrc に変更して、'~/' (home directory) に置く。)
-
% chsh
で、shell を/opt/local/bin/zsh
に設定 (vim が立ち上がるが、'i' と key in して、cursor key を駆使して編集、 Esc key で insert mode を抜けて、':wq' で良い筈。) - Terminal.app を再度起動して、zsh が立ち上がる事を確認。
動作確認……
少々面倒のようだが、上の~/.MacOSX/environ.plis>
の設定と相俟って、ssh でホストを渡り歩いても、その先々で、
破綻のない日本語環境が得られる(相手が、Linux/Unix の場合を含む。
Cygwin ではまだ少し問題が残っている。)
3.2 Emacs
MacPort で emacs-mac-app をインストールすると、
/Application/MacPort/EmacsMac.app
にインストールされている筈。
-
/usr/local/bin/emacs
というファイルを作り、中身を#!/bin/sh /Applications/MacPorts/EmacsMac.app/Contents/MacOS/Emacs "$@"
として、実行パーミッションを与える (% chmod +x
) 。こうする事で、command line から emacs とやって、 アプリケーションとして立ち上げる事ができる。しかし、もっと重要なのは、emacs lisp package の compile/install がとても楽になる事。 - Finder もしくは Dock
から立ち上げた時に、正しく環境変数が Emacs に渡されるように、
.MacOSX/environment.plist
の中の PATH の値を指定する。(Emacs から、shell を呼ぶのでなければ必要無いかも知れないが、ssh で remote host から command を投げられる場合は必須。) -
~/.emacs.d/init.el
を作る。お急ぎの方は、 このサンプルを使ってみて下さい。 - 「Package パッケージ(ややこしぃ!)」を使って、pymacs と python-mode をインストールする。 (Sakito さんのページ を参考にして下さい。残念な事に、 私が重宝している他のパッケージの多くは、package では扱えないようです。)
- DDSKK をインストールする。ソースは GitHub にも有るが、改訂が然程頻繁ではないので、 openlab にある安定板 (2014-03-07 現在で ddskk-15.1) をダウンロードして手でコンパイル・インストールしている。
3.3 Python
注: この節はほぼ全面的に改訂されているので「色分け」していない。今回の改訂で大きく変った点は、ディフォルトで Python-3.3 を使うようになり、 パッケージ管理に PyPI を使うようになった事。
これまでのところで、Python-2.7.x, Python-3.3.x, python-select に加えて、 pyNN-readline, pyNN-numpy, pyNN-pip, pyNN-setuptools (pyNN は、py33 か py27) がインストールされている筈。
ここで、以下のコマンドを使って Python-3.3.x をディフォルトにする。 (同様にして、Python-2.7.x をディフォルトにする事も可能。)
fukuda@quadra:~% sudo port select --set pip pip33 fukuda@quadra:~% sudo port select --set python python33ここで、py33-pip でない事に注意。
この後、例えば
fukuda@quadra:~% sudo pip install django
とやれば、django の最新版 (-1.6.2) が、port
でインストールしたのと同じように、
/opt/local/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/django/以下にインストールされる。
この事から、PyPI と MacPorts の干渉が心配になる。 実際、MacPorts でインストールした、py33-pip や py33-numpy が、pip list で見えてしまうし、pip install -U pip でアップグレードされてしまった。 が、今のところ問題は起きていない。 Numpy については、問題が出る可能性がはるかに高いと思われるが、 今のところ pip でアップグレードはされた事がなく、 問題の有無についてはまだ何とも言えない。
PyPI モジュールのアップグレードは、
fukuda@quadra:~% pip list --outdated future (Current: 0.9.0 Latest: 0.11.2) pip (Current: 1.5.2 Latest: 1.5.3) fukuda@quadra:~% sudo pip install -U future pipのような要領でやる。readline や numpy については、ここで outdated とされても、後段で
install -U
しなければ、上の「干渉」問題は避けられるように思う。
従来からの留意点としては(以下、差分色分け表示復活)
- GNU-readline がインストールされていれば MacPort で pyNN-readline をインストールするだけで、 Python prompt の下で、Gnu-readline が動くようになる。 (つまり、インタラクティブモードで日本語を扱うなら pyNN-readline は必須)
- 現状の IDLE は日本語の扱いや応答性に問題が有るのでお勧めしない。 (idle2.7 は日本語に未対応。idle3.3 は、そもそも立ち上がらない)
- スクリプトの編集は EmacsMac + Python-mode でやる。
- デバッグは Zsh からやるか、EmacsMac の py-shell 他を使った環境で実行する。(リモート環境でのデバッグでは、 いずれにしても、あまり凝った事はできない……)
9/1,792,064 Taka Fukuda Last modified: 2014-03-08 (Sat) 09:16:38 JST