エンジニアのひよこ_level10

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

エルビス演算子(?:)で代入とかをスマートに書く【739日目】

if文で代入を書く

if ($user) {
    $item = $user;
} else {
    $item = $request['user'];
}

もし、$userがtrue相当だったときには$userを代入し、
そうでなければ別な値を使う。

よく書くif文ですね。

if ($user) {
    return $user;
} else {
    return $request['user'];
}

こんなのもありますね。

これをエルビス演算子をつかって書き換える

エルビス演算子で書き換え

$item = $user ?: $request['user'];

これですっきり。

おまけ: null合体演算子

undefinedとかを考慮してissetを使いたい場合は、null合体演算子を使うと良さそう

$item = $user ?? $request['user'];

【プログラミングメモ?】if文を書く時に、違和感感じたコード【738日目】

if文をコードレビューしてみた

if (auth('user')->user == null) {
    $data = request()->session()->get('user');
} else {
    $data = auth('user')->user;
}

データがnullであれば、sessionの値を使う というif文。

ちょっと違和感を感じたというお話。

逆を書いてみた

if (auth('user')->user != null) {
    $data = auth('user')->user;
} else {
    $data = request()->session()->get('user');
}

ユーザーデータがnullじゃなければ、ユーザーデータを使う

似てるけど、意味が違う気がするんです(´・ω・`)

どちらがいい?

一応、どちらでも良いかもしれませんが、個人的には後者がいいのかなぁって思ってます。

『ある、なし、異常系』

みたいに捉えた時、『あれば使う』『それ以外は別の手段を取る』が今回書きたいコードな気がするんです。

まあ、とはいえこのif文がいいかは別問題ですが!
こういう時のベストプラクティスというか、『これが正解!』みたいなのがあればいいよなぁって思ったやーつでした。

【一週間振り返り】心の余裕から、新しい動きが出来た一週間【737日目】

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

心の余裕から、新しい動きが出来た一週間。

2.良かったこと(新規・特徴的なこと)

  1. 自分が知ってることを、少しずつ会社のメンバーにシェアするのを試みてみた
  2. ゆっくり実況動画の編集数年ぶりにした

3.良かったこと(平時・生活的なところ)

  1. FGOで星5出たー!酒呑童子
  2. 友人にOculusRift貸して、布教を始めた!
  3. BeatSaberのオンライン対戦面白いね?
  4. ボイチェンで可愛い声って意外と簡単に作れるのね・・・?

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

でも、動画作成したけどアップロードまだしてないよ?

いろいろ試してみたけど、そろそろアウトプットから、インプットに比重を寄せて良い気がする?
(でもバーチャルカンファレンスはしたい。)

5.新しく気づいたこと

動画作成とかもしたし、やっぱり心の余裕を作る大切。ホント大切。

6.来週したいこと

VRChatまだ遊べてないので、遊びたいね。

7.その他

今週何もしてないなーって思ったらそうでもなかった。

やっぱり、一週間振り返りっていい活動。

8.体重

99.9kg

ジュンチョウニフエテマスネ

【Slack】ブログなどの更新を、チャンネルに通知する方法【736日目】

チャンネルに更新を通知したい

例えば、私のブログが更新されたとき、その通知をSlackのチャンネルに流したい。

あるいは、Laravelで新しいアップデートのニュースなどが書かれた、『Laravel News』の更新をSlackのチャンネルに流したい。

ワークスペースにアプリ追加

slack.com

対象のワークスペースで、上のやつを入れる。

/feedコマンド

スラックで、通知を流したいチャンネルに、以下のようなコマンドを打つ。

/feed subscribe https://www.nyamucoro.com/feed

これで私のfeedは追加されました。

URLの取得

上のコマンドは、subscribe以降のURLは、feedと呼ばれるものを返すページである必要があります。

だいたい、元のサイトのTOPのURLに /feedと付けると、該当ページ自体か、誘導するページにリダイレクトされます。

Laravel Newsだと、リダイレクトされ、feed用URLが書かれたページに移動します。

そのURLをコピーして、 /feed subscribeの後に該当URLを打ち込みましょう。

サイトが更新される度に、slackに通知が行きます。

お疲れさまでした。

【Laravel】サービスコンテナでbind出来ない問題の対応【735日目】

サービスコンテナでbind

$this->app->bind(
    'App\Services\XxxServiceInterface',
    'App\Services\XxxService'
);
    public function __construct(XxxServiceInterface $xxx)
    {
        $this->xxx = $xxx;
    }

これでbindしておいたのに、XxxServiceInterfaceがインスタンス化出来ないとエラーが出た。

XxxServiceが呼び出されるはずが、bind出来てない?

キャッシュが問題かも

bindをした設定が、反映されてない。
もしかすると、設定がキャッシュされていて、設定が追加されてないからかも。

bind用のファイルに記述を追加したとかだと起こる。

bootstrap/cache/services.phpを確認してみて、内容追加されてなければそうかも

キャッシュを消すコマンド

php artisan clear-compiled

これで、生成済みのファイルを削除してくれるので、再度サイトにアクセスすると動くかも。

リリース時のCIとかにも混ぜておくと良き。

【PHP】無名関数・クロージャ。変数に関数を入れたり出来る【734日目】

変数に関数

こんなコードを見たことはありませんか。

$func = function ($num) {
    return $num *2;
};
$arr = [
    'id'  => 1,
    'item' => function ($num) {
                return $num *  2;
             }
];
$mul_num = 3;

$func_use = function ($num) use ($mul_num) {
    return $num * $mul_num * 2;
};

こんなふうに、メソッドとかじゃなく、
functionだけで書かれていたり、
そのfunctionを変数に入れていたり。

公式ドキュメント

https://www.php.net/manual/ja/functions.anonymous.php

無名関数・クロージャ

無名関数や、クロージャと呼ばれているものです。

$func = function ($num) {
    return $num *2;
};

この時点で、$funcには、 Closureというクラスが入れられています。
間違えてはいけないのは、『まだ実行はされていなくて、Closureというクラスのインスタンスがある』ということ。
つまり、『実行は後で行われる』のです。

実際に実行する

ではどう扱うのか。

echo $func(3); // 結果は6って出る

$funcの中身を見るとわかりますが、$numに3が代入され、実際に動作がされます。

あくまで実行するものを保存するのであって、実行はあとで行われるのですね。

よくある質問。

Q. function ($num)の値は何が入るんだ
A. 動かす瞬間に代入された値で決まります
Q.  呼び出す前に別の所で使ってた値をクロージャ内で使いたい
A. useを使います。下の例のような感じです。
$num_x = 3;

$func = function ($num) use ($num_x) {
    return $num * $num_x;
}

echo $func(6); //18が出る  

【MySQL】バックアップを取る。他のサーバーからも。【733日目】

バックアップを取りたい

データベースのバックアップを取りたい。

あるいは、他所のDBのデータを別なDBに移したい。

mysqldump

mysqldumpを使うと、データの状態を再現するsqlファイルを生成することが出来る

mysqldump -u user_name -p > output_file_name

これでパスワード入れるとおっけー

他のサーバーのやつを取る

通常のmysql接続と一緒にホストを指定する

mysqldump -u user_name -p -h host_name  > output_file_name

これでよし

【MySQLWorkbench】Macでのmysqldump Version Mismatch対応【732日目】

MySQLWorkbenchでmysqldumpしたい

mysqldumpをしたい。

でもコマンドで打つのは怖い。
ってことでMySQLWorkbenchを使ったが、以下のエラー

mysqldump Version Mismatch

エラーメッセージ的には、ローカルと接続先のmysqlのバージョンが違うよとのこと。

では揃えよう。
この作業はmacで行いました。

mysqlのインストール

brew install mysql@5.6

対象のバージョンに合わせたインストールをしてね。

バージョンの設定

  1. Preferences を開く
  2. Administratorのメニューを選ぶ
  3. Path to mysqldump Toolにインストールしたコマンドのパスを入れる

とはいえ、どこに入れたのか。

パスの場所

/usr/local/opt/mysql@5.6/bin/mysqldump

ここにありました。このパスを入れると、無事に動きました。

お疲れさまでした。