N+1問題 解消方法 (Rails)

対象のN+1問題 N+1問題を解消する 対象のN+1問題 前回、触れたN+1問題を今回は解消します。 utouto97.hatenablog.com ↓で起こっているN+1が対象です。 <% @todos.each do |todo| %> <div> <%= todo.title %> : <%= todo.user.name %> </div> <% end %> N+1問題を解消す…

N+1問題

前回、ORMについてまとめました。 SQLを書かなくてもDB操作を簡単にできて便利なORMですが、 N+1問題という問題があります。 N+1問題とは RailsでN+1問題を試す N+1を確認する N+1問題とは N+1問題とは、ループ処理の中で、1回ずつクエリを発行してしまう問…

ORMとはなんぞや

ORM (オブジェクト関係マッピング) とは 各言語の有名ORM ORM (オブジェクト関係マッピング) とは ORMとは、Object-Relational Mappingの頭文字をとったものです。 その名前からわかる通り、オブジェクトと関係(関係データベース、RDB)とのマッピングを行…

Babel7の設定ファイル

前回、Babelでトランスパイルを試してみました。 utouto97.hatenablog.com このとき、利用したBabelのバージョンは7です。 $ > ./node_modules/.bin/babel --version 7.14.5 (@babel/core 7.14.6) Babel7では、設定ファイルとして.babelrcファイルだけではな…

Babelでトランスパイル! - JavaScript入門

Babelとは Babelを使ってみる Babelのインストール presetを設定 トランスパイルする Babelとは BabelはJavaScriptのトランスパイラです。 トランスパイラは、あるプログラミング言語で書かれているプログラムを違う言語もしくは違うバージョンの言語のプロ…

ES modules と CommonJS - JavaScript入門

ES modules と CommonJS import/export (ES modules) と require/exports (CommonJS) ES modules と CommonJS JavaScriptで、モジュールという仕組みがあります。 外部ファイルの読み込み/書き出しを行うための仕組みです。 import/exportが、モジュールの仕…

import と export - JavaScript入門

JavaScriptで関数やクラスをimportで読み込む JavaScriptで関数やクラスをexportで書きだす export default を使う JavaScriptで外部ファイルから、関数やクラスを読み込むにはimportを使います。 また、importで読み込みをできるようにするには、exportを使…

Expressでルーティング処理 (Node.js)

Expressでルーティング処理を行う express.Router Expressでルーティング処理を行う ExpressのWebサーバーで、ルーティング処理を行うのはとても簡単です。 次のように初期化したappのgetメソッドやpostメソッドで設定できます。 var express = require('exp…

Expressでサーバー構築 (Node.js)

Expressとは Expressをインストールする ExpressでHello world Expressとは Expressとは、Node.jsのWebアプリケーションフレームワークです。 RailsのNode.js版みたいなイメージです。 ルーティングやリクエストボディのパースなどもできます。 また、ミドル…

Dockerでhttpサーバー on Node.js

はじめに Dockerを使ってhttpサーバー on Node.jsを構築する はじめに 今回は、↓でつくったhttpサーバーをDocker環境で構築します。 utouto97.hatenablog.com 準備としては、Dockerとdocker-composeが入っている前提で進めていきます。 $ docker -v Docker v…

docker グループ

Dockerを使うためには、dockerコマンドを多用しますね。 $ docker ps $ docker build $ docker run $ docker logs ですが、dockerコマンドを実行するためには、権限が必要です。 毎回sudoをつけるのも大変ですし、sudoユーザーじゃないユーザーはdockerを使…

Node.jsでhttpサーバー - JavaScript

Node.jsでhttpサーバーを秒で建てる GETパラメータを処理する。 Node.jsでhttpサーバーを秒で建てる 前提として、Node.jsがインストール済みであるとします。 では、速攻でhttpサーバーを構築します。 まず、ファイルapp.jsを作成します。 $ touch app.js フ…

Node.js とは - JavaScript入門

JavaScriptはブラウザ上で動作する JavaScriptを実行できるアプリケーションNode.js Node.jsでHello world! JavaScriptはブラウザ上で動作する JavaScriptはHTMLやCSSで記述されたWebページに動きをつけるために、ブラウザ上で実行可能な言語でした。 Chrome…

asyncとawait - JavaScript

JavaScriptのasync JavaScriptのawait JavaScriptのasync JavaScriptで非同期処理を書く方法は、コールバック関数、Promise、そしてasyncがあります。 asyncは関数宣言につけることができ、asyncを付けた関数は非同期で処理されます。 async function f() { …

非同期処理 (Promise) - JavaScript入門

JavaScriptの非同期処理 非同期処理とコールバック関数 JavaScriptにはPromiseがある JavaScriptの非同期処理 JavaScriptでは、非同期処理を行うことができます。 非同期処理とは、その処理の完了を待たずにほかの処理が実行される処理のことです。 タイマー…

コールバック関数 - JavaScript入門

JavaScriptのコールバック関数と高階関数 高階関数とコールバック関数の例 コールバック関数は非同期処理で使われる setTimeoutの例 JavaScriptのコールバック関数と高階関数 JavaScriptでは、関数はオブジェクトの一種である。 そのため、関数の引数を関数…

varとletとconst - JavaScript入門

JavaScriptの変数・定数 varとletとconstの比較 再代入と再定義 varとletとconst 巻き上げについて JavaScriptの変数・定数 JavaScriptにもほかの言語同様に変数と定数があります。 今回は、その変数と定数の宣言方法をみていきます。 変数の宣言はいくつか…

関数 (function) - JavaScript入門

JavaScriptで関数を宣言する function を使う 無名関数 アロー関数を使う JavaScriptで関数を宣言する 関数は、引数をとり、処理を行い、値を返すものです。 イメージはこんな感じ 関数は、何かしらの処理をします。 ここでは、足し算を行う関数を考えます。…

forEachの使い方 - JavaScript入門

JavaScriptのforEach forEachでインデックスも取得する JavaScriptのforEachから途中で抜ける (breakは使えるのか) JavaScriptのforEachでbreakは使えない breakの代替手段 continueについて JavaScriptのforEach JavaScriptでは、forEachを使ってループを記…

繰り返し処理あれこれ (for, while, for) - JavaScript入門

JavaScriptの繰り返し処理 JavaScriptでforを使う for (基本) for ... in ~ for ... of ~ JavaScriptでwhileを使う JavaScriptの繰り返し処理 JavaScriptでは、ほかのプログラミング言語と同様に、forとwhileを使って繰り返し処理(ループ処理)を記述できま…

Git 入門④

Git

git merge Fast-forward Fast-forwardではないマージ コンフリクト git merge git mergeで複数のブランチを一つにまとめることができます。 前回↓も少し使ってみました。 utouto97.hatenablog.com Fast-forward 前回のマージは以下のパターンになります。 こ…

Git 入門③

Git

git branch 新しいブランチを作成 ブランチでファイルを編集する ブランチを統合する git branch Gitでは,変更の履歴をつないで管理します。 その一つ一つをブランチといいます。 ブランチは途中から分岐したり、また一つになったりすることができます。 こ…

rakeを使う 続き

↓の続き utouto97.hatenablog.com 試してみる デフォルトタスク ネームスペース cleanタスク 試してみる デフォルトタスク task default:を設定することで、デフォルトで実行されるタスクを設定することができます。 デフォルトタスクは、rakeコマンドが引数…

rakeを使う

Rakefile 試してみる 実行環境 シンプルなタスク 依存のあるタスク 引数をとるタスク Rakefile rubyのmakeがrakeです。 そして、ruby版のMakefileがRakefileとなります。 このRakefileには、Rubyを使ってタスクを記述し、rakeコマンドから実行することが可能…

idをランダムな文字列にする

はじめに SecureRandom uuid hex base64 Railsでidをランダムな文字列にする はじめに Railsを使っているとデータのidは、デフォルトでは整数の連番になります。 この場合、URLにパラメータとしてidを含む場合 (例えば、https://hostname/api/v1/article/123…

railsコマンドとrakeコマンド

Rails のこと調べてたら、よくrakeコマンドなるものが使われていました。 しかも、rakeコマンド使うように書かれているところも、railsコマンドでできてしまいます。 この二つのコマンド、何なんだろうと思い調べてみました。 まず、railsコマンドですが、こ…

Rails で ToDo アプリをつくる⑨ (Rails 入門)

↓の続き utouto97.hatenablog.com 今回やること Herokuアプリを作成 Postgresの追加 アプリをデプロイする 今回やること ここまで作ってきたToDoアプリをHerokuにデプロイします。 Herokuはクレジットカードを登録すると、フリープランでずっと無料で使うこ…

Rails で ToDo アプリをつくる(Rails 入門)目次

Railsの練習として、ToDoアプリを作って記事にしたので、その目次を作っておきます。 ソースコード github.com アプリ https://rails-todo--app.herokuapp.com/ 目次 ① どんなToDoアプリを作るか & 環境構築 utouto97.hatenablog.com ② ToDo一覧を表示する (…

Rails で ToDo アプリをつくる⑧ (Rails 入門)

↓の続き utouto97.hatenablog.com 今回やること フィルタリング機能の追加 今回やること 今回はフィルタリング機能を追加します。 ToDoの状態 (status) によってフィルタリングします。 すべて表示、In progressのみ、Completeのみ、の3パターンを実装します…

Rails で ToDo アプリをつくる⑦ (Rails 入門)

↓の続き utouto97.hatenablog.com 今回やること 編集用フォームの準備 編集用アクションの追加 今回やること 今回は、CRUDのU (Update) として、ToDoの内容の編集を実装していきます。 あらかじめ用意していたEditボタンに機能を実装していきます。 編集用フ…