Hello, World!

難しいことは書けません

よく使うけど忘れがちなGitコマンド

add

addした変更を確認する方法

git diff --cached ファイル名

addした変更を全て取り消したい時

git reset .

ファイル指定してaddを取り消したい時

git reset index.php

stash

stashされたファイル一覧を見たい時

git stash show

ファイルごとのstashした内容を確認する

git diff HEAD..stash@{0} ファイル名

reset

commitを取り消して、addの状態に戻したい場合

git reset --soft HEAD^

ローカル環境を別端末(iPhoneとか)から見る方法

下記ページよりダウンロード
ngrok - download

zipを解凍するか、以下のコマンドで解凍

unzip ~/Downloads/ngrok.zip

pathが通ってるディレクトリに配置する

mv ~/Downloads/ngrok /usr/local/bin/

ngrok起動させると以下の画面が立ち上がる

ngrok http 8880

f:id:eeko-amaryllis:20191025105438p:plain:w800


今回の場合はhttp://5077cab0.ngrok.io にアクセスするとローカル環境をiPhoneでも確認できる

Laravelとdockerの環境でMailHogを使ってメール送信テストを実行するには

前までlogにメールを吐き出していたけど、MailHogを使おうということになりました

MailHogのコンテナを作る

今回は以下のようにすでにdocker-compose.ymlにMailHogのことが書かれていました

### Mailhog ################################################
    mailhog:
      build: ./mailhog
      ports:
        - "1025:1025"
        - "8025:8025"
      networks:
        - frontend
        - backend

Dockerを再起動させる

laradockディレクトリの中で以下のコマンドを実行

docker-compose up -d mailhog

docker ps でMailHogのコンテナが新しく作成されているか確認します
f:id:eeko-amaryllis:20190620155428p:plain:w600

http://localhost:8025 にアクセスすると以下のようが画面が表示されていればOK
f:id:eeko-amaryllis:20190620155934p:plain:w600

.env.dusk.localのメール設定

MAIL_DRIVER=smtp
MAIL_HOST=mailhog
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null

あとはテストを実行してメールがhttp://localhost:8025に届いていればOK

(もしphp artisan config:cache なんてしてしまったら、php artisan cache:clearをすればいい👏)

あとローカルでMailHog使うならbrewで入れることができるらしい

// インストール
brew install mailhog

// 起動
brew services start mailhog

はじめてテストを書きました

初めてテストを書いたんですよ、簡単なのですが
なので忘れないようにメモしておきます

テスト生成と実行コマンド

環境はLaravelで、PHPUnitで今回はログイン画面のテストを書いていこうと思います
まずテストの生成

php artisan make:test LoginTest

tests/Feature/LoginTest.php にファイルが作られます

テストを実行するには、ターミナルでphpunitコマンドを実行すれば大丈夫です

phpunit

テストファイルの命名規則

テストを作る際にルールがあります
・テストファイルはファイル名を、hogeTest.phpとすることでテスト対象となる
・メソッドは、testHoge()とするか、@testコメントをつけておくとtestと認識される

上記をふまえてテストを書いていきます

テストコード

まず前のテストデータが次に実行されるテストへ影響をあたえないように、各テストが終了するごとにデータベースをリセットさせるためトランザクションを使います

use DatabaseTransactions;

次にユーザーデータを作ります
テストを実行する前に行いたいのでsetUp()に書いていきます

<?php

    /**
    * @var \App\Models\User;
    */
    public $user;
    /**
    * Setup the test environment.
    */
    protected function setUp()
    {
        parent::setUp();
        $this->user = factory(User::class)->state('active')->create();
    }

UserFactory.phpのコードは省略します

あと factory()って何?ってなったかと思います
factory()とは

テスト実行前に、何件かのレコードをデータベースに挿入する必要があります。こうしたテストデータを作る時に、手動でそれぞれのカラムへ値を指定する代わりに、Laravelではモデルファクトリを使用します。
引用元:https://readouble.com/laravel/5.5/ja/database-testing.html

なるほど

準備は終わったのでテストコードを書いていきます

<?php
    /**
    * @test
    */
    public function ログインしていない状態ユーザーのみログイン画面が表示される()
    {
        //ログインしてない状態で/loginにアクセスした場合
        $response = $this->get('/login');
        $response->assertStatus(200);

        //ログインしている状態で/loginにアクセスした場合
        $response = $this->actingAs($this->user)->get('/login');
        $response->assertStatus(302);
    }

actingAs()を利用することで作ったユーザデータを認証済み状態にすることができ
ログインしてない状態で/loginにアクセスした場合、クライアントのレスポンスが200
ログインしている状態で/loginにアクセスした場合、クライアントのレスポンスが302
ならOKというテストを作りました

ログインしている状態で/loginにアクセスした場合クライアントから帰ってくるレスポンスが何番なのかわからない場合は、普通に調べてもいいけどChromeの検証で
Network → Preservelogをチェック → /loginにアクセス → 下の項目のloginをクリック → Status Codeを確認
すればOK
f:id:eeko-amaryllis:20190613095441p:plain:w600

実行結果
f:id:eeko-amaryllis:20190612182905p:plain:w600
緑になったので大丈夫

以下全体コード

<?php

namespace Tests\Feature;

use Tests\TestCase;
use App\Models\User;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Foundation\Testing\DatabaseTransactions;

class LoginTest extends TestCase
{
    use DatabaseTransactions;

    /**
    * @var \App\Models\User;
    */
    public $user;
    /**
    * Setup the test environment.
    */
    protected function setUp()
    {
        parent::setUp();
        $this->user = factory(User::class)->state('active')->create();
    }

    /**
    * @test
    */
    public function ログインしていない状態ユーザーのみログイン画面が表示される()
    {
        $response = $this->get('/login');
        $response->assertStatus(200);

        $response = $this->actingAs($this->user)->get('/login');
        $response->assertStatus(302);
    }
}

プログラムを修正したら自動的にHerokuにも反映してほしい

herokuに変更箇所をpushしようとしたらエラーがおきた
f:id:eeko-amaryllis:20190204142619p:plain:w600
gitがリモートのリポジトリを参照出来ていないのが原因らしいので、リモートにherokuを追加します
まず .git/config を確認するとremoteの参照先にherokuがないので
f:id:eeko-amaryllis:20190204142737p:plain:w600

以下のコマンドで登録する
参考:Heroku にある Git リポジトリを楽に remote に設定する - Qiita

heroku git:remote --app appname

コマンド実行後の.git/config
f:id:eeko-amaryllis:20190204142749p:plain:w600
ちゃんとリモートにheroku追加できてる
これでデプロイできた

MySQLWorkbench version 8.0.15でER図を出力したい

以下参考にしたサイトと少し見た目が違ってたのでメモ
qiita.com

MySQL Workbenchを起動した時
左側の2番目のアイコンをクリックして、">" マークをクリックした時に"Create EER Model From Databae"を選択するとER図出力できる
f:id:eeko-amaryllis:20190411140239p:plain