ボクココ

サービス開発を成功させるまでの歩み

Ruby on Rails

Heroku Pipeline にステージング環境を乗せてみた

ども、@kimihom です。 今回はステージング環境と本番環境で Heroku アプリを分けていたものを、 Heroku Pipeline でまとめたのでその手順についてご紹介する。 今まで Heroku Pipeline を勘違いしていたんだけど、ステージング環境の Heroku アプリは Herok…

Heroku x Rails のサービスを本番運用する際に確認したいこと

ども、@kimihom です。 私は Heroku に Rails サーバーを立ててサービスを運用している。これまでの経験を元に、定期的にチェックしておきたい指標とか項目をまとめてみる。今後のサービス開発などで参考になれば幸いだ。 サービス構成 現在の構成はというと…

ライブラリの利用を減らしていくことの重要性

ども、@kimihom です。 最近の運用フェーズでの開発で意識していることの一つ、「Gem ライブラリの利用を減らす」ことについて思うことを書く。 記事の内容は Ruby 周りに最適化されているけど、他の言語でも同様のことが言えると思うので適宜置き換えて読ん…

月額課金モデルの Web サービスの設計方法

ども、@kimihom です。 今回は月額課金モデルの Web サービスを実現したい企業向けに設計の参考になる情報を提供できればと思う。こういう情報は割と自分なりに設計して実装するっていうパターンが多いかと思うが、とても大事なことなので慎重に検討していこ…

Ruby のバージョンを上げてGuard が動かなくなった時の対応

ども、@kimihom です。 Ruby で開発しているのであれば常に新しいバージョンで開発を続けたいもの。その中で今回は guard が動かなくなったのでその対応メモ。 Ruby 2.3.3 guard 2.14.1 エラー内容 こんなエラーが出て開発できなかった。 $ bundle exec guar…

Rails の フロントエンド周りの未来予測

ども、@kimihom です。 Rails の Sprockets や Uglifier などが最新の JavaScript に追従していないという理由で、Rails 標準のやり方から外れて最新のフロントエンドツールを追い求める系の報告が多い。一部では完全に Rails の Asset Pipeline から外れて…

極める技術を絞るという勇気

ども、@kimihom です。 いつの時代も、新しいテクノロジーがどんどん出てくるものだ。「この技術は世界を変える!」だなんて言って、みんなが飛びついて徐々に一般化されていく。「とりあえずなんでも触ってみる」ってのはもちろん大事なことだ。それが自分…

Rails assets 内の JavaScript のメソッドを View 内から呼び出す方法

ども、@kimihom です。 Rails で開発していると、assets/javascripts 内で定義したメソッドを View 内に書かれた <script>タグから呼び出したい時がある。Rails は基本的に assets/javascript 内のコードを全てひとまとめにして一つのapplication.jsってのを作るから…

独学での Web プログラミング学習まとめ

ども、@kimihom です。 自分で何かサービスを出したいという方は多いかと思う。今回はそんな方へ最低限知らなければならないリストを上げようと思う。ターゲットとしては Web アプリケーションということにしたい。 UNIX コマンド 最初は黒い画面に慣れる必…

Heroku on Rails アプリのメモリ増加対策の方法

ども、@kimihom です。 今うちが運用しているサービスの Heroku メトリクスを眺めていたら、いつの間にかメモリが90%近くまで届く瞬間が来てしまって、いよいよこれは R14(Out of Memory) が発生してしまいそうな感じが出てきたのでいろいろ対策を練った。 …

Startup Rails で知っておいた方がいいかもしれない6つのこと

ども、@kimihom です。掲題のタイトルで以下のミートアップで発表した。 第一回スタートアップRails勉強会 - connpass 発表資料はこれ。 Startup Rails ってテーマなので、てっきり 0を1にする人たち向けかな、と思ったらそういう視点での発表は2つしかなく…

Rails の render で部分的に動的な HTML を生成する

ども、@kimihom です。 Rails で CSS フレームワークとかを使っていると、例えばモーダルウィンドウを出すためにヘッダやフッタで共通の HTML を使うことになるだろう。これらは大抵の場合、共通の UI となる。それでも当然、モーダル内の body の部分はそれ…

Increments ++ Tech Talk に参加してきた

ども、@kimihom です。 今日は今をときめく Tech 系スタートアップ Qiita さんにて開催されたIncrements ++ Tech Talkに参加した。個人的に最近 Rals 5 でアプリを作り始めていたのでちょうどいいタイミングでちょうどいいテーマだった。 connpass.com 個人…

Rails5 でフロントエンドを綺麗に扱う方法を考えてみた

ども、@kimihom です。 SMAP解散騒動が騒がれる中、新規プロジェクトとして Rails 5 のプロジェクトで色々と遊んでみている。その中でフロントエンドの部分の書き方で自分なりに答えを出しながらやっているので、そこの方法をシェアしようと思う。 JavaScrip…

Rails5 が示したサービス開発の新しい指針についての考察。

ども、@kimihom です。 Rails5.0 の正式版がついにリリースされた。 Riding Rails: Rails 5.0: Action Cable, API mode, and so much more Rails 5といえば、 ActionCable での WebSocket によるサーバープッシュのリアルタイム処理が注目されがちだが、個人…

Rails を学んだ後に学びたいオススメ技術

ども、@kimihom です。 たまには Rails 初心者向けのコンテンツでも書こうと思い立った。 Rails を本なりなんなりで勉強した後、どういった技術を学ぶべきなのか。私のオススメする順番でご紹介していこう。 対象者 主にWeb アプリを作りたいと思っている Ra…

JavaScript SPA 周りの議論で出た私なりの答え

ども、@kimihom です。 ここ最近、ずっと React.js か jQuery かみたいな話題が定期的に持ち上がってきている。事実、私も最近の JS ライブラリの人気に疑問を呈した人物の一人である。この記事を書いたのも1年前か。 なんだかんだで SPA から jQuery に戻っ…

とある Web エンジニアがいま興味のあるテクノロジーを挙げてみる

ども、@kimihom です。 テクノロジーってのは次から次へと出てくるもので、全部やることなんて到底できない。てことでその中から自分に何が必要かを常に見極めて学習を継続していく必要がある。 私は Web やスマホのアプリそのものを作るエンジニアだ。業界…

Rails で複数モデルに関連したパラメータを検証する方法

ども、@kimihom です。 今回は Ruby on Rails における パラメーターの処理について。 よくある Rails の Scaffold では、送られてくるパラメーターとモデルが 1対1 で対応しているため、 Strong Parameter を使って綺麗に CRUD(Create, Read, Update, Delet…

Elasticsearch Rails で 全文検索とサジェスト機能を実現

ども、@kimihom です。 前回の記事で、Elasticsearch Rails の導入周りの調査内容をレポートした。 今回は調査内容をもとに、Elasticsearch と Rails を組み合わせて実装したので実践編としてまとめてみる。 Elasticsearch と Rails 間のデータ同期に関して …

Elasticsearch Rails の調査レポート ~実運用へ向けて~

ども、@kimihom です。 今回は Ruby on Rails で Elasticsearch を使う方法について調査したので報告しよう。 特に ActiveRecord と Elasticsearch をどう連携させるのか、そこら辺を詳しく書こうと思う。 elasticsearch-rails の利用 さて、 Rails で Elasi…

Rails のコードをきれいに保つために気をつけたい、たった一つのこと

ども、@kimihom です。今回は Rails のお話。 割と初心者が Rails を使ってサービスを作ると、 Fat Controller (コントローラーにコードを大量に書く) ということをしがち。んじゃあ どうやったらそうならないように済むかを簡単に説明しようと思う。 Fat Co…

Google People API が出たらしいので使ってみた

ども、@kimihom です。 先日、Google People API がリリースというニュースが流れた。記事を読むと、どうやら従来の Contacts API をよりシンプルにしてくれたAPIだそうだ。てことで好奇心の赴くままに、この People API を触ってみたのでレポートする。 そ…

RailsのActionCable と同時に IP メッセージングも知るべき理由

ども、@kimihomです。 巷の Rails 界隈では 新しいバージョン 5 で登場した、ActionCable が話題になっている。いろいろな勉強会が開催され、Qiitaではこれから ActionCable を使ってみた 的なエントリーが大量に出現することだろう。 ActionCable を使えば…

Amazon API Gateway Importer を使って Rails x Grape から API を生成する

ども、@kimihom です。割とマニアックな記事。 以前書いた Grape Swagger で Amazon API Gateway 連携 の記事では、 grape-swagger から Amazon API Gateway に乗せるまでの手順を書いた。 しかし、このままだと 結局 Amazon API Gateway 側で Integration R…

Grape Swagger で Amazon API Gateway 連携

ども、 @kimihomです。 前回は、Grape on Rails での開発初めまでを紹介した。 API のお話もこれで最後。Grape Swagger で作った Swagger ドキュメントを Amazon API Gateway 上で動くように動作させる。 swagger.json の取得 まず、今回は作成した Swagger …

Grape on Rails で API 開発

ども、@kimihom です。2016年になりました。今年もよろしくお願いします。 前回は、API の周辺技術の選定と設計について書いた。 さて、昨年から書き続けている API 関連の話題だが、実際にコード書くところを細かく見ていきたいと思う。スタートさえうまく…

Rails における API 開発 (設計とGem選定編)

ども、@kimihom です。 すっかり年末感漂う感じになってきた。本ブログではそんなこと関係なく、引き続き API の話題。 前回のAPI 開発において認証以外で気をつけるべきこと で API 開発における検討事項を列挙した。その前の API 認証の設計も踏まえて、今…

普通のクラスをRailsのモデル化する

ども、@kimihomです。 Railsのコアを学習中。新しく知ったことをメモメモ。 Rails Pluginの作成 rails plugin new my_awesome_plugin create create README.rdoc create Rakefile create my_awesome_plugin.gemspec create MIT-LICENSE create .gitignore cr…

deviseのlockableを後で追加する方法

ども、@kimihomです。最近アップデートしたMacが文字を打っている途中から変換されるのが全く慣れません。 さて今回は Railsの認証ライブラリの定番、deviseについて。これを利用すると、Userモデルにあらゆる機能をプラグインっぽく追加することができる。 …

Heroku on Rails で asset_sync ではなく Cloudfront を利用する方法

ども、@kimohomです。 先日、以下のHeroku高速化において、asset_syncを利用する方法を紹介した。 Heroku x Rails 使うならオススメの環境構築方法 - ボクココ ただ、この方法は最近 Heroku 公式から使うのを止めるよう指示が出ている。 Please Do Not Use A…

Rails の content_for のつかいどき

ども、@kimihom です。 今回は Rails の ActionView における、content_for について。まずは簡単な使い方からおさらいしよう。 content_for の使い方 例えば、 app/views/layouts/application.html.erb がこんな作りになっていたとする。 <html> <head> <title><%= page_title</title></head></html>…

Rails で グラフ描画なら、 Chartkick を利用すべし

ども、@kimihomです。 今回は Rails でグラフの描画について。 大抵、グラフを描画するとなると、サーバーからデータをViewに渡して、そこからJavaScriptでデータをどんどん投入してようやく描画、という長いプロセスを踏む必要がある。Rails 側でデータをし…

ActiveRecordにおけるScopeのつかいどき

今回は ActiveRecord の機能の紹介。 読者の方で以下のようなRailsコードを書いたことがないだろうか? class ArticleController < ActionController::Base before_action :fetch_article, only: [:show, :edit, :update, :destroy] def ... end private def…

Heroku x Rails 使うならオススメの環境構築方法

普通にRails扱うのと、Herokuにあげる用のRailsを扱うのとではやはり構造とかを多少変える必要がある。 以下のやり方は、厳密に言えば「できる限り本番と同じ環境にした方が良い」というやり方とは違うため、この方法をするのであれば、必ずHerokuにstaging…

私のRails と jQuery のフロントエンド開発指針

Railsでの基本的な開発スタイルといえば、ページはリンクとフォーム送信、そしてリダイレクトの基本構成だろう。確かにこれでWebアプリケーションを作ることができる。 ただ今回はよりリッチなWebアプリケーション、具体的にはAjaxを駆使した開発について、R…

Sass をより効率よく使うための機能4つ厳選

Sass といえば Rails でデフォルトで搭載されている, CSSを描きやすくするためのライブラリだ。「CSSをネスト構造で記述できる」というだけでSassの80%以上使いこなしていると言えるのだと思っているけど、残りの数%について、特に便利なものを調べたのでま…

自動電話応答サービスを作ってリリースした話

自動電話応答(IVR) を誰でも簡単に作れるサービスを目指してコールコネクトをリリースした。 CallConnect(コールコネクト)www.callconnect.jp 自動電話応答(IVR)とは 自動電話応答(IVR)とは、例えばどこかの企業に電話をかけた時、「お電話ありがとうござい…

Rails Guide で参考になった記事のまとめ

Rails Guideは常に最新のドキュメントがまとめられているため、たまにページに行くと、有益な情報が転がっていることが多々ある。 ちょっと理解が怪しい部分や、開発中によく迷う部分とかをたまに読んでみると、新しい発見があって、成長した気になれる。 今…

共通レイアウトで複数 yield を使う

Rails ネタ。 結論 layout の yield 以外で同様の yield を使いたい場合は content_forを使おう。 解説 app/views/layouts/application.html.erb は共通のレイアウトを定義するデフォルトのレイアウトファイルだ。そこには必ず <%= yield %> が入っていて、…

ブラックリストワードをフィルタリングする Obscenity

今日は便利なGemを紹介。 掲示板システムをアプリとかで運用していると、NGワード連発な方々がどうしても出てきてしまう。そのため彼らの投稿は拒否したり特殊文字で置き換えたりする必要がある。 そんな時に便利な Gem が tjackiw/obscenity · GitHubだ。 G…

Rails での Model.find(params[:id]) の恐怖

認証ありの Rails アプリケーションでのよくある話。 例えばこんなコードがあるとしよう。現在のユーザーの記事一覧を取得するコードだ。 class ArticlesController < ActionController::Base before_action :authenticate_user! def show @article = Articl…

Rails アプリ開発中のDB内容確認における注意点

これは原因がわかりにくいのでメモ。 問題概要 DBの値を更新したはずなのに、 rails console でその変更が確認できない 問題詳細 rails console はご存知 irb で 各 Rails のモデル操作のテストができる優れもの。よく使う方は多いと思う。今回は別ウィンド…

テストコードとプログラミング能力

テストを書くべきだ、と人は言う。テストを書けば大きな変更にも柔軟に対応することができるそうだ。 テストをほとんど書いてなかったかつての自分にとってそれはよくわからないものだった。テストを動かすまでの手間や書いたとしてもテストを通すようにする…

DB の state は State Machine で管理する

最近は毎日プログラミングの日々を過ごしている。 そんな中、とあるテーブル(ドキュメント)で状態を管理しなきゃいけない場面があった。 この問題の一つの手としてはstate をint で保存し、一つ一つの数字を何かしらの状態に紐づけるやり方だ。これを実践し…

Rails の bundler でなぜ --path vendor/bundle を付けるのか

今までずっと謎だった。 bundle install これだけでいいじゃないか、なんでわざわざ --path を付ける必要があるのか、と。 何が嬉しいか gem をいじっても他のRailsアプリを汚さない ctagによる検索が可能になる ctagの存在を知らなかった。。今まで自分をvi…

Doorkeeper を使ったRailsのテストをRequest Spec で作る

今回はちょいとマニアック。 問題 APIのテストはController Specではなく、Request Specに書くべきなのだが、DoorkeeperのサンプルコードはController Specで書かれている。こんな感じのコード describe Api::V1::ProfilesController do describe 'GET #inde…

ユーザ登録・API 認証の仕組みを Rails で実現する

スマホアプリから会員の新規登録、ログインが両方できるようにAPIを作成中。ようやく自前でアクセストークンを作ってOAuth認証が出来たのでまとめておく。 まず何がしたいか? スマホアプリでAPI認証ができるように、OAuthを自前で作成したい。 -> スマホア…

アプリエンジニアがインフラに挑戦その5 最終会

どもー。 いよいよ最終回です。 Chef によりRails アプリをデプロイできる環境が整ったので、いよいよCapistrano でクールなRails アプリをデプロイします。 今回はDBにMongoDBを利用しているので、Rails側で rake db:migrateなどをする必要がない点は他の一…

アプリエンジニアがインフラに挑戦その4

どーも。 ホストOS側のChef環境がそろったので、いよいよゲストOS(Virtual Machine) に Rails 環境をインストールしていきます。今回は一つのゲストOS にRailsとMongoDB, Nginx 全て入れていきます。 今回のChef Recipes は Github においてますので適宜参照…