Laravelアドベントカレンダー12日目の記事です
この記事は、Laravelアドベントカレンダー2018の12日目の記事です。
読者対象
PHP、Laravel初心者。
Laravelにプルリク出してみたい人。
初心者PHPerです!
はい!私PHP歴1.5年の初心者です!
そんな私も、実はLaravelにプルリクエストを出して、コントリビュートした経験が。
バグを直しました。
実は、Laravelにプルリクを出すって、そんなに難しくない!
この記事をきっかけに、それを知っていただけると嬉しいです!
突然ですが問題です
User::select('*')->orderBy('id', 'ascc')->get();
このコード、'asc'を間違えて、'ascc'になってますね。
これはどう動くでしょうか!
1. そのまま 2. エラーになる 3. ascになる 4. descになる
他の人の回答
Twitterのアンケート。中身を読む前にぽちっとしてみてください。
他の人の意見も見れます。
【Laravelクイズ】
— ういろう🍤👩🍤@新卒3年目PHPer (@nyamucoro) 2018年12月10日
```
User::select('*')->orderBy('id', 'ascc')->get();
```
'asc'を間違えて、'ascc'になってますね。
このとき、コードはどう動くでしょうか。
正解は、Laravelアドベントカレンダー12日目に!https://t.co/ldhnYXLyhw
1. Laravelのコードの場所
Laravelのプロジェクトの中にある、vendor
のディレクトリを開いたら、 laravel
って文字が見えますね。それです。
vendor/laravel/framework/src/Illuminate
の中が主に見るコードです。
2.クエリビルダの場所
vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php
ここが、クエリビルダのコードが書かれている場所です。
Database、Query、Builder、わかりやすいですね!
3.関数を探す
では検索をしてみましょう。 orderBy(
で検索してみてください。
みなさん、読みましたか?では正解です。
(回答)5.7現在、descに変わります
public function orderBy($column, $direction = 'asc') { $this->{$this->unions ? 'unionOrders' : 'orders'}[] = [ 'column' => $column, 'direction' => strtolower($direction) === 'asc' ? 'asc' : 'desc', ]; return $this; }
これ、PHP初心者でも読めますね!
解説
'direction' => strtolower($direction) === 'asc' ? 'asc' : 'desc',
strtolowerは、$directionをすべて小文字にします。
なので、$directionが'asc'、'ASC'、'Asc'とかなら、'asc'で動きます。
それ以外はすべて'desc'で動きます。
'ascc'は条件に合致しないので、'desc'で動く。
そう、さっきの問題は5が正解です!
元コードを読むのは意外と簡単
今回はファイルの場所を私が示しましたが、
自分で探すのも簡単です。
よくコードの一番上に use
を書くと思います。プロジェクトでも探してみてください。
use Illuminate\Database\Eloquent\Builder;
Illuminate
で始まるuseです。
このパスはLaravelのコードのことです。
vendor/laravel/framework/src/
の下にあるこのパスを辿れば、元コードにたどり着きます。
namespaceやuseに着目すれば、元コードは簡単にたどれます!
コントリビュートの話は?
さっきの問題が予想外だった方、このままでいいのかな?とか思いませんでしたか?
エラー吐くべき?似たコードは保管するべき?とかとか。
そんなときが、コントリビュートチャンス。
私がこの話したら、早速友人がissueを立てました。
さっきコード読んだとき、結構簡単なコードだと思いませんでしたか?
コントリビュートって結構難しくないのです。
5.7では'desc'で動くと書きましたが、これがもしかしたら、明日にでも修正されるかもしれない!
私も、バグ修正はプルリク出して1日でマージされました。
コントリビュートは難しくない!
私がバグを直したときも、if文を少し追加したものでした。
(マージしてもらったあとで、コードをもっと良いコードに変えてもらいましたが、テストコードは残ってます)
ぜひ、Laravelで『あれ?』って思ったときは、一度コードを読んでみてください。
そして、プルリクを出してみてください。
『大型OSS、Laravelにコントリビュートした!』『俺のコードが世界中で動いている!』
ちょっと冗談めいた話ですが、それができるのが、この業界の面白いところ。
ぜひ、元コードを読んで見る習慣をつけてみてください。
Laravelはよくできたコードなので、普通に勉強になると思います!
是非皆さんもコードを読んでみてください!
おまけ
コントリビュートの過程や、コントリビュートでどんな面白いことがあったかは、以下の記事に書いています。
コントリビュートすると何が嬉しい?ってのは、この記事を参考にどうぞ。