ウェブ-HACKS 「とりあえずやってみよう!」ブログでタグ「Ruby」が付けられているもの

RubyでHTMLファイル生成(Excelデータを一括でHTMLファイルにする)

   ブックマークに追加する
以前にもブログで書いたRubyでHTMLファイル作成ですが、さらに改良しExcelの1行を1つのHTMLファイルに変換するプログラムを書きました。さらに、前回同様HTMLテンプレート機能も使用しています。Excelデータはタブ区切りテキストにします。
※プログラムはクリエイティブコモンズです。

#!/usr/bin/ruby -Ks
require 'erb'
require 'yaml'
include ERB::Util
$KCODE = 's'

class CreateHtml

   def initialize
      @config = YAML.load_file("config.yaml")
      @erb = ERB.new(File.read(@config[:template]), nil, "-")
   end

   def generate
      objs = input
      for obj in objs do
         output(obj)
      end
   end

   def input
      objs = Array.new
      count = 0
      open(@config[:data]).each{|input|
         if count == 0
            @headers = input.split
            count = 1
            next
         end
         h = Hash.new
         arr = input.split
         @headers.size.times{|i|
            h.store(@headers[i], arr[i])
         }
         objs.push(h)
      }
      return objs
   end

   def output(o)
     open(@config[:output]+"/"+o['id']+".html", "w"){ |output|
         output.write(@erb.result(binding()))
      }
   end
end

obj = CreateHtml.new
obj.generate

YAMLも使ってみました。詳細は以下を参照。


config.yamlは以下の通り。

:template: template.rhtml
:data: data.txt
:output: output


data.txtにタブ区切りテキストです。1行目のheader行の項目名をテンプレートファイル(template.rhtml)に設定すると項目が書く行の設定値でHTML生成します。また、1行目のid項目は必須でその項目値がHTMLファイル名になります。


Rubyのmechanizeでnameにハイフンがあると値を設定できない

   ブックマークに追加する
以前に作ったRubyクローラーを改造して、検索フォームに自動で値を設定するプログラムをつくりました。その際にテキストフィールドのnameにハイフンがあり値の設定にはまったので解決方法を記載します。
以下ですとエラーとなります。 ※keyword-fieldにハイフンが入っているためです。

    page = @agent.get('http://example.com')
    search_form = page.forms.with.action('http://example.com/search.html').first
    search_form.keyword-field = keyword

実は以下のように['keyword-field']とすればOK。簡単です。いろいろ検索したのですが、解決策が探せなかったので、記載してみました。

    page = @agent.get('http://example.com')
    search_form = page.forms.with.action('http://example.com/search.html').first
    search_form['keyword-field'] = keyword

#3 RailsでActiveRecord のエラーメッセージを日本語化する(ActiveHeart)

   ブックマークに追加する
ブログの更新も大分滞っていました。仕事が忙しくてなかなかWebScrapも作成する時間があまり取れないんですよね。おおよそ機能はつくれたのでいくつか、忘れないようにメモしときます。

今回は、Railsのエラーメッセージを日本語化するというもの。
Ruby-GetTextを使うのが一般的のようですが、今回はそこまできっちり作らなくても良いかなと思いActiveHeartを使用しました。以下手順載せます。すごい簡単ですよ。

まず以前にSubversionをインストールしてますので、railsコマンドで生成したフォルダで以下実行。


$ ruby script/plugin install http://svn.rails2u.com/public/plugins/trunk/active_heart/

+ ./active_heart/init.rb
+ ./active_heart/lib/active_record_messages_ja.rb
+ ./active_heart/lib/iso2022jp_mailer.rb
+ ./active_heart/lib/trans_sid.rb

これだけでエラーメッセージが日本語化します。すごく簡単ですよね。
テーブルのカラム名はそのままですので、その場合はmodelに以下設定をすればOK

set_field_namesでカラム名と表示文字列をマッピングする

例)
class Bookmark < ActiveRecord::Base
  set_field_names :title => 'タイトル', :url => 'URL'
  validates_presence_of :title, :url, 
                        :message => "が未入力です"
end

これで日本語化はOKです。ちなみにActiveHeart自体は非推奨とされており、Ruby-GetTextを使用するようにコメントされていますね。確かにサービスのグローバル化を考えればその方が良いと思います。
私はActiveRecordのエラー文言を日本語にしたいだけでしたので他のモジュールはコメントアウトしました。
一応そちらも記載しておきます。


warn 'ActiveHeart is obsolute plugin!'
warn 'Please use Ruby-GetText or jpmobile'

require_dependency 'active_record_messages_ja'if defined? ActiveRecord::Base
# Comment Out!
#require_dependency 'trans_sid' #require_dependency 'iso2022jp_mailer' if defined? ActionMailer::Base

【参考サイト】

#2 Railsで別サイトへリダイレクト(redirect_to)

   ブックマークに追加する
こちらもWebScrapアプリケーションを作成中に疑問に思ったので覚書として書きます。操作完了したら元URLへリダイレクトしようと思ったのですが別サイト(別ドメイン)へのリダイレクトを以下2つの方法で試しました。

renderメソッドでは外部サイトにはリダイレクトできず、redirect_toを使用したら上手くいきました。

参考プログラムは以下の通りです。


    if @item.save
      flash[:notice] = 'Item was successfully created.'
      redirect_to("http://www.sample.com/") 
    else
      render :action => 'new'
    end

#1 RailsでHTMLメールを送信する(ActionMailer)

   ブックマークに追加する
以前に話した「WebScrap」を仕事終わってから、作成しているのですが、Webページをキャッシュする部分でDBに保存するのはリソース上やはり厳しいということで自分のGMailに送信することにしました。

これであれば、Web上にHTMLのキャッシュを残しておくことができ、さらに過去にキャッシュしたHTMLページのデータもGoogleの検索エンジンで見つけられます。

Railsで通常のメールを送信するのは、以前の記事(ActionMailer)に書きましたが、HTML形式のメール送信の方法は以下の通りです。

  • コントローラーに以下メソッドをprivateメソッドとして準備しました。

  def sendmail(title, content, mail)
    email = RMailer.create_sent( title, content, to )
    email.set_content_type("text/html")
    ScrapMailer.deliver(email)
  end

まずはemailオブジェクトを生成し、content_typeを設定してからメール送信すればOKですね。 

#0 RailsでScrapBookのWeb版をつくる(WebScrap)

   ブックマークに追加する
最近、Webアプリケーションを全然つくっていなかったので、以前からつくりたかったScrapBookのWeb版をつくりたいと思います。過去のブログで書いた「Firefoxで必ず使う7つのアドオン」の3位にしたScrapBookの簡易版(きちんとつくるのは手間がかかりそうなので・・・)をWeb上に保存できるサービスを考えてみたいなと思います。
※この前読んだレバレッジ勉強法にもあるようにWebのデータをスクラップできて、どんどん捨てていくようなことが簡単にできるように

ということでいつも通り要件定義

  • まずはユーザ登録(メールアドレスとパスワードくらいで十分でしょう)
  • URLを入力するとサーバに保存できる
  • どこからでも登録したサイトが確認できて、ブックマークと違いリンクが消えていることがない(データをサーバに保存するから)
サービス名はWebScrapとします。

片手間でも2週間くらいでつくれないかなぁー。

RubyでYAMLを使う

   ブックマークに追加する
設定ファイルでよく変更のあるデータを外出しにしておきたいことがあります。PerlではYAMLを使ってたのでRubyでも使用できないかと検索したら、なんと標準で使えることがわかりました。

今回はRubyでYAMLを使う方法です。

YAML(ヤムル)とは?
  • テキストプレーンで記載できるのでXMLより楽に記載できる(タグとかを記載しなくてよい)
  • データを「配列」、「ハッシュ」、「スカラー」を記載するとオブジェクトに変換してくれる
  • 設定ファイル、ログファイル等に使うと便利
YAML自体はPerlやPythonでももちろん使えます。YAMLの仕様については以下が参考になります。

簡単なサンプル(例:設定ファイル)
  • 配列
- item1
- item2
- item3
  • ハッシュ
name:  Taro
age: 28
email: test@test.test
Rubyで使用したサンプルソース

  • オブジェクトをYAMLフォーマットでダンプする(Ruby → テキスト)

#!/usr/bin/ruby -Ks
require 'yaml'
$KCODE = 's'

hash = {"name" => "Taro", "age" => 28, "email" => ["test1@test.test", "test2@test.test"] }
# YAMLフォーマットでダンプする
puts YAML.dump(hash)

# 実行結果
> ruby main.rb
---
name: Taro
age: 28
email:
- test1@test.test
- test2@test.test
  • YAML形式の設定ファイルをRubyで取り込む

# config.yamlファイル
name: Taro
age: 28
email:
- test1@test.test
- test2@test.test

#!/usr/bin/ruby -Ks
require 'pp'
require 'yaml'
$KCODE = 's'

# YAMLフォーマットでダンプする
config = YAML.load_file("config.yaml")
pp config

# 実行結果
> ruby main.rb
{"name" => "Taro", 
 "age" => 28, 
 "email" => ["test1@test.test", "test2@test.test"] }

配列やハッシュもテキストファイルにかけるので便利ですね。
今後は、設定ファイルをYAMLを積極的に使っていくと思います。

【参考サイト】

Rubyでクローラー作成(mechanize, hpricot)

   ブックマークに追加する
何度も同じようなプログラム(Rubyでスクレーピング)を作成しているような気がしますが、久々のRubyでクローラー作成。なんでこんなに何度も書くのかというと結構チェックしたいサイトが多く、仕事でも頼まれるためです。

Perlで作成したクローラーはこちら

今回はきっちりクラスらしく作りました。結構汎用的になっているのではないかと思います。簡単なスクリプトです。
ソースはこれまで通りクリエイティブコモンズで。

#!/usr/bin/ruby -Ks
require 'hpricot'
require 'mechanize'
require 'kconv'
$KCODE = 's'

class Crawler
  def initialize(wait_time, internal, ngwords)
    @agent = WWW::Mechanize.new
    @wait_time = wait_time
 @internal = internal
@ngwords = ngwords
 @links = [] end def http_connect(url) print "OK\n" @page = @agent.get(url) end def crawl(root) @page = @agent.get(root) @page.links.with.href(%r{}).each{|link| if link.href =~ /^http/ url = link.href else %r|http://([^/]*)/| =~ root url = 'http://' + $1 + '/' + link.href end @links << url.sub(/#.*$/,'') } @links.uniq!.delete(root) puts @links @links.each{|link| begin print link if $DEBUG next unless access_test?(link) http_connect(link) sleep @wait_time rescue => ex puts ex.message end } end

 private def access_test?(link) unless %r|#{@internal}| =~ link print "External Link.\n" return false end @ngwords.each{|ng| if /#{ng}/ =~ link print "NG Word\n" return false end } true end end

かなり以下のサイト参考になります。何度も読ませて頂きました。

【参考サイト】

RubyでHTMLファイル作成

   ブックマークに追加する
Rubyで静的HTMLファイル吐き出しのプログラムを作成したいなぁ思い、PerlのHTML::TemplateのようなものがRubyにもないか探してみました。

以下サイトにRuby版のHTML::Templateがあり使用したいと思ったのですが、少し使い勝手がわるいようです。
そのためerbにより作成することにしました。以下がテスト用でつくったサンプルコードです。

■メインプログラム

#!/usr/bin/ruby -Ks
require 'erb'
include ERB::Util

$KCODE = 's'

filename = ARGV[0]
erb = ERB.new(File.read(filename), nil, "-")

# hash create.
h = Hash.new
title = "title_key"
title_value = "title_val"
h.store(title, title_value)

detail = "detail_key"
detail_value = "detail_val"
h.store(detail, detail_value)

# list create.
list = Array.new
list.push(h)

print erb.result(binding())

■テンプレートファイル

<dl>
<%- i = 0 -%>
<%- for item in list -%>
<dt><%=h item['title_key'] %></dt>
<dd><%=h item['detail_key'] %></dd> 
<%- i += 1 -%>
<%- end -%>
</dl>

コマンドプロンプトより以下を実行してくれればOK
>ruby create_html.rb sample.rhtml
title_val
detail_val
かなり使いやすいですね。
もうちょっとデータの持ち方だけ考えればもっと使いやすくなりそうです。
今度は外部ファイルから静的HTML吐き出しをするプログラムを書いてみます。

追記
外部ファイルを読み込んで静的HTMLファイル吐き出しするプログラムを書きました

【参考サイト】

Rubyでメール送信(HTMLメール、SMTP認証)

   ブックマークに追加する
以前にRubyでメール送信するプログラムを書きましたが(「RubyでHTTPヘルスチェックプログラムをつくる(mechanizeとnet/smtpを使用する)」)、SMTP認証が必要な場合に送信できないということと、HTMLメールを送信できないということがわかりました。メール送信は良く使用するのでclassで作っておくかとも思い作り直しました。

TMailやActionMailer等もあるのですが、そこまできっちり作らなくてもいい場合用です。

【要件】
  • SMTP認証でメール送信できる
  • HTMLメールが送信できる
  • classとして独立する
作ったソースはこちら。ライセンスはクリエイティブ・コモンズとします。


require 'kconv'
require 'net/smtp'

class SimpleMail
  def initialize(from_address, smtp_server)
    @from_address = from_address
    @smtp_server = smtp_server
    @smtp_port = 25
    @smtp_domain = smtp_server
  end

  def send(to_address, subject, message)
    contents = mail_contents(subject) + "\n"
    contents << message
    Net::SMTP.start(@smtp_server) {|smtp|
      smtp.sendmail( contents, @from_address, to_address )
    }
  end

  def send_html(to_address, subject, message)
    contents = mail_contents(subject)
    contents << 'Content-Type: text/html; charset="iso-2022-jp"\n\n'
    contents << message.sub(/content="text\/html; charset=UTF-8"/, 'content="text/html; charset=iso-2022-jp"').tojis
    Net::SMTP.start(@smtp_server) {|smtp|
      smtp.sendmail( contents, @from_address, to_address )
    }
  end

  def send_auth(to_address, subject, message, account, password)
    contents = mail_contents(subject) + "\n"
    contents << message
    Net::SMTP.start(@smtp_server, @smtp_port, @smtp_domain, account, password) {|smtp|
      smtp.sendmail( contents, @from_address, to_address )
    }
  end

  private
  def mail_contents(subject)
    contents = "Subject: #{subject.tojis}\n"
  end
end

呼び出しは以下のような感じでOK!
結構簡単につくれました。


    # 例:HTMLメール送信
    SimpleMail.new("from@address","smtp_server").send_html("to@address", subject, message)

Rubyのコマンドラインオプション

   ブックマークに追加する
これも忘れてしまいそうなので覚書Rubyの実行時のコマンドラインオプションです。

Rubyist Magazine出張版 Ruby on Windows
cuzic
毎日コミュニケーションズ (2007/12/19)
売り上げランキング: 8193

  • 文法チェック(-c)
>ruby -c sample.rb
Syntax OK
  • デバッグモード(-d)
>ruby -d sample.rb

--- sample.rg ---
print debug_string if $DEBUG
  • Rubyのバージョンの確認(--version)

>ruby --version
ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-mswin32]

Rubyでスクレーピング(mechanizeとhpricot)

   ブックマークに追加する
以前にPerlでクロールするプログラムを作ったので、勉強がてら今回はRubyで作成してみました。ただ今回はかなり、てこずりました。文字コード?のところではまってしまい作るのにまるまる1日かかりました。まずは出来上がったコード。

【事前準備】


$ gem install hpricot
$ gem install mechanize

【ソースコード】


#!/usr/bin/ruby -Ks
require 'hpricot'
require 'mechanize'
require 'kconv'
require 'jcode'

$KCODE = 's'

# 初期設定
@user_agent = 'Mac Safari'
@wait_time = 5
@url = 'taget_url'

def http_connect(url, keyword)
  puts url if $DEBUG
  @page = nil;@price = nil;@content = ""
  begin
    @agent = WWW::Mechanize.new
    @agent.user_agent_alias = @user_agent
    @page = @agent.get(url)
  rescue
    puts "#{keyword}#{@drim}CONNECTION ERROR"
    return
  end
  link = @page.links.with.href(%r{http://target_url/\w+?/}).last
  puts link.href if $DEBUG
  if(link == nil || link.href.empty?)
    puts "#{keyword}#{@drim}LINKERROR"
    return
  end
  @page = @agent.click(link)
  doc = @page.root
  @name = (doc/"span.item_name").inner_html.tosjis
  (doc/"span.item").each {|item|
    item_str = item.inner_html.tosjis
    item_str.scan(/
(.*?)<\/div>
(.*?)<\/div>/){|title, content| @content += ":#{title}:#{content}" # if $DEBUG } item_str.scan(/([\d+] 円)/){|price| @price = price } puts "#{keyword}#{@drim}#{@price}#{@drim}#{@name}#{@drim}#{@content}#{@drim}#{link.href}" } end def generate_url puts ARGV[0] if $DEBUG File.open(ARGV[0]){|f| f.each{|line| keyword = line.chomp! puts keyword if $DEBUG target="#{@targeturl}?keyword=#{keyword}" http_connect(target, keyword) sleep @wait_time } } end puts @header generate_url

ECショップの検索結果から商品情報を取得することを想定しているのですが、どうもカタカナの「ッ」が全て文字化けしてしまう。kconvではなくnkficonvを使っても結果はおなじ。解決方法としては以下1行を挿入するだけで文字化けはおきなくなりました。

require 'jcode'

原因はまだ調べているところですが、以下サイトをきちんと理解できればわかると思います。はぁー、大分はまってしまった。

【参考サイト】

RubyでHTTPヘルスチェックプログラムをつくる(mechanizeとnet/smtpを使用する)

   ブックマークに追加する
RubyでHTTPアクセスが正常にできるかどうかを確認するツールを作成しました。
対象のURLにアクセスし、titleの文字列で正常にページアクセスできるかどうか確認しています。
エラー時は指定したメールアドレスにメールをとばすようになっています。

以下にソースコードを記載します。
※下線部は適宜環境にあわせてください

Windows環境でおこないました。
デバッグモードで実行するといくつか警告がでてますね。なんでだろ?
とりあえず動作はします。

【事前準備】
gemsmechanizeをインストールする

    > gem install mechanize


【ソースコード】

#!/usr/bin/ruby
require 'mechanize'
require 'net/smtp'
require 'kconv'

url = "http://localhost/"
wait_time = 15
@from_address = "from@mail_domain"
@send_address = "send@mail_domain"
agent = WWW::Mechanize.new

def send_alert( msg )
  body = [ "Subject: HTTP Access Error\n", "\n", msg ]
  Net::SMTP.start('mail_server') do |smtp|
    smtp.sendmail( body, @from_address, @send_address )
  end
  exit
end

begin
  while 1
    page = agent.get(url)
    s = page.title.tosjis
    if s =~ /match_word/
      puts "#{url}: #{s}\n" if $DEBUG
    else
      puts "#{url}: #{s}=#{match_str.tosjis}\n" if $DEBUG
      send_alert("#{url}: #{s}\n")
    end
    sleep wait_time
  end
rescue => ex
  puts "#{url}: #{ex.message}\n" if $DEBUG
  send_alert("#{url}:#{ex.message}\n")
end

【参考にしたサイトです】


Rubyで1行メソッド

   ブックマークに追加する
Railsを使えば、あまりRubyの知識がなくてもWebアプリが作れます。
それはそれで、すごいことですが、やっぱりRubyも覚えてたい!という気持ちもあります。

というわけで、Rubyのメソッドについてちょっと試しました。

=begin
 「Hello,Ruby」取得メソッド
1) 普通にメソッドを作成し呼び出す
=end
def hello_world()
  hello = "Hello, Ruby."
  return hello
end

puts hello_world()  #=> Hello, Ruby.

=begin
2) 省略形

    * Rubyではreturnを省略すると最後の式の値が返る

    * メソッドの括弧は省略できる

    * 改行が処理の区切りだが、「;」で区切ることも可能

 ※上記をふまえ以下のように変更
=end
def hello_world; hello="Hello, Ruby.";end
puts hello_world    #=> Hello, Ruby.

変数の値を返すだけであれば1行メソッドの方が良いかもしれません。

#6 ActionMailで会員登録時にメール送信する

   ブックマークに追加する
会員登録時にメールを送信し、クリック後会員登録完了とすることで
メールアドレスのチェックをおこなう。
railsではActionMailerという仕組みにより、簡単にテンプレートメールを送信できます。
以下5つのSTEPで実装できます。


1) Rails環境ファイルにメールサーバを設定
以下environment.rbファイルにメールサーバの設定をする
- mytask/config/environment.rbに以下追加(下線部は環境によって変更する)

    # Include your application configuration below
    ActionMailer::Base.delivery_method = :smtp
    ActionMailer::Base.server_settings = {
      :address  => "address",
      :port  => 25,
      :domain  => 'domain',
      :user_name  => 'user_name',
      :password  => 'password',
      :authentication  => :login
        }

2) generateを使ってActionMailerを作成する
モデルとして作成されるので注意する。テンプレートファイルはviewファイルとして生成される

    $ ruby script/generate mailer AccountMailer sent
          exists  app/models/
          create  app/views/account_mailer
          exists  test/unit/
          create  test/fixtures/account_mailer
          create  app/models/account_mailer.rb
          create  test/unit/account_mailer_test.rb
          create  app/views/account_mailer/sent.rhtml
          create  test/fixtures/account_mailer/sent

3) model(accout_mailer)の編集

※app/models/account_mailer.rbに以下メソッドを追加する
 
   $ ruby script/generate mailer AccountMailer sent
          exists  app/models/
          create  app/views/account_mailer
          exists  test/unit/
          create  test/fixtures/account_mailer
          create  app/models/account_mailer.rb
          create  test/unit/account_mailer_test.rb
          create  app/views/account_mailer/sent.rhtml
          create  test/fixtures/account_mailer/sent

4 メールのテンプレートファイルを編集する

※mytask/app/views/account_mailer/sent.rhtml を編集する

5 controllerからメールモデルを呼び出す

    def sendmail
      @user = User.find(params[:id])
      AccountMailer.deliver_sent(@user)
    end

これで完了、5分くらいでできちゃいます。

#5 ログイン画面を作成する(gem install login_generator)

   ブックマークに追加する
ログイン機能は、作成すると案外面倒なもの。
他のフレームワーク同様、Railsにももちろん他のエンジニアが作成したモジュールを
簡単に再利用できる仕組みがととのっています

  • まずはrootユーザに変更
    $ su - root
    Password:
  • gemlogin_generatorをインストールする
# gem install login_generator
Bulk updating Gem source index for: http://gems.rubyforge.org
Successfully installed login_generator-1.2.2
  • インストールが正常に完了したら、以下コマンドで作成開始
  (以下はコントローラーをaccountで生成)

 $ ruby script/generate login account
      create  lib/login_system.rb
      create  app/controllers/account_controller.rb
      create  test/functional/account_controller_test.rb

#4 scaffoldでRailsアプリケーションを作成

   ブックマークに追加する
Railsを覚えようと思った理由の1つがscaffoldが使ってみたかったためです。アプリケーションに必要なスケルトンをコマンド1つで作成できるという優れものです。とりあえず本の通りにやってみました。



とりあえず、helpでコマンドを確認する

$ ruby script/generate scaffold  --help
Usage: script/generate scaffold ModelName [ControllerName] [action, ...]

Rails Info:
    -v, --version                    Show the Rails version number and quit.
    -h, --help                       Show this help message and quit.

General Options:
    -p, --pretend                    Run but do not make any changes.
    -f, --force                      Overwrite files that already exist.
    -s, --skip                       Skip files that already exist.
    -q, --quiet                      Suppress normal output.
    -t, --backtrace                  Debugging: show backtrace on errors.
    -c, --svn                        Modify files with subversion. (Note: svn must be in path)
・・・省略

とりあえず、以下のコマンドで生成されるようです。

ruby script/generate scaffold [model_name] [controller_name]

それでは、実行してみます。

$ ruby script/generate scaffold project mytask
      exists  app/controllers/
      exists  app/helpers/
      exists  app/views/mytask
      exists  app/views/layouts/
      exists  test/functional/
  dependency  model
      exists    app/models/
      exists    test/unit/
      exists    test/fixtures/
・・・省略
これでスケルトンが生成されました。本当に簡単ですね。

#3 MySQLの設定とRailsとのつなぎこみ

   ブックマークに追加する
今回はMySQLでデータベースとテーブル作成

以下3つのデータベースを作成する
(ただ、_testはどのように使うかよくわからなかったので、_developmentと_productionだけ作りました)

■データベースを作成

  • mytask_development
  • mytask_test
  • mytask_production
    mysql> create database mytask_development;
    mysql> create database mytask_production;
    mysql> grant all on mytask_development.* to username@localhost identified by 'password';
    mysql> grant all on mytask_production.* to username@localhost identified by 'password';

■テーブルを作成、カテゴリ(プロジェクト)とタスク
タスクを纏めるカテゴリのようなもの(ここではプロジェクト)テーブルとタスクそのもののテーブルを作成する。
    create table projects (
      id int unsigned auto_increment,
      name varchar(128) not null,
      content varchar(255),
      task_count int default 0,
      status enum('close','open') default 'close',
      created_at timestamp,
      updated_at timestamp,
      limited_at timestamp,
      primary key  (id),
      index status_idx (status)
    );

    create table tasks (
      id int unsigned auto_increment,
      project_id int unsigned not null,
      name varchar(128) not null,
      content text,
      status enum('yet', 'exec', 'finish') default 'yet',
      created_at timestamp,
      updated_at timestamp,
      limited_at timestamp,
      primary key  (id),
      index project_id_idx (project_id),
      index status_idx (status)
    );

■railsアプリケーションの設定ファイル(DB設定と文字コート)を編集

mytask/config/database.yml を編集
development:
  adapter: mysql
  database: mytask_development
  username: username
  password: password
  socket: /var/lib/mysql/mysql.sock
  encoding: utf8

mytask/config/environment.rbに文字コード追加

#KCODE = 'u'
# Be sure to restart your web server when you modify this file.

#2 railsでmyTaskアプリケーションのスケルトン作成

   ブックマークに追加する
いよいよ、Railsでアプリケーション作成します。本に書いている通りにすすめていきます。
railsコマンドはアプリケーションに必要なスケルトンを生成してくれるようです。
以下に手順を説明します。

1) railsでアプリケーション作成
  rails [アプリケーション名]でrailsアプリケーションを作成する
$ rails mytask
      create  app/controllers
      create  app/helpers
      create  app/models
      create  app/views/layouts
      create  config/environments
      create  components
      create  db
      ・・・省略

2) WEBrickで動作確認する
  Webrick(ウェブリック)とはRubyで作成されたWebサーバでRails開発(development)では
  編集したコードが自動でロードされるため開発効率がよいです。
$ cd mytask/
$ ruby script/server
=> Booting WEBrick...
=> Rails application started on http://0.0.0.0:3000
      ruby script/server でWEBrickを起動する

      http://localhost:3000/でアクセスするとRailsのWelcomeページが表示される
Ci071202003512.jpg

#1 まずは環境設定(RubyGemsとRailsのインストール作業)

   ブックマークに追加する
かならずはまってしまうのが環境設定。1回設定すればOKですが、覚書として書いときます。

1) RubyとMySQLのバージョンを以下コマンドで確認できます
  とりあえずレンタルサーバはFedora6でMySQLとRubyは既にインストール済み。以下コマンドで各々のバージョンを確認します。

  Rubyのバージョンの確認方法
$ ruby -v
ruby 1.8.5 (2007-09-24 patchlevel 114) [i386-linux] 

  MySQLのバージョンの確認方法
$ mysql --version
mysql  Ver 14.12 Distrib 5.0.27, for redhat-linux-gnu (i686) using readline 5.0

ということで、まずはRailsのダウンロード&インストール

2)  RubyGemsのダウンロード
  RubyGemsはRubyのパッケージ管理ツールでRailsと関連ライブラリのインストールも簡単に行えるようになります。

    というわけで、RubyForgeよりrubygemsをダウンロードする

3) RubyGemsのインストール

  いよいよインストール。これが完了すればgemコマンドが使用できるようになります。
    $ tar xvzf rubygems-0.9.4.tgz
    $ ls
    rubygems-0.9.4  rubygems-0.9.4.tgz
    $ cd rubygems-0.9.4
    $ ls
    ChangeLog  LICENSE.txt  Rakefile  TODO  doc       gemspecs  pkgs             redist   setup.rb
    GPL.txt    README       Releases  bin   examples  lib       post-install.rb  scripts  test

    # su - root
    # ruby setup.rb

3) Railsのインストール
    
Gemsをインストール後、以下のgemコマンドでrailsをインストールする
# gem install rails --include-dependencies
$ rails -v
Rails 1.2.4

こんな感じでOK!


次回こそ、Railsでアプリ作成に入ります。

#0 Ruby On Railsでタスク管理ツールを作成する

   ブックマークに追加する
Ruby on Railsはまだ試してみたことがないので、勉強のため、シンプルなタスク管理ツールをつくってみたいと思います。

私はタスク管理にCheck*PadSlimTimerなどを使っているのですが、どちらもとてもシンプルで使いやすいです。それらサービスを手本に、よりプロジェクト管理に適したツールに作成しようと思います。自分のタスクを洗い出すツールのため、名前はmyTaskにします。(後から変える可能性ありですが。。。)

簡単な機能紹介。


■ 機能一覧
  1. タスクを書き出せる(リストで見れる)
  2. タスクに期限を設定できる
  3. タスクには、未着手、実行中、完了等のステータスがある
  4. メールで期限がきたら教えてくれる
  5. カテゴリごとにタスクを纏められる
  6. タスクは共有できる
  7. 完了までにかかった時間を確認できる

とりあえずこれくらいでいいでしょう。
では次回からいよいよRailsを使ってみます。
あわせて読みたいブログパーツ
フィードメーター - ウェブ-HACKS 「とりあえずやってみよう!」ブログ   
track feed
  • SEO対策 
  • _ 
  • _ 
  •  
  •  

このブログはクリエイティブ・コモンズでライセンスされています。
Google

Tags