Rails で RESTful Web API をシンプルに保つ設計

Rails で RESTful な Web API を作る場合、色々な方法があると思います。 今回、私が API を作るときによくやっている設計をブログに書いてみます。 コード 説明するより、コードを見てもらった方が早いと思うので、コードを書く。 # config/routes.rb names…

gemのバグを踏んだときにどうやって立ち向かうのか

最近、 colszowka/simplecov のバグを踏みました。 こうやって 不運にもバグを踏んでしまった 運よくOSSに貢献できるチャンスを得てしまったときの原因調査の方法などを紹介します。 今回のバグ simplecov はカバレッジ率を計測するgemで、以前から便利に使…

rubocop v0.35.1 でruby 2.3のSafe navigation operator(&.) を使うとunexpected token tDOTが発生する

タイトルの通り、 &. を使うとエラーが出てたので対応方法を紹介します。 Inspecting 1 file E Offenses: app/models/user.rb:11:21: E: unexpected token tDOT user.piyo if user&.admin? ^ 1 file inspected, 1 offense detected 対応 1 bbatsov/rubocop …

rake notesを使ってTODOが多くなったらCIで検知する

コード内で長い年月熟成されたTODOに頭を抱えているRailsエンジニアの方々、お疲れ様です。 これ以上のTODOが生まれないように、CIで検知するためのコード書いたので、参考にどうぞ。 参考 rails/source_annotation_extractor.rb at master · rails/rails ht…

GitHubのPull Requestを簡単にチェックアウトするたった1つの方法

みんな知ってるものだと思ったけど、あまり周りで知ってる人がいなかったのでブログに書いた。 こういう釣りタイトルっぽいブログ、一度書いてみたかった。 参考 Checking out pull requests locally - User Documentation 参考というか、そのままだけど。 …

ActiveRecord::Callbacks をfactory_girlで綺麗にstubする方法

ActiveRecord::Callbacks は便利なのですが、テストでモデルを作るたびにメール送信の処理が動いたり、別モデルが生成されると困る。 このあたりをthoughtbot/factory_girlを使って綺麗に書く方法を紹介します。 コード FactoryGirl.define do factory :user…

Railsで開発しているときにrakeのデフォルトタスクを [:rubocop, :rspec] にする

小ネタ。 Rakefile if Rails.env.development? require 'rubocop/rake_task' RuboCop::RakeTask.new task(:default).clear task default: [:rubocop, :spec] end rspec/rspec-railsによって、defaultが指定されているので一度削除してから再設定してます。 …

OmniAuthを拡張して、ストラテジの一覧を取得する

intridea/omniauth はFacebook, Twitter, GitHub, など色々なストラテジに対応しています。 List of Strategies を見ると、とても多いのが分かると思います。 OmniAuth.strategies 自分のアプリで対応しているストラテジ*1の一覧は OmniAuth.strategies で取…

Devise+OmniAuthで複数サービスから同じユーザーでログインする方法

plataformatec/devise と intridea/omniauth を使って、Twitterでも、Facebookでも、GitHubでもログインできるような機能を作る方法を書いておく。 最初に devise には Omniauthable という「これ使えば簡単に実装できるよ!」って雰囲気のmoduleがいます。 …

5日くらいSwiftを勉強したことのまとめ

年末年始でちょっとSwiftを勉強してみたので、やったことをまとめてみた。 読んだ本 詳細! Swift 2 iPhoneアプリ開発 入門ノート Swift 2 + Xcode 7対応作者: 大重美幸出版社/メーカー: ソーテック社発売日: 2015/11/14メディア: 単行本この商品を含むブログ…

2016年になったので、抱負とか書いておく

気づいたら2015年が終わって、2016年が始まっていました。 元旦に とても暇なので なんとか時間を作れたので、今年の抱負をブログに書いておいて、意識高い1年になるように頑張りたい。 2016年にやりたいこと 新しい言語を覚える アウトプットを頑張る 今年…

CircleCI の Artifact を使ってカバレッジ率を計測し、そのリンクをREADMEに貼る

プライベートリポジトリでカバレッジ率を計測したいけど、無料で済ませたい人向け。 Generating code coverage metrics - CircleCI を読んで Artifact を生成するまではいいけど、そのリンクをREADMEに貼る方法を軽く調べたけど無かったのでアプリ作ってみた…

RailsでDBのスキーマからvalidationを自動生成するpretty_validationというgemを作りました

タイトルの通りですが、作りました。 sinsoku/pretty_validation これは何? DBのスキーマからvalidationを自動生成します。 validates_presence_of (NOT NULL制約から生成) validates_numericality_of (columnの型から生成) validates_uniqueness_of (UNIQU…

Haskellの勉強をDockerを使って始める

いい加減に関数型言語を1つくらい触っておかないとエンジニアとして生き残れなそうな気がしてきたので、勉強を始めてみた。 参考資料 書籍 Web Haskell 入門 - ウォークスルー Haskell 勉強方法 環境 hsenv を使って環境を作ってもいいけど、hsenvの使い方か…

SlackのbotをAmazon API Gatewayで動かす

前回の記事でヴィヴィオを実装したので、今度はアインを動かしてみました。 詳細を書くのは面倒なので、ハマりそうなポイントだけ書いた。 Amazon API Gateway 普通にPOSTのAPIを作れば良い。 ただし、SlackのOutgoing WebHooksは application/x-www-form-ur…

CloudWatchの通知をAmazonLambdaを使ってSlackに流す

CloudWatchの通知を Amazon Lambda 経由でSlackに流す方法です。 こんなFunctionを登録しておけば、使えるって備忘録。 Slackの設定 Integrations から incoming-webhook を追加しておきます。 Amazon SNSの設定 CloudWatchからLambdaに流すためのTopicを作…

AWSでWindowsゲームを動かす話をLTしました #port_mokumoku

第6回【フリースタイル】もくもく会 - connpass でLTしました。 Awsでwindowsゲームを動かす from sinsoku listy 資料にも書いたけど、まとめ ノベルゲーなら割と動くよ 東方とか動かすのは(金銭的に)厳しい ただ、意外と遅延なく動く 将来的にやりた…

action_prefixer というgemを作りました #port_mokumoku

第5回【フリースタイル】もくもく会 で action_prefixer というgemを作りました。 なんか、勉強会に行ってgemばかり作ってるな…。 インストール方法 いつものように Gemfile に gem 'action_prefixer' を入れて、 bundle install を叩いてください。 何をす…

mini_style というgemを作りました #fwbar

Forkwell Bar #4 で mini_style というgemを作りました。 インストール方法 Gemfileに mini_style を入れて、 bundle install で入ります。 何ができる? 手抜きして、README.md からコピペ。 style('alert') # => 'alert' style('alert', 'alert-danger': !…

GitHubのPullRequestにfast-forward stateを表示するKeepFF

2015/12/31 追記 GitHub の protected branches によって、Pull Requestのブランチにmasterからマージできる仕組みが導入されました。 Pull Request として出したブランチをrebaseするという操作は推奨されない方法な気がするので、KeepFFは終わらせました。…

もくもく会で久しぶりにLTで話してみた

第2回【フリースタイル】もくもく会 http://connpass.com/event/11866/ でLTしてきました。 LT_Gitのfast fowardと継続的デリバリー from sinsoku listy あとがき 正直、LTの5分じゃ時間が足りなかった KeepFFでバッジは使えるけど、他の作りたい機能は…

gitのログでGitHubの絵文字を表示する

そもそもlessが絵文字(unicode)に対応していない 画像(png)をコンソールに表示できない などの制約で、GitHubで使える全ての絵文字は変換できなかった。 Macの絵文字に対応したのがある場合だけは表示できればいいや。 ぐらいの人向け。 やり方 まず、PATHの…

GitHubのステータスをblink(1)で通知する

以前に、Jenkinsのビルド結果をblink(1)で通知する って事をやっていたけど、最近はJenkinsを使わないケースも増えてきたので、github/hubを使い、GitHubのステータスでblink(1)を光らせるようにした。 スクリプト #!/bin/sh while : do date git fetch orig…

RubyのProcを引数付きで実行する4つの方法

Procにこんな実行の方法があったなんて知らなかったのでメモ。 引用 self[*arg] -> () call(*arg) -> () self === *arg -> () yield(*arg) -> () 手続きオブジェクトを実行してその結果を返します。 引数の渡され方はオブジェクトの生成方法によって異なりま…

gitでブランチから辿れないcommitやblobを探し出す方法

git

いつも忘れるので、備忘録として書いとく。 特に、addしたけどreset --hardで消した時にいつも忘れる。 ブランチから辿れないobjectを表示する方法 fsck --lost-foundで一覧を表示できる。 $ git fsck --lost-found Checking object directories: 100% (256/…

werckerのmysqlでutf8mb4を使う

werckerでmysqlのutf8mb4を使う方法が分かったのでまとめておく。 参考にしたページ MySQL :: MySQL 5.7 Reference Manual :: 14.12 InnoDB Startup Options and System Variables https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html Rails - …

Brewfileでパッケージの管理

一時期、boxenを使っていたのですが、面倒になって、Brewfileで管理するようにしてみました。 参考にしたページ BrewfileでHomebrewパッケージを管理する | SOTA BrewfileとHomebrew-caskでmacのセットアップ - Qiita Brewfile ちなみに、2014/07/15現在のBr…

vagrantでphpの環境構築

勉強会でphpを使うみたいなので、すごく久しぶり*1にphpの環境を構築しました。 参加する勉強会 php初心者なので、ペアプロ合コン【プログラム初級者の男子枠】 - connpass の初級者枠に参加。 phpの構築方法 apacheの設定は初級者の私には面倒 難しいので、…

seedデータをmigrationで差分管理できるgem "JewelSeed" を作りました

railsでは標準だとデータベースに必要な初期値の設定にdb/seeds.rbを使います。 ただ、db/seeds.rbだとデータの追加・変更や、再実行などが難しくなりがちです。 で、この辺りを便利にするgemはThe Ruby Toolboxで探すといくつかあります。 Seed-fu Ruby Too…

gitでタグ名に日付を含めているのはダサい

git

この記事は私の考えるタグの使い方なので、もし間違っている事や反論のある方は ぜひコメントやブログを書いてください。読みます! タグを打つ意味 そもそも、なぜgitでタグを打つのか? これは下記のような理由だと思う。 sha1でコミュニケーションするの…

面倒くさいsvnリポジトリをgit-svnで扱う時に役立ちそうなオプション一覧

最近は分散バージョン管理が主流になり、gitやhgを使う事が増えてきたと思う。 ただ、政治的な事情でsvnを使わなければならない事もあります。 そんな時に役立ちそうなgit-svnのオプションを備忘録として一覧にしておきます。 標準ディレクトリ構成のリポジ…

coffeescriptでメタプログラミング

coffeescriptでメタプログラミングをしようとしてハマったので、メモ。 最初に思いついたコード 最初、メタプログラミングしようとして下記のようなコードを書いた。 class Hoge i_methods = foo: message: 'foo' bar: message: 'bar' for i of i_methods @:…

Grunt でhtml, css, JavaScript のアレコレを便利にすると捗るので、Getting started を和訳した

Grunt とは Grunt: The JavaScript Task Runner http://gruntjs.com/ Gruntはhtml, css, JavaScriptに関する一連の作業を自動化するビルドツールです。 例えば、複数のJavaScriptを1つにしたり、cssやjsを圧縮したり、などが出来ます。 Grunt の使い方 公式…

Underscore.js のtemplateで、dataのkeyにnull, default などを使う方法

タイトルの通りなんだけど、ハマったのでメモ。 まとめ twitterで呟いていたのを貼っておく。 underscoreで _.template('<%= null %>', {'null': 'val'}) がしたいけど、表示できない...— 神速 (@sinsoku_listy) 2014, 2月 12 メモ: underscoreでtemplateでn…

マイグレーションファイルをweb上で編集するgem "ponytail" を作りました

ponytail とは? Railsのマイグレーションファイルをweb上で作成したり、web上でマイグレーション・ロールバックを実行できるようにするgemです。 インストール方法 Gemfileの:developmentのgroupにgemを追加し、bundle installしてください。 group :develo…

ブログのタイトルを変えてみた

ググラビリティを考えて、前のブログから"アジャイルSE"を取ってきて、こっちのブログにも付けてみた。

paiza でコードを書くときのコツ(Rubyで標準入出力に関するテストのやり方のメモ)

ふと、自分のプログラミング力を測りたくて、 paiza の問題を解いてみました。 paiza とは IT/Webプログラマー 転職のpaiza [パイザ] http://paiza.jp/ 詳しくはリンク先を読んでもらえれば分かるかと。要約すると web上で出題された問題に対して、コードを…

「バージョン管理, git勉強会」を開催してきました

主催者、発表者が自分1人の勉強会を開催してみました。今まで全部1人なのは初めてです。 勉強会のページ バージョン管理, git勉強会 - connpass http://connpass.com/event/3958/ 会場 21cafe<ニイイチカフェ>|エンジニア・クリエイター向けイベントスペ…

Pull Requestにfast-forwardの状態を表示してみた

前々から欲しいと思ってたけど、要望を送ってもgithubに実装されなかった*1ので、自分で作った。 プログラマなら無いなら、作ればいい。 github sinsoku/fastforward_badge userscripts.org http://userscripts.org/scripts/show/183136 動作環境 ChromeのTa…

GithubでPull Requestは絶対消せない。ヤバい\(^o^)/オワタ

git

先日、初めて知ったのですが、GithubのプルリクをCloseは出来ても、削除は出来ない。(*1) 普段使う上では困らないのですが、パスワードなどの公開すべきでない情報がプルリクに含まれると、結構ヤバい事になる。 結論 結論を先に書くと「リポジトリを作り直…

Travis CI からHerokuへのデプロイを自動化してみた 2

以前、Travis CI からHerokuへのデプロイを自動化してみた でafter_successを使ってデプロイを自動化してたけど、実は公式にdeployの設定があったらしい。 参考ページ Travis CI: Heroku Deployment http://about.travis-ci.org/docs/user/deployment/heroku…

Heroku で Postgres を使おうとして"Invalid DATABASE_URL"のエラーになった

以前はDATABASE_URLが自動で設定されていた気がしたけど、今回はなぜか設定されていなかった。 $ herkou pg:promote でDATABASE_URLが設定されるみたい。

Travis CI からHerokuへのデプロイを自動化してみた

2013.09.07 追記: keys:clear -> keys:remove に修正 Travis CI でテストを自動化したなら、デプロイも自動化したい。 という訳で、自動化してみた。 参考にしたページ Deploying to Heroku with Travis CI | Neil Middleton http://www.neilmiddleton.com/d…

シャッツキステ予定表を自分のGoogleカレンダーにインポートする #schatz1

シャッツキステの予定表がGoogleカレンダーで公開されていたので、Googleカレンダーにインポートしてみた。 インポート方法 自分のGoogleカレンダーのページを開いて、左側の「他のカレンダー [▼]」の▼をクリックする 表示されたメニューの「URLで追加」をク…

GIMPで画像を薄くする

GIMPで画像の色を薄く(?)する方法のメモ。 ↓みたいな画像編集の方法です。 元の画像 色を薄くした画像 編集方法 1. まず、新しいレイヤーを追加する このとき、背景色は白にすること。 すると、こうなる。 2. 次に(画面右上の方にある)不透明度を変更す…

はてなブログ始めました

decult さんに招待して頂いて、ブログのページだけ作ってみた。 ダイアリーとブログのいい使い分けが思いついたらブログの方も使ってみようと思う