top


総投稿数 本 
no_

スポンサーサイト

 --------
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
カテゴリ :スポンサー広告 トラックバック(-) コメント(-)
no_778

Ruby:◇ブログシステムを創る:プロトタイプ ・・・ 【Ruby:28歩目】

 2009-03-12
 おぉ、久しぶりの「Ruby」だ。
 今回随分空けてしまったな。
 ちょっと「空け過ぎ」で、前回のことがうろ覚え。参照する。
 ・Ruby:◇ブログシステムを創る:しくみ ・・・ 【Ruby:27歩目】

  ・入門編>基礎編>実践編 と終わり(ほぼ9ヶ月!かけて)
  ・やっと「応用編」で オリジナルのブログシステム創り
   を計画・準備したところまで・・・だったな。

第28歩
 ◇ブログシステムを創る:プロトタイプ

  ここは、参考書籍「はじめてのRubyプログラミング」にあるように
  やってみる。
  その後、どんどん拡張してゆくつもりだ。

  追記に ▼

※この連載は、はじめて「Ruby」に取り組んだmetaboyが、
 PHPなどとの違いを考慮しつつ、ゆっくりと
 良書「はじめてのRubyプログラミング」を基に
 学んでゆく、詳細な記録です。
                      (本日の参照:255頁


FC2ブログランキングにほんブログ村 IT技術ブログ Webサイト構築へブログ王ランキング人気ブログランキング人気ホームページランキングへ


more  ◇ブログシステムを創る:プロトタイプ
  【ディレクトリ構成の確認】
  ※参考書で、示されている
   これから創ろうとする「ブログシステム」は
   次のような仕様になっている。
 ◆基本構成◆
 ・data  ・・・ 日記の原稿を置くディレクトリ
 ・views ・・・ テンプレートとなる、eRubyスクリプト を格納
 ・html  ・・・ 生成された、HTMLファイルが配置されるところ

 [data]ディレクトリにある、テキスト原稿を読み込み
 > [views]ディレクトリにある、テンプレート(雛形)を参照して
 > [html]ディレクトリに、HTMLファイルが生成される、わけだ。


 ◆ディレクトリ準備
  ・3つのディレクトリを作成
   [data][views][html]

   (参考書籍に付属のCD-ROMを参照する)
  ・[data]ディレクトリには、次のような
   サンプルファイルが格納されている
!日記はじめました。

近頃、城下町ではブログといふものが流行ってるらしい。
春になって新しいことがしたいなあと思っていたし
丁度良い、さっそくブログを書き始めようと思う。

まずは、自己紹介だよね。おれの名前はノブナガ。
今年で齢49のおっさんの日常を書いていくつもり。
おもしろいかわからないけど、がんばって書くからよろしくね。


   変えた。
!日記を始めるのは難しい。随記というのはどうだ。

近頃、ブログは当たり前。しかし、日記、と確定された
表記をすると、本当に毎日書かねばならない。
春がもうすぐやってきそうだけど、まだまだ寒い。
新しいことは常にやり始めている。
どちらかというと、「始める」より「続ける」ことの
偉大さを感じている。

自己紹介は苦手だけれど、しなくては。名前は、metaboy。
年齢は不詳、ということにさせていただく。年男には
もう何度もなっている、ということで勘弁していただきたい。
自分が面白くなければ、他の方も楽しめないだろうし、
まぁ、楽しむことが私の特技でもあるし。
よろしく36のおやじギャグ。
 2009-03-12.txt という名前で保存

  ・[views]ディレクトリには、とりあえず
   サンプルとして用意されている「eRubyスクリプト」を配置。
   4つ、ある。
   サンプルとして用意されている「eRubyスクリプト」を配置

  ・[html]ディレクトリは、生成されるHTMLが配置されるところだから
   まぁ、ここが見てもらう方にアクセスしてもらうところ。
   で、スタイルシート用のフォルダも用意。
   ・stylesheets フォルダ


 ◆HTMLファイルの生成(ジェネレート)
  ※機能を簡単にした、「生成する」動きを確認するための
   サンプルプログラムが用意されている。
#!ruby -Ku
require 'erb'
require 'date'

class Entry
def initialize(filename)
@filename = filename
@body = File.read(@filename)
end

def date
Date.parse(File.basename(@filename, '.txt'))
end

def to_html
@body
end
end

class Blog
def generate
@entries = []
@entries << Entry.new('data/2007-04-01.txt')
@entries << Entry.new('data/2007-04-02.txt')
@entries << Entry.new('data/2007-04-21.txt')

rhtml = File.read('views/list.html.erb')
html = ERB.new(rhtml).result(binding)
File.open('html/index.html', 'w') {|f| f.write(html) }
end
end

Blog.new.generate

  細かく見ておこう。

  ・#!ruby -Ku
   CGI でお馴染みの記述だけれど -Ku って UTF-8 指定

  ・require 'erb'
   require 'date'
   2つのライブラリを組み込む

  ・Entry と、Blog の2つのクラスがある
   Blog で書き出すファイルを指定しているところ(?)は
   直接書き込まれている
   修正しておこう。
  @entries << Entry.new('data/2009-03-12.txt')

  ・一番最後に、実行命令
   Blog.new.generate
   ※今まで学んできた知識から言えば、
    Blogクラスにある、
    ・generateメソッドのインスタンスを
     新しく生成する ってことか。

  ・Entry クラス
   ・メソッドが3つ
    ・Initializeメソッド
  def initialize(filename)
@filename = filename
@body = File.read(@filename)
end

     ・引数有・・・(filename)
      ・原稿ファイルのファイル名を受け取る
     ・受け取ったファイル名を
       インスタンス変数:@filename へ代入
     ・File.read の実行で、実際に原稿ファイルを読み込む
       インスタンス変数:@body へ代入

    ・dateメソッド
  def date
Date.parse(File.basename(@filename, '.txt'))
end

     ・日付オブジェクトを生成する
      ※このDataクラスを使用するため、最初に
       require 'date' を実行している
      ・(まず)
     ・受け取ったファイル名を
       File.basename を利用して取得
       ・指定したファイル名から、
        ・ディレクトと、拡張子を取り除いた
         文字列を返す
     ・Date.parseメソッドは
       日付を表す文字列から > 日付オブジャクトを作成

    ・to_htmlメソッド
  def to_html
@body
end

     ・インスタンス変数:@body の内容を
      そのまま表示


  ・Blog クラス
    ・generateメソッド
  def generate
@entries = []
@entries << Entry.new('data/2007-04-01.txt')
@entries << Entry.new('data/2007-04-02.txt')
@entries << Entry.new('data/2007-04-21.txt')
@entries << Entry.new('data/2009-03-12.txt')

rhtml = File.read('views/list.html.erb')
html = ERB.new(rhtml).result(binding)
File.open('html/index.html', 'w') {|f| f.write(html) }
end

     ・@entries というインスタンス変数(配列)を用意し
      順に指定ファイルを組み込んで、
     ・rhtmlという変数には、テンプレートである
      eRubyスクリプトが書き込まれた
      ・list.html.erb というファイルを
       やはり、File.read で組み込む
     ・rhtmlに読み込まれた内容を実行
     ・File.read の実行で、実際に原稿ファイルを読み込む
       インスタンス変数:@body へ代入
      ・resultの引数に、binding を指定することで
       eRubyスクリプトの中で
       (つまり、rhtmlに読み込まれている中身で)
       @entriesを参照できるようになるぞ、と。
     ・最後の1行でファイル出力
      (index.html を開き書き込む)


 ※読み込まれるテンプレート「list.html.erb」の中身は?
<% @entries.each do |entry| %>
<div class="entry" id="<%= entry.date.day %>">
<div class="date"><%= entry.date %></div>
<%= entry.to_html %>
<% year_month = entry.date.strftime('%Y-%m') %>
<div class="permalink"><a href="<%= year_month %>.html#<%= entry.date.day %>">permalink</a></div>
</div>
<% end %>

     ・記事オブジェクトが格納された、@entriesを参照しているのは
      前述の「binding を指定」のおかげ、なのだな。
     ・each doループで、記事分廻して
      ・HTMLソースを形成している

で、
 ◆サンプルプログラムの実行
  ※まだ、コマンドラインでの実行だ。
Ruby blog0.rb
 >実行

  できたぞ。index.html
  完全なhtmlソースではないけれど、一応リンク

 まだ、ローカルベースだけど
 なかなか楽しくなってきた。

+++++++++++++
PHPだと?
+++++++++++++
 ・テンプレートを利用するところの考え方は同じですね
  ただ、使い方がとてもシンプルなような・・・
 ・まだまだわかりませんが
  Ruby使いこなせたら、ほんと開発早いんだろうなぁ

次回は、今回のプロトタイプを
 ・まずは、参考書籍にしたがって改造してゆきます。
commentsコメント
comment_post












管理者にだけ表示を許可する
commentトラックバック
トラックバックURL:
http://metaboy.blog23.fc2.com/tb.php/778-1cc203aa
ようこそ
Add to Google 創るmetaboy:RSSフィード
My Yahoo!に追加
最新記事のRSS | 問い合わせ

仕事検索、アルバイト検索、依頼仕事の検索ポータル - 仕事検索.COM - www.jobkensaku.com ツクルン

創るmetaboy - WEB創る、サイト創る、何創る - 創ったmetaboy

 

リンク集

 

最近の記事

 

ブロとも申請フォーム
Sponserd by

さくらのレンタルサーバ さくらのレンタルサーバ
大容量・高機能レンタルサーバー heteml 大容量・高機能レンタルサーバー heteml
XREA (ValueDomain)
お名前.com お名前.com
名づけてねっと名づけてねっと
ムームードメインムームードメイン

 

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。