「元に戻せないシステムは、システムの基本的な価値を毀損している」みたいなタイトルにしようと思ったのですが、尖り過ぎな気がしたのでユルめのタイトルにしてみました。 「元に戻せる」安心感のためにシステムを使っている 社内で利用しているシステムのいくつかは自分たちで作っているもので、僕も他聞に漏れずそういったシステムにコミットなんぞをしているのですが、つい先日不具合のあるものを勇み足で本番リリースしてしまうという事件を起こしました。 「げ、この不具合はまずい・・・」 この事態をひとまず落ち着かせるためには、何とかして一個前のバージョンに戻さなければなりません。 しかし一個前のバージョンって何? 単にソースコードが戻るだけで良いの? むぐぐ・・・ど、どうすれば・・・。 と、普通に考えていると混乱しそうな事態ではありますが、社内で使っているサービスは大体Herokuで運用しているので、この場ではHe
以前投稿したAngularJSとRailsの丁度良い関係を探るという記事のコード解説編です。前回はざっくりとしたアーキテクチャの紹介のみにとどめていたので、このエントリでサンプルコードの詳細について解説します。 バージョン情報 ruby 2.1.3 rails 4.1.7 devise 3.2.4 angularjs 1.3.2 ディレクトリ構造 app以下のディレクトリ構造は以下のような形です。 app ├── assets │ ├── images │ ├── javascripts │ │ ├── app │ │ │ └── tasks │ │ │ ├── tasks.controller.js.erb │ │ │ ├── tasks.html.erb │ │ │ ├── tasks.js.erb │ │ │
AngularJSとRailsのインテグレーションと言うと、やれ「RailsはAPIに専念してビューは全部AngularJSだ!」という極端な話になりがちな気がするのですが、それだとRailsの良いところが活かせませんよね。AngularJSの持ち味はDOM操作三昧で複雑になりがちな画面を良い感じにコーディングできるところにあると思うので、そういう画面でだけAngularJSを使ってはどうか?というのが今回のアイデアです。 丁度良い感じに使う そういう訳で今回作ったサンプルのアプリとソースコードがこちらになります。 https://todo-rails-sample.herokuapp.com/ https://github.com/mahm/todo-rails/ ユーザー認証はふっつーにdeviseを使って、Todoを編集する画面だけAngularJSを利用している、という感じのサンプ
Rubyといったオブジェクト指向言語を学ぶと、メソッドの定義方法としてインスタンスメソッドとクラスメソッドという2通りの定義方法があることを学ぶと思います。しかし、言語自体のガイドブックには「定義方法にインスタンスメソッドとクラスメソッドがある」と書いてあるだけで、大抵その使い分けについては書かれていません。 そういう訳で、このエントリではその使い分けについて少し考えてみたいと思います。理論的に厳密な使い分けを目指すというよりは、そもそも使い分けの検討が全くつかない!という方に向けて、その指針の一助となることを目指します。 インスタンスメソッドとクラスメソッドとはそもそものところ、Rubyといった「オブジェクト指向の考え方」を実装した言語の機能です。その機能がなぜあるのか?というそもそものところは、オブジェクト指向の考え方にさかのぼることになります。 そこで、インスタンスメソッドとクラスメ
プログラミングを生業としていると、人のコードを引き継いで開発するなんてこともままある訳ですが、そういうときに一番困るのは「使われていないコード」だなー、としみじみ感じます。 使われていないコードがもたらす弊害 特に動的言語で書かれたコードというのは前触れ無く呼び出される可能性があるため、本当に利用されていないのかどうなのか、きっちりと調べあげるのは困難なケースがあります。例えばrubyであれば、method_missingでキャッチしてsendで動的に処理先を振り分けるなんてことをしていると、単純にgrepして利用状況を見るだけでは不十分な場合があります。 そういう意味では「使われていないコード」というよりは、「使われているのか使われていないのかはっきり分からないコード」という方が適切な表現かも知れません。 そういった「はっきりと判断のつかないコード」がある状態だと何が問題なのかと言うと、
ちょっとしたコードの書き方でパフォーマンスが変わることがあります。リーダビリティを重視する向きからすれば小手先のテクニックに映るかも知れないのですが、リーダビリティを維持しながらちゃんとしたパフォーマンスを出すためにも、テクニックを知ることは大事なことだと思うのです。 結構違うもんですなー というわけで、そんなテクニックをまとめたスライドが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を呼び出すよ
先日デキるプログラマだけが知っているコードレビュー7つの秘訣というテーマでSonicGarden Studyというオンライン放送にてお話をさせていただきました。参加者が500人とかなり大盛況の放送だったのですが、その分流れる質問量も激しく、十分に質問にお答えできなかったなーという感がありました。そこでその放送の翌週にあたる8/18(月)にSendagaya.rbの場をお借りして(thanks @tkawa!)コードレビューについてディスカッションする機会を設けさせていただいたのでした@ソニックガーデンオフィスにて。 スライド 前半はこのスライドを元にざっくり15分ほどでSonicGarden Studyでどんなお話をさせていただいたかを紹介しました。3分ぐらいでざっくり、と前置きしたのに15分ぐらい話してた・・・。 話に上がった内容 いろいろと面白い話が上がっていたので、覚えている範囲でつ
先日、リーダブルなコードを保つためには、コードが読まれるような文化をつくらなければならないのではないかというエントリを書いたのですが、こんなことを思ったのもある思い出話があったからでした。 「どうしたらこんなコードを納品できるの!?」 僕にとってのはじめてのオフショア。外部設計書を書いて「これ作ってねー」と海の向こうへ投げるだけの簡単な仕事を引き受けまして、設計書を投げた後、いい感じの時間が過ぎた頃に「どれどれ」とコード(PL/SQL)を見てみたのですが、 「このプロシージャ、すごく・・・長いです・・・」 ・・・うーん、外部設計書の章単位でプロシージャが区切られています。 確かにまぁ、設計書通りっちゃ設計書通り。 しかしいろんなプロシージャ間での処理が書かれていてDRYじゃない。共通の設定を読み出すところもハードコードされているので、仕様変更したいときに死んでしまいそう。 「どうしたらこん
Herokuの公式ドキュメントは英語なので読みづらいですよね。herokaijp/devcenterのように、有志が日本語訳してくれているドキュメントもありますが、その中でも特に抑えておきたい16個の常識について挙げてみました。(16日に公開する予定の記事なので、何となく16個挙げてみました。。) (補足)Herokuを使う上での登場人物の名前 Dyno 「だいの」と呼びます。1Dynoと言ったとき、一つサーバが立ち上がっているようなものだと考えて下さい。 Routing Mesh Herokuアプリにアクセスがあったときに、Dyno間の負荷をロードバランスしながらリクエストを振り分ける機構をRouting Meshと呼びます。たまに「Router Error」というログを吐くのですが、そのとき障害が起こっている場所はここです。 常識1. Dynoは1時間アクセスがないとアイドル状態になる
HOMEソフトウェア開発AngularJSでWebアプリケーションを作ろうと思った時に構成に悩んだら、generator-angular-fullstackからはじめるのが良いのでは AngularJSでWebアプリケーションを作ろうと思った時に構成に悩んだら、generator-angular-fullstackからはじめるのが良いのでは AngularJSはあくまでクライアントサイドのフレームワークなので、サーバサイドをどうしようかなーと悩むことがあると思います。Railsが得意ならRailsに組み込むのもいいんですが、Railsはビューヘルパーが異様に充実しているので、Rails上でAngularJSのコードを書いてるとRailsの良いところが10%も生かせてない気がして辛い気持ちになってきます。うーん、どうしよう。 そんな風に悩んだらYeomanのgeneratorであるgener
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く