塩焼きブログ

塩焼きに関しての研究内容を公開しています

2014-12-16から1日間の記事一覧

はてなブログのEntry limit was exceeded

Atom Publishing Protocolを利用してはてなブログへの記事の投稿や編集が行える。Rubyで自作CMS内に眠っていたブログ記事をすべて取り出した上で、いい感じにMarkdown記法に変換してはてなブログへインポートしていたところエラーとなり記事が投稿できなくな…

Railsの共通処理を実行するbefore_action

before_actionを使えばアクションで共通処理を実行することができる。さらにonryで一部アクションのみに限定して実行したり、複数のbefore_actionを定義することもできる。 class PostsController < ApplicationController before_action :action_method bef…

ページや本をめくるアニメーションを表現するBookBlockの使い方

BookBlock: A Content Flip Plugin BookBlockはページや本をめくるアニメーションを実装できるjQueryプラグインである。すぐに確認できるデモページがあるので参照されたし。 BookBlock: A Content Flip Plugin - Demo 1 使い方だが、まず必要最小限のファイ…

Googleストリートビューの違法性について

Googleストリートビューの違法性や訴訟問題について調査した。極めて難しい問題のため、ここでは違法か否かについては断定せず、過去の事例や各個人の意見をまとめておく。 下着がストリートビューに掲載された事案 Googleの「ストリートビュー」上で公開さ…

Rails routes.rbのresourcesについて

Railsのroutes.rbで使えるresourcesは自動でレコードの一覧・表示・作成・更新・削除のルーティングを生成してくれる。get, post, patch, destroyを自分で書いて一つずつ手動で設定しても良いが、Railsの提供するルーティングをなるべく採用したい。 # route…

Railsで入力時のみバリデーションを実行する

Railsで空白を許可するが、入力するなら文字制限やフォーマットのチェックを行いたい場合はallow_blank: trueで空白を許可する。例では:nameは必須だが、:bodyは未入力でも通過する。しかし:bodyを入力するときは8文字以上でなければいけない。 class Profil…

Railsのbefore_saveでSave時に保存するデータに変更を加える

RailsでSave時に保存するデータに変更を加えるにはbefore_saveを使う。例ではバリデーションを通過してきたデータを保存前にハッシュに変換している。 class Example < ActiveRecord::Base before_save :before_hash def before_hash self.hash = Digest::MD…

新規ドメインがGoogleへインデックスされるまでの過程 (2014年9月調査時)

新規ニュースサイトのGoogleへのページインデックスの過程。9月18日より調査を開始した。 昔は新規サイト公開後すぐにでも検索結果上位に表示される時代があったが、現在は昔よりも時間がかかっているように感じる。 1日目の作業 サイト公開後ウェブマスター…

Ruby メソッドのアクセス制限

public, private, protectedの3つがあり、通常のメソッドはデフォルトでpublicになり、initialize()メソッドは常にprivateになる。 publicとは普通にインスタンスメソッドとして使えるが、privateはレシーバを省略するようになるため外部から呼び出せない。p…

Rubyのクラス変数

クラス変数はインスタンスメソッドやクラスメソッドからアクセスできる class Message @@timezone = "Europe/London" def initialize(name) ENV['TZ'] = @@timezone @name = name end def hello "Hello #{@name} " + Time.now.to_s end end msg = Message.ne…

Rubyのクラス定数

Timezone = "Europe/London"のようにclass文の中で定義し、クラス内で自由に参照できる。例ではインスタンス変数から参照している。 require "Time" class Message Timezone = "Europe/London" def initialize(name) ENV['TZ'] = Timezone @name = name end …

Rubyのクラスメソッドを自作する

class << ClassNameでクラス自身をレシーバとしたクラスメソッドを作成することができる。 例はクラス定義の中でクラスメソッドを追加している。クラスメソッドがselfで呼ぶものは同様のクラスメソッドとなる。 class Message class << self def hello_puts(…

Rubyのselfでインスタンスメソッドから別のインスタンスメソッドを呼ぶ

Rubyのselfという変数を使えば現在のレシーバ自身を参照できるので、インスタンスメソッドから別のインスタンスメソッドを作成できる。 class Message def initialize(name) @name = name end def hello_puts puts self.hello_message end def hello_message…

Rubyのインスタンス変数とattr_accessor

Rubyのクラスの通常の変数はローカル変数といい、特定のメソッド内でしか利用できないが、@をつけるとインスタンス変数となり、メソッドをまたいで参照・代入ができる。 class Message def initialize(name) @name = name end def hello puts "Hello #{@name…

Rubyでオブジェクトを生成した時に実行されるinitializeについて

他の言語でのコンストラクタに相当するinitializeは、newによってオブジェクトを生成する時に実行される。 class Message def initialize @name = "Tom" end def hello puts "Hello #{@name}" end end msg = Message.new msg.hello # Hello Tom initializeで…

Rubyのオブジェクトのクラスを調べる

Rubyのオブジェクトのクラスを調べるにはclassを利用する num = 10 p num.class # Fixnum kind_of?とinstance_of?を使えば真偽値を取得できる。kind_of?はサブクラスまで調査し、instance_of?はサブクラスを調査しない。 num = 10 p num.kind_of?(Fixnum) p …

Rubyのメソッドの引数にハッシュを渡す

Rubyの引数にハッシュを渡す時{}を省略することができる def profile(hash) p hash end hash = {a: 1, b: 2, c: 3} profile(hash) # {:a=>1, :b=>2, :c=>3} profile({a: 1, b: 2, c: 3}) # {:a=>1, :b=>2, :c=>3} profile(a: 1, b: 2, c: 3) # {:a=>1, :b=>2…

Rubyのメソッドの引数を配列でまとめて渡す

配列に*を付けてmethod(*arr)と渡すことで引数に値が展開される。配列の要素数は引数と同じ数にする。 def profile(name, birthday, favorite_food) puts "name => #{name}" puts "birthday => #{birthday}" puts "favorite_food => #{favorite_food}" end p…

Rubyの自己代入で未定義の変数に値を代入する

未定義の変数は下記のようにエラーが発生する p num example.rb:1:in `<main>': undefined local variable or method `num' for main:Object (NameError) Rubyの自己代入||=を使えば未定義の変数に値を代入できる num ||= 1 p num # 1 既に値が代入されていれば1は</main>…

Rubyでdefined?を利用し変数の存在を確認したり式の種別を確認する

Rubyで変数の存在を確認する時にdefined?を使う。変数が定義されていなければnilが返り、定義されていれば変数の種別が取得できる。 p defined? hello # nil hello = "Tom" p defined? hello # "local-variable" 未定義の変数に値を代入したいのであれば自己…

Rubyで定義したメソッドをundefで削除する

undefを使えば定義した関数的メソッドを削除する def hello(name) "Hello " + name end undef hello puts hello("Tom") # example.rb:7:in `<main>': undefined method `hello' for main:Object (NoMethodError) 何らかの処理の流れでメソッドを再定義したい時など</main>…

Rubyの自作メソッドで引数の位置を限定しないキーワード引数

Rubyではキーワード引数というものがある。Ruby 2.0以降から使えるようになったそうなので、もしこれを使ったメソッドを作成する時は本番環境がRuby >= 2.0であるかを確認する。 キーワード引数は通常の引数と違って順番が自由になる。引数が複数あり、全て…

Rubyで引数をいくつも受け取れるメソッドを自作する

Rubyのメソッド定義の引数部分で*argsのようにすることで、その引数は複数受け取れるようになる。例のように*argsの前後に引数を入れる事もできる。 def hello(msg, *names, num) num.times do puts msg + " " + names.join(" and ") end end hello("good-by…

Rubyのyieldでブロック付きメソッドを自作する

Rubyのyieldを使えばarr.eachのようなブロック付きメソッドを自作することができる def hello 5.times do print "Hello " yield end end hello do puts "Tom" end # Hello Tom # Hello Tom # Hello Tom # Hello Tom # Hello Tom yieldの部分で渡されたブロッ…

Rubyのreturnについて

Rubyではreturnを省略することができる。これによってRubyではreturnを省略することが多い。 def hello(name) "Hello " + name end puts hello("Tom") # Hello Tom returnを省略すると一番最後に得られる値が戻り値となる def hello(name) "Hello return" "H…

Rubyのクラスメソッド・インスタンスメソッド・関数的メソッドについて

レシーバーがインスタンスではなくクラスであればクラスメソッドと呼ぶ。例ではTimeがクラスであり、nowがクラスメソッドに該当する。 puts Time.now.to_s 自作したものを例とするとhello_messageがクラスメソッドに該当する。 class Message class << self …

Rubyのjoinで配列を連結する

Rubyで配列を連結するにはjoinを使う arr = ["This", "is", "a", "pen"] puts arr.join(" ") # This is a pen

Rubyのループを制御するbreak, next, redo

ループの中で条件に一致する時、そのループを再度やり直したい場合はredoを使う。例では合計が6になった時、ループをやり直しているためloop 3が2回出力されている。 sum = 0 for i in 1..5 puts "loop #{i} => #{sum += i}" if sum == 6 redo end end # loo…

Rubyで多数の条件分岐をcaseで行う

Rubyにはifやunless以外にも条件分岐を行えるcaseというのが存在する。elsifで条件を追加していっても同様の処理を行えるが、コードによってはcaseを使った方が分かりやすく記述することができる。 students = { "Mike" => 5, "Jane" => 4, "Tom" => 3, "Emi…

Rubyのnil?とempty?

Rubyにはnil?というメソッドがある。これは変数がnilであるのかを調べることができる。 p example.nil? # example.rb:1:in `<main>': undefined local variable or method `example' for main:Object (NameError) example = 0 p example.nil? # false example = 1 </main>…