ぎんざRuby会議01 https://ginzarb.github.io/kaigi01/
Rubyのリファクタリングでオブジェクト指向設計に沿った美しいコードになるまでの方法を書いた。 元ネタはこちらのBen Orenstein氏のリファクタリングで、そこに私なりの解説とコードを加えた。かなり追加したのでOrenstein氏の原型とはだいぶ違う箇所もあるがオブジェクト指向設計とリファクタリングに対する考え方は同じなはず。 github.com 全3回に渡ってリファクタリングする。 「イケてない」から「マシ」にするためのリファクタリング 「マシ」から「いいね」にするためのリファクタリング 「いいね」から「スゲーいいね」にするためのリファクタリング 今回は1.の「イケてない」から「マシ」にするためのリファクタリング。 イケてないコード 以下にあるのがなんかイケてないコード。一応動くし、テストもパスしている。でもそのコード品質は平均よりちょっと下。 範囲を指定してその間の売上の総合計
ruby の inject で配列の合計や最小要素を簡単に求められるんだけど、慣れていないと理解しにくい。そこで、できるだけわかりやすく説明したいと思う。 injectの使用例 Ruby初心者が配列の和を求めたいと思ったとき、最初に思いつくのは以下のようなコードだろう。 sum = 0 [1, 2, 3, 4, 5].each do |i| sum += i end sum # => 15 変数sumを用意し、eachで配列の中身を順にsumに足していく。Rubyを知っている人なら誰でも理解できると思う。 これをinjectを使って次のように書ける。 [1, 2, 3, 4, 5].inject(0) { |sum, i| sum + i } # => 15 簡潔だが、injectを知らないといまいちピンとこないのではないだろうか。ちなみに、Ruby1.8.7以降であれば更に簡単に書ける。
HeartRails Tech Blog ハートレイルズのエンジニア、デザイナーによるブログです。 ウェブサービス、スマホアプリ、IoT デバイスの開発に関連する技術的な情報を発信していきます。 github/scientist これは何? github が開発し、つい先日 ver1.0 がリリースされた gem です。 本番環境で新しいコードを試すためのツールです。 例えば以下のようなコードがあったとしましょう。 class Repository def pullable_by?(user) self.is_collaborator?(user) end end このコードを以下のようにリファクタリングしたい、とします。 def pullable_by?(user) has_access?(user) end しかし、新しいコードが元のコードと全く同じように動いてくれるかどうか心配。。。
こんにちは、Railsエンジニアの鈴木(信)です。 先日31歳になったんですが、やはり30歳を超えたあたりから衰えたというか、何か体に変化があったように思います。 自身の健康はもちろんですが、コードの健康(品質)のことも気になる年頃になりました。 そこで今回は弊社で利用しているコード解析ツールをご紹介します。 brakeman - セキュリティ brakemanは、簡単なXSSやインジェクション系の脆弱性を検出してくれるgemです。 もちろんこれだけで完全に安心という訳ではありませんが、弊社ではJenkinsのBrakeman Pluginを使って、継続的にモニタリング、修正しています。 使い方 $ brakeman $ brakeman --only-files=path/to/specific_file simplecov - テストカバレッジ simplecovはカバレッジ計測ツール
先日、あるRuby会議での雑談中に、こんなものが必要かなぁ、と感じたのでまとめてみています。随時コメント歓迎( @ksmakoto 等まで)。 前史 1988年(ないし1989年 (別冊であるので、その『bit』本誌が1月号か?)): 『bit』別冊「Common Lisp オブジェクトシステム ――CLOSとその周辺――」(単行本として再版されている http://www.kyoritsu-pub.co.jp/bookdetail/9784320122543 )この本の第1章§3.3(p. 18)に「筆者はこうしたことのためのメソッドを特異メソッドと呼んでいる」とある(井田昌之先生による)のが、Rubyの特異メソッドの由来( #:g1: 特異メソッドという訳語の謎 も参照)。 誕生〜20世紀 1993年2月24日: 「まつもとさんが作ろうと思った」( [ruby-list:6553] )
※2016/04/24 追記 昨年末にItamae meetupで話した時のスライドリンクを追記しました。 Databag > itamae-secret の話やConsul連携の話が追加されています。 http://www.slideshare.net/tsuyoshitorii5/itamae-meetup-vol1public 現在自分が運用管理しているChef-soloプロビジョニングの仕組み 1 を Itamaeに移行した時のお話をしようと思います。 管理規模としては大規模ではなく、小〜中規模的なところかと思います。 (ロールによってレシピ切り分けたり、環境毎にレシピ用意したりなど…) 最初に: Itamaeについて https://github.com/itamae-kitchen/itamae 軽量なChef と考えればよいでしょう。 Chefの複雑さを取り除き、必要十分な部
Go言語便利だけど、文法をこねくり回して内部DSLを作るとかには向いていないので、ルビー風にDSLを読み込ませて設定と替えさせていただきます、と言うのが少し難しい。 いっそGo内部でRubyを組み込んで実行したい。mrubyならできるんじゃね? と思ってやってみたらそれっぽいのができた。 Vagrant、Packer、Consulなど、DevOps対応界隈でその名を知らない者はいない mitchellh さんの mitchellh/go-mruby · GitHub をつかう。 多分だけど、ハシモト氏も同じようなこと考えてたんじゃないだろうか。結局 hashicorp/hcl · GitHub を使われてるけれど。 完成したそれっぽいの.go package main import ( "fmt" "io/ioutil" "os" "github.com/mitchellh/go-mrub
|-- Rakefile `-- spec |-- app | `-- ruby_spec.rb |-- base | `-- users_and_groups_spec.rb |-- db | `-- mysql_spec.rb |-- proxy | `-- nginx_spec.rb `-- spec_helper.rb require 'rake' require 'rspec/core/rake_task' hosts = [ { :name => 'proxy001.example.jp', :roles => %w( base proxy ), }, { :name => 'proxy002.example.jp', :roles => %w( base proxy ), }, { :name => 'app001.example.jp', :roles => %w( bas
CategoriesTo give you an overview of what open source libraries are available for a given task we group projects for common problems into categories. The catalog itself is available for contributions on GitHub. SearchWith our search you can find Ruby open source libraries beyond what is listed in our categories. We index all Rubygems published on Rubygems.org. Project PopularityWe sort projects ba
※この内容はRailsで書かれたWantedlyのプロジェクトに参加することを想定していて、一部Railsのデフォルトでない機能の解説もありますが、使っているgemもメジャーなもので割と汎用的な内容になっていると思うので、是非参考にしてみてください。 URLを見ればだいたいどこを変更すればいいかわかると言うこと Ruby on RailsはMVC(Model View Controller)にもとづいて設計されていて、ディレクトリ構造的にもapp/以下に綺麗に分かれている。 MVCって何?って人は、ググってみてほしいが、割と宗教論争になりかけているので、モデルはDBの各テーブルに関連していて、ビューはHTMLの部分に近くて、コントローラーはビュー用にモデルを引っ張ってくるつなぎ役だと思ってれば大体合っている。これ以上は深く考えずにコードを読んだほうが良いと思う。 Router でもコード的
実戦的なコードの書き方は、どのようにして身に付くものなのでしょうか? 文法を覚えること? それともオブジェクト指向言語であれば、オブジェクト指向自体を学ぶこと? 見方を変えて、関数型のエッセンスを学ぶこと? アンチパターン プログラミングを学ぼうとするときに、プログラミング言語自体を完璧に学ぼうとするのは、無駄ではないのですがそんなに効率的ではない気がしています。 Ruby技術者認定試験【Gold】模擬問題 例えば上記の問題集をきっちり解けるようになると、Ruby自体の振る舞いについては、はっきり分かるようになりますよね。ただ、仕様を聞いて「これを作ろう!」と思ったときに、やり方に困るのではないでしょうか。 「Rubyでプログラミングできるようになりたい」という要望は、「Rubyというプログラミング言語を学びたい」のではなく、「Rubyという生産性が高いと言われている言語を使ってプログラミ
2024年4月1日より、Supership株式会社は親会社であるSupershipホールディングス株式会社に吸収合併されました。 合併に伴い、存続会社であるSupershipホールディングスは社名をSupershipに変更し、新たな経営体制を発足しました。本件に関する詳細は、プレスリリースをご確認ください。 2024年4月1日より、Supership株式会社は親会社であるSupershipホールディングス株式会社に吸収合併されました。 合併に伴い、存続会社であるSupershipホールディングスは社名をSupershipに変更し、新たな経営体制を発足しました。 本件に関する詳細は、プレスリリースをご確認ください。
Guard オブジェクト Perl だと Guard オブジェクトとかいうハックがあって、スコープを出るタイミングで必ず呼ばれるファイナライザを使って、あるスコープでだけ有効な処理を書けたりします。 例えば、DB のトランザクションや、あるいは以下のように依存するプロセスをあるスコープでだけ起動して終了するような用途で使われています。 { my $guard = Proc::Guard->new(command => [ "memcached", "-p", "12321" ]); # do something ... }; # memcached has been killed 適当なメソッドにブロック(サブルーチン)を渡せばええやん、という気もしますし、実際 Ruby の transaction の場合そういう感じになります (Perl でももちろん同じようなサブルーチンを書くことはで
http://codeascraft.com/2013/10/16/migrating-to-chef-11/ Etsyがエンジニアブログで、Chef11へのバージョンアップの経験をシェアしています。 まず、Version 11.6.0用のサーバ構築。 そして、バックアップと復旧のためのスクリプトがChef11で稼働することを確認。コードの修正作業に支障がなく、Chef10とChef11サーバが問題なくsyncできることで、この移行作業に影響を受けずに、最大70名の開発者がcookbookをいじれる環境を担保することを目指した。 Chef11のknown issueについては、attribute precedenceの問題の修正と、knife-lastrun handlerがnode.run_state()の替わりにrun_context.loaded_recipesを使うように変更しただ
『るびま』は、Ruby に関する技術記事はもちろんのこと、Rubyist へのインタビューやエッセイ、その他をお届けするウェブ雑誌です。 Rubyist Magazine について 『Rubyist Magazine』、略して『るびま』は、Rubyist の Rubyist による、Rubyist とそうでない人のためのウェブ雑誌です。 最新号 Rubyist Magazine 0063 号 バックナンバー Rubyist Magazine 0063 号 Rubyist Magazine 0062 号 Kaigi on Rails 特集号 RubyKaigi Takeout 2020 特集号 Rubyist Magazine 0061 号 Rubyist Magazine 0060 号 RubyKaigi 2019 直前特集号 Rubyist Magazine 0059 号 Rubyist
土屋つかささんのリクエストでFiberの記事を書くよ。じつは前三つの記事はFiberの記事を書くためのリハビリなんだ。 もくじ ていうかFiberって?使ってみた解説余談あとがきていうかFiberって?Fiberっていうのは、Ruby 1.9.2で追加されたあたらしい機能で、コルーチンのようなもの、正確にはセミコルーチンを実現するためのものだよ。そうすると、コルーチンって何?っていう話になっちゃうんだけど……。 ルーチンっていうのは、ひとまとまりの処理のことだよ。プログラム全体を指して、メインルーチンなんて言ったりする。それに対していわゆる関数のことをサブルーチンって呼んでるね。Perlのユーザー関数定義にsubっていう語彙が使われているのはそういう理由だね。 で、コルーチンのルーチンも同じく処理のひとまとまりのことなんだけど、コって何?って感じだね。子供の子じゃないよってことは確かなんだ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く