CaddyでgRPCのリクエストをリバースプロキシする

3 min read | #Caddy

こんにちは @p1ass です。

Caddy はデフォルトで HTTPS・HTTP/2 に対応している OSS の Web サーバです。 デフォルトで HTTP/2 に対応しているということは gRPC のリクエストもリバースプロキシできるのでは?と思い調べていたのですが、日本語でまとまってる記事がなかったのでここにメモしておきます。

続きを読む

Caddyfileを分割する方法

1 min read | #Caddy

こんにちは @p1ass です。

Caddyfile は Caddy の設定ファイルですが、どんどん設定が増えていくと可読性が下がってしまいます。

Nginx の /site-enabled のように Caddyfile を分割して読み込めないかなと思って調べたところ、分割できることが分かったのでやり方をメモしておきます。

続きを読む

複数のRSSや任意の情報をまとめて1つのRSSやJSONを生成するライブラリを作成した

5 min read | #Go #RSS #OSS

こんにちは @p1ass です。

皆さん RSS 使ってますか?RSS を使えば簡単にブログの更新を受け取れたりして便利ですよね。

でも、流れてくる情報多くて辛かったり、RSS に対応していないサイトの情報を受け取りたかったりすることがたまにありませんか?

そんな悩みを解決するための Go のライブラリを 1 年前に作ったのですが、ブログに書く機会を逃していたので、今更ですが紹介記事を書きます。

発表スライドはこちらです。

続きを読む

ISUCON10の予選でFAILして学生枠での本戦出場を逃した

8 min read | #ISUCON #Go

こんにちは @p1ass です。

タイトルの通り。@Lorse@km_conner の 3 人で、チーム「釜中の鯖」として ISUCON10 の予選に参加した。結果は競技終了後の追試に失敗して、学生枠での本戦出場を逃した。めっちゃくやしい…。

負けたとはいえ、ブログを書くまでが ISUCON なので、取り組んだ改善をメモっておく。

リポジトリはこれ。

続きを読む

Goのよくあるミスを発見する静的解析ツールを作った話

5 min read | #Go #静的解析 #OSS

こんにちは @p1ass です。 Go のよくある間違いとして、ループのイテレーター変数の参照をループの中で使ってしまうという間違いがあります。 イテレーター変数のアドレスは 1 イテレーションごとに変わらないので、その参照をそのまま配列に append すると配列の結果が全て同じ値になるといったことが発生してしまいます。この問題はよくある間違いとして Go の wiki にも取り上げています。しかし、現状では公式でこの間違いを検出する静的解析ツールは用意されていません。

そこで、僕はメルカリのインターン で、イテレーター変数の参照をループ内で使っている箇所を検出する静的解析ツールを作成したのでそれを紹介したいと思います。

続きを読む

はてなブログからHugoに移行にして1年が経った

3 min read | #ブログ #Hugo

こんにちは、@p1ass です。

ブログをはてなブログから移行して一年経ったので、色々感想や分かったことを書いていこうと思います。

続きを読む

pupeteer内のReactコンポーネントに変数を渡す

2 min read | #React #pupeteer

こんにちは、@p1ass です。

タイトルの通り「pupeteer を動かしている Node が持っている変数を、pupeteer 内で動いている React コンポーネントに渡したい」という状況が発生したので、やり方をメモしておきます。

続きを読む

Twitterトレンド1位になった個人開発Webサービスの負荷対応記録

8 min read | #Go #GCP #Cloud Run

こんにちは、@p1ass です。

この記事は、LT 会のために作った Web サービスが何故かバズって Twitter トレンド 1 位 になってしまい、ひぃひぃ言いながら行った負荷対応をまとめたものになります。 スケーラビリティを全く考慮していない LT 会用の雑な Web サービスを、どのように改善していったのかについてまとめることで、個人開発者の参考になれば良いなと思っています。

なお、ここで書かれている内容は Production Ready なサービスを作る上では当たり前なことがほとんどです。本当の高負荷トラフィックを裁くための知見は出てこないので、予めご了承ください。

続きを読む

プログラミングにおける「勘」とその鍛え方

2 min read | #ポエム

チーム開発でレビューをしていると、「パット見は問題なさそうだが、なんかバグってそう」と感じることがあります。

これは全く理論的な気づきではなく、直感的な「勘」なのですが、意外と精度良くバグを発見できることが多いです。1

ある時、友人に「そういう勘ってどうやって鍛えるんですか?」と聞かれました。とっさに「経験かな。」と答えたのですが、確信があるかと言われると微妙です。「どういう経験を積めばいいのか?」と聞かれると答えられなかったと思います。

最近、改めてこの話題について考える機会があったので色々考えてみたのですが、「良いコードを読んだ回数に比例して勘が冴えるようになる。」 という結論にたどりつきました。

このブログでは、その結論に至るまでの思考をメモしておこうと思います。

続きを読む

[Go] スライスのfor rangeループ内で新しいスライスにappendしたらバグらせた

2 min read | #Go

久々にポインタ関連でバグらせてしまったので、自戒のためにメモしておく。

tl;dr

  • for range ループの value は常に同じアドレス値を取る。
続きを読む