昨年 iMac Retina 5K を買ったが、これは当然ながら OS X El Capitan が入っている。

Mavericks から Yosemite に至る前バージョンとは異なりセキュリティが強化されているのは良い。だが Web 系の開発者目線だと既定で OpenSSL のヘッダが除かれていたりと不都合もある。 OpenSSL が使えないとこれに依存している Python の pip が動作しなかったりなど困ることも多い。解決法として調べると openssl を brew install し、これを利用するようにリンクしろという話が出てくる。

今まで OS X のパッケージ管理システムには MacPorts を利用してきたが、どうも時代の流れ的には Homebrew を使わざるを得ないようなので移行することにした。なお MacPorts と Homebrew は共存することはできない。両者を比較すると次の通りだ。

MacPorts の特徴
* /opt/local の下にバイナリをビルドするのでシステムの動作を阻害しない
* ビルドするのでインストールに時間がかかる
* 管理者権限でインストールする

Homebrew の特徴
* /usr/local の下にバイナリをインストールしてしまう
* パッケージのインストールに時間はかからない
* ユーザー権限でインストールする

こうして見ると Homebrew は /usr/local の下にユーザー権限でバイナリをぽんぽん入れてしまうのでだいぶ気分が良くない。つまりはユーザー権限でシステムの挙動をどんどん変更できてしまうわけだ。システムが管理するスクリプトでこれらのコマンドを呼んでいる場合、その動作も変更されてしまう点には気をつけねばならない。 root が動かすプログラムでは明示的に /usr/local を利用しないような工夫をしておかないと危険である。

とはいえ意地を張っていても仕方ないので MacPorts をアンインストールして Homebrew へ移行した。

まず Homebrew をインストールするには公式サイトに掲げられているコマンドをターミナルにコピペする。この時点でそもそも中身も検証しないままスクリプトを叩いて大丈夫なんかいという不安がよぎる。

まあ、ここまで来ると厳密に管理したい人は Mac を使うのをやめて Debian か何か使ったほうが良さそうである。

次に brew doctor で状態を確認しながら MacPorts 時代に入れていたあれこれを Homebrew で入れなおす。

# 状態の確認
brew doctor

# 最新に更新
brew update

# まずは openssl を入れてリンクを貼る
brew install openssl
brew link openssl --force

# その他諸々を入れる
brew install wget
brew install nkf
brew install vim
brew install freetype
brew install mecab
brew install cabocha
brew install ta-lib

調べてみると Git も brew install している人が多いが、これに関しては最新版を使う必要も無いし何もかも brew で入れたユーザー権限のバイナリにするのは非常に抵抗がある (wget や nkf を入れるのすら抵抗がある) のでこれくらいでやめておく。

これで PythonRuby をビルドしてパッケージもインストールできるようになる。なお、ほげほげ env みたいな仮想環境はこれまた使いたくないのでソースからビルドする。

Vim も brew で最新のものが入る。

$ vim --version
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Apr 17 2016 17:41:30)
MacOS X (unix) version
Included patches: 1-1724
Compiled by Homebrew
Huge version without GUI.  Features included (+) or not (-):
+acl             +farsi           +mouse_netterm   +tag_binary
+arabic          +file_in_path    +mouse_sgr       +tag_old_static
+autocmd         +find_in_path    -mouse_sysmouse  -tag_any_white
-balloon_eval    +float           +mouse_urxvt     -tcl
-browse          +folding         +mouse_xterm     +terminfo
++builtin_terms  -footer          +multi_byte      +termresponse
+byte_offset     +fork()          +multi_lang      +textobjects
+channel         -gettext         -mzscheme        +timers
+cindent         -hangul_input    +netbeans_intg   +title
-clientserver    +iconv           +packages        -toolbar
+clipboard       +insert_expand   +path_extra      +user_commands
+cmdline_compl   +job             +perl            +vertsplit
+cmdline_hist    +jumplist        +persistent_undo +virtualedit
+cmdline_info    +keymap          +postscript      +visual
+comments        +langmap         +printer         +visualextra
+conceal         +libcall         +profile         +viminfo
+cryptv          +linebreak       +python          +vreplace
+cscope          +lispindent      -python3         +wildignore
+cursorbind      +listcmds        +quickfix        +wildmenu
+cursorshape     +localmap        +reltime         +windows
+dialog_con      -lua             +rightleft       +writebackup
+diff            +menu            +ruby            -X11
+digraphs        +mksession       +scrollbind      -xfontset
-dnd             +modify_fname    +signs           -xim
-ebcdic          +mouse           +smartindent     -xsmp
+emacs_tags      -mouseshape      +startuptime     -xterm_clipboard
+eval            +mouse_dec       +statusline      -xterm_save
+ex_extra        -mouse_gpm       -sun_workshop    -xpm
+extra_search    -mouse_jsbterm   +syntax
   system vimrc file: "$VIM/vimrc"
     user vimrc file: "$HOME/.vimrc"
 2nd user vimrc file: "~/.vim/vimrc"
      user exrc file: "$HOME/.exrc"
  fall-back for $VIM: "/usr/local/share/vim"
Compilation: /usr/bin/clang -c -I. -Iproto -DHAVE_CONFIG_H   -DMACOS_X_UNIX  -Os -w -pipe -march=native -mmacosx-version-min=10.11 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1
Linking: /usr/bin/clang   -L. -fstack-protector -L/usr/local/lib  -L/usr/local/lib -Wl,-headerpad_max_install_names -o vim        -lm  -lncurses -liconv -framework Cocoa   -fstack-protector  -L/System/Library/Perl/5.18/darwin-thread-multi-2level/CORE -lperl -framework Python   -lruby-static -framework CoreFoundation -lobjc -L/opt/ruby/2.1/lib

また Python や Ruby をビルドしたら開発環境を Emacs に構築したい。

flymake が動くと嬉しいので少し前の Emacs 23.x 系をダウンロードする。この系統の最新版は Emacs 23.4 である。

1

.emacs はここにある。

これで pep8 に準拠したコードでなければ Emacs 上で動的に表示するといったことができるようになる。

2

というわけで OS X El Capitan でも homebrew + python/ruby + emacs 23.4 で実用的な開発ができる環境がようやく整った。

Posted on by 774