エンジニアのひよこ_level10

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

【PHP】油断すると破壊的な関数を書いちゃうよねって話【496日目】

こんなコードがありました

PHPに限った話ではないですが。

こんなコードがありました。

function changeUserStatus($user) {
    $user->status = 2
    return $user;
}

echo $user->status; // 1

$changed_user = $this->changeUserStatus($user);

echo $user->status;  //1. ??
echo $changed_user->status; //2. ??

さて。このとき1,2の値はどうなるでしょうか。

正解は

両方共2になりますね。

なぜか。インスタンスの参照先を渡して、インスタンスの値をそのまま書き換えてしまったから。

オブジェクトのインスタンスを扱うときは、結構やりがち。

どうしたらよかった?

もし、元の値を変更したくなかったのなら以下

function changeUserStatus($user) {
    //ここを書き換える
    $changed_user = clone($user);
    $changed_user->status = 2
    return $changed_user;
}

echo $user->status; // 1

$changed_user = $this->changeUserStatus($user);

echo $user->status;  // 1
echo $changed_user->status; // 2

clone()関数で全く同じものを生成して、それを書き換えてreturnする。

【Laravel】app()を使った関数をテストする時にoverload使わない方が良いって話【495日目】

こんなコードがありました

public function XXX() {
    return app('key_class')->make();
}

テストコードが2種類

$mock = Mockery::mock('XxxService')->makePartial();

$this->app->instance('key_class', $mock)
$mock = Mockery::mock('overload:XxxService')->makePartial();

何してるの?

前者は、'key_class'に設定していた結合を、instance結合で新しく上書きしている。

後者は、該当クラスが生成された時に、$mockに入れ替える。

どう違うの?

public function XXX() {
    $obj = new XxxService();
    $value = app('key_class');
}

仮にこんな関数があったときに、

前者は$objはXxxServiceのオブジェクト、$valueは、$mockになります。
一方後者は、両方共$mockになります。

そんなパターンある?

例えば、これでXxxServiceのオブジェクトだったからいいですが、
これがEloquentのモデルクラスだったら?

どこか予想外で生成されそうな気がしませんか・・・?

基本、overloadを使おうと思ったら、踏みとどまる方がいいかもしれないです。
それ、本当にoverloadでやるべき・・・?

【一週間振り返り】いい意味で暴走して、挑戦しきった一週間でした【494日目】

遅くなりましたが振り返ります!

変則的ですが火曜日に振り返り。

次回はまた日曜日に振り返り書きます!

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

暴走して、頭真っ白になりながらも、カンファレンス登壇に挑戦しきった一週間でした

2.良かったこと

1.カンファレンス登壇完遂!!

【登壇レポ】新卒二年目のLaravel JP Conference登壇レポート【492日目】 - エンジニアのひよこ_level10

2.登壇が思ったより好評!ブラッシュアップ重ねた成果出てた。

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

引っ越しがああああ全然進んでないいいいい

あと、暴走してたおかげで、わりと色んな人に失礼な態度とった気がしますごめんなさいいいいいい

4.新しく気づいたこと

みんなに嫌われないは無理だけど!やりようはあったかもしれない!

でも、失敗しても死なない、はマジだと思う!

5.来週したいこと

引っ越し準備・・・(´;ω;`)

6.その他

あのね、私にブログ見てましたは泣くよ(´;ω;`)嬉しい

登壇前からブログ見てましたはほんと泣くよ(´;ω;`)てか泣いたよ

あれね、たった一年でもなにかをやりきれば、絶対に成果は出てくるね。

【登壇レポ】新卒2年目のLaravel JP Conference初参加レポート【493日目】

Laravel JP Conferenceの記事です

  1. 前夜祭感想・参加のすすめ
  2. 登壇時のお話
  3. 他の登壇・交流のお話(ここ)

Laravel JP Conferenceって?

f:id:willow710kut:20190218204905j:plain

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

PHPフレームワークであるLaravelをメインテーマとした技術カンファレンスです。「Laravel JP」を冠したイベントとしては日本初開催となります。

こちらで登壇しましたが、この記事は登壇以外の部分の記事です。

twitterまとめ

ハッシュタグでつぶやきまくってるので、各セッションの内容には触れませんが、
本当に良いものばかりでした。

見るとわかるのですが、デプロイ戦略の登壇時には、私が完全にアンチパターンにハマっていたことを呟いてたりしています。
とりあえず、 Laravel shiftは気になってる。が、きっと私達のプロジェクトではそのままでは使えないので、なんとかしたいな(´;ω;`)

結構いろんな知らないキーワードを集められたのは良かったです。
登壇者の皆様、本当にありがとうございました!

当時の私のつぶやきまとめ

登壇に対して呟いてみて

Twitterハッシュタグで感想やツッコミを書きまくるようにしていたのですが、
他の人はそう考えるのか。とか、
つぶやきのツッコミ入れてもらって知見が増えたりとか、
やっぱり呟くの大切。

そして、見に行ってない登壇で、『創味のつゆ(simpleとeasyは違うのスライド)』というよくわからないキーワードが
Twitterに溢れてたの気になりすぎました。
それについて呟いたら、他の参加者からわかりやすいまとめいただけたので良かったです。
こういう交流も大切。

ランチ

f:id:willow710kut:20190218204941j:plain

弁当豪華過ぎました。量も程よくて、めちゃ美味しかったです。
これは良いエネルギー補給。

そして、ランチセッションみんな言ってましたが、すっごくトークが上手い……そしてあるある話だったので、程よく緊張をせずに話が聞けたのでさすがと言わざるを得ないです。
参考になりました。

懇親会

f:id:willow710kut:20190218204958j:plain

f:id:willow710kut:20190218205048j:plain

飯うめぇ。
てか想像以上に豪華で驚愕。

『えんじにゃーにはピザ食わせておけばええやろ文化』だと思ってたので、
初参加な私はびっくりしました。
おかげで次の日ピザ食べたくなって、ブログ書きながら食べてました(((

懇親会の交流

twitterや、登壇時に『私と友だちになりましょう!』って言ったら、
懇親会めっちゃいろんな人に声かけてもらえて、そして話しかける予定のあった人まで声かけきれなかったです\(^o^)/

嬉しい誤算。その時にも言いましたが、私実は人とのコミュニケーションが苦手で、
話しかけるとかもってのほかなのです。

ただ、『自分が発信すれば、向こうから話しかけてもらえる』って発想でブログや登壇してました。
が、ここまで効果あると思ってなかったので嬉しい誤算。

■教訓
100人の前で友達募集したら、わりと友達できる。

懇親会コンテンツ

じゃんけん大会とか、LTとか。懇親会LTに、『Laravel3…に入門してきた』『PHPJava動かした』とか、
いい意味で頭おかしい凄いLTとかもあって。
さらに、Laravelの本の著者集まったからにはと素敵な対談も目の前で見れて。

なるほど、カンファレンスの懇親会が本編と言ってるのもわかるくらいに、濃密でしかも交流もいい感じで
これは懇親会はちゃんと行かなきゃなって思いました。

解散後

あの、あの、めっちゃみんな飲みに行ってるんですが。

私へっとへとで頭痛していたくらいなので返ったのですが、
みなさん体力ありすぎませんか!?って聞いた所、

『体力はないよ、でも気合で行ってる』『行けばあとはなんとかなる』

なるほど、強い。カンファレンスジャンキーになるには、この壁を超えなければいけないのですね・・・!

最後に

いろいろありました……濃い1日でした。
本当に行ってよかったと心の底から思います。

100くらいを期待して行ったら、300くらい返ってきた気分です。想定外の良い収穫がたくさんありました。
そんな経験を得られたのも、スタッフの皆様、スポンサーの皆様、参加者の皆様、あの会場にいた全ての方に感謝です。(貸してくださった会場にも!)

f:id:willow710kut:20190218205029j:plain

そして……うっかりカンファレンスジャンキーの方々と顔見知りになりましたので、めでたく沼に引きずられそうです。

なので! PHPerKaigi 2019 のチケットは買いました!
地方のPHPカンファレンスも、会社を説得予定、そしてトークも今少し準備中!

Laravelカンファレンス来れなかった方にもお話したいし、Laravel以外でもお話できるように新たに内容を加えて調整中!
たった1日で、行動が変わった瞬間でした!

そう、なにかの終わりはなにかの始まりですから!
楽しかったカンファレンス参加、そこから新しい挑戦や、次のカンファレンス参加に繋げますヽ(=´▽`=)ノ

それでは!これからもういろうをよろしくお願いいたします!
ぺちぱーなら必ずどこかでまた会うでしょう!また会いましょうヽ(=´▽`=)ノ

いつものおまけ

新しい挑戦!カンファレンス後に作った、初心者エンジニアの集いのリンクはこちら。

ただ、初心者オンリーにはしないつもりで、オンラインゲームのギルドのように、ゆったりみんなが仲良く成長できる場に出来たら最高だなって思います(‘ω‘ )
ルールは、みんな仲良く楽しくね。

Create Account | Slack

【登壇レポ】新卒二年目のLaravel JP Conference登壇レポート【492日目】

Laravel JP Conferenceの登壇記事です

  1. 前夜祭感想・参加のすすめ
  2. 登壇時のお話 (ここ)
  3. 他の登壇・交流のお話

Laravel JP Conferenceって?

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

PHPフレームワークであるLaravelをメインテーマとした技術カンファレンスです。「Laravel JP」を冠したイベントとしては日本初開催となります。

何したの?

登壇しました!

www.nyamucoro.com

f:id:willow710kut:20190217191842j:plain

新卒2年目でもコントリビュート出来たよ。
コントリビュートは謎の話じゃないよ。
初学者はこうすると成長しやすいかも。

みたいな話しました。
さあ、その時までの私の活動・気持ちを話しましょう(‘ω‘ )

そこそこ長い記事なので注意です!

Conference前(スライド準備編)

■やったこと

  1. 一ヶ月前から、株式会社ウィルゲートさんのもくもく会で毎週1時間程スライド作成。
  2. もくもく会・社内で練習、フィードバックをもらう

■解決したこと

  1. 定期的に時間を取ることで、慌ててスライド作らないで済んだ
  2. フィードバックをもらうことで、この程度か・・・って思われにくいスライド

■言いたいこと
登壇には、ちゃんと計画立てるといいですよ!

私はConference初参加、初登壇でしたが、準備をかなーーーりやると、本番の瞬間は『あがり症・恥ずかしがり屋』な私にしては、緊張が少なめでした!

あと、前日祭に参加したのも、緊張を抑える良い手段でした。

登壇・・・の前の20分

さあ、登壇の時間がやってきました。

トラブルが起こらないようにその準備を・・・

あ、HDMI刺すだけで大丈夫でしたね。はい。えっと20分前に来たから・・・あ、やば、これは・・・超暇だ!そしてこれである。

ここから始まります、hamacoさんから振られる『Laravelコントリビュート』。

静かですねー  
→音楽とか流したら良かったかもですねー  
→お、歌ってくださる?アカペラ?  
→ほら、登壇者が歌ったら喋れなくなるし
((((;゚Д゚))))ガクガクブルブル ←カラオケ行かない歌超苦手

みんな前に移動してくれるかなー?とか、
このタイトルのどこ惹かれましたー?ってアンケート取ったりとか。

それでもどーーーやっても時間が余ったから、ぷちLT。ブログ毎日書いてるよ談。

■教訓
とっさに歌ってって言われたときに歌う曲を用意しておく
とっさにできるLTネタを用意しておく

でも、hamacoさんの助けもあり、いい感じに場が温まったと思います。
ますます頭上がらなくなった瞬間でした。本当にありがとうございます・・・!

登壇本編

資料はこちらの記事から。

www.nyamucoro.com

前編: コントリビュートは謎じゃない

コントリビュートと聞くと、凄い!ってイメージを持ってもらうのは嬉しいです。
でも、闇の存在、よくわからないってイメージは払拭しておきたい!ってことをメインでお話しました。

ちょこちょこコントリビュートに対して興味を持って、懇親会で質問いただいたり、Twitterでやってみようかなって方が出てきたのは本当に嬉しいお話。

後編: 初学者向けのぷちトピック。

登壇前日まで厳選して、画像も調整したりしてました。

Twitter見ている限り、『半角スペース+関数名+(』は刺さっていた模様。
あと、『調べ方を一緒に教えてください!』ってのは、初学者にも経験者にも刺さっていた様子。
そもそもIDE使えよってツッコミは、そのとおりです、ってことで会社の方買ってね!って話もしました。

ちなみに、登壇するにあたって、こんな誤算がありました。

誤算1 アンケートが割れる

まず、スライド内でやった、関数 orderbyクイズ。
3択したら、ガチでバッサリ3割ずつで割れた!!???

会場のほとんどが手を上げていたので、本当に割れてしまいました。
その時にも言いましたが、このあとのスライド破綻するんですがそれは\(^o^)/w
でも、それだけいい議題になるコードだったんですね。

今回、既に新しいコードとして修正版が出ると思いますが、今回を起点にまた新しいより良い実装がされるかもしれないですね。これもOSSの素敵なところだと思います。

誤算2 思ったより注目された

裏番組が『抽象化とは』っていう最強の議題だったんです。

こっちも『新卒』『コントリビュート』っていうキラーワード使っているから、そこそこ迷う人出ると思って、事前に資料を公開して、
『こっちは資料あるから抽象化の方見に行こうっと』
って思ってもらうの狙って早めの公開していたんです。

懇親会で話を聞いてみたら、予想通り資料あるからと抽象化の方を見に行ったけど、
私達がネタ方向でもTwitterで盛り上がってしまったために、『しまった、気になるぞこの登壇』ってなってしまったらしく・・・w

あれね!余計な、変な気遣いとか要らないね!!!

私も『創味のつゆ(simpleとeasyは違うのスライド)』が気になりすぎてそわそわしてましたしね\(^o^)/

雑感想

思ったより、いい感じに登壇出来たと思います!
自分の中の100点を超えて、120点くらいまでは上げれそうでした!

あと、ダークフォース、闇のエンジニアがめっちゃ受けてて私は嬉しい・・・会社の先輩からのアドバイスを良いアレンジ出来た(‘ω‘ )!

カンファレンス初参加初登壇で、ここまでやれたのは十分すぎるかと・・・!
そこそこ誰かの心に何かを提供出来たのではないかと感じています・・・!

やっぱり、失敗しても死なない!って思ったら行動してみるの大切・・・!

さて、ここからは懇親会とかで頂いた質問の回答と、Twitterまとめです!

Q1.バグ見つけられないよー!

issueを見て!結構頻繁に更新されてるのと、Laravelはテストコード必須だから、テストコードなくて放置されてるのもあるよ!

あと、私が宝の山だと思ってるのは、ヘルパ関数。特にデフォルト引数辺りはかなりいろんなものが潜んでるっぽいですよ・・・!

Q2.orderByDescで良くない?

それを書く人がそう出来たらそのとおりです(´;ω;`)

ただ、orderByという現在の関数の仕様では、その発想を持たずに開発出来てしまうので、もしorderByDescで全てを解決するのであれば、orderByAscを用意して引数を入れさせないのを仕様とする等、『Laravel全体からみての設計』を考える必要があると思っています。

・・・つまり、これの議論だって・・・?あとはわかりますね・・・?

Twitter

当時の時間で検索。

こんなふうに呟かれてました。Laravelコント・・・w

#laraveljpcon3f since:2019-02-16_15:14:00_JST until:2019-02-16_16:10:00_JST - Twitter Search

引き続きおまけ

Twitterで言ってた初心者エンジニアの集いのリンクはこちら。

ただ、初心者オンリーにはしないつもりで、オンラインゲームのギルドのように、ゆったりみんなが仲良く成長できる場に出来たら最高だなって思います(‘ω‘ )
ルールは、みんな仲良く楽しくね。

Create Account | Slack

【登壇レポ】新卒二年目のLaravel JP Conference前夜祭レポート【491日目】

登壇してたあいつです!

皆さんこんばんは、はじめましての方はじめまして!

いつも見てくださってる方、いつもありがとうございます(´;ω;`)

https://conference2019.laravel.jp/ では、コントリビュート怖くないよ!って話してた新卒二年目の人です!(わーぱちぱちー!

カンファレンスの記事を書きますが、いっぱい書きたいことあるので、数記事に分けます。

記事構成予定

  1. 前夜祭感想・参加のすすめ(この記事)
  2. 登壇時のお話
  3. 他の登壇・交流のお話

この3部構成の予定です。

主催者のytakeさんが『ブログを書くまでがカンファレンスです!』という至言を私達にくださったので、
私と一緒にカンファレンス延長線をどうぞよろしくお願いいたします!

前夜祭とは

カンファレンス前夜の祭りです!別名本編です!今回は非公式開催だったようです。

beer.connpass.com

飲みます!食べます!普通の飲み会です。たぶん!

今日は、ちょっとでも前夜祭を知ってたけど、怖いーって思った人にも、勇気出たらなーって記事になれたらなと思います!

さて、こんな前夜祭、何も知らない私が飛び込みました!薄々、めっちゃ有名な人ばっかり集まっているなーとは思ってはいました!

え、身内の集まりとか怖くない?

そして、もしかしたらこう思った人もいるかもしれません。

『つよつよエンジニアの身内の集まりとか怖くない?』

.oO(実は私はちょっと恐れました、でも失敗しても死なない!の精神ここでも発揮しました)

ってことで、とりあえず行ってみました!結論は『よく勇気出した私!!!』

すっげーーー歓迎されました。

皆さん噂に聞いてると思います。『ぺちぱー優しい』。合ってる。

Conference初参加、まじで始めましての方々のところでしたが、
めっちゃ優しく歓迎していただけました・・・!

来てみて『ういろうさんですね!』って言われたとき何事か!?ってなりましたが、
どうやらNEWフェイスは私だけだったかららしいです(‘ω‘ )w

毬花はやばいよ!

そこから即『ビールいけます?』『いけるなら毬花おすすめですよ!』と、身内のノリを見せつつ、さりげない気遣いしてくださるたかさん。
気づいたらもう仲間だ感が凄かったです・・・!

f:id:willow710kut:20190216234531j:plain

そしてこの毬花である。
メニューと一緒に撮ると良いとはたかさん談。さすがカメラマン・・・!

ちなみに、めっちゃめちゃうまかったです。はせがわさんがおすすめするだけある・・・!
今までで飲んだことのないビール、いや、これはビールと読んでいいのか!?ビールではない、毬花という一つの飲み物のジャンルじゃないのか?
そんなふうに思えるくらいに、美味しかったです。
ビールっぽいけど甘さと香りが凄くて、だめだ、私グルメレポーター出来ない人だ、とにかく美味しかったんですよ、一度見かけたら飲むべきです・・・!
はせがわさんまだまだおすすめを持ってるらしいので、是非またおすすめを教えていただきたいところ・・・!

ぺちぱーと飲み会するとこうなる

そして人も集まり、自己紹介して、いっぱい雑談(‘ω‘ )

隠れそーだいさんファンな私は、生そーだいさんだ・・・!ってなってました。
ちなみに、めっちゃトークが上手。止まらない。さらに、知らない話かな?少し難しい話かな?って思ったら、
素早く相手を見て、丁寧に説明をしてくださる。え、なにこのイケメン・・・!ってなってました。

そして、あれ?話しかけてから返事が・・・『レイテンシ』が・・・
ビールまだ残ってるのに頼んだ→『キュー』が溜まってるー

あ、エンジニアの飲み会だこれ(‘ω‘ )wめっちゃ面白いw

A『Bが来るから飲んでも大丈夫だろー』
B『Cが来るから飲んでも大丈夫だろー』
C『Aが来るから飲んでも大丈夫だろー』
デッドロック発生してんじゃねぇか!』

が一番のお気に入りの話でした!

楽しそうじゃありませんか?

ということで、ものっすごく面白い飲み会でした。

ちょくちょく会話にも混ぜてもらって、本番への緊張が、100から30くらいまで減りました。それくらい楽しかったです。

f:id:willow710kut:20190216234541j:plain

たかさんのカメラは、すっごいかっこよかったです・・・!
『カメラみたらびっくりするよ!』
って前振りから、本当にびっくりしたのは初めてでした。でかい、そしてかっこいい・・・!(そして高い機材がこんなところに!?)

そんな明日へのお話もして、緊張もほぐれて素敵な時間でした。

てかぺちぱーみんな優しすぎないっすか

ってことで、おおまかなレポは以上になります!

こっからは記事内に名前出ていない方へのメッセージを晒して書いておきます(‘ω‘ )

いちかわさんとそーだいさんの青ネタは、私がものっすごく話に入りやすいネタで助かってました・・・!
私がいちかわさんがそーだいさんの代理登壇の話を振っても、優しくキャッチしてくださったの感謝しております・・・!

あかせさんのららこん25分代理飯談義登壇は叶いませんでしたが、結局クロージングで突発で話すことになってましたね・・・w
あ、ラーメンのエイリアスだとニヤニヤしてました(‘ω‘ )w

ytakeさんは、みんなに愛されているんだな・・・とあの短時間でも凄く感じる時間でした・・・!
おかげで無事にカメラの解像度は上がりましたありがとうございます・・・!

ごへーもちさんと反対側で、途中抜けだったからあまり話せなかったの無念でした(´;ω;`)
Twitterでちょくちょく話してくださったり、懇親会でお話出来て嬉しいです・・・!

はまこさんには、元々頭上がらなかったのが、さらに上がらなくなりました、本当に感謝しております・・・!
Twitterでちょくちょくフォローをいただけていたのが、Conference当日にもいただけたの本当に助かりました・・・!
Laravelコントリビュートは忘れられない思い出+ネタになります・・・w

ひこさん・・・ここで告白します実は私同い年です(((
なので親近感持ってましたが言うタイミング逃しました(‘ω‘ )w

まきさん、札幌のカンファレンスいくのまじで計画してますので、その時はよろしくお願いいたしますヽ(=´▽`=)ノ楽しみにしてます!

f:id:willow710kut:20190216234610j:plain

alias 牛タン = 仙台

お疲れ様でした!
すっごく素敵な前夜祭でした!!!

おまけ

Twitterで言ってた初心者エンジニアの集いのリンクはこちら。

ただ、初心者オンリーにはしないつもりで、オンラインゲームのギルドのように、ゆったりみんなが仲良く成長できる場に出来たら最高だなって思います(‘ω‘ )
ルールは、みんな仲良く楽しくね。

Create Account | Slack

【Laravel】Collectionのpluckと、クエリビルダのpluckの違い【490日目】

まずお詫びです

今日コード読んでいたら、この記事で書いたこと間違っていました!!!

www.nyamucoro.com

どう違うかは、該当記事で説明させていただきます。

Collectionのpluckと、クエリビルダのpluck?

クエリビルダでgetした後にできるCollectionに対してpluckするのと、
クエリビルダで組み立てている時にgetの代わりにするpluckは動作が異なります。

てか、戻り値が違います。

どう違うの?

Collectionのpluckは、supportのCollectionを返します。
ちなみに、EloquentのCollectionを使った場合も、supportのCollectionを返します。

クエリビルダでpluckすると、配列(array)を返します。

コード

vendor/laravel/framework/src/Illuminate/Support/Collection.php /** * Get the values of a given key. * * @param string $value * @param string|null $key * @return static */ public function pluck($value, $key = null) { return new static(Arr::pluck($this->items, $value, $key)); }

vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php ```/* * Get an array with the values of a given column. * * @param string $column * @param string|null $key * @return array / public function pluck($column, $key = null) { $results = $this->get(is_null($key) ? [$column] : [$column, $key]);

    // If the columns are qualified with a table or have an alias, we cannot use
    // those directly in the "pluck" operations since the results from the DB
    // are only keyed by the column itself. We'll strip the table out here.
    return Arr::pluck(
        $results,
        $this->stripTableForPluck($column),
        $this->stripTableForPluck($key)
    );
}```

【Faker】boolean関数でTrueの確率を操作+元コード読む【489日目】

fakerって?

テストとかでよく使われるFaker。

ダミーの値を作るときによく使われていて、ランダム文字列、それっぽい電話番号、それっぽい住所などをランダム生成してくれます。

booleanの確率操作

trueやfalseを出す確率を実は操作できます。テスト内容によっては重要かも。

書き方は単純。引数に『True』が出る確率を書く。

$faker = new Faker\Generator();

$faker->boolean(50);

さて、元コードどうなってるんでしょう?

元コード

たぶん、これ。(ちょっと自信ないのが、Generatorのコメントから飛んだから)

vendor/fzaninotto/faker/src/Faker/Provider/Miscellaneous.php

    /**
     * Return a boolean, true or false.
     *
     * @param int $chanceOfGettingTrue Between 0 (always get false) and 100 (always get true)
     *
     * @return bool
     *
     * @example true
     */
    public static function boolean($chanceOfGettingTrue = 50)
    {
        return mt_rand(1, 100) <= $chanceOfGettingTrue;
    }

あーなるほどわかりやすい・・・

ココらへん読むと結構ニヤニヤできますよ(‘ω‘ )この機会に是非