【2025年最新】アニメ検索サイト「anipochi(アニポチ)」正式リリース|次に観るアニメがすぐ見つかる

アニメ検索・アニメ視聴の情報探しをもっと簡単に。

2025年7月11日、

アニメ作品検索サイト 「anipochi(アニポチ)」 が正式リリースしました。

作品名・キャラクター名・声優名でサクッと検索でき、放送時期やあらすじ、スタッフ情報などを一覧で確認できます。
「次に観るアニメが決まらない」「おすすめアニメを今すぐ知りたい」という方に最適な無料のアニメ情報プラットフォームです。

anipochi(アニポチ)公式アイキャッチ:アニメをもっと身近に、もっと手軽に

目次

1. anipochi(アニポチ)とは?
2. 主要機能(アニメ検索に強い理由)
3. こんな人におすすめ
4. 使い方(3ステップ)
5. リリース背景
6. 今後のアップデート予定
7. サービス概要
8. よくある質問(FAQ)
9. 今すぐ試す(無料)

anipochi(アニポチ)とは?

anipochi(アニポチ) は、アニメファンが「次に観る一本」に出会えることを目指したアニメ作品検索サイトです。スマホ・PCからログイン不要ですぐ使え、作品名/キャラクター名/声優名などのキーワードで直感的に検索できます。

主要機能(アニメ検索に強い理由)

  • 直感検索:キーワードを入れるだけで関連作品を高速表示
  • 作品詳細:放送時期・あらすじ・キャスト・スタッフを1ページに集約
  • 関連記事・おすすめ表示:話題作・名作から次に観る候補が見つかる
  • マルチデバイス対応スマホ/PCで快適に閲覧
  • 無料で利用可:ユーザー登録なしですぐ使える

こんな人におすすめ

  • 季節アニメから視聴候補を素早く決めたい
  • キャラクター名や声優から作品を逆引きしたい
  • 名作・話題作の基本情報を一気に確認したい

使い方(3ステップ)

  1. anipochiにアクセス
  2. 作品名・キャラ名・声優名などを入力
  3. 検索結果から作品ページへ→あらすじ・放送時期・キャストをチェック

▶ anipochi(アニポチ)を今すぐ使う

リリース背景

アニメ作品が膨大に増えた一方、「次に観たいアニメを探す時間が長い」という課題は根強くあります。anipochiは「アニメをもっと身近に、もっと手軽に」をコンセプトに、情報探索の摩擦を減らすため設計されました。

今後のアップデート予定

  • 視聴履歴・お気に入りリスト
  • 類似作品のレコメンド
  • ユーザー参加型レビュー・評価

より自分に合ったアニメに出会える体験を拡張していきます。

サービス概要

よくある質問(FAQ)

Q. 会員登録は必要ですか?
A. いいえ、不要です。無料で今すぐご利用いただけます。
Q. スマホでも使えますか?
A. はい。スマートフォン最適化済みです。
Q. 今後、レビュー機能は追加されますか?
A. はい、アップデート予定に含まれています。

今すぐ試す(無料)

「次に観るアニメ」を数分で決めたい方は、anipochiをぜひお試しください。
▶ anipochi を使ってみる


お問い合わせ:anipochi運営事務局 / info@anipochi.com

 

テスト設計とテスト実施の基本ガイド

今回案件参画に向けて、名前しか知らなかったテスト設計を行うとのことで

テスト設計とはなにか、どういう目的で行うのかを調べてわかりやすくまとめました

正直自分はまだざっくりとしか理解できていませんが、こんな物だよってことで覚えていただけると嬉しいです

1. テスト設計とは?

テスト設計は、ソフトウェアやシステムのテストを効果的に行うための計画を作成するプロセスです。このプロセスでは、何をテストするか、どのようにテストするか、どの順序でテストするかを明確にします。

1.1 テスト設計の重要性

  • 品質向上:バグや不具合を早期に発見し、修正することで、製品の品質を向上させます。
  • リスク軽減:重大な欠陥が市場に出る前に発見できるため、リスクを軽減します。
  • 効率化:計画的なテストにより、テストの重複や漏れを防ぎ、効率的にテストを実施できます。

2. テスト設計のステップ

2.1 要求分析

ソフトウェアの要求仕様を理解し、テストケースを作成するための基盤を築きます。

2.2 テスト計画の作成

  • テスト範囲の決定:どの機能や部分をテストするかを決めます。
  • テスト手法の選定単体テスト、統合テスト、システムテストなど、どのレベルでテストを行うかを決めます。
  • テスト環境の準備:テストを実施するための環境(ハードウェア、ソフトウェア、ネットワークなど)を準備します。

2.3 テストケースの作成

テストケースは具体的なテストの手順や条件を記載した文書です。以下の項目を含めます。

  • テストID:一意の識別子
  • テスト項目:テストする機能や部分
  • 前提条件:テストを実施する前の状態や準備
  • 手順:具体的なテスト手順
  • 期待結果:テスト実施後に期待される結果

2.4 テストデータの準備

テストを実施するために必要なデータを準備します。例えば、ユーザーデータ、トランザクションデータなどです。

3. テスト実施

3.1 テスト環境のセットアップ

テスト計画に基づき、テスト環境をセットアップします。

3.2 テストの実行

  • テストケースに従って実行:テストケースに記載された手順に従ってテストを実行します。
  • 結果の記録:実際の結果と期待結果を比較し、差異を記録します。

3.3 テスト結果の評価

テスト結果を評価し、バグや不具合があれば報告します。

4. テストレポートの作成

4.1 テストサマリー

テストの概要をまとめます。テストの目的、範囲、方法、結果を記載します。

4.2 バグレポート

発見されたバグや不具合を詳細に記載します。以下の項目を含めます。

  • バグID:一意の識別子
  • 概要:バグの簡単な説明
  • 再現手順:バグを再現するための手順
  • 期待結果:本来期待される結果
  • 実際の結果:実際に観察された結果

5. テスト設計と実施のベストプラクティス

5.1 継続的なレビューと改善

テスト設計と実施の過程で継続的にレビューを行い、改善点を見つけて修正します。

5.2 自動化の活用

可能な部分はテスト自動化ツールを活用し、効率的にテストを実施します。

5.3 チーム間のコミュニケーション

開発チームや他の関係者と密にコミュニケーションを取り、テスト設計や実施に関するフィードバックを共有します。

デバッガーとテスト設計の違い

1. デバッガーの役割:

  • リアクティブ: デバッガーは、既に発生した問題やバグを修正するために使用されます。コードをステップバイステップで実行し、バグの原因を特定します。
  • 個別の問題解決: 一度に一つの問題に集中し、その問題の根本原因を見つけ出して修正します。

2. テスト設計の役割:

  • プロアクティブ: テスト設計は、バグや不具合を未然に防ぐために行います。システムやソフトウェアのあらゆる部分を計画的にテストすることで、問題が発生する前に発見します。
  • 包括的な検証: ソフトウェア全体の機能やパフォーマンスを包括的にチェックします。これには、単体テスト、統合テスト、システムテスト、ユーザ受入テストなどが含まれます。

共通点:

  • 品質向上: どちらも最終的にはソフトウェアの品質を向上させることを目指しています。
  • 問題発見: バグや不具合を発見し、修正することでユーザーにとって信頼性の高いソフトウェアを提供します。

テスト設計の具体例:

  1. 単体テスト (Unit Test):
    • 各機能やメソッドが正しく動作するかを個別にテストします。
    • 例えば、ログイン機能が正しいユーザー名とパスワードで正常に動作するかをテストする。
  2. 統合テスト (Integration Test):
    • 複数の機能やモジュールが連携して正しく動作するかをテストします。
    • 例えば、ユーザーが商品をカートに追加し、チェックアウトする一連のプロセスをテストする。
  3. システムテスト (System Test):
    • ソフトウェア全体が仕様通りに動作するかをテストします。
    • 例えば、全ての機能が一つの統合されたシステムとして正しく動作するかをテストする。
  4. ユーザ受入テスト (User Acceptance Test):
    • エンドユーザーが実際にシステムを使用して、期待通りに動作するかを確認します。
    • 例えば、ユーザーが特定のシナリオを実行して、全ての機能が期待通りに動作するかを確認する。

まとめ

テスト設計とデバッガーの役割は似ている部分もありますが、アプローチや目的には違いがあります。テスト設計は、包括的かつ計画的にソフトウェアの品質を保証するためのプロセスであり、デバッガーは個別の問題を詳細に調査して修正するためのツールです。

参考サイト

products.sint.co.jp

RDB・NoSQLの違い

RDB(リレーショナルデータベース)

NoSQL(非リレーショナルデータベース)

リレーショナルデータベース(RDB

特徴

  1. 表形式:
    • データは「表(テーブル)」に保存され、行(レコード)と列(フィールド)に分かれています。
    • 例:Excelの表のように、各行が一つのデータ項目、各列がデータの属性です。
  2. 決まったルール(スキーマ:
    • 各テーブルには、どんな種類のデータが入るかが決まっています。
  3. SQLという言語を使う:
    • データの検索や変更にはSQL(Structured Query Language)という共通の言語を使います。
  4. 信頼性が高い:
    • データの正しさや一貫性を厳密に保つ仕組みがあります。

利点

  • データの整理が簡単: 表の形式でデータを扱うので、理解しやすいです。
  • 強力なクエリ機能: 複雑なデータの検索や操作が簡単にできます。
  • データの正しさを保証: ルールに従ってデータが保存されるので、ミスが少ないです。

NoSQLデータベース

特徴

  1. 柔軟なデータ形式:
    • スキーマが固定されていないため、異なる種類のデータを柔軟に保存できます。
  2. 色々なデータモデル:
    • ドキュメント型、キー・バリュー型、グラフ型など、データを保存する方法がいくつかあります。
  3. 拡張しやすい:
    • 必要に応じてサーバーを追加し、簡単にシステムを拡張できます。
  4. 柔軟な整合性:
    • すべてのデータがすぐに正しくなるわけではないが、最終的には正しい状態に整う仕組みがあります。

利点

  • データの追加や変更が簡単: スキーマが柔軟なので、データの変更が容易です。
  • 大量のデータを処理可能: 高いスケーラビリティを持ち、大量のデータを効率的に扱えます。
  • さまざまな用途に対応: 様々なデータ形式に対応でき、特定の用途に最適化できます。

具体例: ソーシャルメディアアプリ

初期データ構造

  • 最初はユーザーの基本情報だけを保存します。
{
  "name": "Taro",
  "email": "taro@example.com"
}

1. プロフィール写真の追加

  • 新機能として、ユーザーがプロフィール写真をアップロードできるようにします。
{
  "name": "Taro",
  "email": "taro@example.com",
  "profile_picture": "taro.jpg"
}

2. ユーザーバイオの追加

  • ユーザーが自己紹介を追加できるようにします。
jsonコードをコピーする
{
  "name": "Taro",
  "email": "taro@example.com",
  "profile_picture": "taro.jpg",
  "bio": "I love coding and hiking."
}

3. フォロワー情報の追加

  • ユーザーが他のユーザーをフォローできるようにします。
{
  "name": "Taro",
  "email": "taro@example.com",
  "profile_picture": "taro.jpg",
  "bio": "I love coding and hiking.",
  "followers": ["user123", "user456"]
}

4. 投稿機能の追加

  • ユーザーが投稿を作成できるようにします。
{
  "name": "Taro",
  "email": "taro@example.com",
  "profile_picture": "taro.jpg",
  "bio": "I love coding and hiking.",
  "followers": ["user123", "user456"],
  "posts": [
    {
      "post_id": "1",
      "content": "Hello, world!",
      "timestamp": "2024-07-10T12:34:56Z"
    }
  ]
}

NoSQLの柔軟性

NoSQLでは、このように必要に応じて新しいフィールドを追加することが簡単にできます。リレーショナルデータベース(RDB)では、スキーマが固定されているため、新しいカラムを追加するにはテーブルの変更が必要であり、それに伴う影響も考慮する必要があります。

NoSQLの柔軟性により、データ構造が頻繁に変わる状況や、新しい機能が頻繁に追加されるアプリケーションでの開発が迅速かつ容易になります。

2つのデータベースを簡単に説明すると

リレーショナルデータベース(RDB)を本棚に例える

RDBは、きれいに整理された本棚のようなものです。

  1. 本棚(テーブル):

    • 本棚には、特定のジャンルやカテゴリーごとに本(データ)が整理されています。
  2. 本の棚(列):

    • 本棚の各棚には、特定の種類の本が並んでいます。例えば、「著者名」「タイトル」「出版年」などのラベルがついています。
  3. 本(行):

    • 各本棚の棚に並ぶ本は、それぞれのデータ項目に相当します。一冊一冊が、特定の情報を持っています。
  4. 目次(インデックス):

    • 目次を使えば、特定の本をすぐに見つけることができます。RDBではインデックスがこれに相当します。
  5. 規則(スキーマ:

    • 本棚には整理のルールがあり、新しい本を追加する際もそのルールに従う必要があります。

    RDB(本棚)の習得のしやすさ

    • 規則が明確:
      • 本棚には本を並べるための明確な規則があり、その規則に従うことでデータを整理する方法がわかりやすくなっています。
      • 例: 「著者名」「タイトル」「出版年」という棚があり、新しい本を追加するときは、この規則に従って棚に並べます。
    • 一貫性:
      • すべての本は同じ構造を持っており、一貫して同じ方法でデータを扱うことができます。
      • 例: すべての本には必ず「著者名」「タイトル」「出版年」の情報が含まれます。
    • 関係の定義:
      • 本棚内での本の関係性(参照の整合性)が明確に定義されています。
      • 例: ある著者の全ての本を一覧する際には、著者名の棚から関連する本をすべて取り出せばよいです。

NoSQLデータベースを大きな箱に例える

NoSQLは、大きな箱のようなものです。

  1. :

    • 大きな箱には、さまざまな形や大きさのものが無造作に入っています。例えば、ノート、本、写真アルバム、CDなどが一緒に入っています。
  2. アイテム(ドキュメント):

    • 箱の中に入っているアイテムは、それぞれが独自の構造を持っています。ノートにはテキストが書かれていたり、写真アルバムには写真が貼られていたりします。
  3. 整理の柔軟性:

    • 箱の中には自由にアイテムを追加したり、取り出したりできます。例えば、急にCDを追加することになっても、箱の中のスペースにそのまま入れることができます。
  4. 種類が多様:

    • 箱の中には、まったく異なる種類のアイテムが混在していても問題ありません。例えば、ノートのページが増えたり、新しい種類のアイテムを追加したりしても、特別な整理のルールを変更する必要はありません。

    NoSQL(箱)の習得難易度の高さ

    • 規則の欠如:
      • 箱の中には明確な整理規則がなく、アイテムを自由に追加できます。これは柔軟性が高い反面、どのようにデータを整理すべきか自分で決める必要があります。
      • 例: 箱の中に新しいアイテム(例えば、写真アルバム)を追加するときに、それをどのように分類し、整理するかを自分で考える必要があります。
    • 多様なデータ構造:
      • 箱の中にはさまざまな種類のアイテムが混在しており、それぞれが異なる構造を持っています。各アイテムの扱い方を理解し、適切に管理するための知識が必要です。
      • 例: ノート、写真アルバム、CDなどが一緒に入っている場合、それぞれのアイテムに対して異なる方法でアクセスし、操作する必要があります。
    • スキーマデザインの複雑さ:
      • データのスキーマ(構造)を自分で設計する必要があります。最適なスキーマデザインは、アプリケーションの要件やデータアクセスパターンに依存するため、これを正しく設計するのは難しいです。
      • 例: ユーザー情報、投稿、コメントなど、異なるデータをどのように保存するかを設計する必要があります。
    • クエリ言語の多様性:
      • NoSQLデータベースには、RDBSQLのような標準的なクエリ言語がない場合が多く、各データベースごとに異なるクエリ言語やAPIを学ぶ必要があります。
      • 例: MongoDBではMongoDBクエリ言語、CassandraではCQL(Cassandra Query Language)など、異なるクエリ方法を学ばなければなりません。

サイバー攻撃の種類と概要

KADOKAWAサイバー攻撃ニュースを見て、エンジニアとして調べておいたほうがいいと 感じたので調べてまとめてみました!

サイバー攻撃には多くの種類があり、それぞれ異なる手法や目的があります。以下は代表的なサイバー攻撃の種類とその説明です:

  1. フィッシング(Phishing
    • 信頼できる組織や個人を装って、ユーザーから個人情報や認証情報を騙し取る手法です。メールや偽のウェブサイトを利用することが多いです。
  2. マルウェアMalware
    • コンピュータシステムに損害を与えるために設計された悪意のあるソフトウェアの総称です。ウイルス、トロイの木馬ランサムウェアなどが含まれます。
  3. ランサムウェアRansomware
    • コンピュータシステムを暗号化し、解除のために身代金を要求するマルウェアの一種です。データを取り戻すために金銭を要求します。
  4. DDoS攻撃(Distributed Denial of Service attack)
    • 多数のコンピュータを使って特定のサーバやネットワークに大量のトラフィックを送信し、サービスを停止させる攻撃です。
  5. SQLインジェクションSQL Injection)
    • 悪意のあるSQLコードを入力フィールドに挿入し、データベースを操作する攻撃です。データの漏洩や破壊が目的です。
  6. クロスサイトスクリプティングXSS、Cross-Site Scripting)
  7. 中間者攻撃(MITM、Man-in-the-Middle attack)
    • 通信を傍受し、送信者と受信者の間に立って情報を盗む攻撃です。暗号化されていない通信が狙われやすいです。
  8. ゼロデイ攻撃(Zero-Day attack)
    • ソフトウェアの未知の脆弱性を狙った攻撃です。ベンダーが脆弱性を認識して修正する前に行われます。
  9. ドライブバイダウンロード(Drive-By Download)
    • ユーザーが特定のウェブサイトを訪問しただけで、知らないうちにマルウェアがダウンロードされる攻撃です。
  10. ブルートフォース攻撃(Brute Force attack)
    • パスワードや暗号鍵を総当たりで試行する攻撃です。強力なパスワードが設定されていない場合に効果的です。

今回は自分が知っていたものと新たに知ったものをご紹介します

マルウェアMalware

  • 概要: コンピュータシステムに損害を与えるために設計された悪意のあるソフトウェアの総称。
  • 種類: ウイルス、トロイの木馬スパイウェアランサムウェアなど。
  • 目的: データの破壊や盗難、システムの損壊、ユーザーの監視など。

フィッシング(Phishing

  • 概要: 信頼できる組織や個人を装って、ユーザーから個人情報や認証情報を騙し取る手法。
  • 方法: 主に偽のメールやウェブサイトを利用し、ユーザーに偽のリンクをクリックさせたり、個人情報を入力させたりする。

SQLインジェクションSQL Injection)

  • 概要: 悪意のあるSQLコードを入力フィールドに挿入し、データベースを操作する攻撃。
  • 方法: ユーザー入力が直接SQLクエリに組み込まれる場合に発生。脆弱なウェブアプリケーションが標的。
  • 目的: データの漏洩、改ざん、削除など。

クロスサイトスクリプティングXSS、Cross-Site Scripting)

  • 概要: 悪意のあるスクリプトをウェブページに挿入し、ユーザーのブラウザで実行させる攻撃。
  • 種類: 反射型(反射XSS)、保存型(永続XSS)、DOMベースのXSS
  • 目的: セッションハイジャック、ユーザーデータの盗難、フィッシング攻撃の補助など。

ゼロデイ攻撃(Zero-Day attack)

  • 概要: ソフトウェアの未知の脆弱性を狙った攻撃。ベンダーが脆弱性を認識して修正する前に行われる。
  • 方法: 未知の脆弱性を利用するため、攻撃者は通常、迅速に攻撃を実行する。
  • 目的: データの盗難や破壊、システムの乗っ取りなど。

ドライブバイダウンロード(Drive-By Download)

  • 概要: ユーザーが特定のウェブサイトを訪問しただけで、知らないうちにマルウェアがダウンロードされる攻撃。
  • 方法: 悪意のあるコードが埋め込まれたウェブページを訪れるだけで感染が始まる。
  • 目的: マルウェアの感染、個人情報の盗難、システムの乗っ取りなど。

ブルートフォース攻撃(Brute Force attack)

  • 概要: パスワードや暗号鍵を総当たりで試行する攻撃。
  • 方法: あらゆる可能な組み合わせを試して正しいパスワードや鍵を見つける。
  • 目的: アカウントへの不正アクセス、システムの乗っ取りなど。

DDoS攻撃(Distributed Denial of Service attack)

  • 概要: 多数のコンピュータを使って特定のサーバやネットワークに大量のトラフィックを送信し、サービスを停止させる攻撃。
  • 方法: ボットネットなどを利用して、大量のリクエストを送信し、ターゲットのリソースを枯渇させる。
  • 目的: サービスの停止、業務の妨害、金銭的損失の引き起こしなど。

ランサムウェアRansomware

  • 概要: コンピュータシステムを暗号化し、解除のために身代金を要求するマルウェアの一種。
  • 方法: フィッシングメールや脆弱なウェブサイトから感染することが多い。感染するとファイルが暗号化され、身代金を支払うよう要求される。
  • 目的: 金銭的利益の追求。被害者がデータを取り戻すために身代金を支払うことを期待している。

おまけ

情報漏洩チェッカー

jp.norton.com

コーディングでゲーム表示テスト

全タイルを青にしたらクリア

PHP標準関数

  1. 文字列関数

    • strlen(): 文字列の長さを返す
    • strpos(): 文字列内で指定した文字列が最初に現れる位置を返す
    • substr(): 文字列の一部を返す
    • strtoupper(): 文字列を大文字に変換する
    • strtolower(): 文字列を小文字に変換する
  2. 配列関数

    • count(): 配列内の要素の数を返す
    • array_merge(): 複数の配列をマージする
    • array_search(): 指定した値を配列内で検索する
    • array_unique(): 配列から重複する要素を削除する
  3. 数値関数

    • max(): 配列または複数の引数の中から最大値を返す
    • min(): 配列または複数の引数の中から最小値を返す
    • abs(): 絶対値を返す
    • round(): 小数点以下を四捨五入する
  4. ファイル関数

    • file_get_contents(): ファイルの内容を文字列として読み込む
    • file_put_contents(): 文字列をファイルに書き込む
    • fopen(): ファイルを開く
    • fclose(): ファイルを閉じる
  5. 日付・時間関数

    • date(): 指定した書式で現在の日付や時間を取得する
    • strtotime(): 文字列から日付を生成する
    • time(): 現在のUNIXタイムスタンプを取得する
    • mktime(): 指定した日時のUNIXタイムスタンプを取得する
  6. フォーマット関数

    • printf(): フォーマットされた文字列を出力する
    • sprintf(): フォーマットされた文字列を返す
    • number_format(): 数値をフォーマットして返す
  7. ファイルパス関連関数

    • realpath(): ファイルまたはディレクトリの絶対パスを取得する
    • dirname(): ファイルパスからディレクトリ部分を取得する
    • basename(): ファイルパスからファイル名部分を取得する
  8. データ変換関数

  9. ネットワーク関連関数

    • file_get_contents(): URLからデータを取得する
    • curl_init(): cURLセッションを初期化する
    • urlencode(): URLで使用できない文字列をエンコードする
    • parse_url(): URLを解析してその要素を返す

    今回は赤文字の箇所のコーディングをご紹介します

    1. 文字列関数

    • strlen(): 文字列の長さを返します。

      
      $length = strlen("Hello World");
      // $length には 11 が入ります
      
      
    • strpos(): 文字列内で指定した文字列が最初に現れる位置を返します。

      
      $position = strpos("Hello World", "World");
      // $position には 6 が入ります
      
      
    • substr(): 文字列の一部を返します。

      
      $substring = substr("Hello World", 6, 5);
      // $substring には "World" が入ります
      
      

    2. 配列関数

    • count(): 配列内の要素の数を返します。

      
      $array = [1, 2, 3, 4, 5];
      $count = count($array);
      // $count には 5 が入ります
      
      
    • array_merge(): 複数の配列をマージします。

      
      $array1 = [1, 2];
      $array2 = [3, 4];
      $mergedArray = array_merge($array1, $array2);
      // $mergedArray には [1, 2, 3, 4] が入ります
      
      
    • array_search(): 指定した値を配列内で検索します。

      
      $array = ["apple", "banana", "orange"];
      $key = array_search("banana", $array);
      // $key には 1 が入ります
      
      

    3. 数値関数

    • max(): 配列または複数の引数の中から最大値を返します。

      
      $max = max(5, 8, 2, 10);
      // $max には 10 が入ります
      
      
    • min(): 配列または複数の引数の中から最小値を返します。

      
      $min = min(5, 8, 2, 10);
      // $min には 2 が入ります
      
      
    • abs(): 絶対値を返します。

      
      $absolute = abs(-10);
      // $absolute には 10 が入ります
      
      

    4. ファイル関数

    • file_get_contents(): ファイルの内容を文字列として読み込みます。

      
      $content = file_get_contents("example.txt");
      // $content にはファイルの内容が文字列として入ります
      
      
    • file_put_contents(): 文字列をファイルに書き込みます。

      
      file_put_contents("example.txt", "Hello World");
      // "example.txt" に "Hello World" という内容が書き込まれます
      
      

    これらは一部の関数ですが、PHP開発で頻繁に使用される基本的な機能を提供します。

Laravel 物理削除と論理削除のコード

php artisan make:migration add_deleted_at_to_spendings_table --table=spendings

上記をコマンドプロンプトで実行するとspendingsというテーブルに追加する

マイグレーションが作成日時の名前で追加される(deleted_atカラムの記述用)

<?php

use Illuminate\\Database\\Migrations\\Migration;
use Illuminate\\Database\\Schema\\Blueprint;
use Illuminate\\Support\\Facades\\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::table('spendings', function (Blueprint $table) {
            $table->softDeletes();
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::table('spendings', function (Blueprint $table) {
            $table->dropSoftDeletes();
        });
    }
};

マイグレーションにこのように記述していく

C:\MAMP\htdocs\Laravel_Sample> php artisan migrate 上記をコマンドプロンプトで実行すると spendingsというテーブルにdeleted_atが追加され、論理削除用の関数が使用可能になる

// 対象を削除してリダイレクトする
    public function deleteSpend(int $id){
        $instance = new Spending;
        $record = $instance->find($id);

        // forceDeleteで物理削除
        $record->forceDelete();

        return redirect('/');;
    }
    
    // 対象を削除してリダイレクトする
    public function SoftDeleteSpend(int $id){
        $instance = new Spending;
        $record = $instance->find($id);

        // deleteで論理削除
        $record->delete();

        return redirect('/');;
    }

あとは、物理削除と論理削除によって上記の2つのコードを使い分けて実装するだけ

delete();が論理削除に変更され、物理削除はforceDelete();になる

// データ物理削除ページ
Route::post('/delete_spend/{id}', [RegistrationController::class, 'deleteSpend'])->name('delete.spend');

// データ論理削除ページ
Route::post('/soft_delete_spend/{id}', [RegistrationController::class, 'SoftDeleteSpend'])->name('softdelete.spend');

ルートを物理、論理削除分追加する

<div class="d-flex justify-content-center mt-3">
    <div class="col-md-4 text-center mb-3">
        <form action="{{ route('delete.spend', ['id' => $spend['id']]) }}" method="POST">
            @csrf
            <button type="submit" class="btn btn-danger">削除</button>
        </form>
    </div>
    <div class="col-md-4 text-center mb-3">
        <a href="{{ route('edit.spend', ['id' => $spend['id']]) }}">
            <button class="btn btn-secondary">編集</button>
        </a>
    </div>
    <div class="col-md-4 text-center mb-3">
    <form action="{{ route('softdelete.spend', ['id' => $spend['id']]) }}" method="POST">
            @csrf
            <button type="submit" class="btn btn-warning">論理削除</button>
        </form>
    </div>
</div>

あとはフォーム内にボタンを配置すればOK