PHPのバージョンを複数管理する(その2)

昨日の続き

前回はphp-buildで複数のPHPバージョンをコンパイルし、php-versionでcliで動作するPHPのバージョンを変更するところまでやりました。
今回はApacheが利用するPHPを切り替えてみようと思います。

1.Apache諸設定

とりあえず最低限PHPを動作させる設定にします。

$ vi /usr/local/Cellar/httpd/2.2.22/etc/apache2/httpd.conf
#LoadModule追記
LoadModule php5_module libexec/libphp5.so
AddType application/x-httpd-php .PHP

2.libphp5.so切替シェル作成

こちらを参考にさせていただきました。
ほっとんどコピペです。てへぺろ

$ touch ~/bin/apache-php-version
$ chmod +x ~/bin/apache-php-version
$ vi apache-php-version
#!/usr/local/bin/zsh 

PROGRAM_APPNAME=$(basename $0)
PROGRAM_VERSION="1.0.0"
APACHE_LIBEXEC_DIR="${APACHE_PATH}/libexec"

show_help() {
    echo "${PROGRAM_APPNAME} ${PROGRAM_VERSION}" >&2
    echo ""                                      >&2
    echo "Usage  : ${PROGRAM_APPNAME} <version>" >&2
    echo "Example: ${PROGRAM_APPNAME} 5.4.0RC6"  >&2
    exit 1
}


check_php_home() {
    if [[ ! -d ${PHP_VERSIONS} ]]
    then
        echo "Sorry, but ${PROGRAM_APPNAME} requires that \$PHP_VERSIONS is set and points to an existing directory." >&2
        exit 1
    fi
}

check_apache_path() {
    if [[ ! -d ${APACHE_PATH} ]]
    then
        echo "Sorry, but ${PROGRAM_APPNAME} requires that \$APACHE_PATH is set and points to an existing directory." >&2
        exit 1
    fi
}

set_up_apache_module_path() {
    apache_module_path=$PHP_VERSIONS/$PHP_VERSION/libphp5.so
}

check_apache_module_path() {
    if [[ ! -f ${apache_module_path} ]]
    then
        echo "Sorry, apache module not found: $apache_module_path"
        exit 1
    fi
}

check_apache_libexec_dir() {
    if [[ ! -d ${APACHE_LIBEXEC_DIR} ]]
    then
        echo "Directory not found: $APACHE_LIBEXEC_DIR"
        exit 1
    fi
}

replace_apache_module() {
    echo "Copy $apache_module_path to $APACHE_LIBEXEC_DIR/libphp5.so"
    cp $apache_module_path $APACHE_LIBEXEC_DIR/libphp5.so
}

restart_apache() {
    echo "Restarting apache..."
    sudo apachectl restart
}

[ $# != 1 ] && show_help
PHP_VERSION=$1
check_php_home
check_apache_path
set_up_apache_module_path
check_apache_module_path
check_apache_libexec_dir
replace_apache_module
restart_apache

$APACHE_PATHが実はまだ設定されていません。
.zshrcにパスを追加します。aliasも

export APACHE_PATH=/usr/local/Cellar/httpd/2.2.22
alias apache-php-version='zsh ~/bin/apache-php-version'

3.動作確認

DocumentRootにphpinfo()を呼び出すphpを放ってコマンドを実行してみる

$ apache-php-version 5.4.5
Copy /Users/sasakiyasuyuki/.phpenv/versions/5.4.5/libphp5.so to /usr/local/Cellar/httpd/2.2.22/libexec/libphp5.so
Restarting apache...
Password:

http://localhost/phpinfo.phpでバージョンが5.4.5であるのを確認。
5.3snapshotも

$ apache-php-version 5.3snapshot
Copy /Users/sasakiyasuyuki/.phpenv/versions/5.3snapshot/libphp5.so to /usr/local/Cellar/httpd/2.2.22/libexec/libphp5.so
Restarting apache...

http://localhost/phpinfo.phpでバージョンが5.3.16-devであるのを確認。
おkですな。

PHPのバージョンを複数管理する(その1)

PHP5.4はまだ実用しないけど、traitなど新しい機能があるのでcliでは触っておきたい。
今からやろうとしてるFuelPHPは5.3以上でないと動作しなく、FuelPHPの実用も考えているので5.3も入れておきたい。
ということでrbenvならぬphpenvをいれてみることにする。
普段作業メモ残さないのがこちらのアカウントになりますので今回はブログ書きながらの作業となります。

1.Formuraある?

パッケージ管理はbrew使ってます。

$ brew search | grep php

単にbrew searchだけだと現在install可能なformuraが表示されるのだけれどPHPはないので
素直にbrew search phpすると

$ brew search php
josegonzalez/php/php53-pcntl		  josegonzalez/php/php54-http		       josegonzalez/php/php54-ssh2
etc

josegonzalez/phpのformuraを登録する必要があるみたいなのでbrew tapする

$ brew tap josegonzalez/php
Cloning into '/usr/local/Library/Taps/josegonzalez-php'...
remote: Counting objects: 1418, done.
remote: Compressing objects: 100% (675/675), done.
remote: Total 1418 (delta 733), reused 1303 (delta 638)
Receiving objects: 100% (1418/1418), 205.05 KiB | 95 KiB/s, done.
Resolving deltas: 100% (733/733), done.
Tapped 64 formura

Formuraに追加されたらしい

$ brew search php
php53-pspell	      php53-xhprof		php54-inclued		  php54-pcntl		    
etc

これでbrew install する準備が整った
※ついでだけどapacheもinstallしとく

$ brew tap Homebrew/dupes
$ brew install httpd
$ sudo httpd -k start

It works出たらおk

2.phpenv install

$ brew install phpenv
Error: phpenv is a head-only formula
Install with `brew install --HEAD phpenv`
'--HEADつけろと言われた
$ brew install --HEAD phpenv
==> Cloning https://github.com/CHH/phpenv.git
Cloning into '/Library/Caches/Homebrew/phpenv--git'...
remote: Counting objects: 17, done.
remote: Compressing objects: 100% (13/13), done.
remote: Total 17 (delta 3), reused 14 (delta 1)
Unpacking objects: 100% (17/17), done.
==> /usr/local/Cellar/phpenv/HEAD/bin/phpenv-install.sh
==> Caveats
To finish installing phpenv:
 * Add ~/.phpenv/bin to your $PATH
 * Add "eval $(phpenv init -)" at the end of your ~/.bashrc
 * Restart your shell
==> Summary
/usr/local/Cellar/phpenv/HEAD: 5 files, 20K, built in 6 seconds

~/.phpenvができるので.bashrcとか.zshrcに環境変数の初期化とか初期化の設定をする

# rbenv
eval "$(rbenv init -)"
# phpenv
if [ -f ~/.phpenv/bin/phpenv ]; then
    export PATH=$PATH:~/.phpenv/bin
    eval "$(phpenv init -)"
fi

終わったら$ source ~/.zshrcで設定を適用

3.php-build install

$ brew install php-build
==> Downloading https://github.com/CHH/php-build/zipball/v0.8.0
######################################################################## 100.0%
==> Caveats
Tidy is enabled by default which will only work
on 10.7. Be sure to disable or patch Tidy for
earlier versions of OS X.
==> Summary
/usr/local/Cellar/php-build/0.8.0: 46 files, 196K, built in 4 seconds
$ php-build --definitions #ビルドできるバージョン
5.2.17
5.3.10
5.3.11
5.3.11RC1
5.3.11RC2
5.3.12
5.3.13
5.3.14
5.3.15
5.3.2
5.3.3
5.3.6
5.3.8
5.3.9
5.3.9RC3
5.3.9RC4
5.3snapshot
5.4.0
5.4.0RC1
5.4.0RC2
5.4.0RC3
5.4.0RC4
5.4.0RC5
5.4.0RC6
5.4.0RC7
5.4.0RC8
5.4.0alpha3
5.4.0beta1
5.4.0beta2
5.4.1
5.4.1RC1
5.4.1RC2
5.4.2
5.4.3
5.4.4
5.4.5
5.4snapshot

4.php-version install

$ brew install php-version
==> Downloading https://github.com/wilmoore/php-version/tarball/0.9.3
######################################################################## 100.0%
==> Caveats
Add the following script block to `$HOME/.bashrc`, `$HOME/.zshrc`, or your shell's equivalent configuration file.

Change `5.x.x` to the version of PHP you'd like your shell to default to or remove `php-version 5.x.x >/dev/null`
if you do not wish to have a default version of PHP loaded into your `$PATH`. The large comment block is optional:

########################################################################################
# php-version (activate default PHP version and autocompletion)
# PHP_HOME                      => should reflect location of compiled PHP versions
# PHPVERSION_DISABLE_COMPLETE=1 => to disable shell completion
########################################################################################
export PHP_VERSIONS=$(dirname $(brew --prefix php))
[ -f $(brew --prefix php-version)/php-version.sh ] &&
  source $(brew --prefix php-version)/php-version.sh && php-version 5.x.x >/dev/null
==> Summary
/usr/local/Cellar/php-version/0.9.3: 3 files, 20K, built in 3 seconds

php-versionコマンドを使用する際、$PHP_VERSIONの環境変数が設定されている必要があります。
なお、$PHP_VERSIONはインストールされるPHPディレクトリを指定します。
.zshrcもしくは.bashrcに以下のように書きます。

# PHP Install Directory
$PHP_VERSION=~/.phpenv/versions
# terminal起動時にphpの切り替えを行う
source $(brew --prefix php-version)/php-version.sh && php-version 5.3snapshot >/dev/null

何もしないとMacのデフォルトのPHPが使用されます。

5.PHPのビルド

いよいよphp-buildを使ってのPHPビルドになります。
参考サイトではapacheのmoduleだけ有効にしているようで、他のmoduleは?とか思ったけどこのまま進みます。
php-buildからphpをビルドする場合、configureは/usr/local/share/php-build/definitions/5.xのファイルにて設定します。

$ vi /usr/local/share/php-build/definitions/5.3snapshot
configure_option "--with-apxs2" "/usr/sbin/apxs"
install_package "http://snaps.php.net/php5.3-latest.tar.bz2"
install_pyrus
install_xdebug "2.2.0"

したらばLet's コンパイル

$ php-build 5.3snapshot ~/.phpenv/versions/5.3snapshot

コケた。/usr/libexec/apache2/libphp5.soのコピーでPermission Deniedとか出たのでsudoつけてみる。

$ sudo php-build 5.3snapshot ~/.phpenv/versions/5.3snapshot

今度は大丈夫でした。
以降、別バージョンのPHPをビルドすると、/usr/libexec/apache2下に生成されたlibphp5.soが上書きされてしまうので$PHP_VERSIONS下に退避させます。

sudo mv /usr/libexec/apache2/libphp5.so $PHP_VERSIONS/5.3snapshot

同じ要領で5.4snapshotもいれてしまいます。
とトライしたところ、以下のようなエラーが発生

/var/tmp/php-build/source/5.4snapshot/ext/curl/interface.c:2682:5: error: non-void function '_php_curl_setopt' should return a value [-Wreturn-type]
ZEND_FETCH_RESOURCE(sh, php_curlsh *, zvalue, -1, le_curl_share_handle_name, le_curl_share_handle);

バグっぽい。どこがってのはわからないけど、5.4.5はビルドできたのでまぁいっか。

6.php-versionで切り替えみる

今現在は5.3snapshotが適用されています。

$ php -v
PHP 5.3.16-dev (cli) (built: Aug 20 2012 06:49:39) 
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies
    with Xdebug v2.2.0, Copyright (c) 2002-2012, by Derick Rethans

これをphp-versionで5.4.5に切り替えてみます。

$ php-version 5.4.5
SWITCHED PHP VERSION TO: 5.4.5
NEW PHP ROOT DIRECTORY : /Users/sasakiyasuyuki/.phpenv/versions/5.4.5
$ php -v
PHP 5.4.5 (cli) (built: Aug 21 2012 23:22:25) 
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies
    with Xdebug v2.2.0, Copyright (c) 2002-2012, by Derick Rethans

おおおーーー。できた。

本記事はいったんここで終わりにし、次回、Apacheモジュールの切り替えと、Pyrusでphpunitの導入を実際に試してみます。

補足 デフォルトのconfigure option

configure-optionはapxs2しか指定しませんでしたが、configure-optionのデフォルトはこちらになります。

$ vi /usr/local/Cellar/php-build/0.8.0/share/php-build/default_configure_options
--without-pear \
--with-gd
--enable-sockets
--with-jpeg-dir=/usr
--with-png-dir=/usr
--enable-exif
--enable-zip
--with-zlib
--with-zlib-dir=/usr
--with-kerberos
--with-openssl
--with-mcrypt=/usr
--enable-soap
--enable-xmlreader
--with-xsl
--enable-ftp
--enable-cgi
--with-curl=/usr
--with-tidy
--with-xmlrpc
--enable-sysvsem
--enable-sysvshm
--enable-shmop
--with-mysql=mysqlnd
--with-mysqli=mysqlnd
--with-pdo-mysql=mysqlnd
--with-pdo-sqlite
--enable-pcntl
--with-readline
--enable-mbstring
--disable-debug

バージョンごとに設定するのが面倒だという人はこちらに書くのもいいかもですね。

世の中は意外と甘かった

 先週書いたブログですが、思いの他多数の情報が寄せられ僕感激(涙

一番いいのはこのブログ読んでくれた地元のエンジニアが一緒にやりましょうとコンタクトとってくれるのがいいのだけど世の中そんなに甘くはないよね

世の中は意外と甘かった(笑)

県内県外問わず色んな方からメッセージが寄せられ、青森で現在行われてる勉強会の情報や、これから勉強会を行うにあたってのアドバイスなど教えていただきました。
感謝感謝。

せっかくですので、現在青森(青森市中心)にて行われている勉強会について
こちらで紹介させてください。

1.東北セキュリティ情報勉強会
 第8回は青森開催!!!

デザイナや開発系の方へ、スマートフォンセキュリティの実情と対策、その他気を付ける点について共有できたらと思います。

だそうで。青森市のシンボル的スポット「アスパム」で開催されますので、県外の人も観光がてらに是非!!!

2.Ruby勉強会@青森
 8/18日(土)に勉強会がありますねー > http://www.facebook.com/events/405721746157728/
 ガチでRuby始めようと思っているので初学者だけど出る!!!

3.WDHA
 今回は東北セキュリティ情報勉強会と合同でやるそうで。8月は自習とか。。。
 前回は「一歩先行く!ツール活用で製作効率アップ」でした。
 これ聴きたかったなぁー。⇒⇒⇒「HTML5/Sass/CoffeeScriptーツールを活用した、Webサイト制作新時代」

4.webA
 コンセプトは「Webに楽しく触れ合おう」みたいなノリでWeb初学者にとても優しい勉強会のようです。
 座談会、おやつ交流会などがあるのがポイント!もうなんか和気藹々感が漂ってますよね。

以上でした。

そのうち自分でも何か主催できたらなーと思いつつ、今はほったらかしにしてた仕事の企画書を作らねば。。。

うずうず・・・うずうず・・・

勉強会したい出たい!
ライトニングトークしたい聞きたい!

どうなってるんだ青森は
IT勉強会カレンダー
こんちくしょー

青森、弘前市全てのエンジニア合わせると1000人とか超えると思うんだけど
表立った活動(Facebook, Twiter, ブログ)をしているエンジニアが見つからない

セミナーもあるにはあるんだけど、
情報セキュリティなんちゃらとか、クラウド活用なんちゃらとか
たっくさん説明を練習してきた人が黙々と説明し続ける
涙も笑いもないセミナーなんかに興味なんかない訳ですよ

という感じで早くも詰んでしまったので
自分で何とかする方法を考える

まず勉強会を開催するにあたって人を集めなきゃならないんだけど、
「来てくれる人」「発表してくれる人」を探すのがこれまた大変
上でも書いてるようにネットで見つからないときたもんだ

そこで以下の方法を考えてみた

1.母校でプログラミング講師(無料)
 学生に対してアプローチし、コネクションを作っておいて
 県内就職した学生を勉強会に引っ張りこむ案
 母校の先生には提案はしたんだけれども結果は現在保留中
 1ヶ月待って返信ないからダメかな。もう夏休み突入しただろうし
 
 別の専門学校にも提案してみるかはちょっと検討中
 
2.企業へ直接アタック
 「市内のエンジニアを募って勉強会を開催したいと考えています。
  つきましては、勉強会に参加してくださるエンジニアをご紹介していただけないでしょうか?」
 んーーーーー。なんか怪しいよこれ。人事の人が見たらヘッドハントされるんじゃねとか思われそう。
  
 「市内のIT企業が協賛する勉強を企画しています。ご協力いただけないでしょうか?」
 怪しくはないけど、自社の許可がいるな。何よりその後のやり取りが面倒くさそう。
 純粋に成長志向が強いエンジニアと勉強したいだけだから、
 正直企業にはあんまり介入してほしくないというのが正直なところ。
 理想は「好きだからやってる勉強会」

・・・

がぁーっと書いてみたけど、イマイチ効果的な集客方法がわからん

一番いいのはこのブログ読んでくれた地元のエンジニアが
一緒にやりましょうとコンタクトとってくれるのがいいのだけど
世の中そんなに甘くはないよね

ブログ名も
青森県のエンジニアをブログで探す人がいたらHitするように
「片田舎で暮らすエンジニアの雑記」から
「青森で暮らすITエンジニアのブログ」に変更した
(「片田舎 エンジニア」でググるとトップに出てたのに。ぬぐぐぅ。。)

そんな感じで地元のエンジニアの方で勉強会に参加、
主催してみたいという方がいたらぜひとも私までご連絡ください。
プロフィールページにてメール、Twitter, Facebookを公開しています。

iTerm2 + oh my zsh + tmuxで快適なターミナル環境を構築

MacBookProを購入してから2週間くらいたったけど、あんまり触れていないのですorz
普段はターミナルで作業をすることがほとんどなので、まずはターミナル環境を整えるところから。。。

iTerm2

デフォルトのTerminal.appでもよいけど、ネット徘徊するとiTerm2使っている人が多いのでiTerm2にしてみる。
インスコは至って簡単。こちらからiTerm2のzipをダウンロードして解凍。中にあるiTerm2をアプリケーションに突っ込めばおk。

iTerm2のカラーテーマ

vimはもっぱらmolokaiのカラースキーマを使っているのでターミナルもそうする。
molokaiテイストのテーマはここからダウンロード。(getafe.itermcolorsというファイルがiTerm2のカラーテーマ)
iTerm2を起動して、Profiles->Edit Profiles->ColorsタブのLoad Preset...からimportでダウンロードしたテーマをロードでおk

zsh

ずっと憧れてたzshだけど、「漢のzsh」シリーズ読んで敷居が高いというか、なんというか。コマンド補完とか使えりゃ十分なんで、oh-my-zshいれておすまい。
インスコこちらを参考にさせていただきました。
自分でいじったところといえばテーマぐらいですね。楽しく快適に作業するためには見た目重要。
oh-my-zshでも40種類ぐらいのテンプレートを用意してくれてますので、気にいるものがあればいいですね。
テーマのサンプルはこちらで確認できます。(私は「simple」にしました)

tmux(terminal multiplexer)

ターミナルマルチプレクサ(響きがかっこいいです☆)。zshであーだこーだやっているうちにGNU Screenがーみたいなのに行き着いて、最近はtmuxがーみたいなノリでtmuxいれてみました。
フルスクリーンアプリケーションでターミナルのパネル分割とか複数ウィンドウ管理とかいい感じです。
キーバインドvimテイストにして一体感抜群。
インスコこちらを参考にさせていただきました。
iTerm2と同じところにあるtmuxを使うべきか悩んだのですが、パッケージ管理が複雑になりそうなので、homebrewでインスコ

キーバインドは、半分以上パクったけど、今回はちゃんと試した(つもり)
いつもは試さずに丸パクリしているので自分成長したなーと。
~/.tmux.conf

# prefix1キー
set-option -g prefix C-t
unbind-key C-b
bind t send-prefix

# Loading .tmux.conf
bind r source-file ~/.tmux.conf; display-message "Reload Tmux Config"
# utf8 enabled
set-window-option -g utf8 on

# View
# ステータスライン更新間隔(秒)
set -g status-interval 5
set -g status-left-length 100
set -g status-right-length 50

set-option -g set-titles on
# www1.hoge.com→www1のみ表示。
set-option -g set-titles-string "@#(hostname | sed 's/\\\\..*//')"

# ステータスラインカスタム関連
set -g status-bg black
set -g status-fg white
set -g status-attr dim
# 左部:whoami@hostname
set -g status-left '#[fg=green,bold][#20(whoami)@#H]#[default]'
# 右部:[2011/03/06(Sun)20:21]
set -g status-right '#[fg=green,bold][%Y/%m/%d(%a)%H:%M]#[default]'
set -g message-attr bold
set -g message-fg white
set -g message-bg red

set -g pane-active-border-fg white
set -g pane-active-border-bg black

set-window-option -g mode-bg white
set-window-option -g mode-fg black
set-window-option -g window-status-bg black
set-window-option -g window-status-fg white
set-window-option -g window-status-current-bg green
set-window-option -g window-status-current-fg black
set-window-option -g window-status-current-attr bold

# Key Bindings
# vertical split window
bind C-v split-window -h
unbind-key '"'
# horizontal split window
bind C-s split-window -v
unbind-key %
# open last window
bind C-t last-window
# new window(default)
bind c new-window
# pane to window
bind b break-pane

# Pane Size
bind -r H resize-pane -L 6
bind -r L resize-pane -R 6
bind -r J resize-pane -D 6
bind -r K resize-pane -U 6
# Pane Move
bind -r h select-pane -L
bind -r j select-pane -D
bind -r k select-pane -U
bind -r l select-pane -R

# Pane exit
bind q kill-pane
# Window exit
bind Q kill-window

# Display Pane Number
bind i display-panes

# copy mode
set-window-option -g mode-keys vi
bind -t vi-copy v begin-selection
bind -t vi-copy y copy-selection
bind -t vi-copy Y copy-line
bind / list-keys -t vi-copy

出来上がったものがこれ

そのうちdotfiles管理もやっていきまつ。

初MacBookをいきなりSSD換装してみた

念願の初MacBookProを購入!!

MBP13インチが刷新されると噂されてたのですが、
先日のWWCD 2012の発表では
Retina以外はマイナーアップグレートみたいなもんじゃないですか。

MBPがMBAのように薄くなって、HDDからSSDになることを望んでいたのに。。。
(いやそれMBAやんと思ったけど)

Newモデルは高いので整備済のページ見てみたら2つ前のだけど、MBPが安い。
C2D時代のProより安い。
SSDも安くなってきてるし、換装したら結構使えるんでないかと思って
頭を床にスリスリしてポチっと。

ついでにパーツとかもポチっと。

やりたいことはこんな感じ
・メモリ増設4G⇒8G
・起動ディスクをHDD⇒SSDに変更
・DVD使わないので外したHDDをマウント

必要なもの
CFD Elixir W3N1333Q-4G(2枚入り)  3,000円ちょっと
Crucial M4 128GB CT128M4SSD2 10,000弱
SlimBay9.5SA-HDD.SA 2,280円
トルクスドライバーセット(使うのはT6) 1,500円ぐらい
・精密ドライバー(使うのは#0) 持ってた
という感じに2万円以内に抑えることができた。

メモリ増設の仕方は他のノーパソも一緒だけどMacさんのは親切にちゃんとこういうサイトもあるし、マニュアルもある。

SSD換装はやり方はこれに書いてた。
MacBookのHDDをSSDに換装してみました。

基本これの通りにやればできると思うんだけど、そうはいかないところが何点か

1.Lionの起動ディスクがない!?
 SSDに換装してから気づいたんだけど、起動ディスクがないので何もできなくなった。(Lionが最初からインストールされているPCはそうみたい)
 USBメモリを起動ディスク代わりにするやり方があったので、そちらで対応。
 (最初にSSDとDVD/HDD換装すれば元々のリカバリ領域使えるけど、いきなり全部換装するなんてワイルドなことはできなかった。)
 なくなくHDDに戻し、起動後、USBのリカバリディスクを作ってOSの再インストール。
 山ライオンが出たら無料でダウンロードできるはずなので、その時に起動ディスクを作っておくとしよう。
 USBリカバリディスクの作り方はこちら

2.SSDが読み込まれない!?
 OSインストールしようとしたけど、ディスクが選択できない。。。。。
 SSDをフォーマットすんの忘れないでね(笑)

3.裏蓋がしまらない!?
 テクノハウス東映で買ったベイマウンタを載せてみたのはいいけど、裏蓋がしまらない。
 下の画像のように、ニッパーとかでいらない部分を切り落とすといい感じに収まってくれました☆(左:before、右:After)

完成するとこんな感じに(左:before、右:After)

換装の結果はというと。。。。

爆速!!!!!

パスワード入力画面まで換装前は30秒かかっていたのが、10秒になりました。

AppleStoreで換装等をお願いすると高くついてしまうので(保障分だと思えばいいんだけど)、
安く快適にMacBookを使いたいという人は、型落ちを購入して自分でいじくるのがお得かもしれません。
(自分で換装すると保障が利かなくなるのでそこは自己責任でよろしく!)

私の場合、本体込み計85,000円くらいで安くて快適なMacBookProが出来上がりました。ちゃんちゃん

vimをちまちま使いはじめて3ヶ月。ちょっと整理してみるよ

今年からjavaでお仕事をすることがなくなり、IDE(eclipse)からvimに乗り換えました。
ここんところ、vimrcの設定値やpluginの管理などが煩雑になってきたので自分ルールを決めて
快適なvimライフを送りたいと思います。

1.今回の作業の目的

  • 自宅, 会社、PC移行時など同じ環境を作りたい、同期させたい
  • Plugin管理の煩雑さを解消
  • 設定値の整理(ファイル細分化とか)
  • 会社でvimを広める際に僕の環境を簡単にコピーさせる

ヒントになったやりとりがコレ↓

@tazyamah ありがとう!

2.環境というか必要なもの(Windows)

 インストールは「msysGitがUTF8日本語ファイル名に対応」を見てね

3.オールインワンパッケージの解凍

 vim73-aio.zipをCとかDドライブ直下に解凍する
 pluginを足す際は$VIMRUNTIME/pluginとかに配置するものなのだけど、
 この方法だとplugin等の管理が大変になるのでVIMランタイムは解凍後は一切触らないようにします。
 また、アップデートの際は新しいパッケージを解凍してそのまま上書きしてやれば大丈夫です。

4._vimrc,_gvimrc

オールインワンパッケージを展開するとsample_vimrc, sample_gvimrcというファイルがあります。
これをプロファイルディレクトリへ移動してリネームします。(Windows7の場合はC:\User\
_sample_vimrc → _vimrc
_sample_gvimrc → _gvimrc
_(アンダースコア)つきvimrcはUnixでいうところの.vimrcです。Windowsの場合は_(アンダースコア)つきのvimrcがユーザ固有のvim設定となります。
設定値に関してまだそこまで詳しくはないので基本はsampleをそのまま使っていきます。

5.日本語入力固定モード

 ものすごく煩わしい日本語入力時の対応。僕の場合、IMEをONにしておいて、IMEの切り替えをするようにしています。
 (ESCとIMEをよくミスタッチしてしまうので)
im_control.vimをダウンロードして
ユーザープロファイルディレクトリの.vim/pluginにおきます。(VIMRUNTIME上には置かない)
_gvimrcに

source ~/.vim/_gvimrc_im

で、.vim以下に_gvimrc_imを作って

"----------------------------------------
" 日本語入力固定モード
"----------------------------------------
source ~/.vim/plugin/im_control.vim
" 「日本語入力固定モード」の動作モード
let IM_CtrlMode = 4
" 「日本語入力固定モード」切替キー
inoremap   =IMState('FixMode')
" 「日本語入力固定モード」のバッファローカルモード
let b:IM_CtrlBufLocal = 1

でOK。(im_control.vimはconsoleでは使えないのであくまでもgvim用のファイルに書きます)
参考元はこちら

6.plugin管理

最初はvundleで管理しようと思ったんだけど、
@tazyamah「時代はNeoBundleですよ」
ということらしいので、plugin管理にはneobundleを使うよ!
install、使用方法はこちら
_vimrcの整理がてら僕の環境は以下のようになりました。
まずはgitでneobundle.vimをclone

$ mkdir -p ~/.vim/bundle
$ git clone https://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim

その後、_vimrcに

source ~/.vim/_vimrc_neobundle

で、~/.vim/_vimrc_neobundleに

set nocompatible
filetype off

if has('vim_starting')
  set runtimepath+=~/.vim/bundle/neobundle.vim

  call neobundle#rc(expand('~/.vim/bundle'))
endif

" このへんは必須です!
" let NeoBundle manage NeoBundle
" required! 
"NeoBundle 'Shougo/neobundle.vim'
" recommended to install
NeoBundle 'Shougo/vimproc'
" after install, turn shell ~/.vim/bundle/vimproc, (n,g)make -f your_machines_makefile
NeoBundle 'Shougo/vimshell'
NeoBundle 'Shougo/unite.vim'

" ここから自分で使うplugin
" とりあえずいつもいれるzen-codingを
NeoBundle 'git://github.com/mattn/zencoding-vim.git'

filetype plugin on
filetype indent on

したらばvimを起動してコマンドモードで

:NeoBundleInstall

その後、vimを起動しなおしーの挿入モードで

html:4s

を入力して

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
	<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
	<title></title>
</head>
<body>
	
</body>
</html>

出た!!!
やばい。bundle気持ちよすぎ

7.整理

ここまでの構成をまとめると、ユーザプロファイルディレクトリ以下の状態はこうなった
https://github.com/ya-sasaki/windows-vim

プロファイルディレクトリ
├─.vim " ユーザランタイムディレクトリ
│ ├─bundle " bundle管理フォルダ
│ ├─plugin " bundle管理外のplugin
│ | └im_control.vim " 日本語固定入力用
│ ├_gvimrc_basic " gvim基本
│ ├_gvimrc_im " IM設定
│ ├_vimrc_basic " gvim,vim基本
│ └_vimrc_neobundle " neobundle設定
├_gvimrc " gvim用ユーザ設定
└_vimrc " gvim,vim用共通ユーザ設定
  • pluginは基本bundleで管理
  • それ以外のものは基本.vim下にフォルダ掘ったりしながらsource ~/.vim/hoge_dir/hoge_pluginで管理していく
  • _vimrc,_gvimrcにはごちゃごちゃ書かない
  • 必要に応じて設定値は.vim下にカテゴライズしながら書いていく

8.環境構築 from git

ここまで作った環境は一旦ご破算して、オールインワンパッケージが既にある前提で環境構築してみる。
一旦任意のディレクトリにgit://github.com/ya-sasaki/windows-vim.gitをcloneする

$ mkdir work
$ cd work
$ git clone git://github.com/ya-sasaki/windows-vim.git

clone後は、windows-vim下の.vimフォルダ、_vimrc、_gvimrcをユーザプロファイルディレクトリへコピペ
neobunleがまだ入っていないのでcloneする

$ mkdir -p ~/.vim/bundle
$ git clone https://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim

終わったらvimを起動して:NeoBundleInstall
わぁーい簡単簡単