Mac OS X(Lion)にrubyをインストール

前提:Homebrew、rbenvがインストールされていること。

1. インストール可能なversionの確認


$ rbenv install
usage: rbenv install VERSION
rbenv install /path/to/definition

Available versions:
1.8.6-p383
1.8.6-p420
1.8.7-p249
1.8.7-p302
1.8.7-p334
1.8.7-p352
1.8.7-p357
1.8.7-p358
1.9.1-p378
1.9.2-p180
1.9.2-p290
1.9.2-p318
1.9.2-p320
1.9.3-dev
1.9.3-p0
1.9.3-p125
1.9.3-p194
1.9.3-preview1
1.9.3-rc1
2.0.0-dev
jruby-1.6.3
jruby-1.6.4
jruby-1.6.5
jruby-1.6.5.1
jruby-1.6.6
jruby-1.6.7
jruby-1.6.7.2
jruby-1.7.0-preview1
maglev-1.0.0
rbx-1.2.4
rbx-2.0.0-dev
ree-1.8.6-2009.06
ree-1.8.7-2009.09
ree-1.8.7-2009.10
ree-1.8.7-2010.01
ree-1.8.7-2010.02
ree-1.8.7-2011.03
ree-1.8.7-2011.12
ree-1.8.7-2012.01
ree-1.8.7-2012.02

2. 最新versionをインストール


$ rbenv install 1.9.3-p194
Downloading http://pyyaml.org/download/libyaml/yaml-0.1.4.tar.gz...
Installing yaml-0.1.4...
Installed yaml-0.1.4 to /Users/UserName/.rbenv/versions/1.9.3-p194
Downloading http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p194.tar.gz...
Installing ruby-1.9.3-p194...
Installed ruby-1.9.3-p194 to /Users/UserName/.rbenv/versions/1.9.3-p194

3. 現在のrbenvにインストールされているrubyのversionを確認


$ rbenv versions
1.9.3-p194

4. インストールしたrubyのversionに変更


$ rbenv global 1.9.3-p194
$ rbenv rehash

5. rubyのversionの確認


$ ruby -v
ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-darwin11.4.0]

Mac OS X(Lion)にrbenvをインストール

前提:Homebrewがインストールされていること。
Mac OS X(Lion)にHomebrewをインストール - Change The Worlds

1. rbenvをインストール


$ brew install rbenv
==> Downloading https://github.com/sstephenson/rbenv/tarball/v0.3.0
######################################################################## 100.0%
==> Caveats
To enable shims and autocompletion, add rbenv init to your profile:
if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi
==> Summary
/usr/local/Cellar/rbenv/0.3.0: 32 files, 160K, built in 2 seconds

2. 続けて、ruby-buildをインストール


$ brew install ruby-build
==> Downloading https://github.com/sstephenson/ruby-build/tarball/v20120524
######################################################################## 100.0%
==> ./install.sh
/usr/local/Cellar/ruby-build/20120524: 45 files, 196K, built in 2 seconds
3. .bash_profileにパスを通す。

$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> .bash_profile
$ echo 'eval "$(rbenv init -)"' >> .bash_profile
$ source .bash_profile

4. readlineをインストール


$ brew install readline
==> Downloading http://ftpmirror.gnu.org/readline/readline-6.2.tar.gz
######################################################################## 100.0%
==> Downloading patches
######################################################################## 100.0%
######################################################################## 100.0%
==> Patching
patching file vi_mode.c
patching file callback.c
patching file support/shobj-conf
patching file patchlevel
==> ./configure --prefix=/usr/local/Cellar/readline/6.2.2 --mandir=/usr/local/Cell
==> make install
==> Caveats
This formula is keg-only, so it was not symlinked into /usr/local.

OS X provides the BSD libedit library, which shadows libreadline.
In order to prevent conflicts when programs look for libreadline we are
defaulting this GNU Readline installation to keg-only.

Generally there are no consequences of this for you.
If you build your own software and it requires this formula, you'll need
to add its lib & include paths to your build variables:

LDFLAGS -L/usr/local/Cellar/readline/6.2.2/lib
CPPFLAGS -I/usr/local/Cellar/readline/6.2.2/include
==> Summary
/usr/local/Cellar/readline/6.2.2: 30 files, 1.6M, built in 21 seconds

Mac OS X(Lion)に開発環境を構築する

以前Windowsマシンに Redmine の開発環境を構築しようとして失敗したので、Mac Book Air に開発環境を構築することに。
色々とインターネットの海の中を彷徨ってどうにか出来たので、備忘録として残しておく。以下は、その方針。

  • ソフトウェアやライブラリはHomebrewでパッケージ管理する
  • RubyおよびRailsはrbenvで管理する

Homebrewは依存関係にあるソフトウェアが既に導入されていた場合、ダブってインストールされないのでMacportsよりインストールやアップデート効率が非常に良い点という情報があったので、Macportsではなく、Homebrewにすることにした。
rbenvはシェル環境を汚さないので、最近はこちらを使っている人が多いという情報があったので、新規に入れるならこっちかなと考えてこちらにした。
rbenvとRVM との違いについてはこちらを参照した。

Homebrewのインストール

Mac OS X(Lion)にHomebrewをインストール - Change The Worlds

rbenvのインストール

Mac OS X(Lion)にrbenvをインストール - Change The Worlds

rubyのインストール

Mac OS X(Lion)にrubyをインストール - Change The Worlds

Mac OS X(Lion)にHomebrewをインストール

前提:Xcodeがインストールされていること。

1. GithubからrubyスクリプトでHomebrewをインストール


$ ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/master/Library/Contributions/install_homebrew.rb)"
==> This script will install:
/usr/local/bin/brew
/usr/local/Library/Formula/...
/usr/local/Library/Homebrew/...

Press enter to continue
==> /usr/bin/sudo /bin/mkdir /usr/local
Password:
==> /usr/bin/sudo /bin/chmod g+rwx /usr/local
==> /usr/bin/sudo /usr/bin/chgrp admin /usr/local
==> Downloading and Installing Homebrew...
==> Installation successful!
You should run `brew doctor' *before* you install anything.
Now type: brew help
$ brew doctor

brew doctorでエラーがないことを確認してから続けること。自分の環境ではMacportsを削除していない、Gitの設定が残っているといったエラーが出たので、両方とも削除した。

2. Gitをインストール


$ brew install git
==> Downloading http://git-core.googlecode.com/files/git-1.7.10.4.tar.gz
######################################################################## 100.0%
==> make prefix=/usr/local/Cellar/git/1.7.10.4 CC=/usr/bin/llvm-gcc CFLAGS=-Os -w
==> make CC=/usr/bin/llvm-gcc CFLAGS=-Os -w -pipe -march=core2 -msse4 LDFLAGS=
==> make clean
==> Downloading http://git-core.googlecode.com/files/git-manpages-1.7.10.4.tar.gz
######################################################################## 100.0%
==> Downloading http://git-core.googlecode.com/files/git-htmldocs-1.7.10.4.tar.gz
######################################################################## 100.0%
==> Caveats
Bash completion has been installed to:
/usr/local/etc/bash_completion.d

The OS X keychain credential helper has been installed to:
/usr/local/bin/git-credential-osxkeychain

The 'contrib' directory has been installed to:
/usr/local/share/git-core/contrib
==> Summary
/usr/local/Cellar/git/1.7.10.4: 1173 files, 23M, built in 41 seconds

完了後、バージョンを確認

$ brew list -version
git 1.7.10.4

3. Homebrewの最新化


$ brew update
Initialized empty Git repository in /usr/local/.git/
remote: Counting objects: 69653, done.
remote: Compressing objects: 100% (34945/34945), done.
remote: Total 69653 (delta 46673), reused 54606 (delta 33910)
Receiving objects: 100% (69653/69653), 9.97 MiB | 1.85 MiB/s, done.
Resolving deltas: 100% (46673/46673), done.
From https://github.com/mxcl/homebrew
* [new branch] gh-pages -> origin/gh-pages
* [new branch] master -> origin/master
HEAD is now at 57449d2 the_silver_searcher 0.7.2
Already up-to-date.

4. .bash_profileにパスを通す


$ vi .bash_profile
export PATH=/usr/local/bin:$PATH
$ cat .bash_profile
export PATH=/usr/local/bin:$PATH

日本鼻メガネの会 4時限目 に参加してきた。 #日本鼻メガネの会 #riskrisk #oLo

Togetter

まだないみたい。

6/30(土) 新宿にて行われた『日本鼻メガネの会 4時限目』に参加してきた。

参加するまで

参加申し込みしていたのをすっかり忘れてリマインダーメールで気付いたり、[twitter:@amameci]さんと[twitter:@macneko_ayu]さんが参加していないことに気付いたり、[twitter:@orangeclover]さんから頂いていた転職祝いを受け取っていなかったことに気付いたり、それをネタに[twitter:@inda_re]さんが絡んできたり*1、相変わらず新宿の地理に疎くて、違う出口から出て遅れたりしてた。

1次会

  • 1次会の会場に第1回目と同じ珈琲&無国籍ダイニング海峡新宿靖国通り店!
    • そうあのどでかストラップ唐揚げの出るあの店である!
    • 後カオスな場にする店でもあるぞ!
  • いつも様に『日本鼻メガネの会で予約していると思うんですが…』と店員に伝えると満面の笑みで会場に案内される。驚きもせずにこれとは…この店員できるw
  • 座席表はきっと、[twitter:@orangeclover]さんが作ってくれるだろう、多分、きっと
  • 開始の挨拶 [twitter:@riskrisk]さん
    • 恒例の『鼻メガネつけろや、ごらぁ!*2』で始まる
    • 前回色々言ったら、方々から色々言われたので、今回は初心に帰って、ただの飲み会だYo!
    • 名札とか疲れたから今回はないからね!
    • ってことで乾杯
  • しかし、それじゃ終わらないのがオレたちの“日本鼻メガネの会”だ!!
    • 店員が持ってくる料理が一皿6名盛り
    • でも、会場は1机3〜4人
    • 会場の店員にまで普通じゃない感を徹底するとは…[twitter:@riskrisk]、[twitter:@inda_re]恐ろしい子…。
    • とりあえず眼の前の飲み物、食べ物をお腹に詰めるだけの簡単なお仕事をしつつ、参加者同士の語らいの時間
    • 名古屋からT○Y○T○系で働いている人が参戦していた!
    • 拐かすお誘いした[twitter:@orangeclover]△!
    • ○O○O○A系の方がちょうど隣の机に移動され、そこでは“スクラム”、“野中先生”といったキーワードでお話していた様だ
    • Lean(トヨタ生産方式) meets Scrum? って感じ?
    • その机に居た[twitter:@inda_re]さんが『ちぇんわさんの知っているよね?』、『ちぇんわさんもやった?』とか話を振ってくるのだが…正直周囲が煩過ぎて話が聞こえないww
    • あれは所謂甚振りかわいがりなので、良い反応できなくてノープロブレムだったに違いない!
  • 喉が痛かったので、飲み会なのに烏龍茶と緑茶を啜ってたアカウントが自分
  • 途中、[twitter:@yujiorama]さんの転職を聞いたり、以前待ち合わせにミスったのが自分の勘違い*3だったことが分かったり、色々と踏んだり蹴ったりなことが分かった一日なのであった、まる
  • 体調が悪いので、2次会(ダーツ組とカフェ組があった模様)には参加せず、そのまま帰宅←今ここ

さいごに

体調が万全の状態ではない状況での参加だったが、下手な勉強会よりもある意味実りの大きい飲み会だった。今後も継続して欲しいなぁと思うのでだけではなく、協力とかもしたいなぁする。[twitter:@riskrisk]さん、[twitter:@inda_re]さん、そして、参加してくれた皆さんに感謝。また次回もよろしく!

*1:でもあなたからの転職祝いではないんだよ?w

*2:意訳

*3:自分も@付きで入っているけど、自分宛ではないメンションを自分宛だと勘違いしていた

DevLOVE vs スクラム道に協賛してきた。#devlove #scrumdo #devlovedo

こくちーず

Togetter

6/25(月)は株式会社 VOYAGE GROUPを会場に開催された『DevLOVE vs スクラム道』を手伝ってきた。

オープニング

集合時間になっても主催者(主にDevLOVE側)が集まらず、ちょっとばたばたしたが、ほぼ参加者は定刻通りに集まられたので、会場説明及びスクラム道、DevLOVEのコミュニティ紹介からの開始。スクラム道の紹介プレゼンは直前まで作っていた様子、DevLOVEの紹介プレゼンは駆け足での紹介だったの詳細が分からなかった。

本編1部-ディスカッション

『フィッシュボウル式ワールドカフェ』ということで、それぞれのコミュニティから代表が出て、ディスカッションをし、その後に参加者でのダイアログで進めることに。
最初のテーマは『理想のソフトウェア開発とは?』で、スクラム道側は[twitter:@ryuzee]さん、[twitter:@takaesu0]さん、[twitter:@tw_takubon]さん、DevLOVE側は[twitter:@take3000]さん、[twitter:@bash0C7]さん、[twitter:@crea_memo]さんでのディスカッション。
『作らないのが理想のソフトウェア開発』、『嫌、良いものを作るのがだ』、『超能力でユーザが欲しいものをバンっと出すのが最強(最高?)』、『派遣だからアジャイルできない』、『派遣とか関係ない。オレのところは派遣の人と一緒にアジャイルやってたよ。意識の差でしょ』、『あぁ〜手懐けてたんですね』等等、DevLOVE vs スクラム道というか内部でも対立があったので、各メンバによって、軸が異なるのだなぁといったところ。それぞれコンテキストも異なるので、それは当然かとも思った。

本編1部-ダイアログ

参加者同士のダイアログの後は『理想のソフトウェア開発の話題でスクラムについて出てきた人どんだけいる?』という質問に対して、3割程度が挙手をし、『スクラム道、恐るるに足らず』と質問者が言っていたら『理想のソフトウェア開発の話題で楽しく開発するが出てきた人どんだけいる?』という質問に対しても3割程度しか挙手されず、『どっちもどっちだね』という話になったのが一番印象に残ったw

本編2部-ディスカッション

続いてスクラム道側は[twitter:@amameci]さん、[twitter:@kappa4]さん、[twitter:@changeworld]、DevLOVE側は[twitter:@jun116]さん、[twitter:@hyoshiok]さん、[twitter:@agnozingdays]さんでのディスカッション。
『受託で理想のソフトウェア開発はできるのか?』について色々ディスカッションをしたんだけど、かなりぐだぐだになり、[twitter:@hyoshiok]さんからも『このテーマつまんないね』という言葉が出て、別テーマにw
アジャイルを実践できる現場かどうかを見極めるにはどうすれば良いですか?』という求職中の方からの質問や『アジャイルでこれは外せないものは何ですか?』といった質問に代表者がそれぞれ答えていく形式にいつの間にか変わっており、また周囲からもスクラム道、DevLOVEのスタッフからの良い意味での野次(『この質問の定義をまずしよう。話はそれからだ』とか『見極めるって何? 見れば分かるもんなのそれ?』)が飛び交い、かなりカオスな状況になっていたw
とそんなカオスな状況ではどうなるのか明白なことで、第2部はディスカッションだけでタイムアップとなった。タイムボックス重要だよね?w

参加しての感想

今回主催者サイドとして、参加したが、コミュニティ色はあまりなく、うまくコミュニティ同士の対立という形にはならなかった。ただ、やはりコミュニティに入って活動している人たちはそれぞれの想いがかなり強い人たちなので、こういった場でディスカッションをさせるのは良いものだなぁと感じた。次回も開催できるか分からないがそれに向けて協力していこうと思う。

最後に

最後に企画を出してくれた[twitter:@papanda]さん、他DevLOVE、スクラム道のスタッフの皆さん、そして参加者の皆さんありがとうございました。
また、素晴らしい会場を提供してくれた株式会社 VOYAGE GROUP様に感謝致します。

優れたコードを書く切欠を与えてくれる本である「リーダブルコード」


この本は本当に「読み易く」「面白い」本だった。
本書は名前もさることながら、目的も

本書の目的は、読みやすいコードを書くことである。

という具合に非常に「読み易い(理解し易い)」ものだ。また、本の中に1〜2週間程度で読んで欲しいと書かれていたが、届いてから4日、月曜日と水曜日は勉強会と懇親会に参加したので実質2日で最後まで読む事ができた。というか気になってしまって読み切ってしまったというのが正しいだろう。
自分もエンジニアの端くれとして、幾つかの原則に従ってコードを書いてきた。それは「グローバル変数は悪だ」、「短いことは良いことだ」、「コメントは分かる様に書く」等々。

しかし、本書を読み進めていくと、従っていたそれらが実はズレているということがまざまざと分かる。それも納得いかないというものではなく、その考えが自然と腹に落ちていくものばかりなのだ。

例えば、P.85 今も「ヨーダ記法」は便利なの?がそれだ。ヨーダ記法というのは、
if (NULL == obj) ...
という順番で書く記法である。
これは
if (obj == NULL) ...
を意図して書いたコードが以下の様に書く人が多かったので、
if (obj = NULL) ...
自分の周囲に提案していた書き方である。ヨーダ記法という名称は自分も知らなかったが、他にもされている人がいたのだろう。これを本書では左側の値は「調査対象の式」で変化するもの、右側の値は「比較対象の式」であまり変化しないものの方が読み易いというのだ。それも実例を交えて説明するので、ガツンっと来る。それも『じゃぁ、バグが出るのと、読み易いのどっちがいいんだい?』と思う読者(=自分)の反論を論破することまで書いてあり、納得感が非常に強かった。

他にも、8.4 短絡評価の悪用もそうだ。優秀な人のコードを読むとかなり簡潔に書かれていることが多い。そういうのを見ると、『やはり達人はロジックを簡潔なコードに落とし込むものなんだ。それが達人の証なんだ』と思う厨二病患者な読者(=自分)の考えを打ち砕いてくれる。著者が以前書いた同じ処理をする1行のコードと、2行のコードを並べて、どちらが読み易いか?理解し易いか?を例示するのだ。これまたガツンっと来る説明があって

どうして1行で書こうとしたのだろう? そのときは「オレは頭がいい」と思っていたのだ。

もうね、読んでいて、胃が痛くなってくること甚だしいもので、今まで書いてきたコードを全部書き直したくなった。

優れたコードを書いている人たちは空気を吸う様に当たり前に本書に書かれていることを実践し続けているのだなぁということが非常に良く分かった。本書は懇切丁寧に書かれていて、文章も非常に読み易く、理解し易いものだ。本当に素晴らしい本だと思う。

今まで書いてきた全てのコードを全てリーダブルなものにすることはすぐにはできないけれど、これから書いていくコードはこの本から学んだことを最大限に活かして、リーダブルコードを書いていきたいと思う書いていく。ただすぐには全部覚えられないので、いつでも見直すことができる様に常に手元に置いておこうと思う。

この様な良書と出会う機会を作ってくれた著者のDustin Boswellさん、Trevor Foucherさん、そして素晴らしい翻訳をしてくれた角 征典さん、発行の株式会社オライリー・ジャパンさん本当にありがとう!