タグ

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

  • リーダブルなコードを書く習慣の身に付け方・実践の仕方 - 2021-09-22 - ククログ

    結城です。 2021年9月13日から14日にかけて、東京都立大学の大学院生向け特別講義として「リーダブルコード演習」を実施しました。 演習の内容は、当社でこれまでにも行ってきているリーダブルコードワークショップを、プログラミング経験が比較的浅い・プログラミングの量がまだそれほど多くない方向けに調整した内容としました。 この記事では、実施した演習の概要と、今回意識した点を紹介します。 文が長いため、目次を用意してみました。 発端 演習の構成 座学パート リーダブルなコードを書く意義について リーダブルコードを実践するためにまず取り組むべきこと 実際の現場での「コードがリーダブルでなくなってしまった」「リーダブルになるよう改めた」実践例 最初の実装 リーダブルでなくなった実装 リーダブルさを取り戻すための改修 コードがリーダブルでなくなっていってしまう要因 壊すのが怖くて、見て見ぬフリ 恐怖

    リーダブルなコードを書く習慣の身に付け方・実践の仕方 - 2021-09-22 - ククログ
  • Redmineで高速に全文検索する方法 - 2016-04-11 - ククログ

    Redmineで全文検索するとかなり時間がかかります。 クリアコード社内でもRedmineを使用しており、全文検索が遅いことは以前から問題視していました。 最近Redmineでの全文検索を高速に実行できるようになるプラグインを開発したので紹介します1。 リンク先を見てもらえばわかるとおり、PostgreSQLMySQL(MariaDB)に対応しています。 それぞれPGroongaとMroongaを使用しています。 このプラグインを使うと、デフォルトの全文検索と比較して以下のメリットがあります。 高速 Ruby on RailsでPostgreSQLとPGroongaを使って日語全文検索を実現する方法 PostgreSQLで日語全文検索 - LIKEとpg_bigmとPGroonga Ruby on RailsMySQLとMroongaを使って日語全文検索を実現する方法 MySQL

    Redmineで高速に全文検索する方法 - 2016-04-11 - ククログ
  • Markdownで書いたテキストをPDFに変換して納品用ドキュメントを作成する方法 - 2015-04-27 - ククログ

    色々なテキストを色々なフォーマットに変換できるPandocというツールがあります。 今回は、これを使ってMarkdownで書いたテキストをPDFに変換する方法を説明します1。 環境はDebian GNU/Linuxのsidを想定しています2。 必要なパッケージをインストールします。非常に多くのパッケージをインストールするので時間がかかります。 $ sudo apt-get install -y texlive-full pandoc ruby rake 次のコマンドを実行して動作確認します。 $ pandoc -o test.pdf --latex-engine=lualatex test.md そのままでは日語を含むテキストをPDFに変換できないのでtest.mdには日語を含まないようにします。 これで日語を含まないテキストをPDFに変換できることが確認できました。 日語を含むテ

    Markdownで書いたテキストをPDFに変換して納品用ドキュメントを作成する方法 - 2015-04-27 - ククログ
  • Rubyのテスティングフレームワークの歴史(2014年版) - 2014-11-06 - ククログ

    2014年12月にRuby 2.2がリリースされる予定です1。 Ruby 2.2にはRuby 1.9.1のときに外されたtest-unitというテスティングフレームワークが再びバンドルされる予定です。Rubyのテスティングフレームワーク周りに詳しくない人にはよくわからない状況でしょう。そこで、Rubyのテスティングフレームワークの歴史を説明することで状況を整理します。 名称の整理 この説明の中ではたくさんのテスティングフレームワークが登場します。似たようなものもあるため、最初にテスティングフレームワークの名称を整理します。この説明の中で登場する名称は次の通りです。 RubyUnit Lapidary rubyunit Test::Unit test/unit test-unit miniunit minitest RSpec 違いがわかりますか?ざっくり説明すると次の通りです。 RubyU

    Rubyのテスティングフレームワークの歴史(2014年版) - 2014-11-06 - ククログ
  • メタプログラミングをして割に合うかの判断基準:処理を1箇所に局所化できるか - 2014-01-16 - ククログ

    毎日他の人のコミットをながめる文化で生活していると、理由は浮かばないけど「ん?このコミットはなんか気になる」と感じるようになります。それは、新しいことを知ることができたコミットだったり、真似したくなるようなコードが入っているコミットだったり、なんかまずそうな気がするコミットだったり、様々です。 「ん?」と感じてコミットを見直してみても、何が気になったか自分でもすぐにわからない場合があります。そんなとき、気になったことをコミットした人に伝えるために、コミットへのコメントをまとめ始めます。「コミットした人に伝えるため」というように、他の人に伝えようとすることがポイントです。他の人に伝えるためにまとめようとすると、思いの外なにが気になったかまとまるものです。 今回は、メタプログラミングを使ってコードを整理したコミットで「ん?」と感じたときのことについて紹介します。このおかげで「メタプログラミング

    メタプログラミングをして割に合うかの判断基準:処理を1箇所に局所化できるか - 2014-01-16 - ククログ
  • Fedoraプロジェクトで新規パッケージをリリースする方法 - 2013-04-10 - ククログ

    はじめに 今回は、Fedoraプロジェクトで新規パッケージをリリースする方法を、Cutterをリリースしたときの経験をもとに紹介します。 Cutterプロジェクトでは、従来はFedora向けに独自にリポジトリを用意してRPMを提供していました。しかし、この方法では、ユーザーがCutterをインストールするときにリポジトリを追加登録する手間がかかり、不便でした。 そこで、FedoraでCutterを利用したいユーザーがもっと簡単に導入できるように、FedoraプロジェクトからRPMを提供するようにしました1。 新規パッケージリリースまでの流れ 新規パッケージの公開までの流れについては、Join the package collection maintainersに詳細がまとめられています。 このドキュメントは日語訳もあります。 ところどころ内容が最新版に追従していませんが、参考としては十分

    Fedoraプロジェクトで新規パッケージをリリースする方法 - 2013-04-10 - ククログ
  • groongaをRackに載せて全文検索 - 2009-07-31 - ククログ

    Ruby/groongaのサンプルアプリケーションのデモを用意しました。 クリアコードのサイトを「ruby」で検索 RailsなどのWebアプリケーションフレームワークを使うほどのものではないので、ActiveGroongaは使わずに、Ruby/groongaとRackの組み合わせになっています。Rackについてはyharaさんの5分でわかるRackなどを読んでみてください。 デモはPassengerで動かしています。PassengerにRackを設置したことがある人なら10分もかからずにサンプルを動かせるのではないかと思います。 機能 デモを見てもらえばわかる通り、小さなサンプルですが以下のように一通りの機能は備えています。 複数キーワードによる絞り込み スコア順による並べ替え 検索キーワードの正規化(「Ruby」でも「ruby」でも検索可能) キーワード周辺の文章の表示 それぞれ、もう

    groongaをRackに載せて全文検索 - 2009-07-31 - ククログ
  • コミットメッセージの書き方 - 2012-02-21 - ククログ

    はじめに 「分かりやすいコードを書く」、「コードと一緒にテストも書く」等はソフトウェア開発において大切なことです。しかしそれと同じくらい大切なことして「分かりやすいコミットメッセージを書く」があります。これはあまり着目されていなく、見過ごされていることです。 今回は、コミットメッセージの分かりやすさの大切さ、そして、分かりやすくするための書き方を説明します。 コミットメッセージとその大切さ バージョン管理システムとコミット 現在、ほとんど全てのソフトウェア開発ではSubversionやGitなどのバージョン管理システムを使っています。バージョン管理システムを使うことによるメリットというのは、ソフトウェアの変更が記録されていくことにあります。 具体的なメリットは3つあります。 ソフトウェアの調査がしやすくなることです。現時点でのコードと、そして変更の履歴とを組み合わせることで、それらから非常

    コミットメッセージの書き方 - 2012-02-21 - ククログ
  • サーバ上でPDFやオフィス文書からテキストを抜き出す方法あれこれ - 2010-08-02 - ククログ

    groongaなどを使って全文検索システムを作るときは、PDFやオフィス文書などからテキスト情報を抜きだして検索用インデックスを作る必要があります。Windowsでテキストを抽出するソフトウェアとしてはxdoc2txtなどがありますが、ここでは、Linuxサーバ上でテキストを抽出する方法を紹介します。 PDF Linux上でPDFを閲覧する場合は、昔はXpdfでしたが、最近はEvinceやOkularの方がよく使われているようです。どちらもPDFの処理にはXpdfからforkしたPopplerというライブラリを使っています。 popplerにはPDFからテキストを抽出するpdftotextというコマンドが付属しているため、それを利用してPDFからテキストを抽出できます。 % pdftotext hello.pdf hello.txt これでhello.pdfのテキスト情報がhello.tx

    サーバ上でPDFやオフィス文書からテキストを抜き出す方法あれこれ - 2010-08-02 - ククログ
  • 手元のgemのコードを簡単検索 - 2012-10-18 - ククログ

    最近のプログラミング言語はパッケージ管理システムを持っていることがほとんどです。PerlにはCPAN1がありますし、PythonにはPyPi2がありますし、RubyにはRubyGems3がありますし、Node.jsにはnpm4があります。パッケージ管理システムがあると簡単にライブラリやツールをインストールできるので、手元にたくさんのコードが集まります。そんな手元のコードを簡単に検索できるようにする方法を紹介します。ただし、ここで紹介するのはRubyGemsでインストールしたパッケージのコードを簡単に検索できるようにする方法だけです。他のパッケージ管理システムについては触れません。 ライブラリを使っていて、期待した動作をしないときはどうしますか?まず、ドキュメントを確認することでしょう。ドキュメントを読んでも解決しないときはWebで検索したり、実際にコードを読んでみることでしょう。ここで紹介

    手元のgemのコードを簡単検索 - 2012-10-18 - ククログ
  • シェルスクリプトで「ビルドスクリプト」を作る時に便利なテクニック - ククログ(2012-10-11)

    プログラムの種類によっては、そのまま実行できるものと、実行できるようにするために「ビルド」が必要なものとがあります。Cなどのコンパイルが必要な言語で書かれたプログラムは当然ビルドが必要ですし、コンパイルが不要な言語であっても、インストーラパッケージを作るというビルド作業が必要な場合はあります。 ビルド作業の自動化のためのツールとしてmakeなどがありますが、そこまで格的な事をやる必要がない場合は、シェルスクリプトで「ビルドスクリプト」を作るのが手軽でおすすめです。この記事では、そのような場合に役立つシェルスクリプトのテクニックを4つご紹介します。 エラーの気付きやすさとデバッグのしやすさを高める メッセージに色を付ける シェル関数をライブラリにする 一時的に作業ディレクトリの中に入る エラーの気付きやすさとデバッグのしやすさを高める はじめに紹介するテクニックは問題が発生した時に気づきや

    シェルスクリプトで「ビルドスクリプト」を作る時に便利なテクニック - ククログ(2012-10-11)
  • Ruby ♥ groonga

  • logalimacs 1.0.0 をリリースしました - 2012-06-07 - ククログ

    2012.6.7に logaling-command のEmacs用のフロントエンドプログラム logalimacs 1.0.0 をリリースしました。 Emacsのキーボードショートカットでlogaling-commandを利用できます。 logaling-commandとは logaling-commandは翻訳作業に欠かせない訳語の確認や選定をサポートする CUI ツールです。 対訳用語集を簡単に作成、編集、検索することができます。 使い方 登録したキーボードショートカットを押すことでカーソル位置にある単語を logaling-commandで検索(lookup)しツールチップやバッファに表示します。 logalimacs 0.9.0 から 1.0.0 への変更点 多階層ポップアップを利用するようにしました 以前はpopup.elの機能でツールチップで表示する機能を利用していましたが、

    logalimacs 1.0.0 をリリースしました - 2012-06-07 - ククログ
  • クリアなコードの作り方: 意図が伝わるコミットのしかた - 2012-03-13 - ククログ

    コミットメッセージの書き方ではコミットをわかりやすくするためには以下の2つの条件を満たす必要があると書きました。 コミットの内容が分かりやすく説明されていること コミットの内容が小さくまとまっていること このうち「コミットの内容が分かりやすく説明されていること」についてはすでに説明済みです。今回は「コミットの内容が小さくまとまっていること」について説明します。 めざすところ 単純にコミットの内容を小さくするだけではわかりやすくなりません。それでは、どのような基準で小さくすればよいのでしょうか。 よく言われることは1つのコミットには1つの小さな論理的にまとまった変更だけにする、というものです。たしかにこれは重要です。しかし、これだけを基準とすると、人によっては大きめなコミットになってしまいます。人それぞれで論理的なまとまりの大きさが異なるからです。 1つのコミットでどうすればよいかを考えるの

    クリアなコードの作り方: 意図が伝わるコミットのしかた - 2012-03-13 - ククログ
  • TortoiseGitでOpenSSHの鍵を使う - 2009-07-08 - ククログ

    Subversionでバージョン管理されているソフトウェアの開発をWindows上で行う場合に、TortoiseSVNを使っている人は多いのではないでしょうか。TortoiseSVNはシェル(エクスプローラ)に機能が統合されるため、フォルダ上の右クリックからチェックアウトやコミット、差分の表示などを行うことができ、コマンドライン操作に不慣れな人でも簡単にSubversionを使うことができます。 このTortoiseSVNと同じ使い勝手で分散型バージョン管理システムのgitを利用できるようにするgitクライアントが、TortoiseGitです。 参考:実用レベルに達したWindows向けGitクライアント「TortoiseGit」でGitを始めよう TortoiseGitの導入手順は上記リンク先をご覧いただくとして、ここでは、SSHを使用してリポジトリにアクセスする際の手順を紹介したいと思

    TortoiseGitでOpenSSHの鍵を使う - 2009-07-08 - ククログ
  • デバッグ力: よく知らないプログラムの直し方 - 2011-12-06 - ククログ

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

    デバッグ力: よく知らないプログラムの直し方 - 2011-12-06 - ククログ
  • 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 - ククログ
  • Passenger用Muninプラグイン - 2010-06-14 - ククログ

    みなさんはPassengerの管理下にあるRails/Rackプロセスをどのように監視しているでしょうか。 Muninを使った方法もあり、Dan Manges's Blog - Rails Application Visualization(gist: 20319 - munin plugin for passenger- GitHub)で公開されていたりします。このプラグインはpassenger-statusの結果をグラフ化しています。passenger-statusの結果はこんな感じになります。 ----------- General information ----------- max = 6 count = 3 active = 0 inactive = 3 Waiting on global queue: 0 ----------- Domains ----------- /h

    Passenger用Muninプラグイン - 2010-06-14 - ククログ
  • Ruby 1.8.7/1.9.1どちらでも使えるWindows用バイナリ入りgemをDebian GNU/Linux上で作る方法 - 2010-04-21 - ククログ

    株式会社クリアコード > ククログ > Ruby 1.8.7/1.9.1どちらでも使えるWindows用バイナリ入りgemをDebian GNU/Linux上で作る方法 groongaのRubyバインディングrroonga 0.9.3がリリースされました。rroonga 0.9.3に関することはメーリングリストでのアナウンスを見てください。 rroonga 0.9.3ではWindows用のgemも提供するようにしました。このgemにはgroonga/rroongaのビルド済みのバイナリが含まれているのでビルド環境がないことが多いWindowsでも簡単に使えるようになっています。 さて、このgemですが、1つのgemRuby 1.8.7にもRuby 1.9.1にも対応しています。そもそも、gemにはWindowsや32bit環境などのプラットフォームを指定することはできますが、Rubyのバ

    Ruby 1.8.7/1.9.1どちらでも使えるWindows用バイナリ入りgemをDebian GNU/Linux上で作る方法 - 2010-04-21 - ククログ
  • 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 - ククログ