サーバーサイドエンジニアの田実です! ヤプリのプロダクトである Yappli、Yappli CRM ではお客様のアプリごとにユーザ属性を自由にカスタマイズできます。 例えばクライアントAは「姓」「名」「性別」の属性を使い、クライアントBは「ログインID」「電話番…
サーバーサイドエンジニアの田実です。 顧客管理サービスである Yappli CRM の社内用管理画面ではjQueryが使われています。jQueryは簡易的なDOM操作やインタラクティブなデザイン、アニメーションを実装するには便利なツールである一方で、要件が複雑になる…
サーバーサイドエンジニアの田実です! 私はコードの実装スピードが早いらしく、どうやったらそんなに早く実装できるのか、成果を出せるのかと度々聞かれます。 改めて成果を出すスピードがどこに起因しているのかを掘り下げて考えたところ、それを達成する…
サーバーサイドエンジニアの田実です! 今回はPHPのモックライブラリである mockery/mockery がどのようにして動いているのかを紹介します。 本記事は PHP Advent Calendar 2023 の5日目の投稿になります! コードリーディング 今回紹介するmockery のバー…
サーバーサイドエンジニアの田実です! SPAはMPAよりもユーザ体験が上がる可能性がある*1一方で、開発・運用が複雑になりがちです。APIスキーマの設計・管理、フロントエンドのルーティングの管理、認証認可・CORSなど、データを取得して表示するだけの簡単…
サーバーサイドエンジニアの田実です! 2023年3月に開催された PHPerKaigi 2023 のパンフレット記事に PHPをバージョンアップするための技術と戦略 というタイトルで寄稿させていただきました*1。技術要素に依らず汎用的な内容で、パンフレット記事だけにし…
サーバーサイドエンジニアの田実です! ヤプリの一部のサービスはPHPで実装されており、それぞれのサービスは品質向上を目的として静的解析ツールである PHPStan を導入しています。 PHPStanにより多くの不具合を事前に検知することができるのですが、PHPSta…
サーバーサイドエンジニアの田実です! ヤプリのSlackには #talk-tech-news という技術記事や技術ネタを共有するチャンネルがあります。 今回はこの技術共有用チャンネルに期待している効果や共有する技術記事を探す方法を紹介したいと思います! 育休中なの…
サーバーサイドエンジニアの田実です! YappliのサービスではコンテンツデータをSQLite3で管理しています。SQLite3を使っている理由や課題の詳細は以下の記事に書いています。 tech.yappli.io コンテンツデータ以外にもアプリやアカウントのデータもコンテン…
サーバーサイドエンジニアの田実です! ヤプリではスマホアプリをノーコードで開発できる Yappli のプロダクトだけではなく、アプリや外部システムと連携可能な顧客管理基盤である Yappli CRM というプロダクトも提供しています。Yappli CRMのバックエンドの…
サーバーサイドエンジニアの田実です! タイトルの通り、完了まで1週間かかっていた日次バッチ処理を6分に短縮して1500倍以上高速化したので、今回はその改善について紹介したいと思います。 587459秒 = 6.7日かかっていたバッチが… 改善して6分程度に! …
サーバーサイドエンジニアの田実です! YappliのPHPアプリケーションに symfony/panther を使ってJavaScriptの処理を含めた自動テストを導入したので、 導入の背景とインストール方法などを紹介をしたいと思います。 ※この記事は PHP Advent Calendar 2022 …
サーバーサイドエンジニアの田実です! ヤプリのテックブログにちょくちょく投稿しているのですが、今数えてみたら23記事も書いていたようです。 ヤプリのテックブログに投稿した数も多いのですが、 実は私の ブログ も含めると、これまで書いてきたブログ投…
サーバーサイドエンジニアの田実です! Yappliでは一部のネイティブAPIのアプリケーションや社内用管理画面、マイクロサービスなどをPHPを使って構築しています。 今回はYappliにおけるPHPのテストと現状の課題について紹介したいと思います。 詳細はこちら…
サーバーサイドエンジニアの田実です! YappliはSQLite3を使ってアプリ情報・アカウントの管理やコンテンツの管理を行っています。 社内システムでYappliが管理しているアプリの情報やアカウントを良い感じに検索できる機能があるのですが、今回はその検索機…
サーバーサイドエンジニアの田実です! PHP Conference Japan 2022 に参加・登壇してきました!今回はそのレポートになります! 登壇してきたよ 今回は業務に全く関係ない話ですが登壇してきました! speakerdeck.com プログラミング言語のソースコードをい…
サーバーサイドエンジニアの田実です! 我々が開発・運用している Yappli というサービスはノーコードでスマホアプリが開発できるプラットフォームです。Yappliの機能数は50種類以上あり、ビデオ機能を使った動画配信やポイントカード機能を使ったデジタル会…
サーバーサイドエンジニアの田実です! Yappliではアプリのリリース前に下書きのコンテンツ(プレビュー)を事前に確認したり、下書きのコンテンツを本番に反映する機能があります。 stagingブランチでアプリの動作確認を行い、問題がなければstagingブラン…
サーバーサイドエンジニアの田実です! 今回はYappliのGoのテストコードについて紹介したいと思います。 基本編 DBを使ったテスト HTTPリクエストのテスト インテグレーションテスト テストの実行とカバレッジの集計 その他 まとめ 基本編 基本的には標準ラ…
サーバーサイドエンジニアの田実です! Yappliではインフラ・アプリケーションの監視、メトリクスの計測にNewRelicを使っています。 今回、YappliのサーバーサイドアプリケーションにNewRelicを適用したので紹介したいと思います。 Go x gRPCなアプリケーシ…
サーバーサイドエンジニアの田実です。 もうすぐ PHPerKaigi 2022 が始まりますね! 今回も面白そうなセッションばかりで非常に楽しみです。 phperkaigi.jp ヤプリは PHPerKaigi 2022 にダイアモンドスポンサーとして協賛しています!! ヤプリは創業期からP…
サーバーサイドエンジニアの田実です! Yappliでは各APIの通信にgRPC, Protobufを採用しています。 本記事ではYappliにおけるgRPC, Protobufの利用方法・運用方法についてご紹介します! 利用箇所 以下のAPI通信においてgRPCを利用しています。 用途 プロト…
サーバーサイドエンジニアの田実です! YappliはSQLite3を使ったマルチテナントアーキテクチャを採用しています。 今回は、SQLite3の運用でよく使うコマンドやちょっとマニアックな仕様についてまとめてみました! CLIでクエリ結果を縦に表示したい スキーマ…
サーバーサイドエンジニアの田実です! YappliではネイティブアプリのAPIでgRPC-Gatewayを使って実装しています。 今回は、gRPC-Gatewayをv1からv2にアップグレードしたときに対応したことを紹介します! マイグレーションガイドはこちら↓ github.com 1. Go…
サーバーサイドエンジニアの田実です! 今回はGoの json.Unmarshal 関数で map[string]interface{} の型を指定したときに発生していた事象とその対策を併せて紹介します! なにが起きていたか 以下のように任意のキー、バリューを含むJSON文字列を map[strin…
サーバーサイドエンジニアの田実です! ヤプリではPHPとGoを使っています。ということで(?)、PHPからGoを呼び出す方法について紹介します。 なおこの記事はGoからPHPを呼び出す方法の姉妹投稿(?)となっております。 ※この記事は PHP Advent Calendar 2…
サーバーサイドエンジニアの田実です! ヤプリではGoとPHPを使っています。ということで(?)、GoからPHPを呼び出す方法について紹介します。 なおこの記事はPHPからGoを呼び出す方法の姉妹投稿(?)となっております。 ※この記事は Go Advent Calendar 20…
サーバーサイドエンジニアの田実です! ヤプリではプロダクトをよりグロースさせていくために全社的にエンジニアの採用を強化しています。 サーバーサイドエンジニアも募集しているのですが、2020年7月から2021年9月の約一年間でサーバーサイドエンジニアの…
サーバーサイドエンジニアの田実です! ヤプリのフロントエンドの開発では、huskyを使ってコミット前にlint-stagedを実行し、eslintやprettierでフォーマットしています。 huskyがどのようにして動いているのか興味があったので調べてみました。確認したhusk…
サーバーサイドエンジニアの田実です! Yappliではメールテンプレートや多言語化の設定ファイルをGoに埋め込んで使うためにstatikを使っていました。Go 1.16から導入されたgo:embedによってビルド時にファイルコンテンツを埋め込めるようになったので、stati…