Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?
以前 iOS/Android 開発を経験した際に知った Clean Architecture を、Ruby/Rails な API サーバー開発に適用してみた。 Clean Architecture といえば以下の図を元にした説明が多いが、 以下の記事を参考に、今回は Data/Domain/Infra/Presentation レイヤーで分けてみる。(これが一番しっくり来ました) まだMVC,MVP,MVVMで消耗してるの? iOS Clean Architectureについて 最終的なディレクトリ構造 Rails のルールに則り、controllers だけは app 配下に配置している。 Data 層 Entity ActiveRecord::Base を継承したクラス。 こういったクラスは大抵 Fat Model になりがちだが、DB 操作は Entity ではなくReposito
こんにちは、インターネットコンテンツ兼新米エンジニアのTerryです。 日曜日にQiitaを投稿しても伸びないことは知っている。 でもそこは何があったか察してほしい、すまない。 さて本日は、Railsでモデルを4段階joinする方法についてお伝えします。 その過程でjoinsについて分解して解説して、joinsへの理解を深めます。 最初に断っておくと、この書き方は僕の尊敬する先輩エンジニアに教えていただいたもので、僕の備忘と理解を深めるため無断で掲載しようと思った次第です怒られたら削除します。 2段階(孫)とか3段階(ひ孫)は結構あるんですが、4段階(玄孫[やしゃご])はあまりノウハウが転がっていなかったので、こんなやりかたもあるよ、って感じで知っておくとどこかで使えるかもしれません。 4段階、玄孫ですよ。 どれだけ遠いかって言うと、大久保利通の玄孫が麻生太郎です。幕末か。 (画像はUND
Ruby on Rails Advent Calendar 21日目の記事です。 DeviseとOmniauthを使って認証管理をしてみます。 Deviseとは何か Devise is a flexible authentication solution for Rails based on Warden. It: Is Rack based; Is a complete MVC solution based on Rails engines; Allows you to have multiple models signed in at the same time; Is based on a modularity concept: use just what you really need. とGithubにあるように、 WardenをベースとしたRails向けフレキシブル オーセンテ
## # phusion/passenger-docker # https://github.com/phusion/passenger-docker ## # Getting started # Ruby images FROM phusion/passenger-ruby25:latest # ...put your own build instructions here... ## # Nginx # Using Nginx and Passenger RUN rm -f /etc/service/nginx/down # Using Nginx and Passenger RUN rm /etc/nginx/sites-enabled/default ADD nginx/webapp.conf /etc/nginx/sites-enabled/webapp.conf # Confi
Rails のコードを読んでいると、module ClassMethods って多く書かれている事が分かると思いますが、こいつが何をやっているのかを話していきます。 module ClassMethods を説明する前に、まず、以下のような Module と Class を定義します。 module ModuleA def self.class_method_a 'class_method_a' end def instance_method_a 'instance_method_a' end end class ClassA include ModuleA end
Rails 5.1 以降で attribute_was, attribute_change, attribute_changed?, changed?, changed 等が DEPRECATION WARNINGRails 何が起きたか? Rails 5.1 へアップデートして大量に DEPRECATION WARNING や spec エラーが起きたので、調べてみると Rails 5.1 で ActiveRecord::AttributeMethods::Dirty の attribute_was attribute_change attribute_changed? changed? changed 辺りが非推奨になった。 参考: https://github.com/rails/rails/blob/ce93740a5e4437dfc1cf9b0b13da1bad06a2a598/
devise を使って、 メールアドレスのみで初期登録を行う トークン付きのパスワード登録用 URL を受信する パスワードを入力し登録を完了する という3ステップのユーザー登録を実現する方法です。 環境 Ruby: 2.3.1 Rails: 4.2.6 Devise: 4.1.1 サンプル 記事執筆時に作成したサンプルリポジトリを以下に置いています。 necojackarc-sandbox/email-only-signup-with-devise 注意 メールアドレスおよびパスワードのバリデーションについては、完全に省いた説明となっております。 実際に運用する際は、不正な値を登録させないよう、バリデーションを追加しておく必要があります。 また、password confirmation (パスワード確認用入力) も使用していません。 こちらを利用したい場合、この記事の参考元である de
これは何? Railsを使って開発をしている人のほとんどが、 おそらく何かしらの認証機能を提供していると思いますが、 その認証機能って初心者の人からすると非常にややこしい。 確かに、Railsが色々やり易くしてくれてるのはわかるけれども、 逆にブラックボックスすぎて全然意味わからんし!みたいなところもあるかと思います。 また、認証はセキュリティを高めるために非常に重要なトピックでもあり、開発者で担当する人が深く理解しておくことが求められると思います。 ただ、認証はアプリやインフラから独立しているものではないため、認証だけよくても他の部分に脆弱性があれば危険であることは変わらない点に注意してください。 そもそも認証ってなんぞ 認証は、アクセス制限機能と思ってもらえれば大丈夫そうです。 アクセスを制御したい場合に認証機能を利用して閲覧ページなどに制限をかける感じです。 認証の種類 Railsで
このように、入力フォームに「javascript」を埋め込む事が、クロスサイトスクリプティング(XSS)の基本的な手法になる。 以上が基本的なXSSの手法になるが、具体的にどういった脅威があるのか。 脅威例 「セッションハイジャック」:訪問者のクッキー(cookie)情報を抜き取ること。結果不正ログインなどを招いてしまう。 例えばECサイトでセッションハイジャックが行われてしまうと、クレジットカード情報など重要な顧客情報が盗まれてしまい、不正に買い物などが行えてしまう。 また広告システムなどのBtoBシステムでも、不正に他社アカウントを乗っ取りログインすることで数値を書き換えるなどができてしまい、大きな被害が出てしまう。 対策(rails) XSSは、ユーザー入力がHTMLのタグやJavascriptとして認識されてしまうことで発生してしまうので、ここへの対策を打っていく事になる。 rai
Capistrano deploy時に発生する SocketError: getaddrinfo: Temporary failure in name resolutionのエラーの原因と解決方法 エラーメッセージの意味 ソケットエラー: 名前解決のために一時的に失敗しました。 エラー原因 ~/.ssh/know_hostsファイルに記載されているリモートサーバーへのsshによる接続情報が古くなっているために、ssh接続できずにエラーになってしまいます。 解決方法 ssh-keygen -R remote_host_name 上記コマンドにより古いssh接続情報を削除する。 (又は手動で vi ~/.ssh/known_hostsでファイルを開いて、対象のリモートサーバーのhostnameが書かれた該当の1行を削除する。) その後再度sshコマンドを実行する。 これにより、新規ssh接続と
YYPHP#51「みんなが好きなフレームワーク、どのくらいまじめにテストやってる?、PHPを使う上でこれは知っておくべきこと、1番詳しいPHPの技術書はどれですか?、Dockerのベストプラクティスについて聞きたい、アプリケーションのGitリポジトリとインフラのGitリポジトリをそろそろ一緒にしていいか?、PHPUnitのコードバレッジと実行速度の話、PHPとオブジェクト指向を知り尽くした人がこれから目指すさらなる高み」PHPRailsLaravelDockerYYPHP これは2018年09月07日に開催したPHPerイベントYYPHP#51のイベントレポートです。 YYPHPは一言で「PHPerの部室」です。PHPについて、雑に、ゆるく、ワイワイ話し合う集いです。毎回お題を決めずに雑談を出発点にいろいろなことを突発的にやります。集まった人でコードリーディングをすることもあれば、一緒に開
これは何? 大規模なアプリケーションを開発したりする場合、 RailsをAPIサーバーとして利用し、APIクライアントは別に用意するケースが多い。 (弊社ではReactNative) その時に、RailsをどのようにしてAPIサーバー専用とさせるのかの基礎知識を記載して行く。 僕も学びながらなので是非ご指摘あれば教えてください。 API化に必要な知識 基本的には、APIクライアントからのHTTPリクエストが来たら、 そのリクエストに応じたレスポンスを返してあげるというそれだけ。 そのレスポンス部分だけをRailsでやりますよということ。 リクエストの形はHTTPリクエストなのでURLで来て、 Railsサーバーで色々ロジックを動かして、 レスポンスの形はJSON形式で返してあげるのが基本らしいです。 これで1セット。 なので、Railsで普段ウェブアプリケーションを開発している人からしても
概要 SQLキャッシュを使うより、変数を使い回すほうが圧倒的に早い 例えば1ユーザの情報を表示するような場面ではパフォーマンスが気になるレベルではないと思われる。 表のようなデータを表示するような場合に同じデータをたくさん表示するような場合はちゃんと変数に入れたほうが、パフォーマンスが良い はじめに RailsのActiveRecordの仕組みに同じSQLを何度も読んでもキャッシュしてくれて、都度DBにアクセスしなくて良い便利な仕組みがある。 この機能はかなり便利で雑にプログラミングしてもパフォーマンスが落ちにくい。落ちにくいがハイパフォーマンスを求められるところや、多量のデータを表示、作成するような場合だと影響を与えるような気がする。 そこでSQLキャッシュを使った場合と、普通に変数に保存した値を使いまわした場合でベンチマークをとってみた。 SQLキャッシュが効いているかログで確認 キャ
概要 simple_formのBootstrap版を使用している際、 エラーメッセージが該当入力欄のすぐ下に出てくるのは非常にユーザーがわかりやすくてい良い。 presence と format の両方を指定すると、 空欄の時に両方のエラーメッセージが表示され非常に見栄えが良くない。 format だけ指定すれば、未入力の場合もエラーが出るが、 適切なエラーメッセージにはならない。 そもそもそんな細かいところ気にしなくても良いかもしれないですが、 私と同じ神経質なあなた! にはこの記事がお役に立てるかと思います。 方法 この方法は、deviseのソースコードを参考にやってみたらうまく行ったというものですので、 方法としては問題ないかと思います。 仮に未入力禁止で全角文字しか入力をさせたくないfirst_nameという入力欄をつくるとします。 その場合、一行で書いてしまうなら以下のようになる
複雑な条件でデータを抽出する テーブルのデータをより複雑な条件で絞って取得するメソッドをまとめる。 条件式を使用する 基本的な条件式 テーブルのデータを条件式で絞って取得する場合。 データを受け取りたいテーブルに紐づくモデルに対して、 モデル名.where(カラム名: '値') # 例 artistカラムの値が'ももいろクローバーZ' のレコードを取得 @discography = Discography.where(artist: 'ももいろクローバーZ') # 例 artistカラムの値が'ももいろクローバーZ'かつreleased_dateが'2011-07-27' のレコードを取得 @discography = Discography.where(artist: 'ももいろクローバーZ', released_date: '2011-07-27')
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く