2.3K Views
July 18, 24
スライド概要
「〇〇を支えてそうな技術 #2」での発表資料です。
https://sasaetesou-tech.connpass.com/event/321081/
健康指向プログラミング。プログラミング言語や型が好き。
サイボウズのインフラQA を1μm支えてそうな技術 〜研修の一環で行うチーム体験の成果発表ドラゴン〜 Show(@ajfAfg)
サイボウズのインフラQA を1μm支えてそうな技術 〜研修の一環で行うチーム体験の成果発表ドラゴン〜 自信なさげ Show(@ajfAfg)
自己紹介 • Show(真名は佐々木勝一) • サイボウズ24新卒の生産性向上エンジニア(明日から) • 好きなもの • プログラミング言語 • 音楽(ダンスミュージック、ゲーム音楽(、ジャズ)) • お酒(特に、ビール、日本酒) • 体を動かすこと 2024/7/7 〇〇を支えてそうな技術 #2 3
サイボウズとは • 「チームワークあふれる社会を創る」ことを目的として 多数のグループウェア製品を開発・販売しているSaaS企業 スムーズな情報共有による業務効率化を狙ったソフトウェア 機能例: スケジュール管理、チャット、設備管理、… 2024/7/7 〇〇を支えてそうな技術 #2 4
サイボウズの開発研修 • 座学 + チーム体験 + 同期ハッカソン 講義資料の一部は公開されているので、ぜひチェックしてね • 2023年のエンジニア新人研修の講義資料を公開しました • 2022年のエンジニア新人研修の講義資料を公開しました • チーム体験では、三つのチームでそれぞれ二週間働く • 僕はインフラQAを体験しました! 2024/7/7 〇〇を支えてそうな技術 #2 5
インフラQAこと「Platform QA」とは 先月まで「SET」という名称だった • サイボウズのインフラ事情 • 自社で契約したデータセンター上に、自社クラウドサービスの基盤を 作っている(つまりプライベートクラウド) • その基盤を操作するプログラム群も自社製(もちろんOSSも活用) Platform QAでは、上記のプログラム群や、各製品が共通利用す る一部基盤サービスに関する品質保証を行う! 2024/7/7 〇〇を支えてそうな技術 #2 6
本題 2024/7/7 〇〇を支えてそうな技術 #2 7
今日話したいことはこれ! • 解析器を作ったこと • 言語処理系を作ったこと 2024/7/7 〇〇を支えてそうな技術 #2 8
今日話したいことはこれ! • 解析器を作ったこと • 言語処理系を作ったこと 2024/7/7 〇〇を支えてそうな技術 #2 9
準備: 動的解析 vs 静的解析 • 同じところ • プログラムが何らかの性質を満たすか調べる • 違うところ • プログラム実行の有無 性質の例 • 1+1の実行結果が2 • 型エラーを起こさない 一般に、解析に使える情報は、動的解析の方が多い (静的解析では情報が抽象化されるため(e.g. 1をintと表現したり)) 2024/7/7 〇〇を支えてそうな技術 #2 10
準備: Lumber • 自社インフラに開発環境を作成可能な、社内Webサービス • お手軽に開発用kintoneを立てたりできる • Lumberの偉いところ • 自社インフラを操作する低レイヤーなプログラムを頑張って使わなく ても、ボタンをポチポチすれば簡単に開発環境が作れる! • 間違えるリスクも低い!!! 2024/7/7 〇〇を支えてそうな技術 #2 11
問題点: Lumber自体の設定間違えがち • ある設定ファイルを用いて、Lumberでの 環境構築に必要な情報(e.g. VMホスト) を管理している • 構文エラーやVMホストの重複が起きがち! • 設定ファイルの検査方法がまだないから 2024/7/7 〇〇を支えてそうな技術 #2 12
2024/7/7 〇〇を支えてそうな技術 #2 13
おや…… 2024/7/7 〇〇を支えてそうな技術 #2 14
Python やんけ 2024/7/7 〇〇を支えてそうな技術 #2 15
解決策: 動的解析で十分だった • 設定ファイルの中身はPythonプログラムだから、プログラムを 実行して中身を直接参照すればよかった 1. 実行 解析器 2. 各グループの vmhostsを得る 2024/7/7 〇〇を支えてそうな技術 #2 3. 重複するホストが 存在しないか検査 16
「プログラムが停止しなかったり、 I/Oを発生させる場合はどうするの?」 I/Oを発生させる例 停止しない例 • 今回のプログラムには、変数定義とリテラル(と文の列)のみ 登場すると仮定されていたため、問題にならなかった • つまり、プログラムは常に停止し、I/Oを発生させないと仮定できた 2024/7/7 〇〇を支えてそうな技術 #2 17
ここまでまとめ • Lumberでは、環境構築に必要な情報(e.g. VMホスト)を設 定ファイルで管理しているが、その記述を間違えてしまう場合 が少なくなかった • 当初は静的解析により誤りを検出する方針だったが、よく考え ると動的解析で十分だった • 動的解析でやっていることは単純なので、僕の一番の貢献は「動的解 析でやりたいことできますよ」と指摘した点(だと思ってる) 2024/7/7 〇〇を支えてそうな技術 #2 18
ちょっと休憩 生産性向上チームの マスコットキャラクター 「セイサンシャイン君」 2024/7/7 〇〇を支えてそうな技術 #2 19
もうちょっと休憩 https://zenn.dev/p/cybozu_ept 2024/7/7 〇〇を支えてそうな技術 #2 20
今日話したいことはこれ! • 解析器を作ったこと • 言語処理系を作ったこと 2024/7/7 〇〇を支えてそうな技術 #2 21
準備: 言語処理系 • プログラムを機械の上で実行するための系(システム) • コンパイラとかインタプリターみたいなやつ 入力 言語処理系 出力 0000000010 1001101111 1100100111 1001000100 • なお、プログラミング言語は、構文論と意味論で定義される 2024/7/7 どんな形式の文字列か その構文はどんな意味か 〇〇を支えてそうな技術 #2 22
準備: 自動テスト • テストとは、プログラムが期待する挙動をするか、プログラム を実際に実行して確認すること • e.g. 1+1=2 であることを確認するため、1+1の実行結果と2を比較 • 自動テストで自動化するのは、テストの実行であることが多い • そのため、実行するテストは人間が書く必要がある • (テストの自動生成も盛んに研究されてはいる) 2024/7/7 〇〇を支えてそうな技術 #2 23
準備: 独自テスティングフレームワーク(1/2) • Platform QAでは、独自テスティングフレームワークを用いて 自社インフラを自動テストしている • 各環境に対してテストを実行できる テストと環境の対応づけは ある設定ファイルで記述 環境 1 テスト1 テストを実行 テスト2 2024/7/7 独自テスティング フレームワーク 〇〇を支えてそうな技術 #2 環境 2 自社インフラ 24
準備: 独自テスティングフレームワーク(2/2) • 1つのファイルで、ある環境に対して実行するテストを記述 • ここで、カテゴリとはテストの集合(任意のテストは何らかのカテゴ リに属している) 実行するテストを指定 カテゴリを指定すると、そのカテゴリに 属するすべてのテストを指定 実行しないテストを指定 2024/7/7 設定ファイル 〇〇を支えてそうな技術 #2 25
問題点: テストの実行漏れが起こりがち • テストの実装と、実際に実行するテストを分けて書くので 実行されないテストが発生しうる 申し訳程度の七夕要素→ 2024/7/7 〇〇を支えてそうな技術 #2 26
解決策: テストの実装の集合と 実行するテストの集合の差集合を取る Test-id1 Test-id2 Test-id3 Test-id4 テストの実装の 集合 2024/7/7 ∖ Test-id1 Test-id3 Test-id4 実行するテストの 集合 〇〇を支えてそうな技術 #2 = Test-id2 実行されないテストの 集合 27
解決策: テストの実装の集合と 実行するテストの集合の差集合を取る Test-id1 Test-id2 Test-id3 Test-id4 ∖ テストの実装の 集合 得るのは簡単(実装のファイル名が IDだから、それを集めるだけ) 2024/7/7 Test-id1 Test-id3 Test-id4 実行するテストの 集合 = Test-id2 実行されないテストの 集合 得るのは簡単ではない(カテゴリ単位でテストを 指定できるため、設定ファイルをただ読むだけで は実行するテストがわからない)→解釈が必要 〇〇を支えてそうな技術 #2 28
解決策: 設定ファイルを解釈する 言語処理系を作りました! • この言語処理系は、設定ファイルを入力すると 実行するテストの集合を出力する 入力 言語処理系 出力 Test-id1 Test-id3 Test-id4 設定ファイル 2024/7/7 実行するテストの 集合 〇〇を支えてそうな技術 #2 29
形式的な定義もバッチリ 構文論 2024/7/7 意味論 〇〇を支えてそうな技術 #2 30
「既存の言語処理系はなかったの?」 • Yes • 独自テスティングフレームワークの中では、設定ファイルの解 釈とテストの実行をひとまとめに行なっており、再利用性が低 かった 2024/7/7 〇〇を支えてそうな技術 #2 31
ここまでまとめ2 • 独自テスティングフレームワークでは、テストの実装と実行す るテストを分けて書くため、実行されないテストが起こりえた • 設定ファイルではカテゴリ単位でテストを指定できるため、 設定ファイルをただ読むだけでは実行するテストがわからない • 設定ファイルから実行するテストの集合に変換する言語処理系 を作った 2024/7/7 〇〇を支えてそうな技術 #2 32
Platform QAチーム体験の感想 • これまで趣味で取り組んできたことを業務に活かせて嬉しい! • チーム体験で取り組んだタスクの中で、今日話したタスクが一番大変 だった(三日でこなす必要があったから)が、一番楽しくもあった • SRE見習い見習いになれた • 今日は話さなかったが、インフラにより近いタスクもあったから • 自社インフラの低レイヤーな操作を課題形式で覚えたり、自社インフラ内の開発 環境を利用可能なアカウントを作ったり 2024/7/7 〇〇を支えてそうな技術 #2 33
まとめ • サイボウズの開発研修の一環として、Platform QAという インフラQA職の業務に取り組みました • その中で、動的解析器や言語処理系を作りました • 趣味で取り組んできたことを業務に活かせてHappy 2024/7/7 〇〇を支えてそうな技術 #2 34