はじめに
こんにちは、CrowdLog開発チームの 孫、富田 です。 この記事では、CrowdLog内で2年半近く継続的に活動しているLogStudyについてご紹介したいと思います。
LogStudyとは、その名前が示すとおり「Log」+「Study」、つまりCrowdLogでの学習活動のことです。
CrowdLogの開発チームには国内20人、オフショア(フィリピン)7人のメンバーが所属しており、国内メンバーが主に企画・活動をおこなって来ましたが、最近ではオフショアメンバーも参加して活動しています。
LogStudyはトップダウンで行われるような技術研修ではなく開発者1人1人の想いで作り上げていく広がりを持った活動です。
読者の皆様には、この記事を読まれて学習活動についてインスパイヤしてもらうとともに、ぜひ皆様の職場でも同様な活動を実施されることを期待いたします。
なお、今回の記事では LogStudy とは何かについて紹介し、今後は個々のLogStudyの内容・成果を紹介していくつもりです。
背景
LogStudy活動は、当初CrowdLogの開発方法の改善を目指して開始されました。活動当初は国内開発メンバーも5人ほどで、メンバー全員が集まり手探りでスタートを切った状況でした。当時は開発プロセスを従来のウォーターフォールからスクラム開発への切り替えをおこなっていました。そんな中から開発メンバーの発案でスクラム開発を習得するための勉強会の実施が提案された事がLogStudyの始まりです。
以来、Crowdlogのサービスと開発組織の成長に合わせて、LogStudyも実施するテーマや運営方法の改善を重ね進化を続けています。
目的
LogStudyは当初から目的が明確にされていました。これは、LogStudyをただの勉強会に終わらせず業務に役に立つことを念頭においていたからです。以下にLogStudyの4つの目的を示します。
- 技術習得と活用
- ナレッジ・シェア
- スキル向上とスキルの共有
- 共同作業・コミュニケーションの場を提供
【目的の説明】
技術習得と活用
LogStudyの主目的は、プロダクトを開発するにあたっての技術習得が第一に挙げられます。技術のスコープは広く、開発方法論、設計方法論、ミドルウェア等の要素技術、コーディング技術、SQLの書き方、テスト技法等、およそ開発に関わる技術については全てが対象となります。
また、現在使用している技術に限らず中長期を見据えた技術、普段の業務に限定されない技術も採用しています。ただし、CrowdLog開発でその技術がどのように活用されるかを常に意識してテーマは選定されます。
テーマ選定の際は、テーマが明確にされていなくても、漠然とこんな事を解決したいとの提案があれば必要な技術要素を選定してテーマを決めることもあります。
ナレッジ・シェア
システム開発に当たっては、情報共有が重要な要素になります。数人の開発や、オフィス作業では開発メンバーが近くにいるので、直ぐに情報をシェアすることができます。しかし、ある程度開発者が多くなり、複数のチームに別れ開発を進める場合、またリモート開発、オフショア開発の場合は意識して情報を共有しないと、見逃しや勘違い等が発生し開発上の問題となります。
LogStudyはそんな課題も解決します。例えば、システム全体で共有する情報、例えばデザインルール、共通機能のシェア、テーブル追加や変更等のシステムで一貫性を保つ必要がある場合は、その内容を単に通知するだけではなく、LogStudyの場で情報伝達や議論等を通して漏れや誤りが発生しないようにしています。
また、ナレッジ・シェアは属人化している作業や知識の改善にも役立っています。
スキル向上とスキルの共有
技術習得により各メンバーのスキルを向上させます。また、ナレッジ・シェアによりチームの技術力をアップさせます。
開発チームに新規メンバーが参加した際は、メンバーの経歴、特にメンバーの習得技術をまとめてもらいLogStudyでシェアします。これにより、開発を行う際の適切なタスクアサイン、困った際にヘルプをしてくれる人の特定を容易にしています。
共同作業・コミュニケーションの場を提供
システムの開発では多くの人が関わります。各メンバーは自身のタスクを中心に開発作業を進めて行きますが、それだけでは良いシステムを開発することはできません。各開発メンバーがお互いの作業をある程度共有することが必要です。例えば、開発者はシステムの目的、背景をしらなければ適切な機能やUI/UXを開発できません。ビジネスメンバーについては、システムの機能や制約を押さえて置く必要がありお互いのコミュニケーションが重要な点になります。
同様にリモートやオフショア開発ではコミュニケーション機会が限定されるのでコミュニケーションの場を提供することが重要です。LogStudyでは、コミュニケーションのハードルを下げメンバの一体感の醸成や協力体制の確立にも役立っています。
LogStudy委員会
以下ではLogStudyの運営方法を紹介します。
LogStudyでは運営のために委員会を設置しています。活動を継続して行うためには運営方法を決め維持・管理しておくことが重要です。運営委員会は、1回/週に委員会を開催し以下の内容を実施しています。
- ネタ切れを起こさないように実施したいテーマのアイデアを出しを行う
- 勉強会当日をどのように進めるかをしっかりと事前に考えておく
- 実施したテーマについての振り返りを実施して次回に活かす
テーマ選定と企画
委員会で、委員とメンバーが参加してテーマのアイディア出し、直近で実施するテーマと内容(進め方・教材等)を決定します。メンバーの参加は自由で、実施したいテーマの企画があれば気軽に提案することができます。委員会ではテーマの効果や実施可能なものかを議論・評価し実施可否が決定されます。また、テーマの実施方法、準備等も議論し最大限効果がでるように工夫します。
テーマの実施方法
- 実施スケジュール:隔週2時間(毎週行う場合もあり)
- 実施回数:1回〜シリーズものであれば実施内容を分け複数回
- 体制
- ファシリテーター:企画・進行
- 参加者:当日は内容により各参加者個別に活動、あるはチームに別れ活動
- 教材
- 担当者が資料を作成するが、書籍やWebサイトなどを利用する場合がある
- 準備
- 実施内容
- 資料発表
- 議論・検討
- ハンズオン
振り返り
LogStudyは単に企画・実施するだけでなく、実施内容や実施方法がより効果的になるよう振り返りを実施して改善を行っています。
振り返り
毎週、前回に実施したLogStudyの内容について振り返りを実施して実施内容を整理するとともに、課題や問題の対応を次回のLogStudyに反映させています。また、1年の終わりにはその年に実施した LogStudyについて振り返りを実施します。LogStudy参加者がスクラムのレトロスペクティブ形式で、良かったこと、問題、チャレンジしたいことを挙げ今後の実施方法に反映させます。
成果を記録
LogStudyの大きな目的として、LogStudyで学んだことを実際のCrowdLog開発に活かすことがあります。このために、過去に学んできたことが実際にどの程度活かされているかを計測するための仕組みを用意しました。開発メンバーはLogStudyで学んだスキルを実業務で適用した場合、適用した内容(勉強会のテーマ、適用内容等)をコミットレポートに記録します。LogStudy委員会では、この記録を元に成果を評価します。
過去のLogStudyの紹介
以下では、過去実施したLogStudyの活動の一部を紹介します。 LogStudy のテーマは、大きく分けて2つに分かれています。実施する内容が多く複数回に渡るシリーズものと、1回のみ実施する単発ものです。
- 総実施回数 -74回実施(2022/03 - 2023/09)+ α(2021/04 - 2022/02 記録無し)
- テーマ(抜粋)
- 単発
- GraphQL(GraphQLの紹介、ハンズオン)
- AI居酒屋(プロダクトへのAI活用について議論)
- モンキーテスト大会(リリース機能について開発、ビジネス再度のメンバーで実施)
- Gorm Version Up 共有(Gromライブラリ VerUpの経緯、作業内容、注意事項の共有)
- プログラミング競技会(課題を解決するプログラムを作成する)
- これまでの経験を共有する(メンバーの開発経験、スキルを共有)
- LogStudy振り返り(今まで実施してきたLogStudyを振り返る)
- 開発の話が聞きたい(ビジネスチームからの要望で、開発全般、CrowdLogの機能詳細等をシェア)
- お客様の声が聞きたい(開発チームからの要望で、ビジネスチームに顧客様の要望・不満等をシェア)
- CrowdLogの理解(開発メンバーが機能、アーキテクチャ、設計、適用技術等をシェア) :
- シリーズ(実施回数)
- 単発
- 単発の例 - AI居酒屋(エンジニアチーム+ビジネスチーム)
- AIのLogStudyの活用を議論
- AIについての疑問・不安
- 生産性向上のアイディア出し
- CrowdLogへの活用のアイディア出し
- AIのLogStudyの活用を議論
- シリーズの例 - デザインパターン勉強会
直近の活動(例)
具体的な実施内容の例として直近に実施した活動内容を紹介します。
- テーマ
- コーディング勉強会
- 目的
- CrowdLogのコーディング品質の向上を図り、信頼性向上、拡張性向上、開発効率向上を狙う
- 教材
- 書籍「良いコード/悪いコードで学ぶ設計入門 ―保守しやすい 成長し続けるコードの書き方」
- 第5回対象章
- 設計の意義と設計への向き合い方
- 設計を妨げる開発プロセス
- 設計技術の理解の深め方
- 宿題
- 対象章を事前に読み、下記事項をまとめて参加者にシェアする
- 概要まとめ
- 学び・疑問・感想
- ディスカッションしたいこと
- 対象章を事前に読み、下記事項をまとめて参加者にシェアする
- アジェンダ
- (チーム) まとめてきたことの共有とディスカッション (30分)
- (全体) 各チームのディスカッションについて共有 (10~15分)
- (全体) 休憩(5分)
- (チーム)チームに分かれて課題(40分)
- その回で学んだことを使って、お題について各チームで設計/実装してみる
- 毎回同じお題に対してアップデートをかけていく
- 使用する言語・環境・まとめ方は何を使ってもOK 5. (全体)最後にチーム通しで共有 (15~20分)
- 発表の後に質疑応答
- 感想
- システム設計は、マクロ(アーキテクチャ)レベルの設計とミクロ(コーディング)レベルでの設計があります。本LogStudyにより、ミクロレベルでのコードの可読性、保守性、拡張性改善するためのスキルを獲得しました。
- CrowdLog開発においても本スキルを適用してコーディングを実施するとともに、レビューでも活用していきます。
全体の流れ
成果・適用事例
LogStudyの成果は「CrowdLog開発にあたっての人的、技術的、開発管理的な基盤確立に貢献し、開発効率を大きく上昇させた」ことです。具体的な内容を以下に示します。
ナレッジ・シェアリングによる共通認識の形成
以下の項目について開発メンバーに共通認識ができました。
Gorm VerUp
プロダクトで使用しているORM LibraryであるGormのバージョンアップが必要となりました。バージョンアップに伴い大きくライブラリに変更が入ったものの事前に「v1で書いていたものをv2ではどのように書くべきか」や「主要な変更点」について共通認識がもてていたのでアップデート直後も大きな混乱もなく開発・運用ができている。
ルール周知
既存の「障害発生時のフロー」の問題を洗い出し、見直して開発メンバーに共有しました。これにより障害発生時の対応を効率的に実施できた。
gRPC技術共有
プロダクトの新規機能開発で新技術としてgPRCを導入するとともに、全エンジニアに対しgPRCの仕組み、機能や利用方法をシェアし他の機能でもgPRCを利用できるよう技術をシェアしました。
共同作業、コミュニケーションの場作り(コミュニケーションハードルを下げる)
プログラミング競技会
課題を解決するプログラムを作成する競技会を開催しました。各開発者は議論しながらプログラムをすることでコミュニケーションが活発になり一体感が醸成されました。
モンキーテスト大会
新規機能をリリースする前に、開発チームとビジネスチームが新規機能を使って不具合を検出する大会を実施しました。当該機能の開発者でない視点で機能を使用することで予想外に多くの問題・課題を検出することができました。これにより、新機能を高い品質で新機能をリリースすることができました。
技術適用
デザインパターン適用
GOFのデザインパターンを担当者毎に解説、合わせてプロダクトへの適用箇所を開発メンバーで議論し理解を深めました。これまでは、システム設計の段階でどのようなデザインにすべきかメンバーで議論を重ね決定していました。勉強会実施後は、抽象化や再利用性等の視点も加わり、「この部分は、〇〇パターンを適用すると汎用的になる」のように設計品質を向上することができた。
今後の展望
LogStudyのこれからについて考えていることをお話しします。
成果のフィードバック強化
LogStudyで作成した資料を整備しLogStudyに参加していなかったメンバーでも利用できるようにする。また、インフラ関係をテーマに選定する等、LogStudyによりCrowdLogの開発効率を最大化させるようにLogStudyを運営していきます。
オフショア(フィリピン)メンバーも企画に参加
当初、LogStudyは国内のメンバーで企画・実施していました。現在では、オフショア(フィリピン)のメンバーもLogStudyに参加しています。ただし、現状は参加が中心で企画には関わっていませんが、今後はオフショアサイドの課題や問題意識を汲み上げて企画にも参加してもらう予定です。
社内外への成果の発信
LogStudyで得られた成果をCrowdLog開発チーム内だけにとどまらせず、社内の他のエンジニア組織や社外のエンジニアに対して、技術の発信元としてエンジニアリング・ブログやQiita等の手段で広く共有し多くのエンジニアに貢献していきます。
最後に伝えたいこと
私たちが最後に伝えたいことは、LogStudyを参考にして読者の皆様も状況に合わせた「皆様のLogStudy」にチャレンジしてもらいたいと言うことです。
我々が携わっている業界は他の業界とは異なり技術が重要な要素になっています。我々が扱う技術(インフラやソフトウェア)は進化が激しく常にキャッチアップしておかないと事業自体が陳腐化して競争力がなくなります。
そんな状況の中、我々エンジニアは常に自分のスキルを磨いておく必要のある運命にあります。ただし個人の努力では限界があり、組織としてスキルアップをサポートする必要があります。
CrowdLogではLogStudyという仕組みを用いて、我々エンジニア、CrowdLogサービスそして会社を発展させ続けています。LogStudyは、単なる学習の場ではなく我々を育てる場にもなっています。
読者の皆様もLogStudyを参考にしてご自身のLogStudyを企画・実施していただければ幸いです。