Mac でハック

(その2: おたく環境編—2014Q1)

2014-03-15 作製

目次

1. はじめに
  1.1 実はなかなか大変
  1.2 概要
2. 共通環境
  2.1 Remote Shell
  2.2 AquaSKK
  2.3 Font
3. Emacs
  3.1 Wanderlust
  3.2 Lookup
  3.3 python-mode


1. はじめに

1.1 実はなかなか大変

Linux Desktop のユーザだった頃から、自分の「環境」を自画自賛してきたが、 ここにきて、ちょっと停滞している。 (相変わらず自分では「なかなかイケてるのでは」などと思っているのだが) なかなか人様にお勧めできる程には安定してくれないのだった。

その西の横綱が Emacs のメイラーである Wanderlust. とは言え、これは Wanderlust のせいというより、むしろ So-net や、後で追加した gmail の設定やポリシーが大きく変わり続けたからという面もある。 しかし、ここにきて、ようやく安定をみたので、早速自画自賛を再開する。

1.2 概要

先の「基礎環境編」でさえ、 どれくらい一般性が有るのか疑わしいものだが、 自分で「これはちょっとオタクっぽいか?」と思っているもの等、 客観的には「相当来て」いるのではないかと思う。 なので、先に概要を挙げて、先に進むかどうか判断して頂く事にする。


2. 共通環境

2.1 リモートアクセス

自動ログイン

今や、ssh 及びそれをベースとする rsync を使うのは常識となっているが、 それを頻繁に使うとなると、 いちいちパスワードやパスフレーズを入力するのが面倒になる。 そこで、公開鍵・秘密鍵をつかった自動ログイン?環境を作る。 勿論、ログインやファイル転送する相手方(ここでは仮に Lark とする)にも、 同じような環境ができているとの前提。
  1. ssh-keygen で、Passphrase なしで key を作ると、 ~/.ssh/id_rsa{.pub} ができる。
  2. このうち id_rsa.pub を、Lark に転送して、その ~/.ssh/authorized_keysの最後に書き込む。(authorized_key ファイルが無ければ新たに作る。)
  3. こうしておくと Emacs から、Tramp で su 権限でファイルの読み書きが可能になる。(設定は後述。)

シェルプロンプトの色分け

こうやって、ホストの間を渡り歩くのが頻繁になると、 ついつい自分がどこにいるのを忘れてしまって、大ポカをやる事がままある。 これを防ぐために、私は、それぞれのホストの Zsh プロンプトに色をつける事にしている。 これは、.zshrc に
PROMPT="%n@%{${fg[red]}%}%m%{${fg[default]}%}:%~%# "  
の行を加えれば実現できる(fg[red] の red を 'blue', 'cyan', 'magenta' などにすれば、プロンプトのホスト名がその色で表示される。)
Coloring the shell prompts
Zsh prompt のホスト名を色分けする
(click to expand)

2.2 AquaSKK

インストール他

残念ながら、昨年 (2013) の 5月で開発が終っていて、メンテナンスもされていない模様。 しかし、私の使っている範囲(OS: Lion, ML, Mavericks; App: Terminal, Firefox, Words, Pages, etc.) では、今も全く問題がない。(Java で実装されたアプリケーションで問題が出ているという噂もあるが。)

インストール・設定も簡単で、 sourceforge から、最新版 (AquaSKK-4.2.dmg) を取ってきて、 同サイトの「手引き」通りインストール・設定すれば、すぐに動くようになる。

追加の設定

実は殆んどそのまま使っていて、オタクっぽく凝ったところはあまり無い (SKK 自体が既にかなりオタクっぽいから…… :-)「手引き」と違うところは:

ここが嬉しい AquaSKK

Emacs の DDSKK をずっと使ってきた事もあり、なんとなくこれがメインで、 Terminal 他で使う AquaSKK は「従」と看做してきたが、今となってはそれも見直すべきなのかも。

2.3 Font

これこそまさに、「趣味」の極みであり、 他人に勧めるのは顰蹙を買うだけだと解っちゃいるのだが……

Terminal

ともあれフォントは、"Luxi Mono Regular 18 pt." に限る。 その上で、 Character Spacing を 0.96, Line Apacing を 1.2 くらいにするのがベスト。つまり、以下のようにする……
Terminal's font settings
Terminal.app で Luxi Mono を使う
(click to expand)

Unicode on Terminal
Terminal.app で Luxi Mono を使う
(click to expand)

"Luxi Mono" の選択は、Linux で長らく使ってきたから、というだけの「私の好み」だが、 (意図したものではないとは言え)日本語/Unicode がらみでは、なかなか渋い動作をする。 ASCII 文字以外のフォントは明示的には選べないのだが、 旧字簡体字を含む漢字には(多分)ヒラギノの角ゴシックを、 IPA (国際発音記号)には(これも多分)半角の Lucida Bright あたりを選んでいると思われる。 特に「𠀋」は、UTF-8 で 4バイトになる文字で、かつては Emacs においてさえ問題が有ったのだが、このフォントでは問題なく表示されている事に注意。 しかし、記号の幅に関しては、Lion では Terminal.app の Unicode の扱いそのものに問題があるが、これは ML 以降の Terminal.app では殆んど解決されている。(その気になれば、emacs -nw で SKK が使えます :-)

Emacs

XEmacs から Emacs に乗り換えたあたりで、
  • パッケージングのバグが減り、 またバイナリで供給されるパッケージが増えてきた事もあり、 インストール・メンテナンスが楽(ML では、まだ数が少ないようだが。) (今や MacOSX のバージョンへの依存より、サーバの混み具合の影響の方が大きい。 サーバの空いている時間・時期を選ぶと、 大抵の場合バイナリがインストールされる——とても迅速。)
  • かつては Emacs, Wine 等はソースが出てから MacPort になるまで、かなり時間がかかっていたものだが、 最近は迅速に提供されるようになった。 極め付けは、gnuradio だろうか。(長らく、MacPort には -2.x.x 版しか無かったが、最近いきなり最新版の -3.6.2 になった。) で、ここでの基本方針は、 で行く。

    ただ、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 しなければ、上の「干渉」問題は避けられるように思う。

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


    258/1,788,188 Valid CSS! Valid HTML 5.0
    Taka Fukuda
    Last modified: 2019-04-25 (Thu) 20:15:02 JST