Home

ScriptWorks.JP

Rails4.0の入門書として新しくなったポイント – Ruby on Rails 4 アプリケーションプログラミング



Ruby_on_Rails4_Application_Programing

日本語で読める Rails 4.0 の 入門書( Ruby on Rails 4 アプリケーションプログラミング ) が出ました。
雑誌以外の書籍としては一番乗りですね。

ぱらぱらとページをめくり、前書( Rails3版 )から新しくなったポイントを探してみると、Rails4.0対応については
ビュー、モデル、コントローラー、それぞれの新しい追加メソッド
Scaffolding で 生成される JSON形式 の テンプレート解説
コントローラー側 の 生成コード の 変更点
ルート定義の再利用メソッドなど、多くの解説が加わりました。
※ 主なRails 4.0 対応で追加された解説内容は下にまとめてあります

さらに Rails4.0 以外の解説もいろいろと加筆されています。

アプリケーション固有の設定情報をYAMLファイルで管理する場合、よくsettingslogic あたりが使われると思いますが
同等の機能を config/initializers での設定で手軽に実現する方法が解説されていたり
クライアントサイド では CoffeeScript と Sass( SCSS ) の 文法解説が35ページ分も加わりました。
※ もろもろ変更点が多いので、下の方に変更された部分をマークした目次を引用してあります

Rails 4.0 対応で追加された主な解説

1. ビュー関連
 新規メソッド
  (1) collection_radio_buttons と collection_check_boxes
   collection_select と同様にデータベースの情報からラジオボタンとチェックボックスを生成するヘルパーです。
  (2) cache_if と cache_unless
   指定ブロックのフラグメント・キャッシュを条件式で制御するメソッドです。
   使いどころは、何かの予定日とかWebコンテンツとして変更する可能性がある情報に使用。

2. モデル関連
 新規メソッド
  (1) find_by … find_by_xxxxx に代わって任意のキー列で検索するメソッドです。
  (2) not … クエリメソッドの検索条件を否定。
  (3) where! … クエリの条件式を破壊的に追加。
  (4) unscope … クエリメソッドによる条件式を除去。
  (5) none … 空の結果セットを取得。
 機能追加
  (6) transaction メソッドの新機能としてトランザクション分離レベルが指定可能になりました。
  (7) ActiveModel::Modelモジュール
   attr_accessorメソッドを使うことで、データベースに関連づいていない項目をモデルに実装できるようになりました。

3. コントローラ関連
 新規メソッド
  (1) add_flash_types … notice や alert 以外に独自の フラッシュメッセージ・タイプ を定義可能になりました。
 機能追加
  (2) マスアサインメント脆弱性への新しい対策方法
   フォーム入力パラメーターを検査する仕組みが Rails3 の attr_protected や attr_accesible から StrongParameters へ変更となり、モデル側ではなくコントローラー側で設定するように変わりました。
  (3) Rubyテンプレート
   Rubyテンプレートは ERB のような埋込み型ではなく直接、Rubyスクリプトで記述するテンプレートで
   使用例としてモデル・データをCSV形式で出力する方法が解説されています。
  (4) concernsフォルダ
   複数のコントローラーやモデルで共通するロジックをまとめて管理するディレクトリです。
   共通ロジックをまとめたモジュールの格納先が規約として明確になりました。

4. ルーティング( ルート定義の再利用 )
 リソース間で重複しているルート定義に名前をつけて部品化する方法の解説です。
 Rails4.0 で新しく追加された concernメソッド で共通する定義を1つにまとめ、concernsオプション で再利用します。

5. テスト関連
 前書と同じ Test::Unit でのテスト手順解説ですが、Rails4.0 で testディレクトリ の構成変更と rake test コマンド の
 オプションが変更されたため、解説内容が新しくなっています。

6. クライアントサイドの新機能 ( Turbolinks )
 ホームページのページ遷移を高速化する新機能の解説です。
 Rails4.0標準で設定が有効になっている機能なので、意識せずに使い始められるのですが
 その反面、仕組みを理解しておかないとハマるポイントでもあり、その回避方法が解説されています。

目次 ( Ruby on Rails 4 アプリケーションプログラミング )

著者サイトに 詳細目次 がありましたので、内容が新しくなった部分 は 目次行 の 背景色 を変えて引用してあります。

続きを読む

書評 プロのための Linuxシステム・10年効く技術 / あなたは読みこなせますか?


シリーズ3作目 読みこなすには前著2冊で解説された知識が必要。

技評さんから、プロのためのLinuxシステム シリーズ3冊目の『 10年効く技術 』 を送って頂きました。
※ 本エントリーの最後に 詳細目次 を掲載しています

まずは今の自分が読みこなせる部分をということで各章ざっくり読んだところですが、それぞれ1冊の本になりそうなテーマが多く、いろいろかっ飛ばした(汗)解説になってます。 これだと初心者レベルではキツそうだなと思いつつ読み返していると…

《はじめに》より引用

これまでにも「プロのためのLinuxシステム」と題する2冊の書籍を出版させて頂きましたが、本書は少し色合いが異なります。先の2冊は、幸いにも「わかりやすくて充実した内容」との声をいただいていますが、体系的な学習を意図したために「現場テクニック」や「いざというときのための知識」を割愛せざるを得ませんでした。そこで今回は、教科書的な体裁は二の次にして、初級~中級のLinuxエンジニア向けに、筆者自身の生の声で、さまざまなLinuxシステム構築/運用の秘訣を伝授することにしました。

改めて読み進むと、このポリシーを強く感じさせられたのが第2章。 「仮想化でここまでできるインフラ環境構築」 というタイトルで前半はKVM上の仮想ネットワークと仮想サーバーを使い、基本となる小規模な企業でのイントラネット向けと思われるDNSサーバーとメールサーバーの構築。後半はさらにHAクラスターの構築と擬似障害テストへと進みます。

この2章前半での解説ページ数は約38ページ。前提知識はKVM、postfix、bind の技術書3冊分(汗)。 実際に同様の環境を構築した経験があれば別ですが、結構きびしいペースですね。 がしかし、こんなメッセージが…

この後の各節では具体的な環境構築の手順も示していますが、自信のある方は(あるいは、自信がない方こそ)、まずは自分自身が正しいと思う手順で環境構築を行なってみてください。自らの頭と手を動かしながら、失敗の中で1つでも多くのことを学ぶ姿勢が大切です。誰もが一度は経験する失敗はいろいろあります。本番プロジェクトで失敗するよりも、先に「素振り環境」で失敗しておくほうがよいに決まっています。

そう、確かに本で読んだ知識であれ、ネットで調べた情報であれ、自分のサーバー環境で試し、作り込むまないと活用できるモノにはなりません。
また、このKVMでの「素振り環境」構築ノウハウは postfix や bind を使わない場合でも、例えば iptables のフィルタリング設定や mysqlのチューニングなど、いきなり本番環境で試せないことを気兼ねなくできる開発環境を手に入れられるので、さまざまな応用が効きます。
※ FedoraやUbuntuの新しいバージョンも virt-clone で!

ということで、この本を手にとって 分からないコト を調べ、自分のサーバー環境で試行錯誤を重ねる実行力があれば、スキルアップは間違いないでしょう。

今回書評を書いた最新書です。
プロのための Linuxシステム・10年効く技術

シリーズ1冊目 10年効く技術1章の前提本
プロのための Linuxシステム構築・運用技術

シリーズ2冊目 10年効く技術2章の前提本
プロのための Linuxシステム・ネットワーク管理技術

P.S.
著者の中井さんからコメント頂きました!

出版社の書籍ページよりも さらに1階層詳しい 詳細目次( ↓ )もどうぞ。

続きを読む

書評 Ruby on Rails 3 ポケットリファレンス



Ruby on Rails 3 ポケットリファレンス


Ruby on Rails 3.1 に対応した ポケットリファレンス を送って頂きました。
前回、送って頂いた Ruby on Rails 3アプリケーションプログラミング が Rails3.0ベース なので、Rails3.1 で追加になった アセットパイプラインCoffeeScriptSass( CoffeeScriptのCSS版 ) といった新しい仕組みを試してます。

環境は さくらのVPS で Rails3.1+Passenger を設定し Rails 3アプリケーションプログラミング のサンプル( 3.0ベース )をもとに使っているのですが、さすがにそのままでは動きません(汗)。 エラーが出るたびにポケットリファレンスを見て修正、次へ進むの繰り返しで進行中。 コンソールでよく使う、gem や rails、rake、bundle といったコマンドのオプション解説もコンパクトにまとまっているので、Rails3.1の情報をぱぱっと手早く探すのに便利です。

Rails3レシピブックと比べると rvmCapistranoRSpec の解説はありませんが、Deviseプラグイン を使ったユーザー登録とログイン認証やユーザー管理ページなど会員制サイトを作るときに使える設定方法Delayed::Jobプラグイン で非同期のバッチ処理を組む方法も解説されている点がポイント高し。 特に、Deviseプラグインがカバーしている機能は自分で実装&テストすると何日も
かかるので、持ち歩きサイズのリファレンス本に、この情報があるのはとても助かります。

書評を書いた Ruby on Rails 3 ポケットリファレンス という本はこちらです。

CakePHP 複数コア のお手軽バージョン管理 : CakePHP Advent Calendar 2011 Day 15

  • 2011-12-15 (木)
  • PHP

CakePHP Advent Calendar 2011 15日目のエントリです。
※ 12/16追記 : こっそり、解説文を書き足しました
※ 12/18追記 : さらに改訂(汗)。

※ 前日( 14日目 )のエントリーは @kaz_29 さんの 『 CakePHP2+PostgreSQLでGeoデータを簡単に扱う!? 』です。

新しいバージョン・リリースのたびに発生するバージョンアップ作業ですが、ソースコードの取得と配置といった定形作業をスクリプト化する方法( 簡単コース )と、はじめからCakePHPコアのバージョン管理を git で行う方法( Gitコース )を考えてみました。
※ インストール方法はCakePHP Cookbook の 応用インストール手順 をベースにしています

簡単コースのスクリプトは github のリポジトリから CakePHP のソースコードを取得し、ディレクトリ単位でバージョン管理するので git を知らなくても大丈夫です。一度設定すれば、スクリプトを実行するだけの簡単バージョンアップ!

Gitコースのバージョンアップは git pull コマンドが使えます。
※ こちらは git を普段から使っているプログラマー向け

続きを読む

DateTimeクラスの落とし穴と対策 : PHP Advent Calendar jp 2011 Day 7

  • 2011-12-07 (水)
  • PHP

PHP Advent Calendar jp 2011 7日目担当の @scriptwork です。

DateTimeクラス は PHP5.3 で日付や時刻の加減算を行う add / subメソッド や 差分を計算する diffメソッド などが追加され、日付と時刻を取り扱う面倒な処理をサポートしてくれるクラスです。

DateTimeクラス が実装されるまでは PHP関数 の strtotime() と date() で日付と時刻の加減算を行なっていましたが、2038年問題 への対応もあり、新しくコードを書くなら DateTimeクラス を使うのが良さそうですね。

とはいえ、現在の PHP5.3.8 と PHP5.4.0RC2 の DateTimeクラス は 日付の加減算 で strtotime() と 同じ問題 をかかえていますので、使い所を押さえておく必要があります。

DateTimeクラスの問題とは何か?

まずは正常なケースとして、日付に対する日数の加減算で DateTimeクラス の動作を確認してみましょう。

続きを読む

書評 JavaScript本格入門 function前の init: って何?



JavaScript本格入門

まず、この JavaScript本格入門 を読んで 3年以上前 の JavaScript入門書 は処分しました。
※ 基本的な JavaScript言語構文 のおさらいも解説されているので問題なし

もう1冊 パーフェクトJavaScript も手元にあり、こちらはまだ拾い読み中ですが、
ざくっと難易度をTOEIC目標スコア的に書くとこんな感じ。

一般的(?)な入門書 300-500
JavaScript本格入門 500-700
パーフェクトJavaScript 700-900

※ 実際の守備範囲はオーバラップした部分もあるので、目標スコアということで。

わたし自身のスコア(汗)は一般的な入門書を読み終えたレベル( スコア300! )で、たとえば jQueryソースコード の

jQuery.fn = jQuery.prototype = {
          constructor: jQuery,
          init: function( selector, context, rootjQuery ) {

といったコードを見ると 『 function の前の init: って何? 』 という感じです。

差し迫って困っている疑問ではなかったので、本格入門を1回読んだだけでは気づかなかったのですが…

JavaScriptにおいては、連想配列とオブジェクトは同一のものです。
  …
  配列内の個々のデータは「要素」と呼んでいたのに対して、オブジェクト内の個々のデータは
 「プロパティ」と呼びます。関数が格納されたプロパティのことは、特別にメソッドと呼びます。

この説明を読み返しつつ、解説図を眺めるうちに謎は解けた。 メソッド名ですね!

分かってしまえばなるほどという感じですが、PHPなどのスクリプト言語で実装されている
オブジェクト指向( クラスベース ) とはだいぶ違うので、こういったJavaScriptの
オブジェクト指向( プロトタイプベース ) が初めてなら、サイ本 や パーフェクトJavaScript へ
ジャンプする前の足場固めとして効果的な1冊だと思いました。

おまけ( サンプルコード・カスタマイズ )

続きを読む

Webデザイナーの技を磨く『 10日でおぼえる jQuery 入門教室 』



10日でおぼえる jQuery入門教室

今回の 書籍レビュー は、すでに Webデザイナー の 必修技能 となりつつある jQuery の
入門書
 『 10日でおぼえる jQuery入門教室 』 
です。
# 対象 jQueryバージョン は 最新 の1.6系

どんな本?

ひと通りこの 講義形式テキスト を使い込んだ 学習効果 は HTML と CSS の 基本 を理解している方なら、
あの ノンプログラマーのためのjQuery入門
を サクサク理解 できる レベル まで行けると思います。

他に2冊 jQueryの本 を持っていますが、分かりやすさ という点で 最初に読むべき jQuery本 として オススメ!

学習期間 の 『 10日間でおぼえる… 』 については、連日の 室温32度 以上 に 負けて 20日間 もかかりましたが(汗)
全40レッスン の サンプルコード を実際に動かしたので、jQuery の DOM操作 や イベント処理 の 基本 と あぶない 落とし穴 の 原理 を 知ること ができました。

全ページカラー の 図解 jQuery

jQueryメソッド の 効果 を 図解 で 説明 するページが多く、ソースコードさえも 一つの図 のように解説されていて、サイト制作 でよく スクリプト の 作り込み が要求される フォーム回り の 制御 もしっかり学べます。

これから jQuery を使い始める方でも、よくある jQuery入門セミナー に行かずとも良さそうなくらい分かりやすい。

jQuery で マッシュアップ!?

Yahoo API の 動画検索 や ブログ検索 を jQuery単体、もしくは jQuery と PHP を組み合わせて 活用する方法 が解説されています。

レッスンごとに 単一のAPI を解説しているので、複数API を 組み合わせて開発する マッシュアップ の 足がかり として参考になりました。

自分で jQueryプラグイン を作れる

すぐに 何か凄い プラグイン ができるわけではありませんが、自分で書いて良く使う処理なら 簡単にプラグイン化 して ストック しておけるようになりました。
これは便利!

書評を書いた 10日でおぼえる jQuery入門教室 という本はこちらです。

CakePHP Authコンポーネントでパスワード・ハッシュをストレッチングするには?

  • 2011-05-27 (金)
  • PHP

体系的に学ぶ 安全なWebアプリケーションの作り方 』で解説されていたパスワード・ハッシュのストレッチングをCakePHPで実装してみました。 
ストレッチング処理の肝となる部分は書籍に書いてある内容のままですので(汗)、設定方法を簡単に説明します。

【 注意事項 】
今回実装したStretchAuthコンポーネントの導入にはパスワード( ハッシュ )の再登録が必要です。
また、運用中のシステムへの導入や導入後の設定変更により、ハッシュ方式やストレッチ回数が異なるパスワードがDBへ登録されますので、必ずDB及びシステムのバックアップを行ってからお試しください。

体系的に学ぶ 安全なWebアプリケーションの作り方

※ 諸般の事情により、CakePHP-1.2.10 でしか動作確認していませんので 1.3 や 2.0 で動いた方は @scriptwork まで教えて頂けると助かります

それではまず bootstrap.php でパラメーターを設定。

define( 'HASH_TYPE',     'sha256' ); // 使用するハッシュ関数の種類
define( 'STRETCH_COUNT', 1000 );     // ハッシュのストレッチング回数

HASH_TYPE は 使用するハッシュ関数のアルゴリズムでPHPのhash関数へのパラメーターになります。
sha1 / sha256 / sha512 など、お使いのサーバー環境に合わせて指定してください。
※ CakePHP 1.3.9 と 2.0-alpha はデフォルトが sha1 になっていますが、できれば sha256 か sha512 がお薦め

HASH_TYPEの指定によって、生成されるハッシュ値の長さが変わります。
このため、mysql側もパスワードハッシュを格納するフィールドサイズの調整が必要。
※ 実際にPHP 5.3.6で生成されたハッシュの長さを見るとsha256で64バイト、sha512なら128バイトでした

STRETCH_COUNT でパスワード文字列に対するハッシュ関数の適用回数を指定。
ここはサーバー性能とアクセス負荷のバランスによって調整が必要なところですが、とりあえず1000回で様子見中…

続きを読む

Rails3 開発手順まとめ本がやってきた。


昨年、WEB+DB PRESS( Vol.58 ) で Rails3特集 が組まれた頃は『 実務ベースはまだ Rails2 で 』といった話も聞いたが、リリースから半年以上たってそろそろ Rails3 を導入したいと考えていた。 そんなおり Twitter で Rails3本 の レビューアー募集 があり申し込んでみたところ、
Ruby on Rails 3 アプリケーションプログラミング 』という発売前の本が到着!
日本語で今すぐ Rails3 の開発手順をざざっと読めるのはとても助かります。

Ruby on Rails 3 アプリケーションプログラミング

Ruby on Rails 3 アプリケーションプログラミング

全体の構成は Rails3 の開発環境を準備する手順から、MVC ごとの新しい開発手順や開発したプログラムのテスト方法がコンパクトに解説されていて、一言でいうと 『 図解 Ruby on Rails Guides 』 という感じで、内容も Rails3 の リリースノート にある 5つのハイライト のうち4つをカバーしている。

  • RESTfulなインターフェイスをともなった新しいルーティング
  • 手軽になったAction Mailerでのmultipartメッセージ送信方法
  • Active Recordのクエリでメソッドチェーンの利用方法と遅延ロード
  • 控えめなJavaScript と jQueryドライバー( rails.js )の利用方法

 ※ 5つめのハイライトはプロジェクトごとにgem依存関係を管理する Bundler
ですが今回は解説なし

読み始めて1週間ほどですが図解が豊富で 掲載コードのダウンロードサービス もあり、Webで情報を捜し回るよりも この1冊 で楽に Rails3 を使い始められそうです。

書評を書いた Ruby on Rails 3 アプリケーションプログラミング という本はこちらです。

以下、詳しい目次を掲載。

続きを読む

WordPressの設定メモ wp.Vicuna Ext. Custom & SyntaxHighlighter Evolved


月日がたつと何をどんな理由で設定したか忘れてしまうので今回設定したThemeとPluginのメモを残しておこう。

WP Theme : wp.Vicuna Ext. Custom

オリジナルの Vicunaテーマ 1.5.9ベース の カスタマイズ版。
WordPressのウィジット対応で、管理画面からサイドバーやヘッダー&フッターのレイアウト設定機能付き。

WP Plugin : SyntaxHighlighter Evolved

ソースコードの表示プラグイン
任意の行番号を指定しハイライト表示が可能。
同様のプラグインが他にもあるが、表示ソースコードから行番号を含めずにテキストエディターへコピー&ペーストできるのでコレを選択。

    function engine($name = 'File', $settings = array()) {
        $cacheClass = $name . 'Engine';
        $_this =& Cache::getInstance();
        if (!isset($_this->_Engine[$name])) {
            if ($_this->__loadEngine($name) === false) {
                return false;
            }
            $_this->_Engine[$name] =& new $cacheClass();
        }

        if ($_this->_Engine[$name]->init($settings)) {
            if (time() % $_this->_Engine[$name]->settings['probability'] === 0) {
                $_this->_Engine[$name]->gc();
            }
            return true;
        }
        $_this->_Engine[$name] = null;
        return false;
    }

Home

Fedora 20
アーカイブ

Return to page top