Gehirn Infrastructure Services の Public Preview 開始によせて

はじめに

こんにちは yosida95 です。 先ほど Gehirn News でお伝えしたとおり、 Gehirn Infrastructure ServicesPublic Preview を開始しました!

Gehirn Infrastructure Services はぼくがゲヒルンでアルバイトを始めた 2013年の8月からずっと開発に携わってきたプロジェクトで、いよいよ形になってこのように Public Preview を始められることに大変な感慨を覚えています。 おそらく10代最後になる大仕事が Gehirn Infrastructure Services であることを誇りに思います。

Gehirn Infrastructure Services が提供する新機能や技術的な詳細は会社のブログ、 Gehirn News で追ってご説明しようと思っていますので、この個人のブログではぼくが Gehirn Infrastructure Services にどのように関わってきたかを振り返りたいと思います。

GWS02

2013 年の時点では実は既存の Gehirn RS2 と Gehirn DNS の API を Go でフルスクラッチして、機能はそのままに信頼性とスケーラビリティを高めようとしていました。 当時のぼくは Go について文法を知っている程度で到底実務レベルではありませんでしたが、ひたすらコードを書いて読むことで知見をため、入社3日後にはプロダクトコードを書いていました。

このプロジェクト、 GWS02 はサーバー側のコードはほぼほぼ出来てきたという時点になって、エッジの効きすぎた API 仕様が仇となり主に古いブラウザとの互換性の問題が浮上しました。 その結果、検討を重ねましたがあえなく提供見送りとなりました。

これはぼくがゲヒルンの正職員となった 2014 年 4 月頃の話です。

Gehirn ID Center

ID Center はもともと GWS02 用の認証を担うために OpenID 2.0 Provider として Go で開発を始め、 GopenID のような成果もあったのですが、 Google などを始めとする各社が OAuth 2.0 を拡張した OpenID Connect へ乗り換える動きが活発になったため、急遽 OpenID 2.0 から OpenID Connect へ切り替えることにしました。

この時、 Go 言語で普通の Web サービスを作ることの辛さを感じていたので、既存のコードベースを捨てて慣れ親しんでノウハウもあった Python で実装を開始しました。 この時に作ったのが、 py3oauth2python-oidc です。

Gehirn RS2 PLUS

Gehirn RS2 PLUS はこれまでの RS2 で問題となっていた暴走プロセスによる他のユーザーへの影響や、 Production Ready が宣言される前に採用した ZFS on Linux の問題などを低減するために Linux Containers (LXC) でリソースが分離された新しいコンセプトのレンタルサーバーとして社長の @isidai さんが設計と技術検証をはじめました。

そしてアーキテクチャが固まってきた2014年10月にぼくに引き継がれ、まずはコンテナを作成するところから開発をはじめました。 コントロールパネルからデーモンプロセスの管理ができるプロセス機能は当初ありませんでしたが、 supervisord を RS2 PLUS の API から操作できるようにしたら最高便利だと思いついてそのまま実装したことから提供が決まりました。 開発の過程で LXC のバグを幾つか踏み抜いたので、その原因と回避方法を開発しつつ、簡単に直せそうなものは LXC にパッチを投げたりもしました。

Gehirn DNS

Gehirn DNS はこれまでの機能を踏襲しつつ、ゾーンのバージョン管理や、バージョンの指定時刻での自動切り替え、それに向けた TTL の自動調整(つまり、多くの人が「浸透」などの言葉に煙にまかれているレコードキャッシュ問題をエンジニアリングで解決する)などの新機能を盛り込んだサービスです。

なお、新しい Gehirn DNS をリリースして初めてのマイグレーションは、本日 0:30 の www.gehirn.jp でした。

Gehirn MTA

Gehirn MTA はこれまでにないメール送受信サービスとして SMTP サーバーのフルスクラッチ から始めた新サービスです。 SMTP サーバーの開発中は SMTP プロトコルを定めた RFC5321 とメールのフォーマットを定めた RFC5322 を中心に 20 を超える関連 RFC をとにかくひたすら読みまくり、順番に実装しました。

Gehirn EDJ

Gehirn EDJ は MTA で受け取ったメッセージや配送ステータス、障害やメンテナンスなどゲヒルンからのお知らせをユーザーが受け取りやすい形で配送するためのサービスです。

このサービスは MTA の開発中に思いついてそこから3日間で作ったのですが、その後他のサービスの開発が進むにつれて、各サービス間の連携に使用している、ぼくが開発した独自 RPC の仕様改訂に追随する必要が発生したり、 HTTP フックの署名をより検証しやすいものに変更して利便性の向上を図ったりするために、後になって再実装しました。 また、この再実装において、 HTTP フックと Slack だけを予定したサブスクライバーに Twilio や Pushover などを追加しました。

まとめ

このように Gehirn Infrastructure Services の開発を振り返ってきましたが、ぼくは Gehirn Infrastructure Services が提供するすべてのサービスのバックエンドアプリケーションをひとりで開発するという形で携わってきました。

フロントエンドは、親会社のエンジニアだった @satoshi_m8a さんに Angular をベースに SPA フレームワークの構築と RS2 PLUS と DNS のコントロールパネルを実装していただき、社長の @isidai さんも参戦して satoshi_m8a さんが構築したフレームワークの上に EDJ と MTA のコントロールパネルを実装しました。 なお、 @satoshi_m8a さんはそのままゲヒルンに転籍して気づいたらぼくの同僚となっていました。

「 yosida95 の 2014 年まとめ」について

# ぼくがゲヒルンに入社して以来戦い続けてきたプロジェクトは( Twitter や facebook で何度か愚痴ったり皮肉ったりしたように)紆余曲折がありましたが、経営陣に呼ばれて実施された個人面談で思っていることをはっきり言わせてもらったことや、それによってチームの編成が変わっりしたことも追い風となってようやく勝つことができそうです。 # ぼくの一連の投稿を受けてかなり本気の心配を頂いたり、強い共感をを頂いたりしていたので、状況が好転したことをひとまずここでご報告させていただきます。 -- yosida95 の 2014 年まとめ

フロントエンドの開発でも紆余曲折があり、もともとは昨年末退職したぼくと同じ年の職員が専任で開発を続けてきましたが、「できた」と宣言した機能が蓋を開ければ未実装、業務を放棄して第三者にメールで依頼された作業をするなど、他にも多くの信義に関わる問題があり、そもそもの品質の低さと未実装機能の多さも相まって、彼のコードベースを捨て前述の体制での開発になりました。

このめでたき日に水を差すことを言わないのがオトナの振る舞いだとは思うのですが、前述のような経緯があり、また唯一残っている彼の仕事がすでに品質と保守性の観点から負債の扱いを受けフルスクラッチが検討されている中で、彼が事実とかけ離れた割合でこのサービスにコミットしたという言説を吹聴していると伝え聞いたので、ここに事実を書いておきます。

最後に

このように紆余曲折を経ていよいよ Gehirn Infrastructure Services の提供を予告できるとなった段階では、わくわくする一方で果たしてユーザーに受け入れてもらえるかという強い緊張もありました。 この予告を行った3月25日は sidai さんが書いた下書き原稿を、メールを配信する直前まで @N_taka さんとぼくとで校正し、発表後も終電が無くなった後までこの3人でオフィスに残り Twitter の反応を見ていました。

今日から Gehirn Infrastructure Services の Public Preview の提供を開始ということで、どのような使い方をしていただけるのか、果たしてぼくらが夢見たインフラサービスはユーザーに受け入れたもらえるのかなど、とてもわくわくしています。 Public Preview で Gehirn Infrastructure Services に触っていただき、一緒にわくわくしていただけたら幸いです。

追伸

この記事を書くなかで気づいたのですが、今日はぼくがゲヒルンの正職員として2年目を迎える区切りの日のようです。