Yappli Tech Blog

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

Go

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…

GoでS3 Batch Operationsを用いたS3間大量コピーを実現する

サーバーサイドエンジニアの森谷です。 業務の中でS3からS3への大量オブジェクトコピーを行う必要が生じたのですが、これが思いの外簡単には実現できず、またGoから利用している記事もあまりなかったため今回はその実装などについて備忘録的にまとめようと思…

新卒で入社してから読んでみた本を並べてみた。

こんにちは。はじめましての方ははじめまして。 サーバーサイドエンジニアの加納です。 もういくつ寝ると、お正月~♬ と歌ってもいいような時期で、早い人は来週末から年末年始のお休みに入る方もいらっしゃるのではないでしょうか? 昨今の状況だと、お休み…

PHPからGoを呼び出す方法

サーバーサイドエンジニアの田実です! ヤプリではPHPとGoを使っています。ということで(?)、PHPからGoを呼び出す方法について紹介します。 なおこの記事はGoからPHPを呼び出す方法の姉妹投稿(?)となっております。 ※この記事は PHP Advent Calendar 2…

GoからPHPを呼び出す方法

サーバーサイドエンジニアの田実です! ヤプリではGoとPHPを使っています。ということで(?)、GoからPHPを呼び出す方法について紹介します。 なおこの記事はPHPからGoを呼び出す方法の姉妹投稿(?)となっております。 ※この記事は Go Advent Calendar 20…

Go標準パッケージのコードリーディング会でチームが強くなった話

サーバーサイドエンジニアの森谷です。 ヤプリではtenntennさんに技術顧問を務めていただいており、tenntennさん同席の元に隔週ペースでGoの社内勉強会を行なっています。 news.yappli.co.jp tenntennさん主導のレクチャーから業務コードの実装相談・モブプ…

Go Conference 2021 Autumnで個人的に気になった発表まとめ

Go

サーバーサイドエンジニアの森谷です。 11/13 にGo Conference 2021 Autumnが開催されました。 ヤプリもSiliverスポンサーとして参加していたのですが、みなさんもうご覧になりましたか? 今回は個人的に気になったセッションをまとめてみたので、もしまだ視…