タグ

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

  • ChromeでREST APIをテストするならコレ!「DHC」 | mah365

    「え、Chrome使ってるのにDHC知らんの?」と言われて「え、化粧品の話ですか???」と壮大なボケをかましたのですが、REST APIをテストするためのChromeアプリでした。 こんな便利なツールを知らなかったとは・・・って感じ こちらのリンクからDHCをインストールすると、Chromeのアプリ一覧にDHCが並ぶようになります。そこからDHCを開くと、↑の画像のような感じの画面が表示されます。 使い方は画面を見れば分かるほど分かりやすいですね。リクエストは名前をつけて保存することができるので、「あのAPI、どんな値が返って来たっけ?」というときでも安心です。 POSTリクエストの場合は↑の画像のような感じでリクエストボディの値を書くことができます。 Formモードにすると、かなり直感的な形でリクエストボディの値を指定することができます。凄いぜ。。 ブラウザベースなので、セッションを保持

    ChromeでREST APIをテストするならコレ!「DHC」 | mah365
  • RubyMineを使っているならReformatでもっと幸せになろう | mah365

    こんにちは! RubyMine Advent Calendar 20143日目の記事です。さて、皆さんはRubyMineのReformatという機能は活用していますでしょうか? ん? 未だに手でインデントを揃えているって? 今すぐReformatを使いましょう! Reformatとは コード中のインデントやスペースなどを、言語別の設定にあわせて整形し直してくれる機能です。 下の画像のように、Preference > Editor > Code Style以下に言語別の設定を行う場所があります。 Code Styleの設定を元に、常に一定の見た目を保持できる点が、Reformatの優れているポイントです。 手動でReformatをかける まずは手動でReformatをかける方法から。例えば以下のようなインデントの崩れているHTMLソースがあったとしますね。このインデントを直してみましょう。

    RubyMineを使っているならReformatでもっと幸せになろう | mah365
  • AngularJSとRailsの丁度良い関係を探る | mah365

    AngularJSとRailsのインテグレーションと言うと、やれ「RailsAPIに専念してビューは全部AngularJSだ!」という極端な話になりがちな気がするのですが、それだとRailsの良いところが活かせませんよね。AngularJSの持ち味はDOM操作三昧で複雑になりがちな画面を良い感じにコーディングできるところにあると思うので、そういう画面でだけAngularJSを使ってはどうか?というのが今回のアイデアです。 丁度良い感じに使う そういう訳で今回作ったサンプルのアプリとソースコードがこちらになります。 https://todo-rails-sample.herokuapp.com/ https://github.com/mahm/todo-rails/ ユーザー認証はふっつーにdeviseを使って、Todoを編集する画面だけAngularJSを利用している、という感じのサンプ

    AngularJSとRailsの丁度良い関係を探る | mah365
  • 「関数プログラミング実践入門」を読みました | mah365

    かなり気になっていた関数プログラミング実践入門というを早速買って読んでみました。 「関数プログラミングの考え方」が分かる 書は「関数プログラミングで何か作れるようになる」というよりは、「関数プログラミングの考え方がしっかり分かる」という感じで、「普段はJavaRubyといったオブジェクト指向言語を使っているけど、何か関数型言語が気になるんだよねー」というノリの人に向いているだと僕は思いました。 普段関数型言語を使っていない人、というと大多数の人がそうだと思いますが、その大多数の人に向けて「関数プログラミングの考え方ってこんな感じよ」というのを伝えているのが書になります。 内容は 関数型言語Haskellを題材とした関数プログラミングが備える要素の解説 関数プログラミングでの設計テクニック が大きな2柱になっていて、特に「普段はJavaRubyといったオブジェクト指向言語

    「関数プログラミング実践入門」を読みました | mah365
  • HerokuでパフォーマンスモニタリングするならLibratoを入れよう! | mah365

    HerokuでのパフォーマンスモニタリングにはNewRelicアドオンを入れるのも便利ですが、Libratoという「よりHerokuに寄り添った」メトリクスを出してくれるアドオンもあります。 こんな感じ とあるサービスで導入してみたところ、こんな感じでメトリクスが出ます。 RouterのQueueが詰まっていないか?とか、Dynoのメモリの推移や、PostgreSQLの容量は大丈夫か?といった情報をひと目で把握できる感じです。ダッシュボード的な感じですね。 他にも必要なメトリクスがあれば追加することができます。 もちろんアラートを設定することもできます。 無料のプランから使えるので、まずはお試しで。 とはいえ無料のプランでも十分に使えるクオリティだと思います。Herokuでアプリを運用している方は、ぜひご活用を! Librato

    HerokuでパフォーマンスモニタリングするならLibratoを入れよう! | mah365
  • 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
  • インスタンスメソッドとクラスメソッドはどのようにして使い分けるべきか?(Rubyの場合) | mah365

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

    インスタンスメソッドとクラスメソッドはどのようにして使い分けるべきか?(Rubyの場合) | 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
  • 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
    clavier
    clavier 2014/09/28
  • 「一人でもコードレビューはできる!」Sendagaya.rbでコードレビューについてディスカッションしました | mah365

    先日デキるプログラマだけが知っているコードレビュー7つの秘訣というテーマでSonicGarden Studyというオンライン放送にてお話をさせていただきました。参加者が500人とかなり大盛況の放送だったのですが、その分流れる質問量も激しく、十分に質問にお答えできなかったなーという感がありました。そこでその放送の翌週にあたる8/18(月)にSendagaya.rbの場をお借りして(thanks @tkawa!)コードレビューについてディスカッションする機会を設けさせていただいたのでした@ソニックガーデンオフィスにて。 スライド 前半はこのスライドを元にざっくり15分ほどでSonicGarden Studyでどんなお話をさせていただいたかを紹介しました。3分ぐらいでざっくり、と前置きしたのに15分ぐらい話してた・・・。 話に上がった内容 いろいろと面白い話が上がっていたので、覚えている範囲でつ

    「一人でもコードレビューはできる!」Sendagaya.rbでコードレビューについてディスカッションしました | mah365
  • Railsのアプリがちょっと速くなるかも知れない?Gemたち | mah365

    Improve Rails performance by adding a few gemsでRailsのアプリがちょっと速くなるかも知れないGemが紹介されていたので、早速試してみました。 どんなGemRailsのViewのエスケープ処理を高速化するescape_utils みんな大好きblank?メソッドの処理を高速化するfast_blank JSONに関する処理を高速化するoj OJは個人的には定番でしたが、それ以外は知らないGemでした。 Railsアプリのテストの実行速度で前後比較してみた 小規模ではあるもののテストが充実しているアプリで、上記のGemを使用している場合と使用していない場合とで比較してみました。Rails4.0.5で、Ruby2.0.0の環境。 使用前:Finished in 117.683018 seconds 使用後:Finished in 101.366

    Railsのアプリがちょっと速くなるかも知れない?Gemたち | mah365
  • 「実践DevOps! SonicGarden流Herokuガチ運用術!」というテーマでCIO安達とHerokuでの運用について話しました | mah365

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

    「実践DevOps! SonicGarden流Herokuガチ運用術!」というテーマでCIO安達とHerokuでの運用について話しました | mah365
  • 自動的にEager Loadingしてくれるようになる「Goldiloader」というGemが良い感じ | mah365

    RailsでのDBへのクエリの組み立ては常にN+1問題との戦いですよね。N+1が発生すると大幅にパフォーマンスがダウンしてしまうので、適切な事前ロードをいかに行えるかがプログラマの腕の見せどころになります。 でもそれって質でしょうか? DBにクエリを投げる部分の実装の詳細なのでは? クエリが空気読めばいいじゃん!という「Goldiloader」 「それって実装の質じゃないよね。詳細だよね。それはクエリを投げる部分(ActiveRecord)が空気読めばいいんじゃね?」 そんな思想で現れたGemGoldiloaderです。Gemfileに加えるだけで勝手にEager Loadingしてくれるようになります。 このGembundleせずに以下のコードを叩くと、eachでpostsが呼ばれるたびにロードを繰り返してしまうのですが・・・ > blogs = Blogs.limit(5).t

    自動的にEager Loadingしてくれるようになる「Goldiloader」というGemが良い感じ | mah365
  • Rubyをより良く書けるようになるための課題演習のつくりかた | mah365

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

    Rubyをより良く書けるようになるための課題演習のつくりかた | mah365
    clavier
    clavier 2014/04/23
  • 大規模Rails開発を蝕む5つのアンチパターン | mah365

    Railsでアプリを作っていると、最初の立ち上がりは速いものの、コードが多くなってくると結構散らかってきますよね。そんな中、5 ARCHIRECTURE ANTI-PATTERNS AND SOLUTIONS FOR LARGE RAILS APPSという記事を見つけたので、ご紹介します。 1. 複数の責務を持つサービスクラスがある 業務別の処理をサービスクラスという形で分割したときの話ですね。ActiveRecordのクラスに直接仕事をさせるのではなく、プレーンなクラスに業務処理をまとめて、そこからだけActiveRecordのクラスのオブジェクトにアクセスするという考え方です。 で、業務別の処理をサービスクラスにまとめたのは良いんだけど、「これもこの業務だよね」という感じで、どんどんサービスクラスに処理を追加していくと、単一責任の原則に違反してしまうし、混沌とするので、良くないよねと。

    大規模Rails開発を蝕む5つのアンチパターン | mah365
  • AngularJSでWebアプリケーションを作ろうと思った時に構成に悩んだら、generator-angular-fullstackからはじめるのが良いのでは | mah365

    HOMEソフトウェア開発AngularJSでWebアプリケーションを作ろうと思った時に構成に悩んだら、generator-angular-fullstackからはじめるのが良いのでは AngularJSでWebアプリケーションを作ろうと思った時に構成に悩んだら、generator-angular-fullstackからはじめるのが良いのでは AngularJSはあくまでクライアントサイドのフレームワークなので、サーバサイドをどうしようかなーと悩むことがあると思います。Railsが得意ならRailsに組み込むのもいいんですが、Railsはビューヘルパーが異様に充実しているので、Rails上でAngularJSのコードを書いてるとRailsの良いところが10%も生かせてない気がして辛い気持ちになってきます。うーん、どうしよう。 そんな風に悩んだらYeomanのgeneratorであるgener

    AngularJSでWebアプリケーションを作ろうと思った時に構成に悩んだら、generator-angular-fullstackからはじめるのが良いのでは | mah365
  • 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
  • 分かりやすいUIを考えるときに参考にしたい34のアイデア | mah365

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

    分かりやすいUIを考えるときに参考にしたい34のアイデア | mah365
  • イマドキ、Ruby on Railsで開発するならエディタはRubyMineだよね? 6出たよー! | mah365

    社内の8割方の人間を敵に回すタイトルです。RubyMineを使いはじめてから、かれこれ1年が経ちますが、もうRubyMine無しではRuby on Rails使えません。それぐらいに便利なので、そろそろちゃんとご紹介しようと思うのです。 ちなみに僕は、 vimEmacs → Sublime Text → RubyMine(今ココ!) という感じにエディタを渡り歩いています。 6になって、最強が更に最強になった つい先日、RubyMineがメジャーバージョンアップして6になりました。これにより以下の機能が加わり、より最強になりました。 IDEの中でターミナルを開けるように Zeusを標準で扱えるように(どうせならSpringもサポートして欲しかったけど・・・) 「今までできなかったのかよ!」とツッコミを受けかねない機能追加なのですが、いちいちウィンドウを切り替えてターミナル叩きながらコ

    イマドキ、Ruby on Railsで開発するならエディタはRubyMineだよね? 6出たよー! | mah365
  • 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役こなしてく