タグ

ブックマーク / www.clear-code.com (32)

  • Rubyで自然なDSLを作るコツ:値を設定するときはグループ化して代入 - ククログ(2014-02-13)

    最近、fluent-plugin-droongaという分散データストリームエンジンを書いています。その中で、RubyでDSLを実現するときに工夫していることに気づきました。それは、値を設定するときは代入する字面にするということです。代入する字面にするために、グループ化用のオブジェクトを作っていました。 これだけだとどういうことかわからないので、具体例を示しながら説明します。 RubyとDSL Rubyを使っているとRubyで実現されたDSLに触れることが多くあります。RubyのMake実装であるRakeの設定ファイルもそうですし、ライブラリー管理ツールのBundlerの設定ファイルもそうです。 Rakeの場合:

    Rubyで自然なDSLを作るコツ:値を設定するときはグループ化して代入 - ククログ(2014-02-13)
  • Gitで不適切なコミットメッセージを削除した公開リポジトリを作る - 2012-01-05 - ククログ

    分散バージョン管理システムのGitには様々なサブコマンドがありますが、その中の1つである git filter-branch を使用すると、過去のコミットを完全に無かった事にしてしまうなどの強力なコミット履歴の編集が可能となります。大きなリポジトリの特定のディレクトリ以下の内容をコミット履歴付きで別の小さなリポジトリとして取り出したり、ファイルの中に書かれていた生のパスワードを履歴の中から消去したり、というのはよく紹介される例です。 このエントリでは別の例として、コミットメッセージだけを後からまとめて修正する手順をご紹介しましょう。 元々非公開なプロジェクトとして開発を進めていたものを、公開リポジトリに移動したいとなると、やはり機密情報は完全に取り除いておく必要があります。リポジトリに格納されているファイルそのものの内容の編集方法については上記の例で解説されていますが、それ以外の場合として

    Gitで不適切なコミットメッセージを削除した公開リポジトリを作る - 2012-01-05 - ククログ
    noplans
    noplans 2014/01/18
  • インターンの作業を進めやすくするための工夫 - 2013-09-26 - ククログ

    はじめに リーダブルコードの解説やつくばインターンシップコンソーシアムのマッチングイベントをきっかけに、インターンシップへの応募が2件あり、今年2回目のインターンシップを9/2~9/6の1週間実施しました。インターンシップの記録はメモに残して公開しています。今回もインターンシップを通じてたくさんのことを学ぶことができました。 今回のインターンシップでは、2人のインターンがるりまプロジェクトにおける異なる2つの作業を行いました。1人はBitClustへの機能追加、もう1人はるりまのドキュメント改善です。一方のメンターも2名配置しました。1人はるりまプロジェクトのメンバーです。インターンへの作業内容の説明やインターンからの質問に対応しながら、るりまプロジェクトに関する作業も並行して行いました。もう1人は非エンジニアである筆者で、インターンシップで掲げたインターン、クリアコード双方の目的が達成で

    インターンの作業を進めやすくするための工夫 - 2013-09-26 - ククログ
  • るびま0040号の「Rubyコードの感想戦」とDevLOVE Conference 2012の「リーダブルコードを読んだ後」のお知らせ - 2012-11-26 - ククログ

    株式会社クリアコード > ククログ > るびま0040号の「Rubyコードの感想戦」とDevLOVE Conference 2012の「リーダブルコードを読んだ後」のお知らせ るびま0040号の記事とDevLOVE Conference 2012でのセッションの紹介です。 るびまの記事「Rubyコードの感想戦」の紹介 昨日(2012-11-25)、るびま0040号がリリースされました。今回、久しぶりに記事を寄稿しました1。Ruby コードの感想戦 【第 1 回】 WikiRというタイトルの記事です。あの咳さんのコードにコメントをして、気に入らないところがあったら理由をつけながら直していく(自分好みに変えていく)という内容です。記事中で作ったコードや実際のコミット、記事の原稿などはすべてGitHubにあるので、コードをコピー&ペーストしたりせずに動かしてみたいという人はGitHubにあるリポ

    るびま0040号の「Rubyコードの感想戦」とDevLOVE Conference 2012の「リーダブルコードを読んだ後」のお知らせ - 2012-11-26 - ククログ
    noplans
    noplans 2012/12/03
  • 「札幌Ruby会議2012のチケットを譲るキャンペーン」当選者のレポート紹介 - 2012-09-24 - ククログ

    札幌Ruby会議2012のチケットを譲るキャンペーンに当選したみなさんのレポートを紹介します。 @hayabusa333さん">@hayabusa333さん ハードリカーエンジニア  札幌Ruby会議2012に行ってきました #sprk2012 都合が悪く初日は参加できなかったとのことですが、いろいろ得たものがあったようです。よかったです。 このご恩はコミュニティーへの貢献と良いコードでのお返しをしていきたいと思います。 先ずは東京Ruby会議10のLTに応募します。 実際に行動を始めていてすばらしいです。 @vestige_さん">@vestige_さん 札幌Ruby会議2012にいってきた! - Vestige is fragments of memory 須藤さんの発表は何度か聞いてますが、毎回、なにかやらなきゃって気持ちにさせてくれる。 ぜひ、なにかやりはじめてください! @sat

    「札幌Ruby会議2012のチケットを譲るキャンペーン」当選者のレポート紹介 - 2012-09-24 - ククログ
  • 札幌Ruby会議2012: 「バグの直し方」、「クリアなコードの作り方」 #sprk2012 - 2012-09-19 - ククログ

    2012年9月14日から9月16日の3日間にわたり札幌Ruby会議2012が開催されました。 3日間の開催、マルチトラック、国際化1など日Ruby会議のような地域Ruby会議でした。そんな札幌Ruby会議2012で「バグの直し方」と「クリアなコードの作り方」の話をしてきました。それらについてそれぞれ発表者人が紹介します。 沖元: バグの直し方 3日目の午後にあった沖元の発表です。 発表番では、デモ中にRubyのビルドに失敗したため満足にデモができませんでした。そのため、デモでやる予定だったことをスライドに追加しています。 沖元: 感想 実行委員の気遣いが素晴しかったと思います。9月の北海道にしては気温の高い日々でしたが、実行委員の人たちのおかげで非常に快適にセッションに参加することができました。 スピーカーはみんなコードを書くのが好きな人たちばかりで、まさに「We Code.」のテー

    札幌Ruby会議2012: 「バグの直し方」、「クリアなコードの作り方」 #sprk2012 - 2012-09-19 - ククログ
  • リーダブルコードの解説 - 2012-06-11 - ククログ

    注: 記事中の「解説」の部分のライセンスは「Creative Commons 表示 - 非営利 - 継承」です。「解説」は「クリアコード」(「ClearCode Inc.」)によって変更されています。変更前の原著作者は「オライリー・ジャパン」です。「Creative Commons 表示 - 非営利 - 継承」なので再配布や変更や翻訳などはライセンスに従って自由に行えますが、営利目的で利用することはできません。 https://amazon.co.jp/dp/B0064CZ1XEの翻訳である「リーダブルコード」が今月(2012年6月23日)発売されます。すでに予約できるようです。 https://amazon.co.jp/dp/4873115655 書の内容は原書の紹介記事を参照してください。 日語版の訳者は角さんです。これまでの訳書と同様にとても読みやすく訳されています。翻訳なので読

    リーダブルコードの解説 - 2012-06-11 - ククログ
  • クリアなコードの作り方: 余計なことを書かない - 2012-05-21 - ククログ

    FileUtils.mkdir_p assets_path unless FileTest.exist? assets_path このコードを元に、「余計なコードを書かない」ことがどうして大事かを説明します。 余計なコード まずは、どこが余計なコードなのかを考えてみましょう。このコードではFileUtils.mkdir_pとFileTest.exist?メソッドを使っています。 FileUtils.mkdir_pは引数で指定されたディレクトリがなかったら親ディレクトリも含めて作成するメソッドです。すでにディレクトリが存在した場合は何もしませんし、エラーにもなりません。mkdir_pというメソッド名はmkdir -pコマンドが由来でしょう。 FileTest.exist?は引数で指定されたファイルが存在したら真を返すメソッドです。 このコードではunless FileTest.exist?の

    クリアなコードの作り方: 余計なことを書かない - 2012-05-21 - ククログ
  • おすすめzsh設定 - 2011-09-05 - ククログ

    他の人がzshを使っているのを見ていると、「もっと便利に使えるのに」と、もやっとしたり、「え、その便利な機能ってなに?」と、発見があったりします。だれかに「この設定をすると便利ですよ」と話しやすくするために、今のzshのおすすめ設定をここに記しておきます。 もし、Emacsも使っている場合はおすすめEmacs設定もどうぞ。 ディレクトリ構成 長年漬け込んできたzshの設定がそこそこの量になっているので、以下のようなディレクトリ構成にして分類しています。主に、zsh標準機能の設定と追加パッケージの設定を分けるためにこうしています。 ~ ├── .zshrc # シェルを起動する毎に読み込まれる。 │ # ~/.zsh.d/zshrcを読み込んで │ # 標準機能の追加設定を行う。 ├── .zshenv # ログイン時に一度だけ読み込まれる。 │ # ~/.zsh.d/zshenvを読み込ん

    おすすめzsh設定 - 2011-09-05 - ククログ
    noplans
    noplans 2012/02/24
  • クリアなコードの作り方: 縦長・横長なメソッドを短くする - 2012-02-07 - ククログ

    最近読んだRubyのコードではYARDのコードがキレイでした。 さて、長いメソッドは不吉なにおいがするからメソッドを分割するなどして短くしましょうとはよく言われることですが、ここでいう「長い」とは「縦に長い」ことを指していることがほとんどです。長いのが問題なのは縦に長いときだけではなく横に長いときもです。 縦に長いメソッド まず、どうして縦に長いメソッドが問題かについてです。縦に長いメソッドには「処理を把握しづらい」という問題がある可能性が高いです。 どうして処理を把握しづらいか 処理を把握しづらい原因はいくつかあります。例えば、抽象度が低いのが原因です。 メソッドが縦に長くなっているときは、多くの処理が行われていることがほとんどです。これらの処理はメソッドになっていないため名前がついていません。処理に名前がついていない場合は実装を読まないとなにをしているかがわかりません。 せっかくなので

    クリアなコードの作り方: 縦長・横長なメソッドを短くする - 2012-02-07 - ククログ
  • デバッグ力: よく知らないプログラムの直し方 - 2011-12-06 - ククログ

    クリアコードではMozilla製品やRuby関連の開発だけではなく、広くフリーソフトウェアのサポートもしています。もちろん、サポート対象のソフトウェアの多くは私達が開発したものではありません。しかし、それらのソフトウェアに問題があった場合は調査し、必要であれば修正しています。 このようなサポートが提供できるのは、もともと、私達がフリーソフトウェアを利用したり開発したりしているときに日常的に問題の調査・修正をしていたからです。ソフトウェアを利用していると、問題に遭遇することはよくあることです。そのソフトウェアがフリーソフトウェアの場合は、開発者に問題を報告し、可能ならパッチを添えます。このとき、そのソフトウェアの内容を完全に把握していることはほとんどありません。しかし、それでも修正することができます。 それはどうしてでしょうか?今まではどのようにやっているのかを自分達でもうまく説明できなかっ

    デバッグ力: よく知らないプログラムの直し方 - 2011-12-06 - ククログ
  • 最後の行から順番に読み込む小さなRubyのクラス - 2010-06-23 - ククログ

    Muninのプラグインを作るときなど、大きなサイズのログファイルを解析する必要がたまにありますよね。そんなとき、ファイルの先頭から処理をしていくとファイルサイズが増加するにしたがって処理時間も増えていってしまいます。Muninのプラグインの場合は最近5分間のデータだけあれば十分なので、ファイルの先頭からではなく、最後から処理する方が効率的です。最後から処理すると、ファイルサイズが大きくなっても処理時間にはほとんど影響がありません。 ということで、ファイルの最後から1行ずつ読み込む小さなRubyのクラスを作りました。groongaのリポジトリに入っているので、groongaと同じライセンスで利用できます。 class ReverseLineReader def initialize(io) @io = io @io.seek(0, IO::SEEK_END) @buffer = "" @da

    最後の行から順番に読み込む小さなRubyのクラス - 2010-06-23 - ククログ
    noplans
    noplans 2011/07/21
  • 日本Ruby会議2011: テスティングフレームワークの作り方 - 2011-07-19 - ククログ

    Ruby会議2011で「テスティングフレームワークの作り方」について話してきました。前に人前で話したのが2月のフクオカRuby大賞だったので半年くらい人前に出ていなかったのですね。 発表内容のこととRuby会議のことについて書いておきます。 発表内容 数年前なら自分がよいと思っている技術的なことを「これかっこいいでしょ!」みたいな感じで話したかったのですが、最近は自分がよいと思っている開発スタイルをまだそれを知らない人に「こういうスタイルもあるんだよー」と伝えたくなってきました1。そのため、今回の発表内容は「自分が開発しているときに無意識のうちに考えていること」になりました。 発表内容についてざっくりまとめるとこんな感じになります。 ライブラリやツールを作るときは、頭の中で考えていることをそのまま書けるような使い方にするといいよ。 そのためには「だれが」「なんのために」「頭の中で考える

    日本Ruby会議2011: テスティングフレームワークの作り方 - 2011-07-19 - ククログ
  • おすすめEmacs設定 - 2011-02-16 - ククログ

    注: これの更新版である2012年版があります。 他の人がEmacsを使っているのを見ていると、「もっと便利に使えるのに」と、もやっとしたり、「え、その便利な機能ってなに?」と、発見があったりします。だれかに「この設定をすると便利ですよ」と話しやすくするために、今のEmacsのおすすめ設定をここに記しておきます。 ディレクトリ構成 長年漬け込んできたEmacsの設定がそこそこの量になっているので、以下のようなディレクトリ構成にして分類しています。 .emacs.d |-- init.el ;; 基的な設定を記述 |-- config ;; 特定のモードや非標準のElispの設定をこの下に置く | |-- builtins.el ;; 標準Elispの設定 | |-- packages.el ;; 非標準Elispの設定 | `-- packages ;; 非標準Elispのうち、設定が多

    おすすめEmacs設定 - 2011-02-16 - ククログ
  • Rails 3.0 beta4でDeviseを使ってOpenID認証 - 2010-07-13 - ククログ

    とあるRails 3を使っているたいやき用のCMSでDeviseを使ってOpenID認証をするようにしたので、そのやり方を紹介します。RubyRuby 1.9.2 RC2も出ていますが、今回はRuby 1.9.1を使います。 Deviseとは DeviseはRackベースの認証システムです。バックエンドにWardenを利用しているため、Basic認証やOpenID、OAuthなど認証方法を切り替えることができます。 ただ、以下の説明を読んでみてもらってもわかる通り、動き出すまでにそこそこの作業が必要になります。機能は豊富なので、動き出したらカスタマイズしてアプリケーションの要求に合わせていくことができるでしょう。日語での情報もあまりありませんが、探せばいくつかはあるので、試してみてはいかがでしょうか。 とはいえ、今回はDeviseのデフォルトの認証方法ではなく、OpenIDでのみ認証す

    Rails 3.0 beta4でDeviseを使ってOpenID認証 - 2010-07-13 - ククログ
  • git-utils 0.0.1リリース - 2010-05-18 - ククログ

    git関連の様々なユーティリティソフトウェアのパッケージであるgit-utilsのバージョン0.0.1をリリースしました。このパッケージには、gitリポジトリ用のコミットメール送信スクリプトcommit-email.rbが入っています。以下からダウンロードできます。 packages.clear-code.comからダウンロード 概要 今回のリリースはgit-utilsの最初のリリースです。 このパッケージに同梱されているcommit-email.rbを使うことで、gitリポジトリにpushされたコミットのコミットメールを送信することができます。 gitでは複数のコミットを一度にリポジトリに追加することができます。これはpushと呼ばれています。commit-email.rbはインストールしたリポジトリに対してpushが発生する度に実行されます。そして、そのpushの中にあるコミットごとに

    git-utils 0.0.1リリース - 2010-05-18 - ククログ
  • Ruby 1.9.xでRange#include?を高速に動かす方法 - 2010-03-25 - ククログ

    Ruby 1.9.xではRange#include?の実装が変わり、Ruby 1.8.xよりも圧倒的に遅くなるケースがあります。これは、Ruby 1.9.xへ移行したときの有名なハマりポイントの1つでしょう。 例えば、こんなケースです。 require 'time' require 'benchmark' Benchmark.bm(10) do |bm| march = Time.parse("2010/03/01")...Time.parse("2010/04/01") march_15 = Time.parse("2010/03/15") bm.report("include?") do march.include?(march_15) end end 2010年3月15日が2010年3月に入っているかを調べています。 これをRuby 1.8.7で動かすとこうなります。 % ruby

    Ruby 1.9.xでRange#include?を高速に動かす方法 - 2010-03-25 - ククログ
  • るびま0029号 - 2010-03-16 - ククログ

    るびま0029号がリリースされていますね。おめでとうございます。 せっかくなので少し紹介します。 ActiveLdapを使ってみよう 今回のるびまにはRubyLDAPを操作するための便利ライブラリActiveLdapの記事の後編ActiveLdap を使ってみよう(後編)が入っています。 後編では今まではあまり文書化されていなかったフィルタのことや関連性のことにも触れています。全てのエントリを扱うクラスは、知る人ぞ知るのノウハウではないでしょうか。(ActiveLdap付属のサンプルアプリケーションでは使われていますが文書化はされていなかったはず。)LDAPサーバの設定やデータを確認する場合にはLDAP のスキーマ情報を ActiveLdap から参照するあたりの情報が役に立ちます。ldapsearchなどではなく、irbでLDAPサーバの情報を確認できるので、環境構築時やデバッグ時にと

    るびま0029号 - 2010-03-16 - ククログ
    noplans
    noplans 2010/03/21
    Rubyベストプラクティス "少しくせがある印象なので、Ruby初心者の方にはつらいかも"
  • LDD '10 Winter: メールフィルタの作り方 - Rubyで作るmilter - 2010-02-15 - ククログ

    先日、LOCAL DEVELOPER DAY '10 WinterでRubyでmilterを作る方法について話してきました。どのタイミングでどのmilterプロトコルのコマンドが発行されるかについても説明しているので、Rubyではなく(libmilterを使って)Cでmilterを実装する場合にも参考になる部分があるはずです。むしろ、Rubyとmilterの組み合わせについて話している部分は薄めです。これは、Rubyそのものとmilterの仕組みを理解していればRubyとmilterを組み合わせることは容易だからです。 少しgroongaについてもふれています。 それでは、ダイジェストで資料の内容を紹介します。完全版はリンク先を見てください。資料のPDF・ソースもリンク先にあります。 内容 具体的にRubyでmilterを作る話に入る前に、まず、前提となる知識を確認します。 はじめにメール

    LDD '10 Winter: メールフィルタの作り方 - Rubyで作るmilter - 2010-02-15 - ククログ
  • Ruby on Rails Technical Night: Railsで作るActive Directoryと連携した社内システム - 2009-12-15 - ククログ

    株式会社クリアコード > ククログ > Ruby on Rails Technical Night: Railsで作るActive Directoryと連携した社内システム 先日開催された〜Ruby on Rails Technical Night〜 Ruby on RailsセミナーでActive Directoryと連携したRailsアプリケーションの作り方について話しました。 概要 ActiveLdapという社内システムをRailsを使って実現するときに便利なライブラリをデモを交えながら紹介しました。 社内向けのシステムをWebアプリケーションとして実現することは驚くことではなくなりました。Webアプリケーションなので、もちろんRailsを使っても実現することができます。 そのときに避けて通れないのが既存の社内情報との連携です。社内向けのシステムなので、社内情報と密接に連携し、より便

    Ruby on Rails Technical Night: Railsで作るActive Directoryと連携した社内システム - 2009-12-15 - ククログ