Mac でハック
(その2: おたく環境編—2014Q1)
目次
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 概要
先の「基礎環境編」でさえ、 どれくらい一般性が有るのか疑わしいものだが、 自分で「これはちょっとオタクっぽいか?」と思っているもの等、 客観的には「相当来て」いるのではないかと思う。 なので、先に概要を挙げて、先に進むかどうか判断して頂く事にする。- SSH の公開鍵・秘密鍵による自動ログイン
- シェル (Zsh) プロンプトの色分け
- AquaSKK
- Font: Terminal.app, Emacs 他の
- Emacs の package.el
- Terminal.app, Zsh, Emacs の設定
2. 共通環境
2.1 リモートアクセス
自動ログイン
今や、ssh 及びそれをベースとする rsync を使うのは常識となっているが、 それを頻繁に使うとなると、 いちいちパスワードやパスフレーズを入力するのが面倒になる。 そこで、公開鍵・秘密鍵をつかった自動ログイン?環境を作る。 勿論、ログインやファイル転送する相手方(ここでは仮に Lark とする)にも、 同じような環境ができているとの前提。- ssh-keygen で、Passphrase なしで key を作ると、
~/.ssh/id_rsa{.pub}
ができる。 - このうち
id_rsa.pub
を、Lark に転送して、その~/.ssh/authorized_keys
の最後に書き込む。(authorized_key ファイルが無ければ新たに作る。) - こうしておくと Emacs から、Tramp で su 権限でファイルの読み書きが可能になる。(設定は後述。)
シェルプロンプトの色分け
こうやって、ホストの間を渡り歩くのが頻繁になると、 ついつい自分がどこにいるのを忘れてしまって、大ポカをやる事がままある。 これを防ぐために、私は、それぞれのホストの Zsh プロンプトに色をつける事にしている。 これは、.zshrc にPROMPT="%n@%{${fg[red]}%}%m%{${fg[default]}%}:%~%# "の行を加えれば実現できる(fg[red] の red を 'blue', 'cyan', 'magenta' などにすれば、プロンプトのホスト名がその色で表示される。)
2.2 AquaSKK
インストール他
残念ながら、昨年 (2013) の 5月で開発が終っていて、メンテナンスもされていない模様。 しかし、私の使っている範囲(OS: Lion, ML, Mavericks; App: Terminal, Firefox, Words, Pages, etc.) では、今も全く問題がない。(Java で実装されたアプリケーションで問題が出ているという噂もあるが。)インストール・設定も簡単で、 sourceforge から、最新版 (AquaSKK-4.2.dmg) を取ってきて、 同サイトの「手引き」通りインストール・設定すれば、すぐに動くようになる。
追加の設定
実は殆んどそのまま使っていて、オタクっぽく凝ったところはあまり無い (SKK 自体が既にかなりオタクっぽいから…… :-)「手引き」と違うところは:- EmacsMac.app を立ち上げ、その状態で Menu Bar の国旗マークAquaSKK 環境設定で、「"EmacsMac.app" では直接入力」にチェックを入れる(EmacsMac.app では DDSKK を使うから)
- 辞書は、JIS 第4水準までインストールする。
OpenLab
さんからダウンロードして、以下の場所に置く。
~/Library/Application Support/AquaSKK/SKK-JISYO.L ~/Library/Application Support/AquaSKK/SKK-JISYO.JIS2 ~/Library/Application Support/AquaSKK/SKK-JISYO.JIS3_4 ~/Library/Application Support/AquaSKK/SKK-JISYO.JIS2004
正字を入力するのが目的であるが、実はこれだけでは、 正字や稀な漢字の入力にはあまり便利ではない。 熟語が登録されてないからで、このため、 第 4水準の漢字に辿り付くのが非常に大変な場合が有る。 - Terminal.app が、Control-J を横取りしてしまうので、 Control-; でも、平假名モードになるように設定する。 ここを参照。
- HyperCard on BasiliskII に '⌘Space' を渡すために "System Preference" ⇒ "Language & Text" ⇒ Input Sources ⇒ "Keyboard Shortcuts" で、Select previous input source: を disable する(check を外す。) (BasiliksII で日本語を使う人以外には関係ありません。:-)
ここが嬉しい AquaSKK
Emacs の DDSKK をずっと使ってきた事もあり、なんとなくこれがメインで、 Terminal 他で使う AquaSKK は「従」と看做してきたが、今となってはそれも見直すべきなのかも。- 辞書の自動アップデート: 基本の SKK-JISYO.L の他、「正字」を書くために、.JIS2, .JIS3_4, .JIS2004, をインストールしているが、いずれも最新版になっている。(インストール後は、 本家でも .L と .JIS3_4 のみがアップデートされているだけだが。) DDSKK も、この辞書のセットを使っている。
- 注釈:
実は AquaSKK がどうやってこの説明を作っているのかよく知らない。 が、とにかくこれは便利。 たとえば「とる」が、取る、摂る、執る、採る、撮る…… のうちどれなのかを素早く知るのに便利。 愛用している広辞苑には、このような「書き分け」の例が殆ど載っていないので。
2.3 Font
これこそまさに、「趣味」の極みであり、 他人に勧めるのは顰蹙を買うだけだと解っちゃいるのだが……
Terminal
ともあれフォントは、"Luxi Mono Regular 18 pt." に限る。 その上で、 Character Spacing を 0.96, Line Apacing を 1.2 くらいにするのがベスト。つまり、以下のようにする……
"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 に乗り換えたあたりで、- ASCII: Lucida FAX (改): FontForge を使って Lucida FAX を少し改造したもの。(Lucida FAX をお持ちの方にはお分けします。)
- IPA (国際発音記号): Hiragino Mincho ProN or Lucida Grande 残念ながら、 Lucida FAX には IPA が入っていない。なので、この二つ
- 日本語: Hiragino Mincho ProN
- 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 他を使った環境で実行する。(リモート環境でのデバッグでは、 いずれにしても、あまり凝った事はできない……)
316/1,781,561 Taka Fukuda Last modified: 2019-04-25 (Thu) 20:15:02 JST