こんにちは。iQeda [@iQeeeda] です。
実は最近結婚してました。
今やっている案件をすべて手放して、来月から新婚旅行に行ってきます!
東南アジアに1ヶ月ほど滞在する予定です。
とはいえ収入がなくなるのも怖いので、
完全フルリモート・海外での作業 OK な案件を紹介してもらいました。しかし…
当方、iQedaさんの実務経験不足を懸念しております
面談ウケは結構よかったんですが、このような連絡がきました。
数年やっていてもよくあることです。
こう言われては仕方ないので (喜んで) スキルチェックを受けることにしました。
Laravel でカレンダーをつくる
お題は「4 時間でカレンダーを作ってください」でした。
方針決め
やり方について何も言われなかったので、何をしてもいいという判断で自由に開発しました。
- Laravel を使う
- Laravel の案件だったため
- 4 時間しかないから DB は使わない (が、エラー出るので初期設定はする)
- Service Provider (なんとなく) 分かってるアピールする
- Facade (なんとなく) 分かってるアピールする
- Laradock を使う
- Docker (なんとなく) 分かってるアピールする
- 実際はお決まりの手順で環境構築するだけ
- カレンダーのロジックをググるのは OK にした
- カレンダーは PHP 初学者でも作れる機能と判断
- カレンダーロジックに時間をかけるより Laravel 使えるアピールした方が有利と判断
- 素の PHP で書いたものを Laravel 用にどんどんリファクタリング
以下やったことです
ここまでザックリとしたスキルチェックもあまりないかと思いますが、
今回 Laravel の IoC コンテナを超簡単実装したサンプルになると思ったので公開します。
リアル 4 時間なので悪手もあると思いますが、ご愛嬌。
※ あとから閲覧用にちょっとした修正は入れています。
目次
完成品
GitHub でソース公開してます
Laradock で環境構築
何はともあれ、開発環境を準備します。
こちらの記事をそのまま実行させていただきました!
MySQL にデータベース作成
実際は DB を使いませんが、 フレームワーク動作でコケるので設定だけします。
# Docker の MySQL コンテナに入る
docker-compose exec mysql bash
# MySQL ログイン
mysql -u root -proot
# calendar データベースの作成
create database calendar;
Laravel
環境変数
.env を作成して先程の DB 情報を記入します。
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=calendar
DB_USERNAME=root
DB_PASSWORD=root
ルーティング
/
アクセスすると CalendarController の index メソッドが呼ばれます。
Controller
https://github.com/iQeda/app-LaravelCalendar/blob/master/app/Http/Controllers/CalendarController.php
Controller 生成コマンド
# app/Http/Controllers/CalendarController.php を作成
php artisan make:controller CalendarController
意識したこと
Controller は View に変数を渡すだけ
一般に Controller にはゴチャゴチャとロジックを書かない方がいいらしいので、
ほとんどの処理は app/Services/CalendarService.php
に記述しました。
Service クラスは本来 Model (DB) データのやり取りをすることがほとんどだと思いますが、
前述のとおり DB は使わないのでただのロジック待避になっています。
Facade (ファサード) を使う
Calendar ファサードを用意して、そこから CalendarService のメソッドを呼び出しています。
たとえば Calendar::getWeeks()
のような感じで使っています。
いわゆるコンストラクタインジェクションをしているので、$this->service->getWeeks()
のような書き方でも呼び出し可能にしています。
Service
Provider
# app/Providers/CalendarServiceProvider.php を作成
php artisan make:provider CalendarServiceProvider
やってることは CalendarService::class
っていうキーワードが飛んできたら、
CalendarService インスタンスを返してあげて!
…という設定を裏側でやってるぐらいの認識でいいと思います。
Facade
ここで CalendarService::class
っていうキーワードを渡しているので、
ファサードとして CalendarService クラスが使えるようになるのですね。
config
ServiceProvider と Facade をここに追記します。
View
Blade ファイル
Controller から変数で HTML タグを渡しているため、
エスケープしないように {!! $week !!}
としています。
CSS
かなり適当です…
特にカレンダー行が増減すると違和感があるので、修正した方がいいかと(予定なし)
そして面談結果は…
合格しましたが Laravel ではなく CakePHP の案件になりました。
関連記事
お仕事ください!
僕が代表を務める 株式会社 EeeeG では Web 制作・システム開発・マーケティング相談を行っています。 なにかお困りごとがあれば、Twitter DM や Web サイトからお気軽にご相談ください。
カテゴリ「Develop」の最新記事
自分も記事のような感じでコードを書いてしまいそうです。
しかも時間制限あると色々辛いと思います・・。
一体、何がダメだったのでしょうかね?
どれくらいのコード書けばlaravel案件もらえたのか・・。
コメントありがとうございます〜
もともと CakePHP → Laravel のフレームワーク移行するって話だったんですが、
それがポシャって、普通に CakePHP の運用保守になりましたw
もっといい感じのコードの書き方があったら僕も知りたいですね