エンジニアのひよこ_level10

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

【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文を書き終わったら、またもとに戻そう。これで大丈夫

求む他の方法

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

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

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

【思考メモ】会社運営と比べてギルド運営は、大量雇用と大量解雇が強い?【433日目】

発端はギルド運営って組織運営につながるんじゃねって話

www.nyamucoro.com

気づいたこと

ギルド運営にできて、会社の組織運営にできないことを考えてみた。

それは、大量雇用、そして素早い解雇。

たくさん集めて、良くないものは破棄、みたいな話。
単純に、質の良いものが残るから良いよねってお話。

もちろん、これ以外にもギルド運営が楽な要因はあると思いますが、一旦まずこれがあるなと

なんでできない?

じゃあ、これと同じことを会社等の組織でやってみては?

・・・まあ、難しいですよね。

何が難しいって、雇用という形態を取ると、まあすぐにやめさせるとかは契約次第では難しい。
さらに、離職率という数値が、会社の信用に響いてきて、本当にいい人も近寄らなくなるかもしれない。

契約、外から見たときの印象、この2つがデメリットとして上げられそうです。他にもあるかも。

そのデメリットを削減する方法は?

では、この手法を取り入れるためにどうすればいいか。

契約、これは色んな方法で回避出来るかもしれないですね。試用期間とか。

外から見たときの印象・・・ねえ、なんで今の社会、離職率が低い会社がいい会社とされてるの?
やっぱりこの常識が悪いんだ!これは常識を壊すしk(知ってる人は知ってる私の発作

・・・じゃなくて。離職率一つで下がるような会社のイメージなのを何とかするほうがいいのかも。

他にもデメリットあるくない?

あると思います・・・w

そもそも、雇うために人事の人件費とか、かけてるお金と成果が見合わないとかありますね。

そういや、ギルドとかは、ボタンポチッで所属ができて、契約もボタンポチッでできますね。

そういう風土とか作れるような業種や契約形態とかないのかな。
みたいな、ことも考えてみたいなーとか思いました。