seeds.rbでデータ投入する際、createよりもcreate!を使うべき?

Railsアプリケーションで、初期データを投入する方法として、「'seeds' feature」というものがあります。 db/seeds.rbファイルにRubyコードを書き、rake db:seedを実行することで利用できます。

先日とあるアプリケーションにて次のようなことが起こりました。

  • seeds.rbにてcreateでデータを投入していた
  • modelに変更を加えたので、seed.rbを修正
  • 修正後、rake db:seedを実行、特にエラーも無く正常終了
  • ところが、結果のデータを見ると、あるべきデータが投入されていない。

そこで、createをcreate!に変更してみたところ、validationエラーでデータ投入が失敗していることがわかりました。 modelの変更に伴い、createで指定するパラメータの追加が必要だったのですが、指定方法に誤りがあり、validationで失敗してデータが投入されていなかった、というわけです。

createとcreate!の違い

create、save、updateは、validationに失敗した場合にfalseを返します。それに対して、 create!、save!、update!、はvalidationに失敗した場合にActiveRecord::RecordInvalid例外を発生します。

参考 Active Record の基礎 | Rails ガイド

というわけで

以上のことから、seeds.rbでデータ投入する際、データ投入が失敗していることを検出するために、createよりもcreate!を使うべきでは、と思ったのですが、どうなんでしょう。 こう変えた時にデメリットあるのでしょうか。

追記

Railsチュートリアルにも記載がありました。 http://railstutorial.jp/chapters/updating_and_deleting_users?version=4.2#code-db_seed

Mac OS Xにrmagickをインストール

Macでrmagickをbudle installする際にやったことを書いておきます。 エラーメッセージをよく読もうという教訓の話。

環境

やったこと

bundle installすると以下のエラーが発生

% bundle install
(略)

Installing rmagick 2.13.2 with native extensions

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    /Users/yoshito/.rbenv/versions/2.1.1/bin/ruby extconf.rb
checking for Ruby version >= 1.8.5... yes
checking for clang... yes
checking for Magick-config... no
Can't install RMagick 2.13.2. Can't find Magick-config in /Users/yoshito/.rbenv/versions/2.1.1/bin:/Users/yoshito/.rbenv/libexec:/Users/yoshito/.rbenv/plugins/ruby-build/bin:/Users/yoshito/.nodebrew/current/bin:/Users/yoshito/.rbenv/shims:/Users/yoshito/.rbenv/bin:/opt/chefdk/bin:/usr/local/heroku/bin:/Users/yoshito/.nodebrew/current/bin:/Users/yoshito/.rbenv/shims:/Users/yoshito/.rbenv/bin:/opt/chefdk/bin:/usr/local/heroku/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

Provided configuration options:
    --with-opt-dir
    --without-opt-dir
    --with-opt-include
    --without-opt-include=${opt-dir}/include
    --with-opt-lib
    --without-opt-lib=${opt-dir}/lib
    --with-make-prog
    --without-make-prog
    --srcdir=.
    --curdir
    --ruby=/Users/yoshito/.rbenv/versions/2.1.1/bin/ruby

extconf failed, exit code 1

Mac rmagickで調べてみると、 ImageMagicのインストールが必要とのことで 以下を実施

brew install imagemagick

再度チャレンジすると状況は変わったが、まだエラーが起きている。

Installing rmagick 2.13.2 with native extensions

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    /Users/yoshito/.rbenv/versions/2.1.1/bin/ruby extconf.rb
checking for Ruby version >= 1.8.5... yes
checking for clang... yes
checking for Magick-config... yes
checking for ImageMagick version >= 6.4.9... yes
checking for HDRI disabled version of ImageMagick... yes
/usr/local/bin/Magick-config: line 41: pkg-config: command not found
/usr/local/bin/Magick-config: line 47: pkg-config: command not found
/usr/local/bin/Magick-config: line 50: pkg-config: command not found
/usr/local/bin/Magick-config: line 53: pkg-config: command not found
checking for stdint.h... yes
checking for sys/types.h... yes
checking for wand/MagickWand.h... no

Can't install RMagick 2.13.2. Can't find MagickWand.h.
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

Provided configuration options:
    --with-opt-dir
    --without-opt-dir
    --with-opt-include
    --without-opt-include=${opt-dir}/include
    --with-opt-lib
    --without-opt-lib=${opt-dir}/lib
    --with-make-prog
    --without-make-prog
    --srcdir=.
    --curdir
    --ruby=/Users/yoshito/.rbenv/versions/2.1.1/bin/ruby

extconf failed, exit code 1

ググって調べた情報を元に 環境変数PKG_CONFIG_PATHを設定してみたりしたが状況は変わらず。

もう一度エラーメッセージをよく読んでみると、

/usr/local/bin/Magick-config: line 41: pkg-config: command not found

とででいる。 pkg-configコマンドが無いのが原因ぽい

% pkg-config
zsh: command not found: pkg-config

Mac pkg-config でググると次の記事を発見

この情報を参考に以下を実行

brew install pkg-config

これでbundle installが成功しました。

まとめ

結局のところ、以下のコマンドでうまくいくのではと思いますが、 本当にこれで十分かは確認できてません。 (アンインストールしてもう一回やらないと確証がもてない)

brew install imagemagick
brew install pkg-config
bundle install

やはりエラーメッセージをよく読むことが大切ですね。

Raspberry Pi 3 を購入

突然思い立ってRaspberry Pi 3を購入しました。 まだ使えてませんが。

今回買ったものは以下の3点です。

買った目的としては、仕事で使うLinux装置の試験機として使えそうかを確認する、 ということにしています(使ってみたかっただけ)

これで B, B+, 2, A+ に続いて5台目のRapberry Piになります。

特徴、注意点は以下です。

  • 処理速度向上
  • Wifi, Bluetoothを搭載
  • 消費電力が増大。推奨される電源容量が1.8Aから2.5Aに上がっています。

消費電力に関してはiPadの充電アダプタでしばらく様子を見てみます。

参考情報 : RPi3:2.5A必要らしいけどいろんな電源を試してみる

これで電力が足りないのであれば別途購入しようかと思います。 とはいえ最初から一緒に買った方が送料が節約できたかも? という気もしますが。

赤ちゃんのいる家庭とスタンディングデスクは相性が良いかもしれない #childadvent

この記事は子育てプログラマ・ITエンジニア・Webデザイナー Part 2 Advent Calendar 2015の参加記事です。

勇んでアドベントカレンダー登録してみましたが、小ネタで失礼します。 我が家でのちょっとした発見なのですが、何かの参考になればと思います。

家庭でのPC作業には何かと課題が

我が家にはもうすぐ4歳の娘ともうすぐ(明日)1歳になる息子がいます。

小さいお子さんのいる家庭では、子供達の手の届くところに危ないもの、大切なものは置けません。 うちでも特に下の息子は行動範囲が広がり、何でも食べたりいたずら盛りです。

妻と私は若干分野が違いますが、ともにソフトウェアエンジニアです。 二人とも日常的に家でPC作業をします。 リビングでPC作業する際に普通のテーブルに置いてると、子供が膝の上に乗ってきて、 キーボードを触ろうとしてきます。

スタンディングデスク方式を導入

そんな我が家で、リビングでPC作業するときにスタンディングデスク方式を採用してみました。

実際にはスタンディングデスクではないのですが、ちょうどいい感じのPC置き場があるのに気がつきました。 ここには雑多なものが置かれていましたが、撤去してここでPC作業するようにしてみました。

これは妻にも好評で二人で場所を取り合っています。 気がつくと、私のマシンの上に妻のマシンが置かれているなど。

景観的にはどうかという気もしますが、来客時などは退避させれば問題なしです。

メリットはこんな感じでしょうか。

  • 子供にPCにいたずらされることがない。
  • PCを置いたままにしていても、子供には届かないので危険なことにもならないはず。
  • 子供たちも最近は一人で遊んでくれるようになっているし、何かあってもすぐに駆けつけられる。
  • さっと家事ができる
  • 健康にも良い?

まとめ

赤ちゃんのいる家庭にスタンディングデスクは相性が良さそうというのを発見しました。 生活の中心であるリビングでスタンディングデスク、これいいなぁと思いながら子供が遊んでいるのを横目にこの記事を書いてます。 しばらくこの方式を続けてみようと思います。

家族サービスとコミュニティ活動を両立!? RailsGirls Kobe#1を開催

RailsGirls Kobe #1を開催しました。

railsgirls.com

オーガナイザーの@tana3kaは私の妻です。

開催にいたったきっかけ

日頃から妻にRailsGirlsって面白そうだよ、いってみない?とオススメしてしていましたが、さすがに0歳児と3歳児を抱えて大阪とか京都か厳しいなと思っていました。 そんなある時、RailsGirls Kyotoの3rd に関して妻がツイート

twitter.com

これをReTweetしたことがきっかけで、kobe.rbにて話題にあがったのがきっかけです。

このイベントに関わるに当たって、自分としては、

  • 妻が充実した育休生活を過ごせることで、自分もコミュニティ活動に参加しやすくなる(自分だけ楽しんでズルいと言われないように?)
  • 何かイベント開催したという実績作りたい
  • コーチやってみたい

という思いを持っていました。

当日の様子

1日目(インストールデー)

仕事を終え19:00に会場に到着。 20:00には家に帰らないといけないため、会場の様子を確認した後すぐに帰ることになりました。

オーガナイザーは子連れand早退しました。#railsgirlskobe

二日目(本番)

上の娘(3歳)を妻のお母さんに預け、妻と0歳の息子と三人で会場へ。 妻にはオーガナイザー兼参加者とし集中してもらうため、私はベビーシッターに徹してました。 子供をあやしながら会場を見回り、写真とったりTweetしたりしてました。 コーチ業はあまりできなかったかもしれないけど、ベビーシッターとして無事に役目は果たせましたかと思います。

ふりかえると

家族サービスとコミュニティ活動が両立できる素晴らしい機会でした。 コミュニティの素晴らしさを妻にわかってもらえ、今後の自分自身のコミュニティ活動への理解が得られやすくなると思います。

技術的な勉強はあまりできなかったけど、そのかわりに イベント主催側の経験ができた素晴らしい機会でした。 大したことはしていませんが、イベント主催するって素晴らしいですね。

細かい点ではいろいろ改善の余地はあるかと思いますが、個人的には成功だと感じています。 (至らぬ点があったかもしれませんがご了承ください)

つぎは?

次回は上の娘も一緒に参加できないか、と画策しています。 ますますコーチをするのは難しくなると思いますが、家族サービスとコミュニティ活動のさらなる融合ができるのではと期待してます。

まとめ

新しい出会いもあり、とても充実したイベントになりました。 ふりかえりして改善して次回につなげたいです。

参考

私の英語勉強法 その1 〜 英語耳 〜

先日の英語勉強会をきっかけに私の英語勉強法をまとめておこうと思いました。 このエントリーはその第一弾です。

英語耳は超オススメ

私が使っていたのはこちらです。(シリーズの他の本については持っていないのでよくわかりません。悪しからず)

www.amazon.co.jp

タイトルは"耳"ということで聞き取りができるようになることがゴールなのですが、 発音できない音は聞き取れない、との考えから英語の発音の訓練から始まります。

一人暮らしの時に、付録CDの音源を防水プレイヤーを使って部屋でもお風呂でひたすら流して、 発音の真似をしてました。 一人暮らしなので気兼ねなく流しまくって、発声しまくってました。 (もちろん、隣の部屋には聞こえない程度に抑えないといけないですが)

これのおかげで、RとLは聞き分けられるようになりました。 (20代後半から始めましたが、大人になってからでもできる!)

発音に関しても、発音が悪いせいで伝わらない、ということはなくなった気がします。 (ネイティブと話す機会がそれほどあるわけではないですが)

発音ができるように(できた気に)なると、使ってみたくなります。 英語を話す機会を増やしたい、試したい、という前向きな気持ちになれます。

とはいえ、音がわかるだけではもちろん理解できないことがままあります。 語彙力や文法の知識が必要になります。

Rubyと英語を同時に学べる!「Rubyistのための英語勉強会」に参加しました。

先週の土曜日にこのような勉強会に参加しました。

nishiwaki-koberb.doorkeeper.jp

内容に関するレポートなどはこちらにまとまっています。

2015.08.29 English study for Rubyists · nishiwaki-koberb/meetup Wiki

感想

英語学習とRubyの勉強ができるとてもお得な勉強会でした。 自分なりに感じた良かった点、面白かった点は次のとおりです。 

  • 頭をフルに使って楽しい時間を過ごせた。
  • 設計に関する議論が盛り上がっててて面白かった。
  • みなさんのモチベーションが高く、自分の英語に対するモチベーションが高まった。
  • メソッド名の付け方について、自分なりに意見を述べて、議論に参加できた。
  • 議事録を担当することで、貢献できた。(記載レベルはさておき・・・)

集中しすぎて、肝心の勉強会の風景を撮りわすれてました。

昼食会のお弁当

懇親会

というわけで(?)、これを機会に英語学習に関して、自分がやってきてことを書いてみようと思います。

  • 英語耳
  • 瞬間英作文
  • 英単語ピーナツ
  • オンライン英会話
  • TOEIC公式問題集
  • iOS向け英単語アプリを自作してみる

詳細は別エントリーで。

あわせてよみたい

blog.jnito.com

gusto.taiyop.com

dany1468.hatenablog.com

k-koba.hatenablog.com