ラベル Mac OS X の投稿を表示しています。 すべての投稿を表示
ラベル Mac OS X の投稿を表示しています。 すべての投稿を表示
2014/12/09

Ruby on Rails 開発環境構築 in Mac OS X Mavericks

久しぶりに Ruby on Rails で開発することになり、開発環境を再構築しました。
関連: Mac OSX10.8でrbenvを使ってRuby1.9とRails4.0をインストールする

HomeBrew を使用するので MacPorts の人は読み替えてください。
また、僕は zsh を使っているので bash の人も読み替えてください。
HomeBrew や zsh をインストールしようという人は以下の事が参考になるかと思います。
Homebrew + Homebrew-caskで Mac の開発環境を構築する | DevAchieve
MacにHomeBrewとzshを導入してみた | DevAchieve

rbenv と ruby-build のインストール

brew install rbenv
brew install ruby-build
# rbenv の初期化
eval "$(rbenv init -)"
source .zshrc
eval "$(rbenv init -)" で rbenv へのパスを通すのとコマンドの補完や引数の処理、rehash をしています。
echo "$(rbenv init -)" で処理内容を確認できます。

rehashとは、
rbenv -h で確認すると以下のように書かれています。
rehash: Rehash rbenv shims (run this after installing binaries)
gem とか入れたらやれってことでいいのだと思います。
gem を入れまくると重くなる?のか rehash が重くなることがあるらしいです。
猫好きモバイルアプリケーション開発者記録 rbenv init が重い問題に対する対処法
gem を(アン)インストールしたら自動で rehash してくれる gem があるのでこれを入れておくと良いかも。
ryansouza/rbenv-rehash - github

依存パッケージのインストール

brew install readline
brew link readline
brew install openssl
brew link openssl

Ruby をインストールする

CONFIGURE_OPTS="--with-readline-dir=/usr/local --with-openssl-dir=/usr/local" rbenv install 2.1.5
CONFIGURE_OPTS="--with-readline-dir=/usr/local --with-openssl-dir=/usr/local" rbenv install まで
入力して Tab で補完すればバージョンを指定できます。

rehash して使用するバージョンを指定する

rbenv rehash
rbenv global 2.1.5

バージョンを確認する

rbenv version
2.1.5 (set by /Users/wada/.rbenv/version)
ruby -v
ruby 2.1.5p273 (2014-11-13 revision 48405) [x86_64-darwin13.0]

gem 管理システム bundler のインストール

Ruby のライブラリである gem をパッケージ管理できる Bundler をインストールします。
gem install bundler
基本的にシステムにgemをインストールせず、
bundler でプロジェクトごとに gem をインストールするのが環境をクリーンに保てて良いとされています。
Rails も bundler でインストールしたいと思います。

Rails をインストールする

% mkdir project
% cd project
% bundle init
Writing new Gemfile to /path/to/project/Gemfile
Rails プロジェクト作成する際にbundle initして Gemfile を作成します。
# A sample Gemfile
source "https://rubygems.org"

# gem "rails"
4行目のコメントアウトを外して以下のコマンドを実行すれば rails をインストールできます。
bundle install --path vendor/bundle
他の gem を追加するときも上のコマンドでプロジェクト内にインストールします。

bundle exec rails new .
bundler でインストールした gem は
プロジェクトのディレクトリで bundle exec を付けてコマンドを実行する必要があります。

参考
Ruby - システムのgemにrailsをインストールせずrails newする - Qiita

libiconv is missing. で gem install nokogiri が失敗する場合

Homebrew で libiconv とその依存パッケージをインストールします。
### For nokogiri
brew tap homebrew/dupes
brew install libiconv
brew install libxml2
brew install libxslt
brew link --force libxml2
brew link --force libxslt

nokogiri をインストールします。
gem install nokogiri -- --use-system-libraries
Bundler を使用している場合は以下のコマンドを実行します。
bundle config build.nokogiri --use-system-libraries
bundle install

参考
Ruby - bundle install でnokogiriをインストールしろと言われる - Qiita
OSX - Mac OS X Mavericksで”gem i nokogiri”失敗の解決方法 - Qiita
2014/12/05

Homebrew + Homebrew-caskで Mac の開発環境を構築する

Brewfile + Homebrew + Homebrew-caskで Mac の環境構築をするの更新版です。

パッケージ管理システム「Homebrew」とその拡張版「Homebrew Cask」を使って
Mac の開発環境を構築します。
Brewfile と brew bundle コマンドはサポートされなくなったので
brew-update コマンドを作成して、brew-update でインストール/アップデートを行うようにします。

Homebrew を導入する

Command Line Tools for Xcode をインストールする

Xcode をインストールする
まずは AppStore から Xcode をインストールして下さい。
Command Line Tools for Xcode をインストールする
[ Xcode > Open Developer Tool > More Developer Tools... ] をクリックすると
Downloads for Apple Developer ページが開くので
Command Line Tools for Xcode をダウンロードしてインストールします。
参考: MavericksでCommand Line Tools for Xcodeをインストールする - Qiita

Homebrew をインストールする

Terminal で以下のコマンドを実行します。
ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"
参考: Homebrew — The missing package manager for OS X
Homebrew が正常にインストールできたか確認する
以下のコマンドを実行してエラーがあれば対処、再度実行します。
brew doctor

Homebrew-cask を導入する

Homebrew-cask をフォーミュラに追加する

Formula(フォーミュラ)は Homebrew で管理されているパッケージのことです。
Homebrew-cask は Homebrew では管理されていないので自分で追加する必要があります。
以下のコマンドで Homebrew-cask を Formula に追加することができます。
brew tap caskroom/cask
参考: これは便利!Homebrewに追加されたtapコマンドはリポジトリを追加して簡単にフォーミュラを増やせる | Macとかの雑記帳

Homebrew-cask をインストールする

Homebrew-cask を追加したら Homebrew の以下のコマンドでインストールします。
brew install brew-cask

おまけ: Homebrew-cask の使い方

アプリケーションを検索する
brew cask search chrome
google-chrome
アプリケーションをインストールする
brew cask install google-chrome
アプリケーションの実体は /opt/homebrew-cask/Caskroom に入り、
~/Applications にシンボリックリンクが作成されます。
それぞれのパスは以下のコマンドオプションで変更することができます。
--caskroom=/my/path, --appdir=/my/path
参考: homebrew-caskが良さそうなので導入してみた - About Digital
アプリケーションをアンインストールする
brew cask uninstall google-chrome
アプリケーションを更新する
brew cask update
古いアプリケーションを削除する
brew cask cleanup
その他の使い方
homebrew-cask/USAGE.md at master · caskroom/homebrew-cask

brew-update コマンドを作成して Homebrew パッケージを管理する

Brewfile を作成する

以下のようなファイルを作成します。
Install Packages と Install Applications の欄は自由にインストールしたいものを記述して下さい。
#!

# Update Homebrew
brew update

# Upgrade Formulas
brew upgrade

# Install HomebrewCask
brew tap caskroom/cask
brew install brew-cask

####################
# Install Packages #
####################

brew install zsh

########################
# Install Applications #
########################

brew cask install google-chrome

# Remove outdated versions
brew cleanup
brew cask cleanup
参考までに僕の brew-update にリンクをはっておきます。
dotfiles/brew-update at master · wada811/dotfiles

brew-update でインストール/アップデートする

パスの通った場所に brew-update を置いて、実行します。
brew bundle

さいごに

これで brew-update コマンドで Homebrew パッケージをインストール/アップデートできるようになりました。
2014/09/20

Mac を Marvericks にアップデートした時にやったこと

App Store から Marvericks にアップデート


一時停止になったままアップデートされない。
LaunchPad から一時停止しているやつを削除する。
バージョンアップできた。

Marvericks で問題が起きてないかチェック

Terminal を開いたらすぐに閉じてしまうので設定をいじったら以下の問題が…。
Homebrew-Cask がもしかしたら状態が良くなさそうだけど確認できないので一旦放置。

おわり

2014/09/05

Mac で Command + M のウィンドウ最小化を無効化する

基本的にウィンドウの最小化って使わないです。
なのにCommand + mという
Command + nCommand + , のミスを
待ち構える配置になっているので微妙にストレスがたまります。
トグルだったらまだ良かったのですが最小化したっきり戻ってこないので
メニューバーのウィンドウから前面に表示させるしかありません。
そこが一番のストレスポイントですね。

ということでCommand + mを無効化したいと思います。

システム環境設定 > キーボード > キーボードショートカット

アプリケーションの「+」ボタンを押すと以下のような表示が出ます。
ここで全アプリケーションに対して
メニュータイトル「しまう」、「最小化」、「Minimize」のキーボードショートカットを設定しましょう。

とりあえずCommand + Ctrl + mに変更しました。


アプリケーションを開き直すと適用されるとか、開き直さなくても適用されるとか。
これで操作ミスでウィンドウが最小化されることもなくなるかと思います。

参考
How to Create a Keyboard Shortcut for Menu Items Everywhere - Tuts+ Computer Skills Tutorial
2014/09/04

Mac でウィンドウを切り替えるキーボードショートカット

Mac で作業しているとアプリケーションもそのウィンドウもどんどん開いてしまいます。
アプリケーションなら Command + Tab で切り替えできるので良いのですが
ウィンドウの切り替えに困っていました。
これが長らくの課題でしたが、参考サイトのおかげで
キーボードショートカットの「次のウィンドウを操作対象にする」を設定すると
ウィンドウの切り替えできました。

システム環境設定 > キーボード > キーボードショートカット

キーボードと文字入力の「次のウィンドウを操作対象にする」の
キーボードショートカットを好きなものに変えましょう。
僕は Command + Option + Tab に変えました。


FInder とかついつい開きすぎて切り替えが面倒だったのでコレで便利になります!やったぁ!

参考サイト

橋本商会 » Macの「次のウィンドウを操作対象にする」をなぜ設定しないのか
2014/06/11

Git 2.0 で pull の Fast-Forward を有効にして Homebrew で update したいじゃん?でも今までの git merge --no-ff でマージコミットしてるせいで失敗するじゃん?困るじゃん?

Homebrew の更新の度にマージコミットで中断されてめんどくさかったので
マージコミットしないようにして中断されないようにしました。
Git 2.0 がリリースされて pull が Fast-Forward にできるようになったおかげで
Homebrew の更新を監視する作業がなくなります。やったー。
[Git]GitのpullをFast-Forward onlyにする | DevAchieve で書いたように
git config --global pull.ff only で設定を変更しました。

merge の Fast-Forward は無効で、pull の Fast-Forward は強制にしました。
[merge]
    ff = false
[pull]
    ff = only

これで Homebrew の更新 brew bundle ~/Brewfile の内部の git pull でマージコミットのために
Homebrew の更新が中断されなくなるはずです。

よーし、更新するぞー!と以下のコマンドを実行!
brew bundle ~/Brewfile
fatal: Not possible to fast-forward, aborting.
Error: Failure while executing: git pull -q origin refs/heads/master:refs/remotes/origin/master
Error: Command failed: L2:brew update
はい、明らかに git pull でエラーになりました。
今までマージコミットしていたから Fast-Forward で pull できなくなっているんですね。

Homebrew をアンインストールしてイントールし直すしかないかなぁと思ったけど
Homebrew で入れていたものまでアンインストールされそうです。
参考: いつか見た惑星: Homebrewをアンインストールする

他にも見ていると .git を削除していたのを見つけて解決しました。
参考: Homebrew をアンインストールする方法 - present
Git の問題なので .git を削除するだけでなんとかなりそうだと。

cd `brew --prefix`
rm -rf .git
brew bundle ~/Brewfile
ということで Homebrew の履歴もスッキリして動くようになりました。

Homebrew-cask をインストールしていて Homebrew-cask のコミットもマージコミットしていたら
以下の様なエラーが出ているかもしれません。
fatal: Not possible to fast-forward, aborting.
Error: Failed to update tap: caskroom/cask
fatal: Not possible to fast-forward, aborting.
Error: Failed to update tap: caskroom/versions
以下のコマンドを実行して再インストールしてあげれば履歴が綺麗になって動きます。
brew uninstall brew-cask
brew untap caskroom/cask
brew untap caskroom/versions
brew tap caskroom/cask
brew tap caskroom/versions
brew install brew-cask
tap/untap のくだりはいらないかもしれませんが確認していないので一応記載。

追記

brew uninstall brew-cask
brew untap caskroom/cask
brew untap caskroom/versions
上記のコマンドを実行すると
brew bundle ~/Brewfile を実行した際に Homebrew-cask でインストールしたアプリケーションが
すでにインストールされていてエラーになります。

以下のコマンドで .git だけ削除したほうがいいかもしれません。
rm -rf /usr/local/Library/Taps/caskroom/homebrew-cask/.git
rm -rf /usr/local/Library/Taps/caskroom/homebrew-versions/.git
試してないので誰か同じ境遇の人で試した人がいたら結果を教えて下さい。

追記2

.git だけ削除するのはダメなようです。
あと、最新版の Homebrew で brew bundle が使えなくなったので
仕方ないのでシェルスクリプトにしました。
dotfiles/brew-update at master · wada811/dotfiles
2014/05/17

MacでAndroid Studioが起動できない

JDK6 が入っていない

Brewfile + Homebrew + Homebrew-caskで Mac の環境構築をする | DevAchieve
Brewfile に以下のように記述しているから問題ないはず…!
cask install --appdir=/Applications java


と思ったら Android Studio をダブルクリックをしても反応がない…屍のようだ…

Android Studio.app/Contents/MacOS/studio を直接実行してみると
以下の様なエラーメッセージが出ていました。
JavaVM FATAL: Failed to load the jvm library.

どうやら Mac 版 Android Studio は JDK6 が必要なようです。
参考: Google Play Services SDK のセットアップ(Android Studio) - Qiita

以下のように記述して brew bundle ~/Brewfile を実行したら起動できました。
tap caskroom/versions

# JDK6/JDK7 for Android Studio
cask install --appdir=/Applications java7
cask install --appdir=/Applications java6
2014/05/12

Brewfile + Homebrew + Homebrew-caskで Mac の環境構築をする

パッケージ管理システム「Homebrew」とその拡張版「Homebrew Cask」を使って
手に入れた iMac に環境を移行/構築してみました。
また、Homebrew で管理されているパッケージや、
Homebrew-cask で管理されているアプリケーションを
コマンド一発でインストールできる Brewfile も使ってみました。
この Brewfile + Homebrew + Homebrew-cask という構成で
環境構築/環境統一の手間が大幅に省くことができます。

追記(2014/12/05):更新しました

Homebrew + Homebrew-caskで Mac の開発環境を構築する | DevAchieve

Homebrew を導入する

Command Line Tools for Xcode をインストールする

Xcode をインストールする
まずは AppStore から Xcode をインストールして下さい。
Command Line Tools for Xcode をインストールする
[ Xcode > Open Developer Tool > More Developer Tools... ] をクリックすると
Downloads for Apple Developer ページが開くので
Command Line Tools for Xcode をダウンロードしてインストールします。
参考: MavericksでCommand Line Tools for Xcodeをインストールする - Qiita

Homebrew をインストールする

Terminal で以下のコマンドを実行します。
ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"
参考: Homebrew — The missing package manager for OS X
Homebrew が正常にインストールできたか確認する
以下のコマンドを実行してエラーがあれば対処、再度実行します。
brew doctor

Homebrew-cask を導入する

Homebrew-cask をフォーミュラに追加する

Formula(フォーミュラ)は Homebrew で管理されているパッケージのことです。
Homebrew-cask は Homebrew では管理されていないので自分で追加する必要があります。
以下のコマンドで Homebrew-cask を Formula に追加することができます。
brew tap caskroom/cask
参考: これは便利!Homebrewに追加されたtapコマンドはリポジトリを追加して簡単にフォーミュラを増やせる | Macとかの雑記帳

Homebrew-cask をインストールする

Homebrew-cask を追加したら Homebrew の以下のコマンドでインストールします。
brew install brew-cask

おまけ: Homebrew-cask の使い方

アプリケーションを検索する
brew cask search chrome
google-chrome
アプリケーションをインストールする
brew cask install google-chrome
アプリケーションの実体は /opt/homebrew-cask/Caskroom に入り、
~/Applications にシンボリックリンクが作成されます。
それぞれのパスは以下のコマンドオプションで変更することができます。
--caskroom=/my/path, --appdir=/my/path
参考: homebrew-caskが良さそうなので導入してみた - About Digital
アプリケーションをアンインストールする
brew cask uninstall google-chrome
アプリケーションを更新する
brew cask update
古いアプリケーションを削除する
brew cask cleanup
その他の使い方
homebrew-cask/USAGE.md at master · caskroom/homebrew-cask

Brewfile で Homebrew パッケージを管理する

Brewfile を作成する

以下のようなファイルを作成します。
Install Packages と Install Applications の欄は自由にインストールしたいものを記述して下さい。
# Update Homebrew
update

# Upgrade Formulas
upgrade

# Install HomebrewCask
tap caskroom/cask
install brew-cask

####################
# Install Packages #
####################

install zsh

########################
# Install Applications #
########################

cask install google-chrome

# Remove outdated versions
cleanup
cask cleanup
参考までに僕の Brewfile にリンクをはっておきます。
dotfiles/Brewfile at master · wada811/dotfiles

Brewfile でインストールする

Brewfile のある場所で以下のコマンドを実行します。
brew bundle

参考:
BrewfileでHomebrewパッケージを管理する | SOTA
「BrewfileでHomebrewパッケージを管理する」をやってみた - sonots:blog

Brewfile を dotfiles と一緒に GitHub で管理する

環境移行/環境統一するためには他の Mac からアクセスできる場所に Brewfile を置いておかなければなりません。
ということで設定ファイルの dotfiles と一緒に GitHub で管理してしまいましょう。
手順は dotfilesをGitHubで管理する方法 | DevAchieve に書いています。

最後に

全部コマンドで環境構築しちゃう感じ、イケてるエンジニアっぽくて良いと思います。
2014/05/11

dotfilesをGitHubで管理する方法

ドットファイルと呼ばれるファイル名の先頭にドットがある設定ファイル(※)を
GitHub で管理する方法について調べたので書いておきます。(※ .zshrc とか)
Mac の移行時に環境構築で dotfiles リポジトリを clone するだけで
zsh とか git とかの設定が新しい環境でもすぐに反映されるので楽チンみたいです。
イケてるエンジニアがやってるって噂なので僕もやりたいと思います。

1. dotfiles フォルダを作成する

cd ~
mkdir dotfiles

2. dotfiles フォルダにドットファイルを移す

mv .gitconfig dotfiles
mv .gitignore dotfiles
mv .vim dotfiles
mv .vimrc dotfiles
mv .zsh dotfiles
mv .zshrc dotfiles

3. ドットファイルのシンボリックリンクを作成するシェルスクリプトを作成する

cd dotfiles
vi dotfilesInstaller.sh
#! /bin/bash
ln -s ~/dotfiles/.gitconfig ~/.gitconfig
ln -s ~/dotfiles/.gitignore ~/.gitignore
ln -s ~/dotfiles/.vim/ ~/.vim
ln -s ~/dotfiles/.vimrc ~/.vimrc
ln -s ~/dotfiles/.zsh/ ~/.zsh
ln -s ~/dotfiles/.zshrc ~/.zshrc
chmod +x dotfilesInstaller.sh
./dotfilesInstaller.sh

4. dotfiles を GitHub で管理する

git init
hub create
git add .
git commit -m "Initial commit"
git push -u origin master

GitHub で管理された dotfiles リポジトリの完成

wada811/dotfiles
これでイケてるエンジニアの仲間入りですかね!

新しい Mac で dotfiles をインストールする

cd ~
git clone git@github.com:wada811/dotfiles.git
clone したら dotfiles フォルダの dotfilesInstaller.sh を以下のように実行したら移行完了です。
chmod +x dotfilesInstaller.sh
./dotfilesInstaller.sh

参考
dotfilesをGitHubで管理,vimプラグインをNeoBundleで管理する方法メモ - Programming Log

dotfiles を追加する際には dotfilesInstaller.sh に追記しなければなりませんが、
以下のように記述すれば追記の必要もないようです。
なんとなく意味はわかりますが、完全に理解しているわけではないので採用していません。そのうち調べます。
#!/bin/sh
cd $(dirname $0)
for dotfile in .?*
do
    if [ $dotfile != '..' ] && [ $dotfile != '.git' ]
    then
        ln -Fis "$PWD/$dotfile" $HOME
    fi
done
DotfilesをGitHubで管理する | fixture.jp
2014/05/10

シェル変数を一覧表示、設定、削除する

環境移行中なのですが、以下の記事でインストールした Terminal-notifier.app を
新環境で HomeBrew でインストールしなおしたら
移行データのシェル変数が引き継がれてしまいました。
[Mac][zsh]時間のかかるコマンドが終わったら自動で通知する | DevAchieve

SYS_NOTIFIER が旧環境のパスのままだったのでコードから削除しましたが、
設定がそのままになってしまっているようでした。
確認のためにシェル変数を以下のコードで一覧表示してみました。
set
...
SYS_NOTIFIER="/Applications/terminal-notifier.app/Contents/MacOS/terminal-notifier"
...
上記のように設定されていたので削除したい場合は以下のように記述すれば良いです。
unset SYS_NOTIFIER

設定する場合はシェルで以下を実行すれば良いです。イコールの前後は空白あけてはいけません。
SYS_NOTIFIER="/usr/local/bin/terminal-notifier"

参考
シェル変数の一覧を表示するには
シェル変数を定義したり、削除するには
2014/05/09

ディレクトリのシンボリックリンクの作成

ディレクトリのシンボリックリンクの作成で毎回ハマるので備忘録として書いておきます。

うまくいくやつ

ln -s ~/dotfiles/.zsh/ ~/.zsh
ディレクトリが存在していた場合は
ln: ~/.zsh File exists という notice が出ます。

以下のように記述すれば存在しない場合のみ実行することができます。notice を消したいときに?
if [ ! -d ~/.zsh ]; then ln -s ~/dotfiles/.zsh/ ~/.zsh > /dev/null 2>&1; fi

参考
ディレクトリのシンボリックリンクでハマったこと - OpenGroove
linux - Create a symbolic link of Directory in Ubuntu - Stack Overflow

ダメなやつ

ln -s ~/dotfiles/.zsh ~/.zsh/
ln: ~/.zsh/: No such file or directory と表示されてエラー。

ln -s ~/dotfiles/.zsh/ ~/.zsh/
ln: ~/.zsh/: No such file or directory と表示されてエラー。

ln -s ~/dotfiles/.zsh ~/.zsh
→ 作成できるが、再度実行すると~/.zsh/.zshが生成される。
2014/05/08

sudoでリダイレクトをしたい

環境移行中なのですが、ログインシェルを zsh に変更したくなりました。
GitHub の README.md にコマンドを書いておいて
移行時に実行するだけにしたかったので
MacにHomeBrewとzshを導入してみた | DevAchieveの工程を
以下のように変更してみました。
echo '/usr/local/bin/zsh' >> /etc/shells
以下のように見事に拒否されます。
zsh: permission denied: /etc/shells
以下のように sudo を付けても同様に拒否されます。
sudo echo '/usr/local/bin/zsh' >> /etc/shells

shのオプションに-cを付ける

sudoでリダイレクトをしたいとき - Yuta.Kikuchiの日記
回避策1 : shのオプションに-cを付ける

man sudoを見てみます。そうすると以下のように実行せよという記述がありました。-cとして実行したいコマンドを""でくくるみたいです。
To make a usage listing of the directories in the /home partition.
Note that this runs the commands in a sub-shell to make the cd and file
redirection work.

$ sudo sh -c "cd /home ; du -s * | sort -rn > USAGE"
というわけで以下のように記述すると成功しました。
sudo sh -c "echo '/usr/local/bin/zsh' >> /etc/shells"
chsh -s /usr/local/bin/zsh
活用事例:wada811/dotfiles#change-default-shell-to-zsh
2014/04/24

[Mac][zsh]時間のかかるコマンドが終わったら自動で通知する

巨大なプロジェクトの clone とか時間のかかるコマンドを実行したりすると
待ってるのが暇なので他のことをやり始めたりするんですが、
気がついたらコマンドが実行完了してて時間を浪費してしまうので
コマンドが終わったら自動で通知してくれるようにしました。

参考: Macで時間のかかるコマンドが終わったら、自動で通知するzsh設定 - Qiita

Requirements

Mac OS X 10.8 以上
Terminal.app または iTerm2.app

Terminal-notifier.app をインストールする

alloy/terminal-notifier

Download

Prebuilt binaries are available from the releases section.

Or if you want to use this from Ruby, you can install it through RubyGems:
[sudo] gem install terminal-notifier

You can also install it via Homebrew:
brew install terminal-notifier
HomeBrew で インストールしようと思ったらフォルダ構成が変わったのか 404 になってしまったので
Releases · alloy/terminal-notifier から緑のボタンの zip をダウンロードしました。
解凍して /Applications にDrag&Drop でインストール完了です。

zsh-notify をインストールする

marzocchi/zsh-notify を zip でダウンロードしてきて解凍して ~/.zsh/ とかに入れます。
以下のように ~/.zshrc に記述して zsh-notify を有効にします。
# add-zsh-hook を有効にする | zsh-notify を有効にする
autoload -Uz add-zsh-hook
source ~/.zsh/zsh-notify/notify.plugin.zsh
参考: zsh-notify x Growl - 人生いきあたりばったりで生きてます@はてな

zsh-notify をカスタマイズする

SYS_NOTIFIER に Terminal-notifier のパスを指定したり、
NOTIFY_COMMAND_COMPLETE_TIMEOUT(※)で閾値を変更したり、
通知のタイトルを変えたりしてみました。
(※実行時間がこの秒数を超えたコマンドが実行完了した際に Terminal がバックグラウンドだったら通知される)
# vim: set nowrap filetype=zsh:
#
# See README.md.
#
fpath=($fpath `dirname $0`)

SYS_NOTIFIER="/Applications/terminal-notifier.app/Contents/MacOS/terminal-notifier"
NOTIFY_COMMAND_COMPLETE_TIMEOUT=3

# Default timeout is 30 seconds.
[[ $NOTIFY_COMMAND_COMPLETE_TIMEOUT == "" ]]  \
  && NOTIFY_COMMAND_COMPLETE_TIMEOUT=30

# Notify an error with no regard to the time elapsed (but always only
# when the terminal is in background).
function notify-error {
  local icon
  icon="/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/AlertStopIcon.icns"
  notify-if-background -t "Failed!" --image "$icon" < /dev/stdin &!
}

# Notify of successful command termination, but only if it took at least
# 30 seconds (and if the terminal is in background).
function notify-success() {
  local now diff start_time last_command

  start_time=$1
  last_command="$2"
  now=`date "+%s"`

  ((diff = $now - $start_time ))
  if (( $diff > $NOTIFY_COMMAND_COMPLETE_TIMEOUT )); then
    notify-if-background -t "Success!" <<< "$last_command" &!
  fi
}

# Notify about the last command's success or failure.
function notify-command-complete() {
  last_status=$?
  if [[ $last_status -gt "0" ]]; then
    notify-error <<< $last_command
  elif [[ -n $start_time ]]; then
    notify-success "$start_time" "$last_command"
  fi
  unset last_command start_time last_status
}

function store-command-stats() {
  last_command=$1
  last_command_name=${1[(wr)^(*=*|sudo|ssh|-*)]}
  start_time=`date "+%s"`
}


autoload -U tell-terminal
autoload -U tell-iterm2
autoload -U notify-if-background
add-zsh-hook preexec store-command-stats
add-zsh-hook precmd notify-command-complete
こういうの読めばわかる気がしてくるので ShellScript 勉強しようって思います。
途中まで読んで積ん読になっている入門UNIXシェルプログラミングを読んで色々できるようになりたい。

変更を反映する

source ~/.zshrc
忘れずに。

通知をテストする

成功
sleep 31
実行時間が 30秒 (デフォルトの NOTIFY_COMMAND_COMPLETE_TIMEOUT の値)を超え、
バックグラウンドなら通知されます。
失敗
sleep 3 && ls nofile
実行時間が 30秒 (デフォルトの NOTIFY_COMMAND_COMPLETE_TIMEOUT の値)を超えなくても
失敗時は(バックグラウンドなら)通知されます。

大変便利です!
2013/08/16

[HomeBrew]正規表現でファイル名を置換するrenameコマンド

Android Asset Studioでランチャーアイコンを生成するのだけど
ファイル構成が以下のようになっていて毎度ファイル名を修正するのが面倒だったので
rename コマンドをインストールしてみた。
rename // plasmasturm.org

res
├── drawable-hdpi
│   └── ic_launcher.png
├── drawable-mdpi
│   └── ic_launcher.png
├── drawable-xhdpi
│   └── ic_launcher.png
└── drawable-xxhdpi
    └── ic_launcher.png
brew install renameでやってみると何故か失敗するので調べてみると以下のようになっていたので
require 'formula'

class Rename < Formula
  url 'http://plasmasturm.org/code/rename/rename', :using => :nounzip
  version '0.1.3'
  homepage 'http://plasmasturm.org/code/rename'
  sha1 'a2235a402d18495513edf690445e0030f31c9ab3'

  def install
    system 'pod2man', 'rename', 'rename.1'
    bin.install 'rename'
    man1.install 'rename.1'
  end
end
以下のように修正したら成功しました。
require 'formula'

class Rename < Formula
  homepage 'http://plasmasturm.org/code/rename'
  url 'https://github.com/ap/rename/archive/v1.600.tar.gz'
  sha1 'a7946ce3602e3810aaa70300674ccb26832634ed'

  def install
    system 'pod2man', 'rename', 'rename.1'
    bin.install 'rename'
    man1.install 'rename.1'
  end
end
これで rename コマンドが使えるようになったけど再帰的にリネームはできなっぽいので
以下のようなコマンドで対応しました。
find res -type f -name 'ic_launcher.png' | xargs rename 's/launcher/orientation_landscape/'
res
├── drawable-hdpi
│   └── ic_orientation_landscape.png
├── drawable-mdpi
│   └── ic_orientation_landscape.png
├── drawable-xhdpi
│   └── ic_orientation_landscape.png
└── drawable-xxhdpi
    └── ic_orientation_landscape.png
正規表現使ってないけど rename コマンドが便利な時が来るはず。

きっかけ


これよりは便利。@gabuさんありがとうございます。
2013/07/13

Mac OSX10.8でrbenvを使ってRuby1.9とRails4.0をインストールする

ついに僕も Ruby on Rails での開発デビューしてみることになったので
Ruby on Rails 環境構築のメモを残しておきます。

HomeBrew を使用するので MacPorts の人は読み替えてください。
また、僕は zsh を使っているので bash の人も読み替えてください。
HomeBrew や zsh をインストールしようという人は以下の事が参考になるかと思います。
MacにHomeBrewとzshを導入してみた | DevAchieve

rbenv と ruby-build のインストール

brew install rbenv

brew install ruby-build

vi .zshrc
# rbenv の初期化
eval "$(rbenv init -)"
source .zshrc
eval "$(rbenv init -)" で rbenv へのパスを通すのとコマンドの補完や引数の処理、rehash をしている。
echo "$(rbenv init -)" で処理内容を確認できる。

rehashとは、
rbenv -h で確認すると以下のように書かれている。
rehash: Rehash rbenv shims (run this after installing binaries)
gem とか入れたらやれってことでいいのだろうか。
gem を入れまくると重くなる?のか rehash が重くなることがあるらしい。
猫好きモバイルアプリケーション開発者記録 rbenv init が重い問題に対する対処法
gem を(アン)インストールしたら自動で rehash してくれる gem があるのでこれを入れておくと良いかも。
ryansouza/rbenv-rehash - github

依存パッケージのインストール

brew install readline

brew link readline

brew install openssl

brew link openssl

Ruby をインストールする

CONFIGURE_OPTS="--with-readline-dir=/usr/local --with-openssl-dir=/usr/local" rbenv install 1.9.3-p194
CONFIGURE_OPTS="--with-readline-dir=/usr/local --with-openssl-dir=/usr/local" rbenv install まで
入力して Tab で補完すればバージョンを指定できる。
とりあえず Ruby1.9 の最新版のパッチが当てられた(p の後の数字が大きい)バージョンをインストールした。
Ruby2.0 も候補に出たけど 2.0.0-dev しか表示されなかったのでインストールはやめておいた。
MacにRuby2.0とRails4をインストール - Qiita [キータ]

rehash して使用するバージョンを指定する

rbenv rehash
rbenv global 1.9.3-p194

バージョンを確認する

rbenv version
1.9.3-p194 (set by /Users/wada/.rbenv/version)
ruby -v
ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-darwin12.4.0]

Rails をインストールする

gem list -r --all rails
*** REMOTE GEMS ***

rails (4.0.0, 3.2.13, 3.2.12, 3.2.11, 3.2.10, 3.2.9, 3.2.8, 3.2.7, 3.2.6, 3.2.5, 3.2.4, 3.2.3, 3.2.2, 3.2.1, 3.2.0, 3.1.12, 3.1.11, 3.1.10, 3.1.9, 3.1.8, 3.1.7, 3.1.6, 3.1.5, 3.1.4, 3.1.3, 3.1.2, 3.1.1, 3.1.0, 3.0.20, 3.0.19, 3.0.18, 3.0.17, 3.0.16, 3.0.15, 3.0.14, 3.0.13, 3.0.12, 3.0.11, 3.0.10, 3.0.9, 3.0.8, 3.0.7, 3.0.6, 3.0.5, 3.0.4, 3.0.3, 3.0.2, 3.0.1, 3.0.0, 2.3.18, 2.3.17, 2.3.16, 2.3.15, 2.3.14, 2.3.12, 2.3.11, 2.3.10, 2.3.9, 2.3.8, 2.3.7, 2.3.6, 2.3.5, 2.3.4, 2.3.3, 2.3.2, 2.2.3, 2.2.2, 2.1.2, 2.1.1, 2.1.0, 2.0.5, 2.0.4, 2.0.2, 2.0.1, 2.0.0, 1.2.6, 1.2.5, 1.2.4, 1.2.3, 1.2.2, 1.2.1, 1.2.0, 1.1.6, 1.1.5, 1.1.4, 1.1.3, 1.1.2, 1.1.1, 1.1.0, 1.0.0, 0.14.4, 0.14.3, 0.14.2, 0.14.1, 0.13.1, 0.13.0, 0.12.1, 0.12.0, 0.11.1, 0.11.0, 0.10.1, 0.10.0, 0.9.5, 0.9.4.1, 0.9.4, 0.9.3, 0.9.2, 0.9.1, 0.9.0, 0.8.5, 0.8.0)

...etc
Rials のバージョンを確認する。他にも色々表示されたが省略。
最近、 Rails4.0 が公開された。
rbenv exec gem install rails
rbenv exec gem install rails -v 3.2.13 等でバージョンを指定してインストールできる。たぶん。
指定しないと最新の 4.0.0 がインストールされる。

インストールしたので rehash する

rbenv rehash

バージョンを確認する

rails -v
Rails 4.0.0

Rails プロジェクトを作成する

rails new proj
cd proj

開発を開始する

俺達の開発はまだまだこれからだ!

参考:
Ruby on Rails 3.2 を Mac OS X にインストールする手順をかなり丁寧に説明してみました - Rails 雑感 - Ruby on Rails with OIAX
【初心者向け】Mac OSX10.8(Mountain Lion)で Ruby on Railsを動かすための5ステップ « pplog.org
Rails開発環境の構築(rbenvでRuby導入からBundler、Rails導入まで) - Qiita [キータ]
MacにRubyをインストールする時のメモ - Qiita [キータ]
2013/06/01

[Eclipse][設定]Eclipse JunoでCode Templateの$userを変更する

開発中のアプリのコードを公開しようか迷っているけど
どっちにしろライセンスは全てのファイルに記述しようと思い立ったので
Android開発を行う際の eclipse の便利設定 | zaki日記を参考に
Code Template を設定することにした。

ところで1記事の中に複数の項目について記述する場合は
id つけてもらえるとリンクしやすいので id つけて欲しいなーと思ったり。
自分も忘れがちだから気をつけなきゃいけないけど、id あると紹介しやすいんだよねー。

ということで以下のライセンスを指定した。
/*
 * Copyright ${year} ${user}<メールアドレス>
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
自動的に${year}が今年の西暦を入れてくれて、${user}がユーザー名を入れてくれる。

本題はココから。

${user}がどこを参照したのか wada にしてくれちゃうので wada811 にしたい僕は困ったという話。
まず、eclipse.ini の起動時引数に以下で指定すれば良いというのは分かった。
-Duser.name=UserName
JavaDocの@authorで補完される名前を変更したい:おぼえがき:So-net blog
で、その肝心の eclipse.ini はどこかというと Mac なら以下にある。
[Eclipse HOME]/Eclipse.app/Contents/MacOS/eclipse.ini
参考: Steppin' out: Mac (Lion) で Eclipse 4.2 Juno を日本語化
ついでに-cleanも指定して保存して Eclipse を再起動すれば $user が指定のユーザー名になる。
ちなみに Code Templates の設定の Automatically add comments for new methods and types に
チェックを入れないとファイル新規作成時にライセンスが自動挿入されないので注意。
2013/05/13

コマンドラインJSONプロセッサ jq をインスールする

JSON をフォーマットしてくれたり抽出したりしてくれるすごいやつです。

インストール方法は Download jq にあるように
brew install jqとすればできるようなのだけどエラーで失敗するので
バイナリの方をダウンロードしてきてchmod +x jqで実行権限を付与して
パスの通ったところに置けば使えます。

簡単に使い方を説明すると以下のような JSON あったとして、
{"Exception":{"stacktrace":["at [SplashActivity#onCreate:46]","at [Instrumentation#callActivityOnCreate:1047]","at [ActivityThread#performLaunchActivity:1623]","at [ActivityThread#handleLaunchActivity:1675]","at [ActivityThread#access$1500:121]","at [ActivityThread$H#handleMessage:943]","at [Handler#dispatchMessage:99]","at [Looper#loop:130]","at [ActivityThread#main:3701]","at [Method#invokeNative:-2]","at [Method#invoke:507]","at [ZygoteInit$MethodAndArgsCaller#run:866]","at [ZygoteInit#main:624]","at [NativeStart#main:-2]"],"name":"java.lang.OutOfMemoryError"},"PackageInfo":{"packageName":"com.wada811.devcamera","versionCode":1,"versionName":"1.0"},"SharedPreferences":{"isLatestversion":true},"Build":{"VERSION.RELEASE":"2.3.4","DEVICE":"SO-01C","MODEL":"SO-01C","MANUFACTURER":"Sony Ericsson","BRAND":"docomo","VERSION.SDK_INT":10}}
これをjq . report.jsonで以下のように表示することができます。
{
  "Build": {
    "VERSION.SDK_INT": 10,
    "BRAND": "docomo",
    "MANUFACTURER": "Sony Ericsson",
    "MODEL": "SO-01C",
    "DEVICE": "SO-01C",
    "VERSION.RELEASE": "2.3.4"
  },
  "SharedPreferences": {
    "isLatestversion": true
  },
  "PackageInfo": {
    "versionName": "1.0",
    "versionCode": 1,
    "packageName": "com.wada811.devcamera"
  },
  "Exception": {
    "name": "java.lang.OutOfMemoryError",
    "stacktrace": [
      "at [SplashActivity#onCreate:46]",
      "at [Instrumentation#callActivityOnCreate:1047]",
      "at [ActivityThread#performLaunchActivity:1623]",
      "at [ActivityThread#handleLaunchActivity:1675]",
      "at [ActivityThread#access$1500:121]",
      "at [ActivityThread$H#handleMessage:943]",
      "at [Handler#dispatchMessage:99]",
      "at [Looper#loop:130]",
      "at [ActivityThread#main:3701]",
      "at [Method#invokeNative:-2]",
      "at [Method#invoke:507]",
      "at [ZygoteInit$MethodAndArgsCaller#run:866]",
      "at [ZygoteInit#main:624]",
      "at [NativeStart#main:-2]"
    ]
  }
}
すごい!
詳しい使い方は jq Manual を見てください。
2012/09/24

MacにMySQLを導入してみた

MySQL :: Download MySQL Community Serverから Mac OS X ver.~ DMG Archive をダウンロードする。
32bit / 64bit の判別方法はターミナルでgetconf LONG_BITを入力して返ってきた値らしい。
適当にパッケージっぽいもの開いてインストールしたら以下のコマンドを入力する。
sudo /Library/StartupItems/MySQLCOM/MySQLCOM start
参考: MySQL :: MySQL 5.1 リファレンスマニュアル :: 2.5 Mac OS X に MySQL をインストールする

これで/usr/local/mysql/bin/mysqlと入力すれば mysql が使える。
しかし、こんなの毎回入力してたら死ねるので alias の設定をする。

僕は zsh を使っているので /Users/wada/.zshrc に alias mysql=/usr/local/mysql/bin/mysqlを記述した。
MySQL :: MySQL 5.1 リファレンスマニュアル :: 2.5 Mac OS X に MySQL をインストールするによると
以下の2行を書いておくといいらしい。
alias mysql=/usr/local/mysql/bin/mysql
alias mysqladmin=/usr/local/mysql/bin/mysqladmin
.zshrc に記述したら設定を反映するためにsource /Users/wada/.zshrcと入力する。
参考: bash から zsh に乗り換えた【その仕事、蠍は留守です】

これでどこでもターミナル上で mysql と打つだけで MySQL が使えるようになる。
これでやっと SQL の勉強を始めることができそうだ。
2012/09/23

MacにHomeBrewとzshを導入してみた

Macのパッケージ管理ならHomeBrewでしょ、と誰かが言うのでインストールしてみた。
Homebrew — MacPorts driving you to drink? Try Homebrew!の最下部の
Install HomeBrew のコマンドをターミナルで入力すればインストールできるみたい。
よくわからず色々グチャグチャやってたら入ったからよくわからないけどたぶんそう。
たぶんコレ↓が役に立つと思う。
[Mac] Mountain Lionへパッケージ管理「Homebrew」をインストールする手順のメモ

zsh とは … なんかすげー便利なコマンドシェル、らしい。zsh - Wikipedia
zsh は インストールした HomeBrew を使えば
ターミナル上で以下のコマンドだけでインストールできる。
brew install zsh
このままではインストールしてもターミナルを起動するとデフォルトの bash が起動してしまうので
sudo vi /etc/shells/usr/local/bin/zshを追記する。
バージョン名付きのがあったらソッチのほうがいいかも。
chpass -s /usr/local/bin/zshでデフォルトを zsh に変更する。
chpassコマンドを入力してパスワードを入力したら変更が確認できる。
Shell:部分が /usr/local/bin/zsh になっているはず。
システム環境設定 > ユーザーとグループ から鍵を開いて編集できるようにして
ユーザー名の上で右クリックで詳細オプションをクリックし、開いた画面でログインシェルを変更しても良い。

使えるようになったかどうかの確認としてzsh --versionと入力してみるといいかも。
参考
Mac (Lion) にzshをインストール | CAPH TECH
MacのログインシェルをHomebrew等で入れたzshやbashに変更する方法 | Macとかの雑記帳

zsh の設定をするために一旦ターミナルを終了し、再起動する。
何やら色々聞かれるのでよくわからないまま設定するも良い。
とりあえず 0 をタイプして保存すると/Users/[ユーザー名]/.zshrcが生成されると思う。
巷で流れる .zshrc の設定はココに記述すれば良さそうだ。
2012/05/09

[書評]詳解 Objective-C 2.0 第3版

詳解 Objective-C 2.0 第3版
荻原剛志
ソフトバンククリエイティブ
発売日:2011-12-28
ブクログでレビューを見る»
決して易しい内容ではないが、Objective-Cで書くなら必読だと思う。
Objective-Cは変わっているので他の言語を知っていても意味も分からない事がよくあり、
そんなObjective-Cをネットからコピペしたコードでハマって時間を使うより、
本書を時間をかけてでも読んで理解してコーディングすべきだろう。
Mac OS X Lion、iOS 5以降に導入されたメモリ管理方式のARCに完全対応しているので
既にObjective-Cを理解している人も読む価値はあると思う。

Objective-Cは変わっているので他の言語を知っていても意味も分からない(大事なことなので(ry
宣言プロパティの属性指定や既存のクラスにメソッドを追加できるカテゴリ、
Javaで言うところのインターフェースであるプロトコル、
他の言語ではクロージャとして知られている言語機能に相当するブロックオブジェクト、
コールバック的なことができるデリゲートなど役立つ情報がいっぱいです。
これだけのまとまった情報をネット上で手に入れることは不可能だと思います。
Objective-Cやるなら必読だと思いますよ!

ソフトバンク クリエイティブ:詳解 Objective-C 2.0 第3版
ARCに完全対応!!

Mac OS X Lion、およびiOS 5以降の標準的なメモリ管理方式として
新しく導入されたAutomatic Reference Counting(ARC)に対応して全面改定。
iPhone/iPadプログラマ必携!
アップルプロダクトの標準プログラミング言語Objective-Cを徹底解説。

CHAPTER01 オブジェクトに基づくソフトウェアの作成
CHAPTER02 Objective-Cのプログラム
CHAPTER03 継承とクラス
CHAPTER04 オブジェクトの型と動的結合
CHAPTER05 リファレンスカウンタを用いたメモリ管理方式
CHAPTER06 ガーベジコレクション
CHAPTER07 宣言プロパティ
CHAPTER08 NSObjectクラスとランタイムシステム
CHAPTER09 Foundationフレームワークの重要なクラス
CHAPTER10 カテゴリ
CHAPTER11 抽象クラスとクラスクラスタ
CHAPTER12 プロトコル
CHAPTER13 オブジェクトのコピーと保存
CHAPTER14 ブロックオブジェクト
CHAPTER15 メッセージ送信のパターン
CHAPTER16 アプリケーションの構造
CHAPTER17 例題:簡易画像ビューア
CHAPTER18 例外とエラー
CHAPTER19 並列プログラミング
CHAPTER20 キー値コーディング
APPENDIX01 Foundationフレームワークの概要
APPENDIX02 Core Foundationフレームワークの概要
APPENDIX03 コーディングの指針

タグ(RSS)