4時間のスキルチェックでLaravel製カレンダーを作ってみた

  • このエントリーをはてなブックマークに追加
  • Pocket

こんにちは。タクマ™ [@suwaru_blog] です。

実は最近結婚してました。

今やっている案件をすべて手放して、来月から新婚旅行に行ってきます!
東南アジアに1ヶ月ほど滞在する予定です。

とはいえ収入がなくなるのも怖いので、
完全フルリモート・海外での作業 OK な案件
を紹介してもらいました。しかし…

当方、タクマ™さんの実務経験不足を懸念しております

面談ウケは結構よかったんですが、このような連絡がきました。
数年やっていてもよくあることです。

こう言われては仕方ないので (喜んで) スキルチェックを受けることにしました。

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 情報を記入します。

.env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=calendar
DB_USERNAME=root
DB_PASSWORD=root

ルーティング

/ アクセスすると CalendarController の index メソッドが呼ばれます。

Controller

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 サイトからお気軽にご相談ください。

コメント

  1. 通りすがり より:

    自分も記事のような感じでコードを書いてしまいそうです。
    しかも時間制限あると色々辛いと思います・・。
    一体、何がダメだったのでしょうかね?
    どれくらいのコード書けばlaravel案件もらえたのか・・。

  2. タクマ™ より:

    コメントありがとうございます〜

    もともと CakePHP → Laravel のフレームワーク移行するって話だったんですが、
    それがポシャって、普通に CakePHP の運用保守になりましたw

    もっといい感じのコードの書き方があったら僕も知りたいですね

コメントを残す

*