おもしろwebサービス開発日記

Ruby や Rails を中心に、web技術について書いています

「Rails5.1時代のアプリケーション開発」というテーマで発表した

昨日「Rails5.1時代のアプリケーション開発」というテーマで発表しました。 MedBeer -Rails 5.1での開発について- - connpass スライドはこちら。内容的には、web開発難しいので頑張って勉強していきましょうというメッセージになっています。若干エモ寄り。…

ActionCableでフィーチャスペックを書く

最近自分の作っているサービスにActionCableを導入しました。そこでフィーチャスペックを書いていくつかハマったので内容を共有します。 使っているのはcapybara & poltergeistです。 Capybara.serverをpumaにする Capybaraのデフォルトのサーバは、ざっと見…

rspec-style-guideの英語版ができた

先日のRails Developer Meetupで発表したrspec-style-guideですが、ありがたいことにPull Requestをいただき英語版ができました。 rspec-style-guide/README_EN.md at master · willnet/rspec-style-guide Pull Requestしてくれた@gazayasさんありがとうござ…

ぎんざRuby会議を開催します

毎月第三火曜日に開催しているginza.rb、開催を始めてからかれこれ4年になります。このままいくと8月にはなんと第50回のミートアップをむかえることに。というわけで拡大版を開催することにしました。 ぎんざRuby会議です。 公式サイトにも気合が入っていま…

Rails Developers Meetup で綺麗なテストコードの書き方について発表した

昨日のRails Developers Meetupで綺麗なテストコードの書き方について発表してきました。 Rails Developers Meetup #1(東京会場) - connpass 資料はこちら 余談 もともと数年前くらいから、テストコードの書き方についてまとめたいなーと思っていたのです…

メドピア開発者ブログに寄稿した

お手伝いしているメドピアさんのブログに、Railsのコード可読性を保つための知見の一つであるform objectについて寄稿させていただきました。 form objectを使ってみよう - メドピア開発者ブログ 最近は技術顧問として複数社のエンジニアに対して、主にRails…

株式会社ウィルネットを設立した

いわゆる法人成りです。 かっこいい会社の名前が全然思いつかず*1、結局ハンドルネームを採用しました。このブログのタイトル(おもしろwebサービス開発日記)もだいぶアレな感じで、自分の命名センスの無さに震えますね>< 単に名義が変わっただけで、特に何…

ソフトウェア開発者採用ガイドを読んだ

読みました。自分はフリーランスなので直接誰かを採用することはないですが、お手伝いしている会社の方に「どうやったらいいwebエンジニア採用できますかねー?」と聞かれることがよくあるので、そのヒントになるかなと思い。 ソフトウェア開発者採用ガイドp…

Rails 5.x について発表した

昨日開催された、Increments ++ Tech TalkにてRails 5.xというタイトルの話をしました。 内容はWEB+DB PRESSの連載ではページ数の関係で載せられなかったRails 5.0のトピックと、Rails 5.1で入る(入りそう)な機能の話です。分量が多くなってしまい、いろいろ…

WEB+DB PRESS でRubyの連載を始めます

今月の24日発売のVol 93から、WEB+DB PRESS で Ruby の連載をすることになりました。よろしくおねがいします。 初回の題材は、みんな大好き Ruby on Rails の最新バージョンである Rails 5 です。もうじき正式リリースとなる Rails 5 にどんな機能が追加され…

ロシアンドールキャッシュでN+1を解決する

youtube に DHH がしゃべっている動画があったので観ました。 The Complete Guide to Rails Performance という、Railsのパフォーマンスを改良するノウハウが書かれた本のコンテンツ*1の一つらしく、DHH に Rails のパフォーマンスについてインタビューをし…

ginza.rb 第33回で Rails 5 の新機能について学んだ

3/15は ginza.rb の33回目のミートアップでした。 Ginza.rb 第33回 もうすぐやってくる!Rails 5を見ておこう - Ginza.rb | Doorkeeper 前回のミートアップ時に、きっと Rails 5.0 がリリースされているだろうと思い Rails 5.0 をテーマとして設定しましたが…

iosアプリ開発時に実機とローカルサーバを通信させるための快適な設定方法について

iOS アプリ開発をしている時に、web上のサーバではなく、ローカルマシンのサーバと通信させたくなる状況はよくあるかと思います。僕はまず次のようなコードを書いて、さらにコンパイラ用のフラグに -D DEBUG と設定することで対応しました。 #if DEBUG let h…

Rails::API について発表した

FiNC さんの社内マイクロサービス勉強会と、表参道.rb にて、そろそろリリースされそうな Rails 5 におけるメジャーフィーチャの一つ Rails::API について話しました。 雑感 スライド読むと分かるように、Rails::API は API サーバを作る時の銀の弾丸でもな…

DroidKaigi2016に参加した

DroidKaigi 2016 に行ってきました。 おそらくブログには書いていなかったのですが、1年ほど前に RubyMotion で Android アプリを開発したことがあります*1。それ以来、あまり Android 開発トレンドのキャッチアップができていなかったので、ここらで遅れを…

権限管理のgemで良いのはどれ?

昨日は ginza.rb 31回目のミートアップでした。 Ginza.rb 第31回 ユーザの権限管理どうしてます? - Ginza.rb | Doorkeeper @kyuden_ さんに、現状の二大認可 gem である cancancan や pundit、それらの問題点を解決するために作った banken について発表し…

rails-assets の調子が悪い時の回避策

皆さん、rails-assets は使っていますか? rails-assets は、Gemfile で js や css のライブラリを指定して、バージョン管理や依存の解決などをしてくれるとても便利なサービスです。 しかし最近ではその役目を終えたとして、最大で今年末でサポートを終了す…

Lotus についての雑感

今回の ginza.rb ミートアップで、Lotus と呼ばれる、Ruby製フレームワークについて学びました。 ginzarb.doorkeeper.jp @y_yagi さんが概要を資料にまとめてくれたので、それに沿って特徴や機能について理解を深めつつ、気になることについてワイワイ話しま…

最近のお仕事について

ここ半年ほど、Clinical Platform さんのお手伝いをしています。最近エンジニア募集を開始したので、どんな感じでお仕事を進めているかを簡単に紹介しようと思います。 作っているもの クリニック向けのクラウド電子カルテです。 Ruby や Rails のバージョン…

Rails 4.2 で postgresql を使う場合の注意事項

Rails 4.2 では、DB の string 型が255文字制限ではなくなりました。もともとあまり意味がなかったらしいです(詳しい人補足求む)。対象は postgresql と sqlite で、mysql は対象外です。 PostgreSQL, remove varchar limit. by senny · Pull Request #14579…

Rails で fat model を避けるための、あまり知られていない方法について

このエントリで書いた内容は、ほぼ Growing Rails Applications in Practice の内容が元になっています。英語ですが、ここで挙げた内容以外にもコードを綺麗に保つテクニックが書かれており、かつページ数も少なく読みやすいです。コードを綺麗に保つのが好…

iphone のカメラを修理した

iphone6 plus で写真を撮るときに、フォーカスが合わずにぼやけた写真しか撮れなくなってしまいました。 ググるとどうやらハードウェアの不具合の模様。 iPhone 6 Plusのカメラのピントが合わない不具合が発生 - 非天マザー by B-CHAN ジーニアスバーに持っ…

nested attributes なレコードを、特定の属性が空の時に削除する

nested attributes なレコードを削除したい場合、accepts_nested_attributes_for に allow_destroy: true オプションを渡すと削除可能になります。削除するには、対象となる対象に { _destroy: 1 } のようなパラメータを渡します。 これを踏まえて素直にフォ…

ActiveJob はまだちょっと使うには早いかも

Rails 4.2 から導入された ActiveJob は、sidekiq や resque などのバックグラウンドジョブ系 gem を、同じ利用方法で扱えるようにしてくれます。 これは便利だなーと思い、sidekiq を ActiveJob を通じて使ってみたのですが、しばらく使った後に「まだ本格…

色彩検定2級を受けてきた

6月28日(日)に色彩検定2級の試験を受けてきました。 色彩検定協会/カラーコーディネーター webサービスを作るときに、どんな色を使ったらキマるのか全然わからず適当に勘で決めていたのですが、色彩検定の勉強をする中である程度のセオリーをつかめた気がし…

プロフィールサイトを作った

先日ブログをはてなに戻したのですが、はてなブログはいわゆる naked ドメインに対応していないため、ドメインを willnet.in から blog.willnet.in に変更しました。 結果として willnet.in が空いてしまったので、プロフィールっぽい感じのページとして利用…

はてなに出戻りました

3年ほど Lokka + heroku でブログを書いていましたが、この度はてなに戻ることにしました。 もともと Lokka を使おうとしたのは、 markdown が使いたかった 自分でカスタマイズしたかった という理由からでした。 しかし 1 については今のはてなブログでは普…

find_by_sql したレコードで preload する方法

どうしても AR の query methods だけでは要求を満たせない場合の最後の手段として、find_by_sql メソッドがあります。皆さんよく使ってると思うのですが、戻り値のレコードからさらに association をロードしようとすると N+1 になるケースがあります。かと…

Rails で DB の Time 型を扱う

Rails では、DB の Time 型 を扱うことができます。これは日付を必要とせず、時間だけを格納したいときに使います。 定義方法は、他の型と同じく add_column メソッドなどで time を指定するだけです。 add_column :users, :lunch_time, :time ただ、これを…

ゆるデブ合宿で島根に行ってきた

ひょんなことから島根の自治体の方と知り合いになり、島根県が企業やコミュニティの合宿を誘致しているという話を聞きました。 合宿またやりたいなあ。島根まだ行ったことないし行ってみたいなあ。という気持ちからゆるデブのメンバーに相談したところ、反応…

LOCAL Community Summit 2015 で ginza.rb について LT した

LOCAL Community Summit とは、 地方の技術者やコミュニティの取り組みを、地元だけではなく東京で発表してみよう! 私達の地域の楽しさを、他の地域の技術者にも伝えよう! 地元を離れ首都圏で活躍している技術者や、いろんな地域のコミュニティと繋がろう…

Rails でセッションの有効期限を延長する

config/initializers/session_store.rb で次のように設定する Rails.application.config.session_store( :cookie_store, key: '_hoge_session', expire_after: 1.month ) Rails のドキュメントや railsguides で全然見つからなかったのはなぜなのだろう…。 …

最近の Rack サーバ事情について

先月、heroku の推しサーバが unicorn から puma に変わったという発表がありました。unicorn だとスロークライアントの影響を受けやすいというのが理由なようです。 もう少し詳しく調べてみましょう。 そもそもスロークライアントってなに その名の通り遅い…

RubyMotion Android で、Java のクラスをRubyで継承するときの落とし穴

自分用のメモ。RubyMotion 3.3。 前提 RubyMotion では Java のクラスを Ruby で継承できる ただ、その際はコンストラクタだけは Java で書かないとダメ Manuals | RubyMotion の 2.5 参照のこと 単純にコンストラクタを書く用途以外に、「現行のRubyMotion…

第19回 ginza.rb ミートアップ

第19回目の ginza.rb ミートアップを開催しました。 Ginza.rb 第19回 だれが一番?Railsアプリサーバ徒競走!&Ruby2.2について話そう - Ginza.rb | Doorkeeper raptor と rhebok のパフォーマンスをみる 第17回ミートアップ で、Rack サーバの比較をしまし…

pry-remote について

Pow などを利用して開発を行う際に、pry-remote は欠かせないツールです。 binding.pry_remote でブレークポイントを設定し、コンソールで pry-remote コマンドを使うと pry のようにデバッグができます。 しかし、pry-byebug の 2.0.0 になってから、pry-re…

refile というファイルアップロード用 gem がよさそう

File Uploads with Refile | GoRails を見ての感想文です。 carrierwave の作者が作った後継 gem refile がなかなかよさそうな感じです。 S3へのブラウザからの直接アップロードのサポート サムネイルの動的生成サポート アップロード時じゃなくて、ブラウザ…

このブログのデザインをBootstrap 3.3.1 にした

このブログは lokka & heroku で動いています。lokka の theme を Bootstrap 2.1系 で作っていたのですが、このたび最新の 3.3.1 にしました。 メンテがダルいのではてなブログに出戻りたい気持ちがあるのですが、既存の記事をうまく移行する方法が思いつか…

SendGrid 使うときの注意点

Rails で、text.erb 形式のみでメールテンプレートを作った場合は、テキストメールになるはず。でもなぜかHTML形式で受信してしまう…。 調べたら、使っているメール送信用のサービスSendGridのデフォルトの設定に、テキストメールをHTMLメールに変換して送る…

Gimei が住所対応しました

@miyohide さんの協力により、ランダムで日本人の名前を返す gem Gimei が住所に対応しました。次のようにすると、それっぽい住所を返します。 address = Gimei.address address.kanji # => 岡山県大島郡大和村稲木町 address.to_s # => 岡山県大島郡大和村…

第17回 ginza.rb ミートアップで Rack サーバについて学んだ

昨日、第17回目の ginza.rb ミートアップを開催しました。 Ginza.rb 第17回 二本立て!Rackサーバ比較&Awesome Ruby - Ginza.rb | Doorkeeper Rackサーバ比較 Rackサーバに関する記事をいくつか読んで感想を話していたら1時間あっという間にたってしまった…

railsにおけるformatの取り扱いについて

respond_to についての以下の記事を読んだ。 respond_to without all the pain - Weissblog 詳しくは原文見て欲しいけど、用意していないフォーマットにアクセスされたときにどのように振る舞うかについて書かれている。 これまで、用意していないフォーマッ…

渋谷Ruby会議でginza.rbの話をした

今日開催された渋谷Ruby会議で、コミュニティトークとして ginza.rb のこれまでの取り組みの紹介をさせていただきました。なんと30分の枠をもらっていたので、スライドの内容だけでは大幅に時間が余り、残りの時間で前回のginza.rbミートアップでやった「Rai…

パーフェクトRuby on Rails の epub版、kindle版がでます

kindle 版は今日から、epub 版は明日(11/1)から購入できるようです。これまで、紙なので購入をためらっていた方はどうぞこの機会にお買い求めくださいm(__)m パーフェクトRuby on Rails | Gihyo Digital Publishing パーフェクトRuby on Railsposted with am…

デザインビギナーズの取材記事が掲載された

僕が主催しているコミュニティの一つに、デザインビギナーズという、デザイン初心者たちが集まってデザインを勉強するものがあります。 そんなデザインビギナーズのミートアップに、Geekroid(仮) さんから取材が入りました。自分がやってる活動が、こんな…

heroku 用の DNS を PointDNS に変更した

heroku はデフォルトでは naked domain (サブドメインがないドメイン)は使えません。おそらく EC2 の制約?のはず。DNS によっては抜け道があるのですが、route53 では回避ができません。 route53 だと、現状では「naked domain にアクセスしたら www のサブ…

RubyHiroba 2014 で飛び入りLTした

RubyHiroba 2014 にて、pronto という、Hound っぽいことができる gem の紹介をしました。Hound って何?という方はこちらのエントリを参考のこと。 HoundCIでリポジトリに番犬を飼おう - blog.takuyan.com pronto はとてもよい gem なのでブログにかかなき…

ゆるふわ Development Club というサークルができた

僕は個人でコツコツとwebサービスを作っているのですが、実際はチームで開発するほうが好きです。GitHub 上でミサワや寿司ゆきを貼ったり、チャットで機能の相談をしたり、雑談したりしながら開発を進める。やったことがある人なら、きっとその楽しさを理解…

nuhack に参加した

nuhackというハッカソンイベントに参加してきました。経緯やどんな感じのイベントだったかは一番下のリンクから辿っていただければわかると思います。 所感 至れり尽くせり。 ピクシブさんからの会場&フリードリンク&フリーお菓子の提供。欧文印刷さんから…

bundler で特定のパスに gem をインストールするべきか否か

みなさんはどうしていますか。個人的には、ローカルの開発環境であればグローバルにインストールしちゃっても問題ない気がしてきています。 ずっと習慣で bundle install —path vendor/bundle ってしてたけど、別にグローバルな感じでインストールしちゃって…