Laravel5.7でmigrationによるテーブル作成手順

おおまかな流れです。
1. データベース設計(Excel、ER図など)
2. MySQLでデータベースを作成(create database ${database name})
3. .envファイルの編集
4. migrationファイルの作成(php artisan make:migration)
5. エディターでyyyy_mm_dd_hhmmss_{table name}_table.phpの編集
5-1. 作成するカラムを書く
5-2. 必要に応じてカラム修飾子をつける
5-3. 必要に応じてインデックスをカラムに貼る

6. migrateの実行(php artisan migrate)

さあやってごらん。

えー そういわれても。。。
ということで、1.データベース設計、2.Mysqlのデータベース作成、3. .envファイルの編集はできている前提で、4以降のmigrationファイルの作成から、5.カラムの追加、6.migrationの実行まで細かく見ていきたいと思います。

サンプルとして、”exam”というテーブルを作りたいと思います。
sqlだとこうなります。

create table exam(
  id INT AUTO_INCREMENT,
  manu_id INT,
  judge CHAR(1),
  created_by INT,
  created_at DATETIME,
);

Lets go!

1. migrationファイルの作成
–create=${table name}として、オプションでtable名を指定します。

[vagrant@localhost zeus]$ php artisan make:migration create_exam_tables --create=exam
Created Migration: 2018_11_18_112643_create_exam_tables

2. エディターでyyyy_mm_dd_hhmmss_create_exam_table.phpの編集
/database/migrations のディレクトリ配下にmake:migrateで以下のようなファイルが生成されています。この中で、16行目のSchema::createのfunction(Blueprint $table){}の中にカラムを指定していきます。

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

class CreateExamTables extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('exam', function (Blueprint $table) {
            $table->increments('id');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('exam');
    }
}

3. 作成するカラムを書く
使用するカラムは公式ドキュメントを見ながら編集していきます。
https://readouble.com/laravel/5.7/ja/migrations.html
今回はINT->integer, CHAR->char, DATETIME->timestampsで記載していきます。

public function up()
    {
        Schema::create('exam', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('manu_id');
            $table->char('judge');
            $table->timestamps('');
        });
    }

4. 必要に応じてカラム修飾子をつける
‘id’にAUTO_INCREMENTを付けます。
こちらも、公式ドキュメントを参考にします。
https://readouble.com/laravel/5.7/ja/migrations.html

public function up()
    {
        Schema::create('exam', function (Blueprint $table) {
            $table->increments('id')->autoIncrement();
            $table->integer('manu_id');
            $table->char('judge');
            $table->timestamps('');
        });
    }

5. 必要に応じてインデックスをカラムに貼る
今回はナシ

6. migrateの実行(php artisan migrate)
[vagrant@localhost zeus]$ php artisan migrate
Migrating: 2018_11_18_112643_create_exam_tables
Migrated: 2018_11_18_112643_create_exam_tables

7. MySQLで確認
期待したテーブル、カラムが作成されたかmysqlのdescribe examで確認

出来たぞー

idはちゃんとprimary key, autincrementになってます。
これを応用して、テーブルを作っていきましょう♪ (私はこれから10個位テーブルを作ります)

laravelのmigrationでindexを作成する

mysqlでインデックスを追加するケースが多々あるかと思います。例えば以下のように、UNIQUEなど。

create table account(
  id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
  login_id VARCHAR(256) UNIQUE,
)

laravelではuniqueは以下のように書きます。

$table->string('login_id', 256)->unique();

簡単じゃーん!

Laravelで使用できるIndex
$table->primary(‘id’); 主キー追加
$table->primary([‘id’], ‘parent_id’);
$table->unique(’email’); uniqueキー追加
$table->index(‘state’); 基本的なインデックス
$table->spatialIndex(‘location’); 空間インデックス追加


primary、uniqueは必須でしょうね。

Laravelでカラム指定する場合のColumn modifiers

laravelでColumn Modifiersと言われるカラム修飾子があります。
MySQLでカラムをセットする際につけるafterなどのことです。
ドキュメントにどのようなカラム修飾子があるか掲載されているので、よく使うものを整理しておきましょう。私は見たことないカラムもかなりありました。

なお、Laravelのドキュメントに詳しく乗っています。英語版も見ておくとよいでしょう。
https://readouble.com/laravel/5.7/ja/migrations.html

サービスによって差があるかと思いますが、autoIncrementの頻度は高いです。


よく使用するカラム修飾子
->autoIncrement() 自動増分ID(主キー)
->after(‘column’) 指定カラムの次に他のカラム
->default($value) 予め値を設定
->nullable($value = true) NULL値をカラムに挿入


あまり使わなそうなカラム修飾子

->charset(‘utf8’) charsetを指定
->collation(‘utf8_unicode_ci’) コロケーションを指定
->comment(‘my comment’) カラムにコメント追加
->first() カラムをテーブルの最初に設置
->storedAs($expression) stored generatedカラムを生成
->unsigned() 整数カラムを符号なしに設定
->useCurrent TIMESTAMPカラムのデフォルト値を指定
->virtualAs($expression) virtual generatedカラムを生成
->generatedAs($expression) 指定のシーケンスオプションで、識別カラムを生成
->always() 識別カラムの入力を上書きするシーケンス値を定義

Laravel5.7のmigrationでカラムを作成・追加・変更

Laravelで使用できるカラムは公式ドキュメントに記載があります。
https://readouble.com/laravel/5.7/ja/migrations.html


こちらを見ながら使用していけば問題ないでしょう。
公式ドキュメントを見るのに抵抗がある方は、一度ドキュメント全部見ておいた方がいいです。ざっと見るのであれば、4~5日もあれば十分でしょう。もちろんQitaの投稿記事などで必要な情報が出てきますが、Qiitaの場合、Laravaleのバージョンが使用しているバージョンと異なっていたら、間違ってしまう可能性がありますが、公式ドキュメントの場合は、間違いはありません。

では、公式ドキュメント記載の使用できるカラムタイプを見ていきます。
Laravel migrationのカラムコマンド


良く使いそうなコマンド
increment(‘id’); 符号なしINTを使用した自動増分ID(主キー)
integer(‘votes’);
boolean(‘confirm’); BOOLEAN
string(‘name’, 100); VARCHARカラム
char(‘name’, 100); CHARカラム
text(‘description’); TEXTカラム
dateTime(‘created_at’); DATETIMEカラム
timestamps(); NULL値可能なcreated_atとupdated_atカラム


その他のコマンド
bigIncrements(‘id’); BIGINTを使用した自動増分ID
bigInteger(‘votes’); BIGINTカラム
binary(‘data’); BLOBカラム
dateTimeTz(‘created_at’); タイムゾーン付きDATETIMEカラム
decimal(‘amount’, 8, 2); 有効(全体桁数)/小数点以下桁数指定のDECIMAL
double(‘amount’, 8, 2); 小数点以下桁数指定のDOUBLE
enum(‘level’, [‘easy’, ‘hard’]); ENUMカラム
float(‘amount’, 8, 2); float
geometry(‘positions’); geometryカラム
geometryCollection(‘positions’); Geometrycollectionカラム
ipAddress(‘visitor’); IPアドレス
json(‘options’); JSONフィールド
jsonb(‘options’); JSONBフィールド
lineString(‘positions’); LINESTRINGカラム
longText(‘description’); LONGTEXTカラム
macAddress(‘device’); MACアドレスカラム
mediumIncrements(‘id’); MEDIUMINTを使用した自動増分ID(主キー)
mediumInteger(‘votes’); MEDIUMINTカラム
mediumText(‘description’); MEDIUMTEXTカラム
morphs(‘taggable’); BIGINTのtaggable_idと文字列のtaggable_type
multiLineString(‘positions’); MULTILINESTRINGカラム
multiPoint(‘positions’); MULTIPOINT
multiPolygon(‘positions’); MULTIPOLYGONカラム
nullableMorphs(‘taggable’); morphs()カラム
nullableTimestamps(); timestamps()メソッドの別名
point(‘position’); POINTカラム
polygon(‘positions’); POLYGONカラム
rememberToken(); VARCHAR(100)でNULL値可能なremember_token
smallIncrements(‘id’); 符号なしSMALLINTを使用した自動増分ID
smallInteger(‘votes’); SMALLINTカラム
softDeletes(); ソフトデリートのためにNull値 可能なdeleted_at
softDeletesTz(); ソフトデリートのためにNull値可能なdeleted_atタイムゾーン
time(‘sunrise’); Timeカラム
timeTz(‘sunrise’); タイムゾーン付TIMEカラム
timestampsTz(); タイムゾーン付
tinyIncrements(‘id’); 符号なしTINYINTを使用
tinyInteger(‘votes’); TINYINTカラム
unsignedBigInteger(‘votes’); 符号なしBIGINTカラム
unsignedDecimal(‘amount’, 8, 2); 符号なしDECIMALカラム
unsignedInteger(‘votes’); 符号なしINTカラム
unsignedMediumInteger(‘votes’); 符号なしMEDIUMINTカラム
unsignedSmallInteger(‘votes’); 符号なしSMALLINTカラム
unsignedTinyInteger(‘votes’); 符号なしTINYINTカラム
uuid(‘id’); UUIDカラム
year(‘birth_year’); YEARカラム

Laravel5.7のmigration(マイグレーション)

migrationとは
マイグレーションとはデータベースのversionコントロール
データベースのスキーマ更新を簡単に出来るようになる


Laravel5.7の公式ドキュメント:
https://readouble.com/laravel/5.7/ja/migrations.html

1. migrationファイルの作成
table名の後ろに”_table”をつけてmigrationファイルを作成します。

php artisan make:migration ${tabale name}_table

では試しにコマンドラインでmigrationファイルを作成しましょう。
[vagrant@localhost zeus]$ php artisan make:migration users_table

/database/migrations 配下に yyyy_mm_dd_hhmmss_users_table.phpが作られます。

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

class UsersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        //
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        //
    }
}

function upとdownにカラムを書いていきます。

2. migrateの実行

php artisan migrate

databaseにtableが出来ます。ただし、 public function up()が空の場合はなにもできません。

オプションでtable名を指定した場合
[vagrant@localhost zeus]$ php artisan make:migration create_users_tables –create=users
Created Migration: 2018_11_17_154656_create_users_tables
[vagrant@localhost zeus]$ php artisan migrate
Migration table created successfully.
Migrating: 2018_11_17_154656_create_users_tables
Migrated: 2018_11_17_154656_create_users_tables

mysql側
usersのテーブルが出来ているのがわかります。

Laravel 5.7からMySQL 5.6への接続方法

LaravelからMySQLへの接続方法は、
1. MySQLで接続するDBを作成する
2. .envファイルから接続するmysqlのDB Nameなどを指定する です。

1. MySQLで接続するDBを作成する
まずMySQLにログインします。
[vagrant@localhost ~]$ mysql -u root -p

続いて、dbを作成します。既に使用するデータベースがある場合は省略して構わないでしょう。
mysql> create database zeus;

これで、db側の設定は完了です。きちんと作成できたか、show databases;で確認しておくと良いでしょう。

2. .envファイルから接続するmysqlのDB Nameなどを指定する
.envファイルは、laravelをインストールしたディレクトリにあります。この.envを開きます。

.envは設定ファイルで、アプリ(APP_*)、DB(DB_*)、Redis(REDIS_*)、メール(MAIL_*)、Pusher(PUSHER_*)などの設定が書かれています。今回編集するのは
9~14行目のDBの箇所です。

DB_CONNECTION、DB_HOST、DB_PORTはlocalの場合は変更の必要ありません。RDSにつないでいる時などは設定しましょう。主に編集するのは、DB_DATABASE、DB_USERNAME、DB_PASSWORDの箇所です。適時変更ください。

DB_DATABASE=zeus
DB_USERNAME=root
DB_PASSWORD=

これでLaravelの接続設定は完了です。

laravelのバージョン確認方法

Laravelのバージョン確認方法は、
1. Laravelがインストールされているディレクトリに行く
2. コマンドラインでphp artisan -Vと打つ

1. Laravelがインストールされているディレクトリに行く
laravelのバージョン確認は、artisanコマンドを使います。その為、laravelがインストールされていないディレクトリではartisanコマンドは使えず、バージョン確認ができません。

2. コマンドラインで php artisan -V と打つ

[vagrant@localhost zeus]$ php artisan -V
Laravel Framework 5.7.11

php artisan –versionでも大丈夫です。

[vagrant@localhost zeus]$ php artisan --version
Laravel Framework 5.7.11

公式ドキュメントでは –version が紹介されています。
https://readouble.com/laravel/5.dev/ja/artisan.html

プログラマーとしては php artisan -V の方がいいでしょうね。

EclipseのMavenとは何か?

Mavenは[méivən]と発音する。メイベンにちかい。

※話が脱線しますが、むかし「熱海」をネッカイとずっと読んでいて、はじめてアタミと聞いた時には、あまりにもかけ離れていて動揺しました。それ以来、発音を確認する時には熱海が頭をよぎります。

Mavenとは?

Mavenとはプロジェクトのビルド、テスト、ドキュメンテーション、成果物など、プロジェクトのライフサイクル全体を管理するもの。

これだけではよくわかりません。Javaをbuildするツールで、Gradleと同じようなものらしいです。Android StudioのGradleをイメージするとわかりやすいかもしれません。

-mvn deployでローカルからリモートリポジトリにデプロイできる。
-作成したjarファイルをリモートにデプロイするにはpom.xmlにリモートの情報を記載する必要がある

Eclipseで.warファイルを作成・配置する方法

ローカルのeclipseで作成したservletを開発環境、STG、本番環境にデプロイしたい場面があるとします。その場合に、どのような手順で.warファイルを作成、配置するのか、考えたいと思います。

.warファイルとは
javaの設定ファイル、jsp、html、jar形式のライブラリなどがまとめられているアーカイブ。これをtomcat配布すると、それを元にデプロイされる

1. eclipseでアプリケーションを開発する
ここではサンプルとして、TodoServletというアプリケーションを開発しているとします。

2. 画面左ペインProject Explorerのプロジェクトで右クリック
Project Explorerのプロジェクトフォルダで右クリックするとexport -> war fileと出てきます。

3. war fileをexport
export -> war fileを選択すると、ポップアップがひらくので、destinationでwar fileのexport先を指定し、展開します。

すると、指定したディレクトリに ${projectName}.warfile というファイルが生成されます。

このwarファイルをtomcatのwebappに配置すれば完了です。

### eclipse関連の本

おススメの無料プログラミングスクール比較

プログラミングスクールで勉強したいけど、正直高いスクールに行くほど余裕がない、という事情だったり、無料があるなら、無料の方がいいですよね。そこで、おススメのプログラミングスクールを比較してみたいと思います。

1. TechAcademy

https://techacademy.jp/
東京都渋谷区渋谷1-17-4 PMO渋谷8F
-89000円(4週間のコース)
-オンライン完結、パーソナルメンター、マンツーマンレッスン、チャットサポート、オリジナルサポート
-進路: 転職サポート(全コース対応)
-実績:500社、25,000名を超える教育実績
無料体験

2. TECH::CAMP

https://tech-camp.in/
-12,800円~(月額)で学び放題
-期間:スキルアップなら合計60時間が目安、Webサービスなら100時間が必要
-内容:Webサービス開発、テクノロジー、オリジナルアプリ、AI入門、デザイン、VR・3Dゲーム開発、iPhoneアプリ開発
-教室:渋谷 新宿 池袋 東京駅前 御茶ノ水 早稲田 名古屋 梅田
-備考:週二回程度、教室に通うことを推薦

3. ITプロ育成スクール

http://www.m5school.jp/index.html
福岡市中央区薬院1-1-1 薬院ビジネスガーデン6階
-無料
-期間:8カ月
-内容:Java、HTML、CSSなど
-進路:研修から社員に
-実績:350名以上のエンジニア卒業
-備考:福岡にある、奨学金制度を導入している

4. 無料PHPスクール

http://www.dt30.net/phpschool/
東京都豊島区南池袋2-40-24シントミプラザ東池袋3F
-無料(入学金、授業料、教材費が一切無料)、ノートPCは持参、デポジット5万円(全額返金)
-短期の23日間
-内容:ECサイト構築スキル
-進路:無料PHPスクール卒業生の73.3%が自社内開発(それ以外は客先常駐)、61.1%が私服(ビジネスカジュアル含む)
-備考:写経メイン、文章→構文→単語の順に学ぶ

5. Axiz沖縄

http://axiz.okinawa/
沖縄県浦添市牧港5−6−2 琉薬商事ビル604
-無料(20-24歳)
-期間:短期間(3ヶ月間)
-内容:Webプログラミング基礎、Java基礎、Java応用、開発実習
-実績:ITホールディングスグループ/インプレスグループ/NTTデータグループ/オムロングループ国分(株)/国税庁/(株)サイバーエージェント/情報技術開発(株)/TCSグループ 東芝ソリューショングループ/(株)ドワンゴ/(株)ベイカレント・コンサルティング 法務省/三菱商事グループ/ミライト・ホールディングスグループ/リコーグループ

6. Kredo

https://kredo.jp/internous/
Park Central Office 17F 1708 Cebu IT Park, Apas Cebu City, Philippines 6000
東京都千代田区霞が関3-6-15 霞ヶ関MH タワーズ7F
-無料
-1カ月間1日6時間授業のセブ島留学、3カ月間東京で研修、就職
-95%で継続勤務

7. RainbowApps

https://www.school.rainbowapps.com/
大阪市中央区西心斎橋1-5-5 アーバンBLD心斎橋9階-C号
– iPhone アプリ開発コース(16回)、Android アプリ開発コース(16回)
– 小中学生・親同時受講限定で無料
– 1名まで無料 ただし保護者が必ず一緒に受講すること(保護者の割引はなし)
– 約6000名の受講実績

結局どかがいいのか?
これは考え方次第ですが、ポイントを考察したいと思います。
1. 続けられそうなところ
いくら素晴らしいスクールだとしても、自分が続けられなければなりません。働きながら通うのか、仕事を辞めるのか、どれ位時間をかけられるか、難易度は難しそうか、などなどで変わってくると思います。継続が大事なので、ハードルが高すぎるスクールはおすすめしません。

2. 費用が安すぎないところ
運用側の立場になってみればわかりますが、スクールの費用が安いということは、運営にお金をかけられません。そのため、どうしてもレッスンの質が下がり気味になります。もちろん、カリキュラムを作っている人に情熱とスキルがあれば話は別ですが。その為、少し費用がかかっても、お金をとっているスクールの方が内容が充実しやすくなるので、結果的にはリターンが大きくなるように思います。

3. 近場、もしくはオンライン
まず、近場かオンラインがよいでしょう。物理的に遠いと、わざわざ通うのがおっくうになります。そのため、通勤途中とか、通える距離がいいです。また、オンラインでできる人は、わざわざ教室に通わずに、自宅やカフェ、コワーキングで作業できるオンラインの方がいいです。その方が楽ですからね。自宅だと集中できない、という方は、例えば23:45まで毎日マックでやる、など工夫すればいいでしょう。テレビ・Youtubeを見てしまう、というのでしたら、テレビは捨てて、ChromeにSiteblockという拡張機能があるので、Youtubeを見れないように設定してあげれば、より集中できるようになります。

4. スクールが終わった後に、現場で働ける
スクールを終えたあとに、どのような選択肢があるかは非常に重要です。スクールから、企業を紹介してもらえるのであれば、どのような企業に紹介してもらえるか、予め見ておいた方がいいです。ITといっても裾野が広く、公官庁とゲーム会社では学ぶことや職場環境が全く異なります。できれば、スクールに行く前に、ある程度、どの業界、企業に行きたい、と決めておいた方がいいです。

5. プログラミングのスキルが身につく
スクールで学ぶ内容もしっかり確認しましょう。プログラミングといっても、フロントエンジニア、バックエンドエンジニア、
インフラエンジニアなど、職種が異なりますし、学ぶプログラミング言語もスクリプト言語といわれるPHP、Ruby、PythonとJava、C言語などでは異なります。また、アプリ開発の場合は、Java(Kotolin)、Swiftとなり、変わってきます。世間的にはAIが先端でかっこいいように思われるかもしれませんが、いきなりAIなどを学ぶよりも、基礎から学んだ方が賢明だと思います。

ということで、つらつらと書いてきましたが、自分に合ったところを検討してみてください。
個別の相談はコンタクトフォームからどうぞー

お問い合わせ