---
title: サイボウズのインフラQAを1µm支えてそうな技術 〜研修の一環で行うチーム体験の成果発表ドラゴン〜
tags: 
author: [Shoichi Sasaki](https://convert.docswell.com/user/ajfAfg)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/P7RWR529E9.jpg?width=480
description: 「〇〇を支えてそうな技術 #2」での発表資料です。  https://sasaetesou-tech.connpass.com/event/321081/
published: July 18, 24
canonical: https://convert.docswell.com/s/ajfAfg/KXE16N-2024-07-18-093815
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/P7RWR529E9.jpg)

サイボウズのインフラQA
を1μm支えてそうな技術
〜研修の一環で行うチーム体験の成果発表ドラゴン〜
Show（@ajfAfg）


# Page. 2

![Page Image](https://bcdn.docswell.com/page/PJXPRKD3EX.jpg)

サイボウズのインフラQA
を1μm支えてそうな技術
〜研修の一環で行うチーム体験の成果発表ドラゴン〜
自信なさげ
Show（@ajfAfg）


# Page. 3

![Page Image](https://bcdn.docswell.com/page/3JKDR5XN7D.jpg)

自己紹介
• Show（真名は佐々木勝一）
• サイボウズ24新卒の生産性向上エンジニア（明日から）
• 好きなもの
• プログラミング言語
• 音楽（ダンスミュージック、ゲーム音楽（、ジャズ））
• お酒（特に、ビール、日本酒）
• 体を動かすこと
2024/7/7
〇〇を支えてそうな技術 #2
3


# Page. 4

![Page Image](https://bcdn.docswell.com/page/LE3R8K5Z75.jpg)

サイボウズとは
• 「チームワークあふれる社会を創る」ことを目的として
多数のグループウェア製品を開発・販売しているSaaS企業
スムーズな情報共有による業務効率化を狙ったソフトウェア
機能例: スケジュール管理、チャット、設備管理、…
2024/7/7
〇〇を支えてそうな技術 #2
4


# Page. 5

![Page Image](https://bcdn.docswell.com/page/8EDYM3D4EG.jpg)

サイボウズの開発研修
• 座学 + チーム体験 + 同期ハッカソン
講義資料の一部は公開されているので、ぜひチェックしてね
• 2023年のエンジニア新人研修の講義資料を公開しました
• 2022年のエンジニア新人研修の講義資料を公開しました
• チーム体験では、三つのチームでそれぞれ二週間働く
• 僕はインフラQAを体験しました！
2024/7/7
〇〇を支えてそうな技術 #2
5


# Page. 6

![Page Image](https://bcdn.docswell.com/page/V7P6R4XVJ8.jpg)

インフラQAこと「Platform QA」とは
先月まで「SET」という名称だった
• サイボウズのインフラ事情
• 自社で契約したデータセンター上に、自社クラウドサービスの基盤を
作っている（つまりプライベートクラウド）
• その基盤を操作するプログラム群も自社製（もちろんOSSも活用）
Platform QAでは、上記のプログラム群や、各製品が共通利用す
る一部基盤サービスに関する品質保証を行う！
2024/7/7
〇〇を支えてそうな技術 #2
6


# Page. 7

![Page Image](https://bcdn.docswell.com/page/2JV3RXLREQ.jpg)

本題
2024/7/7
〇〇を支えてそうな技術 #2
7


# Page. 8

![Page Image](https://bcdn.docswell.com/page/5EG3MVX67L.jpg)

今日話したいことはこれ！
• 解析器を作ったこと
• 言語処理系を作ったこと
2024/7/7
〇〇を支えてそうな技術 #2
8


# Page. 9

![Page Image](https://bcdn.docswell.com/page/4JQ5R6827P.jpg)

今日話したいことはこれ！
• 解析器を作ったこと
• 言語処理系を作ったこと
2024/7/7
〇〇を支えてそうな技術 #2
9


# Page. 10

![Page Image](https://bcdn.docswell.com/page/K749842PE1.jpg)

準備: 動的解析 vs 静的解析
• 同じところ
• プログラムが何らかの性質を満たすか調べる
• 違うところ
• プログラム実行の有無
性質の例
• 1+1の実行結果が2
• 型エラーを起こさない
一般に、解析に使える情報は、動的解析の方が多い
（静的解析では情報が抽象化されるため（e.g. 1をintと表現したり））
2024/7/7
〇〇を支えてそうな技術 #2
10


# Page. 11

![Page Image](https://bcdn.docswell.com/page/LJ1K24MX7G.jpg)

準備: Lumber
• 自社インフラに開発環境を作成可能な、社内Webサービス
• お手軽に開発用kintoneを立てたりできる
• Lumberの偉いところ
• 自社インフラを操作する低レイヤーなプログラムを頑張って使わなく
ても、ボタンをポチポチすれば簡単に開発環境が作れる！
• 間違えるリスクも低い！！！
2024/7/7
〇〇を支えてそうな技術 #2
11


# Page. 12

![Page Image](https://bcdn.docswell.com/page/GJWDRX3K72.jpg)

問題点: Lumber自体の設定間違えがち
• ある設定ファイルを用いて、Lumberでの
環境構築に必要な情報（e.g. VMホスト）
を管理している
• 構文エラーやVMホストの重複が起きがち！
• 設定ファイルの検査方法がまだないから
2024/7/7
〇〇を支えてそうな技術 #2
12


# Page. 13

![Page Image](https://bcdn.docswell.com/page/4EZGR6VNJ3.jpg)

2024/7/7
〇〇を支えてそうな技術 #2
13


# Page. 14

![Page Image](https://bcdn.docswell.com/page/Y76YR259EV.jpg)

おや……
2024/7/7
〇〇を支えてそうな技術 #2
14


# Page. 15

![Page Image](https://bcdn.docswell.com/page/G75G82YD74.jpg)

Python
やんけ
2024/7/7
〇〇を支えてそうな技術 #2
15


# Page. 16

![Page Image](https://bcdn.docswell.com/page/9J2YK4YMJR.jpg)

解決策: 動的解析で十分だった
• 設定ファイルの中身はPythonプログラムだから、プログラムを
実行して中身を直接参照すればよかった
1. 実行
解析器
2. 各グループの
vmhostsを得る
2024/7/7
〇〇を支えてそうな技術 #2
3. 重複するホストが
存在しないか検査
16


# Page. 17

![Page Image](https://bcdn.docswell.com/page/DEYGNMGPEM.jpg)

「プログラムが停止しなかったり、
I/Oを発生させる場合はどうするの？」
I/Oを発生させる例
停止しない例
• 今回のプログラムには、変数定義とリテラル（と文の列）のみ
登場すると仮定されていたため、問題にならなかった
• つまり、プログラムは常に停止し、I/Oを発生させないと仮定できた
2024/7/7
〇〇を支えてそうな技術 #2
17


# Page. 18

![Page Image](https://bcdn.docswell.com/page/VJNGXWGM78.jpg)

ここまでまとめ
• Lumberでは、環境構築に必要な情報（e.g. VMホスト）を設
定ファイルで管理しているが、その記述を間違えてしまう場合
が少なくなかった
• 当初は静的解析により誤りを検出する方針だったが、よく考え
ると動的解析で十分だった
• 動的解析でやっていることは単純なので、僕の一番の貢献は「動的解
析でやりたいことできますよ」と指摘した点（だと思ってる）
2024/7/7
〇〇を支えてそうな技術 #2
18


# Page. 19

![Page Image](https://bcdn.docswell.com/page/YE9W8XWWE3.jpg)

ちょっと休憩
生産性向上チームの
マスコットキャラクター
「セイサンシャイン君」
2024/7/7
〇〇を支えてそうな技術 #2
19


# Page. 20

![Page Image](https://bcdn.docswell.com/page/GE8N82NR7D.jpg)

もうちょっと休憩
https://zenn.dev/p/cybozu_ept
2024/7/7
〇〇を支えてそうな技術 #2
20


# Page. 21

![Page Image](https://bcdn.docswell.com/page/LELPR2P27R.jpg)

今日話したいことはこれ！
• 解析器を作ったこと
• 言語処理系を作ったこと
2024/7/7
〇〇を支えてそうな技術 #2
21


# Page. 22

![Page Image](https://bcdn.docswell.com/page/4JM4R8497W.jpg)

準備: 言語処理系
• プログラムを機械の上で実行するための系（システム）
• コンパイラとかインタプリターみたいなやつ
入力
言語処理系
出力
0000000010
1001101111
1100100111
1001000100
• なお、プログラミング言語は、構文論と意味論で定義される
2024/7/7
どんな形式の文字列か
その構文はどんな意味か
〇〇を支えてそうな技術 #2
22


# Page. 23

![Page Image](https://bcdn.docswell.com/page/PJRWR5W979.jpg)

準備: 自動テスト
• テストとは、プログラムが期待する挙動をするか、プログラム
を実際に実行して確認すること
• e.g. 1+1=2 であることを確認するため、1+1の実行結果と2を比較
• 自動テストで自動化するのは、テストの実行であることが多い
• そのため、実行するテストは人間が書く必要がある
• （テストの自動生成も盛んに研究されてはいる）
2024/7/7
〇〇を支えてそうな技術 #2
23


# Page. 24

![Page Image](https://bcdn.docswell.com/page/PEXPRKP37X.jpg)

準備:
独自テスティングフレームワーク（1/2）
• Platform QAでは、独自テスティングフレームワークを用いて
自社インフラを自動テストしている
• 各環境に対してテストを実行できる
テストと環境の対応づけは
ある設定ファイルで記述
環境
1
テスト1
テストを実行
テスト2
2024/7/7
独自テスティング
フレームワーク
〇〇を支えてそうな技術 #2
環境
2
自社インフラ
24


# Page. 25

![Page Image](https://bcdn.docswell.com/page/3EKDR5DNJD.jpg)

準備:
独自テスティングフレームワーク（2/2）
• 1つのファイルで、ある環境に対して実行するテストを記述
• ここで、カテゴリとはテストの集合（任意のテストは何らかのカテゴ
リに属している）
実行するテストを指定
カテゴリを指定すると、そのカテゴリに
属するすべてのテストを指定
実行しないテストを指定
2024/7/7
設定ファイル
〇〇を支えてそうな技術 #2
25


# Page. 26

![Page Image](https://bcdn.docswell.com/page/L73R8KRZJ5.jpg)

問題点: テストの実行漏れが起こりがち
• テストの実装と、実際に実行するテストを分けて書くので
実行されないテストが発生しうる
申し訳程度の七夕要素→
2024/7/7
〇〇を支えてそうな技術 #2
26


# Page. 27

![Page Image](https://bcdn.docswell.com/page/87DYM3Y47G.jpg)

解決策: テストの実装の集合と
実行するテストの集合の差集合を取る
Test-id1
Test-id2
Test-id3
Test-id4
テストの実装の
集合
2024/7/7
∖
Test-id1
Test-id3
Test-id4
実行するテストの
集合
〇〇を支えてそうな技術 #2
=
Test-id2
実行されないテストの
集合
27


# Page. 28

![Page Image](https://bcdn.docswell.com/page/VJP6R46VE8.jpg)

解決策: テストの実装の集合と
実行するテストの集合の差集合を取る
Test-id1
Test-id2
Test-id3
Test-id4
∖
テストの実装の
集合
得るのは簡単（実装のファイル名が
IDだから、それを集めるだけ）
2024/7/7
Test-id1
Test-id3
Test-id4
実行するテストの
集合
=
Test-id2
実行されないテストの
集合
得るのは簡単ではない（カテゴリ単位でテストを
指定できるため、設定ファイルをただ読むだけで
は実行するテストがわからない）→解釈が必要
〇〇を支えてそうな技術 #2
28


# Page. 29

![Page Image](https://bcdn.docswell.com/page/2EV3RX3R7Q.jpg)

解決策: 設定ファイルを解釈する
言語処理系を作りました！
• この言語処理系は、設定ファイルを入力すると
実行するテストの集合を出力する
入力
言語処理系
出力
Test-id1
Test-id3
Test-id4
設定ファイル
2024/7/7
実行するテストの
集合
〇〇を支えてそうな技術 #2
29


# Page. 30

![Page Image](https://bcdn.docswell.com/page/57G3MV36JL.jpg)

形式的な定義もバッチリ
構文論
2024/7/7
意味論
〇〇を支えてそうな技術 #2
30


# Page. 31

![Page Image](https://bcdn.docswell.com/page/4EQ5R652JP.jpg)

「既存の言語処理系はなかったの？」
• Yes
• 独自テスティングフレームワークの中では、設定ファイルの解
釈とテストの実行をひとまとめに行なっており、再利用性が低
かった
2024/7/7
〇〇を支えてそうな技術 #2
31


# Page. 32

![Page Image](https://bcdn.docswell.com/page/KJ49849P71.jpg)

ここまでまとめ2
• 独自テスティングフレームワークでは、テストの実装と実行す
るテストを分けて書くため、実行されないテストが起こりえた
• 設定ファイルではカテゴリ単位でテストを指定できるため、
設定ファイルをただ読むだけでは実行するテストがわからない
• 設定ファイルから実行するテストの集合に変換する言語処理系
を作った
2024/7/7
〇〇を支えてそうな技術 #2
32


# Page. 33

![Page Image](https://bcdn.docswell.com/page/LE1K24KXJG.jpg)

Platform QAチーム体験の感想
• これまで趣味で取り組んできたことを業務に活かせて嬉しい！
• チーム体験で取り組んだタスクの中で、今日話したタスクが一番大変
だった（三日でこなす必要があったから）が、一番楽しくもあった
• SRE見習い見習いになれた
• 今日は話さなかったが、インフラにより近いタスクもあったから
• 自社インフラの低レイヤーな操作を課題形式で覚えたり、自社インフラ内の開発
環境を利用可能なアカウントを作ったり
2024/7/7
〇〇を支えてそうな技術 #2
33


# Page. 34

![Page Image](https://bcdn.docswell.com/page/GEWDRXDKJ2.jpg)

まとめ
• サイボウズの開発研修の一環として、Platform QAという
インフラQA職の業務に取り組みました
• その中で、動的解析器や言語処理系を作りました
• 趣味で取り組んできたことを業務に活かせてHappy
2024/7/7
〇〇を支えてそうな技術 #2
34


