タグ

ブックマーク / techracho.bpsinc.jp (59)

  • Railsらしく書こう(社内勉強会)|TechRacho by BPS株式会社

    こんにちは、hachi8833です。 今回から趣向を変えて、弊社筆頭プログラマーのbabaさんによる社内講義録を元に記事を書きます。第一回は「Railsらしく書こう」です。 Railsらしく書こう 特にプログラミング経験の浅いうちは、コーディングに関するさまざまな慣習を知らないがために遠回りをしてしまうことがあります。この講義では、Rails (とRuby) の基的なコーディングルールについて説明します。 なお、この講義はRails3時代のものを元にしていますのでご了承ください。 基的なコーディングスタイル class CommentsController<ApplicationController def index() @comment=Comment.find ( params[:id] ) if(request.format==:xml) then render(:layout

    Railsらしく書こう(社内勉強会)|TechRacho by BPS株式会社
    taka222
    taka222 2013/12/19
  • Rails 4.0.2, 3.2.16リリース!重大なセキュリティFIXがあります|TechRacho by BPS株式会社

    昨日、Ruby on Railsの重要なセキュリティアップデートである、Rails 4.0.2と3.2.16がリリースされました。 このリリースには、5件(3.2.16には4件)のセキュリティFIXが含まれています。 重要度の高いものがあるため、早急なアップデートをしましょう。 CVE-2013-6416 simple_formatヘルパーのXSS脆弱性に関する修正です。 ※4.0.2のみ。3.2系では元から発生しないため、3.2.16には含まれません。 simple_formatはhtml_optionsとしてHashを渡せますが、デフォルトで、このclass指定がHTMLエスケープされていませんでした。 class指定をユーザ入力による場合、容易にXSSが成立してしまいます。 simple_format "hello\nworld", class: '"><script>alert(1

    Rails 4.0.2, 3.2.16リリース!重大なセキュリティFIXがあります|TechRacho by BPS株式会社
    taka222
    taka222 2013/12/06
  • 肥大化したActiveRecordモデルをリファクタリングする7つの方法(翻訳)

    更新情報: 2013/11/19: 初版公開 2021/01/08: 訳文見直し、追記 こんにちは、hachi8833です。今回は、自分が知りたかった、Active Recordモデルのリファクタリングに関する記事を翻訳いたしました。1年前の記事なのでRails 3が前提ですが、Rails 4以降でも基的には変わらないと思います。リンクは可能なものについては日語のものに置き換えています。 なお、ここでご紹介したオブジェクトは、app以下にそれぞれ以下のようにフォルダを追加してそこに配置します。 注記: 以下は使われそうなフォルダを列挙しただけであり、実際にはこの一部しか使いません。 Value Object Service Object Form Object Query Object View Object Policy Object Decorator ⚓ 肥大化したActive

    肥大化したActiveRecordモデルをリファクタリングする7つの方法(翻訳)
    taka222
    taka222 2013/11/20
  • Ruby on Rails 4.0.1リリース!大量のバグ修正、3系からの移行も少し簡単になりました|TechRacho by BPS株式会社

    2013.11.02 Ruby on Rails 4.0.1リリース!大量のバグ修正、3系からの移行も少し簡単になりました 日、Ruby on Rails 4.0の最初のアップデートである、Rails 4.0.1がリリースされました。 6月に4.0がリリースされてから約4ヶ月、かなり久しぶりのアップデートとなりますが、どのような変更が含まれているのでしょうか。 まとめ 量が多いので最初にまとめです。 今回のリリースは大量のdiffを含みますが、そのほとんどは細かいバグ修正です。 Railsのリリース時期的には3.2.13 → Rails 4.0.0 → 3.2.14 → 3.2.15 → Rails 4.0.1となるため、3.2.14以降で適用されていた細かい修正も取り込まれています。4系が3系にようやく追いつきました。 4系はなんかデグレっぽいバグや非互換が多いなーと思っていた箇所が、

    taka222
    taka222 2013/11/03
    ”Ruby on Rails 4.0.1リリース!大量のバグ修正、3系からの移行も少し簡単になりました | TechRacho”
  • よくある?Rails失敗談 default_scope編|TechRacho by BPS株式会社

    モデルからデータを取得する際に常に特定の検索条件を指定することができるdefault_scopeですが、 デメリットについてあまり注意を払わずに使ってしまって失敗しました。 サンプル事例 環境 * Rails 3.2.12, 4.0 * MySQL 5.1.65 ※ 実際に問題が起きたバージョンが3.2.12 なのでそちらが中心になっています。 データを「名前」「年齢」どちらか指定された値で並び替えるという処理があったので、 特に指定が無ければid順で取得するという条件をdefault_scope を使って追加しました。 class User < ActiveRecord::Base default_scope -> { order(:id) } end これで、モデルからデータを取得する際に必ずORDERが指定されるようになります。 User.all #=> SELECT "users"

    taka222
    taka222 2013/10/11
    ”よくある?Rails失敗談 default_scope編 | TechRacho”
  • Jenkinsで特定のプロジェクトだけ閲覧できるユーザを作成するには|TechRacho by BPS株式会社

    morimorihogeです.ちょっと前回から間の空いた投稿になってしまいました.今回はJenkinsの話. Jenkinsの概要 JenkinsはTDD,BDDなどを使い,自動テストでCI(Continuous Integration)を回していく際に使えるCIサーバです.同等の物としては,GithubにおけるTravis CIやGitLabにおけるGitLab CIなどが挙げられます,ちなみにJenkinsは昔はHudsonという名前でした. Jenkinsの特徴としては,歴史が長いので動作自体の安定性や導入実績が十分にあること(枯れている),WARコンテナにまとまっているのでインストールが割と楽,プラグインが豊富にあり,機能拡張がやりやすいことなどが挙げられます.Travis CIはGithub専用ですし,GitLab CIは導入実績の面でまだ試行錯誤が必要そうなことや,GitLab

    Jenkinsで特定のプロジェクトだけ閲覧できるユーザを作成するには|TechRacho by BPS株式会社
    taka222
    taka222 2013/09/14
    ”Jenkinsで特定のプロジェクトだけ閲覧できるユーザを作成するには | TechRacho”
  • [連載:正規表現] Unicode文字プロパティについて(1)|TechRacho by BPS株式会社

    はじめまして、hachi8833です。 正規表現において、使わないまま死ぬのはあまりにもったいない「Unicode文字プロパティ」について解説します。これについてネット上にまとまった情報がほとんどなく、しかたがないので自分で書くことにしました。書きながら早くも記事があふれてきたので、見出しに「連載」の文字を追加などしてみました。たぶん他所ではほとんど見かけることのない連載になると思います。よろしくお願いします。 通常の開発においては、目的を達成する正規表現を作成してコードが動けば事足りるものであり、コーディング中に正規表現と延々付き合うことは普通ないでしょう。料理人は包丁を研ぐのに時間をかけすぎないものです。しかし特殊な業界の特殊な人々(日に5人もいないと思います)は、来る日も来る日も正規表現を書き続けていたりするので、このUnicode文字プロパティは当にありがたいものです。私の場合

    [連載:正規表現] Unicode文字プロパティについて(1)|TechRacho by BPS株式会社
    taka222
    taka222 2013/09/14
    ”[連載:正規表現] Unicode文字プロパティについて(1) | TechRacho”
  • ActiveRecordの便利機能previous_changes|TechRacho by BPS株式会社

    ActiveRecordには便利なprevious_changesというメソッドがあります。 割と知名度が低いので、ここで使い方をご紹介します。 (08/26追記) はてブでご指摘(?)頂きましたが、正確にはActiveRecordではなくActiveModel::Dirtyの機能です。 まずはchanges previous_changesの前に基のchangesです。 これは、saveする前に変更されたattributeを調べる機能です。 まずはfindした直後です。changed?は当然falseになります。 User.create(name: "Taro") user = User.find(1) user.changed? # => false user.changed [] user.changes # => {} user.changed_attributes # => {

    taka222
    taka222 2013/08/26
    ”ActiveRecordの便利機能previous_changes | TechRacho”
  • FactoryGirlでtraitを使うとintegration test書くのが捗るという話|TechRacho by BPS株式会社

    注: factory_girlはfactory_botに改名されました。 おなじみfactory_girlがちょっと分かってきたので覚え書きがてらメモです. FactoryGirlって,あちこちで見る事例がシンプルすぎることが多くて手元のある程度複雑なデータ構造のFactoryをどうやって書くか,ピンと来ないことが多い気がします.要試行錯誤ですね. 前提Model この記事で使うModelの前提です.掲示板(Forum)があり,そこに対して記事(Post)を投稿するのですが,記事には商品(Product)が紐付いている,というものです. イメージとしては「おまえらのオススメガジェット教えろ」みたいなのがforumで,postには具体的なコメントと商品を選択して評価スコア(100点満点)と一緒に投稿できる,といったものになります. Rails4前提なので,attr_accessibleは書い

    FactoryGirlでtraitを使うとintegration test書くのが捗るという話|TechRacho by BPS株式会社
    taka222
    taka222 2013/08/24
    ”FactoryGirlでtraitを使うとintegration test書くのが捗るという話 | TechRacho”
  • Railsで検索を高速化するならこれで決まり!Sunspotで始めるSolr入門|TechRacho by BPS株式会社

    Railsで簡単に使える全文検索と言えば、Sunspotが人気です。 非常に使いやすくできていて、わずか数ステップで格的な全文検索を始めることができます。 バックエンドは信頼と実績のApache Solrなので、性能・信頼性・拡張性は折り紙付きです。 そんなSunspotですが、実際にサーバに設置してサービス運用に乗せるとなると、ローカルで試しに動かす分には必要なかったことも気にする必要がでてきます。 データのバックアップはどうすれば良いんだ? 公開したあとにインデックス張り直すときは? この1000行以上ある設定ファイルはいったい何なんだ? 最近は、Railsシステムの高速化・パフォーマンスチューニングをさせて頂くことも増えたので、Sunspot/Solrも小規模ながら活用できるようになってきました。 これを機に社内勉強会を開催したので、そのスライドをSlideShareにアップロード

    Railsで検索を高速化するならこれで決まり!Sunspotで始めるSolr入門|TechRacho by BPS株式会社
    taka222
    taka222 2013/08/22
    ”Railsで検索を高速化するならこれで決まり!Sunspotで始めるSolr入門 | TechRacho”
  • 最近知ったRailsの便利なメソッド

    最近になって知った Railsの便利なメソッドを紹介したいと思います。 pluck http://api.rubyonrails.org/classes/ActiveRecord/Calculations.html#method-i-pluck User.select(:id).where("age >= ?", 20).map(&:id) こんなコードが User.where("age >= ?", 20).pluck(:id) こうなります Rails3系では指定できるカラムはひとつだけでしたが、Rails4から複数カラムを指定できるようになりました。 User.where("age >= ?", 20).pluck(:id, :name) #=> [[1, '太郎'], [2, '花子'], [3, '二郎']] Rails3系でもmultipluck というgemを使えば同じことが

    最近知ったRailsの便利なメソッド
    taka222
    taka222 2013/08/19
    ”最近知ったRailsの便利なメソッド | TechRacho”
  • [Rails 4.0] 巨大なテーブルやserializeを使うときのActiveRecordオーバーヘッドを測定してみた|TechRacho by BPS株式会社

    2013.08.12 [Rails 4.0] 巨大なテーブルやserializeを使うときのActiveRecordオーバーヘッドを測定してみた Railsは遅い!とよく言われますが、高速化ポイントのうち最有力候補の1つがDB/モデル周りです。 N+1問題を修正するだけでも、体感できるレベルの高速化が期待できます。 しかし、RubyKaigiでCookPadの方も言っていたように、RDBMSSQLを実行する時間だけでなく、ActiveRecordオブジェクトの処理は非常に重いです。 モデル周りの最適化と聞いて、一生懸命SQLをEXPLAINするのも大事ですが、ログに出力される「Prefecture Load (0.5ms)」のような数値にはActiveRecordオブジェクト部分のオーバーヘッドが含まれていないため、全体でどの部分が遅いのかを理解しないと徒労に終わってしまう可能性がありま

    [Rails 4.0] 巨大なテーブルやserializeを使うときのActiveRecordオーバーヘッドを測定してみた|TechRacho by BPS株式会社
    taka222
    taka222 2013/08/12
    ”[Rails 4.0] 巨大なテーブルやserializeを使うときのActiveRecordオーバーヘッドを測定してみた | TechRacho”
  • ちょっとずつやるchef|TechRacho by BPS株式会社

    記事の内容へのお問い合せはTwitterで@techrachoへMentionまたはDMにてご連絡頂くか、運営会社であるBPS株式会社のお問い合せフォームよりお問い合せ下さい。

    ちょっとずつやるchef|TechRacho by BPS株式会社
    taka222
    taka222 2013/08/09
    ”ちょっとずつやるchef | TechRacho”
  • Railsでフォームオブジェクトを使った検索を簡単に実装する方法|TechRacho by BPS株式会社

    RailsでFat ControllerになったらForm Classを作れ,という記事はあちこちで見るのですが,今一つ参考になるような実装があまり見つからなかったので記事にしてみました. Rails 3.2.13,Ruby 2.0.0系で動作確認済みです. Fat Controller問題 Railsで特に何も考えずに検索機能を作っていると,検索ロジックでcontrollerが膨らんできてしまうと思います(Fat Controller問題). 例えば,検索フォームの内容として最初は名前だけで検索するとのことで, HogeController < ApplicationController def index @hoges = Hoge.where("name LIKE ?", "%#{params[:name]}%") end end と書いていたのが,そのうちメールアドレスや住所でも絞

    Railsでフォームオブジェクトを使った検索を簡単に実装する方法|TechRacho by BPS株式会社
    taka222
    taka222 2013/07/27
  • Rails 3.2.14がリリースされました|TechRacho by BPS株式会社

    日、Ruby on Rails 3.2.14がリリースされました。 3.2.14は数々のバグフィックスが含まれたバージョンになります。大きなセキュリティフィックスは含まれていませんが、早めのアップデートを検討すると良いと思います。 なお3.2系は、次のリリース(3.2.15)が最後のバグフィックスになります。3.2.16以降はセキュリティパッチしか提供されない予定なので注意しましょう。 変更点 3.2.14には約40のバグフィックスが含まれていますが、いくつか見てみます。 routing routes.rbにおいて、scopeでcontroller/actionを指定すれば、その内部のgetなどに反映されるようになりました。以下のような記述が可能になります。 # config/routes.rb # ... scope '/job', :controller => 'job' do sc

    taka222
    taka222 2013/07/24
  • 【初心者向け】RubyでW3CのHTML validation serviceを利用するプログラムを作ってみた|TechRacho by BPS株式会社

    2013.07.19 【初心者向け】RubyでW3CのHTML validation serviceを利用するプログラムを作ってみた 今回は軽めのネタです.初心者向けに書いてみました.Rubyやプログラミング初心者の人には,これからコードを書く時の手順の参考になるかと思います. 前提条件を明らかにして,問題と要求事項を定義し,その解決手法を選択し,最後にコードに落とす,という流れになっています. 前提 週に一度,大学の情報系授業の中でHTMLを教える機会があります.内容としては完全に入門レベルなので技術的に高いところまでは踏み込みません.プログラミングやテキストエディタを使ったことの無い学生への取っかかりといった位置づけの授業です. 「コード書く->エラーチェックする->エラーメッセージ見てエラーがあれば修正する->エラーチェックする->(以下略」の手順を身をもって体験してもらうために,僕

    【初心者向け】RubyでW3CのHTML validation serviceを利用するプログラムを作ってみた|TechRacho by BPS株式会社
    taka222
    taka222 2013/07/20
  • Rails3アプリケーション開発で良く使うgemまとめ|TechRacho by BPS株式会社

    Rails4がリリースされてしばらく経ちましたが,一部のgemが対応に追いついていないこともあり,まだ番系のシステムに適用するのは様子見かなというところです.社内システムや個人的に遊ぶアプリで予行練習中. というわけで,まだもうしばらくはRails3のお世話になりそうなので,Rails3の総まとめというわけではないですが,良く使うgemをまとめてみました.社内のチームMTGでの発表資料をSlideShareにアップロードしてあります. 既にRails開発に慣れた人にとってはおなじみのgemが多いと思いますが,これからRailsでの開発を始める人にとってはそれなりに有用かと思います. また,弊社では数多くのRailsアプリケーションをcapistranoでdeployしている実績がありますので,deploy関連のgem等も参考になればどうぞ. ================以下追記(20

    Rails3アプリケーション開発で良く使うgemまとめ|TechRacho by BPS株式会社
    taka222
    taka222 2013/07/12
  • Rails3でhttpsからhttpへのリダイレクトを行う方法|TechRacho by BPS株式会社

    ここ最近記事書くのをサボってました.すみません.今回はSSL redirectの話. Rails 3.1以降ではforce_sslを使うことで,サイト全体や特定のactionについて,SSLを強制することができます. しかし,force_sslではHTTP -> HTTPSへのリダイレクトはできるのですが,その逆のHTTPS -> HTTPへのリダイレクトをサポートしていません. つまり,force_sslを使った場合,一度httpsのURLに入ってしまった後に相対パスでリンクを遷移すると,httpアクセスで構わないページもhttpsでアクセスしてしまうことになります. 場合によってはHTTPSでアクセスする必要の無いページはできるだけHTTPでアクセスしてほしい,というケースがあるので,今回はそういったことを実現しようぜ,という話です. このような処理が必要とされるケースとしては以下のも

    Rails3でhttpsからhttpへのリダイレクトを行う方法|TechRacho by BPS株式会社
    taka222
    taka222 2013/07/11
  • Railsで発行されたSQLを監視する|TechRacho by BPS株式会社

    操作ログや簡易的なパフォーマンス測定などの目的で、特定アクションで実行されたSQLを監視したいことがあります。 filterやviewで実行された分を含まず、単純に指定ブロックの中を監視するなら、以下のような方法で簡単に実現可能です。 # application_controllerにでも定義しておく def watch_queries events = [] callback = -> name,start,finish,id,payload { events << payload[:sql] } ActiveSupport::Notifications.subscribed(callback, "sql.active_record") do yield end events end 使い方はこんな感じ def update @user = User.find(params[:id])

    taka222
    taka222 2013/07/11