Rails Webook

自社のECを開発している会社で働いています。Rails情報やサービスを成長させる方法を書いていきます

Railsの権限管理CanCanCanのソースコードリーディング

Railsの権限管理のCanCanCanのソースコードを読んでみてまとめました。 本体のコード量的は1,000行程度で、同じ権限管理をするPundit(300行程度)と比べると多めです。 1. 目的 2. 基本情報 対象バージョン コード量 ディレクトリ構成 クラス図 ドキュメント …

Railsの権限管理Punditのソースコードリーディング

Railsの権限管理のPunditのソースコードを読んでみてまとめました。 本体のコード量的には300行程度なので比較的簡単に読めるかと思います。 1. 目的 2. 基本情報 対象バージョン コード量 ディレクトリ構成 クラス図 ドキュメント 3. Punditの権限管理の実…

Rails5.2から入ったActiveStorageのソースコードを読んでみた

Active Storageの実装にいくつか興味があるところがあったので、いくつかピックアップしてソースコードリーディングをしてみました。 ライブラリということもあり、ビジネスロジックのややこいところもないため、シンプルで読みやすいコードでしたのでぜひ興…

ActiveStorageでS3にダイレクトアップロードする

Rails 5.2から入ったファイルアップロード機能のActive Storageを使ってS3にダイレクトアップロードを実装します。 クライアントからS3にファイルを直接アップロードすることにより、ファイルアップロード時の負荷を削減できるメリットがあり、最近ファイル…

リーンスタートアップまとめてみました

起業や新規事業開発において有効な方法論のリーンスタートアップについてまとめてみました。 企業の状況(製品、市場、顧客、タイミング、メンバー、法律など様々なこと)により、実際は理論通りにはいかないと思いますが、起業や事業開発の基礎的な流れとし…

serverless frameworkでAWSにサーバレスなAPIサーバーを作る

フルマネージドなAPIサーバーを簡易にたてるときの選択肢の一つとして、API Gateway, Lambda (Flask), DynamoDBを使ってAPIサーバーを作成しました。 各サービスの構築には、serverless frameworkを使いました。

限定Tシャツ欲しさにAlexaスキル作りました

数ヶ月前にAmazon Echo Dotを買いました。 「うわ、すごい便利!」っというわけではないですが、スマホいじらずに朝の支度しながら今日の天気を聞けるのは楽だなーと思っている今日このごろです。Alexaが日本で浸透するためかわからないのですが、Alexaスキ…

Railsにgulpを統合させる

Railsでgulpを使ってアセットファイルの管理する環境を構築します。gulpでsass/scssのコンパイル、ES6のコンパイル(babel, webpack)、gulpの便利プラグイン(変更監視、画面リロード、通知)、ミニファイ、ダイジェスト付与をできるようにします。そして、gulp…

RailsでReact.jsをサーバーレンダリングする

react-railsを使いReact.jsをサーバーレンダリングする方法を説明します。サーバーレンダリングすることで、初期値をHTMLの初期レンダー時に渡せるようになるので、ロード中による画面のばたつきや、ロード中といった表示をなくせます。

RailsでReactを使ってメッセージボックスアプリを作成

Railsに簡単にReact.jsを統合できるreact-raisというgemを使い、RailsでReact.jsを使う方法を説明します。

RailsでElasticsearch: サジェスト (Suggest) 機能でオートコンプリート

RailsでElasticsearchのサジェスト機能を使用してオートコンプリート機能を実装します。

RailsでElasticsearch: ハイライト(Highlight)

RailsでElasticsearchを使ってハイライト(Highlight)機能を実装します。Elasticsearchのhighlightキーを指定することでハイライトを実施できます。

RailsでElasticsearch: アグリゲーション(ファセット)と Post Filter

RailsでElasticsearchを使って、アグリゲーション(ファセット)と Post Filter を使ってファセット機能を実装します。 「アグリゲーション」は、SQLでいうGROUP BYのようなもので、最小値、最大値、平均値などを求めたり、カテゴリ毎の数を数えたりなどドキ…

RailsでElasticsearch: ソート機能を実装

RailsでElasticsearchのソート機能を実装します。Elasticsearchではsortキーでソートをするキーを指定します。

RailsでElasticsearch: ページネーションと1ページの表示件数を実装

RailsでElasticsearchを使って「ページネーションを実装します。また、1ページの表示件数を変更できるようにします。Railsのページネーションで有名なgemのkaminariを使って実装します。

RailsでElasticsearch: 全文検索を実装

RailsでElasticsearchを使ってレストラン検索アプリを作成、店名、住所、カテゴリなどからレストランを全文検索できるようにします。また、フィルタ(filter)(filter)も使って検索条件を指定することで、閉店している店舗も含めて検索できるようにします。

Phoenix入門3 - WebSocketのチャット機能

Phoenixでチャット機能を実装します。Phoenixでソケット、チャネル、トークン、API作成、モデルのアソシエーションなどを行っていきます。

Phoenix入門2 - Phonixで認証機能

Phoenixでユーザ登録、ログイン、ログアウトといった認証機能を実装します。 Userモデル作成、マイグレーション、外部ライブラリの使用、ヘルパー関数の定義と利用などWebアプリケーションを作るための基本的な箇所を説明します。

Phoenix入門1 - Hello Phoenix

Phonixとは、elixerという言語で書かれたWebフレームワークです。APIやリアルタイムストリーミングに特化し、大規模かつスケーラブルで高可用性で早いという特徴があります。 この記事では、Phonix環境のセットアップから、静的ページを作成、表示させます。

リファクタリング: デメテルの法則(Law of Demeter, LoD)

デメテルの法則は、オブジェクト指向の設計におけるガイドラインで、簡潔にいうと「直接の友達とだけ話すこと」ができるようにするということです。 デメテルの法則に違反しているソースコードとそれの対処する方法を説明します。

Rubyテクニック: Rubyの通常の引数とキーワード引数の違い

Ruby2.0からキーワード引数が導入され、Ruby2.1からRequiredキーワード引数が導入されました。 Rubyの通常の引数とキーワード引数のメリット、デメリット、どういうときにキーワード引数を使ったほうが良さそうかということをまとめました。 Rubyの通常の引…

ChefでRails環境を構築(Ruby+Nginx+Unicorn+PostgreSQL+Redis+Fluentd)

ローカルの仮想マシンにChefでRails環境を構築する方法を説明します。環境は、CentOS 6.6、Ruby(rbenv)、Nginx、Unicorn、PostgreSQL、Redis、Fluentd(td-agent)を使っています。

Vagrant入門。簡単にローカル環境に仮想マシン(VM)を作る

Vagrantを使うことで本当に簡単に仮想マシン(VM)をローカル環境に作成できます。 主な利用用途としては、開発用マシンをVagrantで作成できるようにしておくことで、同じ構成(OS、ミドルウェア、バージョンなど)の開発マシンを開発メンバーに配布することが…

いまさらながらRails4.1から導入されたEnumが便利なのでまとめてみた

Rails4.1から導入されたEnumの挙動について忘れることがあるので簡単にまとめました。 enumの定義、enumを定義したことにより使える便利なメソッドなどをまとめました。

RailsでRoarを使ってAPIサーバーとAPIクライアントを作る

RoarはRepresenterを使ってRESTなAPIをパース、レンダーすることができるgemです。 つまり、Roarを使うことで、RailsでJSONを返すAPIサーバーを作成したり、逆に、APIサーバーにアクセスするAPIクライアントをRubyで作れます。

フォーム画面でページから離れるときにJavascript(JS)の警告を出す

上記のように、フォーム画面でページから離れるときにJavascript(JS)の警告を出す方法を説明します。実際の動作は次のリンクから確認できます。 ページを離れる時に警告を出す - jsfiddle

Postgresqlのデータ型一覧とRailsのマイグレーションの指定方法

Postgresqlの各データ型とRailsのマイグレーションでの指定方法をまとめました。数値データ型、通貨型、文字型、日付/時刻データ型、論理値データ型についてまとめました。

RailsでActiveRecord/Arelを使って複雑なSELECT文を実行する方法

Rails(ActiveRecord/Arel)で複雑なSELECT文を実行する方法をまとめました。 メリット、デメリットや使いどころなどまとめ途中なのであしからずお願いします。

RubyでSeleniumを使ってサクッとスタンドアローンなブラウザテストを作成する

RubyでSeleniumを使ってスタンドアローンなブラウザテストをする方法を説明します。テスティングフレームワークにはRSpec、SeleniumにアクセスするためにCapybaraをつかうことで簡単にテストがかけます。

RailsでDraperを使ってプレゼンテーション層(デコレーター)を実装する

DraperはRailsのプレゼンテーション層の役割を担うgemです。プレゼンテーション層の必要性、実装方法について説明します。Draperはデコレーター(他にはプレゼンター、ビューモデルなどと呼ばれます)であり、ビューとモデルの中間に位置し、モデルやビュー…