Furudateのブログ

プログラミングやネットワーク系の知識・技術がメインのブログ。技術メモ帳的な感じになるかと。岩手から発信していきます。

ターミナルの便利なショートカットとコマンドまとめ

こんにちは。

今回はターミナルについて、ショートカットキーとかコマンドの小技とかまとめたいと思います。
これで作業効率を劇的にアップさせましょう!

ターミナルの便利なショートカット

使用頻度は完全に主観です。
Altキーを使えるようにするには、ターミナルの環境設定でキーボードから「メタキーとしてoptionキーを使用」にチェックを入れる必要があります。

ショートカットキー 説明 使用頻度
Ctrl+a 行頭へ移動
Ctrl+e 行末へ移動
Ctrl+b(←) 左へ移動
Ctrl+f(→) 右へ移動
Alt+b(Alt+←) 前の単語へ移動
Alt+f(Alt+→) 次の単語へ移動
Ctrl+h(Backspace) カーソルの左の文字を削除
Ctrl+u カーソル位置から行頭まで削除
Ctrl+k カーソル位置から行末まで削除
Ctrl+w カーソル位置から単語の先頭まで削除
Alt+d カーソル位置から単語の終わりまで削除
Ctrl+d カーソル位置の文字を削除。
文字がない場合はログアウト
Ctrl+l 画面をクリア
Ctrl+y 直前に削除した文字列を貼り付け
Ctrl+r ヒストリーの検索
Ctrl+p(↑) ヒストリーを遡る
Ctrl+n(↓) ヒストリーを下る

便利なコマンド

何気に便利なコマンドを集めてみました。
上からよく使う順になってると思います。

コマンド 説明
cd - 直前にいたディレクトリに戻る
grep option pattern filename 文字列検索。他のコマンド(cat, history等)とパイプで組み合わせることがほとんど(filename に ./* とやるとカレントディレクトリ以下全てのファイルの中身を検索する
open 指定したディレクトリをFinderで開く
find -name filename 指定ディレクトリ以下からファイルを検索
tail -f ファイルの中身をリアルタイムで見る。ログファイルとかに便利
ag 指定したディレクトリ以下から文字列を含むファイルパスと行番号を検索
jq . JSONの整形。curlとのパイプとかで使うと良い。使い方についてはこちらの記事が参考になる
scp <コピー元> <コピー先> SSHでファイルの転送ができる。ローカルからリモートへなど。
-P でポート番号指定
-r で再帰的に転送
nkf -w --overwrite filename 指定したファイルの文字コードutf-8に変換。他のコードにも変換できるけど大体utf-8しか使わないので。文字コードの確認は -g で行う。こちらに詳しく書いてある


以上です。
ターミナルは本当良く使うのでこういう便利な機能を早く覚えたいですね。
自分はまだ全部覚えてませんが・・・
ちなみにChomeにもvichromeという拡張機能を入れています。トラックパッドにすら手を動かすのが面倒なときにかなり楽です。笑

それでは。

参考にさせていただいたサイト

Macでターミナルを使うときはショートカットキーを覚えよう!! - よんちゅBlog

shell - 欲求別ターミナルで使うコマンドとかショートカットキーとか便利ツールとかまとめ - Qiita

jq コマンドが強力すぎてヤバい件 | CUBE SUGAR STORAGE

文字コードをフォルダごと調べたり、まとめて変換したりする方法 - Qiita

【Ruby】HomebrewでrbenvをインストールしてRubyの最新版をインストール ついでにpyenvとplenvも入れる

こんばんは。

MacにはデフォルトでRubyが入っていますが、バージョンが古いです。
今回は、Rubyのバージョン管理ツールであるrbenvをHomebrewで入れ、rbenvからRubyの最新版を入れてバージョンを切り替えるようにします。
ついでに、同じようにPythonPerlのバージョン管理ツールであるpyenvとplenvも入れちゃいます。やり方はrbenvと一緒です。

ちなみにRubyには他にもrvmやgemがありますが、それとの違い(というか立ち位置?)はこちらのサイトが非常に参考になりますので、ご覧になってみてはどうでしょうか。

今回は手順を細かく示してくれているサイトがあったので、基本そちらのサイトの通りです。
私の記事では主に個人的なメモ用に書いていくので、やり方だけ知りたい方はこちらの記事にどうぞ。

なお、私の環境はOS X Mavericksとなっています。
また、事前にXcodeとHomebrewを入れといて下さい。色々ググるXcode Command Line Tools(CLT)をインストールするみたいな記述がありますが、最近はHomebrew入れると一緒にインストールされるはずです。

opnesslとreadline のインストール

まずはこの2つを入れます。rbenv入れるためにないといけないようです。
ただ、両方ともデフォルトで入っているので問題ないっちゃないのですが、デフォルトのは古かったり色々おかしいらしいのでHomebrewでインストールします。

ちなみにopensslは証明書とか発行するやつで、readlineはターミナル上で行頭移動とかヒストリ機能とかできるようになるやつです。(たぶん)

$ brew install openssl
$ brew install readline

これでインストールできますが、多分インストールしただけだとデフォルトのしか読み込まないので、brewで入れたものをシンボリックリンクさせます。

$ openssl version # バージョン確認
OpenSSL 0.9.8za 5 Jun 2014
$ which openssl  #場所を確認
/usr/bin/openssl

$ brew link openssl --force

$ openssl version
OpenSSL 1.0.1j 15 Oct 2014
$ which openssl
/usr/local/bin/openssl

上記のようになればOKです。readlinebrew link でやりましょう。 --force 付けないとWarning出てくるので注意です。
ここで一度ターミナルを再起動したほうが良いかもしれません。

ちなみに、自分の環境だとこの後に brew doctor やると、以下の様なWarningが出てきました。
これの消し方が分からないのですが、CLTとかXcodeアップデートしたら直ったりしないかな・・・(Yosemiteにしてないので)
一応消すだけなら unlink すれば消えるので、もしこれが消えなくて気になる人はlinkしないでデフォルトのままやったほうが良いかもです。

Warning: Some keg-only formula are linked into the Cellar.
Linking a keg-only formula, such as gettext, into the cellar with
`brew link <formula>` will cause other formulae to detect them during
the `./configure` step. This may cause problems when compiling those
other formulae.

Binaries provided by keg-only formulae may override system binaries
with other strange results.

You may wish to `brew unlink` these brews:

    openssl
    readline

rbenvのインストールとPATHの追加

次にrbenvをHomebrewからインストールします。

$ brew install rbenv ruby-build

インストールしたら .bash_profile などに以下を追加します。

eval "$(rbenv init -)"

その後ターミナルをまた再起動し、 .rbenv にPATHが通っているか確認します。

$ echo $PATH
/Users/****/.rbenv/shims

Rubyのインストール

いよいよRubyのインストールです。
まずはrbenvでインストール可能なバージョンを探し、それからインストールします。
自分の場合は2.1.5が最新版でしたのでそれをインストールします。

$ rbenv install -l
$ RUBY_CONFIGURE_OPTS="--with-readline-dir=$(brew --prefix readline) --with-openssl-dir=$(brew --prefix openssl)" rbenv install 2.1.5

インストールするときは、rbenv install より前のオプションを必ず付けて下さい。
これつけないと文字化けとか起きるらしいです。(参考: rbenv 環境の Ruby の irb で日本語が文字化けするので直した | EasyRamble

Rubyの切り替え

次にインストールしたRubyに切り替えます。

$ ruby -v
ruby 2.0.0p247~

$ rbenv versions
* system(set by /Users/***/.rbenv/version)
2.1.5

$ rbenv global 2.1.5
$ rbenv rehash

$ ruby -v
ruby 2.1.5p273 (2014-11-13 revision 48405) [x86_64-darwin13.0]

$ rbenv versions
system
* 2.1.5(set by /Users/***/.rbenv/version)

rehashを忘れないで下さい。

これでRuby最新版のインストールは終了しました。

Bundlerのインストールとgemの自動インストール可

常に最新版を利用するgem(Bundlerなど)は、下記のコマンドでインストールしたほうが便利みたいです。

$ rbenv exec gem install bundler
$ rbenv rehash

また、rbenv install する度に gem install し直さなければならないので、brewで rbenv-default-gems をインストールして自動化します。

$ brew install rbenv-default-gems

インストールしたら以下の設定ファイルを用意します。

~/.rbenv/default-gems

bundler
rbenv-rehash
pry
haml
sass
compass

これでruby install した時に default-gems に書いたgemも自動でインストールしてくれるようになります。
reashも書いてるので、次回以降rehashもいらなくなります。

Python, Perlのインストール

ついでにPythonPerlもインストールしちゃいます。
ただ、rbenvの時とまったく同じです。
brewでpyenv, plenv, perl-build をインストールし、.bash_profile に init を書き、それぞれのenvでバージョン確認してインストールしてrehashして終わりです。

$ brew install pyenv plenv perl-build

.bash_profile

eval "$(pyenv init -)"
eval "$(plenv init -)"

ここでターミナルを再起してPATHを確認します。

次に本体のインストールです。

$ pyenv install -l
$ pyenv install 3.4.2

$ pyenv global 3.4.2
$ pyenv rehash

$ plenv install -l
$ plenv install 5.21.6

$ plenv global 5.21.6
$ plenv rehash

$ python --version
Python 3.4.2
$ pyenv versions
  system
* 3.4.2 (set by /Users/furudate/.pyenv/version)

$ perl -v
This is perl 5, version 21, subversion 6 (v5.21.6) built for darwin-2level
$ plenv versions
  system
* 5.21.6 (set by /Users/furudate/.plenv/version)

以上で両者のインストールは終わりです。簡単ですね。

Python関係のWarningの消し方

さて、ここまでやって brew doctor やると、Python関係のWarningが2つ出ます。
これを消しましょう。ただ、1個は消せないようです。

1つ目のWarning

Warning: python is symlinked to python3
This will confuse build scripts and in general lead to subtle breakage.

これはHomebrewではpythonコマンドがPython 2であるとされているために発生するWarningです。
これを回避するために、Python 2系の最新版をインストールして pythonコマンドが常に Python 2 を指すようにしておきます。

$ pyenv install 2.7.8

$ pyenv global 2.7.8 3.4.2
$ pyenv rehash
$ pyenv versions
  system
* 2.7.8 (set by /Users/furudate/.pyenv/version)
* 3.4.2 (set by /Users/furudate/.pyenv/version)

以上のことをやると、Warningが消えるはずです。

2つ目のWarning

Warning: "config" scripts exist outside your system or Homebrew directories.
`./configure` scripts often look for *-config scripts to determine if
software packages are installed, and what additional flags to use when
compiling and linking.

Having additional scripts in your path can confuse software installed via
Homebrew if the config script overrides a system or Homebrew provided
script of the same name. We found the following "config" scripts:

これは結論から言えば消せないようです。
configファイルがいっぱい見つかったけど大丈夫?みたいなことを聞いているようですが、pyenvで管理できるので問題ないようです。
Warningが表示されるのは諦めるしかないようです。残念。


さて、これでRubyPythonPerlの最新版を入れることが出来ました。

それでは。

参考にさせていただいたサイト

OS X Mavericks (10.9) に Homebrew + rbenv で Ruby をインストールする | deadwood

Rubyのrvmやgemってなんだ?て調べたらrbenvが出てきたの巻 - むかぁ~ どっと こむ

rbenv 環境の Ruby の irb で日本語が文字化けするので直した | EasyRamble

MacOSX - Mac OSX で開発環境を構築するための環境構築 (Homebrew, Git, SVN, Ruby, Perl, Python) - Qiita

Macのバッテリー情報をグラフ化したやつ

こんばんは。

私の大学でアドベントカレンダーやってます。 その関係で、この記事のタイトルにもなっている、Macのバッテリー情報を取得してグラフ化するものについてQiitaに初投稿してみたのですが(前から使ってはいましたが)、いやー便利ですね。
kobitoからの投稿が本当に便利。

これからQiita使っていきたいなーと思いますが、ブログとの住み分けが難しい。。
今後うまく両立してやっていけたらなーと思います。

ちなみに自分が書いた記事はこちらです。よければご覧になって下さい!

vimのプラグインについて

こんにちは。

最近色々とVimプラグインについて調べていたので、ここでまとめてみたいと思います。
.vimrcはこちらで公開しているのでよろしければ。

今回はまずVimプラグインを自動管理してくれるNeoBundleというツールを入れ、それから各プラグインをNeoBundleでインストールしていきたいと思います。

NeoBundleのインストールと簡単な使い方

まぁ基本的にはNeoBundleの本家サイト(GitHub)に書いてあるんですが・・・

まず以下のコマンドでインストールします。(MacLinuxのみ。Windowsの場合はgit clone や git submodule add などを使ってください)

curl https://raw.githubusercontent.com/Shougo/neobundle.vim/master/bin/install.sh | sh

次に以下の記述を.vimrcに書きます。私の公開している.vimrcでいうと Start Neobundle Settings. のところです。

" bundleで管理するディレクトリを指定
" vim_startingでvim起動時のみ実行
if has('vim_starting')
    set runtimepath+=~/dotfiles/.vim/bundle/neobundle.vim/
endif

" Required:
call neobundle#begin(expand('~/dotfiles/.vim/bundle/'))

" neobundle自体をneobundleで管理
NeoBundleFetch 'Shougo/neobundle.vim'

"*****************
"Installed Plugins
"*****************
" NERDTree(ファイルをツリー型で表示)
NeoBundle 'scrooloose/nerdtree'
" autoclose(自動的に閉じ括弧を挿入)
NeoBundle 'Townk/vim-autoclose'
" quickrun(vimを開いたままコードを実行)
NeoBundle 'thinca/vim-quickrun'
" Unite(ファイルオープンを便利に)
NeoBundle 'Shougo/unite.vim'
" Unite(Unite.vimで最近使ったファイルを表示できるように)
NeoBundle 'Shougo/neomru.vim'
" UniteでGrep使えるように
NeoBundle 'Shougo/vimproc'
"*****************
"End Plugins
"*****************

call neobundle#end()

" Required:
filetype plugin indent on

" 未インストールのプラグインがある場合、インストールするかどうかを尋ねる
NeoBundleCheck

Installed Plugins のところに書いてあるようにインストールしたいプラグインを記述し、vim上で以下のようにコマンドを打ちます。

  • インストール
:NeoBundleInstall
  • アップデート
:NeoBundleUpdate
:NeoBundleClean

ちなみに、.vimrc上で NeoBundleCheck を書いているのでInstallコマンドを打たなくても未インストールのプラグインがあればチェックしてインストールしてくれます。

インストールしたプラグイン一覧

.vimrcにも書いてますが、今回インストールしたプラグインはこんな感じです。

  • NERDTree(ファイルをツリー型で表示)
    NERDTreeの使い方はこちらの記事が非常に参考になります。
  • autoclose (自動的に閉じ括弧を挿入)
  • quickrun (vimを開いたままコードを実行)
  • Unite (ファイルオープンを便利に)
  • Neomru (Unite.vimで最近使ったファイルを表示できるように)
  • vimproc (UniteでGrep使えるように)
  • gist-vim (vim上からgistにコードUP。使い方等はこちらの記事で。)

Uniteについては.vimrcに書いてある通りの設定にしてあります。

ざっくりとまとめましたが今回は以上です。
今後またよさ気なプラグインがあったら追記していきたいと思います。

それでは。

参考にさせていただいたサイト

脱初心者を目指すVimmerにオススメしたいVimプラグインや.vimrcの設定 - Qiita

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

dotfilesをGitHubで管理する

こんにちは。

最近tmuxやvimプラグインにも手を出し始めました。
その結果.vimrcや.tmux.confなどのドットファイル(設定ファイル)を割と頻繁にいじるようになったので、これらをGitHubで管理しようと思います。

ちょっとめんどくさそうで後回しにしていましたが、割と簡単でした。

ちなみに私のdotfilesはこちらで公開していますので、良かったらどうぞ。

リポジトリの作成

まずはGitHubリポジトリの作成です。
大体みんなdotfilesというリポジトリ名にしているのでそうします。README.mdはどっちでもいいですが私はいらなそうなので作りませんでした。

ローカルにディレクトリの作成と移動

リポジトリを作成したら、ローカルにdotfilesというディレクトリを作成し、そこに管理したいドットファイルを移動します。
自分の場合は以下のファイル(ディレクトリ)を移動しました。

  • .bash_profile
  • .gvimrc
  • .tmux.conf
  • .vim
  • .vimrc
  • .gitconfig

移動したファイルのシンボリックリンクを作成

次に移動したファイルのシンボリックリンク(ショートカット)をホームに作成します。
これでdotfilesディレクトリに移動しても設定が反映されますし、dotfiles内のドットファイルを編集しても反映されます。
一個一個シンボリックリンクを作るのは面倒くさい上に、他の環境で何回も同じことをやるのはナンセンスなので以下のようなシェルスクリプトを作ります。
ファイル名を dotfilesLink.sh にして、場所は dotfiles 内に作りましょう。

ln -s ~/dotfiles/.bash_profile ~/.bash_profile
ln -s ~/dotfiles/.gvimrc ~/.gvimrc
ln -s ~/dotfiles/.tmux.conf ~/.tmux.conf
ln -s ~/dotfiles/.vim ~/.vim
ln -s ~/dotfiles/.vimrc ~/.vimrc
ln -s ~/dotfiles/.gitconfig ~/.gitconfig

そしたら dotfilesLink.sh に実行権限を与えて実行します。

chmod +x dotfilesLink.sh
./dotfilesLink.sh

あとはGitHubにdotfilesをPushするだけです。
.gitignoreで.DS_Storeとかをignoreしてあげると良いかもしれません。

以上でdotfilesをGitHub管理することが出来ました。
簡単でしたね。

それでは。

参考にさせていただいたサイト

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

tmuxの導入とよく使うコマンドまとめ

こんばんは。

tmuxをご存知でしょうか?
自分は知ってはいたのですが使い方がよく分からず、使っていませんでした。
しかし、その便利さに気がついてからはもう必須となりました。
sshしているときに複数のターミナル(画面)を使いたい時も便利ですし(OS X Mavericksではタブ機能がありますが新規タブを開くといちいちsshをし直さなくてはいけません)、何よりセッションで状態を残したままにできるのが非常に便利です。

今回はそんなtmuxをMacでも使いたいと思い導入してみたので、その手順とよく使うコマンドをまとめておきます。
コマンドは自分がよく忘れるので・・・

tmuxのインストール

macの場合はbrewコマンドで導入出来ます。
CentOSの場合は少し面倒くさいようなので、ググってみてください。

brew install tmux

tmuxの設定

設定は~/.tmux.confに書きます。
色々参考にし、以下のようにしました。

# プレフィックス(tmuxモードにするキー)を Ctl-b から Ctl-t に変更
unbind C-b
set -g prefix C-t

# set UTF-8
setw -g utf8 on
set -g status-utf8 on

# ESCキーの反応を早く(デフォルトだと少しラグがある)
set -s escape-time 0

# マウスを使えるように(Terminal.appだとこれやってもマウスでスクロール出来ないみたいです・・・)
setw -g mode-mouse on
set -g mouse-select-pane on
set -g mouse-resize-pane on
set -g mouse-select-window on

# ウィンドウの開始番号を1からにする(デフォルトは0から)
set -g base-index 1
# ペインの開始番号を1からにする(デフォルトは0から)
setw -g pane-base-index 1

# アクティビティなウィンドウをハイライト表示
setw -g monitor-activity on

#### キーバインドの設定
# プレフィックスキー r で設定ファイルをリロード
bind r source-file ~/.tmux.conf \; display "Reloaded!"

## ペイン関係
# | キーで縦に分割
bind | split-window -h
# - キーで横に分割
bind - split-window -v

# ペイン間の移動をvim風に
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
bind -r C-h select-window -t :-
bind -r C-l select-window -t :+

## コピーモード
# viキー風のコピーモードにする
setw -g mode-keys vi

# クリップボードを共有(tmuxでコピーしたものをMacのクリップボードにコピー出来るように)
set -g default-command "reattach-to-user-namespace -l bash"
# コピーモードをviキーに設定する
bind-key -t vi-copy v begin-selection
bind-key -t vi-copy y copy-pipe "reattach-to-user-namespace pbcopy"
unbind -t vi-copy Enter
bind-key -t vi-copy Enter copy-pipe "reattach-to-user-namespace pbcopy"

上記ではreattach-to-user-namespaceを使っているのでbrewでインストールします。

brew install reattach-to-user-namespace

設定は他にもしたほうが良いものがあるかもしれませんがとりあえず。。

tmuxの使い方

使い方の前に、設定ファイル中にも出てきたウィンドウとペインについて書いておきます。
tmuxはタブ分割のように複数の端末画面を持つことが出来ます。その一つひとつの端末(タブ)がウィンドウです。
ペインは、ウィンドウ中で分割できる画面のことです。
また、tmuxはウィンドウ毎のユーザの状態をセッションで管理します。そのセッションを残したり復元したりするのがデタッチ、アタッチです。

それを踏まえた上でtmuxの基本的なコマンドを見ていきます。
なお、ここでのプレフィックスキーは上で設定した通り C-t となります。

コマンド 説明
tmux tmuxを起動(セッション作成)
tmux new -s セッション名 セッションに名前をつけてtmuxを起動
PREFIX c 新規ウィンドウを作成
PREFIX n 次のウィンドウに移動
PREFIX p 前のウィンドウに移動
PREFIX 数字 指定した数字のウィンドウに移動
PREFIX w ウィンドウ一覧を表示(C-n, pで選び、Enterで決定)
PREFIX ,(カンマ) ウィンドウ名変更
exit ウィンドウを終了
PREFIX |(%) ペインを縦に分割(デフォルトは%)
PREFIX -(") ペインを横に分割(デフォルトは")
PREFIX h,j,k,l ペインを移動(デフォルトはo)
PREFIX ! ペイン分割を解除
PREFIX [ コピーモード(上記の設定をしていれば、この後Vimと同じ操作でコピーが出来ます)
PREFIX ] 貼り付け
tmux ls セッションリスト表示
tmux rename -t 変更前セッション名 変更後セッション名 セッションの名前を変更
PREFIX d デタッチ(セッションを切り離し)
tmux a -t セッション名 デタッチしたセッションをアタッチ(再度繋げる)。セッション名を指定しない場合は最後に作成されたセッションをアタッチ)
tmux kill-session -t セッション名 セッションの削除
tmux kill-server tmuxを終了(セッションも消される)

以上です。
tmux本当に便利です。
今回はMacに入れましたが、特にSSHでリモートサーバに入っている時が本当に便利です。
これから積極的に使っていきたいと思います。

参考にさせていただいたサイト

tmuxのすすめ | catatsuyのBlog
達人に学ぶ.tmux.confの基本設定 - Qiita
tmuxのインストールと設定 - Qiita
tmux基本のコマンド — nato's memo 1.0 documentation
Bash - tmuxを使いこなそう(ウインドウ、ペイン、セッション、アタッチ、デタッチ) - Qiita
tmuxとMacのクリップボードを共有する(copy-mode, vim) - Qiita

Mac(OS X)ではcronじゃなくてlaunchdでやる

こんにちは。 前にcrontabの書き方についてこちらの記事に書きましたが、Macの場合はlaunchdを使ったほうが良いみたいです。

今回はlaunchdについて書きたいと思います。

launchdとは?

launchdはデーモン、アプリケーション、プロセス、スクリプトの起動・停止・管理を行う、オープンソースのサービス管理フレームワークです。(Wikipediaより
まぁ簡単に言えばUnix系のinitやcrondの代わりをしてくれるものだと思います。 OS起動時に起動するものともいえると思います。

今回はこれをcronの代わりに使いたいと思います。

launchdのファイル構成

launchdの設定は、以下のディレクトリにlaunchd.plistを置き行います。

  • ~/Library/LaunchAgents
    各ユーザが管理するユーザごとに実行するエージェントを設定する
  • /Library/LaunchAgents
    管理者が管理する各ユーザごとに実行するエージェントを設定する
  • /Library/LaunchDaemons
    管理者が管理するシステム全体で実行するデーモンを設定する
  • /System/Library/LaunchAgents
    OS が管理するユーザごとに実行するエージェントを設定する(基本的には触らない)
  • /System/Library/LaunchDaemons
    OS が管理するシステム全体で実行するデーモンを設定する(基本的には触らない)

自分が実行したい内容によって設定ファイルを置く場所を変更します。
ちなみにエージェントは各ユーザ単位で起動されるサービスのことで、デーモンはシステム全体で一つだけ起動されるサービスのことです。

launchd.plistの記述

基本的にXMLベースで以下のように書きます。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>cycleBattery</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/bin/ruby</string>
        <string>/Users/username/example.rb</string>
    </array>
    <key>StartCalendarInterval</key>
    <dict>
        <key>Hour</key>
        <integer>0</integer>
        <key>Minute</key>
        <integer>0</integer>
    </dict>
    <key>StandardOutPath</key>
    <string>/Users/username/output.txt</string>
</dict>
</plist>

タグの中にタグ(連想配列を表すタグ)を書き、キーとその値を順に書いていきます。

ここで使っているキーや、よく使うキーの意味は以下の様になります。

key value 意味
Lavel string 必須。管理するジョブの名前。一意にする必要がある。ファイル名から拡張子を抜いたものにするのが一般的らしいです。
ProgramArguments array of string 必須。実行するプログラムとオプション、引数などを指定する。つまりarrayタグの中に、実行したいコマンドをスペース区切りで順番にstringタグの中に書いていけば良い。
StartCalendarInterval dict 指定した日時に実行します。これがcrontabと同じような感じですね。
StandardOutPath string 実行結果(ログ)を指定したファイルに書く。デフォルトは/var/log/system.log に出力される。
StartInterval Integer 起動間隔を秒数で指定(一定時間ごとに実行)
OnDemand boolean 起動のタイミングを要求があったときにするか常駐にするか。trueにすると要求があったときのみになり、falseは常駐。デフォルトは true。

設定したファイルをlaunchdへ登録

設定ファイルを書き終えたら、後はそれをlaunchdへで登録します。コマンドはlaunchctlです。

$ launchctl load ~/Library/LaunchAgents/example.plist
$ launchctl list
-   0   example
$ launchctl unload ~/Library/LaunchAgents/example.plist

loadで登録、unloadで登録解除です。修正した場合は、一度unloadしてからloadして再読み込みします。
また、listで登録したものを確認することが出来ますが、多分多いのでgrepとかで絞り込んで見ると良いと思います。

以上です。
それでは。

参考にさせていただいたサイト

launchdをcronの代わりに使うための簡易メモ - Mekajikiの日記

LaunchDaemons (launchctl, launchd.plist) の使い方 - maruko2 Note.

OS X の Launchd を cron の替わりに利用する | Lonely Mobiler

launchd を使ってスクリプトを自動実行してみた