サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
大谷翔平
kennyj-jp.blogspot.com
概要 githubではPull Requestを送信する時に自動的にIssueも作成されます。 しかし「既にあるIssueにPull Requestをくっつける」という事がしたくなる場合があります。 説明 困ったときのStackoverflowによると、githubはWeb-APIが充実しておりそれを利用すると、実現できるようです。参考ページを参考にするとUnix上でcurlを利用してwebリクエストを送信すると簡単でした。 例 $ curl -k \ -d "pull[base]=master" \ -d "pull[head]=master" \ -d "pull[issue]=1234" \ -u "kennyj:xxxxx" \ https://github.com/api/v2/json/pulls/rails/rails -k SSL証明書の問題?を避ける -d "pull[b
■概要 先日、関西Ruby会議05が開催されました。大変面白く為になる一日でした。実行委員 / スタッフの皆様、スピーカーの皆様お疲れ様です! さて幸運にも、そのイベントで招待講演をさせて頂きました。公での40分・100人超という、私にとっては未体験ゾーンでのプレゼンです。 当日のプレゼンの出来は、自分ではわかりませんが、それなりに工夫をして作ったのは間違いないので、吐き出せるものは吐き出しておこうと思い、このエントリを書きはじめました。 少し長いですがお付き合い頂ければと思います。 ちなみに当日の発表資料はこちらです。合わせて御覧頂けたら幸いです。 ■きっかけ 2013/05/12 12:15。その時私は生駒山麓公園という所で、子供とアスレチックをしておりました。 すると突然、実行委員の @agilekawabata さんからTwitterのDMが届き 「関西Ruby会議(08/31)に
今日参加させて頂いたKobe Rubyist Meetup 1stで話題になった、 ActiveRecord::Core.generated_feature_methods の意味が良く分からない問題を追跡してみました。 ■疑問 @sutetotanuki さんより下記のコードの意味が分からないとの質問がありました。 以前から私も良く分からないコードだな~と思っていたのですが、理由を良く知りませんでした。 97 def generated_feature_methods 98 @generated_feature_methods ||= begin 99 mod = const_set(:GeneratedFeatureMethods, Module.new) 100 include mod 101 mod 102 end 103 end moduleをその場で生成しincludeしている
言わずと知れた、apacheのmod_rewriteエンジンですがRewriteCondとRewriteRuleの記述方法にはまってしまいました。普通の書き方は他に任せるとしてハマったポイントを書いておきます。 ■RewriteCondは直後のRewriteRuleのみに適用される。 RewriteEngine On RewriteCond %{HTTP_REFERER} $^ …① RewriteRule ^/foo/(.*) /foo2/$1 [L] …② RewriteRule ^/bar/(.*) /bar2/$1 [L] …③ 上記の様な設定の時に①は、②にも③にも効きそうですが、実際には②にしか効きません。 だからリファラーがあっても、barはbar2にリダイレクトしてしまいます。 ③にも効かせるには、(冗長ですが)下記の様に書く必要があります。 RewriteEngine O
@satomicchyさんに誘って頂き、2012/12/14日15日とRails Girls Kyotoにコーチとして参加させて頂きました。 とても良いイベントだったので、スポンサー、オーガナイザー、コーチ、スタッフの皆様、そして何より参加頂いた皆様に感謝感謝です。 当日の雰囲気はこちらから。信じられないぜ、これがITのイベントだなんて! ↓懇親会にてケーキを撮る風景 ■コーチ業について 14日のインストールデーは、windowsチームを担当しました。 RailsInstallerを利用すれば、意外な程簡単にインストール作業は終了しました。 railsが少し古いのでアップデートしたい心を押し留めたのですが、良く考えたらmacとはバージョンが違うはずなので、アップデートしておいても良かったかもしれないなと思いました。 gem install rails --no-ri --no-rdoc と
■概要 ひょんな事から、sqliteでの全文検索について調べました。 すると全文検索用に、fts3/4指定ができる事を発見したのですが、予想通り"スペース"での、単語区切りしかできないようです。 日本語を処理したかったので、自分でn-gramしたデータを登録してテストしてみました。 確かに高速に検索できます。 ※ MeCabを利用したtokenizerとかはandroidでの利用を考え考察していません。 ■テストデータ 郵便番号データを下記からダウンロードしました。 http://www.post.japanpost.jp/zipcode/dl/kogaki.html 全国版データを利用しました。 ちなみにcentos6.xではlhaコマンドを入手できなかったので、http://d.hatena.ne.jp/pcmaster/20100211/p3 を参考にインストールしました。 $ lh
SELECT文を考える時、何となくjoinやgroup byとか使ってませんか?もしくはメインとなるテーブルを意識していますか? SELECT文は非常に便利なので気づかないのですが裏で実行されている事は(非常に簡単に言うと) ・縦*横の二次元の表を付きあわせ、新たな縦*横の二次元の表を作成 しているだけなのです。 その際に、一行の粒度が変わる事に注意が必要です。多重度が大きい側にjoinすると、自ずと一行の粒度が変わってしまう(行が増えてしまう)為、初心者のうちは自分が何をしているのか分からなくなります。 例えば次のER図があり、 最終的に次のような表が欲しい場合、どういうSQLを書きますか? 私は概ね次のステップでSELECT文を考えます。 ・最終アウトプットの一行の粒度を確認する。 この場合注文明細の行数が最終アウトプットの行数と同じ ・その粒度にあったテーブルをメインの表にする。 f
■概要 さくらvpsを新プランに乗り換えたので、またまた"rails自体"の開発環境を作ります。 ■パッケージ管理・導入(centos6.2 x86_64 2Gプラン) ○パッケージの最新化 # yum -y update (yum -y upgrade) ○必要そうなパッケージをインストール # yum -y install git nmap telnet # yum -y install screen zsh (# yum -y install httpd httpd-devel) # rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm # yum --enablerepo=remi,remi-test -y install mysql mysql-server mysql-devel # yum -
■概要 職業がら、顧客と会話しデータベースの論理設計をする事が良くあります。 自分で設計する分には良いんですが、他人が設計した物を効率的にチェックする為に備忘録がてら記載しておきます。 ちなみに当方は「渡辺幸三さんの著作」と「アナリシスパターン」の影響を一番受けています。 ■チェック項目 ○キーについて ・データの一意性が、利用者(顧客)と意識があっているか ・PKの無いテーブルはないか ・UKが明示されているか ・多すぎる複合キーはないか ・自然キーとサロゲートキーを意識できているか ・ID / コード・番号を使い分けているか ・FKを意識できているか ・FK/区分との使い分けは考えられているか ・属性項目のドメインを規定する物なので使い分けの基準が重要 ○属性について ・ドメイン管理を意識して属性名を付けているか ・継承項目、導出項目が明示されているか ・継承・導出ルールが明示・意識さ
rails3.1.x以降でassets pipe lineを利用する際に、assetsの提供を別サーバにしたい場合は下記の手順で実施する必要があります。 config/environments/production.rbを編集する。 config.assets.compile = falseにする。 config.action_controller.asset_host = "http://www.example.com" として提供サーバを設定する。 開発マシンでrake assets:precompileを実行する。 サブディレクトリ配下におきたい場合は、RAILS_RELATIVE_URL_ROOT=/fooの様に環境変数で指定する。 manifest.ymlだけコミットする manifest.ymlがあれば論理名をハッシュ付き名に変換可能。 public/assetsは無視リストに
■概要 久しぶりの更新になります。最近はもっぱらgithubでの活動がメインになってしまいました。 色々なコントリビュータとやりとりをしていると「この人は現地で今何時なんだ?」と思う事が増えました。という事でまずコントリビュータがどこにいるのか調べてみました。 ■説明 さてどうやったら調べられるか考えたのですが下記のステップでデータを作成しました。 github APIを利用して、rails contributorsをリストアップします。 https://api.github.com/repos/rails/rails/contributors github accountの束が手に入るので、こちらもgithub APIを利用して、profile情報を取得します。 例えばDHHなら、https://api.github.com/users/dhh 2. で取得した情報を良く見るとlocat
方式設計小話。 webシステムを開発し、本番運用に至る過程で、下記のうち最低2つの環境があるのではと思います(所属している組織によって呼び方は色々変わるかと思いますが)。 ・個人開発環境 ・結合環境 ・ステージング環境 ・本番環境 上記の様に複数の環境があるにも関わらず、予算の都合上、「本番のみ複数台の冗長化構成。フロントにロードバランサー」という構成が多いのではと思います。そしてこの事実の与えるインパクトを過小評価してしまいトラブルが起こる場合があります。 ロードバランサー&冗長化というキーワードを聞いた場合は、下記を必ず早期に確認しなければいけません。 No.1 セッション情報の引継ぎ。ロードバランサー担当者にお願いする事項は無いか No.2 SSL通信の解除はどこが行うか? No.3 どうやってhttp/httpsを見分けるか? No.4 サーバ名は正しく返せるか? No.5 ファイ
■概要 junitの網羅率測定する為に、coberturaを利用する事が多いと思います。 # 当方久しぶりにjavaを触ったので最近のトレンドにはとんと疎くなりました。もっと良いのがあれば教えてください。 しかしこれが猛烈に遅い!軽快に進めたいのですが、ネックになりそうなので調査しました。 ■解説 coberturaの実行はantから行っています。通常 1. コンパイル 2. instrument (coberturaを埋め込む) 3. junit実行 の順番で実行する事になりますが、 3. が非常に遅いのです。 3. の実行は <junit fork="yes" dir="${basedir}"> <classpath location="${instrumented.dir}" /> <classpath location="${classes.dir}" /> <classpath
最近blogの更新が途絶えがちですが、githubが面白くて(汗)... 先日、ruby on rails 3.1.2と3.1.3が矢継ぎ早にリリースされたのですが、実は関与者の一人だったりします。自戒の意味もかねて、経緯とかを書いておきます。 ・2011/10/31 無作為に選んだissueを直そうと思った。 このissueを調べ始めたのですが、 色々調べてみるとmysqlのdescribeの問題という事が判明し、結果的にschema dumperの出力がバグってるという事が分かった。 そこで、describeを使わない形(informationスキーマを利用)で修正した。 ・2011/11/06 master/3-1-stableにマージされた。 その後やりとりがあって、直ってよかったねという事で取り込まれた。 ・2011/11/18 rails 3.1.2がリリースされた。 そりゃま
■概要 こちらの素晴らしい記事では、capybara-webkitを利用して、headlessでjsが動く環境を紹介されています。 capybara-webkitのこれまでリリースされているバージョン(~0.5.0)では、capybara1.0.0系への依存が解決できない為、抗う方法をご紹介されています。が、0.6.0からは上手く依存関係を解決されるようになりました! ■手順 こちらと同様ですが、Xvfbとqtの当たらしいバージョン(qt47)をインストールしておきます。 qt47にする理由はphantomjsも動かしたいからです ^o^ $ sudo yum -y install firefox ★ seleniumで動かす必要があれば $ sudo yum -y install xorg-x11-server-Xvfb xorg-x11-fonts* $ sudo vim /etc/y
$ vim spec/spec_helper.rb ruby1.9.2でrcovを正しく動作させる為に、下記を一番下に追加 # quick monkey patch for rcov # http://codefluency.com/post/1023734493/a-bandaid-for-rcov-on-ruby-1-9 if defined?(Rcov) class Rcov::CodeCoverageAnalyzer def update_script_lines__ if '1.9'.respond_to?(:force_encoding) SCRIPT_LINES__.each do |k,v| v.each { |src| src.force_encoding('utf-8') } end end @script_lines__ = @script_lines__.merge
railsのviewはレイアウト機能があり、画面の共通化が可能です。 ・画面のイメージ・レイアウトを共通化する ・メニューを表示する ...etc 非常に便利な機能ですが、「サイト全体で画面のイメージを共通化しつつ、XXX機能でも共通のレイアウトにする」事が簡単にはできないと思っていました(レイアウトの二重適用)。 ところがRuby on Rails Guidesに実現方法がのっていました。非常に簡単なのでご紹介しておきます。 ■application.html.erb (全体的な共通レイアウト) <html> <head> <title><%= @page_title or 'Page Title' %></title> <%= stylesheet_link_tag 'layout' %> <style type="text/css"><%= yield :stylesheets %>
■概要 capybaraとwebkit(たぶんselenium)を利用する際は、capybara側がブラウザとやりとりする為のスレッドを立ち上げる為 RSpec.configure do |config| ... config.use_transactional_fixtures = false end してfixtureのトランザクション制御をあきらめる必要があります。これでは少し都合が悪いので、 DatabaseCleanerを利用して代用する等行う必要があります。 ところがrailsコアチームのjosevalim氏が解決策をぼそっとつぶやいてました。実際にやってみると上手く動くだけでなく実行速度がかなり改善されました。 ■解決策 つぶやきで紹介されている方法は非常に簡単です。 spec_helper(test_helper.rb)で下記の用に追記しましょう。 RSpec.config
■概要 railsは従来modelで入力チェックを行ってました。#saveメソッドを呼び出し時に、#valid?メソッドが呼び出される事により、入力チェックを行っている人が多いのでは無いでしょうか? ただし、この仕様は、たまに上手く行かない時があり、「XXという画面ではYYの入力チェックだけしたい」というニーズに答えるにはあまり良い方法がありませんでした(泥臭い方法で解決する)。 ところが、先日railsのソースを読んでいると activerecord-3.1.0/lib/active_record/validations.rb def valid?(context = nil) context ||= (new_record? ? :create : :update) output = super(context) errors.empty? && output end とcontext
railsを始めて触った時は、圧倒的に簡単に利用できるautocomplete機能に驚かされたものです(あ~懐かしい。。)。 あるバージョンからautocompleteはplugin側に外れたのですが、rails3時代にはどのplugin(gem)が利用されているんでしょうか? rails3.1からはjqueryが標準になったので、rails3 - jquery - autocompleteという切り口で探してみました。 すると、そのまんまなgemがありました。 https://github.com/crowdint/rails3-jquery-autocomplete ■インストール Gemfileに gem 'rails3-jquery-autocomplete' でinstall $ bundle install 次にコード生成して rails generate autocomple
■概要 (激しく既出感ありですが。。)何年もrailsやってますが、正しく理解できていなかった事の一つに rake spec(test)すると、処理の一環としてdb:test:prepareタスクを呼び出す という挙動があります。 通常問題にならないのですが、db:test:prepareが、db/schema.rbの情報を元にデーターベースを作成する為、railsが認識できないような項目は抜けて落ちてしまいます。 関数適用したインデックス トリガーやファンクション 別スキーマに作ったオブジェクト ...etc なので RAILS_ENV=test rake db:drop RAILS_ENV=test rake db:create RAILS_ENV=test rake db:migrate してからrake specする事を前提に、db:test:prepareを呼び出さずにspecを
■概要 rails on oracle でいくつかのテーマで検証してみます ●fetchループ module FetchTest SQL = "select p1.* from posts p1 cross join posts p2" def self.run Post.delete_all 200.times do |i| Post.create(:title => "title_#{i}", :body => "body_#{i}") end open("test.txt", "w") do |f| # ① Post.find_by_sql(SQL).each { |r| f.write "#{r}\r\n" } # ② Post.connection.raw_connection.exec(SQL) { |r| f.write "#{r}\r\n" } end end end Fe
■概要 rails3.0.9・nginxの組み合わせで、apacheでのX-Sendfile相当の事が実現したく検証しましたが、これまた少しはまりました。 ■答えまでの道のり config/environments/production.rb を見ると # Specifies the header that your server uses for sending files config.action_dispatch.x_sendfile_header = "X-Sendfile" # For nginx: # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' という記載があるので、上をコメントアウトし、下をコメント外せば、OKと思ったのですが甘かったです。。上手く行かずエラーが出ます。 nginxのドキュメント
■概要 rubyにおけるテスト網羅率の定番ツールといえばrcovですが、どうもテストの通っている箇所の色付けがおかしいのと網羅率に誤差があると感じてました。 よくよくgithubのrcovのページを見てみると、 NOTE: This fork does not work on Ruby 1.9.x. For coverage on Ruby 1.9 look at SimpleCov. Even if you get results on 1.9 they will probably be inaccurate. Ruby 1.9 has call detection built in for faster, more accurate results. なんて書いてあります。という訳でSimpleCovを試してみました。 なおこちらで簡単にセットアップできるシェルスクリプト置いてます!
■概要 rails3.0.9・unicorn・nginxの組み合わせで、subディレクトリにアプリケーションをデプロイしようとすると、少しはまったのでメモを残しておきます。 ■設定方法 http://ホスト名/foo 以下にアプリをデプロイしたい場合... ○unicorn unicorn_railsを実行する際に--pathを渡します。 例) $ unicorn_rails -c config/unicorn.rb -E production -D --path /foo ○nginx passengerと同じくDocument Root直下に、subディレクトリ名でpublicへのシンボリックリンクをはればOKです。またlocation設定はsubディレクトリ毎に設定するのが良い感じでしょうね。 例) $ ln -s /path/to/foo_root/public /var/apps
■概要 railsをoracleで接続したい人はあまり多くないと聞いた & 最近の情報があまり見当たらないので、ニッチな人向けに纏めておこうと思います。 ■Oracle XEのインストール まずはサーバ側。既に何らかのOracleが存在する場合はここはパスして下さい。 ・http://www.oracle.com/technetwork/database/express-edition/downloads/102xelinsoft-102048.html ここからoracle-xe-univ-10.2.0.1-1.0.i386.rpm をダウンロード ※アカウントが必要なので先に登録して下さい。 ※今日(2011/06/28)調べたらOracle XE 11.2 betaなる文字が!! ・↑をインストール $ sudo rpm -ivh oracle-xe-univ-10.2.0.1-1.
※この記事はrails3.0に対する記事です。rails3.1はこちらをご覧下さい。 何度も同じ事しているので貼っておきます。 ./gen.sh アプリ名 で利用できます(ノーエラーハンドリング上等!) ●2011/08/15追記 rcov => simplecovに変更し、ci_reporterを追加しました。 $ cat gen.sh
■概要 年初にbackbone.jsの調査をしていた頃は、ajaxで画面遷移を行うには、fragmentを利用する事しかできませんでした。 しかし0.5以降では、Backbone.Routerを利用する事によって、pjax(HTML5のpushStateを利用した話題のあれ)な画面遷移が出来るになっています。 pjaxについては、こちらをご参照ください。 またgithubのファイルブラウザはpjaxの良例として有名なのでチェックしてみて下さい。
■概要 先日、関西Ruby会議05が開催されました。大変面白く為になる一日でした。実行委員 / スタッフの皆様、スピーカーの皆様お疲れ様です! さて幸運にも、そのイベントで招待講演をさせて頂きました。公での40分・100人超という、私にとっては未体験ゾーンでのプレゼンです。 当日のプレゼンの出来は、自分ではわかりませんが、それなりに工夫をして作ったのは間違いないので、吐き出せるものは吐き出しておこうと思い、このエントリを書きはじめました。 少し長いですがお付き合い頂ければと思います。 ちなみに当日の発表資料はこちらです。合わせて御覧頂けたら幸いです。 すると突然、実行委員の @agilekawabata さんからTwitterのDMが届き 「関西Ruby会議(08/31)にて講演どうですかー?」 ときたので 「お、イイですね!させて頂きます。」 と軽い気持ちで答えてしまいました。 その時、
次のページ
このページを最初にブックマークしてみませんか?
『kennyjのブログ(仮)』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く