もがき系プログラマの日常

もがき系エンジニアの勉強したこと、日常のこと、気になっている技術、備忘録などを紹介するブログです。

Laravelのログファイルのパーミッションを変更

はじめに

こんばんは。今回も簡単なものですが、微妙にハマったので備忘録です。

Laravelのログファイルが作られる際に、Batchでのログファイル作成とWebアクセスでのログファイル作成で作成者が違って、ログに書き込めないエラーというのが発生していました。

原因は簡単でログファイルを作る際のパーミッション644 だからです。

コレを解決するのは以下を行います。

バージョン

$ php artisan -V
Laravel Framework 6.4.1

本題

config/logging.php

        'daily' => [
            'driver' => 'daily',
            'path' => storage_path('logs/laravel.log'),
            'level' => 'debug',
            'days' => 14,
            'permission' => 0664,    ← ここを追加
        ],

permission0664 に指定することで、新規ログファイルのパーミッション664 になります。

該当ソースはこちら

LaravelというよりMonologの指定ですね。

おまけ

短くなったので、ついでに、別の新しいログファイルにログを吐かせたいという場合の設定方法を書いておきます。

config/logging.php

        // 新たにログ設定を追加(levelとかpathとかは適当に)
        'sample' => [
            'driver' => 'single',
            'path' => storage_path('logs/sample.log'),
            'level' => 'info',
            'permission' => 0664,
        ]

使用方法

// Logファサードを使用する場合
Log::channel('sample')->info('==== Sample Log ====', ['loginId' => Auth::id()]);

終わりに

簡単ですが終わりです。 結構嵌りそうなもんですが、なぜデフォルトで 664 じゃないのでしょうね。

現場からは以上です。

phpunitでメモリエラーの対応

はじめに

こんばんは。

毎回忘れてエラーしちゃってたので、自戒を込めて備忘録残しておきます。。。

本題

現在のプロジェクトでテストが多くなってphpunitが落ちるようになりました。

f:id:kojirooooocks:20200209034210p:plain

この解決策としては、 memory_limitを増やすか、実行するテストを絞るかだと思ってます。

(そもそもテストを見直すということもありますが...)

memory_limitを増やす場合

./vendor/bin/phpunit -d memory_limit=256M

f:id:kojirooooocks:20200209034351p:plain

テストを絞る場合

./vendor/bin/phpunit --testsuite=Feature

f:id:kojirooooocks:20200209034528p:plain

今回composerのscriptに登録しました。採用したのはmemory_limitを増やす方法です。

f:id:kojirooooocks:20200209034639p:plain

f:id:kojirooooocks:20200209034731p:plain

終わりに

毎回実行時にmemoryエラーをだしちゃってたので、さっさと登録しろという話でした...

簡単ですが、以上です。

laravel で HTTP キャッシュ

はじめに

こんばんは。

今回も備忘録です。

今回は、LaravelでAPIのHTTPキャッシュを試してみました。

Laravel標準で搭載されている SetCacheHeaders というミドルウェアで実現できるみたいです。

参考サイト

本題

Controller

<?php

namespace App\Http\Controllers;

use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\Log;

class ExampleController extends Controller
{
    public function index(): JsonResponse
    {
        Log::info('index action!');
        return new JsonResponse('example api time => ' . time());
    }
}

API Route

<?php

use Illuminate\Support\Facades\Route;
Route::get('example', 'ExampleController@index');

Image from Gyazo

この状態で SetCacheHeaders を使ってみます。

API Route

<?php 

Route::get('example', 'ExampleController@index')->middleware('cache.headers:public;max_age=10');

Image from Gyazo

max_ageを10秒にしているので、10秒間はlaravel側までアクセスが来ないようになりました。

終わりに

SetCacheHeadersのおかげでかなり簡単に設定できました。

現場からは以上です。

CleanArchitecture輪読会始まりました

はじめに

こんばんは。

今週ついに新たなオンライン輪読会が始まりました。

今回の題材は「CleanArchitecture」です。

Clean Architecture 達人に学ぶソフトウェアの構造と設計

Clean Architecture 達人に学ぶソフトウェアの構造と設計

初回担当は僕で、担当箇所は1, 2, 3章でした。

内容

まだまだ概要部分なので特筆するところは少なかったのですが、個人的に刺さったのは 簡単に変更できてこそのソフトウェア というところです。

当たり前なんだけど、文章で読んで、たしかにそのとおりだなと思いました。

また、 何をすべきかではなく何をすべきでないか というところは、別の本で同じ様な事書いてたなと思い、ふむ。思いました。

終わりに

まだ第一回でメンバーも探り探り進めてますが、毎週欠かさずやることを目標に読破したいと思います。

また、自分は個人で同時に 実践ドメイン駆動設計 も読み進めてるので、混乱しないように、かつ、それぞれの本の伝えたい点を把握しつつ、ゆっくり着実にいきたいなとおもいます!

では。また来週。

mysql8のwindow関数(ROW_NUMBER)

はじめに

こんばんは。

簡単な備忘録ですが、 初めて使用してみたので、ブログに残しておきます。

mysql8のwindow関数のROW_NUMBERを試してみました。

今まで使ってなかったのか。。。という話ですが。

本題

テストテーブル作成

CREATE TABLE `test_users` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `email` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'メールアドレス',
  `name` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'パスワード',
  PRIMARY KEY (`id`)
);


CREATE TABLE `test_orders` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `user_id` bigint(20) unsigned NOT NULL COMMENT 'ユーザーID',
  `fee` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '料金',
  PRIMARY KEY (`id`)
);

テストデータ作成

select * from test_users;
+----+-------------------+--------+
| id | email             | name   |
+----+-------------------+--------+
|  1 | test_01@gmail.com | test01 |
|  2 | test_02@gmail.com | test02 |
|  3 | test_03@gmail.com | test03 |
|  4 | test_04@gmail.com | test04 |
|  5 | test_05@gmail.com | test05 |
+----+-------------------+--------+



select * from test_orders;
+----+---------+-------+
| id | user_id | fee   |
+----+---------+-------+
|  1 |       1 |  2000 |
|  2 |       1 |   500 |
|  3 |       1 |  4000 |
|  4 |       1 |  1000 |
|  5 |       1 |  1000 |
|  6 |       2 |   800 |
|  7 |       1 |  1000 |
|  8 |       4 |   200 |
|  9 |       2 | 10000 |
| 10 |       1 |  3000 |
| 11 |       1 |  2000 |
| 12 |       3 |  4000 |
| 13 |       2 |  1090 |
| 14 |       5 |   200 |
+----+---------+-------+

使用例

例えば、各ユーザーがそれぞれ何回注文したかみたいなのをとれたりします。

SELECT u.id, u.email, ROW_NUMBER() OVER (PARTITION BY u.id) AS 'row_count' FROM test_orders AS o JOIN test_users AS u ON (o.user_id = u.id);
+----+-------------------+-----------+
| id | email             | row_count |
+----+-------------------+-----------+
|  1 | test_01@gmail.com |         1 |
|  1 | test_01@gmail.com |         2 |
|  1 | test_01@gmail.com |         3 |
|  1 | test_01@gmail.com |         4 |
|  1 | test_01@gmail.com |         5 |
|  1 | test_01@gmail.com |         6 |
|  1 | test_01@gmail.com |         7 |
|  1 | test_01@gmail.com |         8 |
|  2 | test_02@gmail.com |         1 |
|  2 | test_02@gmail.com |         2 |
|  2 | test_02@gmail.com |         3 |
|  3 | test_03@gmail.com |         1 |
|  4 | test_04@gmail.com |         1 |
|  5 | test_05@gmail.com |         1 |
+----+-------------------+-----------+

終わりに

自分が使用したことがあるものだけなので、簡単ですがこれだけです...w ROW_NUMBER以外にも使用するときが出てくると思うので、その時にまたブログに残そうと思います。

雑な2020年の目標

はじめに

こんばんは。

子供が年末から体調不良で、実家から帰れない状況の僕です。

この空いている時間に、雑に2020年の目標を考えてみました。

前回の記事のTryとかぶっているのですが、こちらはよりまとめたものです。

f:id:kojirooooocks:20200104034506p:plain

本題

ソフトウェア設計に関しての知識を蓄える

現在、師匠と一緒にお仕事させてもらっているのですが、去年は自分の知識不足で足を引っ張っているところがありました...

自分が足りない部分は山程ありますが、直近で足りてないのはソフトウェア設計の知識・ノウハウだと思っています。

このあたりを読書などで蓄えて、設計周りのブログなどを書いてみたいと思います。

3回以上登壇する

去年簡単なLTを2回経験したので、去年以上の回数である3回を目指したいです。

3回のうち、1回以上は技術系ネタでLTなどしようと思います。

6件以上のOSSへPR

去年は簡単なものを3件ほどPRをマージしてもらいました。

今年も簡単なものから積極的に動いて、倍の6件以上のPRをだして、マージしてもらうまでを目標にしたいです。

週一のブログを落とさない

WBEWでは、最悪週2までブログ記事数を貯められるのですが、その制度に去年は何回か助けられた事がありました。

今年はWBEWの名の通り、週一必ずブログを書くようにしたいと思います。

1人アドベントカレンダーの完走

今年は11日分で終わってしまいました...

今回の失敗は、準備と下調べが足りなかったことが原因です。

今年は3度目の正直ということで、必ず完走したいと思います。

オンライン輪読会を2冊分やりたい

やりたいやりたいと言っていたのですが、早速今月からCleanArchitectureのオンライン輪読会を行うことが決定しました。

計算ではおそらく3〜4ヶ月で読み切れるはずなので、今年もう一冊出来ればやりたいと思っています。

一つの言語に偏らないような本で、これ読んでおいたお方がいい!みたいなのあれば是非教えてほしいです。

プランク120秒やる(できれば毎日)

去年頑張ったのですが、ダイエットだけはなぜか続きませんでした。

今年こそはと重い腰をあげようと思います。

継続力をつけるために、理想としては例外なく毎日とにかくやりきりたいです。

自分Release Noteをつけるようにする

前々から付けたかった、自分リリースノートをつけ始めようと思います。

ちょうど1月が自分の誕生日なので、0.36.0 からはじまるかな?

終わりに

バーっと雑に書いたので誤字などあるかもです。

まだまだ増えていくかもしれませんが、こんな感じです。

今年もよろしくおねがいします!!

ChallengeEveryMonthを立ち上げて

はじめに

こんにちは。

この記事は challenge-every-month Advent Calendar 2019の25日目の記事です。

無駄に最終日をとってしまって後悔しています。

ChallengeEveryMonthは @yoshitaku_jpさんと、WBEWよりゆるく、でも目標立てて新しいことをやっていきたいね。みたいな会話から立ち上ることになりました。

立ち上げて何ヶ月経ったんだっけ? 今年の2月だったは覚えているので10ヶ月くらいたってます。

正確な日わかれば、よしたくさん教えてください。。。

最初の方は人数も少なかったのですが、よしたくさんの勧誘で12月現在、18人になっています。

f:id:kojirooooocks:20191226000349p:plain

本題

今回の記事では、自分の1年の振り返りをしてみたいと思います。

振り返り

よかったところ(Keep)

1. AdventCalendarを行えた

この記事もAdventCalenderの記事になります。

また、GWのAdventCalendarもやれました。

こういうイベント系は基本的に共同運営者のよしたくさんがどんどんアイディアを持ってきてくれたり、メンバーの方からのアイディアがあったりと、ありがたいです。自分は何もしてないのが申し訳ない...

2. オンライン輪読会が楽しかった

WBEWの振り返りブログでも書いたのですが、オンライン輪読会がとても勉強になりました。

反省すべきところ(Problem)

1. チャレンジの失敗が続いた

自分の目標の立て方に問題があるんですが、チャレンジの失敗が続いてました。

WBEWのように強制退会的なペナルティもないので、チャレンジ達成は自分次第なので、もう少し目標をうまく立てるべきでした。。。

今後やってみたいこと(Try)

1. PHP以外の言語の習得

前々から言ってるけど、そろそろ本当に習得したいので、来年こそはとがんばります。

いま頭にあるのは、 前から少しだけやってたgolang, swiftあたりです。

最終目標は案件として取れるようになれるくらいの練度になることです。

2. OSSへの貢献

今年はちょくちょく、貢献できましたが、来年度からは目標を定めて、何件以上という感じで動いていこうと思います。

3. ライブラリの開発・保守

現在何個かネタは思いつているので、来年は積極的にライブラリ開発をして行きたいです。

また、以前作った laravel-json-schema-veridatorの保守とかもやらないとなと思ってます...

4. LTなどの登壇

今年は合計2回だけで、かつ非技術系なLTだったので、来年は回数も3回以上で、かつ、技術系のLTも1件はやりたいなとおもいます。

5. オンライン輪読会再び

今年やってすごく良かったのが、オンライン輪読会です。

自分ひとりだと読むの辛いなぁと思うような本をみんなで読むという試みはまじで良かったです。

来年も一冊やってみたいです。

現在人員を募集してて、合計3人になればやってみたいです!

6. 1人アドベントカレンダーの完走

今年も1人アドベントカレンダーを行ったのですが、12月の仕事の忙しさのせいで、今年も途中リタイアという結果になりました...

一昨年の失敗を踏まえて、準備期間を設けていたのですが、まだ準備期間が足りなかったみたいです。

3度目の正直で、来年こそは完走したいと思います。

終わりに

こんな感じで、やってみたいことがいっぱいになりました。

来年もどんどんいろんなことにチャレンジしていきたいと思います。

プログラマー35歳定年説の、まさに35歳になりましたが、気持ち的にはまだバリバリ25歳くらいなんで、これからも新しいことにどんどんチャレンジしていきます!

こんな感じの締まらないラストですが、ChallengeEveryMonthは、一緒に頑張る仲間を随時募集しています!

現在参加している方々はエンジニア畑の方ばかりですが、チャレンジしたいという精神にエンジニアであることは関係ありません。

どんな職業の方でもOKです。

来年から新しいことに挑戦してみたい!

諦めてたことを来年こそはやりたい!

そんな野望がある方、TwitterのDMいただければ何時でも招待させていただきます!

来年もみんなで頑張るぞ!