10
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

YYPHPAdvent Calendar 2018

Day 17

YYPHP 参加者一覧サイト作ってみた

Last updated at Posted at 2018-12-16

2018年 YYPHPアドベントカレンダー 17日目です。

題材として@nouphetさんが公開されていたConnpassから参加者リストを一撃で取得するスクリプトのWEB版を作ってみようと思います!

目的

  • 普段お世話になってるYYPHPに少しでも貢献したかった
  • いつもは自作インフラにアプリを載せてしまっているので、流行りのPaasにデプロイしてみたかった

機能要件

  • トップ画面には開催予定のイベント一覧を表示する
  • 開催予定のイベントをクリックすると、参加者一覧が表示される
  • 参加者一覧ページでコピーボタンを押すと、HackMD用のテキストが取得できる

フロントエンドの構成

インフラ:Firebase Hosting
フレームワーク:Nuxt.js

バックエンドの構成

インフラ:Heroku
フレームワーク:Laravel

作ったもの

https://yyphp-member-list.firebaseapp.com/
(30分無アクセスだとHerokuのDynoさんが居眠りするので、初回アクセスが重いことがあります)

ソースはこちら↓↓↓
フロントエンド
バックエンド

苦労したところ

[Heroku] WEBからアクセスしたときと「heroku run ~」で動く環境は別物だった

イベント情報を1時間おきに実行するバッチで取得し、キャッシュしています。
このキャッシュ、最初は「ローカルファイルキャッシュ」でやろうとしていたのですが罠がありました。

WEBアプリが動く環境(Dyno)と「heroku run」や「Heroku scheduler」が動く環境は別物だったのです。。。
(「heroku run」や「Heroku scheduler」が動く環境は「One-off Dyno」という一時的な環境)

そのため、いくら「heruku run ~」や「Heroku scheduler」でバッチを動かしてキャッシュしても、
キャッシュはそれぞれのDynoにしか存在せず、WEBアプリ側からは見ることができなかったのです。

Untitled Diagram (1).png

ローカルファイルキャッシュではだめだ、ということになったのでHeroku Redisを導入してしのぎました。
(ちなみに、Heroku RedisはAWS使っているみたいです)

※もちろん、WEBアプリDyno内でキャッシュする処理であればローカルファイルキャッシュでも問題ありません。
ただ、その場合スケールアウトしたときにそれぞれのDynoにファイルキャッシュされてしまうので、
結局Redisなどでキャッシュするのが正解かもしれません。

[Heroku] laravel.logが出力されない!

未完成状態でデプロイしたときに、なんらかのエラーが起きたのですが「laravel.log」が出力されておらず、見ることができませんでした。
これはログ出力されていないのではなく、見に行こうと「heroku run bash」したときにつながるのは前述の「One-off Dyno」であるためです。

どうすればよいかはHerokuのドキュメントに載っていました。
https://devcenter.heroku.com/articles/getting-started-with-laravel#best-practices

config/logging.php
<?php
return [
    'default' => env('LOG_CHANNEL', 'stack'),
    'channels' => [
        'stack' => [
            'driver' => 'stack',
            'channels' => ['single'],
        ],
        'single' => [
            'driver' => 'errorlog', #ここがポイント
            'level' => 'debug',
        ],

Laravel.logをファイルではなく、「errorlog」に出力するように変更すればよいのです。
そうすると、以下のようにHerokuの管理画面からログを確認することができるようになります。
(以下のログは、保存されたデータの確認用に埋め込んだもの)
スクリーンショット 2018-12-16 22.42.31.png

作ってみた感想

いつも自作インフラにばかりデプロイだったので、PaaS特有の問題に引っかかってしまった。

思った以上に時間を割けず、完成度がちょっと微妙な状態に……
(テストコードすらかけていない有様)
今後、勉強も兼ねてちまちまリファクタリングしていく予定

Firebaseでこまったポイントなかったな。。。Firebaseのシンプルさすごい。

最後に

YYPHPを開催してくださり、さらにリモートでも参加できるようにしてくださってる株式会社クラフトマンソフトウェアの皆様。
本当にありがとうございます! これからもよろしくお願いいたします!

10
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?