Carpe Diem

備忘録

Bigtableで複数クラスタ構成におけるデータ整合性の保証

背景

Bigtableレプリケーションを有効にしたマルチクラスタ構成にすることで負荷分散、高可用性を保証することが可能です。

一方でマルチクラスタにすることで

といったデータ整合性での問題が発生します。

今回はその対策としてアプリプロファイルを用いた方法を紹介します。

プリプロファイルとは

cloud.google.com

プリプロファイルはリクエストのルーティングや単一行トランザクションの許可するかどうかを制御する設定です。

インスタンスであらかじめ作成しておき、SDKなどでアプリプロファイルを選択して使うことが可能です。

続きを読む

Bazel を使う上での Tips

概要

Bazelを導入する過程で学んだTipsをまとめます。

環境

  • Bazel v4.2.2

Tips

bazeliskを使う

Bazelのバージョンを環境別に管理したい場合、bazelbuild/bazeliskを使うのが良いです。

.bazelversionに以下のようなバージョンを書いておけばそのバージョンでビルドしてくれます。

4.2.2

インストールはhomebrewでできます。

$ brew install bazelisk

macOSであればbazelエイリアスが勝手につくので、bazelコマンドで中身はbazeliskが実行されます。

続きを読む

Bazelを使ってみる その6(テスト)

概要

Bazel解説第6弾です。

Bazelを使ってみる その1(Goのビルド) - Carpe Diem
Bazelを使ってみる その2(protobufのビルド) - Carpe Diem
Bazelを使ってみる その3(docker imageのビルド) - Carpe Diem
Bazelを使ってみる その4(gRPCのビルド) - Carpe Diem
Bazelを使ってみる その5(リモートキャッシュ) - Carpe Diem

今回はテストについて説明します。

環境

  • Bazel v4.2.2

各種テスト

Goにおけるテスト周りでは以下の考慮できてれば大丈夫でしょう。

  • unit test
    • raceフラグを付けたい場合
  • coverage
  • integration test

今回は以下のようなファイル構成の際において

├── dice
│   ├── dice.go
│   ├── dice_integration_test.go
│   └── dice_test.go
├── docker-compose.yml
├── go.mod
└── go.sum

それぞれのやり方を説明します。

続きを読む

fatal: could not read Username for 'https://github.com': terminal prompts disabledが出たら

概要

CIツールでプライベートリポジトリをgo getしようとするとたまに遭遇する

fatal: could not read Username for 'https://github.com': terminal prompts disabled

の対応方法をまとめます。

原因

go getはデフォルトだとHTTPSで通信しようとしますが、プライベートリポジトリだとそこへアクセスするための認証情報が必要です。
その認証情報がないため上記のエラーが発生します。

HTTPSSSH

GitHubHTTPSSSHで通信をすることが可能です。なのでやり方としては大きく3つあります。

HTTPSでやる場合

  1. $HOME/.netrcに認証情報を書く
  2. 認証情報を使って$HOME/. gitconfiginsteadOfの設定をする

ここで言う認証情報は通常のログインID&PWであったり、PAT(Personal Access Token)だったりします。

SSHでやる場合

  1. sshの設定をして$HOME/. gitconfiginsteadOfの設定をする
続きを読む

Bazelを使ってみる その5(リモートキャッシュ)

概要

Bazel解説第5弾です。

Bazelを使ってみる その1(Goのビルド) - Carpe Diem
Bazelを使ってみる その2(protobufのビルド) - Carpe Diem
Bazelを使ってみる その3(docker imageのビルド) - Carpe Diem
Bazelを使ってみる その4(gRPCのビルド) - Carpe Diem

今回はリモートキャッシュについて説明します。

環境

  • Bazel v4.2.2

Bazelのキャッシュ機構

Bazelにはリモートキャッシュの仕組みがあります。これはキャッシュをGCS(Google Cloud Storage)などの外部ストレージに置き、ビルド時にそのキャッシュをダウンロードして利用する仕組みです。

これにより、CIであったり初めてリポジトリをビルドするメンバーに対して

  • ビルド時間を短縮することができる
  • ビルド時にコンピューティングリソースをできるだけ使わせない

といったメリットがあります。

続きを読む

Bazelを使ってみる その4(gRPCのビルド)

概要

Bazel解説第4弾です。

Bazelを使ってみる その1(Goのビルド) - Carpe Diem
Bazelを使ってみる その2(protobufのビルド) - Carpe Diem
Bazelを使ってみる その3(docker imageのビルド) - Carpe Diem

今回はgRPCをビルドしてみます。

gRPCは2通りの設定方法があります。

今回は簡単なgazelleのやり方で説明します。

環境

  • Bazel v4.2.2
続きを読む

GitHub ActionsでConventional Commitsを満たしているかチェックする

概要

Conventional Commits というコミットメッセージの規約があります。

これを守ることで

  • 意味のあるコミット粒度&メッセージになる
    • あとから振り返りやすい
  • Change Logsなどで自動化ツールを活用しやすい

といったメリットを享受できます。

しかし新しいメンバーなど、Conventional Commitsを知らない人が加わるとルールを守られないコミットが含まれるため、PR時などで機械的にチェックしたいです。

今回はGitHub Actionsでそれをチェックするようにします。

環境

  • commitlint v16.0.0
続きを読む