エムスリーテックブログ

エムスリー(m3)のエンジニア・開発メンバーによる技術ブログです

今どきの Go の書き方まとめ (2020 年末版)

こんにちは、m3 エンジニアリンググループ CTO 矢崎(id:Saiya)です。

過去に Go 言語の仕様を一通り見た経験があったのですが、久しぶりに Go のコードを最近読み書きした際に、ここ数年の Go 言語やエコシステムの進化による変化もあり、発見やハマりが多々ありました。

f:id:Saiya:20201202203554p:plain
Go 言語公式のロゴもスピード感ありますね。

同じような迷い・回り道をしてしまう方ももしかしたらおられるのではないかと思いますゆえ、 エムスリー Advent Calendar 2020 6 日目の記事として、筆者が実際に「最初から知っていれば時間を無駄にしなかったのに...!」と感じた知見をざっくばらんにシェアいたします。

本記事がどなたかの一助になりますと幸いです。 なお本記事の内容は筆者個人の理解・自身で直接読み書きしたユースケースの範囲での知見であり、全ての Go 利用事例に当てはまらない点も含みうります。

  • エラー処理まとめ (go >= 1.13, 2019 年 9 月リリース)
  • エラーへのスタックトレースの付与とエラーの一意性
  • 標準型で引っかかりやすいポイント
  • 並列処理の goroutine のエラー集約には golang.org/x/sync/errgroup が便利
  • 複数ある型変換の構文の区別
  • goroutine は preemptive multitask (go >= 1.14)
  • Context の扱い
  • テストコードを書く際にモレがちな点
  • アサーションライブラリ
  • テストコードにおけるエラーのチェック
  • private メンバのテスト
  • テスト実行とカバレッジ採取
  • Meta Linter のススメ
  • go.mod の不要な記述の自動検知
  • ビルド時の工夫
  • CREDITS の生成
  • CI 用のツールの go.mod での扱い
  • (VS Code などの gopls LSP 利用時) サブディレクトリに go.mod がある構成への対応
  • We are hiring!
続きを読む

Sentry の JavaScript SDK に送った Pull Request がマージされた話

この記事はエムスリー Advent Calendar 2020 の5日目の記事です。

エムスリーエンジニアリンググループの松原(@ma2ge)です。今回は現在担当しているエムスリーデジカルでも利用している Sentry の SDK に Pull Request を送った話をします。ちょっと昔話とはなるのですが、1つの Pull Request には1つの物語があるということでご覧いただければと思います。

続きを読む

クラウド電子カルテサービスのSLO監視を再検討してみた話

本記事は エムスリー Advent Calendar 2020 の4日目の記事です。

こんにちは、エンジニアリンググループの高橋(@tshohe1)です。

これまでは全チームを横断的に見る SRE チームで主に働いていたのですが、数ヶ月前からサービス側のチーム(電子カルテチーム)にも参加するようになりました!
参加時のミッションはクラウド電子カルテ「エムスリーデジカル」(以下デジカル)のアーキテクチャ刷新にあたり監視周りの設定を1から検討する」というもので、本記事はその流れをまとめたものになります。

続きを読む

Rails の認証機能を JWT を使ったマイクロサービスに切り出したった

この記事はエムスリー Advent Calendar 2020 3日目の記事です。まだまだ面白い記事が続々投稿されるので、ぜひぜひ読んでみてください!

エムスリーエンジニアリンググループの青木(@blue_1617)です。 日々「エムスリーデジカル」を作ったり YouTube 見たりしてます。最近は「ピクミン3」をクリアしました。

さて、今回は Rails で認証マイクロサービスを作った話をします。 ちなみにサービスの名前は Gatekeeper です。かっこいいでしょう??

続きを読む

エムスリーのQAチームが目指しているもの

こんにちは。エムスリーエンジニアリンググループ QAチームの城本です。

f:id:yuki_shiro:20201127101508j:plain
本文には関係ありませんが、先日散歩したときに見かけた紅葉です。
少し前ですが、DevLoveさんの主催で行われたイベント「あなたの知らないQAチーム、QAエンジニアの世界」で、エムスリーのQAチームが目指している方向性についてお話させてもらったので紹介します。 当日の発表資料はこちらです。 www.slideshare.net

「あなたの知らないQAチーム、QAエンジニアの世界」とは

イベント概要はこちら。 devlove.doorkeeper.jp

このイベントは、以下の趣旨で企画され、私はその中で「QAチームがある程度出来上がっている組織」についてお話ししました。

QA(Quality Assurance)チーム、QAエンジニアの役割や業務内容は、 組織や開発スタイルによってさまざまであると感じています。 今回のイベントでは以下のような話を通してQAチームやQAエンジニアのいろいろなかたちについて知り、何かを考えるきっかけにしたいです。

現在のQAチームは「低コストで高品質の製品を創る、高速リリースが可能な開発チームを創る」を目指しています。 発表の中では、これを目指すに至るまでの経緯を過去のNG事例を紹介しながらお話しました。 また、実際のQAチームの仕事をどのように進めているのかと、仕事の進め方の背景となる会社の文化も少しご紹介しています。 詳しくは当日の発表資料を御覧ください!

会の中やTwitterのタグで色々質問をいただきましたが、当日回答しきれなかったものもあるので、こちらで回答いたします。

続きを読む

コードリーディング: Go 標準ライブラリ net/http/httputil ReverseProxy での WebSocket の取り扱い

エンジニアリンググループの山口 (@no_clock) です。

クラウド電子カルテ「エムスリーデジカル」のシステム水平分割(参考)を実施するにあたり、 HTTP リクエストを分割システム群にルーティングするリバースプロキシを実装しました。実装規模は Go 言語で 500 行ほど。既に本番環境で運用しています。

この記事は、その際のコードリーディング内容を整理したものです。なお、 エムスリー Advent Calendar 2020 2 日目の記事です。

続きを読む

Delayed::Job の性能劣化に pg_repack + Sidekiq で挑んだ話 & 12/14(月) デジカル採用説明会開催決定!

この記事はエムスリー Advent Calendar 2020 1日目の記事です。 明日からも面白い記事が続々投稿されるので、ぜひ購読・拡散お願いします!

エムスリー エンジニアリンググループの瀬越です。 医療に貢献するプロダクト『エムスリーデジカル』を日々作っています。

突然の告知ですが 12/14(月) 19:00~ 「急成長を続けるクラウド電子カルテ『エムスリーデジカル』技術 & 組織大公開!」と題して、エンジニア採用説明会を行います! 技術だけでなく、ビジネス・組織のチャレンジまで赤裸々に語りますので、是非ご参加ください!

m3-engineer.connpass.com

今回は Delayed::Job の性能劣化に pg_repack + Sidekiq で挑んだ話をします!

続きを読む