サイボウズの新卒社会人ことびきニキ(@BkNkbot)です。弊社では開発研修コンテンツの一つに「気になる部署の体験に行ける(※1)」というものがあるのですが、2ターム目でGaroon開発チームに受け入れていただきました。
※1) 2週間で1タームとして、これが3ターム分用意されている。絶対に希望が通るわけではないが、配慮はしてもらえるぞ!
1ターム目の体験レポはこちら
この記事について
書く)Garoon開発チームでどんなことを体験したか
特に)❄️Yukimi チームと🌙Tsukimi チーム
書く)私がそこから何を学び、何を得たか
想定読者)Garoon開発に興味を持っている人(社内外問わず)
この期間の目標
Garoonの雰囲気、特徴を外に説明できるほど理解する
PHPとは?何が良くて何がすごい?みたいな最近の開発事情を知る
開発の苦手意識をなくす
Garoonチームは複数のチームからなっています(以下に書いていないところもあります)。私は前半に「❄️Yukimi チーム」後半に「🌙Tsukimi チーム」で体験をさせていただきました。
各チームについてざっくり知る
🌸Hanamiチーム
リリースに必要な基本作業をする
最近はAI関連タスクもやっている
🌙Tsukimi チーム
新基盤への移行タスクやインフラ周りなど
❄️Yukimi チーム
セキュリティ面の担保・ビルドやCIの問題解決
配属前にやったこと
開発メンバーは、開発環境の構築を進めながら、簡単な機能追加の課題をこなすは「Garoon tutorial」に取り組みました。QAメンバーはテスト用環境構築のチュートリアルとして、クラウド版Garoonやオンプレ版Garoonを構築して両者の挙動の違いや基本操作について学びを深めていました。
❄️Yukimi チームでやったこと
Yukimiチームはもう少し掘り下げると「PSIRTから脆弱性情報を受け取って対応」したり「PHPのアップグレードガイドを見ながら弊社製品に使用されているPHPのバージョンをアップグレード」したりしています。
今回はそんな中から、以下の2つのタスクをやらせていただきました。
問題調査 - PHPの難読化処理でエラーが発生していた
第1タームで解決見込みが立ったものの、根本原因がまだ解明されておらず...。将来再発する可能性が考えられるので調査したい!と乗り込みました。
だけど結果として原因を究明するまでには至りませんでした....(悔しい)ARG_MAXの値をみたり、CI実行時に-ttyコマンドをつけてみたりしてた
不具合調査&改修体験 - バージョンにより比較演算子の振る舞いが変わる
GaroonはPHP8.2に順次アップデートをしていたのですが、PHPには「緩やかな比較(==)」と「厳密な比較(===)」があるらしく...。
PHP 8.0以前のksort関数では不安定ソートとなっていたようですが、8.0以降は安定ソートに変わったようです(PHP:比較演算子)。この変更によりGaroonはメチャメチャ影響を受けたので、少し改修体験をしました。
警告
PHP 8.0.0 より前のバージョンでは、 文字列が数値または数値形式の文字列の場合、文字列は比較する前に数値に変換されていました。
この辺にも詳細が書いてあります↓
PHPのバージョンアップが大変であるということを体験できて、個人的にはかなり貴重な体験ができました🙏
🌙Tsukimi チームでやったこと
Tsukimiチームはここからさらに複数のチームに分かれており、「非同期ジョブ実行の仕組みの移行をしているチーム」「デプロイ・マイグレーションサービスの構築をしているチーム」などがありました。
原因調査 - アラートに記載されている非同期ジョブが滞留してからの経過日数の値がデカすぎる
原因調査を一緒にしたり、どういう流れで原因を解明していくのか見学させてもらいました。色々回り道したりしましたが、最終的にはアラートの設定方法が間違っており、 非同期ジョブが滞留しだした日にちのUNIX時間を滞留してからの経過日数として表示してしまっていたことが原因だと分かりました。
Prometheusとかdatadogとかnew relicみたいな監視ツールの画面をまともに見たことがなかったので、「かっけ〜〜!めっちゃエンジニアじゃん!!!!」とテンション爆上げでした。作業ログがとても整頓されていて、残し方などがとても参考になりました。
移植 - 新基盤で動かすタスクスケジューラの作成
「定期的に設定されたカレンダーにおいて自動で祝日を取り込む」非同期処理を新基盤で実行できる形式に改修しました。新基盤では非同期処理ミドルウェアとGaroonとの接続方法が変わるため、専用のAPIを実装しました。
改修 - 仕様を勘違いしていたデプロイマイグレーションサービスの修正
非同期のWorkerの修正をしました。具体的には、返すエラーの種類を変えたり、それに合わせてGoでテストを追加したりしました。
PRをマージできるくらいまで進んだのですが、定期メンテ前だったのでタイミング悪くリポジトリがprotected branchになってしまいました(今はしっかりマージしてあります!)
目標を達成できたか
概ね達成できたと思います!
Garoonチームはモブ作業がかなり多く、発言もしやすいな〜と率直に思いました。ドキュメントなどに遊び心があり、面白いチームでした💪 QAとPGが一緒に作業をしている(モブとかにも同席している)というのが特徴的でした🤔
また、開発タスクに対しても「苦手なところを敢えてやってみる」ということを意識的にできました。モブで見てもらいながら手取り足取り教えていただいたので、小さいですが確実に成功体験を積み重ねられたのもよかったです。
この期間で得たもの
PhpStormやPrometheusといったツールと触れ合えたことはもちろん、大規模なサービスができるにはどのくらいの粒度でタスクが細分化されているのかなどを知ることができました。
Garoon開発のざっくりした流れを前よりも知ることができ、特にどのあたりで大変になっているかなどもイメージできるようになりました。これは他部署に行く上でかなり良い情報を得られたのではないかと思っています😎
最後になりましたが、受け入れてくださったGaroon開発チームのみなさん、調整してくださった開発オンボチームのみなさん、本当にありがとうございました!