Mac でハック

(その1: 基礎環境編—2014Q1)

2012-12-23 作成
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 でハック」まであたり前の事になったようなのである。 それを裏付ける事例には事欠かない

うーむ、今やハッカーが MacOSX を使うのは当り前の事になったと見える。 御同慶の至りであるが、同時に、 「こうなっては、もうプチオタクがしょうもない事を書きつらねても仕方がないかも」 という気もしてきた…… が、まあ、「しょうもない」のは元より承知だったし、と気を持ち直して続ける。

1.2 右往左往の成果?

七年もの間つきあってきたのだから、 それなりの進歩というか変化は有ってしかるべきである。 が、目指す目標は「Mac でオタク」に書いたのそれと然程変わらない。 しかし、その実現方法は右往左往の末の淘汰・洗練 (?) を経てより単純・明快になっている。

この基本環境をできるだけ簡単に作り上げる、つまり「オタクを卒業する」 というのも長らくの(しかもちっとも解決に近付かない)課題であった。 これまたこの何年かの右往左往の結果、

あたりが一番楽に違いない、という結論になっている(今のところは。)

2. 環境整備

2.1 こけつまろびつ (Mountain) Lion

先のこけつまろびつ MacOSX Tiger では、「なんでこんな風に変えるかねぇ」と結構泣きが入ったが、 さすがにもう慣れてきた……。一部重複もあるが、再度まとめてみた。

2.2 MacPorts と基本コマンドのインストール

何とか、「プチオタク」を卒業しよう、つまり、 環境構築・維持に手間暇を掛けないようにしたい、と色々右往左往してきたが、 得られた結論は「できる限り MacPort に頼る」につきる。 何故 MacPort か?

で、ここでの基本方針は、 で行く。

ただ、Apple さん、どうやら「どうしてもユーザからオタク環境を取り上げたい」 と思っているらしく、MacPorts のインストールがちょっとづつ面倒になっていくような気がする。

  1. (もしまだなら)App Center から最新の Xcode をダウンロードしてインストール
  2. Apple Developer Site から、Command Line Tools をダウンロードしてインストール。 (Xcode が最新だと、Lion でもこれが必要)
    Command Line Tools
    Command Line Tools をダウンロード
  3. macports.org から、MacOSX に応じた Package Installer をダウンロードして、インストール。 port コマンドは、/opt/local/bin/ にインストールされる。
  4. Launchpad から、Utilities の箱の中にある、Terminal をクリックして起動。(ML では、Utilities が Others に変わっている。)(この後、ずっと使うので、Dock のアイコンを右クリックして、Options ⇒ "Keep in Dock" としておいた方が良い。)
  5. とりあえず、Menu bar ⇒ Preferences... ⇒ Settings ⇒ Text で font size を 14 もしくは 18 pt くらいに設定し、 Encodings で、UTF-8 を選んでおく。(Font は Menlo のままでも可) 以降はもっぱらこの上で作業する。
  6. /opt/local/etc/macports/variants.conf を編集して
    # Example: -x11 +no_x11 +quartz
    -x11 +no_x11 +quartz
    #   +gcc48
    #   +universal 
    とする。(上の「X11 や xorg_gnome を避ける」を徹底するため。)
  7. 基本コマンドをインストール。
    % /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 は強制的にインストールされる)
  8. System に密着しているコマンド類は、(たとえ MacPort に有っても)MacOSX 附属のものを使い続けた方が吉。 例えば、ifconfig, locate, sudo 等。
以上までのところで、command line から zsh, emacs-mac-app が使えるようになった。 これらを以下の設定で使用する。

3. アプリケーション・コマンドの設定

3.1 Terminal.app と Zsh

何はともあれ CUI がなくては始まらないのだが、 今のところこの組合せがベストと思われる。ただ、まだ完璧とは行かない……

設定をステップバイステップ風に書くと
  1. Sytem Preferences => Keyboard => 'Modifier Keys...' で、Caps Lock を Control にする。(お好みに合わせて)
  2. Terminal.app を起動し、Terminal (on Menu bar) ⇒ Preferences... ⇒ Settings で、最小限次の設定をしておく。
    • Text => Text: 'Antialias text' にチェック
    • Advanced => International => Character encoding: Unicode (UTF-8)
  3. Zsh の設定ファイルを作る。zsh を初めて立ち上げたら、menu に沿って、簡単な設定は可能。でも、 お急ぎの人はこのサンプルを使うと良いかも(ファイル名を .zshrc に変更して、'~/' (home directory) に置く。)
  4. % chsh で、shell を /opt/local/bin/zsh に設定 (vim が立ち上がるが、'i' と key in して、cursor key を駆使して編集、 Esc key で insert mode を抜けて、':wq' で良い筈。)
  5. Terminal.app を再度起動して、zsh が立ち上がる事を確認。

動作確認……

Terminal and ssh
Terminal.app で、他の host へログイン
(eagle は Linux machine)
少々面倒のようだが、上の ~/.MacOSX/environ.plis> の設定と相俟って、ssh でホストを渡り歩いても、その先々で、 破綻のない日本語環境が得られる(相手が、Linux/Unix の場合を含む。 Cygwin ではまだ少し問題が残っている。)

3.2 Emacs

MacPort で emacs-mac-app をインストールすると、 /Application/MacPort/EmacsMac.app にインストールされている筈。

  1. /usr/local/bin/emacs というファイルを作り、中身を
    #!/bin/sh
    /Applications/MacPorts/EmacsMac.app/Contents/MacOS/Emacs "$@"
    として、実行パーミッションを与える ( % chmod +x ) 。こうする事で、command line から emacs とやって、 アプリケーションとして立ち上げる事ができる。しかし、もっと重要なのは、emacs lisp package の compile/install がとても楽になる事。
  2. Finder もしくは Dock から立ち上げた時に、正しく環境変数が Emacs に渡されるように、 .MacOSX/environment.plist の中の PATH の値を指定する。(Emacs から、shell を呼ぶのでなければ必要無いかも知れないが、ssh で remote host から command を投げられる場合は必須。)
  3. ~/.emacs.d/init.el を作る。お急ぎの方は、 このサンプルを使ってみて下さい。
  4. 「Package パッケージ(ややこしぃ!)」を使って、pymacs と python-mode をインストールする。 (Sakito さんのページ を参考にして下さい。残念な事に、 私が重宝している他のパッケージの多くは、package では扱えないようです。)
  5. 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 しなければ、上の「干渉」問題は避けられるように思う。

従来からの留意点としては(以下、差分色分け表示復活)


200/1,091,277 Valid CSS! Valid HTML 5.0
Taka Fukuda
Last modified: 2014-03-08 (Sat) 09:16:38 JST