ボクココ

サービス開発を成功させるまでの歩み

Ruby

Rails コントローラ内の define_method 活用例

ども、@kimihom です。 今日はちょっとした Rails の小ネタ。Ruby にはご存知の通りメタプログラミングというトリッキーな開発方法があって、これが良いだ悪いだの議論が絶えないわけだけども、ちょっとしたことで便利に使える時がある。 今回紹介する defin…

ライブラリの利用を減らしていくことの重要性

ども、@kimihom です。 最近の運用フェーズでの開発で意識していることの一つ、「Gem ライブラリの利用を減らす」ことについて思うことを書く。 記事の内容は Ruby 周りに最適化されているけど、他の言語でも同様のことが言えると思うので適宜置き換えて読ん…

Ruby のバージョンを上げてGuard が動かなくなった時の対応

ども、@kimihom です。 Ruby で開発しているのであれば常に新しいバージョンで開発を続けたいもの。その中で今回は guard が動かなくなったのでその対応メモ。 Ruby 2.3.3 guard 2.14.1 エラー内容 こんなエラーが出て開発できなかった。 $ bundle exec guar…

独学での Web プログラミング学習まとめ

ども、@kimihom です。 自分で何かサービスを出したいという方は多いかと思う。今回はそんな方へ最低限知らなければならないリストを上げようと思う。ターゲットとしては Web アプリケーションということにしたい。 UNIX コマンド 最初は黒い画面に慣れる必…

Ruby の メソッドについての解釈 (中級者向け)

本ブログはプログラミング中級者向けのトピックを扱う。 今回はRuby のメソッドについて。インスタンスメソッドやクラスメソッドなどがあるが、プログラミング始めの段階では、基本的にクラスからインスタンス化したのから呼べるのがインスタンスメソッド、…

ブラックリストワードをフィルタリングする Obscenity

今日は便利なGemを紹介。 掲示板システムをアプリとかで運用していると、NGワード連発な方々がどうしても出てきてしまう。そのため彼らの投稿は拒否したり特殊文字で置き換えたりする必要がある。 そんな時に便利な Gem が tjackiw/obscenity · GitHubだ。 G…

Effective Ruby を読んで

以前から気になっていた "Effective Ruby" を読んだ。 Effective シリーズは中級〜上級向けプログラマーの読むべき本として親しまれている。 個人的にもっとも得意な言語はRubyだったので、このシリーズが出るのを楽しみにしていた("得意な"と変換しようとし…

Spree 最新版の日本語国際化ファイルを更新した

さて、前回の記事で CMS とかランディングページは Jekyll で作成できるようになった。次はECサイトもパパッと作れるようになっちゃう。 ECサイトのOSS ECサイトを自作するのに、EC-CUBE や Spree を利用することが多いかと思う。 www.ec-cube.net Ecommerce…

Jekyll と Github Pages で CMS を構築する

Jekyll の特徴 近頃、 Jekyll という静的サイトジェネレータを利用し始めている。言わばWordPressのようなCMSのような使い方が可能だが、それらとは全く違う点が データベースやプログラムを利用しない というところがある。記事とかは全て静的サイトとして…

SPIKE API にアクセスする gem を作りました

最近出たSPIKE API をRubyでアクセスするgemを作りました。SPIKE で決済APIの機能を提供してくれたお礼とでも言いましょうか。 Github にソースを上げたので、ご自由にお使いください。今後 SPIKE API に機能追加されていった際のプルリクエスト等大歓迎です…

アプリエンジニアがインフラに挑戦その4

どーも。 ホストOS側のChef環境がそろったので、いよいよゲストOS(Virtual Machine) に Rails 環境をインストールしていきます。今回は一つのゲストOS にRailsとMongoDB, Nginx 全て入れていきます。 今回のChef Recipes は Github においてますので適宜参照…

パーフェクト Ruby を読んで

この本が新しく出てます。 僕のスペックとしては、 Ruby 歴4年 もはや Rails ばかり メタプログラミング Ruby 読んでRubyのコアはそこそこ理解 こんなもんです。 で、実際読んでみたら、最初はものすごいハイスピードで言語仕様だけをさらっと紹介している(…

コードを記述するコード

引き続き「メタプログラミングRuby」の学習継続。 最近はクイズを答えを見ないで自分で書いた後に比較するようにしている。何気全く同じコードがかけていたときはかなりうれしいw今日はクラス拡張ミックスインについて。 クラスの中でモジュールをインクル…

Win32OLE が素晴らしい

WindowsのアプリをRubyで自動で動かしちゃおう、というもの。 VBAみたいなよくわからない言語を使うより、使いなれたRubyでラップしてくれたものを使ってみましょう。RubyでやればWindowsオートメーションも楽しくなること間違いなし。Memo:require 'win32ol…

オレオレ attr_accessor

なんとなーく クラスマクロを理解したので、その代表格であるattr_accessor を自分で実装してみた。 1 class MyClass 2 p self # -> MyClass 3 def self.my_accessor name 4 p self #-> MyClass 5 define_method "#{name}=" do |v| 6 p self #-> # 7 @name =…

instance_eval と class_eval

にしても難解なRuby。これを理解するのに本を何度も読み直さないとわからない。 自分なりのメモなので間違っているかもしれませんがその時は指摘してくれるとうれしいです。instance_eval obj.instance_eval do #そのオブジェクトのクラス定義のコンテキスト…

呼び出し可能オブジェクト

なんかの処理をまとめるとき、通常はdef を使いますね。 ですがdef はdefの外側にある変数を読み込めません。(スコープ) なのでlambda を使ってオブジェクト上のコンテキストで読み込めるようにするのです。 1 b = 1 2 def add a 3 puts a + b 4 end 5 6 a…

スコープとクラスメソッドの疑問

メタプログラミングRubyでフラットスコープについて学んだ。 でもこれから一つの疑問が生じた。 1 my_var = 1 2 puts "myvar:#{my_var} was called at the top level" 3 4 MyClass = Class.new do 5 my_var += 1 6 puts "myvar:#{my_var} was called at the …

Ruby method_missing

引き続き前回の続き。。前回のと同様に method_missing を実現するとどうなるだろう? 45 class Hoge3 46 def method_missing(name, *args) 47 if name =~ /hoge/ 48 p "#{name} was called..." 49 p "Whohooo!" 50 else 51 super 52 end 53 end 54 end 55 5…

Ruby 動的ディスパッチ

今日は基礎に戻ってRubyの学習。動的ディスパッチに関してメモ。動的ディスパッチ実行時に呼ぶメソッドを柔軟に変えたいときとかに send() を使う。 これが中々面白いのでいろいろ実験してた。 Test:Unitとか基本的にはメソッド名の先頭にtest_ をつけている…