おもしろwebサービス開発日記

Ruby や Rails を中心に、web技術について書いています

emacsとRinariで快適Rails開発!

emacsRails開発をする際、emacs-railsを使っている方が多いと思います。emacs-railsはとても便利なelispなのですが、最近は更新頻度が低く、rhtml→html.erbの対応も一部されていなかったりします。あとRspecの対応もイマイチ。emacs使いの人たちは一体どうやってRails開発しているのでしょうか?

そこでRinariですよ

Rails On Emacs | Google グループを見ると最近は"Rinari"の話題で持ち切りなようです。Rinariはemacs-railsとは違いコア部分を小さく保って、プラグインで拡張していくタイプのelispです。

Rinari: Ruby on Rails Minor Mode for Emacs

基本的には上記に全部書いてあるのですが、整理する意味でまとめてみます。

コア部分のインストール

まず、gitでダウンロード

git clone git://github.com/eschulte/rinari.git
cd rinari
git submodule init
git submodule update

.emacsに下記のように書けばコア部分の設置は完了です。

;; Interactively Do Things (highly recommended, but not strictly required)
(require 'ido)
(ido-mode t)
;; Rinari
(add-to-list 'load-path "~/path/to/your/elisp/rinari")
(require 'rinari)

上のほうでrequireしているido-modeですが、これはC-x C-fなどした時にファイル名の一覧をミニバッファに表示してくれ、さらにファイル名を補完できるモードです。ファイル名の一部を入力するか、C-sまたはC-rでファイルを選択して開く事が出来ます。最初はちょっと戸惑うかもしれませんが、慣れたら便利です。

ido-modeの使い方

詳しくは下記参照なのですが、こちらも簡単に整理してみます。

EmacsWiki: Interactively Do Things

  • C-sで次のファイルを選択、C-rで前のファイルを選択
  • tabで補完一覧表示。一覧が一つしかない時はそのファイルを開く。
  • C-fすると通常のC-x C-fの状態に戻る
  • //でルートディレクトリへ
  • C-x C-dでDired

Rhtmlオプションのインストール

次にrhtml(erb.html)を編集するときに使うelispをインストールします。rhtml(erb.html)用のマイナーモードは3種類から選べるようになっています。

  • nXhtml-Mode
  • MuMaMo-Mode
  • rhtml-Mode

nXhtml-ModeとMuMaMo-Modeは外部のプロジェクト。rhtml-ModeはRinariプロジェクトで作っているらしいので、僕はrhtml-Modeをインストールしてみました。GitHubからダウンロードして、.emacsに下記のようにすれば設定完了です。

;;; rhtml-mode
(add-to-list 'load-path "~/path/to/your/elisp/rhtml")
(require 'rhtml-mode)
(add-hook 'rhtml-mode-hook
    (lambda () (rinari-launch)))

rhtml-Modeは、htmlタグやerbのタグをインデントしてくれるminor-modeです。他にも機能があるかもしれません。が、erbのタグがきちんとインデントされるようになっただけで僕は今のところ幸せです。

Rinariのキーバインド(Navigation系)

C-c ; fがプレフィックスで、続くキーに対応するディレクトリをfindします。また、各ファイル間の関連にも対応しており、例えばUsersController.rb編集していてC-c ; f mとすると、app/models/User.rbを探し開きます。存在しない場合はapp/models/配下のファイルから選択します。

キーバインド findするディレクトリ
C-c ; f f RAILS_ROOT/
C-c ; f c app/controller/
C-c ; f m app/models/
C-c ; f v app/views/
C-c ; f h app/helper/
C-c ; f i db/migrate/
C-c ; f n config/
C-c ; f e config/environment/
C-c ; f j pubic/javascript/
C-c ; f l vendor/plugin/
C-c ; f o log/
C-c ; f p public/
C-c ; f s script/
C-c ; f t test/
C-c ; f w lib/workers/
C-c ; f x test/fixtures/
C-c ; f y public/stylesheets/
C-c ; f r spec/
C-c ; f z spec/fixtures

Rinariのキーバインド(その他)

部分テンプレート作成

view編集時に、範囲選択してC-c ; x するとその部分を部分テンプレートにできます。

rgrep

C-c ; gすると、railsプロジェクト上のファイルをgrepできます。.svn/配下のファイルは対象外なので地味に便利。

<%= %>の挿入

C-c ; eとすると<%= %>が挿入されます。snippetを設定したら必要ないかも。

部分テンプレートへ移動?

C-c ; ;とすると、<%= render の部分を探して、指しているテンプレートへ飛べるらしいのですが・・・僕の環境ではうまく動きません。解決法ご存知の方いたら教えてください><

(追記)
renderメソッドを使用している行でC-c ; pとすると、指しているテンプレートへ飛べます。

scriptの実行

C-c ; sとして、さらにscriptの名前を指定してやると対応するscriptを実行できます。

ちなみにこのキーバインドや、ここより下のキーバインドを試したときに、「Missing the Rails gem.」のようなエラーが出る方はEmacsのPATHの設定を修正する必要があります。僕は下記のようにして解決しました。

;; PATHの追加
(dolist (dir (mapcar 'expand-file-name '("/usr/local/bin")))
  (setenv "PATH" (concat dir ":" (getenv "PATH")))
  (setq exec-path (append (list dir) exec-path)))

Mac 以外の方は.profileにPATHを設定してやるとうまくいくらしいです。詳しくは下記参照。

execution problem - Rails On Emacs | Google グループ

sqlのコンソールを開く

C-c ; q として、その後ユーザ名やらパスワードをいれるとsqlのコンソールを開けます。

テストの実行

C-c ; t とするとテストの実行が出来るようです(rspec使いなので未検証)

Rakeの実行

C-c ; r として、rakeタスクを続けて書く事でタスクを実行できます。

script/consoleの実行

C-c ; c とすると、script/consoleが実行されます。

webサーバの起動

C-c ; w とすると、script/serverを実行したのと同じようにwebサーバが起動します。

snippet

Rinari本体にはsnippet機能はないようなので、別途elispをインストールしてやる必要があります。

yasnippet - Google Code
eschulte's yasnippets-rails at master ― GitHub

上記からyasnippetとyasnippets-railsをダウンロードして適当な場所に展開します。その後.emacsに下記のように設定してやります。

;; load-pathにyasnippetのパスを通す
(setq load-path (cons (expand-file-name "/path/to/yasnippet") load-path))

;; yasnippetのロード
(require 'yasnippet)
(yas/initialize)
(yas/load-directory "/path/to/yasnippets-rails/rails-snippets")

snippetがたくさん定義されました。やったね。

まとめ

現段階でもemacs-railsとほぼ同等の機能をもっており、今後も開発が継続されるはず(多分)なので、emacs-rails使いの方は乗り換えを検討してみてもよいのではないでしょうか。

英語の発音が良くなる本を買った

発音の勉強もしなきゃなーと思って買ってみた。今日からローテーション入り。

英語の発音がよくなる本
巽 一朗
中経出版
売り上げランキング: 1776
おすすめ度の平均: 4.5
2 表紙の女性は若かりし頃の写真です。。。
5 とにかく良い! 手に入れておくべき発音練習本
5 英語の勉強の最初にこれをやるべき
4 辞書のようにして使っています
5 DVDの効果が抜群!

最新脳科学が教える高校生の勉強法を読んだ

以前レバレッジ勉強法を読んで以来、復習って大事だなーと思っていて、実際に英語の参考書を繰り返しやり直したりしています。ですが、どのタイミングで復習するのが一番効率がいいのかについてはよくわからず、適当に復習していました。そんな折に下記の文章を読み、「最新脳科学が教える高校生の勉強法」を早速注文。今日読了しました。

復習の有用性と、復習すべきタイミング(何日後?・何回?)については、トニー・ブザン 頭がよくなる本や、最新脳科学が教える 高校生の勉強法が詳しい

勉強方法を勉強して分かった僕に足りなかった3つのこと - ひげぽん OSとか作っちゃうかMona-

まとめ

読んで気になった部分をメモ

  • もっとも人の心を落ち着かせ、集中力を高める色は緑色
  • モーツァルトを聞くと短期的にIQが8~9上がるらしい
  • 短期記憶から長期記憶に変わるかどうかの審査期間は約一ヶ月
  • 身につけたばかりの新しい知識よりも、脳の中でじっくり寝かせた知識のほうが、脳にとっては利用しやすい知識になる(レミニセンス効果)
  • 一度にたくさんの知識を詰め込むと、記憶の干渉が起こり、覚えが悪くなる。
  • 何か新しい知識を身につけたときには、その日に六時間以上眠る事が絶対に欠かせない
  • 感情が盛んなとき、好奇心が刺激されているときは物事を記憶しやすい
  • おなかが減ってるとき、涼しいときの方が物事を記憶しやすい
  • ○○ができたらご褒美。は心理学的に有効な手段
  • 記憶とは失敗と繰り返しによって形成され強化されるもの
  • スモールステップ&パーフェクトマスターこそが最短最善
  • 何かを行う時の集中力は初めと終わりに高くなる。(それを利用し、一回の勉強のサイクルを短くし何回も繰り返す事で集中力を高められる)
  • ある分野の理解の仕方を覚えると、他の分野に対する理解の仕方までもが上達する(学習の転移)。よって、複数の教科を均等に勉強するよりもまず一つの分野を極める方が長期的に見て得策。
  • 他の内容と結びつけて覚えると覚えやすい(ゴロ合わせなど)
  • 覚えた事を他の人に説明してみると覚える
  • 声に出したり紙に書いたりしながら記憶すると覚えやすい
  • 学習の転移には「べき乗の効果」があり、勉強の成果はあるときになって突然爆発するかのようにあらわれる。努力の継続が大事。
最も効率的な学習プラン
  • 学習した翌日に、一回目
  • その一週間後に、二回目
  • 二回目の復習から二週間後に、三回目
  • 三回目の復習から一ヶ月後に、四回目

まとめ

やっぱり勉強に近道なしですねー

最新脳科学が教える 高校生の勉強法    東進ブックス
池谷 裕二
ナガセ
売り上げランキング: 1747
おすすめ度の平均: 4.5
5 学問の王道を捜そう
5 脳の構造から説明しているので、納得感がある。高校生だけに読ませるのには惜しい一冊
2 うーん・・・・
4 学習法としては最も説得力ある良書、ただし他の書との重複が多すぎ
5 再認識

「脳にいいこと」だけをやりなさい!を読んだ

最近「脳にいいこと」だけをやりなさい!読んだので、書いてある事 & 自分なりの考えのメモを書いておきます。

はじめに

  • 物を持てば幸せ
  • お金があれば幸せ
  • 地位があれば幸せ

といった「○○があれば幸せ!」考えの人は、外的な要因によって幸せを左右されてしまう。「○○がなくても幸せ!」という思考ができるようになると、脳の働きも増し、外的要因に思考が左右される事も少なくなり、結果的により幸せになれる。そこで、「○○がなくても幸せ!」という思考になるにはどのようにしたらいいかが書かれています。

どうやって「○○がなくても幸せ!」になるか

  • まず、どんなことでもある程度継続する必要がある。
  • 人間の行動の90%は習慣によるもの。思考を変えるには習慣を変えていく必要がある。

人間は、ネガティブバイアスと呼ばれる脳の働きによって、ポジティブな事よりもネガティブな事のほうが印象に残りやすくなっている。それらを

  • ポジティブな気持ちを頭にすり込む
  • ネガティブな気持ちには浸らないようにする

ことを習慣づけることでポジティブ思考を身につけてゆく。

具体的にどうしたらいいか

  • どうしてネガティブな気持ちになるのかを科学的に理解する。それにより実際にネガティブ思考になってしまっても客観的な視点で思考を捉え、ネガティブ思考から抜け出すためのきっかけを作る事が出来る*1
  • すべての世界は自分に優しくしてくれるものだと信じる。困難が起きても、それを嘆いたり変えようとしたりするのではなく、「自分に必要だから起こったのだ」という風に受け取り、「ここから学べる物は何だろう」と考える。
  • 意識してポジティブなものに注意を向ける
  • ネガティブな事に対しては、解決策に目を向ける、または意識して手放す。
  • 「あの人は自分を嫌っているのではないか?」といったようなネガティブな推測に対しては、本当にそうなのかを検証してみる。
  • 悪影響を受けそうな人とはなるべく関わらないようにして、関わらなければならないときはなるべく受け流すようにする

感想

これまで自分は、わりと「幸せになるためにつらくても耐え抜く!」という思考だったのだけれど、それは間違ってるなーと感じました。ここ数日、何でもなるべく楽しくやることを心がけているのですが、これまでと明らかに能率が違います。本の後半部は気功やら宇宙エネルギーやら出てきてちょっとトンデモ感があったけど、前半部だけで1400円の価値はあるかと。

「脳にいいこと」だけをやりなさい!
マーシー・シャイモフ
三笠書房
売り上げランキング: 96
おすすめ度の平均: 3.5
1 茂木につられて購入しないように。
4 いつも幸福でいなさい
5 脳の働きを感じるのに良いとと思います。
5 これはいい本です
5 うつ 気味の方にも是非、読んでもらいたい1冊です。

*1:本には書いてなかったけど、おそらくこういう意図で科学的な説明が多かったんだと思う

1981s忘年会#2に行ってきた

昨日は渋谷で1981s忘年会が開催されたので参加してきました。

僕はほとんど勉強会系の集まりしか行かないので、飲み会オンリーの会に出席するのは今回が初めて。でも同年代のエンジニアの友達ほしいなーと思って参加してみました。

感想

まず最初に、金曜の開催なのにスーツの人が少なくてびっくりしました。スーツの人は全体の一割くらい。こういった会に関心を持って参加するのはやっぱりギークな人が多いんですかね。

会場に到着後、ゆーすけべーさんの仕切りで乾杯。そこから2次会終了までで、100人全員は無理でしたが30人くらいの人とビールを飲みつつお話しました。ブログやtwitter上では認知していても実際に会った事のなかった方達と話せたのが嬉しかったです。ネットとリアルが繋がる瞬間。リアルの大事さを再認識しました。

あと学生さんも数人参加していて、学生若いなーと感心。話したら進路についてもしっかり考えていてさらに感心。僕が学生の時は何にも考えてなかったなー。

この出会いを機にもっと色んなカテゴリの人たちと(リアルとネット両方で)繋がっていけたらいいなーと思います。

参加された方々お疲れさまでした!!