この記事は、CYBOZU SUMMER BLOG FES '25の記事です。

はじめに
こんにちは、Garoon開発チームのひろさんです。
私は2024年の9月にキャリア入社し、Garoon開発チーム内のYukimiチームに所属しています。
Yukimiチームでは、Garoonのセキュリティを維持および向上する活動を行っており、 Garoonで使用しているライブラリのアップデートを行っています。
blog.cybozu.io
今回は、Garoonで使用しているPHPをアップデートした際に発覚したOSSの問題を、自分たちでコントリビュートして解決した例をご紹介します。 OSS活動に興味を持っているけど、(これまでの私のように)漠然とハードルを感じている方の参考になれば幸いです。
これまでのこと
私はサイボウズに入社する前は、SIerとして長くWebアプリケーション開発に携わってきました。
前職までの業務でも、フレームワークやその他ライブラリなどのOSSを使用した開発を行っていましたが、OSS活動そのものへは興味はありつつも特に活動していなかったのが実際のところでした。
もしかすると私のように、開発者としての経験は長くてもOSSコントリビュートに対して「やってみたい気持ちはあるけれど、なかなか一歩を踏み出せないな」という方も多いのではないでしょうか?
サイボウズに入社後、以前は一歩踏み出せていなかった私ですが、今回紹介するような修正や、簡単なドキュメント修正、興味のあるリポジトリにイシュー登録されているものの修正を行う活動などをしています。
Yukimiチームでの業務で困ったこと
Yukimiチームでは先般、Garoonで使用しているPHPを8.3へアップデートを行いました。
開発言語のアップデートに伴い、プロジェクトとして使用している静的解析ツールも開発言語に対応したバージョンのものを使用する必要があります。
GaroonではPHPの静的解析にPhanを使用しているのですが、PHPをバージョンアップした当時、Phanでは公式にPHP 8.3をサポートしているとは書かれていませんでした。
しかし、試しに動かしてみたところ、動くには動きそうではあるが、いくつかのPHP 8.3の一部の構文に対応していない状況であることが確認できました。
例:
// https://www.php.net/releases/8.3/ja.php#dynamic_class_constant_fetch <?php class MyClass { const BAR = 'bar'; } $bar = 'BAR'; echo MyClass::{$bar}; // PHP 8.3で動的なクラス定数へのアクセスが追加されたが、Phanでエラーとして検出されてしまった
調査時点で、Phanは半年以上バージョンアップがされていなかったので、このタイミングで他の静的解析ツールへの変更も検討したのですが、レガシーコードの多いGaroonにはうまく適用させることができませんでした。(この部分の詳細は割愛します。)
対応方法を悩んでいたところ、たまたまそのタイミングで、Phanの次バージョンがリリースされる動きがあり、リリースノートではPHP 8.4の構文までサポートされている旨の記載があったため、引き続きPhanを使用する方向で検討を進めました。
その後、次バージョンのPhanがリリースされ、再度PHP 8.3の新構文への対応状況を調査したのですが、依然として前回調査時に未対応だった構文は未対応のままということがわかりました。
OSSコントリビュートについて
さて、サイボウズではOSSポリシーが定められており、「社員が発見した他者 OSS の不具合を報告する努力義務」が明記されています。
blog.cybozu.io
会社としてOSSへの姿勢を外部に公開しているのは、個人的としてもとても良いなと思っており、これもある意味動くきっかけにもなりました。
今回発見したケースでも、ポリシーに則り、私たちが確認した未対応構文についてイシューを登録しました。
※ここについては、本来であれば、はじめに確認した時点で報告を行うべきだったなというのは個人的な反省としてあります。
また、イシュー登録後、該当箇所のコードを読んでみたところ、一部は自分でも改修できそうだと感じたため、コードの修正とテストを追加してプルリクエストを作成してみました。
- 実際に作成したイシュー
- 実際に送ったプルリクエスト
また、自分が対応しなかったイシューについてもYukimiチームのメンバーが修正のプルリクエストを送ってくれて、サイボウズらしいチームワークを感じました。
プルリクエスト作成後の流れとしては、いわゆる普通の開発作業と同様に、プロジェクトのコミッターの方のレビューや修正方針についてのやりとりなどが何回かあり、その後無事マージされました。
ほどなくして修正を取り込んだバージョンをリリースしてもらえたため、その後Garoonで使用するPhanのバージョンアップを行い、現在はPHP 8.3に対応した静的解析を通して開発を行うことができています。
また、イシューやプルリクエストでのやり取りは一般的に英語で行われることになりますが、DeepLなどの翻訳ツールを片手にコミュニケーションを取ることができました。
サイボウズでは社員がDeepLの有料版を使うことができますが、一般的に利用されているような無料の翻訳ツールでも充分にやり取りはできるかと思います。
OSS活動に対して思っていた不安と実際
💭 「自分なんかがイシューやプルリクエスト送っても良いのかな...?」
→ 困ったことがあったり、良くしたいと思ったらまずは送ったほうが良いと実感しました。
💭 「コード読むの大変そうだな...」
→ 対象にもよりますが、普段使っている言語であれば案外読める場合もあるなと感じ、1つ成功体験を感じられました。他のプロダクトのコードを読むことで勉強できるのもOSSならではのポイントだなと感じました。
💭 「英語むずかしそう...」
→ 翻訳ツールを使っても良いし、コード付ければそこそこの英語でも伝えられるなと感じました。
さいごに
この経験を通じて、OSSコントリビューションへのハードルがぐっと下がりました。
今後も業務で使っているツールで何か改善できそうな点があれば、積極的にコントリビュートしていきたいと思います。
この記事が、OSSコントリビューションに興味はあるけど一歩踏み出せない方の背中を押すきっかけになれば幸いです。