検索
特集/連載

JavaやPHPからの移行も簡単、改めてGo言語がオススメな理由KubernetesもDockerもGo製

Goを愛する筆者が、Goの魅力のごく一部を紹介する。JavaやPHPのコーディング経験があるなら移行も簡単だ。

PC用表示 関連情報
Share
Tweet
LINE
Hatena

 Go(言語)の登場は2009年だというのに、いまだ比較的新しく、主要プログラミング言語ほど幅広くは使われていない。Googleで生まれ、まだ歴史が浅いこの言語は、大規模システムでも機能することが既に証明されている。本稿では、開発者がGoを好む理由とCurveがこの言語を利用している方法を紹介する。

 Goは優れたスケーラビリティを備え、Goで書かれたサービスのメモリフットプリントは通常非常に小さくなる。コードは1つの静的バイナリにコンパイルされる。そのためサービスを簡単にコンテナ化して、ビルドやデプロイを大幅に簡素化することも可能だ。

 こうした属性を備えたGoは、「Kubernetes」などの高可用性とスケーラビリティを兼ね備えた環境に簡単にデプロイできる。マイクロサービスをビルドしている企業にとっては理想的な選択肢だ。

 Goは、APIをビルドするために必要な全ての要素を標準ライブラリとして備えている。

 簡単に使えてパフォーマンスの高いHTTPサーバが用意されているので、チームが新規プロジェクトを設計する際に直面する可能性のある一部の調査や停滞を取り除くことができる。JavaやNode.jsなどの言語を使った場合、こうした調査や停滞がチームの活力を大きくそぐ要因になることが多い。

自動整形

 グループのワークフローを円滑にするもう一つの方法がコードの整形だ。Goは自動整形が言語に組み込まれた(訳注)ことから、このコードの整形が大きな関心を集めている。

訳注:go fmtコマンド(実際に実行されるのは「gofmt -l -w」)。「go fmt ファイル名」と実行すると、対象ファイルの行間やインデントなどが自動整形される。

 Goでの開発経験が豊富なエンジニアを見つけるのは難しいかもしれない。だがGoの習得は非常に簡単だ。CurveはJavaやPHPのスキルを備えた人材を採用して、Goでのスキルアップを図り、大きな成功を収めている。

 Goでリリース可能なコードの作成が活発にできるようになるまで、通常1〜2週間しかかからない。Curveでは、開発者が最終的にはGoを好んで利用することも分かっている。実のところ、Goは単純だが実効性の高い言語だ。Goでは「見た通りのものが得られる」ことを善しとする。つまり、複雑な抽象化はほとんどなく、読みやすく明解なコードになる。

 同僚が作成したコードでも、Kubernetesなどの大きなオープンソースプロジェクトでも、第三者によるレビュー作業が大幅に容易になる。

 Curveはテスト駆動型開発(TDD:Test Driven Development)を強く推奨している。Goには優れたテストフレームワークが組み込まれている。ファイル名に「_test.go」と付け加え、そのファイルに幾つかのテスト関数を追加するだけで、全ての単体テストが自動的かつ極めて迅速に実行される。その結果、TDDを簡単に習得して開発サイクルの一環として利用できるようになる。

点在する課題

 取り組むべき課題はまだ幾つかある。だが、そのことでGoの機能性が損なわれるわけではないとCurveは考えている。

 例えば、具体的な議論になっている特徴の一つに、明示的なインタフェースを備えていないという点がある。多くの開発者は明示的なインタフェースに慣れているため、この是非は分かれる。だが、どのようなインタフェースがあれば満足なのかを判断するのは難しいかもしれない。これは、他の言語のように「X implements Y」と記述しないことが原因だが、こうしたことはすぐに習熟して受け入れられる程度のことだ。

 GoogleのGo開発チームがそもそも依存関係の管理を見過ごしていたことも問題になる。これにはオープンソースコミュニティーが介入して、「Glide」や「Dep」を作成している。いずれも依存関係管理の問題を解決する上では立派な試みだが、これに付随する固有の問題も幾つか生まれている。

 Go 1.11以降はモジュール向けのサポートが追加され、これが公式の依存関係管理ツールになっている。これにはさまざまなフィードバックが返され、この分野の機能改善が間違いなく実現している。

活気あるオープンソースコミュニティー

 このように課題は見つかっているものの、活発なコミュニティーによってGoはさらなる改善を続けている。英ロンドンには、コラボレーションに非常に積極的かつ開かれた素晴らしいミートアップコミュニティーがある。誰もが気さくで親切で、Goのさらなる進化に協力して取り組んでいる。Goのオープンソースコミュニティーは盛況で、「Istio」などの革新的なプロジェクトも幾つかある。Kubernetesと「Docker」は全てGoで記述されている。

 このように、活発で革新的な割には簡単に理解できるようになっているおかげで、Curveのような企業の進化にはGoが理想的な言語になる。

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る