🔑

Goの特性をFour Keysで説明する試み

2023/05/30に公開

はじめに

Go言語は、様々な特性を持っていますが、 例えばシングルバイナリといった特性はメリットとして理解しづらいかもしれません。
そこで、多くのエンジニアに受け入れられ始めているDevOpsのFour Keysの視点から、Go言語の特性を整理し、そのメリットを説明してみたいと思います。

Four Keys

Four Keysとは、エンジニアリング組織のパフォーマンスを向上させるための指標です。
この指標は、以下の4つの要素から成り立っています。

  • Deployment Frequency(デプロイの頻度)
  • Lead Time for Changes(変更のリードタイム)
  • Change Failure Rate(変更障害率)
  • Time to Restore Service(サービス復元時間)

それぞれの要素について、Go言語の特性を考慮しながら見ていきます。

Deployment Frequency(デプロイの頻度)

シングルバイナリ

Go言語では、プログラムをデプロイする際には、シングルバイナリの生成と実行だけで済みます。
これにより、デプロイが容易になり、デプロイへの心理的負担を大きく減らせます。

Lead Time for Changes(変更のリードタイム)

シンプルな文法

Go言語の文法はシンプルで明示的です。
このシンプルな文法により可読性が高く、コードのレビュー時間を短縮できます。
また、Go言語は書くことが面倒と言われがちな言語です。
しかし、最近ではシンプルな文法によりCopilotやChatGPTなどのAIツールとの相性が良いことから、このデメリットは小さくなってきていると思います。

標準ライブラリ

Go言語には強力で豊富な標準ライブラリが用意されており、追加の依存関係を最小限に抑えることができ、開発体験を向上させます。
また、CI/CD時には依存関係のないシングルバイナリを使用するだけで済み、イメージサイズを小さくすることができます。
これにより、CI/CDの時間を短縮することができます。

コードフォーマット

Go言語にはコードのフォーマットを自動的に整える機能が備わっています(go fmt)。
そのため、レビュー時のコードフォーマットに関する議論を限りなく少なくできます。

高速コンパイル

Go言語のコンパイルは高速であり、CI/CDの時間を短縮することができます。

Change Failure Rate(変更障害率)

静的型付け

Go言語は静的型付け言語であり、コンパイルエラーが発生し、タイプミスや型の不一致などのバグを早期に検出できます。
これにより、開発段階でエラーを見つけ、ランタイムエラーを減らすことができます。

静的解析

Go言語には静的解析を行うための標準パッケージが提供されており、静的解析のエコシステムも活発です。
より厳格なチェックを行うCIシステムなどを構築しやすくなります。

エラーハンドリング

Go言語ではエラーハンドリングが明示的であり、いわゆる例外処理の仕組みがないため、エラーハンドリングが簡潔で明確になります。
開発者はエラーや障害が発生しにくいコードを書きやすくなります。

Time to Restore Service(サービス復元時間)

シンプルな文法

Go言語は先述したように、シンプルかつ読みやすい文法を持っています。
これにより、開発者はコードを迅速に理解し、障害の原因を特定しやすくなります。

マルチプラットフォーム

Go言語のビルドシステムはマルチプラットフォームを意識して設計されており、異なる環境でのバグ再現が比較的容易です。
例えば、本番環境のLinuxで発生したバグを、ローカルのMac環境で再現しやすいです。

高速コンパイル・シングルバイナリ

前述したように、Go言語のコンパイルは高速であり、シングルバイナリを使用するだけで良く、バグ修正や変更の反映までの時間を少なくできます。

後書きとまとめ

以上、Go言語がデリバリのパフォーマンスを向上させる上で優れた言語であることが、理解しやすくなるのではないでしょうか。
筆者はGo言語に関しては実はそこまで詳しいわけではない・勉強中なので、知識不足や論理の誤りなどあるかもしれません。
コメントなどで是非教えてください!

Discussion