Lumen」タグアーカイブ

【Lumen】LINEの Messaging API を使って再度Botを作ったお話

投稿日:

すっごい前にこんなメールがLINEからきました。

いつもLINEをご利用いただきありがとうございます。
このメールは、LINE BOT API Trial Accountをご利用いただいている皆様へお送りしています。

〜 中略 〜

つきましては、旧API トライアルアカウント「BOT API Trial Account」をお使いの皆さまには、
新しいトライアルアカウント「Developer Trial」のご利用をお願い致します。
「Developer Trial」アカウントはLINE Business Centerからお申込みいただけます。
LINE Business Center : https://business.line.me/

〜 中略 〜

なお、ただ今ご提供させていただいている「BOT API Trial Account」につきましては、
11月16日にアカウントの完全削除を予定しております。

〜 中略 〜

ムムム、こ、これは僕のcoutry-botが削除されてしまう。
あの、僕と妻の2人しか友達のいないcoutry-botがぁっ!! … 今すぐ救済せねばぁぁ!!

と、思ったのは去年の話で既にcoutry-botは動かなくなっていました。
それでもいいかなぁなんて思っていたのですが、ちょっと腰を上げれば動かせる事が出来るのに、それをやらないのもアレじゃないですか。

というわけで、せっかく作ったbotなので新しく作り直してみることにしました。
※ ちなみに前作ったのは これ です

そして、前回と同じじゃつまらないということで以下を使って書きました。

続きを読んでみようかな…

Lumenでログを出力する(その2)

投稿日:

現在、個人的にちょっとしたAPIをLumenで実装しています。

Lumenオシャンティ!! って感じで意気揚々とやっていたのですが、ログ周りに関して 前回 のやり方だと困った場面に遭遇しました。

そこで今回は、何に困ったのか、最終的にどうしたのかを綴ってみたいと思います。

※ Lumenのバージョンは前回と一緒です

何をしたかったのか

まず、前回何をしたかったのかというと

すべてのログを好きなHandler(Monolog)でコントロールしたかった

というものがありました。
※ 最初、ログの出し方すらつまずきましたが

そこで以下の方法を前回はとったわけです。
(前回は例として、NativeMailerHandler も使いましたが今回は省略します)

app/bootstrap.php を修正

<?php

require_once __DIR__.'/../vendor/autoload.php';

use Monolog\Logger;
use Monolog\Handler\RotatingFileHandler;
use Monolog\Formatter\LineFormatter;

try {
    (new Dotenv\Dotenv(__DIR__.'/../'))->load();
} catch (Dotenv\Exception\InvalidPathException $e) {
    //
}

// ~ 略 ~

$app = new Laravel\Lumen\Application(
    realpath(__DIR__.'/../')
);

// $app->withFacades();

// $app->withEloquent();

/*
|--------------------------------------------------------------------------
| Register Container Bindings
|--------------------------------------------------------------------------
|
| Now we will register a few bindings in the service container. We will
| register the exception handler and the console kernel. You may add
| your own bindings here if you like or you can make another file.
|
*/

$app->singleton(
    Illuminate\Contracts\Debug\ExceptionHandler::class,
    App\Exceptions\Handler::class
);

$app->singleton(
    Illuminate\Contracts\Console\Kernel::class,
    App\Console\Kernel::class
);

// これ
$app->singleton('log', function() {
    $handlers[] = (
        new RotatingFileHandler(
            storage_path('logs/app.log') // ログファイル名を変える
        )
    )->setFormatter(new LineFormatter(null, null, true, true));

    // ログのchannel名 を app にする
    return new Logger('app', $handlers);
});

// ~ 略 ~

return $app;

で、使う側はこんな感じにします。

$logger = app('log');
$logger->info('Hello Lumen!!');

こうすることによって任意の場所、好きなHandlerでログ(storage/logs/app-{Y-m-d}.log)を出すことが出来ました。

困ったこと

で、何に困ったかというと例外が発生した際です。
例外が発生した際にログを確認すると、見事にデフォルトの storage/logs/lumen.log が出力されているではあーりませんか。
storage/logs/app-{Y-m-d}.log にも書き出されていない

え、うそでしょ?マジで?誰がこのログ吐いているの?と、普通のエンジニアならそうなるわけで、えぇ、ソースを追ってみました。
※ 最初に追っとけよ
続きを読んでみようかな…

Lumenでログを出力する

投稿日:

LumenでちょっとAPIを書いてみようと思い、とりあえずログにでも吐き出すかなぁとLog::info('Hello Lumen!!');と書いてみたら見事に怒られました。
まぁいちおう対応をしたわけですが、その際にLumenでログを吐き出すまでに行ったことをメモとして残しておきます。
(ちょっと素人の匂いが漂う内容かもしれません。。)

bootstrap/app.php$app->withFacades();を有効にするパターンと、コメントアウトのままログを吐き出すパターンを書いてみます。※Monologを直接使うパターンも

なお、Lumenのバージョンは

Lumen (5.3.2) (Laravel Components 5.3.*)

です。
続きを読んでみようかな…

LumenでHelloWorld

投稿日:

夜中(3:00くらい)にスコーン、スコーンと定期的にテニスでラリーをしている様な音が聞こえてきて、こんな夜中にテニスの練習なんかするんじゃねぇーよとベランダから周りを見ても誰もいないし、外ではスコーンの音は聞こえないし、え?何だったのと思って寝床に戻るとまた聞こえてきて冷静に確認したら妻の鼻息でした。

というわけで、今回はローカルのMacでLaravelのLumenを使ってHelloWorldまでやってみたのでメモっておきます。
なんで今さらと思うかもしれませんが、簡単なAPIを趣味で作る機会があり、せっかくなので前から興味のあったLumenを使ってみようと思い立った次第であります。

といっても、ググれば laravel製軽量フレームワーク Lumen を試してみる – Qiita など、いくらでも分かりやすい記事がすぐ見つかると思います。
これらを参考にすれば大体おkなのですが、実際に試してみると微妙にハマった部分(バージョン違いによるもの)もあったので、一応自分で行った手順を書いていきます。
続きを読んでみようかな…