Macの初期設定に便利なコマンドとツール

##はじめに
Macのセットアップは、結構めんどくさかったりします。例えば、Windowsでは、[Chocolatey](http://chocolatey.org/)などがありますので、それほど面倒ではありませんが、Macの場合は、パッケージ管理ツールを導入する際に、`Xcode`の`Command Line Tools`が必要だったりするからだと思います。しかも、これらのツールをダウンロードするには、AppStoreからダウンロードして来なければなりません。そうでなくてもWeb認証が必要になったりします。


よって、今回は、Macの初期設定を出来る限り手間がかからないようにするためのコマンドやツールを紹介していきたいと思います。


なお、この記事で明示しているリンクは、問題解決のためのヒントになります。参考にしてください。


##Macの初期設定を便利にするコマンド
###Command Line Tools

[Homebrew](http://mxcl.github.io/homebrew/)や[Boxen](http://boxen.github.com/)を使うには、 Xcodeの [Command Line Tools](https://developer.apple.com/downloads/index.action)をインストールする必要があります。

```
open -a Safari "https://developer.apple.com/downloads/index.action"
 
cd ~/Downloads
 
hdiutil mount xcode* && killall Finder
 
sudo installer -pkg /Volumes/Command\ Line\ Tools\ \(Lion\)/Command\ Line\ Tools\ \(Lion\).mpkg -target /Volumes/Macintosh\ HD/
```

[Macでコマンドラインからdmgファイルをマウント、アンマウント。そしてmpkgのインストールへ。。。。 - uncertain world](http://d.hatena.ne.jp/rin1024/20110929/1317274442)


なお、 `Homebrew`が動かない場合などは、とりあえず以下のコマンドを実行します。

```
# http://qiita.com/items/2d36cbaf557078319713
 
$ brew doctor
 
$ sudo xcode-select -switch /
```

ここで紹介したのは、正確には、コマンドではなく`Command Line Tools for Xcode`というツールになりますが、ツールをインストールするためのコマンドを主としているので、ここに載せました。


###Dropbox

ダウンロードが面倒なファイルなどは、 [Dropbox](https://www.dropbox.com/)に置いておくと便利です。また、設定ファイルなどの共有も `Dropbox派`と `GitHub派`が多いです。

```
open -a Safari "https://www.dropbox.com/downloading?src=index"
 
cd ~/Downloads
 
open Dropbox*
 
cp -r /Volumes/Dropbox\ Installer/Dropbox.app /Applications/
 
open -a Dropbox
 
cp xcode* ~/Dropbox
```

[Using the Official Dropbox Command Line Interface (CLI) - Dropbox Wiki](http://new.dropboxwiki.com/tips-and-tricks/using-the-official-dropbox-command-line-interface-cli)


共有する設定ファイルとしては、`~/.zshrc`,`~/.tmux.conf`,`~/.vimrc`やセットアップを自動化するシェルスクリプト`setup.sh`などです。そして、これらを`dotfiles`としてまとめることが多いです。

`setup.sh`(または、install.sh)には、`ln`や`git`を使うことが多いです。参考までに、具体例を載せておきます。

```bash:setup.sh
# https://github.com/chadrien/dotfiles/blob/master/install.sh
curl -L https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh | sh

git clone git://github.com/chadrien/dotfiles.git ~/.dotfiles

[[ -s ~/.tmux.conf ]] && mv ~/.tmux.conf ~/.tmux.conf.old
[[ -s ~/.zshrc ]] && mv ~/.zshrc ~/.zshrc.old

ln -s ~/.dotfiles/.tmux.conf ~/
ln -s ~/.dotfiles/.zshrc ~/

curl -Lo- https://bit.ly/janus-bootstrap | bash

git clone git://github.com/chadrien/janus-customization.git ~/.janus
cd ~/.janus
git submodule init
git submodule update
cd ~

[[ -s ~/.vimrc.before ]] && mv ~/.vimrc.before ~/.vimrc.before.old
[[ -s ~/.vimrc.after ]] && mv ~/.vimrc.after ~/.vimrc.after.old

ln -s ~/.janus/.vimrc.before ~/
ln -s ~/.janus/.vimrc.after ~/
```


###softwareupdate

インストールしてあるアプリをアップデートします。


```
sudo softwareupdate -l
 
sudo softwareupdate -i -a
 
softwareupdate --schedule on
```

[Mac OS X Server：softwareupdate コマンドラインツールを使ってソフトウェアをリモートインストールする方法](http://support.apple.com/kb/HT1974?viewlocale=ja_JP)


###シャットダウンコマンドを設定する

この前、Macを起動したら、ジャーンという音が鳴りました。うるさいです。そういえば、前回シャットダウンした時に、珍しくMacの音量を大きくしたままだったので、それが原因らしいです。よって、シャットダウン時には、音量をゼロにすることにしました。

```bash:~/.zshrc
#shutdown
function s()
{
osascript -e "set Volume 0"
osascript -e 'tell application "Finder" to shut down'
}
```

これで`s`コマンドでシャットダウンできます。


もし起動時の音量を設定したければ、適当に設定ファイルを書くか、もしくは、Macのシステム設定を使うかなどしてください。以下、参考までに起動時の音量を設定する方法をいくつか載せておきます。色々と応用出来ますので、参考にしてください。

###OS立ち上げ時に起動するプロセスを設定する方法

```
$ sudo mkdir /System/Library/StartupItems/Foo
 
$ sudo vim /System/Library/StartupItems/Foo/Foo
```


```bash:/System/Library/StartupItems/Foo/Foo
#!/bin/sh
##
# Start Web Server
##
. /etc/rc.common
 
if [ "${Foo:=-NO-}" = "-YES-" ]; then
osascript -e "set Volume 3"
fi
```

```
$ echo '{Description="Foo";Provides=("Foo");}' | sudo tee /System/Library/StartupItems/Foo/StartupParameters.plist
 
$ echo "Foo=-YES-" | sudo tee -a /etc/hostconfig
```

なお、もしかしたら権限の変更が必要かもしれません。

```
$ sudo chmod 755 /System/Library/StartupItems/Foo/Foo && sudo chmod 644 /System/Library/StartupItems/Foo/StartupParameters.plist
```

[Mac OS X と UNIX の関係](http://www.gadgety.net/shin/tips/mac/macosx.html)


###起動時や終了時にコマンドを実行する方法

```
$ sudo mkdir /Library/StartupItems/Foo
 
$ sudo vim /Library/StartupItems/Foo/Foo
```

```bash:/Library/StartupItems/Foo/Foo
#!/bin/sh
 
. /etc/rc.common
 
StartService ()
{
# 起動時に実行するコマンドを記述する
osascript -e "set Volume 3"
}
 
StopService ()
{
# シャットダウン時に実行するコマンドを記述する
osascript -e "set Volume 0"
}
 
RestartService () { StartService; }
 
RunService "$1"
```

```
$ echo '{Description="Foo";Provides=("Foo");}' | sudo tee /Library/StartupItems/Foo/StartupParameters.plist && echo "Foo=-YES-" | sudo tee -a /etc/hostconfig
 
$ sudo chmod 755 /Library/StartupItems/Foo/Foo && sudo chmod 644 /Library/StartupItems/Foo/StartupParameters.plist
```

ちなみに、 `StartupParameters.plist`には、以下の様な記述ができます。

```
OrderPreference = "Late";
```

これは、起動順序の設定で First|Early|None|Late|Last を指定出来ます。


私は、最初に紹介したシャットダウンのショートカットしか設定していませんが、起動時には音量を上げておきたい人はどうぞ。

[Daemons and Services Programming Guide: Startup Items](http://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/StartupItems.html)


##Macの初期設定を便利にするツール

###Homebrew

パッケージ管理ツールです。最初にインストールするものは、シェルスクリプトにして共有しておきましょう。

```
ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)"
```

オプション:
[Mac デ Homebrew ノススメ | Kitchen Garden Blog @hfm](http://blog.hifumi.info/mac/mac-%E3%83%87-homebrew-%E3%83%8E%E3%82%B9%E3%82%B9%E3%83%A1/)


###MacPorts

パッケージ管理ツールです。最初にインストールするものは、シェルスクリプトにして共有しておきましょう。個人的には、`Homebrew`よりも[MacPort](http://www.macports.org/install.php)の方がお勧めです。

```
w3m http://www.macports.org/install.php
 
cd ~/Downloads
 
sudo installer -pkg MacPorts* -target /Volumes/Macintosh\ HD/
```

オプション:
[MacPortsの基本的な使い方とコマンド : アシアルブログ](http://blog.asial.co.jp/371)

###Boxen

[Boxen](https://boxen.github.com/)は、GUIアプリもインストールできるインストール自動化ツールです。

以下の様な手順で使います。

1.XCode(& Command Line Tools)を入れる

```
$ open -a Safari "https://developer.apple.com/downloads/index.action"
 
$ cd ~/Downloads
 
$ hdiutil mount xcode* && killall Finder
 
$ sudo installer -pkg /Volumes/Command\ Line\ Tools\ \(Lion\)/Command\ Line\ Tools\ \(Lion\).mpkg -target /Volumes/Macintosh\ HD/
```

2.boxen用にディレクトリ掘る

```
$ sudo mkdir -p /opt/boxen sudo chown $USER:admin /opt/boxen
```

3.our-boxenのテンプレートを作成する

```
mkdir ~/src && cd ~/src && git clone git://github.com/boxen/our-boxen.git our-boxen
```

4.modules/people/manifestsディレクトリ内に <GitHubアカウント名>.ppを置くことで、個人設定を実行できる

```
vim ~/src/our-boxen/modules/people/manifests/$USER.pp
```

5.~/src/our-boxen/script/boxen を実行する


```bash:/path/to/your-boxen/Puppetfile
# Core modules for a basic development environment. You can replace
# some/most of these if you want, but it's not recommended.
 
github "repository", "2.0.2"
github "dnsmasq",    "1.0.0"
github "gcc",        "1.0.0"
github "git",        "1.2.2"
github "homebrew",   "1.1.2"
github "hub",        "1.0.0"
github "inifile",    "0.9.0", :repo => "cprice-puppet/puppetlabs-inifile"
github "nginx",      "1.4.0"
github "nodejs",     "2.2.0"
github "ruby",       "4.1.0"
github "stdlib",     "4.0.2", :repo => "puppetlabs/puppetlabs-stdlib"
github "sudo",       "1.0.0"
 
# Optional/custom modules. There are tons available at
# https://github.com/boxen.
 
github "java",     "1.1.0"
 
# http://trapezoid.hatenablog.com/entry/2013/04/21/005524
github "chrome",   "1.1.0"
github "rubymine", "1.0.1"
github "iterm2",   "1.0.2"
github "firefox",  "1.0.5"
github "skype",    "1.0.2"
github "intellij", "1.1.3"
github "vlc",      "1.0.1"
github "flux",     "0.0.1"
github "osx",      "1.0.0"
github "ctags",    "1.0.0"
github "dropbox",  "1.1.0"
github "virtualbox",    "1.0.2"
github "sourcetree",    "0.0.2"
github "sublime_text_2","1.1.0"
```

個人設定は、以下の様な感じで設定ファイルを作り、設定を書いていきます。

```
# cd /etc/puppetlabs/puppet/modules
 
# mkdir -p ntp/manifests
 
# touch ntp/manifests/init.pp
```

```bash:/etc/puppetlabs/puppet/modules/ntp/manifests/init.pp
# http://docs.puppetlabs.com/learning/modules1.html#module-structure
class ntp {
case $operatingsystem {
centos, redhat: {
$service_name = 'ntpd'
$conf_file    = 'ntp.conf.el'
}
debian, ubuntu: {
$service_name = 'ntp'
$conf_file    = 'ntp.conf.debian'
}
}
 
package { 'ntp':
ensure => installed,
}
file { 'ntp.conf':
path    => '/etc/ntp.conf',
ensure  => file,
require => Package['ntp'],
source  => "/root/examples/answers/${conf_file}"
}
service { 'ntp':
name      => $service_name,
ensure    => running,
enable    => true,
subscribe => File['ntp.conf'],
}
}
```

GUIアプリのインストール手順は、以下のような感じで書きます。

```bash:~/src/our-boxen/modules/people/manifests/$USER.pp
# http://trapezoid.hatenablog.com/entry/2013/04/21/005524
package {
'ForkLift':
source   => "http://download.binarynights.com/ForkLift2.5.4.zip",
provider => compressed_app;
'Mou':
source   => "http://mouapp.com/download/Mou.zip",
provider => compressed_app;
'GoogleJapaneseInput':
source => "http://dl.google.com/japanese-ime/latest/GoogleJapaneseInput.dmg",
provider => pkgdmg;
'RemoteDesktopConnectionClient':
source => "http://download.microsoft.com/download/C/F/0/CF0AE39A-3307-4D39-9D50-58E699C91B2F/RDC_2.1.1_ALL.dmg",
provider => pkgdmg;
}
```

[Boxen用Puppet manifestsの作り方](http://qiita.com/items/99764c8b42cda6e88f53)

なお、感覚的に使うなら、[boxen-web](https://github.com/boxen/boxen-web)が便利です。

[大人数でBoxen使うならboxen-webが断然便利](http://qiita.com/items/2f7935f924b6e6c0732d)


###Vundle

Vundleを自動インストールしたり、シェルからプラグインを簡単にインストールしたりするシェルスクリプトの紹介です。

```bash:~/dotfiles/vundle_install
#!/bin/bash
# 使い方
## vundleをインストールする場合:
### $ vundle_install
## 他のプラグインをインストールする場合:
### $ vundle_install Shougo/vimshell.vim
 
vimrc="$HOME/.vim/bundle/vundle/test/minirc.vim"
fpion=`grep -n "filetype plugin indent on" ${vimrc} | cut -c1`
 
ls ${vimrc}
 
if [ "$?" -eq 0 ]
then
 
    sed -i -e "${fpion}d" ${vimrc} && echo -e "Bundle '$1'\nfiletype plugin indent on" >> ${vimrc} && vim +BundleInstall +qall
 
else
 
    git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle && echo "source ${vimrc}" >> ~/.vimrc && vim +BundleInstall +qall
 
fi
 
exit 0
```

以下のコマンドを使って権限を変更します。

```
chmod +x ~/dotfiles/vundle_install
```