サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
iPhone 17
ruby-rails.hatenadiary.com
RailsのActiveRecordのautosave機能についてソースコードリーディングをしました。 ドキュメント ActiveRecord::AutosaveAssociation ソースコード ActiveRecord::NestedAttributes - Tag 5.2.1 (18/8/8) Autosaveは、親モデルが保存された時に、関連するモデルも一緒に作成/更新する機能を提供します。 また、関連するモデルでmark_for_destricutionメソッドを実行し、削除フラグを立てることで、親モデルを保存時に関連レコードを削除することもできます。 これらのレコードの操作はトランザクション内で実行されるのでDBでデータ不整合が発生しません。 1. Autosave機能のサンプルコード 2. Autosaveでのメソッドやコールバックを定義している箇所 3. Autosave
JWT(Json Web Token)のRuby実装のruby-jwtのコードリーディングをしました。 JWTの仕様やその実装についてみまして。仕様がシンプルなので、本体のコード量は500行程度で読みやすかったです。 目的 1. JWTとは ヘッダー部 ペイロード部 電子署名部 注意点 2. ruby-jwtの簡単な使い方 3. JWTのエンコード処理の実装 4. JWTのデコード処理の実装 まとめ 参考 目的 JWTとは何か JWTのエンコード処理の実装 JWTのデコード処理の実装 1. JWTとは JWTとは、Json Web Tokenの略で、署名付きのトークン化されたJsonです。 署名がされているので中身の改ざんができないことやJSONであることから、APIでの認証の一時的なトークンとして利用されます。 JWTは、ヘッダー(署名アルゴリズム)、ペイロード(やりとりしたい内容)、署
Railsの権限管理のPunditのソースコードを読んでみてまとめました。 本体のコード量的には300行程度なので比較的簡単に読めるかと思います。 1. 目的 2. 基本情報 対象バージョン コード量 ディレクトリ構成 クラス図 ドキュメント 3. Punditの権限管理の実装する方法 4. 権限管理機能をRailsと統合する方法 5. RailsのGeneratorの作り方 5.1. pundit:install 5.2. pundit:policy [model] まとめ 1. 目的 下記のようなこと中心にソースコードを見ていきたいと思います。 権限管理の実装方法 権限管理の仕組みをRailsに組み込む方法 RailsのGeneratorの作り方 2. 基本情報 対象バージョン 2018/7/22に作られたv2.0.0で確認します。 Pundit v2.0.0 コード量 全体のruby
Rails 5.2から入ったファイルアップロード機能のActive Storageを使ってS3にダイレクトアップロードを実装します。 クライアントからS3にファイルを直接アップロードすることにより、ファイルアップロード時の負荷を削減できるメリットがあり、最近ファイルをAWSにアップロードするとなるとダイレクトアップロードで実装することが多いと思います。 ファイルをアップロードするにあたり、S3の設定やユーザ認証、ファイルのバリデーションなど実運用で必要と思われる箇所についても合わせて実装していきます。 Active Storageに興味がある方は、わかりやすくまとまっているActive Storageの概要 | Rails ガイドをぜひ読んでみてください。 ソースコードはこちらです。rails_samples/sample_active_storage at master · nipe03
起業や新規事業開発において有効な方法論のリーンスタートアップについてまとめてみました。 企業の状況(製品、市場、顧客、タイミング、メンバー、法律など様々なこと)により、実際は理論通りにはいかないと思いますが、起業や事業開発の基礎的な流れとして頭にいれとくのは携わった時に大いに参考になると思いまとめました。 目次 1. リーンスタートアップとは 2. リーンスタートアップの主要な方法論やツール 2.1. リーンキャンバス 2.2. 構築-計測-学習のフィードバックループ 2.3. 顧客インタビュー 2.4. MVP(実用最小限の製品) 2.5. リーンスタートアップの計測 2.6. ピボット 3. スタートアップとリーンスタートアップの概要 1. リーンスタートアップとは リーンスタートアップとは、スタートアップの成功確率を高める企業論/組織論の1つです。 最低限の製品を作り、顧客に提供し、
「RailsでAngularJSを使ってTodoアプリを作成」の連載4回目です。 前回はAngularJSのコントローラーを作成することで、タスクの追加、削除、完了をしました。 今回は、RailsでAPIを作成します。(モデルやコントローラーなどの作成) そして、AngularJSのngResourceを使い、そのAPIにアクセスし、Todoリストを作成/更新/削除を永続化できるようにします。 * 連載記事一覧 Demo - Todoアプリケーション 1. AngularJSのインストール方法 2. UI Bootstrapのインストール方法 3. AngularJSのコントローラーの作成 4. ngResource + RailsでAPI作成 5. ngRouteでシングルページにする 6. AngularJS + Ransackで検索機能を実装する 7. AngularJS + Kam
Photo by Flickr: josemanuelerre's Photostream 目次 $.get $.post $.load 1. $.get $.getメソッドで、Ajaxで'/data.json'にGETリクエストを行います。 $.get('/data.json', function(data) { // 成功時に行われる処理 console.log('callback' + data); }) .fail(function(data) { // 失敗時に行われる処理 console.log('Failed'); }); 2. $.post $.postメソッドで、Ajaxで'/post.php'にPOSTリクエストを行います。 $.post('/post.php', { // 第二引数は、POSTするパラメータ title: 'Post Title', body: 'Po
select2とは select2とは、セレクトボックスを検索可能なセレクトボックスにしてくれるjQueryプラグインです。 セレクトボックスの項目が多い場合、検索できないと選択が大変なのでとても便利です。 ※ Chosen という同じようなjQueryプラグインもあるのですが、Enterキーの処理がうまく動かなく日本語で検索しづらいのでこちらの方がオススメです。 動作確認環境 Rails 4.1 select2-rails 3.5.9.1 目次 Railsプロジェクトの作成 select2-railsのインストール select2にtwitter-bootstrapをインストール Railsプロジェクトの作成まずはRailsプロジェクトを作成します。 rails new select2_test cd select2_test次にselect2の挙動を確認するために、PersonをSca
「同じような機能のgemがあり、どのをgemを選んだら良いか分からない人」を対象に、どのようにgemを選べばよいかのステップを説明しまいます。 この4つのステップを行うことにより、あなたが求めているベストフィットなgemを見つけれるでしょう。 ベストフィットなRubyGemsを選ぶ4つのステップ Step1:Ruby toolboxで人気のgemを調べる Step2:Githubでアクティブか調べる Step3:RubyGemでバージョンと依存関係を調べる Step4:ドキュメンテーションを調べる おまけ:ソースコードの見方 Step1:Ruby toolboxで人気のgemを調べるRuby Toolboxというサイトを使うことで人気なgemを簡単に調べることができます。 「Authentication(認証)」を調べるというテーマで実施しています。 まず、Ruby Toolboxを開きま
Railsでgulpを使ってアセットファイルの管理できる環境を構築します。 gulpはアセットを管理するツールで、js、css、imagesなどのアセットファイルをビルドして、それをRailsから参照する流れです。 また、gemにバンドルされているアセットファイルもあるので、Sprockets(Railsのアセット管理のgem)は有効にしておきます。有効にしておきますが極力使いません。 gulpでsass/scssのコンパイル、ES6のコンパイル(babel, webpack)、gulpの便利プラグイン(変更監視、画面リロード、通知)、ミニファイ、ダイジェスト付与をできるようにします。 そして、gulpで作成されたcssやjsのアセットファイルをRailsからロードできるようにします。 参考にソースファイルをGitHubに上げたあります。 https://github.com/nipe03
Photo by Flickr: James Marvin Phelps' Photostream jQueryを使ってイベント処理の登録と削除方法、登録できるイベントの一覧を説明します。 また、JavaScriptはイベントを通してHTMLと結びついているので、イベントハンドラのコーディングと修正に多くの時間を使います。 そのため、イベントハンドラとアプリケーションロジックを分離することで、疎結合にする考え方も説明します。 目次 イベントハンドラの登録(on) イベントハンドラの削除(off) イベント一覧 イベントハンドラとアプリケーションロジックを分離する 1. イベントハンドラの登録(on)onメソッドを使うことでイベントハンドラを登録することができます。 // クリックのイベントハンドラを登録 $('#confirm').on('click', function() { retu
react-railsというReact.jsをRailsに簡単に統合できるgemを使い、React.jsをサーバーレンダリングする方法を説明します。 サーバーレンダリングすることで、初期値をHTMLの初期レンダー時に渡せるようになるので、ロード中による画面のばたつきや、ロード中といった表示をなくせます。 RailsでReactを使ってメッセージボックスアプリを作成 - Rails Webookをベースに説明しています。 また、この記事のソースコードは https://github.com/nipe0324/rails_samples/tree/master/react_server_rendering_test です。 目次 RailsでReactコンポーネントをレンダーする Reactコンポーネントをサーバーレンダリングする コントローラーでReactコンポーネントをレンダーする 動作確
Railsのデフォルトの日付や日時のフォーマットを追加する方法を説明します。 Railsで日付や日時を表示すると、デフォルトでは次のように2014-10-01 09:00:00 +0900のように表示されてしまいます。 そのため、strftimeメソッドを使って表示を変えている人もいると思います。 <%= product.published_on.strftime("%Y年%m月%d日 %H時%M分") %> しかし、このようにすると、各出力で個別にフォーマットを記載しないといけないのでめんどくさく、アプリケーションを通してフォーマットがバラバラになってしまうと可能性があります。 そのため、config/initierlizers/time_formats.rbのような名前でファイルを作成し、フォーマットを一覧にしておいて、アプリから簡単に使えるようにします。 動作確認 Rails 4.1
react-railsというReact.jsをRailsに簡単に統合できるgemを使い、React.jsについて説明します。 次のような画面をReact.jsで実装し、Reactとサーバ(Rails)間でメッセージ一覧の取得や作成をできるようにします。 ソースコードはこちらです。 https://github.com/nipe0324/rails_samples/tree/master/react_test 目次 react-railsのインストール Reactのコンポーネントの表示 メッセージボックスの概要 メッセージボックスのリストを作成 メッセージフォームを作成 サーバーサイド(Rails)との連携 動作確認 Ruby 2.2.0 Rails 4.2.3 react-rails 1.4.2 react 0.14.2 0. React.jsとはReact.jsはMVCフレームワークでい
今回は、「Elasticsearchのサジェスト(Suggest)機能でオートコンプリートを実装」します。 RailsでElasticsearchを使って簡単な全文検索 ページネーション・1ページあたりの表示件数 ソート機能 アグリゲーション(ファセット)と Post Filter ハイライト (Highlight) とRailsでElasticsearchを使って検索機能を実装してきました。 サジェスト機能では、サジェスター(Suggester)を利用し、入力したテキストから似たような単語を返す機能です。 Elasticsearch 1.7 では、サジェスト機能の一部はまだ「開発中」のようです。 参考までに、ソースコードはこちらです。elasticsearch_test - GitHub 目次 データを投入 Elasticsearchのサジェストクエリ オートコンプリートでサジェスト機能
RailsでElasticsearchを使って簡単な全文検索 ページネーション・1ページあたりの表示件数 ソート機能 アグリゲーション(ファセット)と Post Filter とRailsでElasticsearchを使って検索機能を実装してきました。 今回は、「Elasticsearchのハイライト機能」について簡単に説明します。 参考までに、ソースコードはこちらです。elasticsearch_test - GitHub 目次 ハイライト機能を実装 動作確認 Mac OS X 10.11 El Capitan elasticsearch 1.7.2 Rails 4.2.3 elasticsearch-dsl 0.1.2 elasticsearch-model 0.1.8 elasticsearch-rails 0.1.8 1. ハイライト機能を実装次のようにハイライト機能を実装します。
RailsでElasticsearchを使って簡単な全文検索 ページネーション・1ページあたりの表示件数 ソート機能 とRailsでElasticsearchを使って検索機能を実装してきました。 今回は、「アグリゲーション(ファセット)と Post Filter」について説明します。 「アグリゲーション」は、SQLでいうGROUP BYのようなもので、最小値、最大値、平均値などを求めたり、カテゴリ毎の数を数えたりなどドキュメントを集約させるものです。Elasticsearchでは、従来あった集約機能の「ファセット」では複雑な集約を処理できなかったので、新しくアグリゲーションを作ったぽいです。 具体的には、下記画像の左側のサイドバーで検索結果を絞り込めるようにします。 目次 アグリゲーションのためのElasticsearch カテゴリのアグリゲーションの実装 複数カテゴリの検索に対応 都道府
前々回は「RailsでElasticsearchを使って簡単な全文検索」、 前回は、「ページネーション・1ページあたりの表示件数」を実装しました。 今回は、「ソート機能」を実装します。Elasticsearchのソート機能があるのでかなり簡単に作成できます。 目次 ソートのElasticsearchのクエリ ソート機能を実装 動作確認 Mac OS X 10.11 El Capitan elasticsearch 1.7.2 Rails 4.2.3 elasticsearch-dsl 0.1.2 elasticsearch-model 0.1.8 elasticsearch-rails 0.1.8 1. ソートのElasticsearchのクエリsortパラメータを指定することで、ソートすることができます。 ソートキーとorderにソート順の「asc(昇順)」か「desc(降順)」を指定し
前回の記事で、「RailsでElasticsearchを使って簡単な全文検索」を実装しました。 今回は、「ページネーション・1ページあたりの表示件数」について実装していきます。 ページネーションの実装は、Railsのページネーションを実装する有名なgemのkaminariを使って実装します。 目次 データを投入 ページネーションのためのElasticsearchのクエリ Elasticsearchでページネーションを実装 ページあたりの表示件数を変更 動作確認 Mac OS X 10.11 El Capitan elasticsearch 1.7.2 Rails 4.2.3 elasticsearch-dsl 0.1.2 elasticsearch-model 0.1.8 elasticsearch-rails 0.1.8 1. データを投入ページネーションのためにデータを増やします。 #
Vagrantを使うことで本当に簡単に仮想マシン(VM)をローカル環境に作成できます。 主な利用用途としては、開発用マシンをVagrantで作成できるようにしておくことで、同じ構成(OS、ミドルウェア、バージョンなど)の開発マシンを開発メンバーに配布することができます。そのため、環境構築の手間が省け、バージョンが違うなどといった問題も起こりません。 デメリットとしては、VM上で動かすので動作が遅くなりがちや、ホスト(PC)との連携に工夫が必要といったわずらわしさもあります。 しかし、仮想マシンなのでサーバー環境を作成、削除が簡単にできるので、ローカル環境では行いづらいマシンの環境系のテストが簡単に行えるのも魅力ですのでVagrantは必須の知識だと思います。 目次 VagrantとVirtualBoxのインストール Vagrantfileを作成 Vagrantにボックスを追加 ボックス一覧
RailsでElasticsearchを使ってレストラン検索アプリを作成、店名、住所、カテゴリなどからレストランを全文検索できるようにします。また、フィルタ(filter)も使って検索条件を指定することで、閉店している店舗も含めて検索できるようにします。 今後、Elasticsearchのページネーション・ページあたりの表示件数、ソート、ファセット・post_filter、ハイライト、サジェスト機能などをより実践的な機能を実装していきます。 目次 ElasticsearchのMacへのインストール Railsプロジェクト作成とテストデータ作成 RailsとElasticsearchで全文検索を実装 検索条件を指定する 動作確認 Mac OS X 10.11 El Capitan elasticsearch 1.7.2 Rails 4.2.3 elasticsearch-dsl 0.1.2
前々回の記事は「Phoenix環境のセットアップから、静的ページを作成し、表示」させました。 前回の記事では、「Phoenixで認証機能を実装」しました。 今回の記事では、入門最後として「Phoenixでチャット機能を実装」します。 Phoenixでソケット、チャネル、トークン、API作成、モデルのアソシエーションなどを行っていきます。 サンプル ChatPhoenix - Heroku ChatPhoenix - GitHub 目次 ソケットの基礎用語 チャット機能の追加 チャット機能をログイン機能と統合 チャットメッセージの永続化 動作確認 Erlang 7.1 Elixir 1.1.1 Phoenix 10.0.3 Hex 0.9.0 node.js 0.12.7 npm 2.14.2 PostgreSQL 9.4.4 1. ソケットの基礎用語ソケットの基本的な用語について簡単に記載
前回の記事は「Phonix環境のセットアップから、静的ページを作成し、表示」させました。 今回の記事では、「Phoneixで認証機能を実装」します。 それを通して、マイグレーション、モデル、外部ライブラリ利用などのWebアプリケーションを作るための基本的な箇所を説明します。 次回は「チャット機能を実装」します。 サンプル ChatPhoenix - Heroku ChatPhoenix - GitHub 目次 ユーザ登録機能 ログイン・ログアウト機能 動作確認 Erlang 7.1 Elixir 1.1.1 Phoenix 10.0.3 Hex 0.9.0 node.js 0.12.7 npm 2.14.2 PostgreSQL 9.4.4 1. ユーザ登録機能 ユーザモデルの作成まず、最初にユーザモデルを作成します。 メールとパスワードでログインをできるようにし、パスワードは平文ではなく
Phoneixとは、elixer(※1)という言語で書かれたWebフレームワークです。 最近のiOSやAndroidアプリやSPI(シングルページアプリケーショん)が普及してきたため、サーバーサイドはAPIやリアルタイムストリーミングの機能を提供することが増えてきました。 Phonixは一般的なWebのMVCに加え、デフォルトでAPIやソケットによるリアルタイムストリーミング機能を提供していて、このようなニーズに対応しやすくなっています。 レイテンシーがとても低く、Phoenixのレスポンスタイムはミリセカンドの代わりにマイクロセカンドで表示されるぐらい早さが段違いと言われています。 また、Railsのコントリビュータが作っているだけありかなりRailsの仕組みに似ているので、RailsなどのMVCフレームワークに触れている方には、かなり理解しやすいと思います。 若干、elixirの独特な
Photo by Wonderlane | Flickr - Photo Sharing! デメテルの法則について勉強したのでまとめてみました。間違っているかもしれませんのでコメントいただけると助かります。 目次 デメテルの法則とは デメテルの法則に反している例 デメテルの法則の適用 まとめ 1. デメテルの法則とは wikipediaより引用 デメテルの法則 - Wikipedia デメテルの法則 、または最小知識の原則とは、ソフトウェアの設計、特にオブジェクト指向プログラムの設計におけるガイドラインである。 簡潔に言うと「直接の友達とだけ話すこと」と要約できる。 あるオブジェクトAは別のオブジェクトBのサービスを要求してもよい(メソッドを呼び出してもよい)が、オブジェクトAがオブジェクトBを「経由して」さらに別のオブジェクトCのサービスを要求してはならない。 これが望ましくないのは、オ
Ruby2.0からキーワード引数が導入され、Ruby2.1からRequiredキーワード引数が導入されました。 Rubyの通常の引数とキーワード引数のメリット、デメリット、どういうときにキーワード引数を使ったほうが良さそうかということをまとめました。 キーワード引数の通常の引数に比べたメリット Rubyの通常の引数に比べ、キーワード引数には次のようなメリットがあります。 1. 引数の意味がわかりやすくなる 2. 引数の順番を気にしなくてもよくなる それぞれソースコードを交えながら説明します。 メリット1: 引数の意味がわかりやすくなる 通常の引数の場合、引数がある程度増えるとそれぞれの引数が何を意味しているかわかりづらくなってしまいます。 def total(subtotal, tax, discount) subtotal + tax - discount end total(100,
Photo by Flickr: J. A. Alcaide's Photostream jQueryを使うことでブラウザ間の違いを吸収しながらも、簡易にDOM操作のJavaScriptコードを記載することができます。 よく使われるjQueryのDOM操作のメソッドをまとめました。 また、jQuery1.x系とjQuery 2.x系の選択基準として、 1.x系は IE8 以前をサポートするレガシーブラウザ向けのバージョン 2.x系は IE8 以前のサポートは捨てて、高速に安定して動作させることを目指したバージョン ですので、適切なjQueryのバージョンを選んでください。 目次 jQueryの初期化処理の記述場所 子要素の追加(append, appendTo, prepend, prependTo) 要素の挿入(after, insertAfter, before, insertBefo
Photo by Flickr: Image Editor's Photostream Sunspotは、オープンソースの全文検索システムのSolr(ソーラー)を使って、幅広い記述でパワフルな全文検索ができるRubyライブラリです。 商用ではSolrを立てる必要があります。開発環境では開発用のSolrサーバーを使います。 動作確認 Rails 4.2.0 Ruby 2.1.0 sunspot_rails 2.1.1 sunspot_solr 2.1.1 目次 Sunspotのインストール Sunspotの基本的な使い方 リインデックス(reindex) 1. SunspotのインストールGemfileに追加します。 # Gemfile gem 'sunspot_rails' group :development, :test do # 開発環境用のSolrディストリビューション gem '
Railsでページごとにページタイトル(titleタグ)を変更するTipsを説明します。 動作確認 Rails 4.1 1. タイトルを設定するヘルパーメソッドを作成 タイトルを設定するメソッドを追加します。 page_titleがからの場合、base_titleしか表示しないようにしています。 # app/helpers/application_helper.rb module ApplicationHelper def full_title(page_title) base_title = "アプリ名" # 自分のアプリ名を設定する if page_title.empty? base_title else "#{page_title} | #{base_title}" end end end 2. レイアウトの>title<タグからヘルパーメソッドを使う レイアウトファイルのtitle
次のページ
このページを最初にブックマークしてみませんか?
『Rails Webook』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く