タグ

ブックマーク / blog.mah-lab.com (15)

  • インスタンスメソッドとクラスメソッドはどのようにして使い分けるべきか?(Rubyの場合) | mah365

    Rubyといったオブジェクト指向言語を学ぶと、メソッドの定義方法としてインスタンスメソッドとクラスメソッドという2通りの定義方法があることを学ぶと思います。しかし、言語自体のガイドブックには「定義方法にインスタンスメソッドとクラスメソッドがある」と書いてあるだけで、大抵その使い分けについては書かれていません。 そういう訳で、このエントリではその使い分けについて少し考えてみたいと思います。理論的に厳密な使い分けを目指すというよりは、そもそも使い分けの検討が全くつかない!という方に向けて、その指針の一助となることを目指します。 インスタンスメソッドとクラスメソッドとはそもそものところ、Rubyといった「オブジェクト指向の考え方」を実装した言語の機能です。その機能がなぜあるのか?というそもそものところは、オブジェクト指向の考え方にさかのぼることになります。 そこで、インスタンスメソッドとクラスメ

    インスタンスメソッドとクラスメソッドはどのようにして使い分けるべきか?(Rubyの場合) | mah365
    peketamin
    peketamin 2017/07/07
  • JMeter使うのだるいなーと思ってたらruby-jmeterというRubyでテストプランを書けるツールがあった | mah365

    JMeter使うのだるいなーと思ってたらruby-jmeterというRubyでテストプランを書けるツールがあった。知らなかった(迫真)。 典型的なRailsアプリのテストプラン そういう訳で典型的なRailsアプリのテストプランを書いてみたのがこちら。 ユーザーログインページでCSRFトークンを取得し、常にHTTPヘッダにつけるようにする ユーザーログイン情報をクッキーに保存 といった典型的な処理を盛り込んでいます。あとはREADME.mdを読んでもらえれば大体の書き方が把握できるかと思います。 ちなみに、# Debugというコメントの下2行をコメントアウトしてもらうと、JMeter上でデバッグ用の出力を表示することができます。テストプランが上手く動かないときに、リクエストヘッダやレスポンスを確認するのに便利です。 で、これをコマンドラインで ruby sample.jmx.rb && j

    JMeter使うのだるいなーと思ってたらruby-jmeterというRubyでテストプランを書けるツールがあった | mah365
  • 人のコードを引き継ぐときに一番困るのは「使われていないコード」 | mah365

    プログラミングを生業としていると、人のコードを引き継いで開発するなんてこともままある訳ですが、そういうときに一番困るのは「使われていないコード」だなー、としみじみ感じます。 使われていないコードがもたらす弊害 特に動的言語で書かれたコードというのは前触れ無く呼び出される可能性があるため、当に利用されていないのかどうなのか、きっちりと調べあげるのは困難なケースがあります。例えばrubyであれば、method_missingでキャッチしてsendで動的に処理先を振り分けるなんてことをしていると、単純にgrepして利用状況を見るだけでは不十分な場合があります。 そういう意味では「使われていないコード」というよりは、「使われているのか使われていないのかはっきり分からないコード」という方が適切な表現かも知れません。 そういった「はっきりと判断のつかないコード」がある状態だと何が問題なのかと言うと、

    人のコードを引き継ぐときに一番困るのは「使われていないコード」 | mah365
  • Rails Style Guideに載っていることが分かれば大体Rails書ける気がする | mah365

    Rails Style Guideに載っていることが分かれば大体Rails書ける気がしました。もちろん実際に書けるというのと、知識として知るのは全く別のことだと思うのですが、知識としては要点がかなりおさえられている気がしました。 Rails Style Guideで言っていることが分かれば大体分かってる もちろんRails Style Guideは個々の単語(ActiveRecordとかMigrationとか)が分かっている前提で書いてあるので、その分のハードルは高いのですが、逆にここで書いてあることが理解できれば大体Railsのコードが書けるし読めるという到達点が示されている、と捉えることもできます。 昔流行った遅延学習法の話に遡るわけでもないのですが、1から積み上げで勉強していくのも退屈だし、0の段階からいきなりコードを書くのも若干ハードです。何より、知識としてどこまで学べば良いのか分

    Rails Style Guideに載っていることが分かれば大体Rails書ける気がする | mah365
    peketamin
    peketamin 2014/10/04
  • Writing Fast Rubyというスライドが良い | mah365

    ちょっとしたコードの書き方でパフォーマンスが変わることがあります。リーダビリティを重視する向きからすれば小手先のテクニックに映るかも知れないのですが、リーダビリティを維持しながらちゃんとしたパフォーマンスを出すためにも、テクニックを知ることは大事なことだと思うのです。 結構違うもんですなー というわけで、そんなテクニックをまとめたスライドがWriting Fast Ruby。見ていて参考になったのでメモ。 たとえば引数に&blockをとってcallするよりも、yieldの方が5倍速い、とか、 def slow(&block) block.call end def fast yield end mapにブロックを渡すよりも、シンボルを渡す方が20%速い、とか (1..100).map {|i| i.to_s} (1..100).map(&:to_s) mapしてからflattenを呼び出すよ

    Writing Fast Rubyというスライドが良い | mah365
    peketamin
    peketamin 2014/09/28
  • 「実践DevOps! SonicGarden流Herokuガチ運用術!」というテーマでCIO安達とHerokuでの運用について話しました | mah365

    運用=監視ではない。現状把握(監視)+リスク低減(リカバリ)=運用である。 今「データ保全に細心の注意をはらっている」と言いましたが、単純に「バックアップが行われているか?」「コピーしたDBダンプが保存されているか?」をチェックするだけでは運用とは言えません。運用=監視ではないんですね。 監視観点を網羅することでしっかりと現状把握をするのと同時に、いざ問題が起こったときに速やかにリカバリできる必要があります。 SonicGardenでは主に以下のリスクを念頭に置き、問題が起こったときに速やかにリカバリできるようにしています。 アプリケーションデータの一部が破損するリスク ログファイルを一定期間保存(デフォルト3年分)し、ログからのリカバリを行えるようにする。 データベース内のデータの一部が消滅するリスク リージョンをまたいだ冗長化バックアップを行い、もしもの場合には別リージョンを利用したサ

    「実践DevOps! SonicGarden流Herokuガチ運用術!」というテーマでCIO安達とHerokuでの運用について話しました | mah365
    peketamin
    peketamin 2014/06/26
  • 自分がメンテしないコードの品質を上げようとするわけがないよね | mah365

    先日、リーダブルなコードを保つためには、コードが読まれるような文化をつくらなければならないのではないかというエントリを書いたのですが、こんなことを思ったのもある思い出話があったからでした。 「どうしたらこんなコードを納品できるの!?」 僕にとってのはじめてのオフショア。外部設計書を書いて「これ作ってねー」と海の向こうへ投げるだけの簡単な仕事を引き受けまして、設計書を投げた後、いい感じの時間が過ぎた頃に「どれどれ」とコード(PL/SQL)を見てみたのですが、 「このプロシージャ、すごく・・・長いです・・・」 ・・・うーん、外部設計書の章単位でプロシージャが区切られています。 確かにまぁ、設計書通りっちゃ設計書通り。 しかしいろんなプロシージャ間での処理が書かれていてDRYじゃない。共通の設定を読み出すところもハードコードされているので、仕様変更したいときに死んでしまいそう。 「どうしたらこん

    自分がメンテしないコードの品質を上げようとするわけがないよね | mah365
    peketamin
    peketamin 2014/06/13
  • Array()を使ったnilガード | mah365

    Ruby Weekly経由。Array()を使ったnilガードを紹介しているGuarding with arraysという記事がナイスでした。 Rubyでのコーディングは常にnilとの戦いなのであります。 例えばparams[:pictures]に配列が入ってくると期待して、こんなコードを書くと、 params[:pictures].each do |picture_id| # なんか処理がある end params[:pictures]がnilのときにエラーになりますよね。なのでこんな風に書いたりするんですが、ちょいダサい。 (params[:pictures].presence || []).each do |picture_id| # なんか処理がある end で、Guarding with arraysで紹介されている方法が、こんな書き方。 Array(params[:pictur

    Array()を使ったnilガード | mah365
    peketamin
    peketamin 2014/05/09
  • Rubyをより良く書けるようになるための課題演習のつくりかた | mah365

    実戦的なコードの書き方は、どのようにして身に付くものなのでしょうか? 文法を覚えること? それともオブジェクト指向言語であれば、オブジェクト指向自体を学ぶこと? 見方を変えて、関数型のエッセンスを学ぶこと? アンチパターン プログラミングを学ぼうとするときに、プログラミング言語自体を完璧に学ぼうとするのは、無駄ではないのですがそんなに効率的ではない気がしています。 Ruby技術者認定試験【Gold】模擬問題 例えば上記の問題集をきっちり解けるようになると、Ruby自体の振る舞いについては、はっきり分かるようになりますよね。ただ、仕様を聞いて「これを作ろう!」と思ったときに、やり方に困るのではないでしょうか。 「Rubyでプログラミングできるようになりたい」という要望は、「Rubyというプログラミング言語を学びたい」のではなく、「Rubyという生産性が高いと言われている言語を使ってプログラミ

    Rubyをより良く書けるようになるための課題演習のつくりかた | mah365
    peketamin
    peketamin 2014/04/23
  • 4色ほど指定するだけでTwitter Bootstrapの配色を良い感じにしてくれるSass | mah365

    そんなSassが町田先生のCustomizedTwitterBootstrapに含まれていたので、これをTwitter Bootstrap3に対応させてみたのでした。 ソース こちらが良い感じにしてくれるベースの変数です。 $base-color、$main-color、$accent-color、$base-text-colorを決めることで良い感じにしてくれます。僕は下のファイルみたいなテイストが好きです。ほんわかしている。仕事では使えない感じがある。 実際に読み込むときには、Twitter Bootstrapより先に変数を読み込んでおきます。 //--------------------------------------------------------- // Color Scheme for Bootstrap @import colors/try @import color

    4色ほど指定するだけでTwitter Bootstrapの配色を良い感じにしてくれるSass | mah365
    peketamin
    peketamin 2014/02/05
  • Githubのプライベートリポジトリでも無料で使えるCI、Werckerを使ってrails newからHerokuのデプロイまでやってみる | mah365

    SaaSのCIと言えばTravis CIやCircle CIといったサービスが有名ですが、いずれにしてもプライベートリポジトリを使う場合は有料なのです。しょうがないよね、商売だもんね。でもCI入れたいなぁ。 そんな中、GithubだろうがBitbucketだろうがプライベートリポジトリでも無料で使っていいよ!というβ期間中のCI、Werckerが僕の周辺で話題になっていたので、触ってみました。画面もスゲー使いやすい上に、ハマりどころもなく、これはひょっとしてひょっとするんじゃないの?という期待を込めて、rails newからRailsアプリをHerokuにデプロイするまえのチュートリアルを作ってみました。みなさんもこの記事を参考に、ぜひ使ってみてください。 この記事のゴール Githubにpushしたら自動的にWercker上でRSpecのテストが動くこと Werckerでのテストに成功し

    Githubのプライベートリポジトリでも無料で使えるCI、Werckerを使ってrails newからHerokuのデプロイまでやってみる | mah365
    peketamin
    peketamin 2014/01/08
  • 分かりやすいUIを考えるときに参考にしたい34のアイデア | mah365

    GoodUIというサイトでは、サイトのコンバージョンを上げるときに参考にしたい34のアイデアを紹介しています(どんどん追加されるようです)。とても参考になったので、タイトルだけ日語訳してお伝えしたいと思います。あえて意訳しているところもありますが、英語的に完全に間違っている部分があれば、ご指摘下さい。 マルチカラムレイアウトにするより、シングルカラムレイアウトにしてみよう。 すぐにクロージングするより、プレゼントを与えてみよう。 UIを断片化させるより、似たような機能を統合してみよう。 自分で自分自身を語るより、ブランドのある誰かに語らせてみよう。 重要なアクションは1回だけ見せるより、何回も繰り返して表示してみよう。 クリックできる・選択できるアイテムは、ぼかさず明確にスタイルしてみよう。 選んで欲しいものを並列で並べるより、オススメを強調してみよう。 いちいち確認を取るより、Undo

    分かりやすいUIを考えるときに参考にしたい34のアイデア | mah365
    peketamin
    peketamin 2013/12/23
  • 2013年12月版!SonicGardenにおけるherokuでのサービス運用構成 | mah365

    こんにちは、こんにちは! 2013年12月版のサービス運用構成をお知らせします。 なんでも @interu という男が、SonicGarden Study #6 で「そういえば @mah_lab が公開しているHerokuの資料、あれ、もう古いですよ」「そろそろ更新してくれると思うんですけどね(チラッ」と言っていたようなので、2014年版をお知らせする前に、2013年12月版をお知らせする次第なのであります。 前回からの変更点 バックアップ監視の仕組みが、よりスマートになりました 以前はAWS Backup Checkerと実際にバックアップを取る仕組みは別に存在していたのですが、AWS Backup Checkerがバージョンアップし、バックアップもやってくれるようになりました。今ではバックアップを取りつつ、バックアップが正常に取れているかどうかも監視するという、1人で2役3役こなしてく

    peketamin
    peketamin 2013/12/06
  • 2013年版! SonicGardenにおけるherokuでのサービス運用構成 | mah365

    ちょうど去年の今頃、SonicGardenにおけるherokuでのサービス運用構成をご紹介しました。去年の比較して、今ではheroku番運用されているサービスも増えているかと思いますが、実際の構成例はあまり紹介されていないようです。去年ご紹介した内容も少し古くなっていますので、2013年バージョンとして、再度ご紹介したいと思います! 去年からの変更点 去年と比較して大きく変わっている点は、以下の3点ですねー。 バックアップ取得方法の見直し & 監視の導入 Route53愛してる! ログ取得のアドオンをPapertrailに変更 バックアップ取得方法の見直し & 監視の導入 @interuが去年のJAWS-UG in Nagoyaで講演したように、「当にバックアップ取れてるの?」というのは重要な視点ですね! なので、バックアップを取得するところと、監視するところ、セットで構成するように

    2013年版! SonicGardenにおけるherokuでのサービス運用構成 | mah365
    peketamin
    peketamin 2013/04/12
  • Railsプログラマはこれを入れればすぐにズルいデザインをはじめられます! | mah365

    先日のプログラマ向けデザイン勉強会で発表された「少ない手間と知識で”それなり”に見せる、ズルいデザインテクニック」(by 赤塚さん)の中に書かれていたSassのMixinをRailsで使えるGemにしてみました。 zurui-sass-rails: https://github.com/mahm/zurui-sass-rails sample: http://zurui-sample.herokuapp.com/ うおおずるい!w RT @mah_lab: .@ken_c_lo さんのズルいデザインをGemにしてみました。 github.com/mahm/zurui-sas… サンプルはこちら zurui-sample.herokuapp.com (based on github.com/machida/Custom…) — TAEさん (@ken_c_lo) 11月 7, 2012 @m

    Railsプログラマはこれを入れればすぐにズルいデザインをはじめられます! | mah365
    peketamin
    peketamin 2012/11/08
  • 1