中級者向け

Pandas

【Pandas】merge・concatで複数のデータを結合する

こんにちは、かつコーチです。実務のデータ分析では、1つのファイルだけで完結することはほとんどなく、「売上データ」と「顧客マスタ」のように複数のデータを組み合わせる場面が必ず出てきます。この記事では、データ結合の代表的な方法であるmergeと...
Pandas

【Pandas】groupbyでデータをグループ化・集計する

こんにちは、かつコーチです。「商品カテゴリごとの売上合計を出したい」「店舗ごとの平均客単価を知りたい」といった集計作業で必ず使うのがgroupbyです。Excelでいうピボットテーブルに近い機能で、覚えると分析の幅がぐっと広がります。gro...
Pandas

【Pandas】欠損値(NaN)の扱い方:dropna・fillnaの使い分け

こんにちは、かつコーチです。実務のデータには、必ずと言っていいほど欠損値が含まれています。「削除すればいいのか、埋めればいいのか」で迷う方も多いと思うので、この記事ではdropnaとfillnaの使い分けを、判断基準とあわせて解説します。欠...
Flask

【Flask】pytestでFlaskアプリの単体テストを書く

こんにちは、かつコーチです。ルーティング・データベース・ログイン機能と実装が進んでくると、「コードを直しても、他の部分が壊れていないか」を毎回手動で確認するのが大変になってきます。この記事では、Pythonの定番テストツールpytestを使...
Flask

【Flask】Flask-Loginでログイン機能を実装する

こんにちは、かつコーチです。これまでの記事でデータベースの基本操作を学びました。今回は、その知識を活かして、Webアプリに欠かせない「ログイン機能」をFlask-Loginという拡張ライブラリで実装します。Flask-Loginとは?セッシ...
Flask

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

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

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

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

【Spring Boot】比較検証 : Spring BootとDjango、初心者に向いているのはどちらか

こんにちは、かつコーチです。これでSpring Boot編は40本目、最終回です。「バックエンドを本格的に学ぶなら、Spring BootとDjangoどちらがいいですか」これは、Java基礎編・Spring Boot編を読み進めてくれた読...
Java

【Spring Boot】Spring BootでSLF4Jのログ出力を整える方法を中級者向けに解説

こんにちは、かつコーチです。Spring Bootは標準でSLF4J(Simple Logging Facade for Java、複数のログ実装を統一的なAPIで扱えるファサード)とLogbackの組み合わせを内蔵しています。そのためbu...
Java

【Spring Boot】Spring Bootの循環参照エラーの原因と解決法を中級者向けに解説

こんにちは、かつコーチです。サービスクラスを増やしていくと、ある日突然アプリが起動しなくなり、BeanCurrentlyInCreationExceptionという見慣れないエラーに出会うことがあります。これは循環参照(AがBに依存し、Bが...
Java

【Spring Boot】Dockerでコンテナ化する基本

こんにちは、かつコーチです。「自分のPCでは動くのに、サーバーだとJavaのバージョンが違って動かない」という経験はないでしょうか。筆者も過去、ローカルはJava 21なのに本番サーバーはJava 17のままで、起動時に原因不明のエラーに何...
Java

【Spring Boot】環境ごとにapplication.propertiesを切り替える

こんにちは、かつコーチです。前回の記事でjarファイルをサーバーにデプロイする方法を紹介しましたが、開発環境と本番環境でDBの接続先やログレベルが同じというアプリはまずありません。かといって、デプロイのたびにapplication.prop...
Java

【Spring Boot】@DataJpaTestでリポジトリのテストを書く

こんにちは、かつコーチです。@Queryでカスタムクエリを書いたとき、「このJPQLは本当に意図通りのデータを取ってきているか」を確認したくなったことはありませんか。筆者はクエリメソッドの命名を間違えて、意図と違う条件でデータを取得してしま...
Java

【Spring Boot】@WebMvcTestでコントローラのテストを書く

こんにちは、かつコーチです。前回の記事で、@SpringBootTestはDIコンテナ全体を起動するため、テストの数が増えると実行が遅くなるという話をしました。コントローラのリクエスト処理だけを確認したいときは、必要な部分だけを起動する@W...
Java

【Spring Boot】Spring Boot Testの基本

こんにちは、かつコーチです。DIやJPAを使ってCRUDまで作れるようになると、次にぶつかる壁が「テストの書き方が分からない」という悩みです。筆者もJava基礎編で単体テストの書き方は学んだものの、Spring Bootのアプリケーションを...
Java

【Spring Boot】CSRF対策とSpring Securityのデフォルト設定

こんにちは、かつコーチです。フォームログインを実装したあと、POSTリクエストを送るテストコードを書いたら403 Forbiddenが返ってきて困った、という経験はありませんか。筆者も最初にこれに遭遇したとき、認証設定を疑って何時間も見当違...
Java

【Spring Boot】パスワードエンコーダ(BCrypt)の使い方

こんにちは、かつコーチです。前回の記事でUserDetailsServiceを実装しましたが、パスワードを平文のままデータベースに保存していませんか。万が一データベースが漏えいした場合、平文パスワードはそのまま全ユーザーのアカウント情報の漏...
Java

【Spring Boot】フォームログイン機能を実装する

こんにちは、かつコーチです。前回の記事でSpring Securityの基本を解説しましたが、.formLogin(Customizer.withDefaults())だけでは、Spring Securityが自動生成した無機質なログイン画...
Java

【Spring Boot】Spring Securityの基本を理解する

こんにちは、かつコーチです。spring-boot-starter-securityを依存関係に追加した瞬間、それまで自由にアクセスできていた画面が突然ログイン画面に切り替わって驚いた経験はありませんか。これはSpring Security...
Java

【Spring Boot】DTOとEntityを使い分ける設計の考え方

こんにちは、かつコーチです。「EntityをそのままControllerでレスポンスとして返しているけど、これで大丈夫かな」と不安になったことはありませんか。動くには動くのですが、この書き方は運用が進むにつれて確実に問題を起こします。この記...