Yappli Tech Blog

株式会社ヤプリの開発メンバーによるブログです。最新の技術情報からチーム・働き方に関するテーマまで、日々の熱い想いを持って発信していきます。

Go

GoでJSONから値を探索する時にgojqが便利だった

Go

はじめに こんにちは、サーバーサイドエンジニアの中川(@tkdev0728)です。 JSONから特定のキーを使って値を抽出するというユースケースは珍しくないと思います。言語やツールによっていくつかやり方は変わると思うのですが、 今回はリクエスト先と抽出用の…

Goの並行処理入門 - Goroutine基礎編

Go

はじめに こんにちは。昨年の11月にYappliへ入社したしがないサーバーサイドエンジニアの佐野(@Kiyo_Karl2)です。 自分はYappliに入社するまでGo言語を利用した経験が無く、言語仕様についての理解がまだ浅いと感じる部分があるなと思っています。 そのため…

Goの並行処理入門 - syncパッケージ編

Go

はじめに こんにちは。サーバーサイドエンジニアの佐野(@Kiyo_Karl2)です。 本記事は、4本の連載記事の2本目となります。 Goの並行処理入門-Goroutine基礎編 Goの並行処理入門-syncパッケージ編 ←今ここ Goの並行処理入門-channel編 Goの並行処理入門-select…

Goの並行処理入門 - channel編

Go

はじめに こんにちは。サーバーサイドエンジニアの佐野(@Kiyo_Karl2)です。 本記事は、4本の連載記事の3本目となります。 Goの並行処理入門-Goroutine基礎編 Goの並行処理入門-syncパッケージ編 Goの並行処理入門-channel編 ←今ここ Goの並行処理入門-select…

Goの並行処理入門 - select編

Go

はじめに こんにちは。サーバーサイドエンジニアの佐野(@Kiyo_Karl2)です。 本記事は、4本の連載記事のラストとなります。 Goの並行処理入門-Goroutine基礎編 Goの並行処理入門-syncパッケージ編 Goの並行処理入門-channel編 Goの並行処理入門-select編 ←今…

Goのreflectパッケージを理解する

Go

はじめに こんにちは、サーバーサイドエンジニアの中川(@tkdev0728)です。 最近片っ端から試せる花粉対策を順番に試しており、最近は「強さひきだす乳酸菌」のキャッチコピーでお馴染みのあのヨーグルトのドリンクを飲み続けています。効果があるのかない…

SQLite3で管理していたデータの一部をMySQLに移行した

サーバーサイドエンジニアの田実です! YappliのサービスではコンテンツデータをSQLite3で管理しています。SQLite3を使っている理由や課題の詳細は以下の記事に書いています。 tech.yappli.io コンテンツデータ以外にもアプリやアカウントのデータもコンテン…

Goで2地点間の距離を緯度経度を使って求める

Go

はじめに こんにちは。サーバサイドエンジニアの中川@tkdev0728です。 最近距離計算を行いたい場面があり、色々と調べていて実装はできたんですがGoで実装しているかつ日本語の情報が多くなかったので今の記事を書いています。 使うもの 算出方法 算出するに…

GitHub Actionsのsetup-go@v4が変えるGoのCI/CD: 依存関係キャッシュを理解する

Go

GitHub Actions は CI/CD パイプラインの自動化に不可欠なツールで、Go の開発者にも大変便利です。特に、依存ライブラリのキャッシュはプロジェクトの CI/CD 時間を短縮し、開発効率を向上させるために重要な機能です。最近リリースされた GitHub Actions …

Goのcontextパッケージを理解する

Go

はじめに こんにちは、サーバサイドエンジニアの中川(@tkdev0728)です。 2023年も早いもので1ヶ月がすぎようとしていますね。2023年は何よりも姿勢にこだわろうと思っています。いい猫背解消の方法があればぜひコメントにて教えてください。 さて、今回はタ…

なぜGoのerrorインターフェースはポインタレシーバで実装するべきなのか

Go

先日 Go の独自エラーについての記事を投稿しました。そこで error インターフェースを実装する時はポインタレシーバで実装しましょうという話をしました。そちらでは詳細は長くなるので割愛させていただきましたが、この記事では Go のインターフェースにつ…

Goの独自エラーの作り方

Go

Goで独自エラーを扱う方法についてサンプルコードを交えて解説します。

GoのsqlxパッケージにてJSON_CONTAINSを使ってSELECTしようとしてハマった話

はじめに こんにちは、サーバサイドエンジニアの中川(@tkdev0728)です。 Yappliに入社して半年が経とうとしていて、時の流れは早いなと感じている今日この頃です。 さて、今回はタイトル通りとある業務にてJSONで格納されている値から特定のキーを抽出したい…

Goのdefer文を使うときに気をつけること

Go

Goのdefer文の基本的な使い方と、プロダクションで使うときに気をつけるべきポイントをまとめました。

AWS EventBridgeを使ってAWS MediaConvertを自動で実行する

こんにちは、サーバサイドエンジニアの中川です。 この記事を執筆している2022年9月はちょうどスプラトゥーン3が発売された時期ですね。自分は今作から本格的に遊んでいるのですがすぐやられてしまうので、塗っている時間よりも塗る場所に移動している時間が…

Jiraのラベルが完全一致検索しかできなかったのでGoでチケットをエクスポートして集計してみた

こんにちは。インテグレーション・エンジニアの尾宇江(おうえ)です。 今回は、GoでJiraのチケットをエクスポートしてみた件について、テックブログに記載いたします。 はじめに Yappliでは2週間に1度、エンジニアが自分たちが主体となってプロダクトや業務に…

戦術的DDDをGoで実現する【Value Object編】

はじめに こんにちは。サーバサイドエンジニアの窪田です。 前回の 戦術的DDDをGoで実現する【entity編】 - Yappli Tech Blog に続き、 今回は戦術的DDDにおける、Value ObjectがGoでどのように書けるのかを考えていきます。 例によってTypeScriptとの書き方…

YappliのGoのテストについて

Go

サーバーサイドエンジニアの田実です! 今回はYappliのGoのテストコードについて紹介したいと思います。 基本編 DBを使ったテスト HTTPリクエストのテスト インテグレーションテスト テストの実行とカバレッジの集計 その他 まとめ 基本編 基本的には標準ラ…

NewRelicをYappliのサービスに適用してみた

サーバーサイドエンジニアの田実です! Yappliではインフラ・アプリケーションの監視、メトリクスの計測にNewRelicを使っています。 今回、YappliのサーバーサイドアプリケーションにNewRelicを適用したので紹介したいと思います。 Go x gRPCなアプリケーシ…

戦術的DDDをGoで実現する【entity編】

概要 こんにちは。サーバーサイドエンジニアの窪田です。 最近入社して、初めてGoを業務で使うことになりました。 ヤプリではDDDでサーバーサイドの設計を行なっています。 これまで、Nest.jsというTypeScript製のフレームワークでDDD設計をしてきた経験があ…

CloudFront署名付きURLを用いたS3コンテンツの配信をGoで実装する

サーバーサイドエンジニアの森谷です。 画像ファイルなどS3に置いてあるコンテンツの配信の仕方として、S3バケットは非公開にしておきつつも許可されたユーザーに対しては署名付きURLを用いて限定的なアクセスを許可する方法がよく用いられているかと思いま…

Goのnet/httpパッケージを理解する

Go

はじめに こんにちは、サーバーサイドエンジニアのKidaです。 Goにはnet/httpというHTTP クライアントとサーバーの実装を提供してくれるパッケージがあります。 普段の開発でnet/httpパッケージを使っているのですがGoの経験がまだ浅いということもあり、仕…

Go Conference 2022 SpringでPHPからGoへの移行について発表しました

Go

サーバーサイドエンジニアの森谷です。 Go Conference 2022 Springに"Go"ldスポンサーとして登壇してきましたので、その後日談記事になります! 登壇内容 「創業以来のPHPシステムが生み出した混沌をGoへの移行で乗り越えた話」について発表しました。 gocon…

Go Conference 2022 Springに"Go"ldスポンサーとして協賛・登壇します!

Go

サーバーサイドエンジニアの森谷です。 もうすぐGo Conference 2022 Springが始まりますね。 前回とはまた打って変わったセッションが並んでおり非常に楽しみです! gocon.jp ヤプリはGo Conference 2022 Springに"Go"ldスポンサーとして協賛しています!! …

Goのsqlxパッケージを理解する

Go

サーバーサイドエンジニアの森谷です。 前回の記事に続いて、今回はsqlxパッケージについて見ていこうと思います。 簡単なおさらい 前回はdriverパッケージとsqlパッケージを読みました。 driver.Driver インターフェースを満たす型を実装し sql.Register で…

Goのsqlパッケージを理解する

Go

サーバーサイドエンジニアの森谷です。 弊社ではDBの一部にSQLiteを使っており、SQLiteからのSELECT結果を構造体にパースする部分の処理について調べごとをしていたのですが、その中で「SELECT結果をモックできたら楽に手元で色々確認できないかな」という疑…

PHPのちょっとした静的解析をGo+GitHub Actionsで実施するようにしてみた

こんにちは、エンジニアの尾宇江です。 goでプルリク作ってリリース作業を改善してみた。のエントリーに引き続き、Goを使ったちょっとした改善をした話です。 最初に 書いたコードをcommitした後、「あープリントデバッグで仕込んでたvar_dump消し忘れた」っ…

goでプルリク作ってリリース作業を改善してみた。

Go

こんにちわ、エンジニアの山田です。 2022年始まって1ヶ月ですが、これだけWeb3がもてはやされると、自分もヤマダ2ぐらいにはならないとヤバいのではという危機感を覚えますね。 これだけWeb3がもてはやされると、自分もツノダ2ぐらいにはならないとヤバいの…

gRPC-Gateway v2へのアップグレードで対応したこと

サーバーサイドエンジニアの田実です! YappliではネイティブアプリのAPIでgRPC-Gatewayを使って実装しています。 今回は、gRPC-Gatewayをv1からv2にアップグレードしたときに対応したことを紹介します! マイグレーションガイドはこちら↓ github.com 1. Go…

json.Unmarshalでmap[string]interface{}型にパースするときの注意点

Go

サーバーサイドエンジニアの田実です! 今回はGoの json.Unmarshal 関数で map[string]interface{} の型を指定したときに発生していた事象とその対策を併せて紹介します! なにが起きていたか 以下のように任意のキー、バリューを含むJSON文字列を map[strin…