ラベル scss の投稿を表示しています。 すべての投稿を表示
ラベル scss の投稿を表示しています。 すべての投稿を表示
2012年4月27日金曜日

[ruby]最初に知っておけば良かったbundlerの使い方 sinatra編

rails編は以前書いたのでsinatraでやってみる
用途としてはDBとかいらないスタティックなサイトの構築で、でもhtml、css、jsを生で書くのとか耐えられない。phpはマジ勘弁みたいなときにこうしてますよって感じのことを書きます。

(bundlerの使い方ってゆうかrubyでのweb制作全般って感じですね…)

まず適当な場所にプロジェクトのディレクトリを作ります。
hogeとかもアレなんでポートフォリオにしときます。

$ cd ~/Web
$ mkdir portfolio
$ cd portfolio

でプロジェクトのルートでGemfileをつくる

$ bundle init
Writing new Gemfile to /Users/kozo/Web/portfolio/Gemfile

中身はこんな感じだから...

$ vim Gemfile
# A sample Gemfile
source "https://rubygems.org"

# gem "rails"

以下に書き換えます

source "https://rubygems.org"

gem "sinatra"
gem "sass"
gem "haml"
gem "coffee-script"
gem "shotgun"

自分はnode.jsを入れてるんでアレですが、環境によってはjavascript実行環境が無いと怒られるかもしれないんで、そんときは以下のgemを足してみてください。

gem 'therubyracer'

でgemをインストールします。

bundle install --path vendor/bundle --without production

Fetching gem metadata from https://rubygems.org/.....
Installing coffee-script-source (1.3.1) 
Installing multi_json (1.3.2) 
Installing execjs (1.3.0) 
Installing coffee-script (2.2.0) 
Installing haml (3.1.4) 
Installing rack (1.4.1) 
Installing rack-protection (1.2.0) 
Installing sass (3.1.16) 
Installing tilt (1.3.3) 
Installing sinatra (1.3.2)
....

よしこれでgemが揃いました。
さらに作業環境を整えます。

sinatraを動かすアプリが必要なので app.rb と config.ru
sassやhamlを入れておくviewsディレクトリ、
ドキュメントルートになるpublicディレクトリをつくります。

$ touch app.rb
$ touch config.ru
$ mkdir views
$ mkdir public

アプリケーションのコードはこんな感じです

$ vim app.rb
require "sinatra/base"
require "sass"
require "haml"
require "coffee-script"

module Portfolio
  class App < Sinatra::Base
    get '/' do
      'hello'
    end
  end
end
$ vim config.ru
require "./app"
run Portfolio::App

でアプリがちゃんと動くかどうか確認してみる
shotgunを入れておいたので

$ bundle exec shotgun
== Shotgun/WEBrick on http://127.0.0.1:9393/
[2012-04-26 23:49:20] INFO  WEBrick 1.3.1
[2012-04-26 23:49:20] INFO  ruby 1.9.2 (2011-07-09) [x86_64-darwin11.2.0]
[2012-04-26 23:49:20] INFO  WEBrick::HTTPServer#start: pid=457 port=9393

localhost:9393にアクセスして hello が表示されればOKです
そしたらこっからガシガシコード書いていくんですが、shotgun使ってるのでapp.rbを編集してもサーバの再起動が必要ありません。
home、about、galleryの3ページと仮定して以下のように書き換えました

$ vim app.rb
module Portfolio
  class App < Sinatra::Base
    before do
      @site_name = 'My Portfolio'
      @nav = ['home', 'about', 'gallery']
    end
    
    get '/' do
      haml :index
    end

    get '/about/?' do
      haml :about
    end

    get '/gallery' do
      haml :gallery
    end
  end
end

before do ... end の中で共通の処理を記述できます。
site_nameとnavを用意しておきました。変数に@をつけておくとインスタンス変数と言ってviewに渡せるようになります。
htmlはhamlで書くので以下のようにします。

$ vim views/index.haml
%h1= @site_name
%nav
  %ul
    - @nav.each do |n|
      %li
        %a{href:"/#{n}"}= n
%p welcome to my portfolio site

でもこれだとheadとかないので layout を作成します

$ vim views/layout.haml
!!! 5
%html
  %head
    %meta{charset:'utf-8'}
      %title= @site_name
  %body
    = yield

yieldの部分に各ページの内容が入ります。
次はsassというかscssを使ってみます。
まずはapp.rbを編集して、

$ vim app.rb
get '/stylesheets/base.css' do
  scss :base
end

galleryの下に追記しておきました。
ここまで出来たら後はviews内にscssファイルを作って作業していくだけです。
簡単ですね!

ちなみにrubyのシンボル(:で始まる文字列)は " で囲めば / とかも使えるので
views内でファイルが平置きになってるのが嫌な人は views/haml や views/scss を作っておいて
app.rbで

haml :"haml/index"

と指定すればちゃんと呼び出せますよ!

sinatraとかhamlとかscssとかcoffeescriptの詳しい使い方はドキュメントを読もー

2012年1月31日火曜日

[ruby]最初に知っておけば良かったbundlerの使い方 rails編

PHPの代わりというか、次のレベルとしてRubyを使うならまず最初にbundlerの使い方を知っておきたかった。 以下自分なりに覚えたbundlerの使い方を記録しておく。

作業ディレクトリを作る。

$ mkdir hoge_project

railsなんかはディレクトリ名がそのままアプリ名になっちゃうから気をつける
(これってオプションでディレクトリ名と別の名前渡せるのかな??)

作業ディレクトリでbundlerのinitを実行する。

$ cd hoge_project
$ bundle init
Writing new Gemfile to /Users/username/hoge_project/Gemfile

これでサンプルのGemfileが作られる。
▼内容

# A sample Gemfile
source "http://rubygems.org"

# gem "rails"

▼一行目を削除し、四行目のコメントアウトを外してバージョンを3.1.3に指定

source "http://rubygems.org"

gem "rails", "3.1.3"

プロジェクトローカルな状態でgemをインストール

$ bundle install --path vendor/bundle

地味にbundlerの便利なところはこの時点でvendorフォルダの有無に関わらずインストール出来ちゃうところ。

Fetching source index for http://rubygems.org/
Installing rake (0.9.2.2) 
Installing multi_json (1.0.4) 
Installing activesupport (3.1.3) 
Installing builder (3.0.0) 
Installing i18n (0.6.0) 
Installing activemodel (3.1.3) 
Installing erubis (2.7.0) 
Installing rack (1.3.6) 
Installing rack-cache (1.1) 
Installing rack-mount (0.8.3) 
Installing rack-test (0.6.1) 
Installing hike (1.2.1) 
Installing tilt (1.3.3) 
Installing sprockets (2.0.3) 
Installing actionpack (3.1.3) 
Installing mime-types (1.17.2) 
Installing polyglot (0.3.3) 
Installing treetop (1.4.10) 
Installing mail (2.3.0) 
Installing actionmailer (3.1.3) 
Installing arel (2.2.1) 
Installing tzinfo (0.3.31) 
Installing activerecord (3.1.3) 
Installing activeresource (3.1.3) 
Using bundler (1.0.21) 
Installing json (1.6.5) with native extensions 
Installing rack-ssl (1.3.2) 
Installing rdoc (3.12) 
Installing thor (0.14.6) 
Installing railties (3.1.3) 
Installing rails (3.1.3) 
Your bundle is complete! It was installed into ./vendor/bundle

こんな感じでインストール完了。
最初はrails以外のgemがわんさかインストールされちゃってる事にかなりびっくりしました。
今なら依存関係があるから当たり前やんって思うけど、この辺のニュアンスってなかなか初心者には分かりづらい。

ここまでだとrailsアプリはまだ出来てないのでスケルトンを作る

$ bundle exec rails new . -T -d mysql

このコマンドの意味するところは
プロジェクトローカルのgemを使い、
railsの新しいアプリケーションをこのディレクトリで作成し、
かつtestディレクトリを省略し、
DBはmysqlを選択
ということです。

▼で実行するとこんな問いかけをくらう

       exist  
      create  README
      create  Rakefile
      create  config.ru
      create  .gitignore
    conflict  Gemfile
Overwrite /Users/username/hoge_project/Gemfile? (enter "h" for help) [Ynaqdh] 

既存のGemfileをrails仕様に上書きしてもいいか?ということで問題ないので enter

       force  Gemfile
      create  app
      create  app/assets/images/rails.png

          ... 省略 ...

         run  bundle install

でここでエラーが発生するんですよねぇ…
/Users/username/.rvm/gems/ruby-1.9.2-p290@global/gems/bundler-1.0.21/lib/bundler/resolver.rb:280:in `resolve': Could not find gem 'jquery-rails (>= 0) ruby' in any of the gem sources listed in your Gemfile. (Bundler::GemNotFound)

でも気にせずrspecをGemfileに追加

group :development, :test do
  gem 'rspec-rails'
end

でbundle installに再チャレンジ

$ bundle install
Fetching source index for http://rubygems.org/
Installing coffee-script-source (1.2.0) 
Installing execjs (1.3.0) 
Installing coffee-script (2.2.0) 
Installing coffee-rails (3.1.1) 
Installing diff-lcs (1.1.3) 
Installing jquery-rails (1.0.19) 
Installing mysql2 (0.3.11) with native extensions 
Installing rspec-core (2.8.0) 
Installing rspec-expectations (2.8.0) 
Installing rspec-mocks (2.8.0) 
Installing rspec (2.8.0) 
Installing rspec-rails (2.8.1) 
Installing sass (3.1.12) 
Installing sass-rails (3.1.5) 
Installing uglifier (1.2.3) 
Your bundle is complete! It was installed into ./vendor/bundle
※既にインストール済みの行は省きました

よし!
これでrailsアプリのスケルトン出来ました。
後はrailsコマンドとかrakeするときに常に bundle exec を付けておけば
プロジェクトローカルのgemで実行されます。

アプリケーション毎のbundlerの設定は bundle config で確認できる(.bundle/configファイルの中身を見てる)

$ bundle config
Settings are listed in order of priority. The top value will be used.

path
  Set for your local app (/Users/username/hoge_project/.bundle/config): "vendor/bundle"

disable_shared_gems
  Set for your local app (/Users/username/hoge_project/.bundle/config): "1"

開発用サーバを起動

$ bundle exec rails s
=> Booting WEBrick
=> Rails 3.1.3 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
[2012-01-31 17:06:22] INFO  WEBrick 1.3.1
[2012-01-31 17:06:22] INFO  ruby 1.9.2 (2011-07-09) [x86_64-darwin10.8.0]
[2012-01-31 17:06:22] INFO  WEBrick::HTTPServer#start: pid=1895 port=3000

ちなみにこの時に -p (ポートオプション)を付ければ好きなポート番号でWEBrickを起動できますね

まだ初心者が知っておいたほうがいい事があって、
バージョン管理している場合気を付けなくちゃいけないのは vendor/bundle ディレクトリは管理の対象にしないこと。
これって本業のプログラマーさんなら当たり前なんだろうけど。
mysql2とか、環境に依存するgemもあるから環境毎にbundle installするべきだってことに気づくのが大分遅かった…

2011年7月30日土曜日

[Kod][Mac OS X]プログラマー向けエディタKodにhamlとsassのlangファイルが無かった

無かったんです。

なのでrubyとcssで代用しました。(基本的には同じだよね!?)


kod.appコンテキストメニューから「パッケージの内容を表示」で以下のようにフォルダを辿っていくと、「lang」フォルダがあります。


で、haml用にruby.langをコピってhaml.langにリネーム。
でもこれだけだとSyntax modeにRubyが2つになってしまうので、
@titleをHAMLに変更して @matchextをhamlにしておきました。



まぁ色付けは控えめなんだけど……真っ白よりはましかな



scssも同じ要領で使えちゃいますよ!


てゆうかlangファイルの中身ってrubyで書いてあるのね