Upgrade to Pro — share decks privately, control downloads, hide ads and more …

エンジニア向けコミュニティZennの開発チームを支える自動化の仕組み.pdf

dyoshikawa
November 08, 2024
1.5k

 エンジニア向けコミュニティZennの開発チームを支える自動化の仕組み.pdf

dyoshikawa

November 08, 2024
Tweet

Transcript

  1. ⾃⼰紹介 3 • https://x.com/dyoshikawa1993 • 広島在住ソフトウェアエンジニア • Next.js / Ruby

    on Rails / Google Cloud ◦ 以前はAWSサーバレス、バックエンド Node.js、Laravel、Vue.jsなど • 応⽤情報技術者 / AWS Security Specialtyなど
  2. 今⽇お話すること 5 • はじめに ◦ Zennの紹介 ◦ なぜ⾃動化するのか • 具体的な取り組みをご紹介

    ◦ 静的解析、テスト⾃動化、CI/CD、⽣成AI • おわりに ◦ さらに⾃動化していくために ◦ まとめ
  3. Zenn(https://zenn.dev)について 8 活発なコミュニティ • 3種類の投稿形式 で知見を発信 できる • 記事の著者が金銭的な対価 を得

    られる • 月間PV数 1,300万以上 • 会員数 12万以上 • Publication(※)数 900以上 ※企業または組織、コミュニティなどが、投稿する記事を まとめることができるグループ機能 エンジニアの情報共有
  4. Zennの構成 10 10 イベントデータ Cloud Load Balancing データベース Cloud SQL

    Analytics 画像など Cloud Storage タスクワーカー Cloud Run 管理画面・API Cloud Run ユーザーAPI Cloud Run HTML / JS Cloud Run Assets Stats BigQuery Scheduled Tasks Cloud Scheduler タスクワーカーへ Monitoring Logging Bulk Tasks Cloud Tasks タスクワーカーへ 著者‧読者 管理者 Gemini Vertex AI
  5. 「現実世界はそんなに単純ではない」 14 それはそう 😇 • このような場合は? ◦ ⾃動化で削減できる⼯数より仕組みづくりの⼯数の⽅が⼤きい場合は? ◦ 「単純だが1度しか⾏わないかもしれない作業」を⾃動化すべきか?

    • 対象とタイミングの選定を間違えなければ、少ない労⼒で⾼い効果を得ら れるはず ◦ 作業を分解し、⾃動化することで費⽤対効果が⾼い部分を発⾒(対象) ◦ 同じ作業を繰り返すことが確定してから⾃動化を検討(タイミング)
  6. コードレビューの定型観点を⾃動化できる 19 • Linter ◦ 「書き⽅」の統⼀ ▪ JS/TS: `var` を

    `let` と `const` に ▪ Ruby: `if !foo`を `unless foo` に https://eslint.org/docs/latest/rules/no-var
  7. 「型チェック」による静的解析 21 • フロントエンド⾔語としてTypeScript を採⽤ • 実⾏前にエラーを検出できる ◦ 型チェックはテストの⼀種 ▪

    静的テスト ▪ 動的テスト ◦ フロントエンド開発における存在感 • 開発効率の向上 ◦ IDE上において正確なコード補完 https://www.typescriptlang.org
  8. テストの⾃動化 23 • フロントエンドテスト(Vitest + React Testing Library) ◦ 関数やReact

    Hooksについて振る舞いを確認するテスト ◦ Reactコンポーネントに対するテストやVRTの導⼊は今後の課題 https://testing-library.com/docs/react-testing-library/example-intro
  9. なぜ「⾃動」テストか? 26 初期機能A テスト⼯数 1⼈⽉ 機能Bを追加(機能Aに影響) テスト⼯数 1⼈⽉ 機能Cを追加(機能A, Bに影響)

    テスト⼯数 1⼈⽉ 1⼈⽉でテスト実施 2⼈⽉でテスト実施 3⼈⽉でテスト実施 ⼿動テストの場合
  10. なぜ「⾃動」テストか? 27 初期機能A テストコード作成⼯数 1⼈⽉ 機能Bを追加(機能Aに影響) テストコード作成⼯数 1⼈⽉ 機能Cを追加(機能A, Bに影響)

    テストコード作成⼯数 1⼈⽉ 1⼈⽉でテストコード作成 1.1⼈⽉で テストコード作成 1.2⼈⽉で テストコード作成 ⾃動テストの場合 0.1⼈⽉で機能Aのテストコードを修正 0.2⼈⽉で機能A, Bのテストコードを修正
  11. なぜ「⾃動」テストか? 28 • サービスの規模が拡⼤してもテスト⼯数が雪だるま式に増加しない ◦ 開発チームの⼈数を増やさなくてもスケールできる • リリースする度にテストカバレッジを上げることも可能 ◦ テストコードは積み上げられる

    ◦ ⼿動テストでは困難 • リファクタリングタスクに着⼿しやすい ◦ リファクタリング後、再度⾃動テストを回すことで動作担保ができる • 将来にわたって繰り返し実施することが確定している
  12. CI/CDの整備 29 GitHub Repository GitHub Actions Cloud Build Artifact Registry

    Cloud Shell 管理者 静的解析‧ テスト ビルド‧デ プロイコマ ンドの送信 コマンド 実⾏環境 デプロイ コマンドの表⽰ デプロイコマンド を確認‧実⾏ ソースコード 管理 ビルドされた イメージ管理 参照: https://dev.classmethod.jp/articles/zenn_cicid_googlecloud
  13. CI/CDの整備 32 • CI(GitHub Actions) ◦ 静的解析チェック、⾃動テスト • CD(Cloud Build)

    ◦ コンテナイメージビルド、Slack へデプロイコマンドの送信 • ChatOps(Slack)の活⽤ • 管理者はSlackに表⽰されたコマン ドを確認、任意のタイミングでデプ ロイ
  14. 実際に運⽤業務に適⽤した事例 34 スパム投稿が急増 • 2024 年 6 ⽉ごろ〜 • 特定

    URL への誘導などのスパムコ ンテンツが⼤量に投稿される • 読者体験の急激な悪化を懸念し、 早急な対処が必要に スパム投稿で埋めつくされた新着コンテンツ⼀覧(イメージ)
  15. 実際に運⽤業務に適⽤した例 35 管理者 違反報告 コンテンツ ① スパム判定 ②違反報告 ③内容を確認して処理 ⽣成AI

    Geminiを使ってスパム検出システムを構築 スパム疑い投稿85%減少、運⽤コスト75%削減
  16. さらに⾃動化していくために 42 HRTを⼤切にする • 「Humility(謙虚)」「Respect(尊敬)」「Trust(信頼)」 • 課題がない環境など存在しない • 「解決しない(ように⾒える)チームメンバー」を敵視しない ◦

    課題が解決されず残っていることにはほとんどの場合、理由がある • 周囲を責めても、むしろ課題解決から遠ざかる • 「VS誰か」ではなく「VS課題」で考えよう ⾃戒も込めて…
  17. まとめ 43 • なぜ⾃動化するのか? ◦ ⼈間よりも「速くて正確」だから ◦ 時間を⽣み出して、より創造的なタスクに当てたいから • 具体的な取り組み

    ◦ コードの静的解析 ◦ テストの⾃動化 ◦ CI/CDの整備 ◦ ⽣成AI活⽤ • ⾃動化はインクリメンタルに、そしてHRTを⼤切に