Edited at
Go2Day 3

Go製WebToolKit Buffalo[概要編]


はじめに

Golang UK Conference 2017で紹介されていたGo製WebToolKit。日本ではまだまだ事例がなさそうなのと気になっていたのでREADME公式ドキュメントを読んで概要をまとめた。ここではBuffaloとは?を理解できるよう書いていく


概要

BuffaloはGoのWebエコシステムに沿ってWebアプリケーション開発が出来るソフトウェア。Goを使って楽に素早くWeb開発できるように設計されている。

ここでエコシステムと言ってるのはBuffaloは大半の機能を独自で実装しているわけではなく、既存のpackageを利用して成り立っているからである。

Buffaloはフロントエンド(JavaScript、SCSSなど)からバックエンド(データベース、ルーティングなど)をWebプロジェクトに含めた状態で生成し起動する。生成したプロジェクトでは簡単にWebアプリケーション用APIの開発ができる。

Buffaloは単なるWebフレームワークではなく、高速にサービスを開発するための総合的な開発環境とプロジェクト構造を提供する。

ちょっと英語の翻訳が上手くできてないが、一言でまとめると「RailsやLaravelのようにCLIでプロジェクトを作成したり便利なライブラリを含んだWebフレームワークみたいなモノ」と理解してよいと思う。


開発環境要件

buffaloを動作させるには以下の環境構築が必要となるがフロントエンドやデータベースを使用しない場合は設定はオプション扱いとなる。


事前インストール


  • Goの開発環境


  • $PATH$GOPATH/binを通している

  • Goversion 1.9.7以上


フロントエンドの環境(オプション)


  • Node.js ver8以上

  • yarnかnpmでwebpackをインストールしている


データベースの環境(オプション)

データベース(sqlite)を使用しない場合は設定不要

- SQLite3を使用する場合、mattn/go-sqlite3を使用するためGCCなどのCコンパイラが必要


install

$ go get -u github.com/gobuffalo/buffalo/buffalo


依存してるGo package

buffaloは車輪の再発明をせず、すでにGoコミュニティに存在する便利なpackageを利用してプロジェクトが成り立っている。

依存しているGo packageは巨人の肩に乗るという事でSHOULDERS.mdとしてリストアップされているので目を通すと良い


主な特徴


  • URLルーティング


    • route, session, cookieなどはWebToolBoxであるgorriaを使用



  • HTML Template



    • plushというテンプレートを使用。html/templateを使用する事も可能



  • 便利なTOOLBOX(bufffaloコマンド)

  • Test Suite

  • ホットリロード

  • フロントエンドパイプライン(option)


    • webpackを使用



  • Models/ORM(option)



  • タスクランナー(option)




buffaloコマンド


プロジェクトの作成

$ buffalo new <name>


[開発時]Webアプリケーションの実行

開発時はホットリロードがサポートされている。buffalo devコマンドで.go.htmlを監視しファイル更新時にはホットリロードが実行される。リロードと表現しているが内部的にはgo buildwebpack watchを実行している。

$ buffalo dev


[本番環境]Webアプリケーションの実行

本番環境ではgoビルドしたバイナリを実行する


ユニットテスト

buffalo testコマンドを実行すると、./vendorディレクトリをスキップしてtestコードを実行できる。depやglideを使用してpackage管理している場合はvendorディレクトリのテストは自動でスキップされる。

$ buffalo test


依存しているパッケージ達

READMEではShoulders of Giants(巨人の肩に乗る)と表現され、車輪の再発明はせずにすでに存在するpackageに依存している。


所感

RevelのようなフルスタックなWebフレームワークと思ったが内容を追っているとpackageを上手に組み合わせてプロジェクトを構築しているという印象。始めから大量のpackageを内包せずにオプションサポートしてるのでフルスタックという感じでもない。

gopher的にはミニマムな構成でのpackage群で頑張るカルチャーがあると思うが、例えばこれからWeb開発にGoを導入してみたいが既にあるpackageを使い楽をしたいというチームにはbuffaloは良いかも知れない。

Rails, Laravelとか使用していた人がGoでWeb開発する時に、取っつきやすさがあると思うので候補とするのはありだと思う。

実際にサンプルWebアプリケーションを作った記事は別のポストに書く予定です。