サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
衆院選
qiita.com/mpyw
詳細 環境構築・方針決定 joe が CloudFormation を立ち上げてサーバーにアクセス、mpyw がコードをローカルにコピーしてリポジトリを作成、私がマニュアルを読んでサービスにアクセスできる状態にしました。一通りの環境再現が終わると joe は初回計測と New Relic の導入および Makefile の作成、mpyw はコードの流し読み、私はスコア計算方式を読解とそれぞれの作業に取りかかりました。 スコア計算方式や New Relic の計測結果、開会式でのヒントを元にランキング API の改修から取り掛かる方針で合意し開発を開始しました。 と,あっさり書いてあるんですが,実は初っ端からトラブルが発生していました。 結局最後までレギュレーション違反のセキュリティグループ変更をやらないと SSH で入れなかった理由は不明のままなんですが,次回からは「さすがにこれおかしくな
背景 Laravel には, 「コミットメッセージ書くのめんどくせぇ!全部 wip でいいわ」 という信仰に従って(?),メインブランチにも堂々と wip とだけ書かれたコミットがプッシュされています。これを揶揄するかのようにファングッズまで作られる状態です。下記に関しては Taylor 氏公認の模様。お行儀よくコミットメッセージを書いている古くからのオープンソースプロジェクト参加者が発狂しそうな実態ですね ところで,フォロワーの過去の呟きを今更ながら掘り返してしまいました。せっかくなので,いったいどれだけの wip が存在するのか,統計をとって調べてみました。 調査1: laravel/framework コミット数統計 最終コミットはこの状態です。 commit 76b407eafb16dfd4a553f3c437fbbc6d8268e3a1 (HEAD -> 9.x, origin/
WHERE 条件のフィールドを UPDATE するのって,明示的にロックしてなくても安全?全パターン調べてみました!MySQLSQLPostgreSQLDatabaseQiitaEngineerFesta2022 TL; DR MySQL/Postgres とも, MVCC アーキテクチャの恩恵で, SELECT と UPDATE は基本的には競合しない。 単一レコードのシンプルな UPDATE でも排他ロックされ,排他ロック中のレコードへの UPDATE での変更操作は トランザクション分離レベルによらず ブロックされる。UPDATE 文に含まれる WHERE 句での検索もブロックされ,これはブロックされない SELECT による検索とは別扱いになる。 但し UPDATE 文の WHERE 句上で,更新対象をサブクエリの SELECT から自己参照している場合は例外。トランザクション分離
下記で使われている ... に関して 🔰 シンタックスは,そもそも有効でしょうか? 🔰 有効である場合,どういう役目を持っているでしょうか? 🎓 有効である場合,どの PHP バージョン以降で有効でしょうか?
元ネタ @localdisk さんの記事です。 こちらで概ね適切に説明されているものの,文章のみで図が無くて直感的に把握しづらいので,初心者にもすぐ飲み込ませられるように図に描き起こしてみました。 図 解説 illuminate/auth: 最小限の認証認可コアロジック コアコンポーネント群の laravel/framework に含まれているものです。 Socialite 以外のすべてのパッケージが,実質このコアに依存していることになります。 以下の記事でこのパッケージの詳細について説明しているので,ここでは端折って説明します。 伝統的 Cookie ベースのセッション認証 こちらでも解説している, 「Cookie に識別子を載せ,それに対応する情報はサーバ側のファイルに記録する」 という手法に近いものです。 実装は illuminate/session にあり, PHP ネイティブのセ
半分ネタ記事です。あんまり真面目に書きません。 項目数が多いので,気力でなんとか書きます。分類は諦めます。 他にもある!っていうのがあったらコメント欄で教えて下さい。気が向いたら追記します。 公式の TypeScript 型定義がもはや型定義を諦めている 辛い度: ★★★★★ 辛い中でもこれはかなり上位に来るやつ。 こちらに OpenAPI 形式で仕様が定義されていて, https://github.com/slackapi/node-slack-sdk/tree/main/packages/web-api/types ここに仕様に基づいて TypeScript の型定義ファイルが吐かれるようになっています。 Git 管理されていないので,実際のリリースを見てみましょう。 https://unpkg.com/@slack/web-api@6.7.2/dist/response/Reacti
はじめに 多段 SSH の設定方法はググればたくさんでてきますが,「踏み台に秘密鍵を持つ」パターンの情報が少なくて躓いたので,今後のためにメモしておきます。 Special Thanks: @chitoku ローカルに持つ場合 通常はこちらの方法が望ましいです。
【Laravel】 Eloquent の has() や whereHas() が遅い?なら速くしてやるぜPHPMySQLSQLLaravelEloquent はじめに 2021/10/21 追記: Postgres は MySQL と異なり,相関サブクエリの JOIN 最適化もカバーしています。それゆえ,主にこの記事の内容は MySQL を想定したものとなっております。 (情報提供: @KentarouTakeda) 2022/12/22 追記: MySQL もバージョン 8.0.16 以降では Postgres に似た最適化が入るようになりました。そのため,殆どの場合ではもはや has() whereHas() を素直に使うだけで十分になっています: 【ガチ検証】Eloquent whereHas() はもう遅くないよ! Laravel は「リレーション先が存在するか」という制約条件を
【Laravel】 Cron タスクスケジューラの onOneServer() と withoutOverlapping() の違いPHPcronLaravel はじめに Laravel には Cron を利用したタスクスケジューリング機能があります。 Task Scheduling - Laravel - The PHP Framework For Web Artisans タスクスケジュール 8.x Laravel ところが素でこれをそのまま使うと,ワーカーとして複数インスタンスを立ててスケーリングしている場合などに,重複実行されてしまう問題があります。これを防ぐためには基本は onOneServer() を使っておけばいいのですが,なにやら withoutOverlapping() というものも存在することを知りました。微妙に用途が異なるみたいなので,ここで整理しておこうと思います。
また, grep1 には以下のようなオプションがあります。 -v, --invert-match マッチの意味を逆にして、マッチしない行を抜き出して表示します。 -l, --files-with-matches 通常の出力はしません。その代わりに、 grep を普通に実行した際に、何らかの検索結果を表示するような入力ファイルの名前を列挙します (訳注: すなわち、-l オプションを指定すると、 -v オプションを同時に指定しない場合は、パターンにマッチする文字列を含む行が存在するファイルの名前を列挙するということです)。 個々のファイルに対する走査は、最初のマッチで終了します。 -r, --recursive 各ディレクトリの下にあるすべてのファイルを再帰的に読み込みます。 ただし、シンボリックリンクはコマンドラインで指定されたときにのみたどります。 検索対象のファイルが指定されなかった場
元ネタ utf8 な MySQL データベースを保守する湯婆婆「𠮷田?贅沢な名だね。今からお前の名前は吉田。いいかい、吉田。分かったら返事をするんだ、吉田!」 — 𝑺𝒐𝒄𝒊𝒂𝒍 𝑫𝒊𝒔𝒕𝒂𝒏𝒄𝒆 (@mpyw) April 30, 2020 utf8 から utf8mb4 に早く乗り換えたいけどいろいろとレガシーアプリケーションには事情があるんじゃ!!! 実装 𠮷田さんが会員登録しようとすると 400 Bad Request を返します。エラーメッセージはできるだけ親切にしています。共通モジュール的な場所に置いたので, Translator はインジェクトしてるけど文章自体は直接埋め込んでます。 <?php namespace Libraries\Foundation\Http\Middleware; use Illuminate\Contracts\Tra
これは何 Laravel 用 php-fpm イメージの Dockerfile。 (多少はフォーマット変わろうとも)色んなところでずっと使いまわししそうなのでメモ。 完全に個人の秘伝のタレ化するよりは情報公開したほうが自社にとっても利益があるだろうと判断(笑) 異論は無限に受け付けるので改善点などあればコメントください。 FROM golang:1.15 as http2fcgi_build # http2fcgi のビルド RUN GO111MODULE=on go get -v -ldflags '-w -s' github.com/alash3al/http2fcgi@v1.0.0 FROM php:7.4-fpm-alpine as php_runtime # Goバイナリが実行できるようにする # https://stackoverflow.com/questions/34729
背景 jwilder/dockerize: Utility to simplify running applications in docker containers ufoscout/docker-compose-wait: A simple script to wait for other docker images to be started while using docker-compose この辺は全部試したが, PHP から接続しようとすると Connection Refused が多発する。TCP で接続可能になってから実際に利用可能になるまで若干のラグがあるため,もっと確実な方法を探していた。 対処法 sh -c 'docker-compose logs -f <MySQLコンテナ名> | { sed "/\[Entrypoint\]: MySQL init proces
はじめに Vue コンポーネントには inheritAttrs というディレクティブがあります。 API — Vue.js #inheritAttrs 直訳すると 「属性を引き継ぐ」。 まず簡単な例を示します。Vuetify.js の v-btn をラップしたボタンを作ってみましょう。 クリックすると消滅する DismissibleButton を作ります。 消滅するまでの時間をミリ秒で timeout で指定できるようにします。 <template> <v-btn v-if="visible" @click="hide"> <slot /> </v-btn> </template> <script> export default { props: { timeout: { type: Number, default: 0, }, }, data() { return { visible:
✎ 基礎知識編 CSRF とは何か? CSRF (Cross-Site Request Forgeries) を意訳すると 「サイトを跨ぐ偽造リクエスト送信」 です。 簡単に言うと,罠サイトを踏んだ結果,自分が無関係な別のサイト上で勝手にアクションをさせられる攻撃です。具体的には,ネットサーフィンをしているうちに知らない間に自分のIPアドレスから掲示板に犯罪予告が書かれていた,といった被害を受けます。 この攻撃を防ぐ責任は「無関係な別のサイト(具体例では掲示板)」側にあります。Web サイト作成者には,利用者が意図しない操作を勝手に実行されないように,利用者を守る責任があります。 また上図からも分かる通り,この攻撃の最大の特徴はアカウントがハッキングされたというわけではないということです。ログイン状態の利用者のWebブラウザを利用して攻撃が行われている,というのが重要です。 オリジンとは何
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?
はじめに まずはマニュアルの一読を。 通知 5.7 Laravel 基本的に Laravel のコンポーネントは完成度が高く,あまり自分で拡張する必要は無いが,「通知」に限っては機能拡張しないと実用性に乏しい面が多い。そのため,拡張すべきところとその実装例も一部示していくことにする。 なお通知機能は Laravel の他の基礎機能の上に構築されているため,それらに対する理解も必要だ。以下に関連する記事を示しておく。 【Laravel】サービスコンテナ・サービスプロバイダ・ファサード・契約に関する補足資料 - Qiita 【Laravel】 キュー・イベント・ブロードキャストに関する補足とフロントエンドへの導入 - Qiita 通知のアーキテクチャ 全体の概要図を示す。通知の送信手段としては メール送信 ブロードキャスト送信 データベースレコード作成 などがあるが,ここでは例としてデータベー
アプリケーション例外は Laravel フレームワークで定義されているもので,HTTPに直接関係ない抽象的な部分ではまずこれをスローすべき。 HTTP 例外は Symfony フレームワークで定義されているもので,Handler::render() でアプリケーション例外から変換して生成するのが一般的。 401 Unauthenticated のほうがどう考えても正しいが,そうなってないのには歴史的な理由があるのだろうか…? 認証のアーキテクチャ Auth ファサードあるいはコンテナから "auth" のエイリアス名でアクセスできる,認証サービスのルートオブジェクトが AuthManager である。ここが認証サービスの中核となる。 Guard が認証手段ごとの実装として存在し,ロジックの多くはここに集約される。 このクラスは Guard 契約 を実装しなければならない。 ユーザを取得して
というコマンドを実行したとする。(Supervisor などでデーモナイズすることを想定) WorkCommand の実行 WorkCommand::handle() → WorkCommand::runWorker() という流れでワーカーのループ準備に入る。 --once オプションを渡していないので,Worker::daemon() メソッドが呼ばれることになる。(ここから無限ループ処理に入る) 以下に示す daemon() メソッドがループの中核となる。ここからこの処理を1つずつ追っていく。 /** * Listen to the given queue in a loop. * * @param string $connectionName * @param string $queue * @param \Illuminate\Queue\WorkerOptions $optio
<!DOCTYPE html> <meta charset="UTF-8"> <title>Flexbox overflow-wrap Test</title> <style> /* 体裁用 */ * { margin: 0; padding: 0; box-sizing: border-box; font-family: monospace; } html, body, main { height: 100%; } main { width: 640px; background: ivory; margin: 0 auto; } article { border: 4px solid blue; margin: 20px auto; background: pink; } p { border: 4px solid red; height: 4em; } /* 横方向 Flex */ .
問題 Laravel におけるデータベース操作でクエリエラーが発生したとき, PDOException はキャッチされて QueryException に変換される。これは生成時に 元のプレースホルダ ? 入りのSQL文 バインドパラメータの配列 を受け取り,メッセージに ? を実際の値に置換したSQLをセットしてくれる機能を持っている。しかし,整数値以外は正常に表示されない。クオート処理が行われていないためである。 \DB::statement('INSERT INTO invalid_grammar(?, ?, ?)', [1, null, 'xxx']); Illuminate/Database/QueryException with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have a
GitHubのREADMEの画像,とくにビルドステータス・カバレッジ・コードクオリティ関連のものが長期間キャッシュされてしまって困ったことは無いでしょうか? RFCで標準化されていないようですが,PURGEというHTTPメソッドでリクエストを送るとそれを破棄させることができるようです。 mpyw@localhost:~$ curl -X PURGE https://camo.githubusercontent.com/f3bff8cae56a5e157f25ed6bf0a76aa610832897/68747470733a2f2f7472617669732d63692e6f72672f6d7079772f657863657065722e7376673f6272616e63683d6d6173746572 {"status": "ok", "id": "397-1491501868-7073
構成 第1回 Eloquent ソースコードリーディング - モデルの取得 第2回 Eloquent ソースコードリーディング - リレーションの取得 (この記事) 予備知識 すべてのリレーションクラスが実装しているメソッド まず抽象クラス Relation がどのようなメソッドの実装を要求しているのか見てみよう。 なお,リレーションを自作する際は Relation クラス,あるいはそれを継承して作られたクラスを必ず継承することになる。 /** * Set the base constraints on the relation query. * * @return void */ abstract public function addConstraints(); /** * Set the constraints for an eager load of the relation. *
2019-12-31 追記: ライブラリ化しました!インストール&サービスプロバイダに1個登録するだけで簡単に使えるようになっています! mpyw/laravel-cached-database-stickiness: Guarantee database stickiness over the same user's consecutive requests 概要 MySQL や Aurora などで,マスタスレーブ構成にして SELECT はスレーブに対して実行 INSERT UPDATE DELETE はマスタに対して実行 という設定にすることはよくある。 Laravel はフレームワークレベルでこの設定をサポートしており,自動的に振り分けを行なってくれる。さらに設定で sticky オプションを有効化している場合, 自分が INSERT UPDATE DELETE を実行した同一H
この記事は Laravel/Vue.js勉強会#3 - connpass のLTネタです。 1〜3だけ新ネタ マイグレーションファイルを整理整頓して書きたい Dockerコンテナ上でのテストのマイグレーションが遅すぎてつらい カウンターキャッシュを出来る限り正確にしたい ずれない・速いページネーションが欲しい ルートモデルバインディングでメソッドを共有したい ユニークキー制約と論理削除を両立させたい お前誰 Qiitaマン 知恵袋マン 新卒で入ったITベンチャーが**2ヶ月**で🔥買収🔥されて無くなった 今ここの26階で働いてます👆🏢 KotlinやRustに憧れつつもやっぱり💕PHP💕と🌟JavaScript🌟が好き 最近ツイートの9割が暗号通貨 ₿ 💰 Bitcoin Cash is Bitcoin (失笑) 今業務でやっている開発 フロントエンド React + R
次のページ
このページを最初にブックマークしてみませんか?
『@mpywのマイページ - Qiita』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く