2023-07

Python

【Python】フォルダ内のファイルを自動で整理するスクリプトを作る

こんにちは、かつコーチです。ダウンロードフォルダの中が、画像・PDF・zipでぐちゃぐちゃになっていませんか。「手作業で仕分けるのは面倒だけど、いちいち探すのも大変」そんな悩みは、Pythonの標準ライブラリ(追加インストールなしで使える公...
Python

【Python】CSVファイルを一括処理する自動化スクリプトを書く

こんにちは、かつコーチです。「毎月、支店ごとの売上CSVを1つずつ開いて、Excelで合計を出している」そんな作業に、地味に時間を取られていませんか。この記事では、複数のCSVファイルをまとめて読み込み、集計まで自動で行うスクリプトの作り方...
Python

【Python】テストカバレッジを計測する方法(pytest-cov)

こんにちは、かつコーチです。テストを書き始めると、次に気になるのがこの疑問です。「自分のコード、どこまでテストできているんだろう?」感覚だけで「たぶん大丈夫」と判断してしまうと、テストしていない部分に潜むバグを見逃しがちです。この記事では、...
Python

【Python】モックを使ったテストの書き方(unittest.mock)

こんにちは、かつコーチです。外部APIを呼び出す処理のテストを書こうとして、こんな悩みに直面したことはありませんか。「テストのたびに本物のAPIを叩くと、料金がかかるし遅い」「ネットワークが切れているとテストが落ちる」この記事では、こうした...
Python

【Python】unittestとpytestの違い・使い分け

こんにちは、かつコーチです。Pythonでテストを書こうとすると、必ず出てくる疑問があります。「標準ライブラリのunittestと、外部ライブラリのpytest、どっちを使えばいいの?」ネット上のサンプルコードでも、両方の書き方が混在してい...
Python

【Python】pytestの基本:テストの書き方入門

こんにちは、かつコーチです。「関数を書いたら、動くかどうか毎回print()で確認している」そんな方は多いのではないでしょうか。print()での確認は手軽ですが、確認項目が増えるほど見落としが増えます。この記事では、Pythonで最も使わ...
Laravel

【Laravel】Eloquentのキャスト・アクセサ・ミューテタの使い分け

こんにちは、かつコーチです。前回はソフトデリートによる安全な削除の仕組みを解説しました。今回は、Eloquentモデルの値を「取得するとき」「保存するとき」に自動加工できる3つの機能、キャスト・アクセサ・ミューテタを扱います。似たような役割...
CakePHP

【Laravel】ソフトデリート(SoftDeletes)の使い方

こんにちは、かつコーチです。前回はトランザクションでデータ整合性を守る方法を解説しました。今回は、削除処理を「取り消せる形」にしておくための機能、SoftDeletes(ソフトデリート)を扱います。「うっかり削除してしまった」というミスは、...
Laravel

【Laravel】トランザクション(DB::transaction)でデータ整合性を守る

こんにちは、かつコーチです。前回はページネーションの実装方法を解説しました。今回は、複数のテーブルを更新する処理で必ず意識しておきたい「トランザクション」を扱います。「一部だけ更新が成功して、一部だけ失敗する」という状態は、データベースの整...
Laravel

【Laravel】LengthAwarePaginatorでページネーションを実装する

こんにちは、かつコーチです。前回はN+1問題とeager loadingについて解説しました。今回は、一覧画面を作るときに必ずと言っていいほど必要になる「ページネーション」を扱います。Laravelにはpaginate()という便利なメソッ...
Laravel

【Laravel】N+1問題とは?eager loading(with)で解決する

こんにちは、かつコーチです。前回はQuery Builderの基本を扱い、Eloquentとの使い分けを紹介しました。今回は、Eloquentでリレーションを扱う人が必ずと言っていいほど一度は踏む落とし穴、N+1問題を取り上げます。「画面表...
Laravel

【Laravel】Query Builderの基本:Eloquentを使わないクエリの書き方

こんにちは、かつコーチです。前回はFactoryでテストデータを効率よく作る方法を紹介しました。これまでの記事では Article::where(...) のようにEloquentモデルを経由してデータを取得してきましたが、実はLarave...
Laravel

【Laravel】Factoryでダミーデータを効率よく作る

こんにちは、かつコーチです。前回はSeederの3つの実装方法を紹介し、大量データにはFactoryとの組み合わせが向いていると触れました。今回はそのFactoryを詳しく掘り下げていきます。「テストデータを100件作りたいけど、1件ずつ書...
Laravel

【Laravel】Seederでテストデータを入れる3つの方法

こんにちは、かつコーチです。前回は多対多リレーション(belongsToMany)を扱いました。実際にリレーションの動きを確認しようとすると、記事・タグ・中間テーブルにそれぞれデータを手入力するのは大変ですよね。そこで今回は、テストデータを...
Laravel

【Laravel】多対多リレーション(belongsToMany)を実装する

こんにちは、かつコーチです。前回は hasMany と belongsTo を使って、1対多のリレーションを扱いました。今回は、Eloquentのリレーションの中でもつまずく人が多い「多対多(belongsToMany)」を扱います。「1つ...
Laravel

【Laravel】Eloquentのリレーション:hasMany・belongsToの使い分け

こんにちは、かつコーチです。前回はEloquentの基本操作を解説しました。実際のアプリケーションでは、「投稿」と「コメント」、「ユーザー」と「投稿」のように、テーブル同士が関連し合っているケースがほとんどです。今回は、Eloquentでテ...
Laravel

【Laravel】Eloquentとは?Laravelの顔ともいえるORMを理解する

こんにちは、かつコーチです。前回はMigrationを使って、テーブル構造をコードで管理する方法を解説しました。テーブルが作れるようになったら、次はそのテーブルのデータをPHPのコードから読み書きする番です。今回はLaravelの中でも特に...
Laravel

【Laravel】Migrationの基本:テーブルをコードで管理する

こんにちは、かつコーチです。前回まででルーティングとコントローラの基本的な応用を見てきました。ここからはデータベース編に入っていきます。最初のテーマは、Laravelでテーブルを作成・変更するときに欠かせない「Migration(マイグレー...
Laravel

【Laravel】Route Model Bindingで自動的にモデルを取得する

こんにちは、かつコーチです。前回はNamed Routeについて解説しました。今回は、URLのパラメータを扱うコントローラをもっとシンプルに書ける「Route Model Binding」を紹介します。「IDを受け取って、モデルを検索して、...
Laravel

【Laravel】Named Routeでルートに名前をつけるメリット

こんにちは、かつコーチです。前回は、リダイレクト処理のパターンについて解説しました。その中で redirect('/mypage') のようにURLを直接書くコードが何度か出てきましたが、実は現場のLaravelコードではあまり見かけません...