go-redis でクラウド上の Redis Cluster とローカルに立てた Redis を同じコードで動かす

最近 go-redis を使っているのだが、"クラウド上は Redis Cluster で、ローカルは開発用の Single Redis をサクッと Docker で立てる" みたいなことをしたいと思った。 しかし、go-redis では Redis Cluter と Single Redis が異なるクライアントとして定義…

"pospomeのサーバサイドアーキテクチャ4" をBOOTHで販売しました。

"pospomeのサーバサイドアーキテクチャ4" をBOOTHで販売しました。 pospome.booth.pm 書籍についての詳細は以下です。 www.pospome.work

技術書典9で"パッケージ設計"に関する書籍を販売します

技術書典9で"パッケージ設計"に関する書籍を販売します。 *追記 現在はBOOTHにて販売中です。 www.pospome.work techbookfest.org どんな書籍なのか? 書籍のナンバリングについて ページ数と価格 技術書典後にBOOTHで販売しますが価格は上げます 目次 その…

Goでゼロ値の構造体を生成することを防ぐべきかという話

社内slackで以下の記事と同じようなことを悩んでいるというメッセージがあった。 2018年の記事ではあるが、自分もGoを利用し始めた頃に考えたことがあるので、この記事に書かれている内容をベースに改めて自分の意見をまとめておく。 ここに書く内容が正しい…

Goのアーキテクチャとフレームワークについて

社内slackでGoについて質問されて、それなりに長文で回答したのでその内容を加筆修正したものをブログに残しておく。 質問内容としては以下のイメージ。 RubyだとRailsがあり、MVCを利用することになるが、Goだとそこらへんはどうなるのか? Go初心者なのでGo…

マイクロサービスアーキテクトという役割

最近マイクロサービスアーキテクチャが抱える課題を解決するために色々やろうとしているのでまとめてみました。 マイクロサービスアーキテクチャの採用 開発効率と疎結合な組織 開発効率と多様性 何をどこまでルール化するか 大規模なマイクロサービスアーキ…

メルペイを退職しました

2019年11月末でメルペイを退職しました。退職理由は "エンジニアとしてのキャリアパス" です。 最近自分の理想とするエンジニア像、強化したいスキルセット、適切な環境などを整理した結果、違う環境でチャレンジすることにしました。自分の次の会社ですが、…

体重を増やしてみた

このブログには技術的なことしか書いてなかったんだけど、せっかく太った記念なので書いておこうと思った。つい最近 "太るのも才能" という言葉が頭をよぎったので、「どこまで太れるのか?」というのにチャレンジしてみた。 筋肉をつけるとかではなく、単純…

技術書典7にて販売した "pospomeのサーバサイドアーキテクチャ3" をBOOTHから購入できるようにしました。

こちらから購入することができます。 こちらで言及したとおり、価格は1500円に設定しています。pospome.booth.pm

技術書典7で"実装パターン"に関する書籍を販売します。

技術書典7で"実装パターン"に関する書籍を販売します。 techbookfest.org 何の書籍なのか? ページ数と価格 技術書典後にBOOTHで販売しますが価格は上げます かんたん後払い対応します 目次 何の書籍なのか? 一言でいうと実装パターンに関する書籍です。 サン…

"マイクロサービスにおける認証認可基盤" について話しました

こちらのイベントで"マイクロサービスにおける認証認可基盤" について話しました。 mercari.connpass.com 内部通信の認証ということで、なかなか外に出せない技術的なテーマかと思いますが、今回アウトプットする機会があったのでアウトプットしました。 発…

posopmeが過去に書いた実装系の記事まとめ

技術書典で何書こうかなーと思ってなんとなくブログの記事を見直していたときに、 またなんとなーく実装系の記事をまとめてみようかなと思いました。 過去の記事とかは検索で引っかからない限り読んでもらえる機会ないと思いますし。 ちなみに過去に書いたも…

メルペイの認証基盤チームのバックエンドエンジニアを募集します

以前ツイートした通り、 メルペイの認証基盤チームに興味を持ってもらうためにこの記事を書きました。 メルペイには"メルカリ、メルペイにおける認証認可の仕組みを構築すること"を目的にした認証基盤というチームがあります。高負荷でありながら高い可用性…

技術書典6にて販売した "pospomeのサーバサイドアーキテクチャ2" をBOOTHから購入できるようにしました。

技術書典6にて販売した "pospomeのサーバサイドアーキテクチャ2" をBOOTHから購入できるようにしました。 この書籍は"Go+Docker+CircleCI+GKE+Spinnakerでアプリケーションデプロイフローを構築する"という内容です。 以下から購入できます。 pospome.booth.…

技術書典6で"Go+Docker+CircleCI+GKE+Spinnaker"に関する書籍を販売します。

技術書典6で"Go+Docker+CircleCI+GKE+Spinnaker"に関する書籍を販売します。 技術書典の当日は見本誌を用意するので興味のある方は実際に手にとって内容を確認していただければと思います。 techbookfest.org 前回は以下のサーバサイドアーキテクチャの書籍…

SpannerでSHOW CREATE TABLEのようにテーブル定義とインデックスの定義を取得する

GCP

取得方法は2つある。1つ目1つ目の方法はGCPのConsoleから確認する方法。 ConsoleでSpannerを表示して、instance -> database を選択するとテーブル一覧画面が表示される。 その一覧の一番下に"Show equivalent DDL"というリンクがあり、 そこからDB内の全テ…

depで"does not contain usable Go code (*build.NoGoError).. (Package is required by (root).)"のエラー

プライベートのプロジェクトで"dep ensure -add github.com/xxx"すると以下のエラーが出た。 Solving failure: No versions of github.com/xxx met constraints: 0.1.1: Could not introduce github.com/xxx@master, as its subpackage github.com/xxx does …

CircleCI Local CLI の build で "Cannot find a job named `build` to run in the `jobs:` section of your configuration file." のエラー

CircleCI Local CLI で以下のようにビルドしたら $circleci build .circleci/config.yml 以下のエラーが出た。 Cannot find a job named `build` to run in the `jobs:` section of your configuration file. CircleCIのLocal CLIは"workflows"に対応してい…

DDDとコードとしての正しさ

DDD

ドメイン駆動設計 #1 Advent Calendar 2018の14日目を担当する@pospomeです。今回はDDDとコードとしての正しさについて書いてみようと思います。 DDDは設計手法である コードとしての正しさ コードとしての正しさを見失う ユースケースの日本語を"そのまま"…

Goの並列テストと現在時刻に依存した実装について

Mercari Advent Calendar 2018 の13日目は株式会社メルペイ認証基盤チームの @pospome がお送りします。メルカリのアドベントカレンダーで特定の実装パターンの網羅集みたいなやつを書こうと思ったんだけど、組み合わせ爆発でまとめきれそうにないな・・・。…

技術書典5にて販売した "pospomeのサーバサイドアーキテクチャ" をBOOTHから購入できるようにしました。

技術書典5にて販売した "pospomeのサーバサイドアーキテクチャ" をBOOTHから購入できるようにしました。以下から購入できます。 価格は技術書典と同じ1000円です。 booth.pm技術書典に来てくださった方への特典として価格を少し上げたり、 内容を落としたり…

【10/5 更新】技術書典5にサークルとして参加します。

技術書典5にサークルとして参加することになったので、 書籍の詳細についてまとめました。techbookfest.org[追記] BOOTHから購入できるようにしました。 pospome.hatenablog.com 書籍のざっくり情報は以下です。 書籍の目次はこちら サーバサイドのアプリケ…

Cloud Next 2018 MicroServices & APIs

こちらのイベントでの登壇資料です。 Cloud Next 2018 のセッションの中でアプリケーションエンジニアに役立ちそうな内容をまとめています。 mercari.connpass.com MicroServices & APIs from pospome

decorator, presenter, exhibit という3つの実装パターンについて

@a_suenami さんのこのツイートの Decorator, Presenter, Exhibit が気になったので調べてみた。表示に関するデザインパターンは大きくDecoratorパターン、Presenterパターン、Exhibitパターンの3つがあります。で、Exhibitパターンが一番柔軟ですが小さいア…

Go における FunctionalOptionPattern と MethodChaining について考える

きっかけ FunctionalOptionPattern MethodChaining MethodChaining の問題点 Error フィールドによる解決方法 Error フィールドによる解決方法の問題 1. 各メソッドでエラーが発生しないような印象を受ける 2. エラーチェックを忘れそう その1 3. エラーチェ…

書籍「Real World HTTP」の学習効率の高さについて

今更ながら、Real World HTTP を読んでみたので、 学習効率という視点で感想を書いてみようと思う。www.oreilly.co.jp 対象となる読者が広い スラスラ読める 好きなところから読める 一通り目を通すことを推奨 Go言語は関係ない キャッシュの仕様 HTTP2が載…

golang の「埋め込み」を利用した実装アンチパターン

最近、time.Time を独自の struct で埋め込んだ実装をみかけたので書いておこうと思った。結論から言うと、 標準パッケージやライブラリで定義されている型に対して「埋め込み」を使うと、 コードが正常に動かなくなる可能性があるので、 注意した方がいいと…

GAE の TaskQueue(PushQueue) で、delay パッケージと HTTP の受け口(handler)を定義するのは何が違うのか?

GCP

TQ を利用するとき、 いつもはタスクを受ける HTTP の受け口(handler)を定義して、 taskqueue パッケージで実装を完結させていただけど、 「今回は delay パッケージ使ってみようかなー」 と思ったので違いを調べてみた。それぞれの使い方とかはネットに転…

GAE/Go の urlfetch のタイムアウトを設定する

ググると、旧 appgneine パッケージに対する設定方法しか引っかからないので、 google.golang.org/appengine に対する設定方法をメモとして残しておく。結論から言うと、 context.WithTimeout() or context.WithDeadline() を利用して設定する。以下は conte…

GAE の SocketAPI とは何か?

GCP

存在は知っていたが、 普段 GAE を利用する上で特に利用する機会がなかったので、 SocketAPI について調べてみた。 SocketAPI クオータ GCPサービスとSocketAPI 課金してないとエラー まとめ SocketAPIドキュメントは以下。 https://cloud.google.com/appeng…