モンテッソーリ教育

子供が最近2歳になりましたが、現在保育園に通っています。その保育園はモンテッソーリ教育というのを取り入れていたので、妻が図書館で借りた本を読みつつちょっと勉強中です。大体の説明はwikipediaがいい感じでした。

子供がする作業を「おしごと」と呼び、「〇〇ちゃん、なんのおしごとする?」など普通に使っているようで印象的でした。

「敏感期」

モンテッソーリ教育のキーワードとして「敏感期」という言葉が出てきます。言葉や手遊び、自分のこだわり(秩序)などに敏感になる時期があり、それを大事にしてあげようということみたいです。

自分の子供でも、最近言葉の成長が著しいなーと思ったら、今度は言葉は一休みで走ったり階段を登ったり身体の使い方が急に上手になったりしたことがありました。子供ながらに自分でやりたいことを考えながら一生懸命に繰り返してぐんぐん成長していく姿を何度も感じました。

最近は秩序の敏感期みたいです。秩序といっても常識とか決まり事みたいなものではなく、自分のこだわりを大事にするようで、例えば歯を磨く時はまず自分で磨く→仕上げ磨きしてもらう→歯ブラシを洗面所で洗う→歯ブラシを戻す→うがいをする→コップを片付ける→手を洗う→手を拭く→踏み台をしまうという一連の流れを壊されたくないようで、自分が納得するまで先に進みません。

それを「早くして!」や「もう昨日もしたでしょ」、「もうわかったから!」などの言葉で親が片付け流れを壊してしまうのではなくて、できる範囲で見守って集中してやってもらって達成していくのがいいということでした。

子供の見方が変わりそう

子供があーしたい、こーしたいと主張しまくるのに対してうざったくなる時もあります。一緒に過ごす母親ならなおさらだと思います。ただ、一歩下がって子供を観察してみるとものすごく集中してやってたり、一緒にしながらこうしたらいいんじゃない?とか言うとするどい目で観察されて自分もできるようになろうとしているのがわかりました。これも成長の一歩なんだなと見れるとイラついたりすることも減って余裕を持って子供と接することができそうな気がします。

ただ駄々をこねると何でもいうことを聞いてくれると思われるのもなんかあまり良くない気もするので、その辺りの調整が難しいと感じています。子供の態度やその他知識を取り入れながら自分も勉強していかないとなと思う今日この頃でした。

郵便番号から住所を取得するgemを書いた(ローマ字あり)

郵便番号から住所を取得するgemを書きました。いろいろなgemを探してみたのですが、ローマ字に対応していなかったので、ローマ字表記にも対応しています。

github.com

使い方

address = JpZipCode.search '100-0001'
 
address.pref_code     # => 13
address.pref_kanji    # => 東京都
address.city_kanji    # => 千代田区
address.town_kanji    # => 千代田
address.pref_kana     # => トウキョウト
address.city_kana     # => チヨダク
address.town_kana     # => チヨダ
address.pref_roman    # => Tokyo-To
address.city_roman    # => Chiyoda-Ku
address.town_roman    # => Chiyoda
address.zip_code      # => 1000001
 
JpZipCode.search '1000001'  # ハイフンなしOK
JpZipCode.search 1000001    # 数値OK

郵便番号データはjsonで格納しています。情報が古くなってきて、更新したくなった場合に以下でjsonを更新できます。(ちょっと時間かかります)

JpZipCode.update

郵便番号データ参照元

郵便番号情報の参照元日本郵便です。以下のページからファイルを取得しています。

漢字、カタカナのデータ

読み仮名データの促音・拗音を小書きで表記するもの - zip圧縮形式 日本郵便

ローマ字のデータ

郵便番号データダウンロード 住所の郵便番号(ローマ字) zip形式 - 日本郵便

所感

30歳にして初めてgemを公開しました。自分が担当しているサービスでも使っていくつもりなので、しっかりメンテナンスしていこうと思います。

TravisCIのテスト結果とかCode Climateのバッチとかつけるのが楽しかったです。これからもいろいろ書いてくぞ!

Ruby、Rails周りのコードレビュー時に先輩に指摘された点メモ

Rails】Controllerに書く処理か、Modelに書く処理かを考えよう

この処理はModelに書くべきだ、Controllerに書くべきだという指摘が多かった。きちんとMVCの役割を捉えつつ、どこで処理するのが自然でわかりやすいかを考えよう。

RailsEnumを使おう

enum hoge: %i(foo bar baz)のように書けば、テーブルのhogeカラムの値(0, 1, 2)と対応しRails内ではfoo bar bazとして扱えるので数値を使うよりも意味合いを捉えやすい。この辺りが非常に参考になる。

いまさらながらRails4.1から導入されたEnumが便利なのでまとめてみた - Rails Webook

Ruby】コメントはやっていることではなく背景を書こう

ちょっとこれはRubyに特化したものではないが、コード内のコメントはやっていることではなくて、なぜその処理が必要なのかや根拠などを記載する方がよい。例えば、

# 完了に更新
State.complete!

と書いてもそれはコードを見ればわかることなので、

# ここで完了に更新することで○○画面で非表示になる
State.complete!

のようになぜこの処理をする必要があるのかなどを書くほうがよい。逆にそれ以外の場合はコメント書かなくて良いのでコード量を減らせる。

Ruby=は左辺に右辺を代入しつつ右辺の値が返る

irb(main):001:0> hoge = 1
=> 1

なので、

hoge = 1
if hoge
  puts hoge   # => 1
end

if hoge = 1
  puts hoge   # => 1
end

と書けるよということ。

Rails】Modelのscopeを活用しよう

Modelにscopeをで検索処理を書くとデフォルトで全レコードが返るので、条件が指定された時のみ絞るということができる。 参考:http://qiita.com/ishidamakot/items/7afa6630eee3f95513a6

scope :name_like, -> name {
  where('name like ?', "%#{name}%") if name.present?
}

RailsActiveRecord::Concernをつかうと便利

この辺り参考。

» ActiveSupport::Concern でハッピーなモジュールライフを送る TECHSCORE BLOG

ControllerやModelにActiveRecord::Concernを使ってメソッド定義をしておくとincludeすれば共通的に使えるので便利だったりする。