ITエンジニアのアウトプット媒体として、Qiita、はてなブログ、noteなどが知られていますが、近年注目を集めているのが2020年9月にリリースされた「Zenn(ゼン)」です。
Zennは、「知見を共有するエンジニアに対価を」をコンセプトに開発された、技術情報共有コミュニティサービスです。Zennを使って情報を発信するエンジニアは、有料の本を公開する、または読者からバッジを送ってもらうことで、金銭的な対価を受け取ることができます。
Zennはもともと、個人のエンジニアのプロジェクトとして開発・運用されていましたが、2021年6月よりクラスメソッドが運営元として開発・運用を引き継ぐことになりました(参考:https://classmethod.jp/news/20210201-zenn/)。
Zennは、サービス開始当初からプラットフォームにGoogle Cloudを採用しています。クラスメソッドでは、安定したサービス提供に向けて、アプリケーションの稼働環境をGoogle Cloudの仮想マシン環境からコンテナへ移行したり、運用監視機能を新たに導入したりと、さまざまな機能強化やサービス改善を続けてきました。そこで、クラスメソッドでの社内開発について、当社新規事業統括部の和田に聞きました。
アプリケーション稼働基盤をGoogle App EngineからCloud Runへ移行
Zennは、サービス初期の段階から、バックエンド側のWebアプリケーション開発のプラットフォームにGoogle App Engine(以下、GAE)を採用し、Web APIをRuby on Railsで開発しています。
2022年1月頃、記事へのアクセス数の増加が原因でスケールする際のアプリケーションの起動に時間がかかり、ユーザー体験を損ねるケースが増えてきました。
「当時はユーザーが投稿した記事がSNS等で話題になって急激にアクセスが増えた際、サーバーの自動スケールが間に合わずに、数分間は少量のサーバーで大量のリクエストを処理することになりました。あらかじめ余裕を持ってサーバーを立ち上げておくことも検討したものの、場当たり的な対応ではコストがかさむ一方でした」(和田)
対策として、開発チームはコンテナベースのアプリケーションへの切り替えを決断し、フルマネージド型でサーバーレスのコンテナ実行環境であるCloud Runへの移行を決めました。Cloud Runは、GAEと同様に開発者が仮想マシンやOSを意識することなくアプリケーションを動かすことができるプラットフォームです。ただし、GAEがアプリケーションのためのプラットフォームであるのに対し、Cloud Runはコンテナを実行することに特化しています。GAEではアプリケーションを作成してデプロイするだけで、自動的に実行環境が作成されますが、Cloud Runではアプリケーションのコンテナイメージを開発者が用意しなければなりません。そこで、開発チームは、Cloud Run用の設定を改めて開発しました。
「GAEでは、タスク管理サービスのCloud Tasksと、スケジュール実行サービスのCloud Schedulerが統合されており、設定からまとめて管理することができました。しかしCloud Runからそれらサービスを利用する場合、別々のサービスとして連携することになります。そのため、サービス間認証についても実装が必要になりました。そこで、Cloud Tasks、Cloud Scheduler、サービスアカウントの作成・管理をTerraformに集約し、アプリケーションとともにコードで管理できるようにしました。結果として他に連携したいサービスが出たときに同じようにIaC下で管理できるため、活用の幅が広がったと感じています。」(和田)
Cloud Runへ移行したことにより、アクセス急増時のサーバーの起動時間は従来の数分程度から10秒程度に短縮され、ユーザー体験を損ねることなくサービスを運用できるようになりました。仮想サーバー環境からコンテナに移行したことでコストの最適化も進みました。
運用・監視環境もGoogle Cloudのサービスで完結
開発チームでは、コンテナベースへの環境移行と並行して、運用・監視環境の整備を続けてきました。当初はクラスメソッドで活用実績があるMackerel(マカレル)などの外部サービスを活用していましたが、2022年6月頃から徐々にGoogle Cloudのサービスにシフトし、現在はGoogle Cloudが提供する運用・監視サービスで完結しています。これにより、監視のために外部にセキュリティキーなどを持ち出す必要がなくなり、現場の安心感につながっています。
「レイテンシの増大やログのエラーメッセージをSlackなどに通知するサービスとしてCloud Monitoringを利用しています。その他、WAFの機能を備えたCloud Armor、アプリケーションへのアクセスを保護する認証サービスのIdentity-Aware Proxyなど、アプリケーション運用で必要となるサービスがほぼ揃っています。設定を有効にすればすぐに使えるものも多く、とても助かっています」(和田)
その他にも、Googleが提供するデータウェアハウスのBigQueryを活用してアクセスログの集計レポートを1週間単位で確認し、パフォーマンス改善のヒントとして使っています。また、BigQueryにトップページのページビューなどを記録し、BIツール(Looker Studio)を使って分析しながらビジネス戦略を検討することにも活用しています。
チームとして運営に参加することで環境整備が加速し、コアのサービス開発に集中
クラスメソッドがZennの運営元として活動を開始してから約1年半。その間、チームとしてデプロイ頻度を上げるための総合的な施策として、問い合わせ対応の分散、リリース手順の自動化、検証環境の整備などを行ってきました。並行して監視体制を強化し、チームとして対応に当たるための知見や判断力を磨いてきました。
Google Cloudのサービスで完結させることで、可用性やサービスレベルの向上、セキュリティの強化、コストの最適化などの環境整備が加速し、コアのサービス開発に集中することが可能になりました。
「Google Cloudは、アプリケーションを成長させるために必要な仕組みがひととおり整っているので、開発者にとっても魅力的なサービスです。コンテナベースのアプリケーションを展開し、事業の成長にあわせてインフラをスケールさせたいITサービス事業者におすすめです」(和田)
Google Cloudの開発体制を強化し、蓄積したノウハウで企業の成長を促進
今回はZennの開発・運用の事例を紹介しましたが、クラスメソッド全体としては今後もGoogle Cloudの開発体制を強化してく方針です。現在、社内でGoogle Cloudの資格取得者を増やすなど、人材教育に注力しています。
「クラウドプラットフォームは、思想の違いはあれども、クラウド上でビジネスを促進するための技術やサービスであることは同じです。実際に AWS と Google Cloud を両方使ってみての実感とも一致しています。Zennのチームに入ってからの約1年半、私自身もGoogle Cloudで新たな発見を得て成長することができました。これからもGoogle Cloudを学びながら、サービスの強化に努めていきます」(和田)
クラスメソッドは、Google Cloudの技術やノウハウを引き続き蓄積してまいります。Google Cloudを活用されたい事業者の方は、気軽にご相談ください。