エンジニアのひよこ_level10

毎日更新してた人。たまに記事書きます。

【Laravel】エディタやIDEでメソッドジャンプできる理由【441日目】

Laravelでメソッドジャンプなぜ出来るー

メソッド名をクリックしたりすると、該当の関数をすぐ開けるとかよくありますよね。

なんで出来るんだろう?コードを追って出来るのもあるけど、
どうやらこういうファイルもあるらしい。

_ide_helper.php

composer installとかしたら、プロジェクトの中にあるはず。

GitHub - barryvdh/laravel-ide-helper: Laravel IDE Helper

.phpstorm.meta.php

phpstromは、phpで有名なIDE

これの中身も参考になるかも。

だからどうした?

ほら、このファイルを読むと、どんなふうに飛んでるかがわかる。

なので、ファイル読むといいかも。

楽しいよ(‘ω‘ )おすすめ

Laravelの元コード読むだけじゃなくて、こういうファイルも読んでみては。

【Laravel】ヘルパ関数で呼び出されているクラスがわかりやすいコード【440日目】

Laravelの元コード読んでみた

github.com

この該当コード、ここらへん読むと、aliasが書かれてる。

ヘルパ関数の引数とかの挙動は?

github.com

ここで処理してるよ。

私がLaravelコントリビュートしたのも、ここのコードの修正だよ。

ぼそっと

.oO(昨日、またヘルパ関数でちょっと違和感感じる処理見つけたので、もしかしたらまたプルリク出すかも)

【テスト】dataProviderで分岐で読み込む関数名をチェックする【439日目】

概要

XxxService

public function func($flag)
{
    if($flag) {
        return $this->user_repository->xxx();
    }

    return $this->user_repository->yyy();
}

こんなとき、xxxとyyyが読み込まれる場合をチェックしたい

コード

public testFunc($flag, $function_name)
    $mock = Mockery::mock('Tests\Unit\App\Stubs\StubUserRepository')->makePartial();

    // 該当関数が一度だけ呼ばれるのを期待する
    $mock->shouldReceive($function_name)
        ->once();

    (new XxxService($mock))->func($flag);
}

public function FuncDataProvider()
{
    return [
        'flagがtrueの場合' => [
            'flag' => true,
            'function_name' => 'xxx',
        ],
        'flagがfalseの場合' => [
            'flag' => false,
            'function_name' => 'yyy',
        ],
    ];
}

shouldReceiveの関数名の部分をdataProviderで分岐させてチェックする。

【登壇報告】LaravelJPConferenceで登壇します。【438日目】

Laravel JP Conference

Laravelの日本のConference第一回に、なんと登壇しますわーい!

https://conference2019.laravel.jpconference2019.laravel.jp

なにするの?

30分のトークします。内容は、やっぱりLaravelコントリビュートについて。

新卒2年目がLaravelコントリビュート出来た理由とその面白さ by 小畑 昌紀 | プロポーザル | Laravel JP Conference 2019 - fortee.jp

どうやってコントリビュート出来たの?
本当に初心者でも出来るの?
どうやってコード読むの?

みたいな話に加えて、
orderByの特殊な挙動だったり、そもそも私がなにバグ直したかの話も混ぜる予定。

熟練者に向けては、初心者の私がどうして先輩の背を見て、元コードを読む習慣をつけたかを話す予定。

心境。

30分トークだと7人の内の一人・・・

しかも、お金をいただくイベントで登壇・・・

やっば、めっちゃドキドキしてきた((((;゚Д゚))))ガクガクブルブル

ただ、友人たちがPHP Conferenceで登壇していたのを見て、悔しかったからこれでぷちリベンジ出来て嬉しいです(^o^)

アウトプットは続けていきたい

ってことで、これからもアウトプットは継続していきます!

インプットは負けても、アウトプット負けてなければ、
これから外から勝手にインプットの機会がもらえるだろう。

そんな精神でがんばります(^o^)応援よろしくお願いいたします!

あ、当日会場にいる方は、ほんと、ほんとお気軽にお声がけください、私ぼっちなので(((

【PHP】配列で共通している値だけを抜き出す関数【437日目】

概要

1.以下のときに"apple","grape"の値だけを返したい

["apple", "orange", "grape"]
["apple", "grape", "banana"]

2.array_intersect()を使う

配列で、共通の値だけを抜き出したい

$array_1 = ["apple", "orange", "grape"];
$array_2 = ["apple", "grape", "banana"];

こんなときに、"apple","grape"を取り出したい。

ユーザーの共通項を取り出したり、
条件を配列で用意しておいて、条件一致しているものを確認するなどに使えますね。

array_intersect

$array_1 = ["apple", "orange", "grape"];
$array_2 = ["apple", "grape", "banana"];

return array_intersect($array_1, $array_2);

これでよし。

公式ドキュメント

PHP: array_intersect - Manual

【一週間振り返り】テンション上げて開発をしていた一週間でした【436日目】

1.今週一週間の感想(ざっくり)

元気に仕事出来ました!

テンション上がると自分には良いことを発見。

2.良かったこと

1.音楽聞いてテンションめっちゃ上がると良いコードが書けることが発覚。

2.なかなかキレイにコード書けたから満足

3.もっとこうしたかったこと

引っ越しが、オーナーの都合でおじゃんになりましたOTL

そんな予感はしていたから、さっさとこちらから切ってしまうのも視野に入れても良かったかも・・・

4.新しく気づいたこと

音楽聞いてテンションめっちゃ上がると良いコードが書けることが判明。わりとあのコードキレイっぽい。
テンションは、昔好きだった音楽とか聞きまくってテンション上げました(^o^)

在宅でコーディングは、私には合っていることが判明。

室温、作業が細切れにならない、酸素濃度。いろいろいいところだらけっぽい。

5.来週したいこと

年越し気持ちよくやりたいね(^o^)

6.その他

引っ越しが、、、2週間まるまる無駄になりました(T_T)

計画が完全に崩れて、これからどうしよう(T_T)

【PHP】配列の中の空文字やnull等を削りたいときに使う関数【435日目】

概要

1.以下のときに"a"のキーだけを返したい

["a"=>"ringo", "b"=>null, "c"=>null, "d"=>false]

2.array_filter()を使う

配列で、特定条件のものを削りたい

["a"=>"ringo", "b"=>null, "c"=>null, "d"=>false];

こんなときに、"a"のキーのものを取り出したい。

nullとか、falseとか、想定外のものを削りたいとかよくありますよね。

array_filter

$array = ["a"=>"ringo", "b"=>null, "c"=>null, "d"=>false];

return array_filter($array)

これでよし。値がPHPの型変換でfalseになるものは全部削られる。0とかも削られる。
逆に言うと、trueになるものだけ残る。

となると、こういうこともしたくなる。

削るものを指定したい

削るものを指定したい。これも同じくarray_filterを使うことが出来る。

むしろ、それが本来の役割。第二引数に関数を指定するといい。

$array = ["a"=>"ringo", "b"=>null, "c"=>null, "d"=>false];

// ["a"=>"ringo", "d"=>false]
return array_filter($array, function ($value, $key) {
    return !is_null($value);
});

これで、nullはfalseになるので除外される。結果、trueになる"a"と"d"のキーのものだけが残った配列が返ってくる。

公式ドキュメント

PHP: array_filter - Manual

【Laravel】モデルインスタンスのフィールド値を変えたときの対応【434日目】

モデルインスタンスのフィールド値を変えた

public function __construct(User $user)
{
    $this->user = $user;
}

public function updateUser()
{
    $this->user->timestamps = false; // update_atを更新させない
    $this->user->where('id', '=', $user_id)
            ->update([
                'is_active' => 1,
            ]);
}

こんなふうに、Repositoryパターンとかで、共通のインスタンスを使うときに、
値を書き換えてしまった。

このままだと、同じインスタンスを使うために、別な関数でupdate文を書くと、
update_atが更新されなくなってしまう。

フィールド値をもとに戻そう

$timestamps = $this->user->timestamps;
$this->user->timestamps = false;
$this->user->where('id', '=', $user_id)
            ->update([
                'is_active' => 1,
            ]);
$this->user->timestamps = $timestamps;

こうやって、元の値を一旦保存して、
update文を書き終わったら、またもとに戻そう。これで大丈夫

求む他の方法

他にも良い書き方がありましたら、ぜひ教えてください!

一旦これで進めようと思いますー

ってことでお疲れ様でした。