TIS ENGINEER NOTE

ITエンジニアのためのキャリア向上ノウハウブログ

プログラミング

Go言語でWebサービスを作る時のガイドライン

更新日:

どうも、フリーランスエンジニアのてぃすです。

今日は近年需要が増してきているGo言語。現役エンジニア・エンジニアを目指して勉強中の方の中でも気になっている人は多いでしょう。

そこで今日はGo言語を用いてWebサービスを作る際にチェックしておくべきことをまとめて見ようと思います。

なぜGo言語なのか

先にも申した通り、現在Go言語の需要は急増しています。

  • シンプルでありがながら強力な言語仕様
  • Googleが作ったという安心感
  • 実行速度が速い

などの理由から、新規プロダクトに採用する企業がどんどん増えてきています。

また俗な話をすると、

  • 比較的新しい言語であるため、人材が不足している
  • 資金に余裕のある企業が導入するケースが多い

という理由から高単価・高収入を狙いやすい言語と言えます。

Go言語でWeb開発

そんなGo言語ですが、WebエンジニアからするとRubyにおけるRuby on Rails、PHPにおけるLaravelのような「Go言語でWeb開発といった◯◯」といった立ち位置のWebフレームワークが存在しないため、少しとっつきにくい印象を受けるかもしれません。

そこで今回の記事では、Go言語でWebサービスを作る際の基本的な流れ、人気のフレームワーク、検討するべきこと、について解説していきます。

主にWeb開発経験者の読者を想定して書いていきますが、初心者の方でも雰囲気をつかめるよう丁寧に解説していければと思います。

前提

Go言語のバージョンは記事公開時最新の1.12を利用する前提で説明していきます。

またこの記事はGo言語でWeb開発を行うさいに「何を調べればいいか分からない」を解消することを目的に書いていきます。フレームワークの詳細やGo言語自体の開発手法については別記事を参照いただくことをオススメします。

開発環境

まず開発の基盤となる環境についてお話していきます。

ディレクトリ構成

少し前までGo言語はGOPATHという環境変数に設定したパス配下で開発を行う必要がありましたが、1.11以降はModulesという機能が提供されたため任意のディレクトリで開発を行うことが可能となりました。

そのため、まず開発を始める際は好きなディレクトリを作成後、Modulesの初期化コマンドを実行します。

~/workspace > mkdir go-web                                                                                                                                                                                                         [master]
~/workspace > cd go-web                                                                                                                                                                                                            [master]
~/workspace/go-web > go mod init go-web

以降はこのディレクトリ配下にファイルを作成し、開発を進めていく形になります。

実際に配置するディレクトリ構成については厳密な決まりがあるわけではありませんが、以下のリポジトリなどにおいて推奨されている構成は存在しています。

GitHub - golang-standards/project-layout: Standard Go Project Layout
GitHub - golang-standards/project-layout: Standard Go Project Layout

Standard Go Project Layout. Contribute to golang-standards/project-layout development by creating an ...

続きを見る

とはいえやはり厳密に決められているわけではないので、ライブラリの推奨構成・exampleに従ったり、ソース設計に応じて柔軟に配置していく形でも問題はありません。

ライブリロード

開発を行う中で是非とも欲しいのがライブリロード機能。これがないとコード変更するたびにサーバーの再起動が必要となり、開発効率が下がってしまいます。

Go言語にはいくつかライブリロード機能を提供してくれるライブラリが存在しますが、僕がオススメするのはrealizeというライブラリ。

機能豊富でありながら、ライブリロードをしたいだけならシンプルに動かすことができるので使いやすいです。

日本語の解説記事は以下のページが丁寧に説明されているので参考になるかと思います。

[Go] Realizeが便利なので、もう少し仲良くなってみる - Qiita
[Go] Realizeが便利なので、もう少し仲良くなってみる - Qiita

続きを見る

Webフレームワーク・ライブラリ

Go言語にはnet/httpという標準パッケージが用意されており、このパッケージを使うだけでも比較的シンプルにhttpサーバーを立ち上げることができます。

ただGo言語を始めたばかりだったり、Web開発に関する知見が少ない状態でnet/httpを使って開発を行うのは少ししんどいかもしれません。

そこで僕は最初のうちは人気と実績のあるフレームワークまたはライブラリを利用することをオススメします。

gin-gonic/gin

GitHubのスター数も多く、企業で採用されている話もよく聞くのがhttp周辺の便利な機能を揃えたgin-gonic/ginです。

ルーティング周りもシンプルに記載することができ、速度も速いことから高い人気を誇ります。

ドキュメントの解説も丁寧ですので、迷ったらこちらを選んでおくといいでしょう。

astaxie/beego

astaxie/beegoも有力な選択肢に入ります。

ginがhttpアクセス周りの実装のみをサポートするのに対し、beegoはCLIツールやORMまでを備えたいわゆるフルスタックフレームワークに近いWebフレームワークです。

もし以降で説明するようなDBへのアクセス手段などといったWeb開発に必要な基本機能を選定するのが億劫な場合や、まずはGo言語でWeb開発を行う際の雰囲気を掴みたいという場合、選択してもいいでしょう。

以下の記事が日本語でよくまとまっているので、気になった方は目を通してみることをオススメいたします。

Go言語のWebフレームワークBeegoを使って良かったこと - Qiita
Go言語のWebフレームワークBeegoを使って良かったこと - Qiita

続きを見る

RDB連携・ORMなど

Webサービスを開発するとなると、必ずといっていいほど必要となってくるデータベース接続。

httpと同様にGo言語では標準でdatabase/sqlというパッケージが提供されており、こちらを使うことでクエリを発行し、データベースからデータを取得してくることが可能です。

しかしこのパッケージだとデータを取得して構造体と紐付けるのが手間だったりするため、基本的にはより高機能なライブラリを導入するケースが多いです。

先に紹介したbeegoのようなORMが内蔵されているフレームワークであれば、そのORMを利用すればいいですが、そうでない場合ライブラリの利用を検討することになります。

そこでここでは実際に企業でも採用されており、人気のあるライブラリを紹介します。

jinzhu/gorm

RubyにおけるActive RecordやLaravelに内蔵されているEloquentなどに慣れ親しんでいる人にオススメなのが、jinzhu/gormというORMライブラリ。

マイグレーション機能も有しており、ドキュメントも充実していることから強い人気を誇っています。

参照・更新ともにプログラマブルに実装することが可能で、1対多などのリレーションについてもいい具合に構造体にマッピングしてくれるので、サクサク開発を進めることが可能です。

jmoiron/sqlx

RDBを操作するときはSQLをガリガリ書いていきたい、という人にオススメなのがjmoiron/sqlxというdatabase/sqlパッケージを拡張する形で実装されたライブラリです。

基本的な使い方はdatabase/sqlパッケージに近いのですが、構造体への紐付けやトランザクション、クエリ発行の柔軟性という点でかなり便利に拡張されています。

特にORMだと躓くことが予想されるような複雑なデータ構造を扱う場合や、SQLに関する知識に自身のある人はこちらを使ってみるのもありでしょう。

View周りの実装

Webサービスを開発する場合、多くがユーザーに表示するための画面を用意することになります。

Go言語を利用してWeb開発を行う場合、WebAPIの形で実装を行い、フロントエンドはReact/Vueなどを使って描画するケースが多く見られます。

標準パッケージのtext/templateや他のテンプレートエンジンを利用してサーバー側でのレンダリングももちろんできますが、そういった実装を求められる場合はRailsやLaravelなどが選定されることが多いのでここでは説明を割愛させていただきます。

まとめ

いかがだったでしょうか。Go言語でWeb開発を始めたい場合に知っておくべきポイントについて紹介しました。

この記事で少しでもGo言語を使ったWeb開発を初める人が増えれば嬉しく思います。

閲覧いただき、ありがとうございました。

よく読まれている記事

エンジニア入門

2019/4/15

エンジニアは勉強し続けなければいけない職業なのか

こんにちは。フリーランスエンジニアのてぃすです。 最近は就職・転職する際にエンジニアを選択肢に含める人が増えてきています。 しかしエンジニアという職業を候補にあげるにあたって、 エンジニアは働きながら勉強し続けなければいけないのではないか? という疑問もよく見聞きします。 そこで今回はフリーランスエンジニアとして活動している僕の視点からこの疑問についての答えを説明していこうと思います。 結論 先に結論を述べると、 エンジニアは勉強し続けなければいけないのか? という疑問の答えはNOです。 決してエンジニア ...

続きを読む

エンジニア入門

2018/8/19

プログラミング初心者に贈る挫折しない為の3つの心構え

こんにちは、フリーエンジニアのてぃすです。 最近では未経験者からプログラマー・エンジニアへの転身を志しプログラミングを学習を始めている人が増えていますね。 しかし理解出来ない部分が出てきたり、モチベーションを保てずに学習途中で挫折していまうという話も多く耳に入ってきます。 そこで今回は文系出身から職業プログラマーへ進んだ僕が、挫折しないプログラミング学習の進め方・心構えについてお話していこうと思います。 目的が具体的にイメージできる教材を使用する プログラミングの学習を始めて間もないときに、 変数に値を代 ...

続きを読む

エンジニア独立

2019/4/15

他のエンジニアと差をつけるための面談前の下準備

こんにちは、フリーエンジニアのてぃすです。 僕は正社員から派遣、フリーランスへと転身する際に、絶対に妥協したくないという意志の元、半年ほどの間に10件近くの面談を体験してきました。 今日はその時の体験を元に、エンジニアが面談を受ける前に下調べしておくべきコンテンツについて紹介していこうと思います。 なぜ下調べが必要か エンジニアって面談を軽視している人が多いんですよね。 ある程度の経歴があるエンジニアは、売り手市場であることも手伝い、まあまあ満足できる就業先を得られるのでそこまで面談対策をじっくりしている ...

続きを読む

エンジニア独立

2019/5/29

エンジニア歴2年の僕がギークスジョブでフリーランスを目指してみた

ぼちぼちの偏差値の文系大学を卒業後、パッケージ運用系のIT企業に就職。9か月で退職。 その後特定派遣会社の正社員として働いてきた僕がなぜフリーランスを目指す気になったのか。 一番の理由はズバリ、お金が稼ぎたかったから。 正確にはもっと効率よくお金を稼ぎたかったからです。 こんな会社もう嫌だ・・・ 現在僕は正社員として2年以上継続して現場に赴き、プログラミングの業務に従事してきましたが、全く給料が上がらない。 ぶっちゃけると手取りが20万円に届かないレベル。ボーナスもお小遣い程度なので年収も悲惨。 給与明細 ...

続きを読む

エンジニア独立

2019/4/15

エンジニアがキャリアアップするための3つのテクニック

こんにちは、フリーランスエンジニアのてぃすです。 エンジニアという職業の中でも高収入とライフワークバランスを実現して充実した人生を送っている人もいれば、低い給料と長時間労働で疲弊しきっている人もいます。 僕も半年前まではエンジニアという職業を見限ってしまおうかと真剣に考えるほど、残念な状況にいました。 しかしこのまま終わってしまうのは悔しいと思い一念発起して行動を起こし、半年の間に月収を3倍以上あげることに成功しました。自分言ってて胡散臭い話ですが、実体験です。 キャリア向上を目指した行動の中には、意識し ...

続きを読む

-プログラミング
-

Copyright© TIS ENGINEER NOTE , 2020 All Rights Reserved Powered by AFFINGER5.