サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
夏の料理
tech.quartetcom.co.jp
Symfony Advent Calendar 2020 15日目の記事です! N+1問題とは DBからEntityのコレクションを取得する時、都度都度クエリを発行してしまう構造になっていて、意図せずクエリ数が膨大になってしまいパフォーマンスが悪くなる現象を指します。 どのような状況で起こるでしょうか?実際にN+1問題が起こるコードを書いてみます。 クラス構成 N+1問題が起きやすい例として、「1対多のリレーションの先に、更に1対多のリレーションがある」という構造を作ってみます。(個人的にこの構造を指して「親-子-孫3代の形」と例えたりしてます) 今回は以下のようなクラスで作ってみました。 「チーム」に対して1対多で「メンバー」が所属し、また「メンバー」はそれぞれ1対多で「投稿(Post)」を持っている、と仮定します。 Entityのコード例 <?php namespace App\Ent
こんにちは、開発部の澤井です。 前回は1つのサーバに複数のコンテナを配置して、ブリッジネットワークにおけるコンテナ間通信についてまとめました。 ブリッジネットワークは、同一ブリッジネットワークに配置したコンテナ同士でのみ通信できます。 一般に複数のサーバに配置したコンテナ間で通信する環境をマルチホストと呼びます。 また複数コンテナを管理するツールをコンテナオーケストレーションツールと呼びます。 代表的なコンテナオーケストレーションツールに以下があります。 Amazon ECS Kubernetes Docker Swarm 今回は簡単なマルチホストのサンプルをDocker Swarmで動かしたいと思います。 Docker Swarmでマルチホストを実現する技術 Docker Swarm Docker Swarmは、Docker社が提供するオーケストレーションツールで複数のホストを集約して管
はじめに 弊社はおもにバックエンドのプログラム言語に PHP を使用します。 また多くのアプリがコンテナで動いています。 コンテナはコントロールプレインを Amazon ECS、データプレインは AWS Fargate を使用することが多くイメージは Docker を使用してビルドします。 本記事では Docker で PHP を使用する際に必要になることが多い PHP 拡張モジュール1をインストールする方法を簡単にまとめたいと思います。 (ベース)イメージ 本記事は Docker Hub の 2024-03-06 時点の php:latest を使用します。 はじめに上記イメージの OS、PHP バージョンおよびインストール済み拡張モジュールを確認しておきます。 OS $ docker run php:latest cat /etc/os-release PRETTY_NAME="Deb
はじめに 秋らしくなってきましたね! 今年の夏、私は試験勉強の夏になりました。 6 ~ 7 月にかけて LPIC (Linux Professional Institute certification) をいくつか受験してきました。 受験した試験は 201, 202, 303, 304 の 4 つです。無事全ての試験に合格し、 LPIC 1 ~ 3 までの全てのレベルの認定を取得することができました。 試験範囲はざっくりこんな感じでした。 LPIC-2 201 (キャパシティプランニング、ストレージ、ネットワークなど) LPIC-2 202 (DNS/Web/メール/ファイル サーバーなど) LPIC-3 303 Security (暗号化、アクセス制御、アプリケーション/ネットワークセキュリティなど) LPIC-3 304 Virtualization & High Availabili
PHPでは、変数に 0.1 を代入すると float 型と判定されます。 sprintf() で表示したところ小数部は53桁あり、それ以降を切り捨てる内容の警告が表示されました。 float 型の 0.1 は、なぜこのような値に変換されるのでしょうか? 浮動小数点がメモリに格納される仕組みを解説しながら理由を探ります。 10進数と2進数の表記(整数) 数値はメモリ上に2進数で格納されます。 2進表記の整数は 右端(一の位) から、2の0乗、2の1乗、2の2乗、2の3乗…を表します。2進数なので、格納される値は「0」または「1」の二通りです。「0」または「1」が格納される領域を「ビット」と呼びます。 10進数の 10 は2進数では 1010 です。「1」が格納されたビット(2の1乗と、2の3乗)の合計(2 + 8)が10進表記になります。 10進数と2進数の表記(小数) 2進表記の小数は 左
フロントエンドのテストって、UIがすぐ変わるから変更コストかかるよねとか、UIとロジックのどっちのテスト書けばいいのか分からんとか、面倒だと思われることが多いように感じます。ちょっとUI変更しただけであっちもこっちもテスト落ちた、うわーって私もよく思っていました。 lacolaco さんの 『DOMのテストがどんどん書きたくなるTesting Libraryの世界への招待』 で紹介されたライブラリがいい感じにテストを手助けしてくれるので、やや似た感じの内容となりますがこの記事であらためて紹介したいと思います。 当記事のサンプルコードは以下を前提としています。 @angular/core v16.2 @testing-library/angular v14.1 jasmine-core v4.6 面倒くさいテスト 私がよく書いていた「すぐに壊れる面倒くさいテスト」は以下のようなものです。 メ
2023年6月24日の「PHPカンファレンス福岡2023」にブロンズスポンサーとして参加しました! 個人的にはPHPカンファレンス東京2022に続き2回目のカンファレンス参加でしたが、技術面も考え方もとても勉強になることばかりでした! 今回はカンファレンスに参加して、印象に残ったセッションをいくつか紹介していきます。 目次 良いプロダクト作りのための組織育成 健全なコードは、 健全な組織・健全なチームから Monologの実装に学ぶInterface Symfony6.3のおすすめ機能 まとめ 良いプロダクト作りのための組織育成 健全なコードは、 健全な組織・健全なチームから Twitter:@for__3 私は個人の育成には関わっていませんが、研修期間の育成時はとても丁寧に研修をしてもらったので、こうやって色々考えてもらっていたんだなと思いながら見ていました。 長期的に成果が高い組織には
OpenAPI generatorとは OpenAPI generatorとは、OpenAPI Specificationに従ってAPIの仕様を記述することで、APIクライアントを自動生成できるツールです。 たとえば、OpenAPI Specificationのサンプルとして公開されているペットショップのAPI仕様を用いて、PHP用のAPI Clientを作ってみるコマンドは下記のようになります。 npm init npm install --dev openapi-generator-cli openapi-generator-cli generate -g php -i https://raw.githubusercontent.com/OAI/OpenAPI-Specification/main/examples/v3.0/petstore.yaml 生成されたコードはこちらです。
Angular Advent Calendar 2022 12 日目の記事です。 昨日は @masayasviel さんの ControlValueAccessorコンポーネントをmarkAllAsTouchedできるようにする でした。 カルテットコミュニケーションズで働き始めて 11 年目に突入しました、松岡です。ひとりぼっちでフロントエンドのコードを書いていた時代からチームマネージャーとして仕事をするようになった現在まで、弊社に興味を持ってくれた応募者とそれなりに多く関わる機会がありました。採用のステップを踏む中で数多くの応募者からいただいた質問「Angular を使っている理由はなんですか?」をブログ記事にしたためておこうと思います。 AngularJS から Angular へ 弊社のフロントエンドで最初に導入したフレームワークは AngularJS でした。当時は、他に実用的な
PHP Conference Japan 2022で「フラットなPHPからオブジェクト指向で自動テストのあるPHPへ、そしてフレームワークへ」を発表します 9/24(土)、PHP Conference Japan 2022 Day1にて、「フラットなPHPからオブジェクト指向で自動テストのあるPHPへ、そしてフレームワークへ」を発表します。 スライドを事前に公開します。 説明に登場したメールフォームのサンプルコードは https://github.com/77web/phpcon2022-oop-sample で公開しています。 オフライン参加しますので、たくさんの方とお話できることを楽しみにしています。 13:20〜Track3でお待ちしています ☺️
はじめに こんにちは。澤井です! Dockerを触る機会が多くなりました。 本記事はDockerのブリッジネットワークにおけるコンテナ間通信について記載しています。 具体的にイメージできるようにネットワークインターフェースを流れるパケットも観察したいと思います。 ネットワークインターフェースは、ネットワークインターフェースカード(NIC)やネットワークアダプタと呼ぶこともあります。 以降、本記事ではネットワークインターフェースを単にインターフェースと記載します。 目次 検証環境 準備 ユーザー定義ブリッジネットワークを作成 最終的なネットワーク図 ブリッジネットワークを作成 1つめのコンテナを追加 2つめのコンテナを追加 コンテナ追加後のブリッジを確認 コンテナ間の通信を確認 コンテナと外部の通信を確認 検証環境 本記事は以下の環境で確認しました。 Amazon EC2 Ubuntu 20
こんにちは、@ttskch です。 前回の記事 で、WordPress のテーマディレクトリ内に Silex アプリを構築することによって 固定ページをファイルベースで管理する というテクニックをご紹介しました。 今回はその発展編で、テンプレートに Twig を使う方法をご紹介します。 これでさらに WordPress サイトの管理が捗りますね。 はじめに 前回の記事 を読んで、S... 続きを読む
一年ぶりにブログ書きます岩原です。 今回は、割とややこしいSymfonyの環境変数周りについてまとめてみました。 対象読者 Symfonyのことをある程度理解している Symfonyにおける環境変数ファイルの優先度を知りたい。 結論 新規のSymfonyプロジェクト作成した際に生成される.envファイルに全て書いてあります。 要約すると、優先度は .env < .env.local < .env.$APP_ENV < .env.$APP_ENV.local < マシンに設定されている環境変数 となるようです。 では、本当にそうなのか検証してみたいと思います。 検証 検証は、環境変数をダンプするコマンドを作成し、実際に環境変数をダンプすることで行います。 以下のコマンドでも環境変数のダンプは可能ですが、service.yamlなどで参照している環境変数をダンプするので、新しいコマンド作っても
はじめに こんにちは。フロントエンドの開発を担当しています、松岡です。 コードレビューをしている時 x === undefined で比較してガードするケースをよく見かけます。 function something(x) { if (x === undefined) { return; } // 何らかの処理 // ... } x が null だった場合に意図しない結果を生み出すためこのような比較はしないで欲しいですとコメントすると、たいてい「どうして?この関数に null が渡される事はないのに?」と不思議がられます。 レビューコメント用のちっさいテキストエリアでは説明しきれないので、なぜそのようなコメントをするのか私なりの持論をまとめてみました。 検証環境 記事内のサンプルコードは下記の環境で検証したものです。環境によりサンプルコードに記載したアウトプットが少し異なる事があります。ご
はじめに Angular Advent Calendar 2021 20日目の記事です。 前回は @nontangent さんの [SCSS] Host Scoped Custom Property でした。 Angular で setTimeout / Promise / Observable などの非同期処理を扱った時、なんだか良くわからないまま呪文のように fakeAsync や tick を使ってテストを通す事はありませんか?この記事では、そんな非同期処理のテストについて掘り下げた内容を紹介したいと思います。 試した環境 Angular 13.1 Node 16.10 Jasmine 3.10 この記事のサンプルコードは GitHub リポジトリに保存しています。 https://github.com/ringtail003/blog-angular-async-testing/t
初めまして、今年5月にインフラチームへ join した石川と申します。 普段の業務では、インフラコストやセキュリティ対策を最適化するためのプロジェクトを担当しています。 この記事では、 AWS におけるセキュリティについて AWS 認定試験を通して学んだことをご紹介します。 (試験対策や合格テクニックについて扱う記事ではありません。あらかじめご了承ください。) はじめに アプリケーション実行環境の構築や運用を行なうインフラエンジニアにとって、サイバーセキュリティに関する知識は特に重要な知識の一つです。 アプリケーションの可用性を担保し、情報資産を含む会社のリソースの機密性や完全性を保つには、ネットワークやサーバーを不正な侵入や悪意のある攻撃からいかに守れるか、どのようにそれを実現できるかといったことを理解している必要があるからです。 カルテットではインフラのほとんどを AWS で構築してい
BEAR.Sunday Advent Calendar 2021 day14の記事です! カルテット開発部では、大半のWebアプリケーションはSymfonyで作るのですが、小さなコマンドラインアプリケーションにはRay.DIを使っています。 今年はRay.DIと組み合わせて使えるAOPライブラリ、Ray.Aopを使ってみたので紹介します! BEFORE 取り扱いのある各広告媒体ごとにとあるチェックを行うコマンドラインアプリケーションを作りました。 <?php // ... class YahooChecker implements CheckerInterface { // ... public function check(TargetAdAccount $account, AuthenticationInterface $auth): void { if (!$auth instanc
こんにちは。フロントエンドエンジニアの松岡です。 この記事では、Webアクセシビリティ向上をスタートするためにカルテット開発部で行った取り組みについて紹介させていただきたいと思います。 Webアクセシビリティ 私が「Webアクセシビリティ」を認識したのは、フロントエンド界隈でアクセシビリティについての注目度が上がり、時おりブログなどでこの言葉を見かけるようになってからです。 歴史に目を向けると、Webの技術の標準を定めているW3Cが20年以上前から WCAG(Web Content Accessibility Guidelines) を公開しています。 WCAG 1.0 Recommendation WCAG 2.0 Recommendation WCAG 2.1 Recommendation WCAG 2.2 Working Draft WCAG 3.0 Working Draft 当初
はじめに Aurora Serverless いいですよね。常時起動の必要のないアプリケーションなどにおいて利用することでコストメリットを享受でき心理的にストレスが随分減ります。 今回はこの Aurora Serverless の MySQL エディション使用時にユーザのアクセス制御でつまづいたのでその内容を記しておきたいと思います。 MySQL におけるアクセス制御 MySQL にはアクセスするクライアントの制御を行う仕組みがあります。これを適切に運用することで予期せぬユーザの振る舞いによるデータの変更などを避けられます。便利ですね。 MySQL :: MySQL 5.6 リファレンスマニュアル :: 6.2 MySQL アクセス権限システム Aurora MySQL による IAM 制御 一方、Aurora MySQL には AWS のサービスならではの仕組みがあります。それは IAM
Symfony Advent Calendar 2020 24日目の記事です! カルテット開発部では基本的にWebアプリケーションはSymfonyを使って開発していますが、実は「フレームワークはどうでもいい」と考えています。 「え?どういうこと?」という反応が予想されるので、内容と理由について説明します。 「フレームワークはどうでもいい」 私達が作りたいのは我々のモデリングしたドメイン(リスティング広告運用業務のドメイン)を体現したアプリケーションです。フレームワークのイケてる機能を使ったアプリケーションではありません。 モデリングしたドメインを適切に表現してユーザーに提供できるなら、フレームワークもプラットフォームも何でも良いのです。究極的にはエクセルマクロでも良いぐらいです。 現時点では「Webアプリケーションという形式に乗せたい」という要求があるため、Webアプリケーションのプラット
PHPカンファレンス2020前夜祭で「SPAのAPI開発の「やりづらさ」をDDDとオブジェクト指向の発想で解決する」を発表しました 本日、PHPカンファレンス2020前夜祭で「SPAのAPI開発の「やりづらさ」をDDDとオブジェクト指向の発想で解決する」を発表しました。 スライドを公開します。 応募時点から採択までの間にも多くの方にstarをいただき、大変心強かったです!聞いてくださった方、ありがとうございました! 発表内容は社内のメンバーと話し合いながら開発している中でたどり着いた現時点のベストプラクティスです。社内でこのような議論ができる仲間がいて、本当に幸せだなとスライドを作りながら改めて思いました。 引き続き、明日の本編にも参加します。なにか質問や意見があればDiscordでお待ちしています。
さてさてどれを使って良いのやら…。今回は 「何となく聞いたことあるから使ってみたい」という独断で ●Protractor ●Puppeteer ●cypress の 3 つをお試しで使ってみようと思います。 2)テスト対象のデモアプリ E2E テストの対象として、このような簡単なデモアプリを作ってみました。 ユーザー名が ringtail003 ならログインできます。パスワードは何でも通ります。ガバガバアプリです。 E2E でテストしたい内容(= シナリオ)は下記の通りです。 正常ケースのログイン/ログアウト ユーザー名 ringtail003 でログインするとプロフィールのページに遷移する プロフィールのページでログアウトする 異常ケースのログイン エラーメッセージが表示されログインできない 3)Angular のサンプルテスト掘り下げ編 実は Angular では E2E の雛形のテス
こんにちは!Symfonyアドベントカレンダー 18日目です 今回は、Symfony4を使って、簡単なフォームを作成してみたいと思います! こちらの過去記事が参考になりました! Symfony4をインストールして”Hello World”を表示させるまでの手順 動作環境 Symfony4.4.0 Symfony Standard Edition → Symfony Flex Symfony4では、Symfony Standard Editionはサポート対象外となり、Symfony Flexを採用しています。 composer.json "require": { "symfony/flex": "^1.3.1", }, "conflict": { "symfony/symfony": "*" }, $ composer create-project symfony/website-skel
次のページ
このページを最初にブックマークしてみませんか?
『QUARTETCOM TECH BLOG』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く