GO Tech Blog

https://techblog.goinc.jp/

GO Tech Blogは、タクシーアプリ『GO』を始めとして様々なサービスを展開しているGO株式会社が技術情報などを紹介するテックブログです。

フィード

記事のアイキャッチ画像
Python アプリケーションのパフォーマンス調査に便利な Cloud Profiler の結果を見るコツ
GO Tech Blog
この記事はGO Inc. Advent Calendar 2024 14日目の記事です。 こんにちは。AI技術開発部の牧瀬です。 Python アプリケーションのパフォーマンスチューニングに使えるプロファイラはいくつかありますが、本番環境でも使えるものとして Google Cloud Profiler があります。 本記事では様々なサンプルコードで Cloud Profiler の挙動を確認し、結果の読み方について注意点やコツをお伝えします。 概要 Google Cloud では Cloud Profiler というものが提供されており、 Go, Python, Java, Node.js な…
22日前
記事のアイキャッチ画像
複数チームでのアプリ開発におけるローカライズ文言の管理手法
GO Tech Blog
こんにちは、ソフトウェア開発統括部の伊藤です。 フルスタックエンジニアとしてアプリとバックエンドそれぞれのチームに参加して開発をしています。 この記事はGO Inc. Advent Calendar 2024 8日目の記事です。 タクシーアプリ『GO』は2021年にはローカライゼーションの取り組みを開始し、2023年2月には全面的に英語をサポートました。 その際導入された多言語対応のワークフローを実践した結果、実際の開発チームの動きとそぐわないところが見えてきました。 2023年9月に入社した伊藤が、以前いた組織で直面して解決できなかった問題に共通する部分を感じて、この問題に向き合うことにしま…
1ヶ月前
記事のアイキャッチ画像
CythonでPythonコードのフリーで安全な難読化
GO Tech Blog
この記事は GO Inc. Advent Calendar 2024 の7日目です。 こんにちは、KUUグループの宮園です。仕事は何でも屋さんです。 今回は、業務とは全く関係ない話をします。趣味のコードの話です。社内で使っている技術ではありません。 Pythonで難読化したくありませんか? Pythonでつくられたプロダクトのソースコードを見られたくなかったり、改ざんされたくないケースがあります。 例えば、 Pythonソフトウェアをハードウェアに組み込んでアプライアンスとして販売する場合 有料で買い切りのソフトウェアの販売をする場合 ライセンスを更新し続けないと使えないソフトウェアの販売をす…
1ヶ月前
記事のアイキャッチ画像
Grafana LokiのLogQLを理解する
GO Tech Blog
こんにちは、SREグループの水戸 (@y_310)です。 タクシーアプリ『GO』ではサービスが出力するログの分析基盤としてGrafana Lokiを使用しています。Grafana LokiはLogQLという言語を使って柔軟にログを分析したり集計してメトリクスとして可視化したりすることができるソフトウェアです。(Loki導入にあたってのインフラ視点のお話はこちらを御覧ください) LogQLはシンプルなシンタックスの言語ですが少し複雑なことをしようとした時になかなか意図した結果が得られず個人的に使い始めた頃は苦労していました。特にログをメトリクス化するクエリを記述した時に頻繁に maximum o…
1ヶ月前
記事のアイキャッチ画像
MySQL Server Exporterを使ってAurora MySQLの可観測性向上
GO Tech Blog
はじめに SREグループの古越です。 MySQLサーバーのメトリクスを取得できるツールとしてMySQL Server Exporter (mysqld_exporter)を使ってみましたので紹介します。 PostgreSQLの可観測性向上としてpostgres_exporterについて解説した記事を以前書いていましたが、MySQL Server Exporterも同様の使い方が可能です。 こちらを使ってAurora MySQLの標準機能より詳細な情報を可視化出来たため、使い方や具体的な利用事例を解説します。 MySQL Server Exporterとは MySQLサーバー向けのPrometh…
1ヶ月前
記事のアイキャッチ画像
Argo Rollouts と Istio を使ったカナリアリリースの実現
GO Tech Blog
こんにちは、SREグループのカンタンです! GO株式会社ではアプリケーションサーバを Kubernetes で運用することが多いですが、今までは Deployment によるローリングアップデートを利用しデプロイを行っていました。 マイクロサービス構成を利用しているため一つのアプリケーションのデプロイの影響範囲が限定されていて今まで問題なく運用できていましたが、 アプリケーションの規模が大きくなり提供している機能が多様化してきたため、デプロイの影響範囲を最小限に抑えるためにカナリアリリースを導入することになりました。 今回は、Argo Rollouts と Istio を使ってカナリアリリース…
1ヶ月前
記事のアイキャッチ画像
GOのAI技術 因果推論編
GO Tech Blog
AI技術開発部の宇都です。GO株式会社では過去に発信した記事や発表資料をテーマごとにまとめる取り組みを行っています。 今回はタクシーアプリ『GO』における『因果推論』をテーマとした記事をご紹介します。 因果推論の基礎 入門 統計的因果推論 | MoT Lab (GO Inc. Engineering Blog) AI技術開発部分析グループでは毎週勉強会を開催しており、ビジネスの意思決定をデータに基づいて支援するため、「統計的因果推論」についても取り扱いました。この記事では、オンラインコース「Introduction to Causal Inference」で学んだ内容をもとに、相関と因果の違い…
2ヶ月前
記事のアイキャッチ画像
「やりたいこと」を起点としたPolarsでの実装方法
GO Tech Blog
はじめに はじめまして、AI技術開発部 分析グループの赤池です。 GO株式会社に入社して4ヶ月、これを機にPythonのデータハンドリングで長らくお世話になったpandasを卒業してPolarsに入学したのですが、 当初、やりたいことは明確なのにどう実装すればいいかわからず、ちょっとネットで調べても欲しい情報になかなか出会えず難儀しました。 そこで今回は自分が理解に難儀したポイントを中心に、「やりたいこと」を起点としたPolarsでの実装方法を整理します。 ライトな内容ですが、最後までお付き合いください。 なお、説明には基本的に以下のデータを使用します。 「2. 基本操作のおさらい」にてSQL…
2ヶ月前
記事のアイキャッチ画像
GO TechTalk #29 タクシーアプリ『GO』のログ解析の民主化を促進するStreamlitの活用
GO Tech Blog
2024年9月17日に「GO TechTalk #29 タクシーアプリ『GO』のログ解析の民主化を促進するStreamlitの活用」(connpass)を開催しました。 本記事では当日の内容を簡単に紹介します。 GO TechTalkとは? GO TechTalkは、GO株式会社のエンジニアたちが、タクシーアプリ『GO』をはじめとしたサービスやプロダクトを開発する中で得た技術的ナレッジを共有するイベントです。 タクシーアプリ『GO』では、ログ解析やデータ分析を通じてサービスの改善や品質向上を図っています。しかし、マイクロサービス構成や多様なログフォーマットが、分析のハードルを高めていました。 …
3ヶ月前
記事のアイキャッチ画像
Memorystore for Redis移行のためのRedis HAProxy
GO Tech Blog
Memorystore for Redis移行のためのRedis HAProxy はじめに SREグループ・ヒロチカです。 GO株式会社では、サービスのクラウドインフラの設計から構築・運用までを担当しています。 あるKubernetesのサービスを別のGCPプロジェクトにあるKubernetes環境に移す計画の中で、そのサービスが利用してるGCPプロジェクトのMemorystore for Redisについても別のGCPプロジェクトに移す必要が出てきました。 Memorystore for Redisは内部ネットワークからのみアクセスが可能なサービスのため、移行元のサービスがあるGCPプロジェ…
3ヶ月前
記事のアイキャッチ画像
DroidKaigi 2024 参加レポート
GO Tech Blog
DroidKaigi 2024 参加レポート タクシーアプリ『GO』のAndroidアプリを開発している山本(@farundorl)です。 先日開催されたDroidKaigi 2024に参加してきました。本記事ではイベントの様子やスポンサーブースの様子などについてレポートします。 はじめに DroidKaigi とは、今年で10年目を迎える Android 技術情報の共有とコミュニケーションを目的としたカンファレンスです。 9月11日〜13日にベルサール渋谷ガーデンで開催されました。 https://2024.droidkaigi.jp/ WorkshopDay 今年の DroidKaigi …
3ヶ月前
記事のアイキャッチ画像
GKE で Google マネージド証明書を利用するのが意外と難しい!Gateway API で LB を作成
GO Tech Blog
こんにちは、SREグループのカンタンです! GO株式会社では AWS EKS と GCP GKE の Kubernetes クラスタを活用していて、EKS は以前から AWS マネージド証明書を利用していますが GKE は最近になって Let's Encrypt 証明書から Google マネージド証明書に移行し始めました。 Google マネージド証明書の構成方法が複数あり、構成方法によって GKE での使い方が異なるため AWS と比べて Google マネージド証明書の利用が意外と難しいと感じました。 本記事では Google マネージド証明書の種類と GKE での利用方法を紹介します。…
3ヶ月前
記事のアイキャッチ画像
iOSDC Japan 2024参加レポート #ididblog
GO Tech Blog
こんにちは! iOSエンジニアの高橋(@h1d3mun3)です。タクシーアプリ『GO』のiOSアプリ開発をしています。 8/22 〜 8/24の日程で行われたiOSDC Japan 2024に参加してきましたので、そのレポート記事を書きたいと思います。 iOSDC Japanとは iOSDC Japanは2016年から開催されている、iOSの関連技術をコアのテーマとしたソフトウェア技術者のためのカンファレンスです。 昨年度に引き続き今年も早稲田大学とニコニコ生放送で、オフライン/オンラインのハイブリッド開催で実施されました。 世界中で公募され、高い倍率を潜り抜け採択されたトークの他にも、パンフ…
3ヶ月前
記事のアイキャッチ画像
GO TechTalk #28 iOSの潜在能力を引き出せ!リッチプッシュとApple Payの実践活用術
GO Tech Blog
2024年7月22日に「GO TechTalk #28 iOSの潜在能力を引き出せ!リッチプッシュとApple Payの実践活用術」(connpass)を開催しました。 本記事では当日の内容を簡単に紹介します。 GO TechTalkとは? GO TechTalkは、GO株式会社のエンジニアたちが、タクシーアプリ『GO』をはじめとしたサービスやプロダクトを開発する中で得た技術的ナレッジを共有するイベントです。 GO株式会社が運営するタクシーアプリ『GO』およびドライバー用アプリ『GOドライバー』は、日々さまざまな機能の追加や改善を行っています。 28回目となる今回は、iOSアプリの機能追加や改…
4ヶ月前
記事のアイキャッチ画像
MIRU2024参加レポート
GO Tech Blog
MIRU2024参加レポート GO株式会社は、2024年8月6日(火)から8月9日(金)の4日間熊本で開催された「MIRU2024(第27回画像の認識・理解シンポジウム)」のシルバースポンサーを務め、企業ブースの出展を行いました。森本・福井・小林・米田が参加してきましたので当日の様子などを紹介していきます。 MIRUとは 画像の認識・理解シンポジウム(MIRU)は、画像の認識と理解技術に関する国内最大規模の会議です。本年は熊本城ホールで開催されました。参加者数は昨年と同規模約1591名、論文投稿数は100件以上増加の629でした。 企業展示 GOの企業展示ではコンピュータビジョンがコア技術とし…
4ヶ月前
記事のアイキャッチ画像
CloudFront + S3で配信しているSPAのサイトをCross-Origin Isolationに対応しました
GO Tech Blog
こんにちは、SREグループの浜地です。 GO株式会社では、様々な社内/社外向け管理画面システムをホスティングしており、多くはAmazon S3+Amazon CloudFrontを利用したSingle Page Application(以降SPA)構成をとっています。 今回はそのうちのひとつでCross-Origin Isolation(クロスオリジン分離)の環境を作る必要があったため、背景を含めて今回採用した対応方法を紹介しようと思います。 背景 すでにローンチしていたSPAのシステムの開発担当者から、「このサイトをCross-Origin Isolationに対応させたい」と依頼がありまし…
5ヶ月前
記事のアイキャッチ画像
TerraformをテストするためにConftestを導入しました
GO Tech Blog
こんにちは、SREグループの浜地です。 先日、TerraformにConftestを導入したので、背景などを含めて紹介しようと思います。 「最近話題のOPA的なのでTerraformをテストしたいんだけどなー」とお考えの方にぜひ読んでいただけると幸いです。 Conftest導入背景 SREグループのInfrastructure as Code用のリポジトリは大きく分けて3つあります。Terraformに限定した話をすると、TerraformのStateを管理しているのは1つ目のリポジトリのみです。 稼働中のアプリケーションシステムの状態を記載しているTerraformやKubernetesのコ…
5ヶ月前
記事のアイキャッチ画像
GO TechTalk #27 タクシーアプリ『GO』AndroidでのreCAPTCHA導入・WebADBでの自動化
GO Tech Blog
2024年6月18日に「GO TechTalk #27 タクシーアプリ『GO』AndroidでのreCAPTCHA導入・WebADBでの自動化」(connpass)を開催しました。 本記事では当日の内容を簡単に紹介します。 GO TechTalkとは? GO TechTalkは、GO株式会社のエンジニアたちが、タクシーアプリ『GO』をはじめとしたサービスやプロダクトを開発する中で得た技術的ナレッジを共有するイベントです。 タクシーアプリ『GO』を担当するAndroidエンジニアは、ComposeやCoroutine、MVVMといった基本的な技術の他に、普段はあまり触れることがないものの、プロダ…
5ヶ月前
記事のアイキャッチ画像
実践 脱Modifier.composed
GO Tech Blog
実践 脱Modifier.composed タクシーアプリ『GO』のAndroidアプリを開発している山本です。 Android アプリの UI 開発ツールキットである Jetpack Compose ライブラリでパフォーマンス向上のために既存の Modifier.composed を使った実装を Modifier.Node に置き換えた実例を紹介します。 Modifier.composedについて Jetpack Compose で UI の装飾や動作を設定する Modifier をカスタム実装するアプローチとして Modifier.composed メソッドが用意されています。 Modif…
6ヶ月前
記事のアイキャッチ画像
GKEをバックエンドに持つGCPのLBでmTLS機能を使う
GO Tech Blog
はじめに SREグループ・ヒロチカです。GO株式会社では、サービスのクラウドインフラの設計から構築・運用までを担当しています。 以前の記事で、Google Cloudのグローバル外部アプリケーションロードバランサでmTLS機能を利用した通信を行う構成をご紹介しました。 今回はその続きとしてロードバランサのバックエンドサービス側がGKEとなるような構成で同様のmTLS機能を利用した通信を行うための設定を、いくつかのハマりポイントなども含めてこちらに記載できればと思います。 経緯 当初の構成 前回のブログ記事 GCPのロードバランサーでmTLS機能を使う 前回の続きとなるため少しだけ内容を振り返る…
6ヶ月前
記事のアイキャッチ画像
GO TechTalk #26 GISや因果推論でビジネス課題を解決:GO Inc. データアナリストによる実践事例
GO Tech Blog
2024年5月20日に「GO TechTalk #26 GISや因果推論でビジネス課題を解決:GO Inc. データアナリストによる実践事例」(connpass)を開催しました。 本記事では当日の内容を簡単に紹介します。 GO TechTalkとは? GO TechTalkは、GO株式会社のエンジニアたちが、タクシーアプリ『GO』をはじめとしたサービスやプロダクトを開発する中で得た技術的ナレッジを共有するイベントです。 タクシーアプリ『GO』の事業成長を支えるために、AI技術開発部分析グループのデータアナリストはデータから「なぜそうなるか?」を分析しています。収集したデータを利用して、地理空間…
6ヶ月前
記事のアイキャッチ画像
postgres_exporterを使ってPostgreSQLの可観測性を向上させる方法
GO Tech Blog
はじめに SREグループの古越です。GOでは多くのプロダクトでAurora PostgreSQLを利用しています。Aurora PostgreSQLは標準で多くのCloudWatchメトリクスを出力しており、ほとんどのユースケースに対応できる可観測性があります。しかし、PostgreSQLの詳細なパフォーマンス指標は十分にサポートされていないため、一部ユースケースで不便を感じることがあります。 例えば、以下のようなケースです。 テーブルごとのレコード数やデータ量、更新頻度を把握したい テーブルロックの発生頻度を把握したい ユーザーごとのプロセス数やクエリのレイテンシを表示したい GOではオブザ…
7ヶ月前
記事のアイキャッチ画像
AWS Encryption SDKによるクライアントサイド暗号化
GO Tech Blog
こんにちは、SREグループの水戸 (@y_310)です。重要なデータをストレージに保存する際は暗号化を一つのセキュリティ対策として考えることが多いかと思います。最近はEncryption At Restと呼ばれるストレージレベルの透過的な暗号化によってストレージへの直接アクセスによる漏洩を防ぐ仕組みが当たり前になってきていますが、それでも正当なアクセス権を持ったユーザの認証情報の漏洩により不正アクセスを受けファイルが漏洩してしまうなど想定される攻撃ルートは他にも色々とあります。 そういった場合の追加の防御策としてクライアントサイド暗号化を検討し実装方法を調査したところ、AWSが提供するAWS …
7ヶ月前
記事のアイキャッチ画像
GCPのロードバランサーでmTLS機能を使う
GO Tech Blog
はじめに SREグループ・ヒロチカです。GO株式会社では、サービスのクラウドインフラの設計から構築・運用までを担当しています。 今回、GCPで利用しているロードバランサーでクライアント認証の機能をmTLSで実現したいという要件があり、いくつか構築しながら調査したのでこちらで紹介できればと思います。 経緯 GKEにあるレイヤ4のロードバランサーを経由しTLSの終端まで独自実装で行ってるサービスが有り、今まで個別にサーバ証明書を購入し更新していたのですが、このサービス仕様が少し特殊なこともあり構成情報を把握しているエンジニアも少なく証明書管理が適切に行われずトラブルに発展した事案がありました。 そ…
7ヶ月前
記事のアイキャッチ画像
hclwriteを使ってtfファイルを編集する
GO Tech Blog
こんにちは、SREグループの水戸 (@y_310)です。Terraformを継続的に使用していると、時々一括して大量のファイルの記法を修正したくなる時があります。 単純な置換であればsedで十分ですが、少し複雑な変換になるとsedでは難しいこともあります。そんな時はHCLの公式リポジトリに含まれているhclwriteパッケージを使うとHCLを構文解析した上で参照編集できるので便利なのですが、hclwriteはあくまでGo言語のライブラリなので使用にはGoでの実装が必要になります。この記事では気軽にtfファイルを編集できるようにhclwriteの簡単な使い方を紹介したいと思います。 tfファイル…
7ヶ月前
記事のアイキャッチ画像
負荷試験ツールvegetaを使ってみた
GO Tech Blog
はじめに SREグループ・ヒロチカです。GO株式会社では、サービスのクラウドインフラの設計から構築・運用までを担当しています。 今回、高トラフィックが予想されるアプリケーションに対して負荷試験を実施するにあたり、軽量に負荷をかけられるツールを試してみた中で、Golangベースでかつお手軽に負荷をかけられるツール「vegeta」が便利だったため、こちらの記事で紹介したいと思います。 負荷試験ツール vegeta 今回利用した「vegeta」は、Golangで書かれているCLIで実行可能なシンプルな負荷試験ツールです。 公式リポジトリ: vegeta 説明文を読むとHTTPサービスに対して一定のリ…
7ヶ月前
記事のアイキャッチ画像
Flutterアプリのネットワークデバッグを強化するchuck_interceptorの使い方
GO Tech Blog
ドライバー用アプリ『GOドライバー』を開発しているFlutterエンジニアの井戸田です。 本記事では、『GOドライバー』に chuck_interceptor を導入して得られた知見を紹介します chuck_interceptorを導入した背景 私たちの開発チームでは、アプリケーションのネットワーク通信に起因する処理の不具合に悩んでいました。 不具合が発生した際、その原因がアプリ側にあるのか、API側にあるのかを迅速かつ正確に判断するのが困難でした。例えば社内の方から「特定の機能が正しく動作しない」という報告があった場合、 その問題がFlutterのコードによるものなのか 、またはAPIからの…
7ヶ月前
記事のアイキャッチ画像
Golang マイクロサービスの徹底トレース方法 | オブザーバビリティ基盤第3話
GO Tech Blog
Golang マイクロサービスの徹底トレース方法 | オブザーバビリティ基盤第3話 こんにちは、SREグループのカンタンです! GO株式会社ではサービス品質を向上させるためマイクロサービスのオブザーバビリティを常に改善しています。 「LGTM!オブザーバビリティ基盤第1話」という記事ではGrafanaをベースとしたオブザーバビリティ基盤を紹介し、「Grafana Lokiでログを検索 | オブザーバビリティ基盤第2話」ではログの収集と検索について話しました。 今回はサービスメッシュを活かした Golang マイクロサービスのトレース方法を紹介したいと思います。 背景 メトリックスとログの次にト…
8ヶ月前
記事のアイキャッチ画像
GKE クラスタでは64ノードしか作れない?!Cloud NAT でハマった話
GO Tech Blog
GKE クラスタでは64ノードしか作れない?!Cloud NAT でハマった話 こんにちは、SREグループのカンタンです! GO株式会社では AWS EKS と GCP GKE の Kubernetes クラスタを活用していますが、 数週間前に本番 GKE クラスタのメンテナンス作業を実施した際にノードを65台以上に増やせなくて急遽対応が必要になりました。 まさか GKE クラスタでは64ノードしか作れないことはないですよね? 本記事では発生した問題の原因と対策方法を紹介します。 発生した問題 GKE クラスタのノードプールの再設計とマシンタイプの調整のためにメンテナンス作業を実施しました。 …
8ヶ月前
記事のアイキャッチ画像
GO TechTalk #25 GOのデータ・AIを活用する「組織」を30分で紹介
GO Tech Blog
2024年2月26日に「GO TechTalk #25 GOのデータ・AIを活用する「組織」を30分で紹介」(connpass)を開催しました。 本記事では当日の内容を簡単に紹介します。 GO TechTalkとは? GO TechTalkは、GO株式会社のエンジニアたちが、タクシーアプリ『GO』をはじめとしたサービスやプロダクトを開発する中で得た技術的ナレッジを共有するイベントです。 GO株式会社が提供するサービスでは、さまざまな箇所でデータやAIを活用し、サービスの質向上に寄与しています。例えば、タクシーアプリ『GO』では、大規模なタクシーの交通データを活用して、リアルタイム需給予測を行い…
10ヶ月前