ゲーム開発
Unity
UnrealEngine
C++
Blender
Houdini
ゲーム数学
ゲームAI
グラフィックス
サウンド
アニメーション
GBDK
制作日記
IT関連
ツール開発
フロントエンド関連
サーバサイド関連
WordPress関連
ソフトウェア設計
おすすめ技術書
音楽
DTM
楽器・機材
ピアノ
ラーメン日記
四コマ漫画
その他
おすすめアイテム
おもしろコラム
  • ゲーム開発
    • Unity
    • UnrealEngine
    • C++
    • Blender
    • Houdini
    • ゲーム数学
    • ゲームAI
    • グラフィックス
    • サウンド
    • アニメーション
    • GBDK
    • 制作日記
  • IT関連
    • ツール開発
    • フロントエンド関連
    • サーバサイド関連
    • WordPress関連
    • ソフトウェア設計
    • おすすめ技術書
  • 音楽
    • DTM
    • 楽器・機材
    • ピアノ
  • ラーメン日記
    • 四コマ漫画
      • その他
        • おすすめアイテム
        • おもしろコラム
      1. ホーム
      2. 20201112_01

      【Laravel】第一回 自動販売機システムを作ろう! 〜全体設計とテーブル作成〜

      Laravelサーバサイド関連
      2020-11-14

      マイケル
      マイケル
      みなさんこんにちは!
      マイケルです!
      エレキベア
      エレキベア
      クマ〜〜〜〜〜
      マイケル
      マイケル
      今回のテーマはLaravelというPHPフレームワークです!
      エレキベア
      エレキベア
      ソシャゲを作る過程で使うって言ってたクマね
      マイケル
      マイケル
      うん!
      さすがにPHPもLaravelも触ったことない状態だと厳しそうだからね・・・。


      前回の記事:
      【Unity】ソーシャルゲームを作る 〜サーバの環境構築〜【AWS × Laravel】

      マイケル
      マイケル
      というわけで一冊、参考書を一気読みした後、
      下記のような自動販売機システムを作ってみました!
      \デデーン/

      ↑自動販売機:購入画面

      ↑自動販売機:メンテナンス画面
      エレキベア
      エレキベア
      なかなか気合入ってるクマね
      マイケル
      マイケル
      軽く読むだけにしようかと思ってたけど
      楽しくなって作っちゃったよ★
      エレキベア
      エレキベア
      (うざクマ・・・。)
      マイケル
      マイケル
      しかし思ったよりボリューミーになってしまったので、
      数回の記事に分けて作りを解説していきます!
      マイケル
      マイケル
      今回は第一回ということで、
      「全体設計とテーブル作成」編です!
      エレキベア
      エレキベア
      やったるクマ〜〜〜〜

      参考書籍

      マイケル
      マイケル
      開発するにあたって参考にした書籍はこちらです!

      マイケル
      マイケル
      Laravelの必要最低限な機能がまとまっていて、
      すごく読みやすかったです!
      マイケル
      マイケル
      PHPを触ったことがない人でも、
      他のオブジェクト指向の言語を触ったことがあったり
      WEBアプリを作ったことがある人ならスッと入れるかと思います。
      エレキベア
      エレキベア
      エレキベアも読んでみるクマ

      全体設計

      マイケル
      マイケル
      今回作ったシステムは、

      ・購入画面 -> 自動販売機で飲み物を買う画面
      ・メンテナンス画面 -> 自動販売機に設定する飲み物の情報を編集する画面

      の2画面で構成されていて、それぞれの仕様は以下になります!

      購入画面


      ↑入金、飲み物の購入が行える

      メンテナンス画面


      ↑飲み物のデータを編集する
      エレキベア
      エレキベア
      自動販売機シミュレータって感じクマね
      マイケル
      マイケル
      こういう身近なものでシステムを作ってみると
      オブジェクト指向が理解しやすいのでおすすめです!

      テーブル定義

      マイケル
      マイケル
      自動販売機や飲み物の情報は、
      下記のようにテーブルに格納して取り出す形としています!

      ↑juice:飲み物テーブル machine:自動販売機テーブル
      マイケル
      マイケル
      machineテーブルとjuiceテーブルは1:Nの関係で、
      「自動販売機ID(m_id)」項目で対象の自動販売機を指定しています。
      エレキベア
      エレキベア
      この2テーブルの情報を使って表示や編集をするクマね
      マイケル
      マイケル
      そういうことクマよ

      システム構成の全体イメージ

      マイケル
      マイケル
      システム構成のイメージはこんな感じ!
      DBとModelの項目は紐づいていて、
      Viewが画面の表示、Controllerが処理の部分を担当しています。
      エレキベア
      エレキベア
      MVCモデルというやつクマね
      マイケル
      マイケル
      そのとおりクマ
      エレキベア
      エレキベア
      (うざクマ・・・。)

      テーブルの作成

      マイケル
      マイケル
      ざっくりとした仕様が決まったら、
      まずはDBにデータを設定しましょう!
      マイケル
      マイケル
      また、環境構築については今回は省略させていただきます。
      下記記事で AWS×MySQL で構築する場合の手順を記載しているため
      参考程度にご参照ください!


      前回の記事:
      【Unity】ソーシャルゲームを作る 〜サーバの環境構築〜【AWS × Laravel】

      エレキベア
      エレキベア
      「Laravel 環境構築」とかで調べると
      たくさん出てくるから見てみるといいクマね
      マイケル
      マイケル
      僕は上記記事で環境設定したため、

      サーバ:AWS EC2(Linux)
      DB:MySQL

      の環境で進めていきます!
      エレキベア
      エレキベア
      やったるクマ〜〜〜〜

      マイグレーションでのテーブル作成

      マイケル
      マイケル
      テーブルの作成についてですが、
      「マイグレーション」という仕組みを使用して作成します!
      エレキベア
      エレキベア
      マイグレーションって何クマ??
      マイケル
      マイケル
      テーブル定義をPHPファイルとして作成しておくことで、
      環境を移行するときとかにコマンド実行だけで同じDB環境を作成することができる仕組みのことだよ!
      エレキベア
      エレキベア
      いちいちCREATE文叩かなくて済むのは便利クマね
      マイケル
      マイケル
      それじゃさっそくマイグレーションのファイルを作ってみましょう!
      下記コマンドにファイル名を指定して実行します!
      php artisan make:migration create_juice_table
      php artisan make:migration create_machine_table
      ↑マイグレーションファイルの作成
      マイケル
      マイケル
      すると database フォルダ配下にファイルが作成されるので、そこにテーブルの項目定義を記述します!
      また、ID項目は自動インクリメントにしたいので、「increments」で作成しています。
      <?php
      
      use Illuminate\Database\Migrations\Migration;
      use Illuminate\Database\Schema\Blueprint;
      use Illuminate\Support\Facades\Schema;
      
      class CreateJuiceTable extends Migration
      {
          /**
           * Run the migrations.
           *
           * @return void
           */
          public function up()
          {
              Schema::create('juice', function (Blueprint $table) {
                  $table->increments('id');
                  $table->integer('m_id');
                  $table->string('name');
                  $table->integer('price');
                  $table->integer('stock');
                  $table->longText('ju_image');
                  $table->timestamps();
              });
          }
      
          /**
           * Reverse the migrations.
           *
           * @return void
           */
          public function down()
          {
              Schema::dropIfExists('juice');
          }
      }
      
      ↑Juiceテーブルの定義
      <?php
      
      use Illuminate\Database\Migrations\Migration;
      use Illuminate\Database\Schema\Blueprint;
      use Illuminate\Support\Facades\Schema;
      
      class CreateMachineTable extends Migration
      {
          /**
           * Run the migrations.
           *
           * @return void
           */
          public function up()
          {
              Schema::create('machine', function (Blueprint $table) {
                  $table->increments('id');
                  $table->integer('money');
                  $table->timestamps();
              });
          }
      
          /**
           * Reverse the migrations.
           *
           * @return void
           */
          public function down()
          {
              Schema::dropIfExists('machine');
          }
      }
      
      ↑Machineテーブルの定義
      マイケル
      マイケル
      ファイルを作成したら、下記のコマンドを実行するだけ!
      これで記述した定義でテーブルが作成されます!
      php artisan migrate
      エレキベア
      エレキベア
      簡単クマ〜〜〜〜〜
      マイケル
      マイケル
      ちなみにテーブルを削除して作り直したい場合には、
      「php artisan migrate:refresh」
      とすると全テーブル作りなおすことができます!

      Seederの作成

      マイケル
      マイケル
      テーブルを作ったら次はデータです!
      テーブルと同じようにSeederという仕組みを使用してPHPファイルに定義します!
      マイケル
      マイケル
      まずは下記コマンドでSeederファイルを作成しましょう。
      php artisan make:seeder JuiceTableSeeder
      php artisan make:seeder MachineTableSeeder
      ↑Seederファイルの作成
      マイケル
      マイケル
      すると database/seeder フォルダ配下にファイルが作成されるので、下記のようにレコード情報を定義します!
      <?php
      
      use Illuminate\Database\Seeder;
      use Illuminate\Support\Facades\Storage;
      
      class JuiceTableSeeder extends Seeder
      {
          /**
           * Run the database seeds.
           *
           * @return void
           */
          public function run()
          {
              $param = [
                  'm_id' => 1,
                  'name' => 'ドクターペッパー',
                  'price' => 120,
                  'stock' => 5,
                  'ju_image' =>base64_encode(Storage::get('DrPepper.jpg')),
              ];
              DB::table('juice')->insert($param);
              $param = [
                  'm_id' => 1,
                  'name' => 'モンスターエナジー',
                  'price' => 210,
                  'stock' => 3,
                  'ju_image' =>base64_encode(Storage::get('MonsterEnergy.jpg')),
              ];
              DB::table('juice')->insert($param);
              $param = [
                  'm_id' => 1,
                  'name' => 'モンスターエナジー',
                  'price' => 210,
                  'stock' => 2,
                  'ju_image' =>base64_encode(Storage::get('MonsterEnergy2.jpg')),
              ];
              DB::table('juice')->insert($param);
              $param = [
                  'm_id' => 1,
                  'name' => 'モンスターエナジーセット',
                  'price' => 900,
                  'stock' => 3,
                  'ju_image' =>base64_encode(Storage::get('MonsterEnergySet.jpg')),
              ];
              DB::table('juice')->insert($param);
          }
      }
      
      ↑JuiceテーブルのSeederファイル
      <?php
      
      use Illuminate\Database\Seeder;
      
      class MachineTableSeeder extends Seeder
      {
          /**
           * Run the database seeds.
           *
           * @return void
           */
          public function run()
          {
              $param = [
                  'money' => 1000,
              ];
              DB::table('machine')->insert($param);
          }
      }
      
      ↑MachineテーブルのSeederファイル
      マイケル
      マイケル
      ファイルを用意したら下記コマンドを実行しましょう!
      php artisan db:seed
      ↑Seederファイルからレコードを登録する
      マイケル
      マイケル
      すると各テーブルにレコードが登録されます!
      ここまでの処理で、下記のようにテーブルとレコードが登録されていれば完了です!

      ↑Juiceテーブルの登録結果

      ↑Machineテーブルの登録結果
      エレキベア
      エレキベア
      できたクマ〜〜〜〜〜!!
      マイケル
      マイケル
      これでデータの準備は完了だぜ!!

      おわりに

      マイケル
      マイケル
      というわけで今回は自動販売機システムのデータ準備についてでした!
      どうだったかな?
      エレキベア
      エレキベア
      コマンドでテーブルやレコードを作成できて感動だったクマ〜〜
      マイケル
      マイケル
      どんな環境でも同じようにデータ定義を設定できるのはすごく便利だよね。
      マイケル
      マイケル
      それでは次回からは実際に画面を作っていきましょう!
      アデュー!!
      エレキベア
      エレキベア
      楽しみクマ〜〜〜〜!!!

      【Laravel】第一回 自動販売機システムを作ろう! 〜全体設計とテーブル作成〜 〜完〜


      Laravelサーバサイド関連
      2020-11-14

      関連記事
      【Unity】GoでのランキングAPI実装とVPSへのデプロイ方法についてまとめる【Go言語】
      2024-04-14
      【Go言語】Gin、GORMでシンプルなREST APIを作成する【CRUD】
      2024-03-26
      【Rails7】Ruby on Rails7で主要な機能をtodoアプリで学ぶ
      2022-11-10
      【Rails7】Ruby on Rails7のローカル環境構築とScaffoldでのアプリ作成
      2022-11-06
      【ブログ改造計画】公開中のブログをGit管理して開発環境を構築する【WordPress】
      2022-04-27
      【ブログ改造計画】WordPressの基本機能とDocker環境の構築について【WordPress】
      2022-04-24
      【NAS】QNAPのNASで最低限しておくべきセキュリティ設定
      2022-02-21
      【Unity】UnityWebRequestを使ってCRUD機能を実装する【Ruby on Rails】
      2021-12-12