★来週、7/29から8/2まで本ブログはお休みします

ということで、HFS+の文字化け問題に微力ながら参戦しようと思った。
ぼくは仕事の関係でほぼ100% Windowsを使っている。
ときどき必要に迫られてUbuntuを使うぐらいだ。
世間の情報はほとんどUNIXだから、Windowsで同じことが出来るか/出来ないか検証するのをレーゾンデートルとこの胸に信じて生きてきたようなところがある。
でもこの問題に限ってはMacを使わざるを得ない。
ということで、MacのPerlを本気出して使う方法を考察する。

■自分用Perlを入れる

MacにはもともとPerlが入っていて、それを使えばいいような気がしていた。
でもdankogaiさんの記事を読んで、自分用に別のPerlを入れたほうがいいような気がしてきた。

perl - Mac OS X - perlをDIYする
(404 blog not found)
で、自前で perl をインストールする方法だけど、実に簡単。Xcodeをインストールしておいてから、Terminalから以下のようにすればいい。
curl -O http://www.cpan.org/src/perl-5.10.0.tar.gz
tar zxvf perl-5.10.0.tar.gz
cd perl-5.10.0
sh Configure -DDEBUGGING -Doptimize='-g -pipe -Os' -Dusethreads -Dusemultiplicity -des
make
sudo make install
システムのPerlを使うと、これから色んなCPANモジュールを入れたり、場合によってはCPANモジュールにパッチを入れたりして暴れまわりたいと思っている身としては、システムが使うPerlを壊してしまったら何かと面倒だ。
Macには何も実のあるものを入れてなくて、買ったときに同梱されていたUSBメモリでシュッと元に戻るのが身上であるから、別にPerlぐらい完膚なきまでに破壊してもいいような気がするが、それでも知らず知らずにシステムのファイルを壊していて気づかなかったというケースもあるので、ここは別Perlを手動で入れてみる。

■コマンドラインを使う

なお、作業はコマンドラインで行う。
アプリケーションのユーティリティの中にターミナルと言うのが入っていて、これを使う。
最初に、いま入っているPerlが本当にシステムのPerlなのかを確認する。
$ which perl
/usr/bin/perl
と言ってきたらこれは買ってきたときに入っていたシステムのPerlだ。
このほかに
/usr/local/bin/perl
を入れようという寸法だ。

■Xcodeを使う

まずXcodeというのを入れないといけない。
というのは、ソースをtar.xzで固めたもの(tarballターボールという)で持ってきて手元でコンパイルするので、コンパイラーやmakeコマンドが必要になるが、標準ではそれがついていないからだ。

XcodeはMacの開発環境で、作ったアプリを世界に公開するには登録料$99を払わないといけないが、使うだけなら無料で、AppStoreからインストールできる。

やってみたが、ちょっと時間は掛かったがインストールできた。
次に「パッケージをアップグレードする」と言われたので、分からないなりにしてもらった。

xcode

■rootを有効にする

あと、この手順では最後にsudoというのをやっている。
須藤ではなくてスドゥーと読むのだと思う。



これはスーパーユーザーとしてコマンドを実行するもので、rootを使えるようにしないといけないが、Macではなんとこれがデフォルトでは無効になっている。
有効にするには以下の手順が必要になる。

Mac OS X で「ルート」ユーザを有効にして使用する
(アップル - サポート)

これがちょっとRPG的な迷宮的な手順であって、めっちゃ直感的でないが上の手順に盲目的にしたがってクリアした。
rootにもroot用のパスワードを設定する。

■makeを使えるようにする

※2014-01-29追記:前に持っていたMacbook Air late 2010では必要であったこの手順が、新しく買ったMacbook Proでは必要なかった。
※下の「Command Line Tools」という選択肢が出てこない。
※もともと入っていると思われる。
※Macによる違いか?
※ちなみに、makeが使えるかどうかは、「ターミナル」(コマンドライン)で「make -h」と打ち込むとmakeコマンドの使い方が出てくるかどうかで分かる。

で、これだけではmakeが使えない。
これは以下を参考にした。

Xcodeでmakeができなくなった、
Apple サポートコミュニティ > Mac OS & System Software > Mac OS X Technologies > ディスカッション

後半質問者が難儀していて大変だが、最初の
Xcode.appを立ち上げ、「Preferences」>「Downloads」>「Components」から「Command Line Tools」を追加でインストールする必要があります。
だけで使用が可能になった。

■使用するPerl

Danさんの記事は2009年のものであって、5.10.0を入れているが、当然もっと新しいものを入れたい。

Perl Source

を見ると、最新の安定板は5.18.0だそうだ。
Windowsで使っているActivePerlの最新版は5.16.3だからそっちに合わせようとも思ったが、やはりここはより新しい5.18.0を入れることにした。
なお、WindowsでもStrawberry Perlであれば5.18.0が使えるようだ。

ということで、
curl -O http://www.cpan.org/src/perl-5.18.0.tar.gz
tar zxvf perl-5.18.0.tar.gz
cd perl-5.18.0
sh Configure -DDEBUGGING -Doptimize='-g -pipe -Os' -Dusethreads -Dusemultiplicity -des
make
sudo make install
で無事インストールされた。
各ステップで怒涛のメッセージが出て寝そうになったが、うつらうつらしながら作業が完遂した。

■バージョンの確認

ということで「perl -v」でバージョンの確認を行う。
$ /usr/bin/perl -v
を改めて見てみると
This is perl 5, version 12, subversion 3 (v5.12.3) built for darwin-thread-multi-2level
と書かれているが、
$ /usr/local/bin/perl -v
を見てみると
This is perl 5, version 18, subversion 0 (v5.18.0) built for darwin-thread-multi-2level
と書かれている。
ヤッター

■個人用Perlを優先して使う

でも、
$ which perl
をやってみると
/usr/bin/perl
と相変わらず言ってくる。

これは、/usr/local/bin/に環境変数PATHが通っていない、または、優先されてない状態だ。
$ set | grep PATH
で調べてみると、果たして/usr/local/binは入っているが/usr/binよりも後ろになっていた。
[~]$ set|grep PATH
PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin
ということで、ルートに.bashrcというのを作る。
ぼくはviを使えないのでEmacsを使っているが、Emacsも使えない人はnanoというのが簡単という話だ。
簡単なの。

でも、使い慣れたテキストエディタやCotEditorを使うのが一番カンタンかもしれない。
.bashrcがない場合は、まずファイルをtouchして、それをopenコマンドで開く。
cd
touch .bashrc
open -a TextEdit
最初にcdと空打ちするのはhomeディレクトリ(~)に移動するためだ。
以上の情報は以下のブログを参考にした。
PHPerがMacbookAirを買ったら直ぐにすること 2012
(Quiita)

さて、どうにかこうにか.bashrcを作成したら、以下の行を追加する。
PATH=~/perl:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11/bin

/usr/local/binを前に持って来た。
あと、自分のスクリプトを~/perl(ホームディレクトリの下のperlフォルダ)に入れるために、それを先頭に持って来た。

ただ、.bashrcだけ置いてもログイン時にそれを見に行ってくれないので、.bash_profileというファイルを別に用意する必要がある。
中身はこうする。
if [ -f ~/.bashrc ] ; then
. ~/.bashrc
fi
これ、.bash_profileの中にPATHを書いてもいいんじゃないかという気もするが、.bash_profileはログイン時に一度だけ読み込まれる、.bashrcはbashを(サブシェルとしても)起動するたびに読み込まれる、という違いがある。
ややこしいので、上記のようにして設定は.bashrcに集中させてみた。

■いよいよ・・・

ということで、一度ターミナルを終了させて再起動する。
$ which perl
/usr/local/bin/perl
と言って来る。
もちろん、
$ /usr/bin/perl -v
で、システムのPerlも生きていることを確認できる。
ヤッター。

■cpanmを入れる

CPANというのは世界中のPerl自慢がPerlの機能を増強する部分プログラムを公開しているところである。
ぼくはずっとシーパンと読んでいたところだがクパンと読む人も多いそうだ。

大昔はCPANモジュールのターボールを落としてmakeしてmake installしていたが、そのうちcpanコマンドというのが標準でついてきて、コマンド一発でインストールできるようになった。
で、cpanの後継cpanp(CPAN PLUS)というのが出てきて、さらに最近はcpanm(CPAN MINUS)というのが出てきた。
cpanmはcpanと比較して、root権限が不要である、設定がカンタン、使用するリソースが少ない、冗長なメッセージが少ないという特徴があるそうだ。
ということで、これをインストールする。
$ sudo cpan App::cpanminus
$ sudo cpanm --self-upgrade
ということで、cpanminusをインストールするためにcpanを使う。
また、sudoを使うので、rootのパスワードも必要になる。
root権限がない人(レンタルサーバーや会社の共有のマシンを使う場合など)はlocal::libというのと組み合わせればいいそうだ。
ぼくは自分のマシンだから別にどうなってもいいのでroot権限を謳歌している。

ということで、まだ実のあることは何もやってないのだが一日に書くブログの長さとしてはこれぐらいがちょうどいい気がしてきた。