私が今現在最も使っている言語が Golang で、最も注力しているものが Kocha という WEB アプリケーションフレームワーク開発である。
Golang とは Go言語 のことで、Go だとググラビリティが低すぎるため Golang と書いている。
さて、Golang の WEB アプリケーションフレームワークを作っていると言うと大抵の人がこのようなことを言う。
「Go で WEB (サービス|アプリ)を作ろうとは思わない。」
なぜだろうか。Golang が静的型付け言語で事前にコンパイルが必要であり、Rails や Django に比べてアドバンテージが無いからだろうか。
実際 WEB 開発に於いてのアドバンテージは無いに等しいし、静的型付けが必要であれば、Java があり、Scala があり、Play Framework がある。Golang である必要が無い。
ではなぜ私は Golang の WEB アプリケーションフレームワークを作っているのだろうか。もちろん明確な理由がいくつかある。
速い
Golang はバイナリにコンパイルされるため実行速度が速い。単純に考えて、仮に Rails や Django の 10 倍の速度が出るとすると、10 台のサーバーが 1 台にできる。
もちろん実際にはネットワークなども絡むためそう単純ではないのだが、それでもサーバーの台数は減らせるものと思われる。
適度に固く、書きやすく読みやすい
私見だが、Golang は C 言語以上 Python 未満という位置づけの言語のような印象である。
型システムがあるためそれなりに固くできるが、動的型付け言語のような書きやすさや読みやすさもそれなりにある。要はバランスが取れている。
バイナリにコンパイルされる
これまでは Golang 自体の利点であったが、これが Kocha を開発している一番の理由である。
ではなぜバイナリにコンパイルされることが嬉しいのかであるが、理由は 2 つある。
1. デプロイの容易さ
Golang は動作に必要なライブラリは全てコンパイル時に静的リンクされるため、サーバー側に依存ライブラリを入れる必要が無くなる。
また Kocha ではオールインワンバイナリと呼んでいるが、テンプレートファイルや静的ファイルを全て 1 つのバイナリにまとめる機能がある。
オールインワンバイナリの場合、コンパイルされた 1 つの実行ファイルのみをデプロイすればいいためデプロイツールを使う必要は無く、単に rsync や scp で転送すれば良いだけになる。
余談であるが、Kocha は Graceful restart が可能なので、サービスを停止することなくデプロイが可能である。
2. オンプレミスの想定
例えば自社のとある ASP のサービスを Rails で開発、運用しているとしよう。ここでとある顧客にオンプレミスで提供することになった。
その場合、オンプレミスなのでソースコードがそのまま顧客のサーバーに置かれるということになる。
もちろん契約書などで縛るのだろうが、実際にソースコードの閲覧、変更などが可能であるため、技術、ひいては資産の流出になり得るのではないかということを思うわけである。
まとめ
以上が、私が Golang の WEB アプリケーションフレームワークを開発する理由である。
ただ、私は Golang に魅了された 1 人であり、結局のところ Golang で WEB 開発をしたいと思っているのが最大の理由であることも否定できない。