Lazuli

らずり

Day-O のフォーマット

Day-O 見やすくて Mac 買ったときはいつも入れてる。


Day-O // ShaunInman.com


ただ毎回フォーマットの書き方を忘れて困ることになる。
ので、フォーマットを残しておく。

MM月dd日 (E) HH:mm

Rspec で uninitialized constant Capybara (NameError) エラー

最近、Ruby on Rail のチュートリアル をやってる。RubyRails 覚えたい。
順調に進んでたけど Rspec でテスト書くところで躓いた。

第3章 ほぼ静的なページの作成 | Rails チュートリアル

この章で Capybara DSLRspec に読み込ませる箇所がある。

# spec_helper.rb
Config.include Capybara::DSL

これを書いて実行すると

$ bundle exec rspec spec/requests/static_pages_spec.rb
/path/to/rails_application/spec/spec_helper.rb:46:in `block in <top (required)>': uninitialized constant Capybara (NameError)

というようなエラーになってテストが走らない。
なんとなく Capybara というモジュール?が正しく認識出来てないからだと推測。


ぐぐってみると、そもそも Capybara が入ってるかと言われる。

# Gemfile
group :test do
  gem 'selenium-webdriver'
  gem 'capybara'
end

Gemfile は問題なさそう。

$ bundle list | ag capybara
* capybara (2.4.4)

インストールもちゃんとされてる。
さらにぐぐる


チュートリアルのバージョンと違うんじゃねと言われる。
どうやらチュートリアルが少し古くてこの書き方ではモジュールが読み込めていないらしい。
モジュールが読み込めるように下記の設定を記述したら動いた。

# spec_helper.rb
ENV['RAILS_ENV'] = 'test'
require File.expand_path('../../config/environment', __FILE__)


やってることは難しくなさそう。

ENV['RAILS_ENV'] = 'test'

はおそらく環境変数をテスト用にしてるんだろう。

require File.expand_path('../../config/environment', __FILE__)

File.expand_path は初めて見る関数なので調べた。
第一引数に与えた相対パス絶対パスに変えてくれるようだ。
第二引数にパスを指定した場合、そのパスをカレントディレクトリにして見た相対パスが指定出来る。
第二引数無しだと現在のカレントディレクトリを元に相対パスを指定する。
要するに config/environment.rb を読み込んで環境変数周りの初期化をしてるっぽい。
初期化すれば Capybara のモジュールが読み込めてテストが動くという感じ、かな。

RubyRails 結構楽しい。

gibo

simonwhitaker/gibo · GitHub

.gitignore ボイラープレートというやつ。最高なツール
.DS_Store とか IDE の設定ファイルとかフレームワークのキャッシュとかそういうリポジトリに含めたくないファイルが書かれた .gitignore のテンプレートを提供してくれる!最高なツール

Usage

Homebrew でサクッと入れる。

$ brew install gibo


たとえば OS X の場合、こういうのが表示される。

$ gibo osx
### https://raw.github.com/github/gitignore/298588469ac0cb08a00eebf7b00efb5ab726daca/Global/osx.gitignore

.DS_Store
.AppleDouble
.LSOverride

# Icon must end with two \r
Icon

# Thumbnails
._*

# Files that might appear on external disk
.Spotlight-V100
.Trashes

# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk


つまり、こうしてやればいい。

$ gibo osx > .gitignore


最高なツールですねえ。
対応してるボイラープレートは l オプションを付ければよい。便利。

$ gibo -l


また、連続してボイラープレートを指定してやることも可能。

$ gibo java android eclipse > .gitignore

Awsクライアントのラッパークラスを作ると結構便利

以前、こんなライブラリつくった。
Aws のクライアントクラスをシュパッと作れるやつ。

AwsClientManager for PHP というライブラリを作った - Lazuli

AwsSDK はそれ単体だけだとなかなか使いづらくテストに利用しにくい。
ラッパークラスを作ってやるとテストが容易になるかもと気付いてやってみたら結構いい感じに収束できた。
たとえば、何かをアップロードするようなクラスを作った場合。

<?php
class Uploader
{
    private $S3;

    public function setS3 ($S3)
    {
        $this->S3 = $S3;
    }

    public function upload ($from_path, $to_path)
    {
        $result = $this->S3->putObject([
            'Bucket' => 'bucket_name',
            'Key' => $to_path,
            'Body' => \Guzzle\Http\EntityBody::factory(fopen($from_path, 'r'))
        ]);
        return $result;
    }
}

色々端折ってるけど upload メソッドにパスを渡してやると S3 にアップロードできるよ!って感じ。
次に S3 用のラッパークラス。

<?php
class S3
{
    private $client;

    public function __construct (\Aws\Ec2\Ec2Client $client)
    {
        $this->client = $client;
    }

    public function putObject ($args)
    {
        try {
            $this->client->putObject($args);
        } catch (\Exception $e) {
            throw $e;
        }
        return true;
    }
}

Ec2Client クラスに委譲してるだけなんだけどコンストラクタでクライアント渡すようにしてる。
この部分をモックにしてあげればテストに使えるようになる。

<?php
class UploaderTest extends PHPUnit_Framework_TestCase
{
    private $uploader;

    private $S3_mock;

    public function setUp ()
    {
        $this->uploader = new Uploader();
        $this->S3_mock = $this->getMock('....');
    }

    /**
     * @test
     */
    public function upload ()
    {
        $this->uploader->setS3($this->S3_mock);
        $result = $this->uploader->upload('/tmp/foo.txt', 'foo.txt');
        $this->assertTrue($result);
    }
}

setS3 にモックを渡してるから AwsSDK のクラスがどうなっていようと気にすることなくテストが出来る。
実コードのときは正しいクライアントクラスを渡してあげればよい。

AwsClientManager for PHP というライブラリを作った - Lazuli

これを使うのならば、

<?php

use S3;
use Acm\Acm;

$from_path = '/tmp/foo.txt';
$to_path = 'foo.txt';

$S3 = new S3(Acm::getS3());
$uploader = new Uploader->setS3($S3);
$uploader->upload($from_path, $to_path);

どやぁ。

一年前くらいからゲオでレンタルしてる。旧作だと一本70円くらいで借りられて手頃。たぶん蔦屋でも同等の値段だろう。
映画やシリーズもの並行して色々見てるので思い出に残っているものを幾つか挙げてみる。面白いので暇つぶしにはお勧め。

ウォーキング・デッド

ゾンビ物の海外ドラマ。初めて海外ドラマ見たけど映画並の出来で驚いた。ゾンビがリアルで序盤は結構怖かったな。
シーズン2までは純粋にゾンビと戦って RPG っぽい内容で、シーズン3からは人間同士の縄張り争いの抗争になっていく。結構面白い。


SHERLOCK

現代版シャーロック・ホームズスマホタブレットなど現代的な技術を使うのが特徴。謎解きに疑問点があったりするけどスピーディに進んで楽しめる。レストレード警部やマイクロフト、モリアーティなどいつも通りの面々が出てくる。
シーズン3からシャーロックが急激に人間味を帯び、なんだかあという展開になってる。シーズン2までは面白いと思う。

SHERLOCK / シャーロック [DVD]

SHERLOCK / シャーロック [DVD]


マルドゥック・スクランブル

いつ迄たっても名前が覚えられない。近未来SFの話で、攻殻機動隊に近い内容。そういうの好きな人は楽しめると思う。ただまあ初見さんお断りの内容で初っ端から全然意味が分からない。頭フル回転で見ても疲れるだけなので適当に見てまたいつの日か見返そうくらいの心意気で見るのが一番楽しめると思う。

マルドゥック・スクランブル 圧縮 [DVD]

マルドゥック・スクランブル 圧縮 [DVD]


電脳コイル

いつか見たいなぁと思いつつ見れてなかったから借りて見てる。おもしろい。子供向けの絵柄なのに内容が子供向けっぽくない。中盤からおかしなことになっていて、空間管理局で働いてる女の人が女子高生だったり設定が崩壊し始める。それでも面白い。

電脳コイル 第1巻 通常版 [DVD]

電脳コイル 第1巻 通常版 [DVD]


リーガル・ハイ

めっちゃくだらない。まさに暇つぶしという感じで面白い。人気すぎて運の良い時しか借りられないレア素材。

リーガル・ハイ DVD-BOX

リーガル・ハイ DVD-BOX


ショーシャンクの空に

94年の映画。銀行員だった主人公が冤罪でショーシャンク刑務所に終身刑で服役される。刑務所内でのあれこれを描いている。あらすじを書くのが苦手なので控えるが良い映画だった。
しかし、モーガン・フリーマンはこの頃から今と同じような顔つきで不老なんじゃねえかと思わせる。

ショーシャンクの空に [DVD]

ショーシャンクの空に [DVD]


トゥモロー・ワールド

突如人間が生殖機能を失い、子供の生まれなくなった世界。紛争やテロが頻繁に起きおり、世界的に治安が悪くなっている。そんな中、主人公が出会った黒人の女性が子供を身ごもっていることが分かった。それで…というお話。
長回しが有名な映画で、戦闘シーンや出産シーンは迫力がある。カメラワークも臨場感があって良い。ただ、エンディングは意味不明でそれでいいのか?と思った。


締め

他にも見たけどだらだら書くのもしんどいのでこのへんで。あとはまたそのうち。