Qiita株式会社で共通基盤開発グループというチームの立ち上げと約3年やってきたことを振り返る


## はじめに

2021年08月 に Qiita株式会社内で「共通基盤開発グループ」というチームが発足しました。
2024年まで約 3 年共通基盤開発グループで取り組んできたことを振り返りたいと思います。

また、この記事は [Qiita×Findy記事投稿キャンペーン 「今の開発組織でトライしたこと・トライしていること・トライしようとしていること」 - Qiita](https://qiita.com/official-events/06e1e6af790c81a75b7f) の記事投稿キャンペーンに関する記事です。

https://qiita.com/official-events/06e1e6af790c81a75b7f

### 簡単な自己紹介

2017 年エイチームライフスタイル(現 エイチームウェルネス)に中途入社。自動車関連事業の開発を担当。
2020 年Increments株式会社(現 Qiita株式会社)に転籍。Qiita Jobsの開発を担当し現在は共通基盤開発グループの立ち上げをして、インフラやその他開発等行っていました。

https://corp.qiita.com

https://qiita.com

https://teams.qiita.com

https://jobs.qiita.com

## 2021年

共通基盤開発グループの当時のミッションは、「我々が提供するサービスを安定かつ効率的に提供する環境を作ること」でした。
我々が提供するサービスは、Qiita株式会社(当時は Increments株式会社)が提供する Qiita, Qiita Team, Qiita Jobs だけでなく、それぞれが動くインフラ・共通システム・社内システム等プロダクトに直接関係しないが影響するシステム全般を対象としていました。

共通基盤開発グループという組織を立ち上げると言っても、私は Qiita Jobs のシステムを開発していたエンジニアであり、Qiita, Qiita Team 等直接関わっていないシステムの理解が浅いことはもちろん、2019年06月以降インフラを中心的に身ていた社員が不在だったり、2人でチームを立ち上げる予定でしたがほぼ1人で立ち上げとなったり、今思えば色々あったな ~ と思っています。

そんな中ではありますが、2021年はこのようなことに取り組みました。
ただし、取り組むといっても**立ち上げフェーズであるため、現状把握と少人数での運用ができる体制つくりを優先**しました。

- 現状把握と計画の作成
- CI/CD 基盤の整備
- DoS/DDoS 攻撃への対処
- Let's EncryptのDST Root X3ルート証明書変更
- 社名変更

### 現状把握と計画の作成

冒頭にも記載していた通り、私は Increments株式会社に転籍入社してすぐ Qiita Jobs の開発を主に担当していました。Qiita や Qiita Team を開発するエンジニアと共通のタスクに取り組む機会こそありましたが、それぞれのプロダクトを知っているかと言われればそうではありません。まずは「プロダクト」と「お金」この2点に絞って現状把握を行うこととしました。

まず「プロダクト」について、それぞれの開発組織が何に取り組んでいて何を行っているか知るために、朝会に参加したり会議の議事録や日々のリリースを常に確認しIncrements株式会社で何が行われているか確認するようにしました。
また、全てのプロダクトの日々の運用やシステムや仕様の理解するために、全ての障害を受け取り、誰よりも早く実際の障害対応に参加していました。

「お金」については、丁度予算作成のタイミングということもあり開発に関連する契約や過去の請求を全てとりまとめ、いつどのくらいのお金が使われているかはもちろん、それぞれの利用状況や重複する点が無いか等をまとめていきました。

上記以外にも社内ドキュメント(Qiita Team)や GitHub, ZenHub の Issue 等今まで Increments株式会社をつくってきたエンジニア皆様の日々のログや意思決定の背景等も参考にさせていただきました。
改めて Qiita株式会社のドキュメントを残す文化に助けられました。

状況把握を進めていく中で自然に「取り組むべきこと」「優先度」の大枠を決めることができました。
(ただし1人なので進むスピードは本当にゆっくりでした :innocent: )

### CI/CD 基盤の整備

当時Increments株式会社では、複数の CI/CD サービスを利用していました。
また、メインで利用していた CI/CD サービスは「コミッター数」と「利用時間」で料金が決まるサービスで、当時Increments株式会社は急激な人員増とテスト時間の長時間化で年間契約したクレジットだけでは足りず買い足すことが日常化していました。
また、契約先も複数あると日々の運用工数もかかってしまうのでなるべく1つのサービス (GitHub Actions) に寄せていくことを提議し決裁していただきました。加えて同様にコンテナレジストリサービスも GitHub Packages に寄せていくこととなりました。

https://github.com/features/actions

https://github.com/features/packages

当時は、GitHub Actions への migration tool が提供されていなかったので、それぞれの workflow 定義を1つ1つ移行していきました。

https://docs.github.com/en/actions/migrating-to-github-actions/manually-migrating-to-github-actions

### DoS/DDoS 攻撃への対処

丁度この頃 Qiita, Qiita Team, Qiita Jobs への DoS/DDoS 攻撃が数ヶ月に渡り頻発しておりました。
Qiita, Qiita Team, Qiita Jobs をご利用いただく皆様には本当にご迷惑おかけしました。

どのように対応したか記載したいですが、今回は対応の詳細は控えさせていただきます。
対応を進めている中で、Twitter 上で温かい言葉をかけてくださった方々ありがとうございました。「がんばれ」その一言に助けられました。本当にありがとうございました。

### Let's EncryptのDST Root X3ルート証明書変更

Qiita も一部のシステムで、Let's EncryptのDST Root X3ルート証明書変更の影響を受けました。
Increments株式会社が管理する OSS も影響をうけたものもあり対応が遅れてしまったものもありました。

### 社名変更

2021年12月1日付で、Increments株式会社からQiita株式会社へ社名を変更を行いました。
コーポレイトサイトや各サービスの変更

https://blog.qiita.com/changed-company-name/

https://corp.qiita.com/releases/2021/12/changed-company-name/

## 2022年

2022年もミッションに大きな変化はありませんでしたが、クリティカルな対応が終わり他チームの方々とコラボレーションしていくことが増えました。
また、2022年後半はチームメンバーも1人から2人に増えやっとチームとして動くことができるようになりました。

2022年に進めてきた内容は以下のとおりです。

- バウンスメールの対策
- 開発環境の整備 (Apple シリコンの対応)
- Qiitadon の終了、Qiita 人気の投稿 : Alexaスキル のサービス終了、サービス終了告知ページの作成
- Node.js の更新 (v14 -> v16) / Elasticsearch の更新 ( 7.9 -> 7.10) / Amazon Linux 1 から 2 への更新

### バウンスメールの対策

Qiita は多くの Web エンジニアの皆様にご利用いただいています。同時に多くのスパマーのターゲットにもなってしまっています。そんな中、利用しているメールの配信システムで確認していたバウンスレート(Bounce rate)が急上昇してしまうことが発生しました。

バウンスレートがあがらないように対策や、レート上昇後の対応準備やモニタリングを見直しを行いました。
全て自動で処理できる状態に至っていません。最後までやりきれなかったのが若干心残りです。

### 開発環境の整備 (Apple シリコンの対応)

Qiita, Qiita Team, Qiita Jobs の開発制作職には Mac が貸与されています。
それぞれの環境をどうさせるための Tool が用意されていましたが、 Intel Mac でのみ動作するような設定となっていました。後記する Node.js の更新とあわせて、開発環境の Arm Mac 対応を進めました。

本対応をおこなったことで Arm アーキテクチャを採用する CPU を搭載したサーバーでも動作することをサポートできてしまいましたが、本番環境は x86_64 環境のまま動作させています。

### Qiitadon の終了、Qiita 人気の投稿 : Alexaスキル のサービス終了、サービス終了告知ページの作成

2017年のサービス開始から多くの皆様に利用いただいた Qiitadon と Alexaスキル のサービス終了対応を行いました。

https://blog.qiita.com/terminate-provision-of-qiitadon/

https://blog.qiita.com/terminate-provision-of-qiita-trend-available-in-alexa-skill/

加えて、サービス終了後にのページを新規作成もおこないました。

https://terminated.qiita.com/qiitadon

### Node.js の更新 / Elasticsearch の更新 / Amazon Linux AMI から Amazon Linux 2 への更新

Qiita, Qiita Team, Qiita Jobs で利用する Node.js の更新を行いました。
一部の事業では SSR を行っている都合上本番サーバー上にも Node.js やそれに相当する実行環境を用意する必要があります。整備して簡単にできるようにしたつもりではありますが大きくメスをいれることができなかったのは悔しい部分です。

https://nodejs.org/en

また、Elasticsearch の更新や、本番サーバーのOSの更新を行いました。本番環境は EOL が切れる前に Amazon Linux AMI から Amazon Linux 2 への更新が完了していましたが、一部の検証環境で Amazon Linux AMI の利用が残っており Amazon Linux 2 への更新を行いました。

https://www.elastic.co/jp/

https://aws.amazon.com/amazon-linux-ami/

https://aws.amazon.com/amazon-linux-2/

まだコンテナ化もできていない状況かつ、AMI のスナップショット作成 → 復元という運用だったので、 Chef や Packar 等を利用して本番環境と同等の検証環境を改めて用意しました。

https://www.chef.io/products/chef-infra

https://www.packer.io/

## 2023年

2023年もチームメンバーが増えさらにチームとして動くことができるようになりました。今まではタスクやプロジェクトの粒度が小さいものは1人で進めることもありましたが、複数人で進める体制をつくり始めたのがこの頃です。

行う業務がその人の得意としている領域だけというチームは少ないと思います。それぞれの得意、苦手を互いにカバーしながら進めることができるスクラムのような仕組みを整えていきました。最初はチームとして出せる成果は少なくなってしまいますが、チーム・個人双方の力をより強くしていきたいと考えていました。

そんな中2023年に進め完了した内容は以下のとおりです。

- WordPress サーバーのメンテナンス
- Ruby の更新
- Twitter API 有料化に伴う API や アプリケーション変更対応

### WordPress サーバーのメンテナンス

Qiita株式会社には WordPress で運用されている Web サイトがいくつか存在します。
WordPress が動くサーバーの OS や PHP のバージョンアップの対応を一気に進めました。

https://wordpress.org/

しばらくは対応の必要はありませんが、マネージドサービスへの移行や、監視や運用面の改善などまだまだやりたいことは多く残ったままになっているのが悔しい部分です。

また、 WordPress 以外の CMS で管理されていた Web サイトの移管等も実施していました。人数、工数ともに潤沢ではありません。少ない人数で運用工数をなるべく少なくするために使い慣れているツールや世の中で多く使われているツールに寄せておきたいと考えていました。

### Ruby の更新

毎年 12月に新しい Ruby バージョンが公開されます。Qiita株式会社が運営する Qiita, Qiita Team, Qiita Jobs は Ruby を利用しています。この年は Ruby の2系から3系のの更新を行いました。

https://www.ruby-lang.org/ja/

### Twitter API 有料化に伴う API や アプリケーション変更対応

2023年 Twitter (X) の API 有料化が発表されました。
Qiita は Twitter (X) を利用したログイン等を提供しており、有料化に伴う対応が必要となりました。

https://twitter.com/XDevelopers/status/1641222782594990080

対応1つ1つは大きくありませんでしたが、仕様が不透明であること、突然のエラー等振り回されることも

## 2024年 (の3ヶ月だけ)

2024年に入ってからではありませんが、2023年に始めたスクラムのような仕組みの導入を人数が増減したタイミングで行いました。直近進めていた複数のプロジェクトは、Qiita株式会社に与えるインパクトも大きく加えて期限も後ろ倒しできないものばかりでした。スクラムが悪という話ではありませんが、一時的に人への依存を高めプロジェクトを期限内に完了させることを優先しました。(もちろんプロジェクト後半で知識や技術を共有するフェーズは入れてもらいました。)

結果としてはほぼすべてのプロジェクトが期日通りに完了し、大きな成果をチーム全体で残せたと思っています。

2024年3月までに進め完了した内容は以下のとおりです。

- Ruby/Node.js/Rails 等の更新
- 営業支援、顧客管理ツールの再整備
- データ分析基盤の再検討

### Ruby/Node.js/Rails 等の更新

Qiita, Qiita Team, Qiita Jobs のアプリケーションで利用する Ruby/Node.js/Rails の更新を行いました。途中他プロジェクトに人を寄せたりした都合上うまく行かないこともありましたが、チームでここまでやりきりたいと決めたラインまでは進めることができました。

https://www.ruby-lang.org/ja/

https://rubyonrails.org/

https://nodejs.org/en

### 営業支援、顧客管理ツールの再整備

Qiita株式会社で導入していた営業支援、顧客管理ツールの整備を1から半年かけ行いました。
進めるにあったってグループ会社の方にご協力等いただきました。ありがとうございました。

### データ分析基盤の再検討

Qiita株式会社で利用していたデータ基盤の見直しを約1年かけ実施しました。
Google Cloud の BigQuery を採用し、計画から移行までを約1年で完了しました。

詳細はメインで進めてくれていた方が書くと言っていたので省略しておきます。

## さいごに

2021年08月にできた共通基盤開発グループ。記載できないことも多々ありますが多くの人に支えられて多くのプロジェクトを進めることができました。また、2021年にやらなければならないことを中心に進めたいことをまとめ動き始めましたが、2024年になってやっと終わりが見えてきたという状況です。裏を返せば終わりが見えてきており、未来に向けた動きが取りやすくなってきている状態です。

実は、私は 2024/04 をもって Qiita株式会社を離れます。(転職ではなくエイチームグループの他会社へ異動です。)やり残したことが多々あるので申し訳ないのはもちろんですが、これから面白くなるフェーズで離れるのは若干の寂しさもあります。共通基盤開発グループはとても素晴らしい方々しか居ないので、陰ながら Qiita を応援していければと思ってます。