ボクココ

個人開発に関するテックブログ

Ruby on Rails

Rails の content_for のつかいどき

ども、@kimihom です。 今回は Rails の ActionView における、content_for について。まずは簡単な使い方からおさらいしよう。 content_for の使い方 例えば、 app/views/layouts/application.html.erb がこんな作りになっていたとする。 <html> <head> <title><%= page_title</title></head></html>…

Rails で グラフ描画なら、 Chartkick を利用すべし

ども、@kimihomです。 今回は Rails でグラフの描画について。 大抵、グラフを描画するとなると、サーバーからデータをViewに渡して、そこからJavaScriptでデータをどんどん投入してようやく描画、という長いプロセスを踏む必要がある。Rails 側でデータをし…

ActiveRecordにおけるScopeのつかいどき

今回は ActiveRecord の機能の紹介。 読者の方で以下のようなRailsコードを書いたことがないだろうか? class ArticleController < ActionController::Base before_action :fetch_article, only: [:show, :edit, :update, :destroy] def ... end private def…

Heroku x Rails 使うならオススメの環境構築方法

普通にRails扱うのと、Herokuにあげる用のRailsを扱うのとではやはり構造とかを多少変える必要がある。 以下のやり方は、厳密に言えば「できる限り本番と同じ環境にした方が良い」というやり方とは違うため、この方法をするのであれば、必ずHerokuにstaging…

私のRails と jQuery のフロントエンド開発指針

Railsでの基本的な開発スタイルといえば、ページはリンクとフォーム送信、そしてリダイレクトの基本構成だろう。確かにこれでWebアプリケーションを作ることができる。 ただ今回はよりリッチなWebアプリケーション、具体的にはAjaxを駆使した開発について、R…

Sass をより効率よく使うための機能4つ厳選

Sass といえば Rails でデフォルトで搭載されている, CSSを描きやすくするためのライブラリだ。「CSSをネスト構造で記述できる」というだけでSassの80%以上使いこなしていると言えるのだと思っているけど、残りの数%について、特に便利なものを調べたのでま…

自動電話応答サービスを作ってリリースした話

自動電話応答(IVR) を誰でも簡単に作れるサービスを目指してコールコネクトをリリースした。 CallConnect(コールコネクト)www.callconnect.jp 自動電話応答(IVR)とは 自動電話応答(IVR)とは、例えばどこかの企業に電話をかけた時、「お電話ありがとうござい…

Rails Guide で参考になった記事のまとめ

Rails Guideは常に最新のドキュメントがまとめられているため、たまにページに行くと、有益な情報が転がっていることが多々ある。 ちょっと理解が怪しい部分や、開発中によく迷う部分とかをたまに読んでみると、新しい発見があって、成長した気になれる。 今…

共通レイアウトで複数 yield を使う

Rails ネタ。 結論 layout の yield 以外で同様の yield を使いたい場合は content_forを使おう。 解説 app/views/layouts/application.html.erb は共通のレイアウトを定義するデフォルトのレイアウトファイルだ。そこには必ず <%= yield %> が入っていて、…

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

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

Rails での Model.find(params[:id]) の恐怖

認証ありの Rails アプリケーションでのよくある話。 例えばこんなコードがあるとしよう。現在のユーザーの記事一覧を取得するコードだ。 class ArticlesController < ActionController::Base before_action :authenticate_user! def show @article = Articl…

Rails アプリ開発中のDB内容確認における注意点

これは原因がわかりにくいのでメモ。 問題概要 DBの値を更新したはずなのに、 rails console でその変更が確認できない 問題詳細 rails console はご存知 irb で 各 Rails のモデル操作のテストができる優れもの。よく使う方は多いと思う。今回は別ウィンド…

テストコードとプログラミング能力

テストを書くべきだ、と人は言う。テストを書けば大きな変更にも柔軟に対応することができるそうだ。 テストをほとんど書いてなかったかつての自分にとってそれはよくわからないものだった。テストを動かすまでの手間や書いたとしてもテストを通すようにする…

DB の state は State Machine で管理する

最近は毎日プログラミングの日々を過ごしている。 そんな中、とあるテーブル(ドキュメント)で状態を管理しなきゃいけない場面があった。 この問題の一つの手としてはstate をint で保存し、一つ一つの数字を何かしらの状態に紐づけるやり方だ。これを実践し…

Rails の bundler でなぜ --path vendor/bundle を付けるのか

今までずっと謎だった。 bundle install これだけでいいじゃないか、なんでわざわざ --path を付ける必要があるのか、と。 何が嬉しいか gem をいじっても他のRailsアプリを汚さない ctagによる検索が可能になる ctagの存在を知らなかった。。今まで自分をvi…

Doorkeeper を使ったRailsのテストをRequest Spec で作る

今回はちょいとマニアック。 問題 APIのテストはController Specではなく、Request Specに書くべきなのだが、DoorkeeperのサンプルコードはController Specで書かれている。こんな感じのコード describe Api::V1::ProfilesController do describe 'GET #inde…

ユーザ登録・API 認証の仕組みを Rails で実現する

スマホアプリから会員の新規登録、ログインが両方できるようにAPIを作成中。ようやく自前でアクセストークンを作ってOAuth認証が出来たのでまとめておく。 まず何がしたいか? スマホアプリでAPI認証ができるように、OAuthを自前で作成したい。 -> スマホア…

アプリエンジニアがインフラに挑戦その5 最終会

どもー。 いよいよ最終回です。 Chef によりRails アプリをデプロイできる環境が整ったので、いよいよCapistrano でクールなRails アプリをデプロイします。 今回はDBにMongoDBを利用しているので、Rails側で rake db:migrateなどをする必要がない点は他の一…

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

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

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

どーも。 普段は Rails アプリをメインに、 AngularJS などのフロントエンドばかりやっている人間が、デプロイについて学んだのでまとめます。 対象読者: アプリしか書いたことなくて、本番公開などやったこと無い人。今までHerokuで本番公開してきたけど、…

Rails の認証で Devise ではなく Sorcery という選択

現在 AngularJS と Ruby on Rails 間の認証の仕組みを実装しようとしている。 この際問題になるのは、デフォルトのRails認証の仕組みは、HTMLベースであるため AngularJS で必要とされる JSON でのレスポンスが受け取れない、という点がある。 もちろん、Dev…

Devise を JSON API 化する

DeviseをAPI経由で叩きたい。 そのためにはフォームじゃなくて全部Ajaxで通信するので、各アクションで何のパラメータが必要かをまずまとめた。AngularJSを使い出すと、そうせざるを得ないので、ちょっとレールから外れるかな。 Prefix Verb URI Pattern Con…

Ruby ソースリーディング -attr_accessor の罠-

今、Doorkeeper のソースを読んでOAuth の仕組みの勉強をしている。 その中で、途中いきなりローカル変数っぽいのが登場して、これがどこから呼ばれてるのかわからなくなるときがある。 メソッド内で登場するローカル変数っぽいのを見つけた場合、以下の3つ…

理想的な Rails, AngularJS 環境の構築

ネットでRails x AngularJSで調べると、AssetsにAngularJSを追加してやるのが普通的なことをよく見る。でも、この方法だとYeomanや、Grunt.jsが使えず、Rails x AngularJSでKarmaでテストを書いたりといったことができないし、AngularJSの作法にのっとった開…

AngularJSでRouteProviderを無視して特定ページにアクセスさせる方法

やりたかったこととしては、自分のRailsアプリ内の "/auth/twitter" へアクセスさせたい、というだけのこと。HTMLに <a ref="/auth/twitter" target="_self">と、 target="_self" するだけでした。 解決するのにめっちゃ時間かかった。 まだまだだなぁ</a>

Rails Spork x FactoryGirl でデータを初期化するには

RSpec高速化の為にSporkを使っているとデータがどんどんたまっていって、テストが通らなくて困ってた。database_cleanerというGemを使うとテスト開始時にテスト用DBの中身を空にして実行してくれるらしい。Gemfile gem 'database_cleaner'$ bundle installsp…

Rails x MongoDB x RSpec にしたときのScaffoldで作られるファイルたち

$ rails g scaffold article subject:string body:text invoke mongo_mapper create app/models/article.rb invoke rspec create spec/models/article_spec.rb invoke factory_girl create spec/factories/articles.rb route resources :articles invoke sca…

node入れたせいでyumが動かなくなったとき対処

Rails3.1からはNode.js入れないと動かないのよね。。問題CentOS使ってNode.jsを入れた後にyumでパッケージ入れようとしたらこんなエラーが出た。 Loaded plugins: fastestmirror, priorities Loading mirror speeds from cached hostfile Could not retrieve…

Rails x MongoDB x jQuery x CoffeeScript x RSpec x Autotest な環境構築

Railsといえばこのコンボではないだろうか?とはいえそれぞれ何ナノ?って方の為に簡単に解説。Ruby on Rails言わずと知れたWebアプリケーションフレームワークの一つ。Rubyの柔軟性を存分に活かしたその作りは開発者の無駄なコードを書く時間を最小限にとど…