データーベース

Flask

【Flask】Flask-Migrateでマイグレーションを管理する

こんにちは、かつコーチです。前回の記事で、db.create_all()にはテーブル構造の変更を反映できないという弱点を紹介しました。今回は、その弱点を解消するFlask-Migrateを使って、モデルの変更を安全にデータベースへ反映する方...
Flask

【Flask】Flask-SQLAlchemyでモデルを定義しCRUD操作をする

こんにちは、かつコーチです。ここまでの記事でルーティングとテンプレートを扱ってきましたが、実際のアプリではデータを保存・取得する仕組みが欠かせません。この記事では、Flaskでデータベースを扱うための定番ライブラリFlask-SQLAlch...
Java

【Spring Boot】N+1問題とJOIN FETCHでの解決

こんにちは、かつコーチです。@OneToMany・@ManyToOneでリレーションを組んだあと、多くの人がハマる落とし穴がN+1問題です。「機能としては正しく動いているのに、なぜか本番でレスポンスが遅い」という相談の多くが、このN+1問題...
Java

【Spring Boot】@Queryでカスタムクエリを書く

こんにちは、かつコーチです。前回、クエリメソッドは条件が複雑になるとメソッド名が長くなりすぎると触れました。そんなときに使うのが@Queryアノテーションです。今回は@Queryを使ったJPQL・ネイティブSQLの書き方を解説します。@Qu...
Java

【Spring Boot】クエリメソッドの命名規則

こんにちは、かつコーチです。findAll()やfindById()は便利ですが、「価格が3000円以上の書籍だけ取得したい」のような条件検索はどうすればよいのでしょうか。Spring Data JPAには、クエリメソッドというメソッド名だ...
Java

【Spring Boot】@OneToMany・@ManyToOneでリレーションを組む

こんにちは、かつコーチです。これまで扱ってきたBookEntityは単独のテーブルでしたが、実際のアプリケーションでは「著者(Author)が複数の書籍(Book)を持つ」のようなテーブル間のリレーションが必ず出てきます。今回は@OneTo...
Java

【Spring Boot】CRUD操作の実装

こんにちは、かつコーチです。EntityとRepositoryの基本を押さえたところで、今回は実際にCRUD(作成・読み取り・更新・削除)をControllerからDBまで一通り繋げて実装してみます。理屈は分かっても、実際に手を動かしてみな...
Java

【Spring Boot】Repositoryインターフェースの基本

こんにちは、かつコーチです。前回はEntityの定義方法を解説しましたが、Entityを作っただけではデータの読み書きはできません。実際にデータベースを操作するにはRepositoryというインターフェースを使います。「インターフェースなの...
Java

【Spring Boot】Spring Data JPAの基本とEntityの定義

こんにちは、かつコーチです。Spring Bootでデータベースを扱うとき、多くの現場で使われているのがSpring Data JPAです。「JDBCと何が違うの?」「Entityって結局なに?」というところで止まってしまう人が多いので、今...
Django

【Django】N+1問題とselect_related・prefetch_relatedでの解決方法

こんにちは、かつコーチです。前回はフォーム(ModelForm)でのバリデーション実装を解説しました。今回は、DjangoのORMを使う上で避けて通れない「N+1問題」を、select_relatedとprefetch_relatedの比較...
Django

【Django】フォーム(forms.Form/ModelForm)でバリデーションを実装する

こんにちは、かつコーチです。前回はQuerySetの基本とフィルタの書き方を解説しました。今回は、ユーザーからの入力を受け取って検証する「フォーム」の実装方法を扱います。Djangoにはforms.Formとforms.ModelFormと...
Django

【Django】QuerySetの基本とフィルタの書き方

こんにちは、かつコーチです。前回はForeignKey・ManyToManyでモデル同士のリレーションを組む方法を解説しました。今回は、そのモデルからデータを取り出すときに必ず使う「QuerySet」の基本を扱います。SQLを書かずにデータ...
Django

【Django】ForeignKey・ManyToManyでリレーションを組む【Django】

こんにちは、かつコーチです。前回はモデルの基本フィールドとCRUD操作を解説しました。今回は、テーブル同士を関連づける「リレーション」の書き方を扱います。ブログアプリなら「記事とカテゴリ」「記事とタグ」のように、モデル同士がつながる場面は必...
Django

【Django】makemigrations/migrateの基本:モデルをDBに反映する

こんにちは、かつコーチです。ここからは「データベース・ORM」編に入ります。Djangoでモデルを定義しても、それだけではデータベースに変化は起きません。makemigrationsとmigrateという2つのコマンドを実行して、初めてデー...
Ruby

【Ruby on Rails】N+1問題とincludesでの解決方法

こんにちは、かつコーチです。開発中は問題なく動いていたのに、本番データが増えた途端に画面表示が極端に遅くなる。Railsを使っていると一度は経験する現象ですが、その原因の多くがN+1問題(関連データを取得する際に、1件ごとに追加のクエリが発...
Ruby

【Ruby on Rails】スコープとクエリメソッドで検索条件を整理する

こんにちは、かつコーチです。コントローラのアクションが増えてくると、whereやorderを使った検索条件があちこちに散らばりがちです。同じような条件を何度も書いていたり、条件が複雑になって可読性が落ちていたりする経験はありませんか。Rai...
Ruby

【Ruby on Rails】バリデーションの基本

こんにちは、かつコーチです。フォームからデータを保存する機能を作っていると、「空欄のまま保存されてしまう」「同じメールアドレスで何人も登録できてしまう」といった困りごとに出会います。こうした不正なデータの保存を防ぐ仕組みが、Railsのバリ...
Ruby

【Ruby on Rails】アソシエーション(has_many・belongs_to)の書き方

こんにちは、かつコーチです。Railsでモデルを作っていると、必ず出てくるのが「モデル同士の関連付け」です。たとえば「記事にはたくさんのコメントがつく」「コメントは1つの記事に属する」といった関係を、Railsではアソシエーション(モデル同...
Ruby

【Ruby on Rails】ActiveRecordの基本:モデルとCRUD操作

こんにちは、かつコーチです。Railsでデータを扱おうとすると、Post.create や Post.find といったコードを目にします。SQLを書いていないのに、なぜデータベースを操作できるのか。最初は不思議に感じるところだと思います。...
Ruby

【Ruby on Rails】マイグレーションの基本:テーブルを作成・変更する

こんにちは、かつコーチです。データベースにテーブルを作りたいとき、SQLを直接書かずに rails generate migration というコマンドを使うと聞いて、戸惑った経験はありませんか。私も最初は「なぜわざわざファイルを作ってから...