【イベントレポート】プロジェクトマネージャー勉強会 ~各社の取り組みや課題から学ぶ会~

プロジェクトマネージャー勉強会トップ画像

こんにちは!TECH Street編集部です!

2023年8月18日(金)に開催した、 「プロジェクトマネージャー勉強会 ~各社の取り組みや課題から学ぶ会~」では「他社のプロジェクトってどうしているのだろう」 「他社のPM業務や課題と対策について知りたい」などのお声をいただきました。そこで、開発現場で活躍している各社のPMが集まり、日々の業務で得た知見や事例、工夫などを発表いただきましたのでその様子をレポートいたします。

登壇者はこちらの方々!

久松佑輝さん/コミューン株式会社
三村亮太さん/パーソルキャリア株式会社
樋口義久さん/株式会社セゾン情報システムズ

まずはロードマップ完遂のポイントについて、コミューン株式会社、久松さんの発表の様子をレポートいたします。

いかにロードマップを完遂するか

PM勉強会画像01

久松:まずは我々が提供しているプロダクト「commmune」をご紹介いたします。「commmune」は企業がコミュニティを簡単に立ち上げることができるSaaSです。

ノーコードでコミュニティを簡単に構築できて、目的にあわせたデザインや機能をカスタマイズできることが特徴であり、日本で最も選ばれているコミュニティサクセスプラットフォームです。

PM勉強会画像02

ここからは本題に移りますが、プロダクト提供する過程でロードマップを予定通り完遂するのは難しいと日々感じています。

PM勉強会画像03

我々のチームでは私がロードマップを作成します。そしてチームリーダーがどれを担当するかを決めてもらい、その後は各スクラムチームのプロダクトマネージャーが要件定義から最後のデリバリーまでを担当しています。

しかし開発サイドとしては、予期せぬことが発生し、想定通りいかないことも多いため、なるべく具体的なロードマップを伝えたくないという心情もあります。3カ月ごとにロードマップを引いていても、予定通りに進むのはとても難しいです。

一方でSaaSは現時点のプロダクトに満足いただくことも重要ですが、弊社のようなスタートアップの場合は、将来の期待値も含めてご利用いただいているということも多分にあると考えます。そのため「いかに解像度高くプロダクトの進化について伝えるか」は重要であり、ロードマップを完遂することが必要です。

そこで、ロードマップ完遂のポイントを5つお伝えします!

ロードマップ完遂ポイント

完遂ポイント①テックリードと粗い見積もりをする

PM勉強会画像04

プロダクトマネージャーだけでロードマップを書いてしまうと、つい内容を詰め込んだものを作ってしまいがちになります。「着手する前に頓挫する」ということにならないためにも、私たちは必ず事前にテックリードと粗い工数見積もりをしています。粒度としては、一般的にシステム要求が整理されている状況までプロダクトマネージャーが情報を整理して、それをテックリードと相談するようにしています。

PRDフォーマット

PRDフォーマット

ゴールに紐づくシナリオを設定した段階でテックリードとコミュニケーションを取り、どれくらいかかるかを整理しています。その後、実際にロードマップに乗ったら、スクラムチームのエンジニアやデザイナーとコミュニケーションを取りながら、要件を詰めていきます。

完遂ポイント②確実なものだけロードマップに入れる

PM勉強会画像06

次に、確実なものだけをロードマップに入れていきます。
新規のお客様と既存のお客様では、情報量を変えています。しかしそれではプロダクトの進化が見えにくいこともあるので、進化を肌で感じてもらうためにも期待値を調整しながらコミュニケーションを取ることもあります。

SHIP(クライアントと弊社社員のコミュニティ)を活用したコミュニケーション例

PM勉強会SNS活用画面

上図のように、弊社のプロダクトである「commmune」をクライアントの皆さまとコミューン社員のコミュニティとして利用しています。
そこで私から定期的に情報発信をしていて、この3カ月の機能開発やリリース手前の機能などを随時シェアしています。そうすることで、我々のプロダクトへの期待値を持ち続けていただくような工夫をしています。

完遂ポイント③PRDを常に最新の状態にし続ける

PM勉強会画像07

弊社はリモートでの開発がほとんどで、意識しないと「情報がSlackのチャンネル上に点在している」といったことが発生してしまいます。しかし、それでは途中から参画してきたメンバーたちは何が正解かわからなくなってしまうので、必ず「PRDを読めばわかる」という状態にしています。

完遂ポイント④Goal単位で優先順位をつける

PM勉強会画像08

PRDをきちんと書いているからこそ、優先順位や開発スコープの調整がしやすくなります。
スコープを調整する際に、requirements単位で優先順位をつけて、スコープ調整をすることが多いと思います。しかし我々はGoalにも優先順位をつけています。そしてそのGoalに対して「どのUserScenarioを紐づいているのか」に対しても優先順位をつけています。Goal、Userscenario、requirementsを紐づけておくことで、ドラスティックな意思決定を可能にしています。

完遂ポイント⑤ビジネスサイドと密に連携する

PM勉強会画像09

弊社にはプロダクトマーケティングマネージャー(PMM)というポジションがあり、ビジネスサイドとのコミュニケーションや、「製品をどう外に出していくのか」というGo To Marketを担っているチームがあります。私たちはPMMと定例でコミュニケーションを取っており、進捗にアップデートがあるとすぐに連携して、QCDを調整しています。
当然ですが、リスクを放っておくと対処法も限定的になりますし被害も大きくなるので、必要に応じて顧客コミュニケーションをアップデートし、真摯なコミュニケーションを徹底しています。

まとめ

完遂までのそれぞれのポイントと達成される目的をまとめると以下の通りです。

  1. テックリードと粗い見積もりをする → 無理なロードマップの作成リスクを下げる
  2. 確実なものだけロードマップに入れる → ロードマップ遅延リスクを下げる
  3. PRDを常に最新の状態にし続ける → 開発時のコミュニケーションコストを下げる
  4. Goal単位で優先順位をつける → スコープをドラスティックに調整できる
  5. ビジネスサイドと密に連携する → 遅延による影響を最小限にすることができる

 

この5点のポイントを抑えることでロードマップの完遂可能性を高め、クライアント・エンドユーザーからの信頼を得ることができます。

 

久松さんありがとうございました!

次にパーソルキャリア株式会社、三村さんより横断プロジェクトのステークホルダー管理について発表いただきました。

複数事業横断系プロジェクトのPMが行うステークホルダー管理

PM勉強会画像10

三村:まずは、パーソルキャリアのPMとステークホルダーの立ち位置について説明いたします。

PMの立ち位置図

PMの立ち位置図

プロジェクトマネージャーはさまざまな環境に置かれることがあり、ステークホルダーとのコミュニケーションをとりながらプロジェクトを円滑に進めることが求められます。

そんなPMの担当業務は…

  • 企画と開発」「経営層とPO」「POとPJTメンバー」「PJTと他事業」など様々な関係性の中でPJTの情報整理を行う
  • 炎上PJTの場合、「炎上原因を特定し鎮火~立て直しを行う」
  • PJTメンバーだけではできない範囲が出てきたときは、PMが広いPJTを推進する

大まかに分ければこのようになっており、「ステークホルダーを特定し何が求められるか、もしくは不足しているかを見つけて情報を整理して伝える」ということがメインの業務といえます。

パーソルキャリアPMの悩み事あるある

PM勉強会画像12

上図は、とある基幹システムプロジェクトのシステム構成図です。基幹システムCの改修を例にパーソルキャリアPMのあるあるをご紹介します。

上図の通り、基幹システムのABCがトライアングルになっていて、基幹システムCはABどちらともやり取りをしています。
改修にあたってシステム調査や企画共有もしていて全体的に合意して進んでいたはずでしたが、なぜかプロジェクトに申し立てが多い状況が続きました。

PM勉強会画像13

それぞれ言っていることは正しいけれども、言い分のすべてを実現しようとすると、仕様が決められず品質とスケジュールに響いてしまい、開発量が増えてコスト増加にも繋がります。

そこで「どうしてこんなことが起きるのか?」を振り返り、少し見方を変えてみてステークホルダー視点を可視化してみることにしました。

PM勉強会画像14

このようにステークホルダー目線、つまり外からプロジェクトを見てみると、問題点が見えてきました。

社内のステークホルダーが特定できておらず様々な影響を多様な箇所に与えてしまい、事業責任者や業務担当からのクレームに繋がっており、顧客メリットはあっても事業にとってデメリットでしかなく事業協力を得づらい状況が発生していたのです。

ステークホルダー管理において大事なこと

ステークホルダー管理において大事なことは

  • ステークホルダーの特定
  • ステークホルダーの期待値コントロール
  • ステークホルダーとのコミュニケーション

であると考えます。

PM勉強会画像15

ステークホルダーの特定

  • 誰にどのような影響がでるのか、様々な観点から確認し、影響する人を探す。
  • システムの主管部門の企画と開発で有識者を探す。

ステークホルダーの期待値コントロール

  • プロジェクトの内容が「事業にとってどういう影響がでて」「どういう対策をとるか」などの目線を揃える。

ステークホルダーとのコミュニケーション

  • プロジェクトの内容について、事業にとってのメリット・デメリットも説明する。
  • またプロジェクトの情報を共有し、事業内で影響するものがないかは監視する。

 

三村さんありがとうございました!

次に株式会社セゾン情報システムズ、樋口さんの発表の様子をレポートいたします。

プロジェクトのゴミ拾い 引き取り手のいない仕事をどう捌くか?

PM勉強会画像16

樋口:我々が提供しているプロダクト「HULFT」ついて、まずはご紹介します。
様々なプラットフォームで安全・確実に、ファイル転送による業務連携を行うミドルウェアというのが「HULFT」です。

PM勉強会画像17

PM勉強会画像18

品質が安定しておりサポート対応も手厚いのが特徴で、MFT(ManagedFileTransferSuites)市場シェアも世界第4位を誇ります。

PM勉強会画像19

今まではパッケージ製品の開発をしていましたが、近年はその製品が持っていたノウハウをプラットフォーム上で提供するサービスとして、クラウド型のデータ連携プラットフォームの提供を開始しました。

この製品の企画、開発、販売、サポートのすべてを自社で行っています。
本日お話するのは、このHULFT Squareの開発を進める中でのお話です。

会社組織とプロジェクトステークホルダー

PM勉強会画像20

製品を開発するとなったときは、部門を横断してメンバーをアサインし、各部門で体制を作ってもらって開発を行います。しかし、「機能組織で横断して開発をする」というやり方では課題も生まれます。

PM勉強会画像21

組織横断活動の課題として、組織の役割からこぼれる業務が発生しやすく、特に今までとは違ったことを行うときに起きやすいです。気付いたら、大事な業務なのに誰もやっていないということが起きてしまいます…
そこで「プロジェクトのゴミ拾い」です。

プロジェクトのゴミ拾いとは?

PM勉強会画像22

プロジェクトのゴミ拾いは「発見」「担当割り当て」「処理」のフローで進んでいきます。

ゴミ拾いフロー①発見

まず、発見での注意点としては心理的安全性を確保し、話しやすい環境を整備しておくことが重要です。

PM勉強会画像23

PMがこぼれた仕事を把握できれば対処できますが、気づいているのに誰も言わないとなると大問題になってしまうので、それを発生させないことが大事だと考えています。

気づいているのに言わないという状況には2パターンあります。それは「負の感情がある」パターンと、「無関心」なパターンです。言った人に仕事を押し付けるような文化だと、マイナスの感情が働いて知っていても言わなくなってしまいます。また、黙っていても自分は困らないという無関心のパターンもあるので、こういったものをプロジェクト全体で払拭して、話しやすい環境をいかに整えるかが大事です。

ゴミ拾いフロー②担当割当

発見したあとは「担当割当」です。

PM勉強会画像24

必要なら自分で処理もしますが、最終的にどこで誰がやるかを考えた上で実施することが大事です。
毎回PMがやってしまうと、それが当たり前になってしまうこともあるので恒久対応としてどうあるべきかを考えて、それをメンバー間で認識を合わせて仕事をすることがポイントです。

ゴミ拾いフロー③処理

割り当てた後はひたすらに処理をこなすこととなります。プロジェクト内でタスクになってしまえば、あとはスケジュール管理をして進めるのみです。

まとめ

PM勉強会画像25

見つからなければ対処もできないので、いかに言ってもらえる環境を整えるかが大事なポイントです。
この一連のプロセスを実現できるかが、プロジェクト成功のカギになると思っています。

 

樋口さん、ありがとうございました!

Q&Aコーナー

続いてQ&Aコーナーであがった質問を紹介します。

(Q)炎上察知能力!!過去最悪の炎上PJってどんなのでした?

久松:急にリクエストが大量発生してさばけなくなってしまい、サービスがダウンしたことがありました。そういう場合も、どこがネックなのか、どこを先に着手すべきなのか、情報を整理して優先順位をつけて対応しました。

 

(Q)開発体制はどんな規模なのですか?まだ若い企業さんですよね。今のところロードマップ完遂率は実際どんな感じですか?

久松:コミューンでは、ウェブブラウザ、モバイルアプリでの提供をしています。一部アメリカへも展開。国内が2チーム、USチーム向けが1チーム、モバイルアプリ(toC)が2チームあります。
2年前に入社し、そのときにひいたロードマップが障害対応により一度白紙になったこともありました。それらの経験をもとにチームでかなり密にコミュニケーションをとるようになったので、完遂率は安定しています。

 

(Q)RequirementだけでなくGoalなどもまとめて優先順位をつけるとのことですが、何かツールを使って管理されていらっしゃるのでしょうか?

久松:RequirementはNotionを使っています。
エンジニアはJiraを使っているので、Notionの対応項目をURLで紐づけています。

 

(Q)パーソルさん、グループ全体でもかなり開発部署も多そう、各PJでの横断組織(品質とか管理とか標準化の横断組織)なんてありますか?

三村:横断組織を管理する組織はないです。

 

(Q)個人情報もかなり多く扱うかと思いますが、そういう点でPMとして注意している意識等ありますでしょうか?

三村:個人情報を取り扱う場合、コンプライアンスのチェックを必ずしています。

 

(Q)表面上出てないけど水面下で冷戦的なステークホルダーの揉め事というか食い違いを事前に察知して事前対策、なんて可能でしょうか?アドバイスあればぜひ

三村:パーソルでもあります。ステークホルダーを特定していくときに、何度か出てくる方はその人たちに話を聞きにいきます。そのように品質を担保しています。

 

(Q)複数のステークホルダーで、言い分が対立してしまい、手を付けられない状態になったことはありますでしょうか?もしあれば、どのように対応していらっしゃいましたか?

三村:対立が起きたこともあります。代表者の方と3者面談して落としどころを見つけていきます。

 

(Q)コミュニケーション難しい...この人きついなぁ...に対する最善なコミュニケーション手段技で「実はこんなことも有効」を聞かせてください

三村:プロジェクトメンバー間でよくあること、文章を使わずに絵を描く。「図で説明して」という形で理解度を確認して、タスクレベルを下げたりしています。

 

(Q)ステークホルダーとの調整は、対面での会話が主体でしょうか。それとも何かしらのプレゼン資料を用意して説明されるのでしょうか

三村:最初に話す時は、ペライチの資料を作ります。それを用いて感触をつかんでから、詳細を作り込んでいます。

 

(Q)ユーザーとコミットしなければならないことは膨大ですが、打ち合わせはどのようにされていますか?やっぱり事前に次第を配布して、ある程度ユーザーに考えをまとめておいてもらうべきでしょうか?

三村:資料は基本MTGのその日に出てくることが多いです。事前配布はしていません。決めることを冒頭に話して、ゴールを見せてMTGに入ります。

 

(Q)ある程度関係構築ができてしまえばやりやすくなると思いますが、関係構築前の最初の接点時は相手の出方や反応、伝達・交渉方法など不安になる点も色々あると思います。最初の関係構築のためにどのようなことを意識していますか?

三村:ファーストステップは、「相手にとってデメリットの話をしにいく」という意識を持っています。話をしたあとに相手の出方をみて、交渉方法を考えています。

 

(Q)HULFT!使ってます!

樋口:ありがとうございます!

 

(Q)確か独自の転送方式でしたよね。全銀連とかで採用って事は品質意識はハンパないかなと思うのですが、そういう品質面についてPM視点で「これ超大変」みたいなお話聞いてみたいです

樋口:品質面には気を使っています。何かあると日本中の銀行に支障が出ます。「品質が一番大事です」の認識合わせを必ずします。品質をある程度保てないと、リリースしないという強い意志を伝えます。もしバグが出たら、それをいかに早く直すかというのも大切にしています。これが出た時が結構大変です。

 

(Q)機能型組織、初めて知りました。開発当初からこういった組織体制だったのですか?それとも何かの契機で変わった、などでしょうか?

樋口:リリースして30年、何度も変わっています。その時々で組織体制は変わっています。人数が多いと機能型組織です。

 

(Q)こぼれた仕事に気づかないまま時間が経過するケースもあると思いますが、早く見つけるために取り組んでいることはありますでしょうか?

樋口:基本的には、一般的のプロジェクト管理と大差ないです。「課題ありますか?」という聞き方はしません。本人が課題と思っていないと出てこないので。「何か気になってることはありますか?仕事を進めるうえでの懸念はありますか?」など聞き方を工夫しています。

 

(Q)心理的安全性、コミュニケーション施策が大事ですよね。こういうのを配慮したプロジェクト内コミュニケーションとか社内コミュニケーションの意識なんてありますでしょうか?対話の仕組みとかオンラインコミュニケーションの仕組みとか。

樋口:基本リモートになって、オンラインのコミュニケーションが主です。Zoomで話さない人、新しいメンバーはなるべく会ったり、集まるタイミングを作ったりしています。手探りで頑張っています。

 

(Q)セゾン情報さん、昔関わったことありましたが軍隊的なきちっとしたSIerで炎上案件とか全く無さそうなイメージでした。(炎上なんてありました?)

樋口:SIerの部門は別部門となり詳しくはありませんが、例えば製品開発では性能要件が満たせていない事がPJ後半に判明し炎上したことなどあります。

 

(Q)Slackとかフル活用ですか?

樋口:Slackフル活用です!基本ここでコミュニケーションを行っています。

 

(Q)チーム組成(メンバー)によって役割(守備範囲)も変わりますか?

久松:都度本人のwillも重視しながら、調整をかけます。

樋口:組織範囲でカバーできない業務などが発生することもあるので、その都度守備範囲は合意形成取ります

 

(Q)並行プロジェクトで、リソース(要員)が、複数プロジェクト兼務の際に、進捗改善の方策が、ございましたら、ご教授頂きたいです。

久松:優先度を整理し、マイルストーンを細かめに引いて、どっちつかずにならないようにしています。

樋口:該当要員の上長に申し入れ、合意形成取るようにします

 

(Q)他人事化する人員のやる気を引き出す方法/運用保守プロジェクトにおけるメンバーのモチベーション向上が課題です。テクニックや事例などあればご紹介お願いいたします。

久松:WHYをとにかく伝える。その上で本人のWillに合わせて伝え方を調整する。刺さるポイントを作る。

樋口:PJの意義を伝えるしか無いとは思いますが、その人のモチベーションの源泉がどこにあるのかは人それぞれなので、その人にあった方法を考えて伝えます(社会的な意義、本人の成長、誰か身近な人の役に立つなど)

 

(Q)みなさま、プロジェクトマネージャーをどのように教育されていますか?

久松:毎週の輪読会 + 失敗することを前提にアサインして、実戦経験を積んでもらいます。(最悪僕がケツを拭けるところまでは割りと好き勝手やってもらっています)

樋口:研修形式でのPJ管理の初歩の学習、PMBOKの学習、後は実践です

 

(Q)プロジェクト内容を社外に公開できる会社がうらやましいです。。。 プロジェクト管理ツールは何を利用されていますか?

久松: Notion、Jiraを利用しています。

樋口:JIRAとConfluenceを利用しています。

 

(Q)各開発のPMが同時に介する機会、対話はありますか?

久松:PMが揃って毎朝、朝会をしています。毎週定例会も行っています。他のチームのPMと意見交換しています。毎週ロードマップをみて確認しています。

三村:システムごとにプロジェクトが分かれているので、そこのPMが週一で集まっています。

樋口:プロダクトの担当者が集まっている部署なので、課の定例会などで日常的に会話しています。

 

(Q)PMは様々な職種を束ねていく役割になると思います。個性豊かで価値観が異なる人材に、どう安心感や希望を与えていくか、MTGセットなど含め話を聞きたく思います。

久松:3ヶ月ごとに目標をセットし、私としてこうなって欲しい姿と、各メンバーがこうなりたい姿の共通部分をまず作ります。そのうえで、その共通部分に向かえているかどうかを毎週の1on1で確認し、調整するようにしています。

樋口:1on1を実施し、他の回答にあるような相手によって好むコミュニケーションを取るように注意しています

 

(Q)プロジェクトマネジメントを体系的に学習する方法

久松:私自身は叩き上げ+社外のPMに教えてもらっていました。メンバーへは、私が課題図書を決めて、定期的に輪読会を開催しています。

三村:PMBOK。社内研修を行っています。興味がある分野をチームで学習して深めています。

樋口:PMBOK。アジャイルになったとしても、体系立てて学べる。ある程度実践をしつつ、PMBOKを学ぶのがおすすめです。

 

(Q)チーム内でモチベーションが低いメンバーがいた場合、何か行動しますか。

久松:1on1を毎週行っており、そこでモチベーションの確認をしています。具体で困っていても、抽象度を上げると納得感が出てくるポイントがあると考えており、とにかく対話が重要だと考えています。

三村:1on1。その人のモチベーションをモニタリングしています。それでも難しい場合、その人がやりたいことを探したり、無理だった場合は他のプロジェクトを探すこともあります。

樋口:プロジェクトの目的や意義を伝える。相手が好む伝え方をする。社会の貢献度なのか、社内の誰かなのか、世の中に響くのか、どこに響くものなのかを伝えるようにしています。

 

(Q)プロジェクトとマネジメントの基礎how-toも、もちろん大切だと思いますが、 非協力的な人財がいた場合の建設的な対応方法、具体的な例を知りたいです。多様性とは云うものの、どれだけ優秀でも調和しない場合はチームメンバーとしない方が良いという意見も多く聞き、実際にその通りだったこともあります。 非協力的な内容もそれぞれだと思いますので、その辺りの具体例、対応例、解決例を知りたいです。

樋口:やる気がない、プラスの感情がない人はモチベーションを上げてもらう必要がある。技術力はあるんだけど、コミュニケーションに難ありの人もいたりする。その場合は、この人とコミュニケーションを上手に取れる人(猛獣使い)を用意します。

三村:コミュニケーションをとっていくなかで、その人のスキルややりたいことはヒアリングして把握する。その人に合うようなタスクを振る。また、知識をつけてあげて取っ掛かりやすくしてあげる。やる気を出す工夫をしています。

久松:スタートアップの小さな会社はカルチャーにフィットしているのかを重視しています。他の人に-1%与えてしまうと、いない方がいいくらいの判断をしています。期待値を明確にして、現状の評価と照らし合わせるようにしています。

 

(Q)PMのやりがいと、PMをやる上での一番抑えないといけない急所は何ですか?

樋口:やりがいは、自分にある程度の決断権限があるところです。抑えるべき点は、やり切る力が求められます。新しいことや今までにないものを作り上げる仕事です。未知のものがやってきたと感じる人たちもいるので、いかに自分が目指すものを作り上げるかだと思います。

三村:プロジェクトが終わったら解散してしまう。その後もチームの関係性を繋げていくことが大切。コミュニケーションが自分の強みだと考えています。相手を尊重することを意識しています。

久松:ロードマップを決めて、お客さんに使ってもらうものをつくれているところが面白いと思います。
WHYにこだわった上で、納得感の醸成をいかにできるか。様々なスキルはあるが、納得させて目標に達成に向けて推進していく力。

 

(Q)どうしたらユーザ部署・責任者にFit in Standard の理解を促すことができるのか現行システムでの業務が当たり前で、業務ステップが変わる事を心配し、受け入れてもらうための説明会に時間がかかる。皆様はどうやって納得させていますか。

久松: プロダクトのあるべき姿を解像度高くキーマンに伝えて納得感を醸成しにいきます。

樋口:全員を説得するのは大変なので、該当部門のキーマンが誰なのかを把握した上でそのキーマンの説得に注力します。後はキーマンから部門内に展開してもらうようお願いします。

 

(Q)ユーザ部署・責任者はシステムプロジェクトは業務範疇外として、プロジェクト定例会への参加率が大変少ない。UAT直前にしてこれでは業務ができないとクレームを受ける。ヒアリング・要件定義から積極参加させるにはどうしたらいいですか。

久松:弊社の場合、「プロダクトこそ経営」のスローガンのもと、プロダクト価値を全社で高めることを最優先にしているので、このような状態に陥っていないため回答できないです。

樋口:PJの初期段階で受け入れテストのテストケースを作成し、ユーザ部門レビューを受けて合意を取った上で以降はテストケースが変更になる場合のみ、定例会に出てもらうなどいかがでしょう?
ユーザ部門としても必要性の薄い会議に出続けるのはつらいかと思います。必要な時に必要な理由を説明して出てもらうようにしてはいかがでしょうか。

 

(Q)いちばん大変だったプロジェクトは何か  そのとき、どう乗り越えたか ・「この会社だから達成できた」と感じたものはあるか

久松:毎週不具合が発生し、新規開発をストップせざるを得ない状況に過去に一度陥ったことです。
その際は、1Qの開発リソースをすべて不具合に対する恒久対応に費やしました。もちろんすべてのクライアント様から納得いただけたわけではないですが、カスタマーサクセス部が協力して クライアント様へ丁寧な説明を行ってもらえたことによって、被害を最小限にすることができました。

樋口:製品の開発終了間際に経営層からPJ要件の認識が違うと指摘を受けたときです。
関係各所と協議、PJ内での対応出来ることできないことの整理、今後のリリースロードマップでの取り込み提示など様々な人を巻き込んで何とかリリースにこぎつけました。
これも開発、サポート、販売などすべての機能を自社で持っているからこそできた対応があったと思っています。

 

(Q)クライアントから無理を言われても飲んでしまい、後でチームや会社に迷惑をかけて、後悔することが多いです。 交渉が大変苦手なのですが、クライアントの満足を満たしつつ、自社の言い分を通す方法として、どのようなことがありますでしょうか? また、交渉を学ぶ方法はありますでしょうか?

樋口:SIerではないので、「自分たちの製品がどうあるべきか」を判断軸にしています。要望はお断りすることもあります。ただやみくもにNOを出すのではなく、どんな製品で、何を目指しているからこの製品があるのかを説明し、未来を目指している姿もお話して納得してもらいます。

三村:事業として読み替えての回答です。事業が何を望んでいて、何を求めているのかを整理して、期待値調整をしています。スケジュールで足が出てしまう場合、複数案を提案して、落としどころを作ります。

久松:SaaSなので、個別開発は基本的にお断りしています。要望は製品への期待でもあるので、実現したいプロダクトの世界に沿っているのか?という観点でみて、優先順位を上げることもあります。ビジョンを明確にして、そこと上がった要望を照らし合わせています。

 

Q&Aコーナーは以上です。

次回のイベントレポートもお楽しみに♪

【イベントレポート】データ分析基盤エンジニア勉強会 ~各社の取り組みや課題から学ぶ会~

データ分析基盤サムネイル

こんにちは!TECH Street編集部です!

2023年7月27日(木)に開催した、 「データ分析基盤エンジニア勉強会 ~各社の取り組みや課題から学ぶ会~」のイベントレポートをお届けします。今回はデータ分析基盤エンジニアが集まり実際の実務で得た知見や、課題、改善策などを共有しあう勉強会イベントを開催しましたので、その様子をレポートいたします。

 

登壇者はこちらの方々!
鈴木 裕之さん/パーソルキャリア株式会社
池田一樹さん/株式会社コーセー
楊 明さん・王 毅超さん/株式会社良品計画

早速、内容を紹介いたします!

まずはパーソルキャリアの鈴木さんよりマルチクラウドに対応できる分析環境の導入事例についてお話いたしました。

マルチクラウドにして分析環境を導入した話

データ基盤エンジニア勉強会画像01

鈴木:まず初めに私の所属について紹介します。現在はパーソルキャリアのシステム共通BITAという組織に所属しており、具体的な業務としてはクラウドの推進やセキュリティ対応、OPSの高度化などを行っています。今後、さまざまなクラウドにシフトする上で分析環境を持っているのが我々の部署となっています。

データ活用のビジョンとしては…

  • ビジネスとして実務で利用するための環境が整っていること
  • データサイエンスの活用サイクルが運営できていること
  • 管理体制を置き、セキュリティ管理が徹底され安全に利用できる環境になっていること

この3点を念頭に置いています。個人情報を扱っているためセキュリティの徹底はとても重要ですので注意しつつ活用するのがビジョンとなっています。

データ基盤エンジニア勉強会画像02

我々は事業の可視化を目的としているので、事業間KPIの共通定義化や業務効率化など、上記のような目標を立てて、それに対して環境を提供していく役割になっています。それをベースとした現行のシステムは以下図の通りです。

データ基盤エンジニア勉強会画像03

2017年頃からコツコツと広げていき、今の形にしていきました。
ただ下図の通り、経年の課題がでてきており…

データ基盤エンジニア勉強会画像04

事業分析の課題としては、サービスの多様化によって分析要素のスペックが追いついていない。利便性の悪さが顕著になってきました。
また保守の課題としては、できたときはスモールスタートだったので、手動運用で対応していましたが、それが限界になりました。リソースの課題としては、キャパシティの逼迫が顕著になってきました。そこで、課題解決のために新環境を構築するプロジェクトを発足いたしました。

新環境の構築でやりかったこと

データ基盤エンジニア勉強会画像05

サービスの変化や成長はかなりスピード感をもってやっているので、その成長に合わせた分析ニーズも変化していきます。それに追いつけられるような環境を提供し、「すぐ施策に繋げられるように実現していきたい!」というのが新環境の目標でした。
そのためにRFP(Request For Proposal:提案依頼書)を提示するために大事なことを考えてみたところ、先ほど提示した事業・保守・リソースという3つの課題に対して、自分たちにマッチする製品を見極めることが重要と考え、PoCの実現や製品ベンダー、専門SIerとパートナーを組んで提案してもらう形式としました。

そこで決定したのが【databricks社】のプラットフォームです。

データ基盤エンジニア勉強会画像06

我々の組織にはデータ分析をゴリゴリする人が全体の20%ほど在籍しています。その人達は重い処理をやりたいのにライト層の人達によってDBの負担がかかっているという課題がありました。その課題が解消できるのが【databricks社】のプラットフォーム でした。

データ取扱いの工夫について

我々のデータは個人特定ができるようなものが多く入っています。その中で「ビジネスと分析で使う領域は確実に分ける」という思想で構築する必要があるため、個人特定項目は、分析環境には持ってこれないようにシステム化を行いました。

データ基盤エンジニア勉強会画像07

分析ではIDを暗号化し個人情報保護法に向けた加工などをしています。
また分析の利便性を上げるためにも、分析用カラムは自動付与できるようにスクラッチしています。
そうすることで、今まで加工していたものが加工不要になるので、汎用的にジョブ化するという対策にしました。

ネットワークについて

データ基盤エンジニア勉強会画像08

アクセス設計についてもHUB化構想ということで、間にワンクッション置いて通信させる構成にしています。そうすることで、分析環境としている右側のAzureにアクセスできるポイントが限定的になり、ネットワークのセキュリティが安全に管理できるようになります。
またデータソースが多すぎて「ジョブネット地獄」を効率よく解消するように構築しました。そのやり方としてMart処理との紐づけをおこないました。

データ基盤エンジニア勉強会画像09

データマートは、DSが揃った段階で集計させるようなジョブ構成を取っており、Queが溜まったものから集計をかけることで、ジョブ効率を上げています。

保守について

保守に関わる社内の申請まわりについても改善を図りました。

データ基盤エンジニア勉強会画像10

これまでは個人情報がたくさんあるので、改善前まではそのデータを使っていいかどうかのコンプライアンスチェックをしていました。しかし時間がかかってしまうので、スクラッチで申請画面を用意して、自動的に項目チェックや入力補完、検知をできるようにしました。
そこで、今まで主導対応していたバッチ処理の適用の作業を半自動化。保守工数の削減を実現できました。しかしまだそのまま反映するのは難しく、半自動化となっているため今後改善の余地はあると考えています。

またジョブ状態情報を取得してモニタリングに活用できるようにもしています。

データ基盤エンジニア勉強会画像11

左側にあるバッチ稼働状況やレポート通知などをダッシュボード化して、最終的にはGrafanaに流し、利用者の方に公開できるようにしました。

まとめ

環境移設に向けて苦労したことは…

  • 変化を嫌がる
  • データが異なる
  • 初期不具合

この辺りがあげられます。ただ難しいのは当たり前なので技術的な面は仕方ないですが、最大の注意ポイントは、「利用者へのケア」です。違和感があるのは当たり前なので、ガイドラインの整備や勉強会の実施を重要視しています。
最終的な構成は以下の図の通りです。

データ基盤エンジニア勉強会画像12

今後はせっかくデータのHUB化ができたので、リアルタイムでデータを使うことを想定し、ビジネスにより貢献できるようにしていきたいです。またマスキングのあり方はまだ改善できる余地があると考えています。
夜間トラブルについても、自動復旧の定義が重要なポイントと捉えているため、さらに試行錯誤しながら、よりよいデータ分析基盤を整えていければと思っています。

 

 

つづいてはデータ活用における情報部門の苦悩について、株式会社コーセーの池田さんにお話いただきました。

データ活用事例における「しくじり」と「学び」

池田:突然ですが、このような境遇の方はいらっしゃるのではないでしょうか

  • 「DX」と言われてデータ活用のプロジェクトがスタート
  • うちの会社ってそもそも誰が同データを扱っているのか?
  • 今までやったことがないけど、私はどうやって貢献できるのか
  • 複数プロジェクトを兼任していてこればっかりに時間を避けない

私もこのような悩みを抱えていた(現在進行形でもありますが)1人です。
今回はゆるりとデータ活用に踏み入れた私が、同じように悩みを抱える事業会社の情報部門の方々に参考となるように

  • データ活用を始める際につまずきやすいポイントはどこなのか
  • しくじりの原因はどこに潜んでいるのか
  • どうしたら事業会社がデータ活用に向けてスムーズに取り組めるのか

と、上記をポイントにしたお話をできればと思います。

データ活用プロジェクト発足の背景と目的

まずこれまでの弊社のデータ活用は「使えない/使いづらいデータ」を「一生懸命加工して運用する」日々でした。

データ基盤エンジニア勉強会画像13

決してデータ活用を行っていないわけではありませんが、左側にあるようにデータが散在していて、そこから扱えるものだけがエクセルを使って加工し、データ分析をしている状態…。
そこで、右側を目指してプロジェクトを発足し、その先にはデータドリブンに施策を打てることを目的としています。
このプロジェクトはデータの一元的な集約・蓄積と活用可能な共通プラットフォーム化を推進するために・・・

データ基盤エンジニア勉強会画像14

真ん中にあるデータ活用基盤を作ることを目的としています。
本日はデータ収集と加工の部分に絞ってお話します。

検討①データの収集

まずは受送信システムのファイル連携HUBとなるIF基板について
システムごとにやり取りするとメッシュ構造となってしまうため、HUBとなるS3bucketを置くことによって、やり取りを簡素化することが狙いです。

データ基盤エンジニア勉強会画像15

データ基盤エンジニア勉強会画像16

この基盤が少し前にリリースされたので、ここに集まるデータをレプリケーションして、データレイクを作ろうという方針になり、データレイクの構成を意識したIF基板の再設計に着手しました。
構成を簡単にお話します。

データ基盤エンジニア勉強会画像17

まず、S3 bucketの中に送信システムごとのフォルダを作成

データ基盤エンジニア勉強会画像18

システムAから送られたデータはAフォルダの下、システムBから送られたデータはBフォルダの下へ。そのファイルを受信システムが受信する、という構成になっており、権限設定をしています。

この他にも、下記図の①〜⑥の検討ポイントがありました。

データ基盤エンジニア勉強会画像19

ここに集まるデータはすべてデータレイクに行くので、きちんと複数のシステムが送信できるような、ファイルを置けるような仕組みにしなければならないので、①で連携の方式を整備しました。

②は社内とやり取りするシステムや社外とやり取りするシステムがあるので、それはきちんと分けて、権限管理やセキュリティの設計を行えるようにしました。

その他にもいろいろな検討項目がありましたが、3カ月にもおよぶレビューと検討を経て、ようやく実践へ。しかし運用をはじめると、設計不足が発覚…。数々のクレームも出てきてしまい、その結果、設計のやり直しを余儀なくされました。

データ基盤エンジニア勉強会画像20

データ基盤エンジニア勉強会画像21

アプリベンダーと一緒にやっていて、ガイドラインの作成はベンダーさんにやってもらい、コーセーの社員がレビューをする形をとっていましたが、その契約が切れて担当者がいなくなってしまったので、運用担当の私たちがガイドライン作成のやり直しを引き継ぎました。
その結果、「このルールなら大丈夫」というところまでたどり着けましたが、最初の段階で設定を行っているシステムがあったので、それに対してはシステムの修正を依頼してやり直しとなりました。
それがしくじり①「3カ月検討した結果、振出しに戻る」です。

検討②ETLツールの検討

ETLツールについてもトラブルがありました。

データ基盤エンジニア勉強会画像22

最終的に収集からデータの可視化、提供までの流れのイメージは上記の通りです。
途中に出てくるETLツールについては、製品の候補をあげておこないました。
まずは機能を洗い出して、評価を行いました。

データ基盤エンジニア勉強会画像23

評価したところで、どうやって判断するのかなどが分からなくなり、こちらも再度見直しとなりました…。
そこで、重要度の列を追加し、凡例で基準を明確化しました。
△の定義をきちんとしなければ、私たちのように迷子になってしまいます。

データ基盤エンジニア勉強会画像24

コーセーとして、AWSに統一したいという意思を、きちんとベンダーさんに伝えました。
これが「しくじり②要件の整理・ツールの評価をやり直し」です。

しくじりの原因は

それぞれのしくじりの原因はどこにあるか改めてまとめてみると…

データ基盤エンジニア勉強会画像25

根本的な原因は「やってみようといえる人が社内にいない」「コーセーの意思がない」つまり、コーセーの熱意と、行動力が欠けていたことが大きな要因ということがわかりました。
そこで今後の対策と教訓として変化のためのアクションを仕掛け中です。
※青色をto beと見立ててまとめています。

データ基盤エンジニア勉強会画像26

専任者のアサインはとても重要です。事業会社の情報部門に責任を与えることによって、事業会社が主導できるデータ活用が進められると考えています。

しくじりで得られたデータ活用に取り組む際の教訓としては以下の通りです。

  • レビューで収集がつかなくなったら「まずはやらせてください!」
    →成功体験/失敗体験をもとにすることが一番早い
  • ツール選定は想いを込めて。承認を取るときにはフラットに。
    →自分たちがどうしたいのか、どうあるべきかを最優先に

自分たちがどうしたいのか、会社がどうなってほしいのかを込めなければ無機質な選定になってしまい、できたあとも使えなくなってしまうので、重要なポイントだと思います。

まとめ

データ活用における情報部門の挑戦と苦悩は…

データ基盤エンジニア勉強会画像27

意思のある個人がきちんと挑戦し、壁に当たったら苦悩はチームで乗り越えるということを思い知った、しくじり話でした。このしくじりと教訓が皆さんのデータ活用の糧になれば嬉しいです。

 

 

 

最後に無印良品のID-POSデータ分析について株式会社良品計画の楊 明さん/王 毅超さんにお話しいただきました。

 

speakerdeck.com

無印良品のPOSデータ分析基盤をご紹介

データ基盤エンジニア勉強会画像28

王:様々な形式で展開されている無印良品ですが、実は市場としては日本がいちばん大きいです。

データ基盤エンジニア勉強会画像29

データ基盤エンジニア勉強会画像30

よって分析のデータもたくさん種類があり、活用ルートもたくさんあります。
また良品計画は2021年9月から『第二創業期』がスタートしており、IT・ECデジタル部門における中期経営計画としてはデジタル化による効率化やECサイトの売り上げ増が組み込まれています。

データ基盤エンジニア勉強会画像31

ここからは具体的なデータ活用メソッドをお伝えいただくため、楊さんにバトンタッチします。

IDーPOSデータ分析の目的

楊:IDーPOSデータ分析の目的としては下の4つにまとめられます。

データ基盤エンジニア勉強会画像32

データ分析の際は目的と要件で整理しないと、なかなかゴールに届きません。
よって要件は以下の通りです。

データ基盤エンジニア勉強会画像33

データは将来的に必ず増加するので、それに対応できるように考慮することがポイントです。

IDーPOSデータ分析の全体構成

データ基盤エンジニア勉強会画像34

基本的にはMUJI POSのシステムからAWSの分析基盤にデータ連携されます。
そしてKinesisを経由してPOSデータを集約し、MUJIデータレイクに蓄積されます。
データレイクに蓄積されたデータはqueriesに加工して、それぞれの分析ニーズに応じてデータマートが作成され、そのデータマートはさまざまな利用者に提供されます。

そこからは分析データのために、データレイクが必要です。

データ基盤エンジニア勉強会画像35

MUJIデータレイクはこのような3層の構成になっていて、それぞれで保存されるデータが違います。

データ基盤エンジニア勉強会画像36

POSデータの集約について、今回はストリーミング処理とバッチ処理の2つで、鮮度と精度を両立させるように構築しました。ストリーミング処理は、5分に一度はデータ刷新しています。

データ基盤エンジニア勉強会画像37

店舗のアプリ(Azure)側にjsonファイルが通信されますが、アプリ間では一般的にはjson形式で通信されます。しかしjson形式は分析しにくいので、今回はデータ連携の際に随時Lambdaで分析しやすい形にフォーマットを変更して、データレイクに蓄積されるようにしています。

細かい事例は以下の図のようなイメージです。

データ基盤エンジニア勉強会画像38

左側はjson形式です。
この中には取引番号、担当者情報、購買商品の情報が入っています。
jsonファイルのままだと分析がしにくいので、Lambdaを経由して右側のようにテーブルごとに解析されます。

データ基盤エンジニア勉強会画像39

リアルタイムでデータ連携されるので、レジ側に随時データがくるため、パフォーマンスが大切だと考えました。自分の業務はどれくらいのパフォーマンスが必要かは、事前に調査と確認が必要です。
無印良品に関しては日本に500店舗ほどあり、店舗ごとに平均して10台ほどのレジがあります。レジはリアルタイムのデータ生成ではありません。一度のお会計でおよそ1分かかると考えれば、どれくらいでリアルタイムデータが生成されるかは見積もりが取れます。

データ基盤エンジニア勉強会画像40

正しいデータを担保するために、ストリーミング処理以外にも毎日バッチ処理を行っています。
計算済みの正しい取引データは、前日分が転送されてデータレイクに蓄積されます。

AWS Glueを採用した理由は、サーバーレスなので環境構築がないことと、サーバーのインフラ運用が一切不要なことです。また、転送されたデータはカタログを生成できるので、カタログを管理できればデータの移管性を担保できます。

データ基盤エンジニア勉強会画像41

転送されたデータや蓄積されたデータは、データごとに唯一のカタログが生成されます。
分析ニーズやツールはさまざまですが、移管管理が可能です。

データ基盤エンジニア勉強会画像42

作成されたデータマートは、BIツールを接続して可視化やレポートを出して分析するなどして利用します。

今後の展望

データ基盤エンジニア勉強会画像43

現在、ストリーミング処理はリアルタイムで行っていますが、後ろの処理はリアルタイムではありません。LambdaとAthenaでバッチ処理をしています。今後は、ストリーミングデータで可視化や在庫検知の仕組み構築にチャレンジしたいです。

 

鈴木さん、池田さん、楊さん、王さん、発表ありがとうございました!

Q&Aコーナー

続いてQ&Aコーナーであがった質問を紹介します。

(Q)「ビッグデータが溜まっているのでデータ利活用で価値を見つけたい!」とメソッドファーストになってしまいがちな現場に対する、とっかかりに必要なスキルセット/ビジネスパーソンの種別を教えて下さい

鈴木:私たちの部門は、データ分析の部隊やビジネスの部隊など専門の人たちがいます。そこのリーダーたちと意見交換を密に取っています。スキルセットは、パフォーマンスセットの技術者が多いです。

 

(Q)データ分析基盤の活用でコスト面での苦労や改善の工夫などがあれば教えて下さい

鈴木:利便性があるところとマッチして、コストもかかる。その分リソースを使うため。リソースを使う上でキャップをかけていくようにしていました。

 

(Q)「事業間KPIの定義」はなかなか難しそうですが、どのような観点でKPIを決めて行かれたのでしょうか

鈴木:チューニングに関わっており、KPIの決定に鈴木さんは携わっていません。

 

(Q)いままで手入力で運用していた→さすがに手入力だと回らないから基盤構築しよう、の境界線は意外と大きいのかなと思っています。最後の一押しは何かあったんでしょうか?(閾値を超えるきっかけ、のようなイメージ)

鈴木:ターニングポイントを設定しており、「この作業は要・不要か?」「テックの力で解決できないか」を考えています。

 

(Q)パーソルさん。AWSとAzureのマルチクラウド環境構築で難しい点はありましたか?

鈴木:AWSについては以前から整備されていました。
AzureやGCPはそこまで整っていません。Azureは管理できる人がおらず、自分たちでやっちゃおうという勢いで始めたので、基板の運用保守の調整をするのが難しかったです。

 

(Q)可視化ツールが見えました。 タブローとPowerBIは似ているツールだと思っているんですが、どう使い分けされていたんでしょうか

鈴木:PowerBIはローカルにファイルが出来てしまう。そこにデータができてもいいものはPowerBI。より分析のニーズがアナリティクスに近いユーザーには、tableauを使わせています。そこまで垣根はないです。

 

(Q)DatabricksをAWSではなくAzureベースで構築された理由を教えてください。

鈴木:AzureのなかにDatabricksの窓口があり、リリースも早かったです。
1年前の検討時にGCPなども候補にあったが「東京リージョン」があるのがAzureでした。社内ルールで東京リージョンを使う必要がありました。

 

(Q)コーセーさんのIT化はどのような感じですか?社内IT化事情とかユーザー向けのアプリとか

池田:化粧品メーカーのIT化は、お客さま用システムと社内システムの2つがあります。肌診断アプリや美容スタッフとオンラインでカウンセリングするアプリケーションやECサイト、顧客IDの管理基盤などがあります。社内システムとしては店頭の販売履歴管理システムや社内のワークフローシステム、人事システムなどです。

 

(Q)うちの会社の話かな?と思いました。専任アサインが未着手である点は、なにかご事情あるのでしょうか?

池田:リソースが不足しているためです。

 

(Q)コーセーさん、エンジニアはどのような規模・体制ですか?

池田:情報部門は約60名です。基盤全般、コーポレートシステム、基幹システム、マーケティングシステム、DX推進の分類に分かれて課が構成されています。

 

(Q)IF基盤について、データカタログのようなものは構築されている・検討されているのでしょうか

池田:データカタログはまだ検討できていません。ETLの仕組みを構築した後に検討予定です。

 

(Q)しくじり①について、あるあるすぎて胸が痛くなりました。。。レビューを何度も行ったにもかかわらず、見直しが発生した原因って何だったんでしょうか?

池田:実際の運用において発生するケースを網羅的に検討できていなかったからだと考えています。
机上検討のみで100%網羅できるケースは少ないと思うので、PoCなどを行って実際に試してみることが必要だと思います。

 

(Q)コーセーさん、AWSで日本語対応をMUSTから外すのはなかなか思い切ったと思います。ユーザーから不満でませんでしょうか?(弊社だと無理そう)

池田:あくまでAWSコンソール上の操作なのでMustからは外しています。
事業部門などのエンドユーザが利用する画面の場合は日本語対応が必須となりそうですね。

 

(Q)チームが若いメンバー中心の体制だったようですが、基盤構築のあたり、他の構築事例などは何か参考にされたのでしょうか。

池田:DX推進課は若手メンバーが多いのですが、弊社はプロジェクト制をとっており、60名いる部員のうち複数の課のメンバーが混ざって業務を行います。
他の事例としては、AWSを利用しているのでAWS社の方に事例やベストプラクティスを教えてもらうケースが多いです。その後にコーセーではどのようにしたら最も運用しやすいか考慮してカスタマイズしています。

 

(Q)KOSEさんに質問です。ベンダーさんとの協業のお話がありましたが、どこまではベンダーに任せ、どこまでは自分たちで内製化する、といった軸はありますか。

池田:AWSの環境構築はコーセー、アプリケーション開発はベンダー、という線引きを行っています。
AWSを標準としている以上、アーキテクチャやサービスへの理解ができていないと、ベストプラクティスやガイドラインに沿った構成になっているか、ということや障害対応、コスト最適化が推進できないためです。

 

(Q)話を聞いている感じだと、かなり大規模で多くのステークホルダーが関係するなかで、半ば炎上チックな状況になってしまったのかなと思いました。どのように切り抜けたのか、その時の苦労話含めて伺いたいなと思いました

池田:今回のプロジェクトは仕掛中のもので、ユーザーへの影響は今のところありません。まだリカバリできる状況で、炎上していないです。

 

(Q)意思決定機関があるのですね。その機関ができてからやはり格段にスピード感があがったのでしょうか? また、意思決定機関として選ばれたのはどういったメンバーでしょうか。 もともと社内にいたメンバーで構成されているのかも含めて知りたいです。

池田:スピードが格段に上がったとはいえないと思います。ガバナンスや標準化ができたので、そういう意味ではスピードが上がったと思います。
60人中メインのPMが6名。この6名を意思決定機関として推進しています。ほとんどが中途メンバーです。

 

(Q)コーセーさんのIT部門はSIer出身者が多いのでしょうか。

池田:Sier出身者が多いです。
ここ数年は情報部門における新卒採用を行い始めたので、SIer出社ではない者も徐々に増えてきております。

 

(Q)池田さんへ 内容にあまり関係なくて申し訳ないですが、パワーポイントの色使いやデザインが好きです。 何か意識していることはありますか?

池田:ありがとうございます。
パワポ作成のコツは一般的に言われていることと同じで恐縮なのですが、数ある中でも「聞いている方が、今どこを見たら良いか、がわかる資料」を心がけています。

 

(Q)コーセーの社員、男性はみんな美容男子?(IT IT関係なくてごめんなさい)

池田:事業部門はほとんどの方が自分の担当するブランドの商品を利用して、良さを伝えられるようにしております。(イコール美容男子であるかは難しいですが)

 

(Q)プロジェクトにAWSが参画していたのは、AWSでどういったサービスがあるのかを知りたいためでしょうか。足回り環境の意志決定のためでしょうか。APベンダーからはASW周りの意見はあったのでしょうか。

池田:AWSさんに参画してもらっているのは、AWSをより効率的に、要件にマッチした設計とするためです。APベンダーさん、AWSさん、コーセーで構成されるPJメンバー全員が分け隔てなく意見を言い合います。インフラについても、アプリに対しても、です。

 

(Q)AzureとAWSを両方活用している意図は何かありますでしょうか

:特におおきな意図はないです。それぞれのBiz部門で採用されています。

 

(Q)ファミマで販売されている商品のPOSデータはここに含まれますでしょうか? POSデータを合わせる苦労とかございましたらお聞きしたいです。

:ファミマは停止して、ローソンです。今後はPOSデータを統一したい。

 

(Q)通販のデータとPOSデータは統合されたりしますか?

:現状はレジのPOSデータの分析だけです。今後は統合予定です。

 

(Q)ストリーミング処理を活用するユースケースは例えばどのようなケースがありますでしょうか

:不正取引のリアルタイム検知。在庫の不足検知。などに活用しています。

 

(Q)複数のKinesisに対してレコードを送る際、自動的にバランシングされるのでしょうか?

:はい。自動です。

 

(Q)DataCatalogを作り上げる時の苦労点などはありますでしょうか。国ごとにデータが違うなどで統合に苦労した、など

:国ごとはデータの定義が全然ちがいます。大きなマッピング表を作ります。
スキーマを揃えて、1つのテーブルを作っています。
他の国が使わないcolumnはNULLに設定するなど、国ごとにマスタはバラバラだが、DataCatalogは必ずあります。

 

(Q)リアルタイム分析は本当に必要でしょうか。このあたりを追求しようとするとコストに大きく跳ねてくるため、どういった要件がある場合にリアルタイム分析が必要とされるのか知れると嬉しいです。

:必要かどうかはPoCを検証しないといけない。例えば、在庫管理に必要です。
(事例を詳しく紹介いただきました)

 

(Q)良品計画さんへ データの可視化のBIツールとしてTableauを選んだ理由を教えてください。

:tableauは操作しやすい。店長などユーザーが見やすいUI。閲覧者はとっても多い。何万人規模。他のツールだと閲覧者ごとにコストが掛かったり、パフォーマンスの低下が起こる。
それらを検討した結果、tableauを選択しました。

 

 

次回のイベントレポートもお楽しみに♪

【イベントレポート】Go言語/最新情報・活用事例セミナー

Go言語最新情報・活用事例セミナーサムネイル

こんにちは!TECH Street編集部です!

2023年6月15日(木)に開催した、 「Go言語/最新情報・活用事例セミナー」のイベントレポートをお届けします。

今回はGo Conferenceの主催や一般社団法人Gophers Japanの理事を務める清水 陽一郎さんと、一般社団法人Gophers Japan の監事として Women Who Go Tokyo や Go Conference といった Go 言語コミュニティを運営されている白川 みちるさんをお招きしてGo言語を学ぶセミナーを開催しました。その様子をレポートいたします。

 

登壇者はこちらの方々!

清水 陽一郎さん/株式会社LayerX
白川 みちるさん

早速、内容を紹介いたします!

まずは株式会社LayerX 清水 陽一郎さんの発表です。

Go言語セミナー「今日から始めるGo」

今日から始めるGO

清水:まずは弊社「株式会社LayerX」の紹介をいたします。
「すべての経済活動を、デジタル化する。」というミッションを掲げる弊社は「バクラク」シリーズ(下記に説明あり)に代表される経理業務を効率化するプロダクトを中心に開発しており、私はGo言語を活用した法人カードの作成をしています。

バクラクシリーズラインナップ

バクラクシリーズの説明

では、「Go言語」の説明に入っていきます。今回は初心者の方向けに説明していきたいと思います。

Go言語とは?

Go言語とは2007年にGoogleが開発したプログラミング言語であり、言語の特徴をまとめると…

  • 強い静的型付け、型推論
  • コンパイル言語
  • 手続き型
  • オブジェクト指向ではない
  • ポインタがある

という特徴があります。

Goとは

小さいアプリ開発から大規模なシステム開発まで、すべてを一つの言語でカバーできる使い勝手の良さから、近年人気が高まっています。そして世界的に有名な会社や国内でもメガベンチャーと言われるような会社でよく使われています。

Goで作られたOSS

  • Docker
  • Kubernetes
  • Terraform
  • TiDB
  • Prometheus
  • etc…

利用企業の例

誕生背景・設計思想

「ではGo言語は何を目的に作られたのでしょうか?」
それはGoogleのソフトウェア開発の中で発生していた課題を解決するためでした。Go言語登場以前のGoogleソフトウェア開発にはC⁺⁺やJava、pythonなど既存のプログラミング言語を活用していましたが、ビルド時間にコストがかかりプログラミングコードの安全性にも課題を感じていました。そこで

  • コンパイル速度が速いこと
  • 安全に書けること
  • 本質にフォーカスした開発ができること

上記の点を目的としてGo言語が作られました。
Go言語は数学的な表現をしっかりするためというよりは、ソフトウェアを作る中で発生していた課題(ビルド時間のコストやコードの安全性)を解決するために生まれた言語です。

Go言語は、「スクリプト言語のプログラミングの容易さ」「コンパイル言語の効率と安全性」の良いとこどりをして、ネットワークプログラミングやマルチコアコンピューティングで性能が発揮できるような言語にしたといえます。

simplicity(徹底的な簡潔性)の概要

Go言語の設計思想として「simplicity - 徹底的な簡潔性」を掲げておりソフトウェア開発がスケールするように、「大規模開発ができるようにする」ということと「動いているソフトウェアも大規模に使えるようになること」をミッションとしています。

Simplicity-徹底的な簡潔性

安定した言語仕様

他の言語を使っていると言語自体のメジャーバージョンアップで大変な時があるかと思います。
一方、Go言語は今までメジャーバージョンアップしたことがなく、バージョンアップによるメンテナンスのコストがほぼかからない言語となっています。

安定した言語仕様

ここまでのまとめ

ここまでのまとめ

ここまでで紹介した内容を簡単にまとめると、Go言語は皆さんが知っているような企業やサービスで使われてます。そして、Go言語自体はどういうことを目的としているかというと、ソフトウェアをスケールさせることをミッションにあげています。

言語仕様

ここからはGo言語の仕様について説明していきます。まず特徴的な仕様は「予約語が少ないこと」です。

少ない予約後

予約語は25個しかありません。Go言語特有の予約語だと「defer」「go」などがありますが、それでも他の言語を使っている方でしたら、見たことある予約後がほとんどだと思います。
スライス(配列の要素数を可変にすることができるデータ構造)の構成要素もシンプルで理解しやすい特徴があります。

少ない予約語

スライスとrange

  • 可変長配列
  • オブジェクトに対する反復処理

ポインタ

最近の言語を使っている方だと、見慣れないかもしれませんが、「ポインタ」があります。

ポインタ

interfaceの概要

柔軟性の高いinterfaceも要注目の仕様です。
例えば4つや5つの構造体が入っているメソッドのうち、「このメソッドだけを使いたい」というときは、そのメソッドを持っているinterfaceを自分で定義して、そのinterfaceごしにDIをするだけで実装することが可能です。OSSや既存のライブラリを使うとき、自分で好きなようにinterfaceをきれるので、設計に柔軟性があるといえるでしょう。

interface

goroutineとchannelの概要

またGoと言えば並行処理で話題になると思いますが、goroutineで動かすと並行処理ができて、複数の軽量スレッドを立ち上げることができ、チャネルという機能を使えばスレッド間でデータのやり取りが可能です。

goroutineとchannelの概要

多値とエラーの概要

「エラー」というinterfaceがあり、それを使って異常系の処理ができます。例外機構はないので、何かメソッドを実行して異常系を表現したい場合は、戻り値の最後にエラーを返すようにして、呼び出し側でエラーではないことを確認して、リターンを書く必要があります。

多値とエラー

Genereics

コミュニティ内から、「Genereicsが欲しい」という声があり、Go1.18からGenereicsが導入されました。Genereics自体は他の言語と書き方は同じです。

Genereics

slog

Go1.21から「slog」と呼ばれる構造化ログが標準ライブラリに入ります。

slog

web開発とGo言語

Web開発に対するGo言語のメリット

並列処理が強力なので、標準パッケージを使うだけでも、本番に耐えられるようなサーバーをすぐ作り上げることができます。また、データベースにアクセスする時もコネクションプールが標準パッケージであるので、気にせずにデータベースにアクセスができます。

あと、新しいPCでプロダクトのセットアップをするときも、Goをインストールするだけですぐにテストをかけたり、依存性管理ができたりするので、あまり初期構築でつまづくことがないと感じました。

Web開発とGo

Go自体はいろんなランタイム環境で実行可能なので、どんなところからでもサービス開発できるかなと思っています。

Web開発とGo

Goを始める

「簡単とはいえ何から始めればいいかわからない」という方のために、Go言語を学ぶ場所をいくつかご紹介します。

例えばGo Conferenceが運営する「Gopher道場」では「Go言語以外の言語で日々の開発を行っているエンジニア」「Go言語を学ぶ熱量が高い方」「Go言語を仕事として使う機会がないため、実践的なものが学ぶ機会がなくて学べてない方」などを対象として、実践的なGo言語を体系的に学べる場を提供しています。

Gopher道場

・Gopher道場とは、実践的なGoを体系的に学べる場です。
 ・https://gopherdojo.org/

・動画
 ・https://www.youtube.com/@gopherdojo

・スライド
 ・https://tenn.in/go

・Gopher道場の動画コンテンツを完全公開しました
 ・https://zenn.dev/gophersjp/articles/834d6382991674

書籍

動画やスライドを見るだけでも、Goに詳しくなれると思います。
本をよんでじっくり学習したいという方には関連する書籍も多数ございます。

・初めてのGo言語 ー他言語プログラマーのためのイディオマティックGo実践ガイド
・Go言語プログラミングエッセンス
・実用Go言語 ーシステム開発の現場で知っておきたいアドバイス
・Go言語による分散サービス ー信頼性、拡張性、保守性の高いシステムの構築
・エキスパートたちのGo言語 一流のコードから応用力を学ぶ
・Goならわかるシステムプログラミング 第2版

まとめ

・Goはソフトウェア開発の課題解決を目指した言語
 ・Creating software at scale
 ・Running software at scale
・強力な並行処理と素朴な言語仕様
・2022年以降は日本語書籍・web学習も豊富で始めやすい!

 

 

 


続いては、白川みちるさんの発表です!

Go言語LT「みんなで楽しむ Go」

みんなで楽しむGo

開発言語のキャッチアップはとても大変!

白川:開発エンジニアとして「開発言語のキャッチアップ」はとても大変だと思われた方々も多いのではないでしょうか。そこで、今回はGo言語を楽しくキャッチアップする方法として

  • 1人で楽しむ
  • 会社で楽しむ
  • カンファレンスで楽しむ
  • コミュニティで楽しむ

という、以上4つの方法を私から楽しくキャッチアップできる方法をご紹介できればと思います。

1人で楽しむ

1人でキャッチアップするのは本で楽しむのが良いと思います。下記の書籍がオススメです。

書籍で楽しむGo

  • プログラミング言語Go
  • Go言語による並行処理
  • Go言語でつくるインタプリタ
  • Go言語プログラミングエッセンス
  • 詳解Go言語 Webアプリケーション開発

Go語の仕様など一通りきちんと知るためにおすすめの書籍は「プログラミング言語Go」「Go言語による並行処理」です。

体系的に手を動かしながら学ぶとなると「Go言語でつくるインタプリタ」がおすすめです。テストコードを書きながらインタプリタが作れる点がいいですね。

最近出たものとしては「Go言語プログラミングエッセンス」「詳解Go言語 Webアプリケーション開発」があり、こちらも手を動かしながら読み進めることができて、実践的なのでおすすめです。

Webで楽しむGo

もちろんWebでもキャッチアップすることできます。

おすすめサイト

困ったときは公式サイトがおすすめです。先ほど清水さんがご紹介した【Gopher道場】もGo言語を楽しんで学ぶには最適な場所だと思います。

会社で楽しむ

会社で楽しむ一例として、メルカリ(※)で行っているGo言語のオンボーディングをご紹介します。

(※以前はメルペイに所属しておりましたが、現在は株式会社カウシェでバックエンドエンジニアとして勤めています)

参考資料:メルカリの2023年技術研修DevDojoの資料と動画を公開します!

Dev道場概要

DevDojo概要

メルカリグループでは技術研修として「DevDojo」を提供しています。エンジニアメンバーが互いに学び合い、成長しあう文化の醸成を助けていますが、その道場の資料が一部一般公開されています。ここには載っていませんが、Go言語のDevDojoも存在します。

Dev道場概要のカリキュラムなど

研修内容

誰でも自由に参加可能ですので、会社で利用している技術スタックに幅広く触れることができます。
研修内容の中に「モブプログラミング」があります。これは相談しながらものづくりをすることを通して、時には「人に説明をすることで知識を深めること」を目的としているからです。
互いに学び合い、成長しあう文化のもとに、以前DevDojoで学んだ新入社員やベテランエンジニアたちがメンターとして参加し、毎回内容をブラッシュアップしています。

カンファレンスで楽しむ

「Go Conference 2023」はプログラミング言語のお祭りであり、初学者から上級者まで、幅広い人に向けたセッションやコンテンツが揃っています。「バーチャル空間で集まって配信を楽しむこと」「カンファレンスに参加して楽しむこと」「登壇や運営に参加して楽しむこと」などいろいろな楽しみ方があるので、ぜひ公式サイトをチェックしてみてください。

Go Conference 2023 の公式ページ

また海外カンファレンスに参加するのも価値あると思います。

海外カンファレンスの様子

海外カンファレンスの様子

 

コミュニティで楽しむ

日本だけでもGo言語に関するコミュニティは多くあります。

Goコミュニティの一覧

Goコミュニティの一覧

この中で「Women Who Go Tokyo」は私が主催している勉強会です。

  • Go 言語に興味があるけど周りにやっている人がいない
  • どうやって勉強したら良いかわからない
  • 学ぶ仲間がほしい

という人は他のコミュニティも含めてぜひ気軽に参加してみてください。

白川さんが主催するコミュニティ「Women Who Go Tokyo読書会」

白川さんが主催するコミュニティ「Women Who Go Tokyo」

まとめ

開発言語のキャッチアップはとても大変ですが、楽しいです。
Go言語に限らず、技術のキャッチアップのバリエーションは豊富なので、自分にあった楽しみ方を選んでGo言語を使う人が増えていくといいなと思っています!

Q&Aコーナー

続いてQ&Aコーナーであがった質問を紹介します。

(Q)オブジェクト指向じゃないんですね! であれば初心者向けだったりもしますか?(未経験者より)

清水:プログラミング言語に縛られず、エンジニア向けの書籍(勉強素材)がオブジェクト指向ベースだったりするので、Goではない書籍のプラクティスをそのまま適用するとアンチパターンになる可能性があります。

(Q)もしもGo2がリリースされるとなると、大変な騒ぎになるのでしょうか?

清水:なると思います。1.20のときにGo2になるか?みたいな話は以前ありました。
最近公式ブログで言及があって、実際Go2がでることはほぼなさそうです。https://go.dev/blog/compat

(Q)RUSTとの違いは簡単に言うとどのようなところでしょうか?

清水:答えられないです…。RUSTはHello Worldくらいしか触ったことがないので…。

(Q)Goに適した統合開発環境は何でしょうか?

清水:GoLandを使っています。VS Codeの方なども多いです。
最近だと、GitHub Copilotがすごいです。お使いのIDEで始めてみてください。

(Q)今後の変更で一番有力なものはありますか?

清水:ログレベルと構造化ログを標準ライブラリでサポートしたslogパッケージに注目です。
https://tip.golang.org/doc/go1.21#slog
slogパッケージは20238月にリリースされたGo1.21で無事リリースされました。https://go.dev/doc/go1.21

(Q)Go開発の際に、メンテナンスとかアップデートで特異な注意点とかメリットなんてありますでしょうか?

清水:アップデートしやすいところです。リリースの時点で使ったバージョンのまま止まってることってよくある。アップデートしても、コンパイルエラーも沢山出たりしないので、楽です。

(Q)このあと出てくるのかもしれませんが、Go応用編にてデモがあると助かります<(_ _)>

清水:Gopher道場とかYouTubeをチェックしてみてください!

(Q)著名なDevOps関連ツールであるterraformやDockerやDocker, Kubernetes等がGoでできてる理由は何故でしょうか?WebとDevOpsのどちらに需要があるのでしょうか?

清水:色んな環境に配りたい時にすごく楽です。書き方が統一されてる、テストも標準化されているので、よく使われているのではないでしょうか。

(Q)Goのフレームワークの状況が知りたいです。

清水:HTTPだと、echoかgin。GprahQLならばgqlgen。
ORMは群雄割拠だと思います。個人的にはsqlxがシンプルで好きです。

(Q)「詳解Go言語Webアプリケーション開発」が、他のGo本に比べてお薦めな部分はどこでしょうか?

清水:薄めに書いています。最初に読んだ人がWeb開発するときに気をつけるべきところが、薄さの割には情報盛りだくさんです!(後半のハンズオンはWebの正誤表みてください。)フォローアップが厚いです!!

(Q)Goによるプログラミング開発やテスト作業は、ChatGPTやGithub Copilotによるサポートとの相性がどれぐらいよいかはわかりますか?

清水:良いと思います!型がある分、AIも予測しやすい。意図通りの回答が返ってきやすいです。

(Q)GoのWeb開発をVS Codeで行うときには、どのプラグインがお薦めですか?

清水:標準のGoプラグインを入れると、一通りOKかと!

(Q)WEBのバックエンドを開発する際のおすすめのフレームワークはありますか? PHPならLaravel, RubyならRailsとか有名なのがありますが、Goの場合はどんなのがあるのかなぁと思いまして。

清水:gRPC。graph GRL。標準パッケージが好きです。

(Q)Fiberというフレームワークが海外で人気になってきているようですが日本ではどれくらい使用されていますでしょうか。今後ginやechoと並ぶくらいのシェアになりえますでしょうか

清水:Goを使ってる会社は3社ほどいましたが、使ったことはないです。高トラフィックかつパフォーマンス要件が厳しいプロダクトでなければ最初に選ばなくてもいいのかなと思います。

(Q)goroutine で リソース管理したくなりませんか? # どこまで go に お任せするものか悩ましく思うことがあります...

清水:個人的な経験ではファイルを複数DL(UL)したいときにgoroutineを使ったことありますが、API書くときに直接使うことはあまりなかったりします。パフォーマンスに問題がでるまで素朴にやる派です。並行処理はバグが入り込む確率が高くなり、再現も困難なことが多いので。

(Q)GoはTDDやDDDに向いてますでしょうか!

清水:TDDは向いていると思います。
DDDはドメインを理解して、業務を理解して、という前提であればいいと思います。DDD本に書いてあるようなレイヤードアーキテクチャなどを厳密に実践しようとすると、難しいです。public/privateという概念はないので、軽量DDDのような構成をしようとすると失敗します。

(Q)Goの質問から離れて恐縮ですが、gRPCってサービスのどんな機能部で使われるのでしょうか?

清水:一般的な話をすると分散サービスで構成されているプロダクトの内部通信で利用されることが多いのかなという印象です。外部公開するAPIはREST APIであることがデファクトスタンダードなので。

(Q)goだと標準ライブラリで並列処理が実装出来る様な話があったと思います。具体的に並列化出来る処理内容が知りたいです。

清水:もちろんテクニックを使えば同期的にも書けるのですが、基本は「分割したタスクがそれぞれ干渉せずに完了できる」状態に分けられると並行処理ができます。
具体的なテクニックは「Go言語による並行処理」を読むのがおすすめです。
https://www.amazon.co.jp/dp/4873118468
並列処理と並行処理は異なるので、「Concurrency is not parallelism」も見ておくとよいです。
https://go.dev/blog/waza-talk

(Q)型パラメータのゼロ値を返すときに`*new(T)`のイディオムを使われますか? それともNamed return valuesを使ったりしますか?

清水:自分で書くときはhttps://github.com/samber/loを使ってしまうかなと思います。実装もスッキリしているかなと思います
 https://github.com/samber/lo/blob/v1.38.1/type_manipulation.go#L74 // Empty returns an empty value. func Empty[T any]() T { var zero T return zero }

(Q)GoはOberon2を現代風にしたような感じですね、しかしオブジェクト指向脳にシフトしてしまった頭だと、度々つまずいています。なにか良いアプローチはありますか?

清水:参考になるかわかりませんが、バッチ処理のようにいったん愚直に処理とテストコードを実装して、その後リファクタリングですっきりさせていくアプローチはよくします。手を動かす前に見えないことも一旦洗い出せるので。
(不勉強でOberon2は知りませんでした、すいません)

(Q)白川様、ツキノワグマな理由は特になしですか?(Goに関係あり?)

白川:Goには関係ないです!クマの話をすると長くなりますw

(Q)やっぱGo楽しいですか?!(他と比べても)(私は楽しいです)

白川:楽しい!

(Q)初心者(コボラー経験のみ・でもシステム開発経験は長い)ですみません、最初にもありましたが、Goは手続き型ならコボラーでも取りつきやすいのかしら?

白川:取っつきやすいと思います。(白川さんはCobol書いたことないです)まずやってみるといいと思います!

(Q)2ヶ月ほど前にGo言語に入門した者です。WebAPIの個人開発でgoroutineを使ってみたいのですが、実際のサービスに使われるような機能の題材はありませんか!

白川:現在はマネージャーとしてピープルマネジメントの仕事をすることが多くて、業務で触れることはしばらくありません。しかし、コミュニテイ活動で、ハンズオン用に作ってみたことはあります。大量の画像を変換する処理に使いました!

(Q)Goならではのオンボーディングの難しさとか簡単なポイントとかってありますか?

白川:「ならでは」の難しさはそんなに感じたことはないです。始めて、Rubyを触ったときに、開発環境をエラーなく構築するのが大変とよく聞く。その分Go言語にはそういうことは少ない。

(Q)いろんな情報があって初めどこから学べば良いのか悩むのですが、web api用途とすると、どの書籍から入るのがよいのでしょうか?jsが書けるエンジニアです

白川:清水さんの書籍で勉強してみてはいかがでしょうか!とてもマッチしていると思います。

(Q)GoのIDEで、複数のエンジニアが同時に編集できるものはありますか?それともモブプログラミングはみんなで書くのではなく、だれか1人がエディターする感じでしょうか?

白川:VS Codeとかできます。私の場合は、誰かが画面をシェアしているのを、みんなで囲んでやっていました。

(Q)ご登壇のおふたりにお聞きしたいのですが、Goを選んだ一番の理由は何でしょうか?

清水:C言語で開発していたとき、開発のリズムが良くないなぁと感じていた。そんな時にGoを触ったら便利だった!コンパイルが速くて、テストもスムーズで良かった!

白川:エンジニアでPHPを長くやっていた。どうしてもパフォーマンスを出したいバッチ処理があった。新しい技術を取り入れるチャンス!という流れがきたので、Goを取り入れてみた。goroutine も使った。パフォーマンスが出た!初めて書いたけど、キャッチアップしやすくて好きになりました。

(Q)Goの中で特に重要だと思う特徴とか機能は何ですか?あと、それのメリットなんかもぜひお聞きしたいです。

清水:gouroutineはすごく恩恵を受けてるなと感じます。パフォーマンスを気にしたことはほぼないです。他言語を使っているチームと比較しても、メモリも全然使わないし、パフォーマンスも落ちないのでとても良いです。コードの可読性も高いです。

白川:コードの読みやすさはその通りで、とてもいい。また、以前Javaを使っていたが、コンパイルはGoの方が速いと思いました。(Delphi をやっていたこともありますが、それも時間がかかった記憶...)

(Q)Goだと1つのファイルに大量のコードを書いているのを見かけるのですが、Goのおすすめのファイルの分け方とか、パッケージの分け方とかはあるのでしょうか?

清水:パッケージの分け方は度々話題になります。あまり分けすぎない方がいいと思います。1~2階層くらいがいいです。テストコードが縦にめちゃくちゃ長くなるのはある。そんなに私は気になったことはないです。
単一ファイルに大量のコードという状態は、もしかしたら処理の抽象化などをして複数の構造体に責務分担をすると自然に構造体(ファイル)も分割されるかもしれません。

白川:大量がどれくらいかにもよりますが。。そんなにコードは大量にはならないかなと思います。
ただ大量なものを大量だと感じていないのかもです。テストコードは長くなります。Go言語でインタプリタを書く本なども、テストコードは長かったです。
パッケージの分け方は、フレームワークなどを参考にするといいかもしれません。

(Q)Go言語の将来についてどのような展望をお持ちですか?将来のバージョンやアップデートで期待される新機能や改善点について教えていただけますか?

清水:与えられたもので満足していますw
強いて言うなら静的解析などはどのサードパーティを使うか、紆余曲折を経るので、バシッと統一されると嬉しいです。

白川:今はもう長いこと業務でコードを書くことがなく、個人開発やイベントで触れるくらいなので、今で大満足です。シンプルさが気に入っています。

(Q)モブプロを文化にしたい(ウチぜんぜんそういう感じじゃない)のですが、第一歩としてどうすればよいでしょう?

清水:会議体などをもうけず、まず日常的に「うまく実装できないので画面共有しながら実装フォローしてもらって良いでしょうか」みたいなことをやってみるでもよいかなとは思います。

白川:オンボーディングの時に導入したからといって、実際に現場で使っているかはわからない。モブプロの良さを知ってもらったり、モブプロをする曜日を決めたりするといいかもです。

最後にお2人からコメント

清水:初歩的な紹介ばかりでしたが、具体的な事例などの質問があれば、冒頭でご紹介したカジュアル面談やTwitterでDMをいただければと思います。

白川:人前でお話するのは久しぶりだったので、とても良い経験でした。勉強会も開催しているので、興味がある方はぜひ遊びに来てください!

 

 

次回のイベントレポートもお楽しみに♪

【イベントレポート】QAエンジニア勉強会~各社の取り組みや課題から学ぶ会~vol.2


こんにちは!TECH Street編集部です!

今回は3社のQAエンジニアが集まり、実際の実務で得た知見や、課題、改善策などを共有しあうQAエンジニア勉強会の様子をレポートいたします。

登壇者はこの方々!
くぼぴーさん
吉次洋毅さん/パーソルキャリア株式会社
谷平 純一さん/株式会社セゾン情報システムズ

早速くぼぴーさんの発表からご紹介いたします!

プロジェクトにQAが参加するとどうなるか



note.com

くぼぴー:今回はQAが初期から参加して一緒に開発するという経験が社内で一度もなかったところに、私が初めてQAエンジニアとしてプロジェクトに参加したときのことをお話いたします。そして、その際に起こったことや、改善できる点を共有したいと思います。

プロジェクトの流れ

プロジェクトの期間は3〜4か月程度で流れは以下の通りです。
①キックオフ
②仕様検討
③実装
④検証
⑤本番リリース

プロジェクトはアジャイル的な進め方ではありますが、スクラム開発の手法ではありません。

①キックオフ
プロジェクトの大まかな仕様や目標を決めます。QAとしては、必要な最低限の機能や回避すべきリスクについて質問し、提案することでリスクを洗い出していました。また、QAが率先してプロジェクトを盛り上げ、心理的安全性を高めるために、積極的に意見を出す雰囲気作りも重要だと考えています。

②仕様検討
③実装
実装の方針やセキュリティ、懸念事項などを検討し、解決していきます。QAとしては関連する部署(SREチーム/CSチーム)と連携し、問題点を洗い出し、具体的な例を示してエッジケースを考慮しました。また、仕様ドキュメントをQAチームで作成・メンテナンスできるようにしました。

仕様検討と実装の段階で、ヘルプページも同時に考えました。CSチームと協力して草案を作成し、運用イメージを共有しました。ヘルプページにはユーザーが迷わないために必要な情報や使いやすい画面設計などを反映し、単体テストやコードのレビューもQAができる限り行いました。

コードの品質はバグの発生率や開発速度、問題解決の予測精度に影響するという研究結果もあります。そのため、QAエンジニアとして私たちは品質管理に重点を置きました。開発者との密なコミュニケーションを図り、共通の目標と基準を確立しました。また、テスト自動化やコードレビュープロセスの改善にも取り組み、品質向上に貢献しました。

④検証
⑤本番リリース

検証は、テスト計画の策定、テストケースの作成、実施、結果の分析などを行いました。バグの早期発見と修正、品質の向上を目指し、テストカバレッジを高めるために努力しました。本番リリース前には総合的なシステムテストを実施し、問題のない状態でのリリースを確認しました。

本番リリースに向けてシステムテストを実装します。特に問題になるのは「本番環境で動かない!」となることなので、本番に近い環境を用意してもらいデプロイして動作確認を全員で行いました。
”全員”とは開発メンバーはもちろんのこと、QA/SRE/CS/PRチームなどを巻き込んで機能自体のバグと同時に機能の認識齟齬、実装ミスなどがないかを確認していきました。

今回はサーバーサイドのリリースをしたうえでフロントエンドのリリースを行えば良いだけだったため、フィーチャーフラグ的にリリースを行うことができました。またリリースフローを整備していたので適切に機能リリースと、平常リリースを分けてリリース作業を行うことができました。

QAが参加して良かったこと

ここからは実際に私がプロジェクトへジョインして良かった部分をお伝えします。

・過去データの洗い出し/テストケース作成ができたこと

過去データを利用して新たなデータを作成する機能であったために、クレンジングされていないデータではバグが発生する可能性がありました。例えば5年前のレコードでは入っているが、今は使っていないデータなど可能性は多岐にわたり、人間が認識できるレベルを超えていました。そのためデータに規則性があったので、あるパターンを元に過去数万件のデータをマスクして取り出してテスト検証用データとしました。

・ドキュメント作成
これまではドキュメントを作成しながらプロジェクトを進行したことがなく、チームが解散したあとどこの持ち物かわからない、かつドキュメントも残っていないという課題があったのでドキュメントを格納できる場所を用意して、出てきた案や懸念点などをそこに集積できるようにしました。
あらゆる場所にフロー情報が発散される(Slackなど)と、認識齟齬が発生するのですが「結局、それどうなった?」は格段に減ったと思います。時系列にまとめていたので、それも良かったのではないでしょうか。

・デイリースクラム/随時検証
検証は一気に行わず、できるところから進めていき最終的にリグレッションテストをおこなっていました。これにより「何ができて何ができないか」が日毎に明確になっていき、スケジュールに遅延が起こりそうといった見えない危険に気がつくことができました。

・実例マッピング/他部署連携
実例マッピングでは具体的なユーザーストーリーを作成して問題点を検討することが出来、新機能を構築するための許容条件の判断(=受け入れ条件)に役立ちます。
他部署を集めて実例マッピングを行うことで「これだけはできないと本当にまずい」ということが共有できて実装後に巻き戻ることがありませんでした。
また実際に運用するであろうCSチームの理解を早期に得られたことが非常に大きな功績でした。

・ストッパーになれた
随時検証していく中で、このままではまずいのではないだろうかとアラートを素早く投げることができました。具体的にはここまで機能を検証しきれていないので、スケジュールを後ろ倒ししてほしい、というアラートを全体に投げることができました。結果としてスケジュールは遅延することになりましたが、障害レベルの不具合が起きずにリリースすることが出来ました。

やれば良かったこと

やれば良かったこととしては3つあります。

・スクラム開発

初期からスクラムイベントの実施、またスプリントゴールを設定して何が出来て、何ができないかを週ごとに明確にしておくなど重要だと感じました。というのも検証段階で何を検証したらよいかパッと見分けがつかないからです。それぞれの認識に齟齬があると「えっこれってできてると思っていた」となると最悪でした。

・動くものを素早く検証する

機能を単一で動かせるような実装をした後に負荷検証を行ったインフラ環境と統合して確認できるといいなと感じました。一気通貫で作りたくなる気持ちはわかるのですが、まずは単一で動くものを用意して、アジャイル的にステークホルダーへ見せていくというのが大事なのだと思いました。

・単体テストケースを設計する
単体テストケースは完全に開発メンバーにお任せし、レビューを行っていたのですが、一部確認できなかったり設計自体にきちんと意見を言えたり出来なかったと反省しています。
コードリーディングスキルと、単体テストの技術が必要なので、そのあたりもQAとしてはきちんと身につけていなければいけないと感じました。

まとめ

プロジェクト進行を横断して見られて、すべての時間軸で存在できるQAならではの動き方はもっとあるな、という反省の多いプロジェクトでした
QAエンジニアはプロジェクトのオーナーになるつもりで、イニシアチブをもって進行役ができるともっといいだろうなと思います。
また一部分だけアクターとして見るのではなくQAとして俯瞰して見ることが、QAエンジニアの役割として求められていると思います。

 

続いてパーソルキャリア 吉次さんの発表を紹介いたします!

QAエンジニア組織立ち上げはじめの一歩


吉次:今回は私がQAエンジニア組織の立ち上げを行った時のことをお話したいと思います。

QAエンジニア組織立ち上げの経緯

まず立ち上げの経緯をお話します。
パーソルキャリアでは事業企画や開発は順調に進行していましたが、1〜2年ほどサービスを運用する中で品質面の課題がだんだん浮き彫りになってきました。

具体的にどのような状態かというと・・

リリース後のバグ検出頻度が増えていましたが、ドキュメンテーションをする文化が根付いていなかったり、経緯がブラックボックスになっていたりと、意思決定の理由が分からないため、システムに変更を加えることの難易度が高くなっていました。
また、テストベンダーに協力していただき、リリース前にまとめてQAを行っていましたが、テスト仕様書のレビュー負荷が高いなどの課題もありました。
そこで、私たちはまずは現有のリソースを活用し、取り組むことができる改善策を考えることにしました。

取り組みのご紹介

取り組みの一部をご紹介します。

品質課題のヒアリングと改善施策の作成

まずは各プロダクトの開発リーダーに品質課題をヒアリングし、組織として解決するべき課題を明確化しました。
品質と言っても色々なところに問題が隠れています。そこで「仕様」「実装」「テスト」と大きく3つにわけてそれぞれの工程で課題と改善策を整理してみました。

テストマネージャーの半常駐体制の整備

洗い出した中で仕様書のメンテナンスとリリース前のQAテスト実行の両方をスムーズに進めるために、私たちは「仕様」と「テスト」の部分を重点的に取り組むことにしました。しかし、社内に必要なリソースがなかったため、外部のテストベンダーと連携するためのテストマネージャー体制の構築を行いました。

テストベンダとテストマネージャー体制

会議への参加や仕様書のメンテナンスなどを日常的に行い、スムーズにテストに移行し質の高いテストを実施する体制を整えるために、テストマネージャーを配置しました。この取り組みは成功したと感じています。
テストマネージャーの存在により、仕様を正確に把握し、それに基づいてテストケースを作成することが担保されました。
さらに、日々の会議で仕様について話し合っている際にも、テストエンジニアの観点から貴重な指摘をいただくことができました。テストマネージャーが開発プロセスに日常的に関与することで、問題が発生しそうな箇所を事前に洗い出してもらったり、問題を解決しておくための活動につながりました。

アプリケーションエンジニアに対する、品質知識のインストール

基礎知識のインストールと意識の醸成を狙いQA輪読会の実施を行いました。

題材としては基本的な内容が網羅的に掲載されているJSTQBのFoundation Levelシラバスを活用しました。

<輪読会のTIPS>

改善前は1章ごとに<予習>→<資料作成>→<輪読会>というサイクルで実施していました。しかし、予習をしても理解できない。予習の時間が十分に取れないことも出てくるかと思います。その結果、輪読会の内容が薄くなってしまうこともあるため、参加者が「予習」を行った上で「疑問点」「議論したいこと」を事前にピックアップするようにしました。発表者はそれに対して回答する形で資料を準備します。
このように「予習」と「事前準備」を厚くして、やり方を変えるだけで、輪読会の内容を濃くすることができるのでおすすめです。

QA組織の立ち上げ​ポイントまとめ

私が思うQA組織の立ち上げポイントはこのあたりだと思います。

・ヒアリングによる品質課題の明確化
初めに、関係者とのコミュニケーションや情報収集を通じて品質に関する課題を明確化します。ユーザーの要求や期待、現行の品質管理の課題などを把握しましょう。

・現実的なアプローチの模索
明らかになった品質課題に対して、現実的かつ効果的な解決策を模索します。技術的な改善、プロセスの見直し、ツールやフレームワークの導入など、具体的なアクションプランを策定しましょう。

現実的なアプローチを見つけるためには下記3つに分けて一つ一つ着手していくと良いと思います。
①新しく人を採用すればできること
②テストベンダーとの協業を行えばできること
③既存の組織メンバーでできること

・既存メンバーの巻き込みと組織活動の引き上げ
QA組織を立ち上げるためには、既存のメンバーを組織活動に巻き込み、その意識とスキルを高めることが重要です。教育やトレーニングの提供、情報共有やコラボレーションの機会の創出など、組織全体の活動に参加してもらいましょう。

今後の展望(採用と組織デザイン)

結果的にQAエンジニアの採用ができましたが、採用に至るまで結構苦戦しました。
一人目のQAエンジニア採用のため、当初は組織作り、エンジニアリング、マネジメントなどの考えられるスキルを全て採用要件に含んでしまったために、中々マッチする人と出会えませんでした。

そこで採用要件の分解をしっかり行い、現実的な落とし所を見極め、既存メンバーも協力しながら進めていくべきと感じました。

今回はQAエンジニアとしての発表ではなく、QAエンジニアがいない環境でどういった組織を作っていくかという話が中心でしたが、ご紹介させていただきました。

 

続いてセゾン情報システムズ 谷平さんの発表を紹介いたします!


QA/テストエンジニアとして10年ちょいやってきて変わらなかったもの、変わったもの

谷平:今回は弊社のプロダクトの中でも今日はDataSpider Servistaをメインにテストに対する考え方やスタンスは共通して共有できるものをお話しできればと思います。
特に今回は2016年に上長が書いたブログの内容を振り返り、当時の状況と現在の状況の変わったもの変わらないものを考え、ソフトウェアでは何が大事なんだろうかと考える一助になれば幸いです。

DataSpider Servistaの開発フェーズ

QAでは新機能の開発は加えず、発見した不具合を修正することに主眼が置かれます。
そうした中で、上長のブログにはQAチームが大切にしていることは以下の5つのことが書かれていました。

・ユーザー視点を担う
・テスターでなくプロダクト開発者である
・開発との関係は対等
・答えは自分でみつける
・やる理由/やらない理由を考える

これらのワードを、振り返りながら考えていきます。

ユーザー視点を担う

QAはプロダクトのファーストユーザーであり、ユーザの代弁者として行動する必要があります。
そのためにはプロダクトの「当たり前を疑う」姿勢が重要です。さらに、様々な制約を認識しながらも、ユーザーが満足できる仕様であり、必要な品質基準を満たしているかを確認し、使い勝手の良し悪しを評価する必要があります。テスト経験が豊富になると、つい「こんなものだろう」と前提を持って開発やテストを行ってしまいがちですが、本当にお客様にとって使いやすいのかを常に疑問視し、開発やテストを行う必要があります。
また、ブログが公開されてから7年が経過し、今ではユーザー視点を持つ存在はQAに限定されなくなりましたが、QAは基本的な立場として「ユーザーの側」に立ち、ユーザーの視点から正論を述べることが重要です。ただし、ユーザーになりきることは容易ではないため、ユーザー視点を持つためのいくつかの方法を以下に示します。

ユーザーになりきるため、そしてユーザーの意見や考えをつかむ手法として営業同行や展示会の説明員があげられます。HULFTでも過去に実施していました。しかしジョブ型雇用といわれる時代になり、これらの方法は手放しで勧められるものではなくなりました。非常に役立つ手法ではあるものの、本来の仕事ではないため強制はできないので賛同が得られる場合にしておいたほうがよさそうです。

テスターではなくプロダクト開発者/開発との関係は対等

テストとはプロダクトをよくするための活動です。現状の品質状態を明らかにして、対等な立場で遠慮なく意見をぶつけ合うことが価値あるプロダクト作りには必要です。ただ当時は「テスター」の地位が低かった背景もあり、ブログが書かれた当時は必要な心掛けが必要だったのだと思われます。
テスターだけでは品質が良くならないので、開発と一緒に製品をより良くしていかなければなりません

では、対等にどのようにチームに貢献すべきか?これは「役に立つ」という意識が重要だと思っています。

ステークホルダー間の通訳とは、プロダクトオーナーや営業などいろいろなポジションの方が参加して機能について議論することがありますが、話が噛み合っていないときに通訳してあげるという役割もQAはできるのではと考えています。
敢えて自分が無知になり「よく分からなかったけど…こういうことですよね?」と、回答を引き出してあげるという方法もあり、そこから会話が引き出されることもあります。

答えは自分で見つける

これは「仕様は降ってこない」という考えが根底にあります。

『いやいや、それは無茶ぶり』と思うかもしれませんが、”待ちではなく攻めの姿勢”は間違っていないと思います。出来上がる前から開発者と議論して仕様を良くする/不具合の芽をつぶすことはQAの役割として重要です。現在は「一緒に考える」というスタンスでQAだけでなく開発、フェーズで製品仕様を検討したり、スプリントレビューというかたちで出来上がったものを実際に確認したり「考える」タイミングは前倒しになっています。早いタイミングでQAも関わるという姿勢でいきましょう!

やる理由・やらない理由を考える

様々なことに対して「やる理由」を見つけることは出来ても「やらない理由」を見つけて実際”やらないこと”は勇気がいることだと思います。

「やらない」ことはコストが無尽蔵で時間が無制限であれば考える必要がありませんが、現実はそうではありません。

・変更したコードの影響範囲
・不具合の過去事例
・「ヤバい」機能に対する変更かどうか
・「不安を覚えるところがあるか」の確認

上記項目に注視しながら「やる」「やらない」をQAエンジニアは見極めることが重要です。

過去を振り返ってみて…

今回過去を振り返ってみた印象は「おおむね大きく変わっているものではない」ということです。
ただ7年前と比べて会話する/合意する範囲が広まっています。
ステークホルダーと会話して合意を取っていくことで、「思っていたのと違う」「お客様のためにならない」といった確率がどんどん下がっていきます。なのでQAエンジニアはプロジェクトに携わるメンバーをはじめとしたステークホルダーと積極的に会話していきましょう!

 

質問コーナー

くぼぴーさん

QAエンジニアの人がどういった方法(書籍や資格)で技術を磨いているのか興味があります。
スクラムフェスや、QA勉強会にとにかく参加したり、SQuBOKを読んだりしています。また、QA界隈で人気になってそうな本はとりあえず買ってます

QAチームメンバーのモチベーションの維持や向上で取り組んでいることとかあれば。
褒めちぎる!!!

自動テストが増えできた場合の複雑性への対処方法 スクラムで要件が変わったときの自動テストの変更方法(愚直に直していくのかなど)
変更容易な形にあらかじめ作ったりします。(具体的なケースは先に作らずにヒアリングしながら同時に進めるなど

QAチームのあるべ姿をどう考えているか教えて頂きたい
品質について考えることを、社内全体に浸透させることです。リードではなく協力していくことです。

開発エンジニアからQAエンジニアを目指そうとする人におすすめの研修(有償)はありますでしょうか?
Jasstとスクラムフェス新潟はおすすめです!

くぼぴーさんが一番QAエンジニアとして苦戦したこと(開発組織としての課題)はありましたか?
品質が軽視されているわけではないが、品質以外に重きを持たれていることが多い。そのため、QAエンジニアが「ここ出来てませんよ」と苦言を呈さなければいけないことがある。そういう時は心が苦しいです。。

一気に検証をするのではなく、少しづつ進めていったのはなぜですか?
一気に進めてしまうと大変な事故が起きた時に、手戻りが大量に発生してしまう。コミュニケーション量(レスポンス)も多くなってしまう。ちょっとずつの方が修正もしやすいし、コミュニケーション量もカットできる。

開発エンジニアとQAエンジニアが並走し、随時検証をしていく中で、開発エンジニアからの反発はありませんでしたか? 例えば、どうせ、めんどくさいこと言うだろうな?みたいな空気感。 もし、そんな空気感があれば、払しょくするためにどんな工夫をされていましたか?
自分の中で「まためんどくさいこと言ってしまう」と被害妄想してしまうので、気持ちわかります!「ここがおかしいと思うので、一緒にみてもらえませんか?」など当たりをつけて、明るく、志気を下げない方法で話かけるようにしています。

社内ドキュメントもnoteだったりして
流石にそれはないですw

各noteのリンク先も今見たい...!笑、あと、おすすめツールとか推しツールとかありますか?参考までに聞いてみたい
QA関係ならMablです!GIHOZ(ぎほーず)。あと、note。

ステークホルダーとの齟齬の一番の対策は何でしょう?QAエンジニア視点でアドバイスあればぜひ
情報共有を細かくせずに一気に出してしまうから、齟齬が生まれてしまう。人間なので、一気にドンと渡すと見落としが発生してしまう。「ここがこのような結果になった」を少しずつ認識していくのが大切。スクラム的な考えです。

実例マッピングについてもう少し詳しく教えていただきたいです!
"broccoliさん"という方の情報を参照してください

吉次さん

QA組織の立ち上げは吉次さんが起案したボトムアップで生まれた話なのでしょうか。
ボトムアップです。マネージャー層に相談したところ、同じくQA組織があったほうが良いという意識があったので、すんなり進みました。

せっかくですので吉次さまからもおすすめ&推しツール聞きたいです
実はQAエンジニアではないのですが、これから使いたいなーと思ってるのはAutifyです。

組織立ち上げまでどのくらいの期間で実施されたのでしょうか。
1人チームで活動し始めたのは2年くらい前です。
QAエンジニア(リーダーレベル)の1人目を採用するまでにはなんだかんだ1年以上かかりました。

テストベースをインプットした後の、テスト側の負荷が減ったのかを知りたいです。
テストベースの質と量が高まったことで、テスト設計・実行する際のテスト担当者も「動かしてみてよくわからないから聞く」みたいなコミュニケーション負荷は減っていると認識しています。

仕様書(ドキュメント)を作るカルチャーを作るのってめちゃめちゃ大変ですよね。。。 自分もうっかり「後で作ろう→そのまま放置」になってしまったことがある。。
ドキュメントは資産、メンテナンスは資産運用と捉えています。
丁寧に作ってしっかり運用すれば将来的に複利で効いてきますし、将来の自分を助けてくれると思ってめんどくさいと思ったときも頑張るようにしています。

品質課題のところでルールの整備というのはどんなルールで作られたのでしょうか?
施策はあるけど具体的なルールの策定はこれから、という状況です。
少しズレますが、品質ガイドラインの作成を行って、基本的な用語などについて目線が合う環境作りを進めています。

パーソルさんくらいだとQA部署の体制は大きそうですね、関連企業との連携なんてありますか?パーソル○○とか多いイメージなので
内製のQA部隊はまだできたばかりで、「QAの部署」は名目上は現状存在していません。
「QAエンジニアが在籍している部署がある」という位置づけです。これからしっかり活動を拡大してグループや部の格にあげていきたいと思っています。
グループ会社については品質面に関してはあまりなく、開発のアウトソース的なところで関わることが現状は多いです。

QA輪読会すてきすぎる、これはどれくらい集まりますか?
5〜6人集めてJSTQBシラバスの1〜6章を輪読するのを1セットとして、運用しています。
大体1人1章担当するイメージです。

QA輪読会は参加できますか?
現状、社内での活動となります。すみません。
将来的に社外のコミュニティにもアプローチして実施するのは可能性としてはあるかも知れません。

「仕様書を作成・メンテナンスできる状態を作る」「一定レベルで仕様理解が担保されるプロセス、ルールの整備」というのは具体的にどのようなことをされましたか?同じような課題を今抱えていて困っています
「仕様書の作成・メンテ」は、当事者意識をもって、ドキュメントを更新・参照する(頻繁に参照されるものはキチンと更新されるという仮説)。
私のいるプロジェクトでは、仕様書は(1)単一の施策についての仕様書と(2)機能単位での仕様書を作っています。
(1)は、その施策が終われば基本的に見ません(過去の経緯など確認する場合などは見ます)。テスト、リリースが完了したタイミングで(1)の内容を(2)に統合する流れにしています。
その統合の作業をテストマネージャの責務として定めています。
「プロセス、ルールの整備」はこれからです。スクラムの中で仕様の読み合わせなどはしていく必要があると思っています。

テストベンダーさんから来ていただいたテストマネージャーの方々はどのタイミングでチームを抜けますか?
基本、抜けないです。開発が続く限りは併走してもらいます。

パーソルさんのQAエンジニアに応募したいのですが、どこからできますか?
1人目を採用後、これから諸々組織づくりの方針をまとめていっている最中なので、直近はQAエンジニアメンバーの採用は停止しているのですが、
カジュアル面談を受け付けておりますので、「話を聞きに行く」をからコンタクトいただければと思います。

www.wantedly.com


カジュアル面談後、ご興味ありましたらキャリア登録というものを案内致しますので
採用活動を再開した場合にお声掛けさせていただければと思います。

ロードマップについて、質問です。将来ビジネスで必要なシステムは開発エンジニアが作る様に思うのですが、将来システムとリンクしたQA視点でロードマップというと具体的にはどの様な事を描くのでしょうか?
ご質問の意図を正確に解釈できていかもしれないのですが、
QA組織としてのロードマップは「プロダクトや会社に対して提供する価値はなにか」という観点でゴールを定めてそこに向けてどういうステップを踏んでいくかを考えています。

例えば、「特定の部署に閉じず、全社的にプロダクト向上やプロセス改善に寄与することで、自社が提供する顧客価値・ビジネス価値を最大化する」というところをゴールとして定め、ゴールに近づくために、足元の課題をクリアしながらどのように役割を広げ、組織を大きくしていくかをデザインしていくプロセスだと考えています。
将来的にQAの内製化などは考えられておりますでしょうか?
完全に内製化することは現状考えていません。
少数精鋭の内製メンバーで社としての品質課題をコントロールしつつ、テストベンダさんとうまく協業しながらQAチームとして出せる価値を大きくしていくことを考えています。

採用されたQAエンジニアの方のキャリアパス相談や評価フィードバックなどはどなたが行っておりますでしょうか?弊社では適切にQAエンジニアを評価できる知識・経験を持つ方がおらず目線のズレなどが生まれてしまっておりまして…
直近はこれまでの品質向上の活動をリードしてきた吉次(アプリケーションのエンジニアです)が実施する予定です。
個人の目標設定や評価についても今後中長期的に取り組んでいく課題で、組織的に整備していきたいと考えています。
(解決策を提供できずすみません)
テストベンダーの選定方法について知見やアドバイスをお願いします!
社内に良い実績がある会社さんがあればまずそれを検討しますが、
現状の課題や今後想定される動きに対してフィットするソリューションを持っているかがポイントだと考えています。
その後は予算との兼ね合いになってくると思います。

1人目のQAエンジニアとして採用されました。品質課題を明確にするタスクに着手していますが、その明確化のために最初に何をすれば良いか悩んでいます。吉次さんは限りあるリソースの中で、品質向上のためにどのような取り組みやヒアリングを実施しましたか?また、「仕様」「実装」「テスト」の改善に取り組むにあたって、どれを一番重要視しましたか?

自分自身が開発に携わって、課題がある状態で「みんなも同じような悩みあるよね?」というところからスタートし、ある程度開発現場との今日考えられやすい環境だったので質問者様と状況が異なるとは思いますが、個人的な考えを回答致します。

品質に関わる活動に限った話ではなく、新しい環境に身を投じたときにはまず組織やプロダクトを理解することと、周囲からの信頼を獲得することが重要なので
まずはコミュニケーションをとって関係性を作るのと、些細なことでも品質関係なくてもいいので組織内に転がっている困りごとを解決するところから始めるのが良いと思います。
(ある程度周囲との関係性ができて信頼が得られると、情報が集まりやすくなったり協力的な人が増えて効率が上がり、同じ工数でもできることが増えていきます)

具体的な品質課題については、シフトレフトの考え方に基づいて挙げられている3つの中だと「仕様」の部分を最重要視していました。
後工程全てに効いてくる部分なので、まずは仕様の部分にアプローチしていくのが成果に繋がりやすいと考えています。

谷平さん

QAがユーザー目線に立って検証をすることはどうしても仕様書のレビューやホワイトボックステストなどとは両立しない部分があるかと思うのですが、ハルフトさんのQAはどちらを重視しておりますでしょうか?
立場をわけています。開発者がホワイトボックステスト。QAがブラックボックステストを担当しています。単体テストの作り方がわからない、など相談することはあるが、基本的には役割分担している。中身を知らず、動いた内容を見て、ユーザー目線での意見を言えるようにしている。レビューもそのスタンス。

弊社はQAをプロダクトをよくするための活動とはおもっていなくQA=単なるテスターと思われがちです。なにか上部へ説得するには何かアイデアはありますか?
弊社がQAチームを作った経緯。痛い目にあった経験がある。客先に納品しにいったら、インストーラーが起動しないなどが起こって、痛い目にあったのでQAチームが発足した。必要性を社内で意識づける。基本的に品質を優先するなら、テストは大切です。

QAがユーザー目線に立って検証をすることはどうしても仕様書のレビューやホワイトボックステストなどとは両立しない部分があるかと思うのですが、ハルフトさんのQAはどちらを重視しておりますでしょうか?
立場をわけています。開発者がホワイトボックステスト。QAがブラックボックステストを担当しています。単体テストの作り方がわからない、など相談することはあるが、基本的には役割分担している。中身を知らず、動いた内容を見て、ユーザー目線での意見を言えるようにしている。レビューもそのスタンス。

 

次回のイベントレポートもお楽しみに♪

【イベントレポート】GitHub勉強会~最新情報・GitHub Copilot・GitHub Codespacesなど~

ZOOMの様子

こんにちは!TECH Street編集部です!

2023年6月8日(木)に開催した、 「GitHub勉強会~最新情報・GitHub Copilot・GitHub Codespacesなど~」のイベントレポートをお届けします。GitHubの最新情報やGitHub CopilotによるAIのコード補完の話などいただきましたので、ぜひご覧ください。

登壇者はこの方!
岩永かづみさん/ZEN Architects 所属

早速、内容を紹介いたします!

GitHub最新情報

今回は「GitHub最新情報」「GitHub Copilot」「GitHub Codespaces」「GitHub中級テクニック」についてご紹介していきます。

まずは、GitHubのおさらい

まず、最新情報をお話する前にGitHubのおさらいです。

まず、皆さん知っているコード管理するための GitHub があります。あとはそのエコシステムと呼ばれる周辺の技術と、さらに最近のリリースでは開発環境の革新などがあります。

「GitHubでコード管理して イシューでタスク管理して、プルリクエストで開発フローを回す」というのは、おそらくもう皆さん使っているところかなと思います。

ここまではおそらく皆さん知っているGitHubだと思いますが、それ以外にも沢山機能があります。

例えば以下機能があります。

  • GitHub Pages
  •  GitHub Actions
  • GitHub Projects
  • GitHub Packages
  • GitHub Discussions

開発・運用を支えるセキュリティ機能

それと、セキュリティに対してもGitHub は重要視しており、「Dependapot」という脆弱性を検知してお知らせしてくれるような機能であったりとか、

シークレットが上がってきたら、そのシークレットを持っているプロバイダに通知してプロバイダー側が対処する仕組みを持っていたりですとか、

「コードスキャニング」という静的解析ツールを通して、その結果を管理したりとか、そういうようなことができるようなセキュリティの機能も実は GitHub にあります。

ここ数年のリリースの勢い

2019 年から今までにかけて、主要な機能が続々とリリースされました。

(ちなみに GitHub Copilot は新しいかと思いきや2022 年 11 月 9 日に出ており、結構時間経ってます)

ここ最近の注目

ここ最近で言うと、GitHub Codespaces 1 年前くらいに出て、今は「Copilot X」というのもが出ています。

GitHub Copilot X

「GitHub Copilot X」 という次リリース予定のものが公開されています。

  • GitHub Copilot Chat
  • GitHub Copilot for Docs
  • GitHub Copilot for Pull Requests
  • GitHub Copilot for CLI

上記、それぞれウェイトリストの登録ができるようになっており、このうち「GitHub Copilot Chat」に関してはベータ版が使えるようになってきているようです。

その他「GitHub Copilot for Docs」や「GitHub Copilot for Pull Requests」「 GitHub Copilot for CLI」もそのうちベータ版の利用ができるようになると思いますので、興味ある方はぜひ、waitlistに申し込みをしてみてください。

GitHub Next

次に「GitHub NEXT」について紹介します。こちらはGitHub として「試験的にいろいろなプロジェクトをやっているんですよ」と紹介しているサイトです。

様々なプロジェクトが公開されているので気になる方は、こちらもチェックされると良いかと思います。

GitHub Next

最新情報はここをみる

いろんな最新情報をどこでキャッチアップしていくかというと、私がよく見るのは Twitter です。

GitHub (@github) / Twitter

こちらはGitHub 全体のグローバルの方です。GitHub自体のサービスの細かなアップデートは全部ここに載ってます。

GitHub Japan (@GitHubJapan) / Twitter

英語が難しいという方は、GitHub JAPAN Twitter アカウントを運用していて、ここでもGitHubの日本語ローカライズした情報を出してくれているので、こちらもチェックすると良いかと思います。

最新情報はここをみる

GitHub Universe

GitHub Universe」は、GitHub のグローバルのカンファレンスで毎年 11 月に開催されます。このタイミングでいろんなものがリリースされるので、このGitHub Universeもチェックしてみてください。

GitHub Universe

GitHub Copilotとは

「GitHub Copilot」は、コードを書くことに特化したAIツールで、ざっくり言うと 「AI を使ったコード補完」です。

GitHub Copilot以外のこれまでのコード補完でも便利なものもありますが、GitHub Copilotの場合は、「今までのような決まりきったコード補完」ではなく、「AI によるコード補完」な点に特徴があります。

GitHub Copilot

GitHub Copilotを使い始めるには

GitHub Copilotは結構簡単に使い始められます。ステップは 3 つです。

  1. Github.com で設定で有効化する。
  2. エディタ/IDEにGitHub Copilotの拡張機能をインストールする。
  3. エディタ/IDE GitHubにサインインする。

①Github.com で設定で有効化する

GitHub Copilotを有効化する

②拡張機能をインストールする

似たような名前の拡張機能が沢山あるので、ちゃんとGitHubが提供しているものをインストールするようにお気をつけ下さい。

拡張機能をインストールする

Visual Studio Codeの画面
③GitHubにサインインする

右下に表示されるポップアップか、左下のアイコンからサインインします。

GitHub Copilotと仲良くコードを書くためのコツ

GitHub Copilotは与えた情報をもとに応答を返してきます。

そのため、この「与える情報」が肝心です。与える情報をここでは「コンテキスト」と表現しますが、何がコンテキストにあたるかというと「書いているコード」や「書いてるコメント」です。要は「ここのエディタで編集しているもの」これがコンテキストになります。

コンテキストをうまく渡してあげる

また、タブを開くとその開かれたタブのところからも、コンテキストとして送られて、その結果を返してくれます。

コンテキストに含める優先順位

それと、「コンテキストに含める優先順位」というようなものようです。

例えば今jsのファイルを開いているとします。そして、タブに例えば違う言語のPythonを開いておくと、そっちはあんまり優先度高く見られないようです。

つまり、同じ jsだったらjsPython だったら Python で、今開いているファイルに関連するものから、順にコンテキストに含めて送ってくれるようです。

GitHub Copilotを業務で使う

GitHub Copilotで扱われるデータはどうなるの?

皆さんが書いた内容のコンテキストは1 GitHub 側に送られます。そして、GitHub 側からその内容を元にサジェスチョンを返す動き方をします。

GitHub Copilotで扱われるデータ

この「送られたデータ」と「返ってくるデータ」、これらについての扱いは、GitHub が公開してるドキュメントから抜粋すると以下になります。

GitHub Copilotで扱われるデータ2

Copilotから生成された候補で「その候補を使った」や「その候補を却下した」というようなユーザーのアクションや、「エラー情報」のようなものは「ユーザーエンゲージメントデータ」という形で扱われていて、それはGitHubが改善のために利用したりするそうです。

また「Prompts」と「Suggestions」については、「そのデータを GitHub 側に使わせるか否か」、「その候補を出す以外の利用を許すか許さないか」というのは、個人で利用する場合は、設定項目のところからそれを許可するか、拒否するかを選ぶことができます。

「自分たちが書いてるコードは社内秘なので渡したくないです」という場合は、渡さないと候補を生成できないので、渡したくなければCopilotを使わないという選択になります。

「他の用途で使わせないで」という場合は、ここの設定を確認して欲しいと思います。

データの扱いに関するドキュメント

その他Tips

パクリっぽく見えるコードは出さないような設定

 GitHub Copilot は、パブリックに公開されたコードを元に学習しています。

なのでどれくらいの確率かはわからないですが、パブブリックに公開されたものとかなり似たようなコードが生成される可能性があるらしいです。

つまり、丸パクリしてきたみたいになり得る可能性がゼロではないので、それをどうしても防ぎたい場合は、「マッチングコードを許すか、許さないか」のような設定があるので、それを許さない方に設定しておくと、パブリックにあるものと一致するものは候補に出てこなくなります。

ちなみに 「Github Copilotで書いたコードはGithub Copilotが書いたから、Copilotの責任なんじゃないか?」と捉える方もいますが、その候補を採用するのは人間なので、そのGithub Copilotと一緒に書いたコードの所有権と責任は人間側にありますので、ここだけはお気を付けください。

個人用と商用両方使った場合はどうなる?

個人用と、会社用と両方使うような状態になった場合、for Business側が優勢になり個人用に使っていたfor indivisuals の方は解約されます。

for Businessの適用のされ方

デモ動画

GitHub Codespaces

例えば、コンテナを使って環境を統一

Codespacesが出る前は、何かしらのエディターや IDE が自分のマシンにあり、自分のマシン上にその言語やライブラリなどを直接インストールするのではなくて、コンテナのような仮想環境を作って、それに対してアクセスして作業するのがやりやすいと思っていました。

GitHub Codespaces画像1

GitHub Codespaces の場合

Github Codespacesが出てきて何が良いかというと、ローカルに作ってたこのコンテナの開発環境を GitHub側に寄せることができる点です。

GitHub Codespaces画像2

これによって、エディタからアクセスすることもできるし、Web ブラウザからも使うことができます。

例えば普段使ってないマシン上で開発をしたい時も、そのマシンに何かをインストールするのではなく、Github Codespacesの方にそういう環境を用意して Web ブラウザから接続する。そうすれば何もインストールする必要はない、というような使い方もできます。

GitHub Codespaces画像3

もう一つの例を挙げます。

普段開発してる「dev」という名前のインスタンスがあったとします。そして、レビューが頼まれたとき、今やってるコードを普段だとgit stashなどして、セーブしたり退避して、レビュー用のコードを持ってきて実行させるみたいなことをやるかと思います。これは、すごい面倒だしトラブルが起きやすいと思います。

けれど、GitHub Codespacesの場合、インスタンスを作るのがすごく簡単でポチポチ操作してすごく便利に使用できます。なので、上述のような面倒な作業はしなくて済みます。

GitHub Codespaces画像4

GitHub Codespacesのポイント

GitHub Codespacesの特有のポイントをいくつかご紹介していきます。

例えば以下のようないろんなインターフェースから使えます。

  • Visual Studio code
  • JetBrains IDEs
  • JupyterLabVisual Studio Code 拡張機能)

    GitHub Codespaces画像6

    詳細は以下のドキュメントから確認いただければと思います。

使い慣れたインターフェースから使う

テンプレートから環境を立上げられる

あとはテンプレートが用意されているので、自分で作らなくても大丈夫です。

下記のキャプチャにある「Blank」だと、PHPやRuby、Python など一通りの言語はインストールされていますが、何のフレームワークも用意もされていない状態です。

一方「Ruby on Rails」「 React」「Next.js」・・・などは、そのような形でテンプレートが公開されているので、「Reactちょっと触ってみたいけれども環境構築めんどくさいな」というような時は 「use this  template」ボタンを押すと、すぐ環境を立ち上げることができます。そして、立ち上げた環境すぐ使い終わったら消すこともできます。

テンプレートから環境を立上げられる

リポジトリから環境を立ち上げられる

自分のリポジトリからポチッとCodespacesを立ち上げるということができます。

そうすると、立ち上げた直後から既にgit clone された状態のものが立ち上がるようになります。

リポジトリから環境を立ち上げられる

必要な環境を数クリックで作成できる

例えば Visual Studio Code だと、いくつか選択していくだけで、カスタマイズした状態のCodespacesを作ることができます。

必要な環境を数クリックで作成できる

誰でも同じ環境を立ち上げられる

先ほど作ったような、このカスタマイズの情報っていうのは「devcontainer.json」という設定ファイルに作られて、それ自体をリポジトリに置いておけば、次回以降は立ち上げる時に、このdevcontainer.json の情報からその環境を立ち上げてくれるようになります。

この設定ファイル用意しておけば、みんな同じ環境を立ち上げることができます。なので、チームのオンボーディングがかなり便利になります。

誰でも同じ環境を立上げられる

インスタンスはアカウントごと

立ち上げたインスタンスはその立ち上げた人だけしか見えません。他の人からは基本的にはアクセスできません。

しかし、元々Visual Studio Code Visual Studio においてはLive share という使い方があり、それを使えばコラボレーションできます。

インスタンスはアカウントごと

Localhostへのポートフォワーディング

  • localhostにポートフォワードしてくれるため、あたかもローカル環境のようにシームレスに開発できる
  • パブリック、またはOrganization内むけに公開することもできる

localhostへのポートフォワーディング

インスタンスのスペックを選択できる

インスタンスのスペックはいくつかありますが、デフォルトは2coreになっていて、これで結構事足りると思います。

インスタンスのスペックを選択できる

マシンタイプ

Dev containerでカスタマイズ

  • Featuresによる簡単インストール
  • VS Codeのエクステンションのインストール
  • OnCreateCommandなどのライフサイクルへのフック
  • Dockerfileを用いた、より自由なカスタマイズ

prebuildで素早く立上げる

prebuildすることで早く立ち上がるのでおすすめですが、ただしその分ストレージを消費し料金がかかります。

prebuildで素早く立上げる

課金体系

マシンタイプごとに 2core, 4core, 8coreと稼働時間分と、それにプラスしてストレージの容量でお金かかってきます。

課金体系

管理

保持期間っていうものがあり、基本的にはデフォルトで 90 日を過ぎると削除されます。なのでその点は気をつけてください。

管理

GitHub中級テクニック

今すぐ効果のある中級テクニック

  • リポジトリ設定のPull Requests設定の見直し
  • Branch protection rulesの設定
  • Dependabotの有効化
  • Secret scanning
  • Code scanning
  • 新しくなったGitHub Projects
  • GitHub ActionsのOIDC接続

今すぐ取り入れたいPull Requests設定

今すぐ取り入れたいPull Requests設定

Branch protection rulesの設定

Branch protection rulesの設定

Dependabotの有効化

Dependabotの有効化

新しくなったGitHub Projects

Github Projects

GitHub Projects2

セキュリティ対策

セキュリティ対策

GitHub ActionsのOIDC接続を利用する

GitHub ActionsのOIDC接続

岩永さん、発表ありがとうございました!

Q&Aコーナー

続いてQ&Aコーナーであがった質問を紹介します。

(Q)GitHubはまだ眺めたことしかないのですが、基本的にエンジニアしか活用できないものなのでしょうか?

 GitHub自体もGitHub CopilotやCodespacesも、エンジニアだけのためのものではなく、テキストを扱うプロジェクトで特に有用です。個人的な経験では、書籍の執筆を行ったり、Zenn(ブログサービス)がGitHubと連携できるのでGitHub上で記事を書いています。

(Q)GitHub projects使いやすくなったのでしょうか?!気になる~~~~

GitHub Projectsはとても使いやすくなりました!
ちょっと前のものですが紹介動画を公開しています。 

www.youtube.com


いまはこの動画で紹介しているイテレーション機能に加え、ロードマップも対応しました。詳しくはドキュメントをご参考くださいませ。

(Q)GitHubの競合他社との比較して一番の良さはなんでしょう?

一番のポイントは、ユーザーが一番多いこと!ほとんどのオープンソースプロジェクトがGitHubを使っている。GitHubさえ知っておけば他のサービスも使えるのが強いです!
それから、コードやタスクの管理だけでなく、GitHub CodespacesやGitHub Copilotなど開発体験向上のためのサービスが提供されている点も強みと考えています。

(Q)岩永さま的に、ここだけは改善して欲しい(マイナスな意味じゃなく)ってありますか?

最近、一番の心配事だったプライベートリポジトリのIssuesなどにアップロードされた画像の扱いが、改善されてアクセス権が適切になったので非常に安心です。(参考 : More secure private attachments | GitHub Changelog
あとは、GitHub Enterpriseの課金体系がもう少し利用しやすくなるとよいと思います(現在シートの金額は一律ですが、readのみの場合は減額されてほしいなどの要望をよくお聞きします)

(Q)Zennのブログの履歴管理!見てみたいです!

ZennとGitHubの連携はこちらをご参照くださいませ🙆🏻‍♀️

(Q)Copilot の beta 機能の使用感の話したいですー

まだGitHub Copilot Chat(beta)しか利用できてないのですが、エディタ(IDE)内で調べ物の大半が完結するので集中を持続させるのに非常に有用です!(ブラウザで調べるとつい脱線してしまいますよね)また、別所で拝見したGitHub Copilot for CLIのデモでは、CLIに自然言語でやりたいことを伝えてコマンドを教えてもらえる体験が非常に便利だと感じました。ほかにもいくつかあるので、ぜひサイトをチェックしてみてくださいね!

(Q)Copilotは、PHPStorm向けに拡張機能はありますか?

GitHub CopilotはJetBrains IDEsのサポートを始めており、PHPStormも利用できます🙆🏻‍♀️(現在はベータ提供)詳細はドキュメントをご参照くださいませ。

(Q)有料版の料金について教えてください

後日になってどちらの話題に対してかわからなくなってしまったのですが、GitHub CopilotとGitHub Codespacesについては下記ドキュメントをご参照くださいませ。

(Q)まだGitHub使ってない弊社の上司に導入を説得できる魔法の言葉をいただけますか?

後日になってしまい文脈がずれていたらすみませんが、GitHubの場合は利用しているプロジェクトが多く、情報が豊富です。また、利用者が多いということは採用でのギャップ低減やオンボーディングもしやすいです。また、導入を推進するには効果を見せるとよいと思います。小規模からでも利用してみて、その効果を伝えてメリットを感じてもらいましょう!

(Q)Copilotに入力するソースの秘匿性は担保されますか?

GitHub Copilotの「入力するソース」について、エディタに記載された内容を指すとして解説します。エディタに記載されている内容はプロンプト(コード スニペット データ)として扱われ、少なくとも提案を生成する際にエディタからGitHubへ送信されますが、その後の扱いについてfor Individualsとfor Businessで異なります。
for Individualsの場合は自身の設定によります。詳しくは、こちらをご参考ください。
コード スニペットの収集の有効化または無効化

for Businessの場合、プロンプトは保持されません。

(Q)プライベートリポジトリでのセキュリティ対策って昔悩んだ記憶があるのですが、いまは簡単でしょうか?いまのベストプラクティスってなんでしょうか?

GitHubのセキュリティ機能のうち、プライベートリポジトリでも利用できるのはDependabotによる脆弱性のスキャンです。無料で利用できるので有効にしておくことをお勧めします。また、GitHubのセキュリティ機能をすべて利用するためには、GitHub Advanced Securityライセンスが必要ですが、Code ScanningやSecret Scanningがサポートされるので統合して対応ができる点がメリットです。なお、一言にGitHubといってもたくさんの機能があるため、ユースケースによりご提案できることもあるかと思います。詳しいご案内をご希望の場合はご連絡お待ちしております!

(Q)Copilotとは関係ないですが、他部署とのコラボレーションを最大限に活用したい!って悩みにアドバイスをお願いします

Innersourceという、Opensourceのように開かれた資産の共有、コラボレーションの在り方を社内・組織内で展開する考え方があります。情報が閉じているせいで部署ごとに車輪の再開発をしてしまうことは良くありますよね。コードやノウハウを共有することで組織全体での効率化や速度向上を見込めるでしょう。また、組織内とはいえ共有するには安全を保たなければなりません。これにより、副次的にプロジェクトのセキュリティの意識も高まるメリットもあると思います。
日本でもコミュニティがあるのでぜひ見てみてください。 

(Q)(チャットより)タブに開くファイルはimportしているファイルとそうでないファイルではコンテキストとして渡す優先度が変わるという認識で良いですか?

細かなロジックは公開されていないため、諸所で得た情報と使用感からお伝えしますと、タブに開いたファイル同士においてimportの関連性が優先度に関わることはないように思います。ただ、GitHub Copilotのリリース直後と比較すると細かな調整がされているようにも感じており、importなどの関連が反映されたようなより直感的な提案がされるようになるかもしれません。また、言語仕様の構造的な参照は既存のコード補完の方が機能するので、組み合わせて使っていくことになるでしょう。

(Q)パブリックコードのリポジトリのライセンスとかも参考度合いに影響するんだろうか?

現状、ライセンスに関わる挙動の違いはありません。LLMの仕様上、学習に利用したコードと大部分が一致する提案が生成される可能性は低いものの、ごくまれに発生するかもしれず、これへの対処としてGitHub Copilotには重複検出フィルタが含まれています。設定でこのフィルタを有効にすると、周囲の約150文字に対して重複がある場合は提案に含めないようになります。なお、この設定だけでライセンス違反を防げるかどうかについて明確な回答はなく、今後も議論が続くかもしれません。

(Q)Copilotさんは、コードがどんな状態でも綺麗なコードを書いてくれるのでしょうか?

GitHub Copilotは、言語仕様のロジックが組み込まれているわけではないので、プロンプトとして渡されたコードが適切かどうかの判断はできません。ですので、良くも悪くも渡されたコードの文脈に沿って提案が生成されますが、学習元の公開されたコードは洗練されたものが多いと推測できるので、書き続けていくと洗練された方に寄っていくかもしれません。
どちらかというと、GitHub Copilot Chatの方が、リファクタを期待できます。チャットの会話で明示的にリファクタを指示してあげると、リファクタを試みた返答してくれるでしょう。

(Q)テストコードなんかも出してくれる感じですか?

GitHub Copiloのコード補完でも、コメントや関数名などでテストコードを記述したい旨を指示していくと、提案をしてくれます。ただし、コード補完の形式では書きにくい点が否めず、どちらかというとGitHub Copilot Chatの方がテンポよく作業ができると思います。

(Q)岩永様でも実際に実務で使いまくってる感じですか?(間違った回答ってどれくらいな感じですか?

私の最近の業務は技術アドバイザリやワークショップの講師で、コードを書くのは検証やデモのため程度なので、開発における実務からは離れています。導入する現場も増えてますし、私も実務での威力をぜひ聞いてみたいです!なお、READMEや手順書を書く時は、大体決まりきった内容になるためか、提案の採用率が高く、書く量が減ってとても楽です。
また、「間違った回答」については、実際使ってみると、意に沿わないコードが出力されたとしても「与えたプロンプトが少ないからそんなものだろう」くらいの感想ですが、期待が大きすぎると残念に感じるかもしれません。しばらく使っていると、意に沿わなければそのまま書き進め、たまたま使えそうなコードが出てきたときは採用するといった作業になり、既存のコード補完に加え選択肢が増えてたまに助かるといった具合です。また、個人的には、Google日本語入力(辞書ではなくGoogleが検索サービスで得たリアルなワードをもとに候補が生成される入力補完)が登場したときの感覚に似てると感じます。

(Q)IDE の種類によって Copilot の機能や性能に差はありますか?

私自身はGitHub CopilotをVS Codeでしか利用していないので比較ができませんが、GitHub Copilot Chat(まだベータ公開)においては、エンジニア仲間と触ってみたところ、Visual StudioとVS Codeで違いがみられ、VS Codeの方が快適でした。とはいえ、Chatはまだベータ版なのでこれからリリースまでにブラッシュアップされると思います。

(Q)実開発の手順にCopilotを含める際、要注意ポイントはありますか?

業務のコードやドキュメントに対してGitHub Copilotを利用する場合は、for Businessでの利用をお勧めします。for Businessであれば、組織側で設定を一元化できたり、データ保護の面で安心できるかと思います。for Indivisualsで利用する際は、重複検出フィルタを利用するか、プロンプト(コード スニペット データ)の利用を許可するか個人の設定に依存するので、利用対象に関係する会社・組織の方針とすり合わせた上で利用するとよいと思います。

(Q)Visual Studio Code専用ですか?

いいえ。GitHub Copilotにおいては、現在ではVisual Studio Code、Visual Studio、Vim/Neovim、JetBrains IDEsで利用できます。
GitHub Codespacesにおいては、現在はVisual Studio Code、JetBrains IDEsおよびウェブブラウザで利用できます。

(Q)新規ではなく変更にもcopilotは使えますか?

既存のコードに対してもGitHub Copilotは提案してくれます。

(Q)Copilot chatを使うと自分が書いたコードをレビューしてくれますか?

レビューに関しては、現行のGitHub Copilot(入力補完)も、これから登場するGitHub Copilot Xに含まれる機能においても、どちらも領分ではありません。ベースとなっているLLMの技術は、文章(コードを含む)の要約はできても、その文章の構造を把握しているわけではないため、入力されたプロントが要求仕様を正しく実装しているかという判断には使えません。それをできるのは人間だけであり、「Copilot」はあくまで副操縦士で舵を握るのは人間なのです。ただし、要約が得意なことから、人間がレビューする際に役に立つと考えられています。

(Q)チャットいいね!ここで完結!これ最高ですね!むっちゃだいじ。お悩み相談とか人生相談もできるのでしょうか?

残念ながら、GitHub Copilot Chatは開発に関連したことしかサポートできません。例えば、「おすすめのラーメン屋さんを教えて下さい」と聞いても答えてくれませんので、開発に集中できますよ😉

(Q)Copilot Chat を IntelliJ でも使いたいです。いつ頃から使えるようになるのでしょう。

GitHub Copilot Chatはまだベータ版ということもあり対応エディタ・IDEが限られていますが、個人的な見解では、現行のGitHub Copilot(入力補完)のようにGA以降にJetBrains IDEsも対応されるのではないかと考えています。

(Q)Copilot chat使いたい!!github changelogチェックしておきます!

はい!まずはウェイトリストもぜひご登録くださいね!😉

(Q)逆にこれは失敗でお勧めできないよ!っていう環境例ってあったら聞いてみたいです

コメントは極力書かずに可読性の高いコードを書くことがよいとされている現場も多く、その慣習の上では使いにくいかもしれません。一方で、変数や関数の名前など、一貫性のある命名規則でかつ処理の意図を理解できるように命名し記述することは、人間にとっても可読性が高く、GitHub Copilotが文脈を組んだ提案を出しやすくなるので、使っていくうちに自然と活用していくようになると考えています。

(Q)チャットのデモ、いつまでも見てたい

ありがとうございます!すごく楽しいですよ♪ ぜひウェイトリストに登録いただいて、ご体験ください🚀

(Q)Codespaceのハードウェアスペックってどんくらいなんだろ?

GitHub Codespacesのスペックは、現時点では以下が利用できます。
- 2-core (4GB RAM, 32GB)
- 4-core (8GB RAM, 32GB)
- 8-core (16GB RAM, 64GB)
- 16-core (64GB RAM, 128GB)
- 32-core(要申請)
- 6-core(1GPU) (112GB RAM, 128GB)(要申請)

(Q)ネットワークの通信速度が遅いと、 codespaces も重いのでしょうか・・

正確な数値は覚えてないのですが、モバイルWiFiで接続しながらの作業でも全然気にならない程度です。どうしても遅い、もしくはネット接続がない場合は、GitHub Codespacesを利用せずローカルのDocker環境で立ち上げた方が快適かもしれません。GitHub Codespacesの環境はdev containerの仕組みなので、VS CodeのRemote containerとして起動・接続できます。詳しくはドキュメントをご参考くださいませ。

(Q)Copilot(とかChat)を使いまくることでコードを書くが減る(時間というか経験が減る)ことへの懸念って何か考えられますか?個人的には人によるのかな(生成してくれたコードから学べる人もいるしその方が学びのスピードが速い人もいる)と思うのですが、どうでしょう?

コードを書く量が減ることにより、開発に対する経験が減ることはないと思います。なぜなら、GitHub Copilotの提案を受け入れるかどうか判断するためには、脳内で処理が組み立てられている必要があるので、その経験はしっかり蓄積されると思います。むしろ、書く量が減って早く次を考えられるので、むしろ経験をより多く積めるかもしれません🙆🏻‍♀️

(Q)Copilot で運用がガラっと変わりそう。というのは淡い期待でしょうか?

GitHub Copilotはあくまで補助を担うものであり、コードが仕様を満たせているかどうか不必要な処理がないかどうかなどの判断は、人間が行う必要があります。人間がより適したコードを判断できるように学習や経験を重ねていくほかありません。その中で、パブリックコードから学習したGitHub Copilotの提案は、より汎用的で(いい意味で)使い古されたコードを提案してくるとも考えられるので、結果的に能力が高くない人が考えるよりも比較的適したコードが書きあがるかもしれませんね。

(Q)個人開発する場合もプルリクの運用ってすべきでしょうか?

個人的な考えでは、個人開発においてはどちらでもよいと思います。個人的には、デモや検証などの短期・使い捨てのプロジェクトであればコミットメッセージもそこそこにmainブランチに直接pushしていくときもありますし、あとから見返す可能性があったり公に公開する目的のプロジェクトでは、issuesでタスクを管理しプルリクエストで整理しながら進めることもあります。

(Q)Copilotを使うことでコードを書くのに集中できるようになると、今後はGoogleとかで上手く調べられる能力よりも、ひたすらエディタに向き合える集中力の方が「つよつよエンジニア」に求められる能力になるんですかねー

なるほど、集中力が強みの定義になりえるかもしれませんね。個人的には、もともと集中力が高い方の伸びよりも、これまで集中が苦手だった人が十分に集中できるようになることで本来の力を発揮できるようになるとも思います。これからが楽しみですね!

(Q)Copilotで30日間の無料期間がおわったら継続ではなく自動的に利用停止する機能はありますか?

ドキュメントに以下の記載があるので、一度支払方法を指定したのち、すぐキャンセルしておけば60日間はそのまま試用できるようです。
> 試用期間が終了する前にキャンセルした場合、60 日間の試用期間が終了するまで、GitHub Copilot に引き続きアクセスできます。

(Q)webフレームワークFiberが海外で人気が出てきていると聞きましたが、日本での使用例などはありますでしょうか?また、比較的よく使用されるginやechoとの違いなども知りたいです

すみません、私はGo言語の経験がなく回答できません。

(Q)GitHub Copilot やGitHub Copilot chatは結局どこまで見ているのでしょうか? VSCodeを開いていて表示しているファイルだけか、それとも他のタブで開いているファイルもか、それともフォルダ下のファイル全部でしょうか?

公式な情報がみつからないので、これまでのイベントなどでの情報をもとに回答します。現状では、編集中のファイルとタブに開いているファイルはGitHub Copilotに渡す対象になります。また、これは推測ですが、GitHub Copilotのリリースからこれまででも細かな調整がされたような挙動を感じたので、今後変更がある可能性もあります。また、今後GitHub Copilot XやGitHub Nextの内容からCopilotの利用が拡大されることが予想されるので、変化があるかもしれません。

(Q)GitHub Copilotの利用者に所有権と責任があるのであれば、同じ様な内容を生成しようとした場合は、先に公開したもの勝ちとかになるのでしょうか?

著作権かライセンス、特許・実用新案などに関するご質問だと思いますが、私はそちらの専門ではないので回答し兼ねます。申し訳ございません。

(Q)GitHub Copilotで正確にコードを出してもらうコツなどありますか?

GitHub Copilotはコメントや変数、関数名の構成などをもとに提案するので、それらの書き方がポイントになります。Microsoft Buildで行われたセッションでは、「3つのS=Single,Specific,Short」がベストプラクティスだと話されていました。あいまいなコメントや命名をさけ、簡潔に、より具体的に、指示が大きいときは段階的に記述していくとよいそうです。また、一発でよい候補を得ようとせず、対話するように調整していくことがポイントだそうです。

(Q)GitHub Copilot のBrushesでテストコードを提案してもらってから実行させようとしてもテストコードだけでは実行できません。テストの環境も用意しておく必要があるのですか?

私はまだCode Brushesを利用できていないので、ドキュメントを読んだうえでの推測になりますが、この機能はあくまでコードに対する提案のみのようなので、実行環境はご自身で用意する必要があると思います。これは個人的なアイディアですが、実行環境の構築について情報を得るには、GitHub Copilot Chatが向いてるように思います。このテストコードを実行するにはどうすればいいかを聞いてみると解決の糸口を得られるかもしれません。

(Q)Chatは、現在開いているワークスペースまたはタブ内のコードに関するものも回答してくれますか?

Chatがプロンプトとして使用する対象については、具体的な情報をまだ持っておらず回答が難しいです。申し訳ありません。

(Q)ブラウザからのCodeSpacesに対応しているエディタはVSCodeだけですか?JetbrainsのIntelliJ IDEAとかは対応してないでしょうか?

ブラウザからのGitHub Codespacesの利用は、現状VS Codeのみです。お手元にインストールされたJetBrainsのIDEからの利用でしたら対応しています。IntelliJ IDEAも対応しています。

(Q)dependabotって、ライブラリをセットで管理とかできますか?例えばreactとreact-domは必ずセットで変更のPR出して、のような設定ができますか?

Dependabotのalearts, security updatesには、複数のライブラリをセットで管理するような機能は、残念ながらありません。ただし、version updatesに関しては、6月30日の発表でグループ化できるようになりました!詳しくはこちらの記事をご参照ください。 

(Q)Dependabotの脆弱性検知と、Code scanningの脆弱性検知はどう違うのでしょうか?

Dependabotは依存関係(ライブラリなど)の中に脆弱性を含むものがあるかを検出します。Code Scanningは静的解析ツールを用いた脆弱性の検出を行います。

(Q)ゲームも気になる、エンジニアトークしながらゲーム配信??!

エンジニアトークしながらゲーム配信ありです🙆🏻‍♀️ ぜひいらしてください~!
ライブ配信はこちら https://www.twitch.tv/dzeyelid
アーカイブはこちら https://www.youtube.com/@dzeyelid

 

いかがでしたでしょうか。皆さんがサービス開発時の技術スタック選定において少しでも役に立てればうれしいです。

次回のイベントレポートもお楽しみに♪

【イベントレポート】アジャイル開発「スクラム」って各社どうしてる?エンジニア知見共有会

今でこそアジャイル開発「スクラム」は様々なプロジェクトで採用され、概念も浸透していますが、具体的なやり方はプロジェクトの数だけ特徴があるかと思います。そこで今回は各社のアジャイル開発「スクラム」に携わるエンジニアが集まり、それぞれの知見を発表し、学びあう勉強会を開催しましたのでその様子をレポートいたします。

登壇者はこの方々!
藤澤 明慶さん/株式会社 BuySell Technologies
西澤 翔利さん/パーソルキャリア株式会社
Yuichiro ABEさん/株式会社タイミー

まずはBuySell Technologiesの藤澤さんより、チームの生産性を向上させるためのスクラム運用についてのセッションです。


チームの生産性を向上させるためのスクラム運用

バイセルは、リユース業界全体のデジタルトランスフォーメーションを目指して、リユースプラットフォーム【Cosmos】を開発しています。このプラットフォームには、「出品管理サービス」というプロダクトも含まれています。

今回の発表は、スクラム開発を始めたもののチームの改善が疑問な方や、開発生産性を上げたいけれども具体的に何をすればいいのか分からないと感じている方に向けて、スクラム運用の改善を通じて開発生産性を向上させた事例を紹介します。


最近、私が所属するチームの生産性が爆上がりしました!!

これは私が所属するチームの昨年の生産性に関する指標の推移です。
棒グラフと線グラフで、別々の指標を表していますが、大幅に改善されていることを示しています。

さらに…

このアワードは、生産性指標を可視化できるツール【Findy Team+】を利用している企業を対象に、生産性指標が特に高かった企業を表彰するものです。

では、どのように改善したかという具体的な事例の中でも、スクラム改善の事例を紹介します。

スクラム改善に至るまでの流れ


以前の出品管理チームでは、マイルストーンやロードマップの進捗状況について不安を感じながら作業をしていました。そこで、スクラムを導入することで、開発の進捗やスケジュールの見通しが立ちやすくなると伺い、チーム全体でスクラムを導入することを決定し、まずはスプリントの概念やスプリントイベントの実施に注力しました。

タスクをこなす上での考え方として…

・リソース効率からフロー効率へ
→工数をつかいきることより、スプリント内で予定したタスクの完了を重視
・開発スピードからベロシティの安定へ
→手が空いてもスプリント内で終わりそうにないことはやらない

この2点を意識するようにしました。
そして、ある程度スプリントをこなしてくると、いくつかの疑問が出てきました。

▲表面化した疑問

そこで、社内のアジャイルコーチにスクラムマスターを依頼して、これらの課題感を共有し、スクラム運用の改善を進めました。

具体的な取り組み

具体的に取り組んだことは

①生産性指標のKPI設定と可視化
②スプリントレトロスペクティブの運用改善

この二つです。

①生産性指標のKPI設定と可視化

チームの開発ワークフローに合わせて、プルリクエストを出してマージするとデプロイされるという方法を取っていたため、プルリクエスト数が多いほどデプロイ頻度と変更のリードタイムに影響があると考え、GitHubのプルリクエスト数をチームのKPIとして設定しました。

この仮説に基づき、スクラムを導入してからは、スプリント中には一定数のプルリクエストが出されるようになりました。そして、スプリント終了後には、開発した機能のレビューがステークホルダーによって行われ、必要な修正が洗い出されるようになりました。

また、生産性指標を可視化するためのツールとして【FindyTeam+】を導入。

すでに社内で導入の実績があり、プルリクエスト数がかなり見やすく可視化されていたので、採用を決めました。

②スプリントレトロスペクティブの運用改善

もともとチームでは、KPTというフレームワークを使ってレトロスペクティブを行っていました。
改善点を見つけるためには、KPTのような意見出しは必要ですが、それだけでは集中力を欠いてしまいます。そこでKPIにフォーカスしたレトロスペクティブを進めることで、チームの共通目標に向けた改善に集中できるようになり、その結果チーム全体での課題の共有や改善アイデアの共有がスムーズに行えるようになりました。

ではそれぞれのアジェンダでどのような話をしていったのか。
まずは【FindyTeam+】でKPIを確認しました。

プルリクエストの作成数の推移を前のスプリントと比べて「上がったのか、下がったのか」を確認しました。

また【Findy Team+】では、プルリクエストがマージされてからクローズされるまでといった区切りごとの所要時間をプルリクエストごとに見ることができるので、所要時間がかかったプルリクエストを中心にみんなで確認して、なぜ時間がかかったのか原因を追求するようにしました。

次にTryの確認です。

Tryは、チームが新しいアイデアや施策を試みて、その効果を検証することを指します。このような試行錯誤を繰り返して改善していくことが、スクラムの重要な要素の一つです。何度かスプリントを重ねて、同じTryが連続して効果がありそうであれば、それはワーキングアグリーメントに追加することにしました。ここにTryを追加して、恒久的にチームのルールとして取り込むような運用をしています。

最後に実験的なTryを考えました。

ここでは、生産性指標や時間がかかったプルリクエストの課題を解決する施策を考えます。しかし、この段階でのTryは根拠に基づくものではなく、「効果があるか分からないけれども、やってみよう」という実験的な試みです。

▲Try作成からKPI確認までのワークフロー

生産性向上のためのTry紹介

効果があったTry

● 1つのプルリクエストの変更行数を100行に制限
・レビューしやすくなってマージ速度UP
・Clでチェックしてルール遵守
変更行数を抑えることにもコストがかかりますが、レビューコストを抑えたほうが恩恵が大きいという印象でした。

● レビュー依頼の方法変更
・チャットベースのやり取りから通知ベースへ
・GitHub Schedule ReminderでSlackに通知
以前は、レビュー依頼はチャットベースで行っていましたが、プルリクエストの数が増えるにしたがって、どのプルリクエストがレビュー依頼されたのかを特定することが困難になってしまいました。そこで、通知ベースに変更することで、レビュー依頼があったプルリクエストを定期的に確認できるようになり、自分がレビューしたプルリクエストに対してアクションがある場合には、通知が届くためすぐに対応できるようになりました。

●スプリントプランニングでのタスクの細分化
・100行以内の変更をイメージしてストーリーを分解
・プルリクエストの分割の手間を削減

最終的にチームがどうなったのか

▲再掲:プルリクエスト作成数が爆増しリードタイムが圧縮


【Findy Team+】には、サイクルタイム分析という機能があります

▲サイクルタイム分析

指定期間の開発サイクルの時間を平均で確認できます。
1つのプルリクエストがマージされるまでの時間を区切りで確認できますが、全体で34時間以内であれば、Findy Team+内の区分けとしては最高ランクに分類されます。そこを我々は達成することができました。
以上の結果を受けて、良かったこととしては、最初はスクラムに悩んでいましたが、チームのみんながスクラムを通じて自分たちの生産性向上に実感を持てるようになりました。今では自信を持って、開発を進められるようになっています。

まとめ

スクラムの効果に悩んだらKPIを設定しよう
○ チームの改善の方向性が明確になる
○ KPIを可視化すると課題が見えてくる

振り返りの方法を工夫しよう
○ KPIにフォーカスするのがおすすめ
○ Tryを重ねて改善しましょう

上記を意識することでチームの生産性の向上が図れると思います!

Q&A(藤澤 明慶さん/株式会社 BuySell Technologies)

●「生産性」について、どんな議論をして、どんな背景や観点を持って現在の生産性指標にしたのか、教えてください。
藤澤:Four Keysは生産性向上に向けた施策のひとつであり、それを取り入れることでチームの生産性向上が期待されます。自分たちがFour Keysのどの部分に当てはまるのかを考え、それを踏まえて現在のKPIを決定しました。

●元々スクラム経験者メンバーでの取り組みでしたか?みなさん未経験でしたか?
藤澤:ちゃんとスクラムの経験がある人はいませんでした。みんなでガイドを読んでから始めました。スクラムマスターに関しては経験者です。

●KPI良いですね、設定前後でどう変わりましたか?
藤澤:設定したものを「改善する」という意識になったので良かったです。

●2プルリクエストはどういう観点で確定したのですか?他社を参考にしたとか、コンサルのアドバイスとか。
藤澤:他社を参考にしました。

●PR数をKPIとした時、PRのサイズ感を揃える必要があるのかなと思いましたが、何か工夫されたことはありますか??
藤澤:サイズ自体を決めました。

●ワーキングアグリーメントはどういったタイミングで削除していますか?(全員がなれたら?)
藤澤:削除していません。新メンバーがきたときもこれを見てジョインしてほしいと思っています。

●スプリントを重ねるにつれてワーキングアグリーメントが増えつづけそうですが、間引き方などはあるのでしょうか?もしくは特に多さは問題視されていないのでしょうか
藤澤:間引きは現在していません。確かに多くなってきています…

●KPIに含まれない課題意識はレトロスペクティブでどのように取り扱っていますか?
藤澤:アジェンダを分かりやすいようにしていた。KPIに対してTryが出てこないときは、自分たちの課題感に対してTryを出すようにしています。

●slackでも埋もれてしまうことはなかったのでしょうか?
藤澤:スケジュールリマインダの機能で定期的に通知してくれる。間隔は30分毎にしています。

●生産性も大事ですが、開発の質を落とさないために気をつけていることを教えていただけますでしょうか?
藤澤:まずは「生産性を上げましょう」がKPIです。今はカンストした感あり。今後は、顧客の満足度やバグの数などをKPIにしていきたいと考えています。

●Four Keysの他の指標にも影響があったのか知りたいです。
藤澤:他の指標は現在測っておらず、これから他も測っていきたいと考えています。

 

続いてパーソルキャリアの西澤さんよりスクラム開発改善の道程を、失敗談も含めたリアルな経験に基づく知見を共有いただきました。


スクラム改善までの道のり

私は今回ご紹介するプロジェクトで初めてスクラム開発をしました。スクラム開発をするにあたり、関連書籍には目を通しましたが、自分の担当するプロジェクトにどのようにして落とし込めばいいのかについては、なかなか情報がありませんでした。今回はその時のお話を失敗談も交えながら共有します。

まず私が開発に関わったプロジェクト【HR forecaster】について簡単にご紹介します。
【HR forecaster】は転職サービス「doda」が蓄積した転職データ100万件以上をマーケットデータとしてご提供し、データをもとに転職マーケットにマッチした採用ターゲットを作成できる無料サービスです。

改善前の状態について

プロジェクトの歴史はこのような流れになっており、私がジョインしたのはα版リリースとβ版リリースの間だったので、まだプロジェクトとしては未熟な状態でした。

組織全体でスクラム開発を推進していたため、チームもスクラム開発を進めていました。しかしながら、サービスとしてはバタバタの状況が続いており、実際にはスクラム開発を遂行していなかったという状態でした。スプリントでタスクを区切るという単純な手法に留まっていたといえます。それでも、ビジネス側との調整に問題は生じず、重大な問題にはなりませんでした。
しかしある機能開発がきっかけで問題が起きることになりました。

事件発覚

当初は小規模なプロダクトバックログでしたが、要件が膨れ上がり、サイトの8割にも及ぶページに手を加える巨大なバックログとなって機能検討だけで、約8か月弱かかることが判明しました。構想の初期段階では、2〜3か月で実装可能と考えられていましたが、実際に着手してみると、すべての変更に1年以上かかるような状況でした。理由は“あるある”かもしれませんが、プロダクトバックログの明確な目標が時間経過とともにつれてぼやけていってしまったことが原因です。

当然、サービスオーナーは1年以上も時間がかかると思っていなかったので、想定していたビジネススケジュールとは大きく離れる形となってしまいました。
最終的な落としどころということで、機能開発はいくつかの段階に分けて実施することになりましたが以下のような課題があがってきました。

・すべてを1つのIssueで検討を進めていたので、ばらしても開発にかかる時間が膨大
→一連の機能の関連性が強く、最小リリース単位をどの程度までばらせるか検討にも時間が必要
・中でも優先したかった機能が後回しに


これがきっかけとなり、本格的にスクラム開発を改善することになりました。

改善に向けて

まずは「どうすれば回避できたか」の原因分析。目標が明確であれば各マイルストーンを設け、ユーザーの検証も段階的にできたはずだと思っています。同じことを繰り返さないために、仕組みとして機能しなければならない!
そこで目を付けたのが「見積もりをすること」です

そもそもプロダクトバックログを小さくすることは当然のことですが、実際の機能開発等の具体を想像しながらサービスオーナーだけでそれを考慮することは難しいと思います。
なので、最終的なアウトプットの責任を持つエンジニアが見積もりをし、開発にかかるコストとサービスオーナーの機能開発にかかるコスト感が一致するかどうかを認識合わせをすることで開発の計画が立てられると考えました。

以上を踏まえて安定した開発スピードを維持しながら、中長期的な開発計画を策定しやすくし、より良い経営管理を可能とすることを目指しました。最終的に、基本的なスクラム開発プロセスを実装することで、これらすべてを確立できるという結論に落ち着きました。

スクラム開発運用の変更

・バックログリファインメント、スプリントプランニング2部を実施するようにし、見積を2段階に分けて実施する
・スプリントゴールを設ける
・スプリントレビュー、スプリントレトロスペクティブを実施する

この3点を軸に運用整理を行いました。

▲イベントスケジュール

他のイベントに関しては、特別なことはやっていません。各イベントを詳しく説明します。

ここでのリファインメント作業については、次のプランニングで取り扱うことになるかどうかはまだ不透明な状況です。従って、見積もりは行うことが望ましいですが、あまりにも時間をかけすぎることは好ましくありません。ここでサービスオーナーとの合意が得られたら、開発に取り掛かります。

実際に開発を進める段階ではスプリントプランニングの1部で、このスプリントでやることの概算見積もりを見ながら、やることを決めています。スプリントプランニングの2部では、タスクの洗い出しをエンジニア全員で行います。

やってみてどうだったのか

エンジニアがスプリントに意識を向けて開発を進めるようになったため、コンスタントに成果物が出せるようになりました。この状態を目指していたので、達成できたことはとても良かったです。

これまでの開発ではベストエフォートで作業を進めていたため、自分たちがどの程度プロダクトに対してコミットできているのかわかりませんでした。そのため、ひたすら機能開発を続けていくという状態が続いており、品質改善や個人の学習時間(勉強会参加等)の機会が失われてしまっていました。しかし、スプリント内の明確な目標が出来、その目標が達成できているという自信がついたことで品質改善やその他の活動に参加しやすくなったという副次的な効果もありました。

また、タスクの洗い出しを全員で行うことで、暗黙知の共有や属人化が少しずつ軽減されるようになり、チームメンバー全体のスキルの底上げにも繋がったと思います。


スプリントプランニングの時間が足りないという課題に対して、時間を短縮するのではなく、取り方を工夫することが必要だと考えています。
一番見積もりが難しいのは、技術調査が必要なバックログ。これらは時間があればあるだけ取り組めてしまうため、目的と時間を決めて進めていく、というのが現状のやり方になります。

まとめ

ビジネスサイドとの目線合わせをするためにも、見積もりは大切な材料です。作った機能をユーザーに使ってもらうためにも、リリース時期を正確に把握する必要があります。
ただし、見積もりをしたからといって、イシューのスコープが狭まるとは限りません。もし「ユーザーに必要な機能だから時間をかけてでもやろう」という判断がされた場合は、同じチームメンバーとして、「もう少し小さくできないか」といった意見を出し合う必要があります。ダメなものはダメとしっかりと判断することが、品質改善の一環となります。

Q&A(西澤 翔利さん/パーソルキャリア株式会社)

●初めてのスクラム!一番の不安は何でしたか?dodaではないのですね?w
西澤:自身の不安というよりは、スクラム経験者がチームメンバーにいなかったので答えを聞ける人がいない。そもそもあっているかわからないというのが不安でした。

●大事件、この時モチベどうでした?スクラム体勢でどんな乗り切る工夫をしました?
西澤:モチベーションはかなり下がってしまいました。自分たちの何ができていないのか、何をしなければならないのかをメンバーに説明して、プロジェクトに対する未熟さを認識することができました。この説明は、一つの工夫でした。今後も引き続き改善点を見つけていきたいと思います。

●「俺たちの考える最強の機能」これは危険ですよねwこれで失敗したこと何度もあります。パーソルさんは色々サービスありますが、他でもスクラムでやっているのですか?知見の共有体勢なんかも気になります。
西澤:この組織に入って長いわけではないのですが、私が所属する部署では勉強会やプロジェクト間での情報共有ミーティング等を定期的に開催し、ノウハウの共有をしたりしています。Findy Team+を使ってスクラム改善を図っているようなチームもあります。

●改善に向けたハンドリングは全部西澤さんが担当されたのでしょうか? 入社してまだ慣れてないタイミングですごいなと思いました。
西澤:私が担当していました。ただ自チームのリーダーやメンバーと課題の擦り合せをしながら今の形にしていきました。

●結論のところに書かれているプロダクトバックログの分割ってどういう意味なのでしょうか? プロダクトバックログ自体は1つというイメージだったのでちょっと気になりました。
西澤:複数のシナリオが入っているバックログのことを指します。
何を解決できていないのかを明文化できていないと、複数同じことが入ってしまい失敗してしまうことがありました。

●パーソルさん、安定した開発スピードを維持するためには、どうしても人数の上下の影響が強く出るかと考えておりますが、そのあたり何か工夫していることはありますでしょうか。
西澤:人数は増やしすぎない方が良いと思っています。人数を増やすと逆にスピードが落ちる場合もあるのでその点は気をつけています。
また特定のメンバーへの依存が強くならないように、全てのエンジニアで設計をしたり、スクラムイベント内で暗黙知の共有の機会を作ることで全てのエンジニアの能力の底上げに繋がるような工夫はしています。

●スプリントゴールは、どんな観点で、どんな粒度で設定していますか?
西澤:Tシャツ見積で見積もっている部分がハマるのかどうかで設定しています。タスク単位でみています。

●スクラム開発で一番の困り事をお聞きしたいです。
西澤:スプリントプランニングは、いつも時間が足りないものです。特に、技術調査などが含まれている見積もりが難しいタスクは、スプリント内で進めるのに課題があります。こういったタスクは、できるだけ早めにスプリントプランニングに組み込むことが必要です。
また、プロジェクトのヴェロシティが安定していない場合は、タスク量のコントロールも重要になってきます。そういう場合は、前回のスプリントの振り返りを行い、今後のスプリントでタスクを調整することが必要です。さらに、プロジェクトへのコミットが限られているメンバーがいる場合も、タスク量のコントロールは重要です。そういう場合は、メンバーの能力や状況に合わせて、タスクを割り振ることが必要です。

●今月からスクラムマスターを任されました!先輩方に、立ち上げ時これやっといた方がいいよとか、やっておけばよかった〜というのがあれば教えてください!
西澤:スクラム開発をすることで自チームの何を解決したいのか目標をハッキリさせた方が良いかなと思います。
スクラムイベントを回すことが正となって、目的と手段が逆転してしまうケースは避けたいです。
タイミーさんと回答が被りますが、そのためにもスクラム開発の理解はチーム全体で共通認識を作った方が良いと思います。私のチームではスクラムガイドの輪読会を実施してあーだ、こーだ言いながら認識合わせを実施する機会を設けました。各イベントが何のために必要なイベントなのか理解しておくことで守破離のようなものが身につくかなと思います。

●趣旨が違うかもで申し訳ないですが、開発手法より「結局人でしょ」「退職で崩れちゃったよ」みたいなことってありません?
西澤:私は個人への依存は大なり小なりあるかなと思います。ただ特定のメンバーへの依存を強いまま放置するとチームとしての生産性は上がらない、そのメンバー外れた時に崩壊するので特定のメンバーが持つノウハウや、暗黙知を共有する場をスクラムイベント内で設けて、チーム全体の平均が向上するようには努めています。

●デザイナーやエンジニア混合のチームでのスクラム事例がもしあれば聞いてみたいです。
西澤:混合と言って良いのか分かりませんが、私のチームでは
①POがPBI作成
②デザイナーが入ってPOとPBIをリファインメント
③デザイナーがブラッシュアップしたPBIをエンジニアがリファインメント
④開発着手可能なPBIになったら着手
という流れで進めています。スクラム開発ではデザイナーが登場人物として出てこないので当初戸惑いましたが、リファインメントを一緒に行っていくという立ち位置で関わっています。スクラムイベントに関しても出席してもらっていますが、やっていることはエンジニアと違う時間軸で動いていることが多いです。

●4つ質問があります
・スウォーミングで対応してますでしょうか?
・タスクはサインアップでしょうか?
・ふりかえりにPOも参加してますでしょうか?
・メンバーはそれぞれPJ掛け持ちありますでしょうか?
西澤:
・スウォーミングで対応してますでしょうか?
→現状特に指定はしていないです。ですが、設計は全員で行います。開発についてはタスク同士の依存関係もあるので一概には言えませんが、複数人で作業可能なものは可能な限りメンバーを割り当てます。
・タスクはサインアップでしょうか?
→サインアップ形式を基本としています。前述している通り設計はエンジニア全員でやっているので特別難易度が高い場合を除いて、アサインの意味合いが薄いです。(希望が出なければアサイン)
・ふりかえりにPOも参加してますでしょうか?
→参加していますが、オブザーバーとして参加している時の方が多いです。
・メンバーはそれぞれPJ掛け持ちありますでしょうか?
→あります。なるべく排除したいのですが、リソース等の都合もあり発生しています。
その場合は各スプリント内でどの程度プロジェクト内にコミット出来るか時間単位で割り出し、時間当たりのヴェロシティと掛け合わせてタスク量を調整することもあります。

●作業時間が見積もりした時間よりオーバーすることが多く、残業することが多いですが、どのように工夫すればよろしいでしょうか。
西澤:「実績がない作業で、感覚でつけることが多い」とあるので、恐らく見積もりのナレッジが少ないのかなと思いました。
開発が完了した後に見積もりの振り返りを実施してみてはいかがでしょうか?自分たちの付けた見積もりと作業時間を比較して、再度見積もりをし直すと自分達の実際のヴェロシティが明らかになると思います。
あとはタイミーさんの回答にもある通りですが、相対比較がよく言われる方法なので見積もりし直したタスクをプランニングやリファインメントの見積もりの際に利用すると良いと思いました。
また、見積もる際に必要な作業が見積もれていないケースも考えられると思います。開発タスクは当然そうですが、レビューの時間やQA等マージされるまでに必要な工程が見積もりに含まれていないケース等も私はあったので、それらの作業も見積もりとして含めると良いと思います。


最後にスクラム開発を最小で実施する知見共有をYuichiro ABEさんより共有いただきました。

スクラムを最小で実施するために、やったこと&やめたこと

 

スクラムを最小で実施するために、やったこと&やめたこと - Speaker Deck

みなさんにとって、スクラムは難しいですか?
やはり難しい部分があるからこそ、今回のようなイベントが開かれていると思いますが、ではなぜスクラムは難しいのでしょうか。難しいのは、本当にスクラムなのでしょうか?

私はそもそも開発方法がなんであれ、プロダクト開発が難しいと思っています。
ちなみにスクラムガイドを見てみるとスクラムは軽量級のフレームワークらしいです。さらに読み進めると意図的に不完全であり、理論を実現するための必要な部分のみが定義されていて様々なプロセス、技法、主要を使用して実践する人たちの集合知で構築されていると書かれています。
よって私は、スクラムを「最小の仕組みで、最大の価値を生み出す」というように捉えてみました。
今日は、この側面でお話をしたいと思います。
さて、私たちは最小の仕組みからスタートできているのでしょうか?

実際にはそんなことはなくて…

・長い年月をかけて作られた会社の規則
・既存の仕組みに慣れすぎた社員
・積みあがった様々な負債
…etc

こんな感じで、スタートの時点で抱えているものが多すぎると思います。
その結果、「スクラムはスタートアップ向き。我々には合っていない」となり、スクラムとお別れすることが多いのではないでしょうか。しかし、ちょっと待ってください!
スクラムガイドにもありますが、

引用元:スクラムガイド

「その存在を不要にする」ここに注目してほしいです。今やっていることが必要なのか見つめなおし、不要なことを捨てる勇気を持つことが大事ということです。

Timee(タイミー)について

ここで私が開発に関わる【Timee(タイミー)】についてご説明します。

前提として弊社は設立約5年のスタートアップなので、そもそもしがらみが少ない&捨てやすい環境です。

スクラムを最小に実施するためにやったこと

・スクラムガイドを読み、守破離の守を大事にする
・困ったときに最小限

まずはこの2点を実施しました。

スクラムガイドを読み、守破離の守を大事にする

チームメンバーでスクラムガイドを読み込み、抽象的な表現やわからない部分を質問や感想を言い合い理解する時間を設けました。

▲実施の様子。Miroを活用

miro上にスクラムガイドを1枚ずつ貼っていき、マーカーや付箋などを使って勉強をしました。
やり方としてはセクションを区切って読んでいき、そこまでの疑問や感想などを話していきました。
これによって、スクラムの基本的な型をチームで共有できたので、守破離を徹底しやすくなったと感じています。意識したのは“それはスクラムガイドで示されているか”というキーワード。

「自分たちの取り組みはスクラムガイドに示されているか」それを意識することによって、その取り組みがスクラムによるものなのか、そうでないのかをチームで考えるように促しやすくなっていると思います。

「このイベントに自分はいらないよね」とイベントを実施しない人も実際にいますが、基本的にスクラムというのは、チームの透明性を保つために必要な要素が含まれているので、そのイベントや仕組みが何のためにあるのかを考えた上で、基本的にはその型通りにやった方がいいと思っています。

私がよくやる動きとしては下記2点です。
・守から外れそうになった時に、スクラムガイドを参照する動きをする
→例:「スクラムガイドにはこう書かれているよね」として動く
・スクラムガイドの解釈が不安になったら、認定スクラムマスターを受講したり、外部のスクラムマスターに相談する

困ったときに最小限

スクラムに限ったことではないかもしれませんが、チームが軌道に乗るまでは課題が山積みで、あれもこれも解決したい!となりやすいですよね。
課題を全部まとめて解決できる、魔法のようなソリューションがほしいと思いますが、基本的にそんなものは存在しないと私は考えています。
ただし、課題が解決できるような有効なアクションを探索すること自体を否定するわけではありません。

最初のうちは課題を分解してなるべく簡単に小さく試せる解決策を試してみることが重要
そしてレベルアップしていくのが良いと思います。
実際は、考えた解決策が上手くいく保証はなく、逆にうまくいかないこともあるでしょう。同じように、一般的に有効とされるプラクティスが役に立たないこともあるかもしれません。最終的には、チーム自身で実験を繰り返して、うまくいかなかったとしても、何が問題であるかを話し合い、実践することで解決策を見つけることが必要だと思います。様々なアクションを繰り返し、成長していくことで、より複雑な課題を解決できるチームになっていくと思います。

ちなみに自分のチームではスプリントは短く1週間単位で設定しています。
<利点>
・実験の試行回数を増やせる
・失敗してもきになりにくい

スクラムを最小にするためにやめたこと

・PdM(プロダクトマネージャー)がチームをマネジメントする
・プロダクトバックログアイテムのフォーマットに拘る
私たちのチームはこの2点をやめました。

PdM(プロダクトマネージャー)がチームをマネジメントする

「PdM(プロダクトマネージャー)がチームをマネジメントするのをやめた」きっかけは
PdMがチームメンバーと1on1を実施してメンタリングして、評価者になっており、その結果下記のような状況になっていたからです。

・PdMがプロンプトと向き合う時間が減る
・PdMが不在の時に意思決定できないメンタルになる
・チームの改善をチームが実施しない

<具体的な改善策>

要するに、PdMはプロダクトオーナーであり、プロダクトオーナーはプロダクトに向き合う人であるという意識を、PdMや開発者に理解してもらうように伝えました。

その結果チームは自分たちで意思決定ができるようになり、PdMは顧客価値創出のための、ユーザーインタビューなどに時間を使えるようになりました。

プロダクトバックログアイテムのフォーマットに拘る

続いて「プロダクトバックログアイテムのフォーマットに拘る」をやめた件についてですが、まずはフォーマットについてご説明します。

基本的に、プロダクトバックログはオンライン(Notionなど)で管理していると思います。私のチームもNotionを使っていますが、チームからの新しいアイデアや課題があったとき「PBIを起票するのは、なんか重いので自由にやりたい」という声がありました。
※PBI=プロダクトバックログアイテム

PBIがドキュメントのように扱われ、事前に色々な情報を書かされるテンプレートが存在すること「テンプレを埋めなきゃ」という空気感を重いと感じてしまいがちです。
そこで、起票時にテンプレートを埋めるのをやめました。

<具体的な改善策>

結果として活発にPBIを通じて議論が行われるようになり、何かあればPBIを通じて話がはじまるようになりました。

まとめ

最後にスクラムであろうとなかろうと、上手くいっていることは良いこと!
しかしこれからもずっと上手くいくとは限らない。スクラムは上手く使うことによって、間違いを発見する機会を作れるので、それを見逃さずにチームを改善していけば良いのではと思っています。

Q&A(Yuichiro ABEさん/株式会社タイミー)

●タイミーさんは、去年あたりからDevEnable室を作られたそうですが、それによってスクラム開発にもなにか変化はありましたか?
ABE:スクラム開発そのものに直接的な影響は多くないです。雑多なものをお願いできる仕組みもあるので、開発者の体験はよくなったと思います。

●「そもそもスクラムが難しいんじゃなくプロダクト開発が難しい」これはいきなり格言だ。あべさんのオリジナル格言ですか?
ABE:資料作りながら思ったことです。先週受けた研修でも似たようなことを講師の方が仰っていました。

●抱えているものが多過ぎる、これ分かるなぁ。これにどう気付けるか、なにが不要なものなのか、この対応できる、できないって経験ですかね?
ABE:書かれてないことは基本的にはオリジナル。外からもってきているものだと思います。不要かどうかは捨ててみてください。捨てると何かしら課題が出てきて、そこで気づけると思います。

●らずさん、タイミーに入社する前からスクラムマスターなのですか?トークがおもしろいですが、これはスクラムマスターに必須なスキルな気がするw
ABE:タイミーに入社して任命されました。

●フルリモートでの体制、miro活用についてお話いただいたので参考になります。他にも使われているツール等あればお聞きしたいです。チャット等。
ABE:slack、Meet、Miroが社内では全体的に使われています。

●外部のスクラムマスターに相談するとありましたが、どのように人脈を広げているのでしょうか。
ABE:スクラムマスター研修を受けると繋がりができます。スクラムマスターはスクラムについて語りたい人多いので、「相談したいんですけど!」とコンタクトを取ってみてください。

●スクラムガイドの理解を徹底させる、良いですね。この理解を進めるうえで工夫されていること等があればお聞きしたいです。
ABE:いっぱい引用すると良いと思います。先行する人がいちばん詳しくなっていきます。具体的なことは書いていないので、具体的なことを伝えてあげると理解が深まると思います。

●タイミーさん、なんとなく社内コミュニケーションのハードルが低い感じでうらやましい。
ABE:ありがとうございます♪

●スクラム開発で一番の困り事をお聞きしたいです。
ABE:課題を分解できない複雑な問題にどうやって取り組むべきか。いまだに答えがありません。基本的には分割して取り組んでいますが、それによって失われてしまっている価値が存在している可能性は捨てきれないので、今後なんとかしていきたいって思っています。

●今月からスクラムマスターを任されました!先輩方に、立ち上げ時これやっといた方がいいよとか、やっておけばよかった〜というのがあれば教えてください!
ABE:発表の中でも言いましたが、全員でスクラムを理解するっていうのをやるのが良いと思います。あとは、スクラムマスターであるなら、逆に何もやらないっていうのが大事な時もあるかなって思います。あとは、odd-eさんの認定スクラムマスター研修を受けるのは、おすすめしておきます笑

●テンプレをやめるとどういう粒度のPBIが起票されるようになったのか気になります。
ABE: 様々な粒度のPBIが起票されます。でも、重要なのは起票時の粒度ではなく、リファインメントで対話を進めることです。その内容は今のプロダクトゴールに関係するのか?取り組まないことで、どんな問題があるのか?そういった会話をするきっかけにすぎないと考えているので、粒度が問題になったことはないです。

●4つ質問があります
・スウォーミングで対応してますでしょうか?
・タスクはサインアップでしょうか?
・ふりかえりにPOも参加してますでしょうか?
・メンバーはそれぞれPJ掛け持ちありますでしょうか?

ABE:
・スウォーミングで対応してますでしょうか?
→現状特には指定してないです。各々がやれることをやっています。
・タスクはサインアップでしょうか?
→Yes
・ふりかえりにPOも参加してますでしょうか?
→POはスクラムチームのメンバーなので参加してもらっています
・メンバーはそれぞれPJ掛け持ちありますでしょうか?
→デザイナーやアナリストは組織的に人が少ないので、兼任や別の仕事をしています。
POやSMも2チーム見たりしています。

●作業時間が見積もりした時間よりオーバーすることが多く、残業することが多いですが、どのように工夫すればよろしいでしょうか。実績がない作業で、感覚でつけることが多いのが原因ではありますが。

ABE: 一般的に良く言われているのは、作業時間での見積もりをやめて、作業量で見積もる。見積もりは過去にやったアイテムとの相対で見積もりする。っていうのが、よく言われていますが、質問者さんの状況次第なので、なんとも言い難いところではあります。

次回のイベントレポートもお楽しみに♪

 

【イベントレポート】エンジニアの自由研究発表会vol.8

こんにちは!TECH Street編集部です!

2023年2月21日(火)に開催した、 「エンジニアの自由研究発表会vol.8」のイベントレポートをお届けします。エンジニアリングスキルを活かしてユニーク&こだわりの自由研究に取り組んだ成果を披露するTECH Streetの定番イベントです。

今回も個性豊かな自由研究発表を動画でお届けします!

 

登壇者はこの方々!※登壇順に記載

ぶとーさん
かーでぃさん
鈴木 潤さん
ななみんさん
木戸康平さん
伊藤 勇斗さん

電子工作で猫と楽しい暮らし/ぶとーさん

https://twitter.com/buto_risa

youtu.be

ギャートルズって知ってますか?/かーでぃさん

https://twitter.com/_0447222690292

youtu.be

【無駄のない無駄なシステム】AWS Lambdaを活用したサーバレス自己顕示欲満たしたシステムの構築/鈴木 潤さん

https://twitter.com/belltree_tokyo

youtu.be

鈴木さんの作品を実際に遊んでみたいという方はコチラをチェック♪

digi-card-web.belltree.tokyo

今こそ!スマートハウスに挑戦/ななみんさん

https://twitter.com/nanamin_kedama

youtu.be

極寒IoT/木戸康平さん

https://twitter.com/9wick

youtu.be

爆速!食費チェッカーアプリをAppSheetで作成!エンゲル係数下げていこ/伊藤 勇斗さん

https://twitter.com/ExistMikan

youtu.be

登壇資料まとめ

イベントの登壇資料はこちらにアップされています♪
techplay.jp

togetterまとめ

togetterでイベントの様子をまとめていただきました!

togetter.com

 

次回のイベントレポートもお楽しみに♪