昨日発表した WP Guard ですが、Web担当者Forumさんに掲載頂いたりIT系のメディアサイトに掲載頂いたりしたからか、お陰様で早速お問い合わせを頂くなどしております。取り上げて頂いたメディア様、有難うございます。

20161006_0848.png
(via Wikimedia Commons. Thanks Renee French. CC BY 3.0)

さて WP Guard ですが、コア部分はGo言語で開発してます。上はお馴染みGo言語の象徴Gopherくん。可愛いなぁ…って話はさておきGo言語も2009年登場らしいですからもう7年ですね。早いです。

誰得か分からない話ですが、今回ウチがなぜGo言語を選択したのか備忘録を兼ねて書いてみようと思います。何かの参考になれば幸いです。

昨日のエントリで WP Guard に内包される的化エンジン espar は

いわゆるクローラーに近いものなので

と書いたのですが、実のところクローラーです。ただWebサイトの静的化を目的にしてるので従来のクローラーとは若干違うんですね。元々は、既存のモノを駆使する方法も検討してたのですが、要件を満たせず結局ゼロベースで作ることにした次第なのです。

作るぞ!となった時、顧客満足とビジネス推進という観点で考えたのは5つのことでした。

1. デプロイがし易いこと

今回、静的化エンジンを御客様環境に入れて頂き、稼働させる為のライセンスを発行するという形態を前提にしてました。実行は御客様サーバ。WordPressをはじめCMSが稼働している環境それぞれで簡単に動くのが良い。フレームワークはこれ、ライブラリはこれ、そのインストールはこう、設定はこう…という環境構築の手間を極力無くしたかったのです。

2. クロスプラットフォームに対応すること

前述の通りエンジン配布を考えてましたので、御客様の環境によって使えないとかは極力避けたいなと。動作環境の制約はビジネス拡大シーンで制約になる、ということを以前のビジネス(SYNCNEL)で学んでいたので、過度な労力なくLinuxでもFreeBSDでも、WinでもMacでも動かせるようにしたいと考えました。

3. 並列処理の実装が容易であること

全ページを漏れ無く静的化する際に、1ページずつ順番に処理をしてたら時間がかかります。高速な処理の為に、同時並行で処理しながら「もうそのページは静的化終わったよ」と協調して無駄なく動けることも必要でした。並列処理は往々にしてカオスな世界になりがちですが、それをシンプルに実現できることも重視しました。

4. コンパイル型言語であること

これはビジネス要件の色合いが強いですね。ソースコードをそのままばらまく事になってしまうのは避けたかったという思いがあります。ウチが困る…というよりも販売頂くパートナーさんを困らせる事になるからですね。

5. 未経験なら学習コストが低いこと

既存言語なら別にokですが、新しい言語を学ぶなら学習コストは低いに越したことはありません。ネット界隈や書籍を含め、先人の知恵の量が結構重要。情報が多ければ学習コストは下がります。将来の人財戦略にも影響出るだろうし、マイナー過ぎる言語も避けたいと思いました。

 

いわゆるLL言語系はまっさきに除外され、javaやscalaも考えなくは無かったのですが、全体を良い感じに満たすのがGo言語だったと。というか正直、まさにGo言語で何か作るならこういうものを…というお手本的なカテゴリのものだったこともあり、Go言語以外に選択肢は無いなぁという感じでした。

今はやりのGo言語で作ったらネタ的に面白いだろうなぁとか、エンジニアが新たに体得するスキル的にも良いだろうなぁ..って気持ちありましたけどね(笑)

あ、一つ加えるなら誕生から9年を経て、ある程度成熟してきたように思えたってのもありますかね。これが5,6年前とかだとちょっと悩んでたかも知れません。

20161006_0939
(Thanks! the photo on flickr by Yuko Honda CC BY-SA 2.0)

そんなこんなでGo言語に決めて @t0shiya に開発担当して貰いました。手前味噌ながら、良いものができたのではないかと思います。営業や他の事業のサポート業務で忙しいなか頑張ってくれました。

何度もスクラップ&ビルドをしながら…だったですが、ここまで半年かからなかったですね。Go言語による開発のスピードが早いのは噂通りでした。最初のバージョンでは、実現できたことに対するソースコードの少なさにビックリしたものです。

商品構想を練ってステルスで紹介などもして、Go言語で書いた espar を PHP による WordPress プラグインで包んで WP Guard は形になりました。実際作ってみて、エンジンやライブラリ系はGo言語で、インターフェースやフロントは従来の軽量言語でという組み合わせは、一つの理想系だなと思いましたね。

ウチで今後何かを作る時はGo言語の採用をまず考えると思います。実際に使ってるのを傍らで見ていて、開発効率がUPする仕組み、クオリティが上がりやすい仕組み、が言語仕様として散りばめられているのが本当に素晴らしいと思ったんですよね。そういう意味でも良いなと。Go言語、バンザイ。