サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
衆院選
tech.quartetcom.co.jp
はじめに こんにちは。澤井です! Dockerを触る機会が多くなりました。 本記事はDockerのブリッジネットワークにおけるコンテナ間通信について記載しています。 具体的にイメージできるようにネットワークインターフェースを流れるパケットも観察したいと思います。 ネットワークインターフェースは、ネットワークインターフェースカード(NIC)やネットワークアダプタと呼ぶこともあります。 以降、本記事ではネットワークインターフェースを単にインターフェースと記載します。 目次 検証環境 準備 ユーザー定義ブリッジネットワークを作成 最終的なネットワーク図 ブリッジネットワークを作成 1つめのコンテナを追加 2つめのコンテナを追加 コンテナ追加後のブリッジを確認 コンテナ間の通信を確認 コンテナと外部の通信を確認 検証環境 本記事は以下の環境で確認しました。 Amazon EC2 Ubuntu 20
はじめに こんにちは。フロントエンドの開発を担当しています、松岡です。 コードレビューをしている時 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
こんにちは。フロントエンドエンジニアの松岡です。 この記事では、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 当初
PHPerKaigi2021にて「そのコード、フレームワークの外でも動きますか?」を発表しました。スライドを公開します。 説明に使用したLaravel版とSymfony版のコードは下記で公開しています。 説明した各リファクタステップごとにタグやブランチを切ってあるので、各ステップでコードがどのような状態になっていたか興味のある方は詳細を見てみてください。 https://github.com/77web/fortune-teller-laravel https://github.com/77web/fortune-teller-symfony
Symfony Advent Calendar 2020 24日目の記事です! カルテット開発部では基本的にWebアプリケーションはSymfonyを使って開発していますが、実は「フレームワークはどうでもいい」と考えています。 「え?どういうこと?」という反応が予想されるので、内容と理由について説明します。 「フレームワークはどうでもいい」 私達が作りたいのは我々のモデリングしたドメイン(リスティング広告運用業務のドメイン)を体現したアプリケーションです。フレームワークのイケてる機能を使ったアプリケーションではありません。 モデリングしたドメインを適切に表現してユーザーに提供できるなら、フレームワークもプラットフォームも何でも良いのです。究極的にはエクセルマクロでも良いぐらいです。 現時点では「Webアプリケーションという形式に乗せたい」という要求があるため、Webアプリケーションのプラット
さてさてどれを使って良いのやら…。今回は 「何となく聞いたことあるから使ってみたい」という独断で ●Protractor ●Puppeteer ●cypress の 3 つをお試しで使ってみようと思います。 2)テスト対象のデモアプリ E2E テストの対象として、このような簡単なデモアプリを作ってみました。 ユーザー名が ringtail003 ならログインできます。パスワードは何でも通ります。ガバガバアプリです。 E2E でテストしたい内容(= シナリオ)は下記の通りです。 正常ケースのログイン/ログアウト ユーザー名 ringtail003 でログインするとプロフィールのページに遷移する プロフィールのページでログアウトする 異常ケースのログイン エラーメッセージが表示されログインできない 3)Angular のサンプルテスト掘り下げ編 実は Angular では E2E の雛形のテス
JMSJobQueueBundleユーザーのためのMessengerコンポーネント移行ガイド(Symfony4時代のasyncジョブ実行入門) SymfonyでWebアプリケーションを作るとき、HTTPリクエストから直接実行するには重い処理があったらどうするか? 以前の記事 でも書いた通り、非同期処理を実装することが多いですね。 Symfony2時代の非同期処理のスタンダードは JMSJobQueueBundle でした。 JMSJobQueueBundleも一応Symfony4に対応してくれたのですが、不具合があって利用できない時期が長く、メンテナーの方が忙しいようでプルリクエストへの返信も遅れがちでした。乗り換え先をどれにするのが良いかTwitterで聞いてみたところ、 Symfony\Component\Messenger を使うと良いよというアドバイスをもらい、使ってみたらとても良
はじめまして7月に入社した開発部の志賀です。宮崎から名古屋に引っ越してきました! カルテットでは、すぐに業務での実装を始めず、ありがたいことにとっても手厚い研修をしていただきました。 私は、PHPでの業務経験がありバックエンドエンジニアとして採用していただきましたが、Symfonyは未経験でオブジェクト指向にも苦手意識がありました。 そのため、入社前は「開発部の高いレベルについていけるのか?」という不安がありました しかし、2ヶ月という長い期間の研修を設けていただき、そんな不安が吹っ飛びました〜! 今回は、その中でのオブジェクト指向研修(OOP研修)を中心に、具体的な内容を、研修を受けた側の目線からお届けできればと思います。 技術的な内容については、次回「~技術編~」として投稿する予定ですおたのしみに 研修内容 私が受けた研修は、上から順に3つです。 Symfony入門(本)の写経 Sym
はじめに みなさんは CloudFormation はお好きでしょうか?私は以前のエントリで以下のように書いていました。 CloudFormation、便利ですよね。インフラのコード化はインフラの状態の変化を可視化できるというたいへん素晴らしいメリットがあります。くわえてCloudFormationはスタック単位で作成・削除ができるため、WEBコンソールから手動で作成・削除するときに起こりうる「不要なリソースが残ったまま」や「必要なリソースを削除してしまう」というリスクが減ることで心理的・金銭的なコストが軽減される点がわたしは気に入っています。 cfn-initはUbuntuのどの起動システムにも対応しているのか?(其の一) | QUARTETCOM TECH BLOG この思いに嘘偽りないのですが、実はだからといって CloudFormation が好きなわけではありません。むしろ「めん
突然ですが、私は40代です。 最近、弊社のフロントエンドエンジニア募集に興味を持ってくれる若者のスキルの欄に「jQuery」の単語がちらほら見える事が気になっています。フレームワークやらバンドルツールやら便利なものがたくさん存在する昨今、そんな時代に開発をスタートした若者が、なぜ古き良き時代の jQuery???たまたま読んだ記事に私と似たような感覚を持ち合わせた方がいたので、まずはそのURLを紹介させていただきます。 jQueryとは何なのか?なぜ使わなくても(あるいは使わないほうが)いいのか? 上記の記事を読めば何が言いたいのかおおよそ見当が付くと思いますが、加えてチーム開発という観点から私の考えをこの記事にて紹介させていただきます。 開発環境の変化 昔々のお話 その昔、私が初めてWEBページなるものを作った時、ブラウザ相手のアプリケーションってなんて難しいんだろうと思いました。こっち
久しぶりのブログになります。澤井です。 私は、入社前はCLIを使う機会は、あまりありませんでした。最近になって、業務でCLIを使う機会が増えました。そこで、今回は実際に使ってみて、便利だと感じたCLIツールをいくつか紹介したいと思います。 紹介するツール peco direnv PsySH tmux 今回は個々のツールの概要を紹介するのが目的ですので、インストールや使い方は各ツールのドキュメントを参照ください。 peco pecoは、入力をインクリメントサーチする機能を提供します。 簡単な例としてls -al | pecoで、ディレクトリ内をインクリメントサーチする例を紹介します。 他の例としては、grepやfindなどの結果をパイプを使って、pecoへ入力として渡して、インクリメントサーチで絞り込むといった使い方などが浮かびます。 機能はシンプルですが、色々な使い方が考えられると思います
Symfony Advent Calendar 2018 23日目の記事です! メリークリスマスイブイブ!下田です。 今日は僕の大好きな機能の一つである Doctrine Criteria について書きたいと思います。 Doctrine Criteriaとは ざっくり言うと、検索条件のみを表現できるオブジェクトです。 細かい粒度で作成したCriteriaを使いまわすことで、複雑に入り組んだ絞り込みを表現しやすくしたり、機能の追加や変更に強くすることができます。 ここではシンプルなブログ投稿サービスを構築中であるという例のもと、いろいろな要件が追加になった際に、Criteriaを使わないパターン、またCriteriaを適用するとどう書けるのかを示したいと思います。 使いドコロの例 前提 「投稿」を表す Post エンティティが次のような形であるとします。 <?php namespace Ap
Symfony Advent Calendar 2018 19日目の記事です! 昨日は @unio さんの Webpack Encoreをwebpack4に書き直す でした。 はじめに Symfonyでは、Security Component を使ってアプリケーションにユーザー認証機能を追加することができます。 しかし、メールアドレスとパスワードを使った一般的なユーザー認証だけを見ても、 サインアップ時のメールアドレス認証(本人確認)の処理 メールアドレス変更時のメールアドレス認証(本人確認)の処理 パスワードリセットの処理 など、意外と実装すべきものが多くて面倒だったりします。 また、昨今のWebアプリではお馴染みのSNSアカウントによるサインアップ/ログイン機能を提供したい場合などは、さらなる実装が必要です。(ほとんどバンドルを追加して設定するだけではありますが) そこで、ユーザー認証
Symfony Advent Calendar 2018 7日目の記事(遅刻)です。 昨日も私の記事でした 巨大なプロジェクトの構成要素を小さなコンポーネントに分けて開発するようになると、バリデーションをSymfonyプロジェクト外で書くことも増えます。 こういうときSymfonyがコンポーネントごとに分かれていて、独立して使用することもできるのが生きてきます。 昔のsymfony1時代との大きな違いですね! 実際にSymfony Validatorでバリデーションしてみる 下記のような Term クラスがあるとします。 <?php namespace Quartetcom\DecBlogDemo\Entity; class Term { /** * @var \DateTime */ private $from; /** * @var \DateTime */ private $to;
この記事はAdobe XD Advent Calendar 2018 4日目の記事です。 先月、弊社で開発しているWebサービス「Lisket」のランディングページをざっくりリニューアルしました。 私はデザインからコーディング(既存コードの上書き)を担当していまして、スピード重視のスケジュールの中、XDが役立ったので簡単に紹介します。 ※制作環境はmacOSです 背景・状況 LPのリニューアルについて Lisketの料金体型が11/8から新しくなり、あわせてLPも刷新しよう!というのが発端でした。 ご利用を検討されている方に新しい料金体系とツールの利点(対価)が正確に伝わる状態にすること、そしてCVRの向上が主な目的です。 尚、現状は共通パーツとトップ・料金・フォームページなど特定範囲を優先的にリニューアルした段階であり、その他のページや内部コードは今も随時改善中です。 ちなみに今回のリニ
はじめに 弊社で開発している Lisket では外部APIに大量のリクエストを行っています。このたび、ビジネス的な要請からアプリケーションの要件を変更することになり、それを機に外部APIへの大量リクエストのインフラアーキテクチャもブラッシュアップすることになりました。 要件は以下です。 バッチ処理の主な振舞は外部APIへのリクエスト。 単位時間あたりに要求されるバッチ処理は10,000件を超えることもあるし数件のこともある。 外部APIは単位時間あたりのリクエスト数に上限を設けている。よってその範囲内でリクエスト数をコントロールしたい。 最大件数が増加しても6時間以内くらいでは終わってほしい。 バッチ処理の所要時間については、ほとんどが2,3秒で終わる。稀に数分かかることもある。 バッチ処理は互いにステートレス。順番や依存はない。 AWS Batchでやってみる AWS Batch とはそ
こんにちは、CTOの金本です。 先日の記事 でもお伝えしたように、現在カルテット開発部では 採用活動に今まで以上に注力しています。 その中で、採用サイト の内容も細かく見直しを入れており、ガチの応募フォーム の手前に、「まずは気軽にお話ししましょう」的な連絡口を新設しました おかげさまで既に何人かの方からご連絡をいただいておりまして、採用選考に進む前にオンライン/オフラインで気軽にお話しさせていただいています :bowtie: Slack転職とは 特に、選考に進む前に 開発部のSlackにご招待して現場メンバーと直接お話をさせていただく という取り組みが割とご好評をいただいております。 弊社の下田の下記ツイートもちょこっとだけ拡散されました 弊社、エンジニア採用窓口として開発部メンバーslackに招待するよ、っていう試みをやってるので、ご興味あるかたぜひぜひー。フルリモートもOKです!ht
カルテットには、社員同士が交流を深める部活がいくつかあります。バレー部やテニス部といった運動系もあれば、(実際には投資をしない)投資部のようなインドアなものもあります。しかし、人見知りな私は、どの部活にも参加していません(汗) でも、プログラマならプログラミング技術を磨きたい! 部活で! というわけで、自分で「プログラミング部」を作り、中途入社したメンバーを半ば強引に誘って、二人で朝活スタイルの部活としてスタートし活動していました。 プログラミング部の活動は、私がプログラミング問題を選び、二人それぞれ問題を解くコードを書くというものです。ただし、問題を解くことだけをゴールとはせず、プログラマが問題をどのように理解したのか、どのような解き方なのかをコードに表現するという部分を中心に据えて取り組みます。なので、問題を解くコードを完成させるのにかかる時間よりも、コードについて議論し、話の展開に応
オープン・クローズドの原則に則ってコードを書こうと思うとResolverクラスをよく使うことになると思います。 PHPerKaigi2018でベストトーク賞を受賞した @hidenorigoto の 「SOLIDの原則ってどんなふうに使うの?」 の最終形態である PHPカンファレンス関西2018で「続・SOLIDの原則ってどんなふうに使うの? オープン・クローズドの原則 センパイのコーディングノート編」 の発表中には IF文禁止ギブス なる言葉も飛び出しました つまり、コードを書いていてIF分岐したくなった箇所はinterfaceに外出ししたうえで、Resolverで解決して使うことができるというわけです。 そのResolverクラスをPhpStormで楽に書くためのコードテンプレを作ったのでシェアします。 設定方法 Preferences → Editor → File and Code
7月半ばに、株式会社カルテットコミュニケーションズの開発部メンバーとして入社しました、粟屋です。 初投稿ということで、入社の経緯や私の役割などについて書きたいと思います! リスティング広告を見て会社を知りました カルテットのことを初めて知ったのは、今年の2月ごろです。 EC-CUBE(EC向けのオープンソースCMS)の勉強会に参加した時にフレームワークSymfonyについて耳にし、 Googleで検索していた時に見かけたのが、カルテット開発部の求人広告でした。 「Symfonyにも自信のある会社が名古屋にあるのか〜」となんとなく気になってクリックしました。 (だいぶうろ覚えですが。。) 採用LPを読んで、なるほど、 リスティング広告の運用代行企業が、 リスティングの業務支援サービスを自社で開発、外部に提供し、 その開発求人もしっかりリスティングで行なっているのか! …と、何か点と点がつなが
普段使用しているGitクライアントのTigが便利なので紹介したいと思います。 github https://github.com/jonas/tig 公式ドキュメント https://jonas.github.io/tig/ What is Tig? Tig is an ncurses-based text-mode interface for git. https://github.com/jonas/tig に記載された冒頭の一文です。 この文だけ見ても何のことやら分かりませんが、要はgitのログをターミナルでグラフィカルに表示できるツールです。 インストールからTig起動まで 前提 この記事は以下の前提条件で書いています。 OS X 10.11 El Capitan Homebrew Tig 2.2.2 インストール Homebrewからインストールできます。
カルテット開発部の後藤です。 弊社ではアプリケーションの開発にSymfonyを使っており、ロギングはSymfonyに標準でバンドルされているMonologを使っています。 使っている期間はそこそこ長いのですが、ログのための設定を記述する頻度が少ないことや、どうもMonologの設定の概念がつかめていないためか、いつもいろいろ迷いながら設定しています。 いつも迷って困るので、今後のために概念などを整理しました。ついでに記事にして公開します。 Monologの基礎概念 Monologはロギングのためのライブラリですが、物理的なログ出力機構に関する詳細をアプリケーションから意識することなく透過的にロギングできるように、多少抽象化されています。 Monolog内に登場する概念と役割は、次のようになっています。 ロガー アプリケーションから利用するエントリポイントオブジェクトです。PSR-3のLog
はじめに タイトルのとおりですが、意外と苦労したのでやり方をまとめておきます。 使う道具 CirleCI 2.0 markdown-pdf MarkdownをPDFに変換するためのCLIツール npmでインストール gdrive Googleドライブを操作するためのCLIクライアント PDFのアップロードに使う バイナリをダウンロードしてインストール ソース(golang)をコンパイルしてインストール(後述) 具体的な方法 事前準備 CircleCIからGoogleドライブにファイルをアップロードするためには、サービスアカウント での認証が必要なので、以下のとおり準備しておきましょう。 Google API Console でサービスアカウントを作る デプロイ先にしたいGoogleドライブ上のフォルダを、サービスアカウントに共有する CircleCIのプロジェクト設定で、サービスアカウント
Ray.Di を知っていますか? 私は普段の開発ではSymfonyを利用しているので、Symfonyの DependencyInjection 機能を使っていますが、最近Symfonyフレームワークを使うほどでない小さなcliアプリで実際に使ってみました。初めて使う場合に戸惑うところ・引っかかったところがあるので、使い方をまとめました。 Ray.Diとは Javaの Guice というDIフレームワークの主要な機能を網羅したPHPのDIフレームワークです。 PHPフレームワークの BEAR.Sunday で使われていますが、単独でも利用できます。 BEAR.Sundayで使う場合は専用のアノテーションを使うことが多いのですが、アノテーションを使わずにPHPコードだけでも設定できるので、サードパーティのクラスを使う場合でも問題なく利用することができます。 Ray.Diを使う 早速使ってみまし
最初に思いついたやり方 User と User を ManyToMany で繋ぐ ググってみてもだいたいこの方法が紹介されている 例: http://www.culttt.com/2014/11/24/creating-twitter-follower-model-using-doctrine/ やってみた 今回は Symfony4 で実装した例を示しますが、コンセプトは Symfony2/3 でもまったく同じなので、適宜読み替えてください エンティティ <?php namespace App\Entity; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Mapping as ORM; class User { //
PHPerKaigi 2018 ベストトーク賞「SOLIDの原則ってどんなふうに使うの?」スライド公開・配布 カルテット開発部の後藤です。 PHPerKaigi 2018 にスピーカーとして参加してきました。そしてなんと、参加者の皆様からの投票の結果、ベストトーク賞を頂きました! tweet 発表を聞いてくださった方、投票してくださった方、そして素晴らしいカンファレンスを企画・運営してくださったスタッフの皆様、本当にありがとうございました! スライドの公開とKeynoteファイルの配布 発表に使ったスライド(公開用に一部修正したバージョン)は、以下です。 また、トークスクリプトも含めて読んでみたい、自分たちの勉強会で使いたいという方向けに、Keynoteファイルも配布します。 SOLIDの原則ってどんなふうに使うの?〜オープン・クローズドの原則編〜 公開版 クリエイティブ・コモンズ BY-
いきなりですが、PHPでオブジェクトの比較をするのって面倒ではないですか? かといってバグ対応の方が面倒なのでテストをサボらずにしぶしぶ書く、そんな毎日でした。 そこで、厳密なオブジェクトの比較を簡単にできないかと考え解決策に至るまでの道のりの話です。 面倒な例 <?php class Foo { private $bar; private $baz; public function __construct($bar, $baz) { $this->bar = $bar; $this->baz = $baz; } public function getBar() { return $this->bar; } public function getBaz() { return $this->baz; } } <?php $fooList = $service->doSomething();
Symfony Advent Calendar 2017の21日目の記事です。 はじめに 新人研修でSymfony4のフレームワーク本体のコードリーディングに取り組んでいる澤井です。 弊社が提供するサービスのバックエンドは、主にSymfonyで開発しています。開発に参加するためには、Symfonyに対する深い理解が必要です。そのためにSymfonyの本体のコードリーディングを行っています。 コードリーディングは、PhpStormのステップ実行を使って全体の流れを把握した上で、個々のクラスを詳しく見ながら該当箇所の公式ドキュメントを読む、という手順で進めました。 今回は、特に重点的に調べたHttpKernel Componentについて調べたことをまとめてみました。HttpKernel Componentは、HTTPリクエストを受け取ってHTTPレスポンスを返す、Symfony4アプリケーシ
次のページ
このページを最初にブックマークしてみませんか?
『QUARTETCOM TECH BLOG』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く