Rails3レシピブック”モックやスタブを使う”のコードを書き換えてみた

Rails3レシピブックの”モックやスタブを使う”のテストコードは、rspec-mocksのバージョンが古く、バージョン 2.14.6では書き換える必要があります。Rubyにおけるモック、スタブについては自分は初心者なので、試行錯誤して、書き換えてみました。最後のテストの部分は、本によると、失敗するはずなのですが、なぜか通ってしまいます。この点は理解不足なので、保留にします。コードは、GitHubにおいてあります。

https://github.com/andropenguin/samplecode-stub-mock

Ruby on RailsチュートリアルのサンプルのRails 4対応作業補足

Ruby on Railsチュートリアルのサンプルアプリ sample_appのRails 4対応作業。

$ bundle exec rspec spec/models/user_spec.rb

で、エラー、

/usr/local/rvm/gems/ruby-2.0.0-p353@global/gems/selenium-webdriver-2.0.0/lib/selenium/webdriver/common/zipper.rb:1:in `require’: cannot load such file — zip/zip (LoadError)

が出る。ググると、http://www.workabroad.jp/posts/1095 が引っかかる。selenium-webdriver gemのバージョンを新しいのに上げるといいらしい。ところで、Everyday Rails RSpecによるテスト入門では、JavaScriptを含む複雑なwebアプリ上の操作をFirefox経由で行うときに、Seleniumを使うが、Firefoxが頻繁にアップデートするため、Seleniumを使ったテストが動かなくなることが多く、selenium-webdriver gemは最新版にアップデートした方がいいとのこと。そこで、それを、2.40.0にあげたら、エラーはなくなった。テストは失敗するが。

$ bundle exec rspec spec/models/user_spec.rb

テストが失敗するが、Factoryが登録されていないと言われるので、factories.rbを規定の場所にコピー。

再度、

$ bundle exec rspec spec/models/user_spec.rb

チュートリアルによると、”protected_attributes gem (リスト12.1) の動作がRails 3.2の「アクセス可能な属性」と異なっているため、マスアサインメントのセキュリティエラーをテストするコードは4.0では動作しなくなりました。”ということなので、失敗しているテストを削除。再度、テスト。OK。

同様に、micropost、relationshipモデルのテストの失敗する部分も、削除する。

user_pages_spec.rb の修正では、

it { should have_selector(‘title’, text: ‘All users’) }

it { should have_title(‘All users’) }

などと置き換えないといけない。hav_titleメソッドで、text: を書くとダメ。

チュートリアルの、Rails 4対応の説明の通りにやると、これで全テストが通るのだけど、app/asssetsの内容をコピーすると、

undefined method `environment’ for nil:NilClass when importing Bootstrap

と言われる。ググると、http://stackoverflow.com/questions/22392862/undefined-method-environment-for-nilnilclass-when-importing-bootstrap が引っかかり、sass-railsが4.0.0だとダメということで、4.0.2に変更したら、テストが通るようになった。

Rails 4.0.0、RSpec、Capybara使用プロジェクト向けGemfile

Ruby on Rails チュートリアルの、Ruby on Rails 4向けの記事を読んでいます。記事に書いてあるGemfileだと、依存関係がおかしく、buundle installでエラーになります。うまくいくGemfileを示します。

source ‘https://rubygems.org’
ruby ‘2.0.0’

gem ‘rails’, ‘4.0.0’
gem ‘bootstrap-sass’, ‘2.3.2.0’
gem ‘bcrypt-ruby’, ‘3.0.1’
gem ‘faker’, ‘1.1.2’
gem ‘will_paginate’, ‘3.0.4’
gem ‘bootstrap-will_paginate’, ‘0.0.9’

group :development, :test do
gem ‘sqlite3’, ‘1.3.7’
gem ‘rspec-rails’, ‘2.13.1’
# The following optional lines are part of the advanced setup.
# gem ‘guard-rspec’, ‘2.5.0’
# gem ‘spork-rails’, github: ‘sporkrb/spork-rails’
# gem ‘guard-spork’, ‘1.5.0’
# gem ‘childprocess’, ‘0.3.6’
end

group :test do
gem ‘selenium-webdriver’, ‘2.0.0’
gem ‘capybara’, ‘2.1.0’
gem ‘factory_girl_rails’, ‘4.2.0’
gem ‘cucumber-rails’, ‘1.3.0’, :require => false
gem ‘database_cleaner’, github: ‘bmabey/database_cleaner’

# Uncomment this line on OS X.
# gem ‘growl’, ‘1.0.3’

# Uncomment these lines on Linux.
# gem ‘libnotify’, ‘0.8.0’

# Uncomment these lines on Windows.
# gem ‘rb-notifu’, ‘0.0.4’
# gem ‘win32console’, ‘1.3.2’
end

#gem ‘sass-rails’, ‘4.0.2’
gem ‘sass-rails’, ‘4.0.0’
gem ‘railties’, ‘4.0.0’
gem ‘uglifier’, ‘2.1.1’
gem ‘coffee-rails’, ‘4.0.0’
gem ‘jquery-rails’, ‘2.2.1’
gem ‘turbolinks’, ‘1.1.1’
gem ‘jbuilder’, ‘1.0.2’

group :doc do
gem ‘sdoc’, ‘0.3.20’, require: false
end

group :production do
gem ‘pg’, ‘0.15.1’
gem ‘rails_12factor’, ‘0.0.2’
end

gem ‘protected_attributes’

gem ‘execjs’
gem ‘therubyracer’

基礎Ruby on Rails改訂新版のサンプルアプリでFakerを使ってみた

最近、Everyday Rails – RSpecによるRailsテスト入門という電子書籍を読んで、RSpecでテストコードを書くことに取り組んでいます。練習として、基礎Ruby on Rails改訂新板のサンプルアプリにRSpecでテストコードを書きました。Memberクラスは、次のようなバリデーションがあります。

class Member < ActiveRecord::Base
  include EmailAddressChecker

  attr_accessible :number, :name, :full_name, :email, :birthday, :gender, :administrator
  validates :number, presence: true,
            numericality:  { only_integer: true,
            greater_than: 0, less_than: 100, allow_blank: true },
            uniqueness: true
  validates :name, presence: true,
            format: { with: /\A&#91;A-Za-z&#93;\w*\z/, allow_blank: true,
                      message: :invalid_member_name },
            length:  { minimum:  2, maximum:  20, allow_blank: true },
            uniqueness: { case_sensitive: false }
  validates :full_name, length: { maximum:  20 }
  validate :check_email
  validates :gender, inclusion: { in: 0..1 }

  private
    def check_email
      if email.present?
        errors.add(:email, :invalid) unless well_formed_as_email_address(email)
      end
    end

    class << self
      def search(query)
        rel = order("number")
        if query.present?
          rel = rel.where("name LIKE ? OR full_name LIKE ?",
                        "%#{query}%", "%#{query}%")
        end
        rel
      end
    end
end
&#91;/ruby&#93;

FactoryGirl gemとFaker gemを使って、テストデータを生成しました。

&#91;ruby&#93;
require 'faker'

FactoryGirl.define do
  factory :member do
    sequence(:number) { |n| n unless n > 99 }
    name {
      name = Faker::Name.first_name.slice!(0, 19).capitalize
      name if name.length >= 2
    }
    full_name { Faker::Name.name.slice!(0, 19) }
    email {Faker::Internet.email }
    birthday "1981-12-01"
    gender { Faker::Number.number(1).to_i % 2 }
    administrator false

    factory :invalid_member do
      name nil
    end
  end
end

この場合、テストコードを書くと、英語環境ではテストは失敗しません。ところが、i18nで国際化して、日本語環境でテストすると、fakerは国際化に対応しているようで、nameが日本語になったり、emailが不正な表現になって失敗するようになります。バリデーションでは、nameは英字で始まり、英数字からならないとダメだからです。しかし、full_nameについては、日本語のデータが生成されるようにしたいです。fakerのサイトページを見ると、Faker::Config.locale でロケールをスイッチできるようです。そこで、次のファイルを使ってテストデータを生成するようにしました。

require 'faker'

FactoryGirl.define do
  factory :member do
    sequence(:number) { |n| n unless n > 99 }
    name {
      Faker::Config.locale = 'en-us'
      name = Faker::Name.first_name.slice!(0, 19).capitalize
      name if name.length >= 2
    }
    full_name {
      Faker::Config.locale = 'ja'
      Faker::Name.name.slice!(0, 19)
    }
    email {
      Faker::Config.locale = 'en-us'
      Faker::Internet.email
    }
    birthday "1981-12-01"
    gender { Faker::Number.number(1).to_i % 2 }
    administrator false

    factory :invalid_member do
      name nil
    end
  end
end

Faker::Config.locale でロケールをスイッチすると、その後は設定したロケールのままになると期待したのですが、そのようにはならないようで、各フィールドごとにロケールをスイッチしないとダメでした。このテストデータを使用すると、テストが通るようになりました。

OmniAuthを使ってtwitterで認証をする – part2

以前、「OminiAuthを使ってtwitterで認証をする」の記事を書いたのですが、理解が足りないようで、最近、twitterでのOmniAuthを使った実装をやっているんですが、うまくいっていません。そこで、外国のサイトで有名なrailscastsにあるドキュメント #241 Simple OmniAuth にあたってみました。

このドキュメントでは、はじめにブログシステムが与えれているものと想定して、omniauthを使って認証の実装をやっています。ソースコードをダウンロードできるので、ダウンロードして、ソースコードを見ながら、omniauthを使って認証の実装をする前のブログシステムを再現しました。そして、ドキュメントに従って、認証を実装しました。

いくつか、サンプルで変更した点があるので列挙します。

  • Userクラスでcreate_with_omniauthメソッドを実装するとき、request.env[oamniauth.auth]が、user_infoではなくinfo属性を持っていることを考慮する必要がある。
  • ドキュメントでは、ヘルパーメソッド current_userをapp/hcontrollers/application_conroller.rbで定義しているが、app/helpers/sessions_helper.rbで定義して、それを前者のファイルでincludeした。
  • ブログシステムに記事がない状態で、twitterでアプリ認証後遷移する画面でtrueの単語が表示されてしまうが、原因を探っていない。:-)

ソースコードを

revised-241-simple-omniauth

に公開します。

#250 Authentication from Scratchの改良

Ruby on Railsで、パスワードを非可逆暗号化する場合、has_secure_passwordを使うと便利です。しかし、私は、twilogサービスのように、メールアドレスを入力しない場合、暗号化したバスワードをシステムに保存しないようなRailsアプリを作りたく思っています。has_secure_passwordは、Rails 4では、validationsというオプションを持っていて、値falseを渡すと、has_secure_passwordがスキップされます。しかし、Rails 3.2では、そのようなオプションがなく、スキップが可能ではありません。一つの回避策として、stackoverflowに、How to skip has_secure_password validationsというスレッドがあり、それを試してみたのですが、コードが足りないようで、動作しませんでした。さらに、ググった所、RailsCastに、#250 Authentication from Scratchで、スクラッチから認証を実装しているサンプルを見つけました。

#250 Authentication from Scratchのサンプルを、Rails 3.2で動かそうとすると、問題にぶつかりました。サンプルでは、passwordにattr_accessorを使っていますが、これは、Rails 3.2では使用を推奨されていません。かわりに、attr_accessible を使用すべきですが、それが定義された属性は、データベーステーブルのカラムにならなければいけません(後記、ここの記述は間違いかもしれません。ググっていて、そういう情報に触れたのですが、そのurlを失念しました。また、カラムにならなくても、問題無いようです)。平文のpasswordやpassword_confirmationは、データベースに保存すべきではないので、attr_accessibleを使用できないということになります。そこで、Usersクラスでは、emailのみ、attr_accessibleを使用し、passwordとpassword_confirmationに対しては、アクセサをあらわに書きました。


  def password
    @password
  end

  def password=(password_str)
    @password = password_str
  end

  def password_confirmation
    @password_confirmation
  end

  def password_confirmation=(password_confirmation_str)
    @password_confirmation = password_confirmation_str
  end

そして、メールアドレス、パスワード入力フォームから呼ばれるcontroller、UsersControllerクラスで、


  def create
    email = params[:user][:email]
    password = params[:user][:password]
    password_confrimation = params[:user][:password_confirmation]
    @user = User.new(:email => email)
    @user.password = password
    @user.password_confirmation = password_confrimation
    if @user.save
      redirect_to root_url, notice: "signed up!"
    else
      render "new"
    end
  end

のように書き、Userクラスを生成するとき、emailの値のみを渡すようにしました。このようにすることで、パスワードが平文でデータベースに保存されることはなくなりました。

改良したサンプルを、GitHubに置きました。 andropenguin/auth_from_scratch

あとは、メールアドレス、パスワードの入力がない場合、パスワードの保存を行わず、入力がある場合、暗号化したパスワードをシステムに保存するようにしたいですが、それは多分、そんなに難しくはないでしょう。

OmniAuthを使ってtwitterで認証する

OmniAuthを使ってtwitterで認証する

認証、ツイート機能実装

ログイン、ログアウトはわりと、すぐにできたのですが、ツイートできるようになるのに時間がかかりました。Ruby on Railsの認証 – OmniAuthでtwitter認証 + 簡単なRSpec にあるGitHub omniauthTwitterSample を参考にしました。
ソースコードを

omniauthTwitterSample2

に公開します。

参考
1. Ruby on Railsの認証 – OmniAuthでtwitter認証 + 簡単なRSpec

2. (メモ) Rails+OmniAuthによるTwitterログイン

3. omniauth-twitter

備考
2の記事で、ツイートするupdateメソッドのレシーバーを、Twitter::Client.newで作っているが、それだと、updateがundefinedメソッドになってしまって、ツイートできない。The Twitter Ruby Gem によると、レシーバーを

client = Twitter::REST::Client.new do |config|
config.consumer_key = “YOUR_CONSUMER_KEY”
config.consumer_secret = “YOUR_CONSUMER_SECRET”
config.access_token = “YOUR_ACCESS_TOKEN”
config.access_token_secret = “YOUR_ACCESS_SECRET”
end

としている。このclientを使うと、client.updateでツイートできる。

VirtualBoxでVMware Serverで作成した仮想ハードディスクを拡張

Ubuntuを入れたVirtualBox仮想マシンのハードディスクの空きが少なくなったので、サイズの拡張を行いました。
このディスクは、元は、VMware Serverで作ったもので、拡張子は.vmdkです。
VirtualBox の仮想ディスクサイズを拡張するに、仮想ハードディスクサイズ拡張方法が書かれているのですが、拡張子 .vmdkのファイルだと、

0%…
Progress state: VBOX_E_NOT_SUPPORTED
VBoxManage: error: Resize hard disk operation for this format is not implemented yet!

というエラーが出て、うまくいきません。VirtualBox: Resize and Change Formatによると、vdi形式のクローンを作る必要があるようです。その後、VBoxManage modifyhd で仮想ハードディスク(vdi)をresizeできました。

$ VBoxManage clonehd VirutalPC.vmdk VirtualPC.vdi –format VDI
$ VBoxManage modifyhd VirtualPC.vdi –resize 122880

ここでは、仮想マシン名をVirtualPC、拡張後のハードディスクサイズを 120GBにしています。–resizeの後には、MB単位で値を付けます。後は、Knoppixで起動して、パーティションの移動、操作を行います。

Raspberry Pi type Bでシリアル接続でOSをインストールできるか調べた

Raspberry Pi type Bが発売されてから、1年半くらい経っているということで、ネタとしては古いのですが、はじめは品薄で、最近になって入手性がよくなって、手を出す人が多くなったようなので、ブログを書きます。Raspberry Piのインストール用NOOBSは比較的インストールが楽ですが、HDMIかDVI入力のあるディスプレイへの出力が必要です。インストール作業を行う勉強会などでは、ディスプレイを用意するのは現実的ではないので、Windows、Mac OS X、Ubuntu、それぞれで、SDカードにRaw ImagesであるRaspbian “wheezy”( http://www.raspberrypi.org/downloads )を書きこんで、シリアル接続でRaspberry Piを起動する方法を調べました。

シリアル接続には、USBシリアルケーブル 半導体,TTL-RS232コンバータ,TTL-232R-Rpi,for Raspberry Piなどを使用するといい。このケーブルの場合、http://kantired.tumblr.com/post/44730456768/raspberry-leaf-raspberry-piにある写真を見て、GNDに黒色の端子を、TXDに黄色の端子を、RXDに赤の端子をつなぐといい。
また、SDカードリーダー・ライターは、ビックカメラで、ELECOM カードリーダライタ USB2.0対応 SD+MS+CF対応 ホワイトFACE MR-A39HWHF1をポイントを使って、300円ちょっとで買いました。これは、Ubuntu、Windows、Macで使えました。

1. Ubuntu 12.4
2013-07-26-wheezy-raspbian.zip を展開。

$ unzip 2013-07-26-wheezy-raspbian.zip

1.1 ddコマンドでイメージをSDカードに書き込む方法
SDカードをカードリーダー・ライターにさして、/var/log/syslogを見て、SDカードのデバイス名を知る。ここでは、/dev/sdxとして

$ sudo dd bs=4M if=2013-07-26-wheezy-raspbian of=/dev/sdx

結構、時間がかかる。書き込み後、SDカードをRaspberry Piにさす。Raspberry PiとUbuntu PCをシリアル接続した状態で、Ubuntuでターミナルエミュレータを起動して、

$ screen /dev/ttyUSB0 115200

を打ち、Raspberry Piを起動。デバイス名は環境依存かもしれない。起動画面を見れない。ddコマンドで、SDカードにイメージを書き込む方法はダメ。

1.2 usb-imagewriterを使う方法
usb-imagewriterをインストール

$ sudo apt-get install usb-imagewriter

SDカードにイメージを書き込む。

$ sudo imagewiter

書きこんで、SDカードをRaspberry Piにさして、起動。シリアル接続した時、起動画面を見れない。

1.3 NOOBSをSDカードにコピーする方法
gpartedでSDカードをFAT32でフォーマット。

$ sudo gparted

http://www.raspberrypi.org/downloadsのNOOBSを展開して、中身をSDカードにコピー。
SDカードをRaspberry Piにさして、シリアル接続して、起動。ユーザ名 root、パスワード rasberryを入力すると、rescue modeに入れるが、OS導入前の状態で、Raspbianをインストールする方法がわからず。

2. Windows
Vistaでテスト。USBシリアルケーブル 半導体,TTL-RS232コンバータ,TTL-232R-Rpi,for Raspberry Piを用いてシリアル接続を行う場合、Windowsで、ドライバーソフトをインストールしておく。

2.1 Win32DiskImagerを使う方法
Win32DiskImagerをダウンロード、展開。Win32DiskImager.exeを実行。イメージを選択して、SDカードのドライブを選択して、SDカードに書き込み。SDカードをRaspberry Piにさす。

Tera Term Proで接続。シリアル接続を選び、ポート(私の場合、COM11: USB Srial Port(COM11)、多分環境依存)を選択。通信速度を115200に設定。Raspberry Piを起動するも、起動画面を見れない。

2.2 DD for Windowsを使う方法
DD for Windowsをダウンロード。インストール。DD for Windowsを起動。SDカードを認識できず。

2.3 flashnulを使う方法
flashnulにアクセスできず、試せず。

3. Mac OS X(Moutain Lion)
USBシリアルケーブル 半導体,TTL-RS232コンバータ,TTL-232R-Rpi,for Raspberry Piを用いてシリアル接続を行う場合、Macで、ドライバーソフトをインストールしておく。

3.1 ddコマンドでSDカードにイメージを書き込む方法
/var/log/syslogを見て、SDカードのドライブ名を知る。

$ sudo dd bs=1m if=2013-07-26-wheezy-raspbian of=/dev/disk1

ディスク番号は環境によって違うかもしれないので、注意。SDカードをRaspberry Piにさして、Raspbery Piをシリアル接続して、起動。

$ screen /dev/tty.usbserial-XXXX 11520

起動画面を見れず。デバイス名は、SDカードをさしていない状態で、USBケーブルをさした時、

$ ls /dev/tty.usbserial*

として、知ることができる。私の環境では、/dev/tty.usbserial-FTGQVWQ6となったが、環境依存かもしれない。

3.2 diskutilを使う方法
$ sudo diskutil umount /dev/disk1s1
$ sudo dd bs=1m if=2013-07-26-wheezy-raspbian.img of=/dev/disk1
$ sudo diskutil eject /dev/disk1

ディスク番号は環境によって違うかもしれないので、注意。
SDカードをRaspberry Piにさして、Raspbery Piをシリアル接続して、起動。

$ screen /dev/tty.usbserial-XXXX 115200

起動画面を見れた。ユーザ名 pi、パスワード raspberryでログインできた。

4. 結論
ディスプレイなしで、SDカードにイメージを書きこんで起動するには、現状、Mac OS X環境でしかできない。勉強会でインストール作業をやるには、Macノートを持って行ってやるしかないだろう。

5. Raspberry Pi type B、シリアルケーブル入手先
jp.rs-online.comで買うと、Raspberry Pi本体が安いし、注文して翌営業日に届く。

6. 参考url
RPi Easy SD Card Setup

7. 追加情報
Ubuntuでも、ddコマンドで、SDカードにイメージを書きこんで、Raspberry Piを起動できるらしい。http://cryptlab.blog.fc2.com/blog-date-20130123.html。gpartedでパーティションをリサイズするのがキモなのかな?
→UubntuでddコマンドでイメージをSDカードに書き込み、gpartedを起動して、bootではないパーティション(ext4フォーマット)を拡張してみたけど、Raspberry Piは起動せず。パーティションの拡張は空きを全部使うのと、5.82GB(大きさは適当)に拡張してみたが、どちらもダメ。Ubuntuでddを使うのは地雷だな。

Raspberry Piで阿鼻叫喚

こんにちは、先日、日経LinuxのRaspberry Pi付きムック本を買いました。
昨日、ビックカメラで、SDカード、micro USBの電源、HDMIケーブルを買ってきて、セットアップをしました。
自分は普段、UbuntuとMacを使っているので、Ubuntuで、2013-07-26-wheezy-raspbian.zipを展開して、imgファイルをddコマンドでSDカードに書き込みました。SDカードを読み書きできるPCは家では、Ubuntuを入れたThinkPad X60のみだったので、そこで作業しました。SDカードは元はパーティションが2つ切ってありましたが、念のため、fdiskコマンドで、パーティションを削除してから行いました。しかし、SDカードをRaspberry Piにさして、東芝レグザにつなげても、起動画面が全く現れませんでした。facebookでそれを書いたら、村長から、HDMIのポートが複数あるが、使えたり使えなかったりするので、ポートを変えてみたらと助言を受けました。しかし、全てのポートを試してみましたが、全く起動画面が現れませんでした。

今日、再度作業をしました。次の方法を試しました。普段PCの画面表示に使っている液晶モニターがHDMIをサポートしていることがわかって、液晶モニターにつなげることにしました。

  • SDカードに2013-07-26-wheezy-raspbian.imgをUbuntuのddで書き込んで起動してみたが、起動しない。
  • SDカードをUbuntuのgpartedでFAT16でパーティションを切って、noobsを展開して得られたディレクトリの中身をコピーして起動してみた。ラズベリーのマークは拝めるけど、cmdline.txtを開けないと英語で表示され、リストにインストールできるディストリビューションが出ず、インストールできない。
  • Win32DiskImagerはThinkPad X60(Windows Vista)では、SDカードを認識できず、イメージを書き込めなかった。
  • 最終的に、ThinkPad X60(Windows Vista)にSD Formatterをインストールして、SD Formatter 4.0 ユーザーマニュアルに従ってSDカードをフォーマット。そして、ThinkPad X60 Ubuntuでマウントして、noobsの中身をコピーして起動できた。

最後の方法で、起動できるようになったのですが、どうもLinuxでddコマンドでイメージファイルを書き込んだり、gpartedでパーティションを切って、フォーマットしてファイルコピーではダメなようですね。ダメと言っているウェブページ。私の場合、ThinkPad X60で、Win3DiskImagerでSDカードを認識できなかったので、2013-07-26-wheezy-raspbian.img でOKかどうかは確認できませんでした。また、SD Formatterでフォーマットした場合、Windowsでnoobsのファイルをコピーしても多分OKでしょう。あと、起動できるようになって、設定を終了してから、東芝レグザのHDMI4ポートにつなげてみましたが、画面がちゃんと表示されました。

今日は、これらの作業の前に、初回にモニターなしで起動できないかあがいてしまいました。Ubuntu Serverにisc-dhcp-serverを入れ、DHCPサーバを立てました。リースするIPアドレスのレンジを限って、2013-07-26-wheezy-raspbian.imgを書き込んだSDカードをさしたRaspberry Piを起動して、/var/log/syslogファイルを監視しました。しかし、IPアドレスがリースされませんでした。多分、Ubuntuでddコマンでイメージを書き込んでいたので、SDカードの状態が良くなかったのでしょう。あと、正常に書き込んでいたとしても、初回起動時には設定画面が出て、IPアドレスを取得できていないとか。noobsを使ったインストール方法では、初回起動時の設定で、SSHサーバを有効にするかどうかあるので、多分、全くモニターなしでは、起動できないか、起動できても、SSHでリモートログインできないのではないかなと思います。