github:pagesはもう使っているか?

えんじにあ〜たるもの、自分が何をしているのか何をできるのか発信するのは大切なことです。
最後のRubyKaigiに参加し、いろいろなお話を聞いたのですが発表者の皆様の共通しているマインドとして「勉強しよう!発信しよう!」みたいなものを感じました。それからもちろん、楽しむことも大切ですね。
となると、Githubのアカウントは持っているべき。書いたコードを公開しよう。それが自己紹介の代わりともなっていくことでしょう。

それから、ネット上での各種活動もまとめておきたいですよね。そういったツールはすでに色々ありますが、もう少し技術寄りなまとめ静的ページを持っていてもいいかもしれません。かねてからSinatraでつくってherokuに置こうかなと思っていたのですが、もっと簡単な方法があります。それが、Github Pages なんですよ。

Github Pages

marutanm/marutanm.github.com · GitHub のように username.github.com といったリポジトリ作成し、index.html を置く。あとは通常通りgithubにpushする。そうすればGithubさんが http://marutanm.github.com/ みたいに対応したページを自動的にアレしてくれます。
f:id:marutanm:20110718182832p:image
うまくいっていればGithubからこんなnotificationがきます。
SinatraでつくってHerokuにおくにしても、それをgithubに置きもするでしょうから手間は変わらないどころか削減されますね。

たとえばiPhoneアプリをストアにsubmitするときなどサポートページのURLを要求されますが、プロジェクトでも同様にページをホスティングしてくれるのでそれを使うという手がありますね。
その他、独自ドメインを使ったり、独自404ページをだせるといった機能もあるようで、くわしくは GitHub Pages を参照くださいません。

Heroku Express

タイトルはHello Worldのノリで。

ここ数日、HerokuでNode.jsとExpressを使ってHello worldする - アインシュタインの電話番号☎ あたりの一連のエントリを参考にしつつNode.jsをさわってみています。

Padrino、Haml、Scss、Shouldaあたり少しずつわかってきたところだったのですが、別のフレームワークなり言語なりを使うと色々な発見があっていいですね。理解をふかめるために、NodeまわりとRubyまわりで何が何に対応するのかを LL周辺を理解するための対応表 - 帰ってきた4.5帖の生活 を参考にまとめておきます。

JavascriptRuby

まずは、上記エントリからの抜粋みたいな感じで

分類 Javascript Ruby
WebアプリFW Express Sinatra
言語バージョン管理 nave, nvm rvm
モジュール管理 npm gem

大ざっぱにはこんな感じですよね。

ちなみに私の場合は、以前Powを使いはじめるときに初めてnodeをインストールしたのですが、nvmがzshと相性悪くうまく動いてくれず、その後homebrewでnodeをインストールしました。今もそうしています。ただ、現状heroku上ではnode v0.4.7固定なので、ローカルでも合わせておくためにはnaveなりnvm使ったほうがよさそう*1

Herokuで動作させる時のもろもろ

分類 Node Sinatra
Stack cedar(beta) bamboo
パッケージ管理 package.json Gemfile
テンプレート hamljs haml
CSSテンプレート sass、stylus sass

Stackについて、それぞれcedarとbamboo、誤解を恐れずにいえばVMが違う。それぞれのリファレンスは以下。そういえば、bambooはRubyのバージョンが最近デフォルトで1.9.2になりましたね。

cedarがまだbeta扱いなのもあってか、現状bambooで動いているアプリをcedarにmigrateすることはできないのでNodeを使う場合はheroku-create時に明示的にcedarを指定する必要がある。

パッケージ管理については、BudlerではGemfileに書いていたのと同じようなことをpackage.jsonに書けばよい。json手書きかよ、記号多いよ、とか思ったりすることも。BundlerでのGemfile.lockにあたるものがnpmにはないようなんだけど、そもそもGemfile.lockの意味合いがよくわかってなかったりするので必要に応じて調べようかと。

テンプレートエンジンは、SinatraでもExpress上記以外でも色々と使える。hamlとhamljsが対応していたり、sassはどっちにもあるけどExpressのほうはイマイチでStylusがよさそうだとか

そのほか雑感

Express(というかNode?)はいちいち記述量が多いような感じがしているけど、これはCoffeeScriptで改善できそう。

ふだんPadrinoを使っている身としてはexpressコマンドもほとんど違和感なく扱えていい感じ。cedarスタックから必要になったProcfileを準備する手間があるくらいで、Herokuでとりあえず動かすだけならSinatraよりも簡単かも。Sinatraは各種ファイルを準備しないとないもんね。まあ、よく使う人はテンプレートを持っていたりするだろうけど。

Padrino比だと、Padrinoのほうが便利な感じがする。PluginsがあってherokuにデプロイするためのファイルやらORM関連のファイルやら準備も簡単。それからpadrinoコマンドのほうがexpressコマンドより賢い感じ。たとえば既存プロジェクトにテンプレートエンジンを追加する場合の挙動とか。このへんはExpressはまだまだ若いプロジェクトだなーといった感。

*1:基本的にhomebrewは最新バージョン入れとけみたいな方針のため。gitで古いformulaをチェックアウトして、とかの手段はあるけど

vundleとfugitiveによろしくやってもらう

今こそ!git の branch を vim のステータスラインに表示!!するとき!!! - Meltdown Countdown で %{fugitive#statusline()} について書きました。
VundleでVundleをBundleしてみる - Meltdown Countdown でVundleについて書きました。
ちなみに、Vundle自体をBundleするという方針は開発者さまもその後に推薦されてます → vundle is a bundle too | gmarik.info

で、同開発者様のエントリでこんなものがありました。
chicken or egg dilemma | gmarik.info
Vundleでいれたプラグインに依存した書き方を.vimrcにしていると、新環境で:BundleInstallできなくて困るとのこと。たとえば、statuslineに%{fugitive#statusline()}をつかったときなど。

もちろん、対応策も提示されています。
Bundle 'hogehoge' を書く部分を別ファイルとして、.vimrcからそれを呼ぶようにしておく。
そして初回起動時は別ファイルのほうを指定してBundleInstallだけをする。

$ vim -u bundles.vim +BundleInstall +q

なるほど。たしかに。
そうすれば次回以降は普通にVimを起動できますね。

Vundle便利ですね。こういった利用者の声もよせられています。


良エントリに期待が高まりますね!!

:BundleSearch とかしてサクッと新しいプラグインを入れることに慣れてしまうともう戻れません。便利なものはどんどん使いましょう!!

Homebrewで古いバージョンのパッケージを削除するには

brew cleanup [formula]

brew-cleanupでCellarに眠った古いパッケージのお掃除ができます。
formula名を指定すれば、そのパッケージの古いバージョンのみを削除。

HomebrewのサブコマンドはRubygemsと共通なものが多いんですね。もともとそっちを使っていればサブコマンドに迷わず、難なく使えるのでしょう。
便利なものはどんどん使って楽をしたいですね。

brew-info が役立つ希有な例

Homebrewにはinfoサブコマンドがあるのですが、パッケージのバージョンやコマンドのパスを確認できる程度の認識でした。ですが、パッケージによってはもっと役立つ情報が記載されていたりもします。

gitにはサブコマンドを補完するシェルが付属します。プロンプトにgitブランチの状態を表示してくれたりします。最近のバージョンではZshにも対応してたり。
そのあたりの設定がid:ruedapさんのエントリで紹介されています。

まずはgit-completion.bashをインストールする。デフォルトで入ってるかもしれないと前述の記事では書かれていたけど、自分の環境(スノーレパードにHomebrewでGitをインストールした状態)では入ってなかった。

http://d.hatena.ne.jp/ruedap/20110706/mac_terminal_git_branch_name

id:ruedapさんには既にお伝えしたのですが、それが入ってるんですよ。

brew infoコマンドで確認してみましょう。

/usr/local/etc/bash_completion.d にあるって表示してくれます。
これがわかれば、ホームディレクトリからシンボリックリンクなり、rcファイルで指定するsourceをそっちにするなり。

ちなみにプロンプトなんですが、ZshではカレントディレクトリなんかはRPROMPTに表示してます。
Bashのときは、環境によりますが長くなる場合は2行にしちゃってますね。

すべてのMacでgitな人は今すぐバージョンを確認するべき

使っていたgitがいつのまにか古いやつになってた。

% git --version
git version 1.7.3.4

おかしい、古い。

% which git
/usr/bin/git

おかしい、パス違う。gitはhomebrewで入れていて、/usr/local/bin にあるはず。

% /usr/local/bin/git --version
git version 1.7.5.4

ですよねー。いつの間にか少し古いgitを使ってしまっていたよう。

調べてみると、Xcode4を入れたタイミングで /usr/bin/git が入ってしまったらしい。
Does Xcode 4 install git? - Stack Overflow

安心と信頼のstackoverflowにあるように /etc/paths を書き換えて対応。

% which git
/usr/local/bin/git

オーライ、オーライ。