kintoneを支えるKAIZENの技術

こんにちは、kintone開発チームの佐藤鉄平 (@teppeis) です。 今回はkintone開発チームのKAIZEN(改善)活動について紹介します。

技術的負債が減らない!

サービスの開発を続けていくと、次第に技術的負債が溜まっていきます。kintone開発チームでは、開発期間中に溜まってしまった技術的負債は kintoneアプリ に登録しておき、あとで時間があるときに返済するようにしていました。

このあたりの開発プロセスについてはこちらの記事をご覧ください。

ところが、最近技術的負債がなかなか減らないという課題に直面していました。kintone開発チームでは主にメンバーの自主性に任せて負債を返済していましたが、この方法だと、

  • ビジネスサイドからのプレッシャー(もっと新機能を!)
  • タスク締め切りに対するプレッシャー(タスクが遅れないように!)
  • エンジニア以外からの成果の分かりにくさ

といった理由から、負債の返済よりも機能実装や不具合改修などのタスクをどうしても優先してしまいがちです。チーム内の振り返りのなかで、メンバーの自主性に頼るのではなく、違った取り組み方が必要だという認識が共有されました。

KAIZEN DAY !

そこで、丸1日使って集中して技術的負債を返済するイベント「KAIZEN DAY」を定期的に開催することにしました。KAIZENをテーマにした1 dayハッカソンみたいな感じです。

同時に、これまで使っていた「技術的負債」という言葉を「KAIZEN」に置き換えて、開発プロセス全体を含めたより広い範囲の改善活動を実施するようにしました。(負債よりKAIZENの方が響きもポジティブですしね!)

KAIZENタスクにはこんな内容が含まれます。

  • 劣化したコードや設計のリファクタリング
  • 開発プロセスの各種手続きの自動化
  • CI、継続的デリバリの強化
  • 足りない自動テストの追加
  • 自動テストの高速化、仕組み改善
  • パフォーマンスの向上
  • ドキュメントの拡充
  • 新機能や既存機能改善のプロトタイプ実装

日頃からこういったKAIZENタスクをkintoneアプリに溜めていき、KAIZEN DAYでは各メンバーが取り組むタスクを選んで改善していきます。(もちろんKAIZEN DAY以外の日でも日々改善活動は行っています。)

KAIZENネタは日々kintoneアプリに溜めています。
KAIZENネタは日々kintoneアプリに溜めています。

KAIZEN DAYの夕方には発表会(KAIZEN HAPPYO)で各自の成果を共有します。ここで他のメンバーから「おーっ」と言ってもらえるようにみんなガチで集中します。(通常業務も同じぐらい集中してほしいですね!)

KAIZEN HAPPYOでプレゼンを聞くkintone開発チームのみなさん
KAIZEN HAPPYOでプレゼンを聞くkintone開発チームのみなさん。なぜかニヤニヤ。

KAIZENの例

実際に行われたKAIZENの成果をいくつか紹介します。

タスクブランチでのSeleniumテストの実行

従来は、タスクブランチのCIではユニットテストなど短時間で終わるテストだけ実施して、Seleniumによる受入テストはメインブランチにマージ後に実施していました。でもそれだとマージ後にメインブランチを壊してしまう可能性があるため、不安な場合はGitHubのプルリクからワンボタンでSeleniumテストを実行できるChrome拡張とJenkinsジョブを作りました。

「task-accept」ボタンを押すとこのタスクブランチでSelenium受入テストが実行できる。これでマージも安心!
「task-accept」ボタンを押すとこのタスクブランチでSelenium受入テストが実行できる。これでマージも安心!

CIでDBコネクション数、実行クエリ数、APIリクエスト数の見える化

kintoneでは過去にDBへのクエリやXHRによるAPIリクエストを無駄に増やしてしまうバグが発生したことがあり、これを先行運用環境に適用するまで気づけなかったという問題がありました。 そこで、日々のCIでSeleniumテスト時に発生したクエリ数やAPIリクエスト数をグラフ化することで、不自然な増減を可視化することにしました。

DBコネクションやクエリ数の可視化。各コミットごとの増減を監視できます。
DBコネクションやクエリ数の可視化。各コミットごとの増減を監視できます。

このカウント数の集計とグラフ化にもkintoneアプリを使っています。ドッグフーディング!

国際化文字列リソースの管理を自動化

kintoneは日英中の3言語に対応しているため、文字列リソースの翻訳が必要です。サイボウズにはDocチームというドキュメントや翻訳についての専門チームがあり、製品内の文字列リソースの管理や開発チームとのコミュニケーションはkintoneアプリ上で行なっています。

kintoneの文字列リソース管理アプリ
kintoneの文字列リソース管理アプリ

そのため、開発チームがソースコード内の文字列リソースを変更した場合はリソース管理アプリを更新する必要がありますが、この作業は面倒だし忘れることもありました。そこで、Chrome拡張を使ってGitHubのプルリクエストからワンボタンでリソースの変更差分を管理アプリにシンクするスクリプトを作りました。

GitHubのプルリクからワンボタンでリソース管理アプリにシンク!
GitHubのプルリクからワンボタンでリソース管理アプリにシンク!

これでもう更新を忘れてDocチームに怒られることはありません!

その他

他にも分かりやすいものを抜粋すると、

  • Docker でCIジョブを並列実行して高速化
  • CIに PMD を組み込んでコード品質を可視化&チェック
  • @deprecated なクラスやメソッドを使用しているコードの一掃
  • Appium でモバイルSeleniumテストの導入
  • Seleniumテストの並列高速化&安定化
  • 開発の各種指標をダッシュボード化
  • 各種ログからのサービス利用状況を解析するツールの作成
  • 振り返り活動の改善するためのkintoneアプリの作成
  • Sassコンパイル高速化
  • カオス化したCSSのリファクタリング
  • 開発環境の起動を高速化
  • 開発Tipsドキュメントの拡充

といった感じです。CIやテスト関連が多めですね。またJenkins、GitHub、Chrome拡張などの定番ツールの他に、自分たちのプロダクトであるkintoneを最大限に活用しているのも特徴です。

まとめ

KAIZEN活動はPGメンバー各自が主体的にテーマを選択して取り組むことができるため、開発プロセスの改善だけでなくモチベーション向上にもつながる良い活動だと感じています。

今後の課題としては、

  • 1日では終わらない規模の改善にどう取り組むか
  • サービス本体のコードを大きく修正する場合のQAとのバランス
  • KAIZEN HAPPYOでビールとピザを用意する

といったことを解決しつつ、今後もKAIZENを続けていきたいと思います!