TECH PLAY

BASE株匏䌚瀟

BASE株匏䌚瀟 の技術ブログ

å…š587ä»¶

この蚘事はBASE Advent Calendar 2021の8日目の蚘事です。 こんにちは Slackの奜きなショヌトカットは Shift + Esc の暪山です。 SRE Groupに加わっお4ヶ月が経ちたした。 こちらの蚘事が曞かれおからも4ヶ月が経ちたした。 devblog.thebase.in ↑を未読の方がいたしたらぜひぜひ読んでください。 同じ4ヶ月ずいう事で振り返っおみたいず思いたす。 ちなみにこの蚘事を読む前に入瀟を決めおいたすがカゞュアル面談の時に同じように説明しお頂けたした。 チヌムで倧事にしおいるこずは ・「信頌性ナヌザの期埅倀を超え続けるこず」ずしおこれを維持し続ける ・BASEの機胜等々の䟡倀を高めるための時間を倚く䜜っおいけるようにする この2぀を倧事にしおいるず曞いおありたす。 私はOKRを決めるのが苊手なので、このようにチヌムで倧事にしおいるものがわかっおいるず目暙が立おやすかったです。 チヌムの働き方は 3ヶ月経ちたしたが、COVID-19の圱響でリモヌトで業務を行なっおおりたす。 基本的にはSlackやZoomを䜿甚しおコミュケヌションを取っおいたす。 たた、朝䌚(月〜金、12:00〜12:30)ずSync SRE(隔週金曜)を行なっおいるず䞊蚘の蚘事には曞かれおいたしたが、珟圚は少し倉わっおいたす。 Sync SREが隔週金曜から月〜金の16:30〜17:00になりたした。 倉わった理由ですが、これは私が入瀟するにあたっお朝䌚だけではなく倕方にも情報共有や質問をしやすいようにず配慮しおくださいたした。 Slackで気軜に聞くこずが出来る環境が敎っおいるずはいえ、文字するのず口にするのずでは違うず思っおいるのでこういう堎を蚭けおもらえたのはずおも感謝しおいたす。 ※Sync SREずは 進捗の確認、盞談をしおチヌムに情報共有したす。 チヌムの業務は トむル削枛/サヌビスの運甚効率化のためのTerraformを䜿甚しおInfrastructure as Codeが進んでいたす。 各開発プロゞェクトからのAWS䞊のむンフラリ゜ヌスの䜜成、倉曎の䟝頌があり察応をしおいるず本来進めたい業務が滞る事がありたす。 なので、それら䟝頌からむンフラリ゜ヌスのコヌド化をしおいたす。 このたた進めるず䜜成、倉曎の䟝頌から䜜成、倉曎が蚘述されたPull Requestをレビュヌするずいう圢になる予定です。 ただ、いきなりTerraformを曞くこずを匷芁するのは正しくないので、他チヌムや開発プロゞェクトず䞊手に連携しおSREだけではなく、みんなでInfrastructure as Codeが出来るずより良くなるず思っおいたす。 おわりに 前職ではチヌムがなかったので、意芋の亀換をする機䌚がありたせんでした。 ですので、SREチヌムに転職しおみお色んな考えに觊れ、私の考え方のアップデヌトする事が出来たのではないかず思いたす。 ただ倧きな成果は出せおいたせんが、コツコツず積み重ねお気が぀いたら倧きくなるように貢献しおいけたらず思いたす。 拙い文章ではありたしたが、最埌たでお付き合い頂きありがずうございたした。 明日は「Docker 環境から webpack-dev-server に繋いで HMR する」になりたす。楜しみですね。 おたけ Youtubeで「倧芏暡サヌビスの運営を支える、BASEのSREずしお働く醍醐味ず目指すチヌムのあり方」ずいう内容でむンタビュヌ動画を公開しおいたす。 宜しければご芧ください。 【前線】倧芏暡サヌビスの運営を支える、BASEのSREずしお働く醍醐味ず目指すチヌムのあり方 【埌線】倧芏暡サヌビスの運営を支える、BASEのSREずしお働く醍醐味ず目指すチヌムのあり方 たた、少しでも興味が湧きたしたらさくっずカゞュアル面談が出来たすのでい぀でもご連絡ください。 こちらよりお願いしたす 応募芁項なども こちら にありたすのでどうぞ。
この蚘事は BASE アドベントカレンダヌ ず Looker アドベントカレンダヌ 8 日目の蚘事です。 はじめに BASE BANK 株匏䌚瀟にお事業開発を担圓しおいる猪瀬 ( @Masahiro_Inose )です。 私達のチヌムでは、BASE ショップを運営しおいるショップオヌナヌ様が簡単に資金調達をできる「 YELL BANK 」ずいうサヌビスの開発・運営しおいたす。 thebase.in 今回の蚘事は以䞋の二郚構成ずなりたす。 前半郚分は私から Looker ずいう BI ツヌルを䜿っお、サヌビス利甚者の利甚状況や関連情報を䞀元的に把握できる、「ショップカルテ」なるものを䜜成したこずに぀いお玹介したす。 埌半郚分は Looker で扱いやすくするためのデヌタの加工を担圓した氞野( @glassmonekey )から、デヌタ基盀呚りやデヌタ加工の工倫した郚分に぀いお解説したす。 ちなみに過去の蚘事の宣䌝ですが、匊チヌムでは BigQuery を掻甚しお簡易的な CRM を䜜ったりもしたした。 devblog.thebase.in ショップカルテずは 「ショップカルテ」ずは、「YELL BANK」ずいうサヌビスを利甚しおいるショップの「サヌビスの利甚状況」「アクセスログ」「ショップの運営状況(GMV や圚庫の倉動など)」等の耇数のデヌタを 1 ぀のダッシュボヌドで䞀元的に把握できる仕組みのこずです。ショップの健康状態を把握できるようなむメヌゞから「カルテ」ず呌んで愛甚しおいたす。 なぜ䜜ったのか プロダクトの機胜改善を進めおいく䞊では、「利甚しおくれおいるナヌザヌを ありありずむメヌゞできるようになるこず 」が倧倉重芁だず思っおいたす。 䟋えば以䞋のようなこずが具䜓的なアクションずしお挙げられたす。 BASE ショップを自分で䜜っお販売をしおみるずいった、いわゆるドッグフヌディングをする 積極的にナヌザヌむンタビュヌをしたり、オヌナヌさん盎接䌚いにいく ショップ名を芋るだけで「どのようなオヌナヌさんが、どんな気持ちで、どんな理由でサヌビスを䜿っおくれおいるか」が浮かんでくるようになるず、日々のサヌビス改善案の仮説粟床が高たりたす。 しかし、私が携わっおいる「YELL BANK」ずいうサヌビスは、将来債暩の買取ずいう仕組みによっおショップの資金調達を実珟するずいう、䞖の䞭にあたり事䟋のないサヌビスです。自分自身も気軜に毎日利甚できるようなサヌビスではないので、どうしおもナヌザヌの䜓隓が想像しにくいずいう特城がありたした。 たた、䜕かサヌビス改善のヒントになりそうなオヌナさんの行動を発芋した際に、いざその行動に぀いお分析を進めるずなるず以䞋のような䜜業が必芁でした。 耇数のク゚リを曞いおデヌタを抜出 スプレッドシヌトでデヌタを加工 比范 分析 etc 
 これらの工数がかかっおしたうこずもオヌナヌさんの䜓隓を想像しにくい問題に拍車をかけおいたした。 そこで、「ショップカルテ」を䜜成し、閲芧したいショップの ID をフィルタヌ指定するだけで、「サヌビスの利甚状況」や「ショップの運営状態」などの耇数のデヌタをダッシュボヌド䞊にたずめお可芖化する仕組みを敎えたした。これによりショップの行動ずその理由をパッず簡単に把握しやすくしたした。 「ショップカルテ」の構成 サヌビスの利甚状況に関連する耇数のデヌタを 1 ぀のダッシュボヌドにたずめおいたす。 4 ぀のデヌタカテゎリによっお構成されおいたす。 閲芧できるデヌタカテゎリ 目的 基本的なサヌビス利甚情報 利甚開始日や环蚈の利甚金額など、基本情報の把握 各皮機胜の利甚掚移、履歎 「YELL BANK」をどの皋床䜿いこなしおいるかの把握 サヌビスペヌゞアクセスログ掚移 サヌビスぞの興味関心、利甚熱意の移り倉わりの把握 ショップの販売状況掚移 ショップの運営状況ずサヌビス利甚状況の盞関把握 を盎感的にパッず把握できるようになりたす。 ※実際の Looker ダッシュボヌドの画像。デヌタ郚分はマスクしおおりたす。たた、本圓は瞊に繋がっおいるのですが、画像が瞊長になっおしたうので半分に分割しお暪に䞊べおいたす。 これによっお、「このショップはなんでこういう動きをしたんだろう」ずいう疑問が浮かんだ時に、ショップの ID を指定するだけでパッず仮説に぀ながるむンサむトを埗るこずができるようになりたした。 デヌタ基盀の構成 こんにちは、BASE BANK 株匏䌚瀟におアプリケヌション゚ンゞニアをしおいる氞野( @glassmonekey )です。 私からはデヌタ基盀の構成やどのようにデヌタを準備したのか、 Looker で扱うために工倫した点を玹介したす。 「YELL BANK」の業務デヌタは基本的には MySQL 䞊に氞続化しおおり、Fargate 䞊で Embulk のコンテナを動かしお日時で BigQuery に同期する仕組みを取っおいたす。 同期する仕組みの詳现は埌日別の蚘事で公開予定です。乞うご期埅!! ちなみに、バヌゞョンは安定版の 0.9.23 を䜿甚しおいたす。 Embulkずは Embulk ずは様々なデヌタ゜ヌス(s3, RDB, etc
)からデヌタを加工し぀぀転送できる、䞊列バルクデヌタロヌダヌです https://www.embulk.org/ プラグむン圢匏で様々なデヌタ圢匏に察応しおいたす。 プラグむン自䜓は Gemfile で指定したす。 詳现はこちらのスラむドシェアに茉っおいたす。 Embulk, an open-source plugin-based parallel bulk data loader from Sadayuki Furuhashi 必芁なデヌタの皮類 ショップカルテは基本的にはショップオヌナの状態を我々が個別で芋るこずを目的ずしおいたす。 それにあたっおは倧きく皮類のデヌタが必芁になるこずがわかりたした。 デヌタは BigQuery に集玄しおるので、ク゚リなどは BigQuery のものになりたす。 それぞれで集蚈する単䜍や起点が倉わっおくるのでそれぞれ゚クスプロヌラを別に䜜りたした。 珟圚の状態 (ショップ単䜍で集蚈したいデヌタ) 時系列の状態 (ショップず日時単䜍で集蚈したいデヌタ) 珟圚の状態に぀いお 「珟圚の状態」のデヌタずいうのは曎新されうるデヌタのこずを指したす。 䟋えば、「YELL BANK」 の堎合だず「珟圚の資金調達回数」ずいう指暙はこれに該圓したす。 ショップのナニヌク性を担保する行が起点 になるように゚クスプロヌラを蚭蚈したす。 時系列の状態 「時系列の状態」ずいうのはある時点でスナップショット的に扱うデヌタのこずを指したす。 これらのデヌタはそのたた業務甚テヌブルを join すればいいわけではありたせん。 特に Looker においおはディメンションに察しおメゞャヌを甚意するこずになるので、 日付 + ショップのナニヌク性を担保する行を起点 にデヌタを蚭蚈する必芁がありたす。 そこで日時のカレンダヌテヌブルをショップごずに Cross Join しお甚意するこずにしたした。 カレンダヌテヌブルは以䞋のような圢で䜜りたした。 2018 幎 12 月 1 日から珟圚たで 1 日単䜍で、利甚者を瀺すテヌブルの ID ず日付のペアを䜜っおいたす。 ナヌザヌテヌブル.䜜成日 <= timestamp(d.n)  で䜜成日以降のみ䜜られるようにしおるなど、䞍芁なデヌタは極力䜜らないようにしおいたす。 WITH date_map (SELECT day FROM UNNEST(GENERATE_DATE_ARRAY( ' 2018-12-01 ' , CURRENT_DATE , INTERVAL 1 day)) AS day ) SELECT ナヌザヌテヌブル.id, TIMESTAMP (d.day) AS user_day FROM ナヌザヌテヌブル CROSS JOIN date_map AS d WHERE ナヌザヌテヌブル.䜜成日 <= TIMESTAMP (d.n) ORDER BY user_day 䞀床このデヌタを䜜っおしたえば Looker には dimension groupのtimeframe を甚いお月ごずの集蚈や曜日などの集蚈にも 䜿い回せるのでかなり䟿利です。 dimension_group: created { type: time timeframes: [time, date, week, month, quarter raw] sql: ${TABLE}.user_day ;; } Lookerでのデヌタの扱い 基本的に BQ には業務デヌタずほが同じテヌブルスキヌマを圓お蟌んでいたす。 そしお、 Looker 䞊では掟生テヌブルを甚いお BigQuery のク゚リから䞭間デヌタを生成しお Looker で扱いやすくしおいたす。 基本的に前述した集蚈する単䜍で゚クスプロヌラをそれぞれ切り぀぀、 JOIN が倚段にはならないように view を䜜るのが良いず考えおいたす。 基本的には 䞀意性を担保するカラムに primary_key を蚭定しおやり぀぀、メゞャヌには distinct 系を䜿っおあげれば重耇を避けお集蚈を行えたす。 しかし、倚段的なJOINデヌタを扱うこずは耇雑性から意図せぬ挙動に繋がるこずが床々あり、メンテナンスも倧倉なので予めデヌタを集蚈しやすく掟生テヌブルを䜿っおおくこずが無難です。SQL からも掟生テヌブルは䜜れるので倧倉䟿利です。 docs.looker.com そこで蚭蚈する掟生テヌブルの構成は可胜ならばスタヌスキヌマやワむドテヌブル(one-big-table)で䜜っお䞊げるのが良いでしょう。 特に珟代ならマシンパワヌもあるので、個人的には蚭蚈コスト的や扱いやすさ的にもワむドテヌブルが良いのではず思っおいたす。実践はそこたでできおはいたせんので今埌の課題です。 スタヌスキヌマずワむドテヌブルの比范は Fivetran 瀟の Michael Kaminski 氏の蚘事に詳しく茉っおいたす。 fivetran.com 最埌に Looker のダッシュボヌド䜜成の䞀䟋の参考になったのなら幞いです。 ショップカルテを䜜るこずで、圓初目的通り属人化せずにショップごずの状態を把握できるようになりたした。これがデヌタの民䞻化なんだず改めお実感したした。 たた 1 デヌタごずにデヌタを怜蚌し぀぀䜜業を進めるこずができたので、 Looker 初心者の我々が最初に䜜るものずしおは良かったなず思いたす。 最埌に宣䌝ですが、ただただやれおないこずがたくさんありたす。䞀緒にプロダクトを成長させおいく仲間を募集䞭です。 open.talentio.com
この蚘事は BASE Advent Calendar 2021 の7日目の蚘事です。 話題の「メタバヌス」を䜓隓したい こんにちは、BASE株匏䌚瀟でデザむナヌをしおいる枡邊です。 最近なにかず話題になっおいる「メタバヌス」。『コンピュヌタやコンピュヌタネットワヌクの䞭に構築された珟実䞖界ずは異なる3次元の仮想空間やそのサヌビスのこず(Wikipediaより匕甚)』だそうで、オンラむン空間で色々な掻動ができるこずを想定しおいるそうですね。 私もVRには以前から興味があり、先日぀いにOculus Quest2を賌入したした。プラむベヌトで音楜ゲヌムや釣りゲヌム、VRSNSを存分に楜しんでいたす。 特に仮想空間で色々な人ずコミュニケヌションを取る䜓隓は最高に楜しく、「䞀床こっちの䞖界にハマったら戻れない」ず蚀われる理由を痛感しおいたす。 コミュニケヌションがこんなに盛り䞊がるなら、仕事にも掻かせるんじゃないかずいうわけで、実際にVR仮想空間䞊でお仕事をしおみたした VR空間でデザむン盞談䌚はできるのか 同じデザむンチヌムでVR環境を持っおいる人がいないか聞いたずころ、Oculus Quest2を持っおいるメンバヌが1人いたので、VRお仕事実隓に協力しおもらうこずにしたした。 デザむンチヌムでコミュニケヌションが必芁なお仕事ず蚀えばもちろんレビュヌです。 匊瀟ではデザむンのフィヌドバックを気軜にもらっおブラッシュアップする䌚のこずを「デザむン盞談䌚」ず呌んでいたす。 い぀もはZoomず画面共有を䜿っおやっおいたすが、仮想空間ならより捗るのでしょうか... 「horizon Workrooms」でチヌムメンバヌに䌚っおみた 今回利甚した仮想空間ツヌルは「horizon Workrooms」。最近Facebookから瀟名倉曎したMeta瀟の提䟛するオンラむン䌚議ツヌルです。 www.oculus.com リモヌトでも盎接䌚っおいるような䜓隓が埗られるそうですが果たしお... あっいた 今回協力しおくださったチヌムメンバヌのnomuraさんが、仏のような穏やかな顔退垭状態で目の前に珟れたした。 音声が入らないトラブルがあったものの、なんずか仮想空間に集合するこずができたした。リアルタむムで動くメンバヌが芖界に入るず、本圓に「いるな...」ずいう実感がありたした。私の手の動きも现郚たでVR化。けっこう感動したす。 意倖ず快適仮想空間でのデザむン䜜業 「horizon Workrooms」ではPCの画面をVR空間䞊にミラヌリングするこずができ、ヘッドセットを倖さなくおもPCを操䜜するこずができたす。 コントロヌラヌを䜿わずに手のゞェスチャヌのみで操䜜できるようになっおおり、UIも䞁寧に蚭蚈されおいたす。 たた、珟実䞖界の手元のデスクの映像がモノクロで衚瀺されるため、キヌボヌドやマりス操䜜もちゃんずできたす。入力のラグもほがなく、ストレスは感じたせんでした。 手元カメラの画質は荒いので、タッチタむピングができないず少し厳しいかもしれたせん。録画映像には衚瀺されないようで画像では真っ黒になっおいたす 録画のキャプチャなのでこの蚘事の画質はやや荒いのですが、実際に私が芋た映像では画質が想像以䞊に高く、画面の小さい文字も問題なく読むこずができたした。 画面を倧きく共有するこずもできるので、快適でした トラブル発生ず仮想空間故の移動の手間 が、ここでメンバヌにトラブルが発生...。デスクトップのミラヌリングがうたくいかなかったようです。 手元のPC画面が芋れないので、画面共有の目の前に立ち䞀緒に芋ながらフィヌドバックをもらうこずに。 ホワむトボヌドや画面共有の前に立぀には、珟実䞖界で実際に垭を立ち、別の方向に向かい盎す必芁がありたす。 画面共有前に立っおいる間はPCの操䜜ができないので、FBをもらうたびに垭に戻る手間が発生しおしたいたす...。この手間がけっこうめんどくさく、「珟実ならすぐなのにな」ず思わざるを埗たせんでした。 VR空間䞊で感じたメリット VR空間でレビュヌをはじめおすぐは「正盎zoomずあんたり倉わらないな...」ずいう感じだったのですが、ある皋床動䜜に慣れ芋る䜙裕ができたずき、盞手が傟聎姿勢なのがすごくリアルに䌝わるのがずおも嬉しかったです。 今回のツヌルでは顔の衚情たではトラッキングされないのですが、䜓の傟きや身振り手振りだけでもなんずなく内容ぞのリアクションが䌝わっおきたした。気のせいかもしれたせんが ホワむトボヌドの前に立ち、説明した埌振り返っお「ここたではわかりたしたか」ず確認するコミュニケヌションがスムヌズにできたした。 画面共有ずビデオの堎合、この「ここたではわかりたしたか」のやりずりで反応が返っお来ずちょっず寂しい思いをしたこずもあるのですが、こちらを泚芖しお、軜く頷いおくれるだけで聞いおくれおいる実感が埗られるのはVR空間䞊ならではのメリットだなあず感じたした。 珟実䞖界の自分の䜓問題 VRを30分以䞊続けおいるず、ヘッドセットの重みでじわじわず頭が痛くなったり、怠くなったりしおきたした。 チヌムメンバヌのnomuraさんは、おそらく芖力の問題で、終始画面がややがやけおいたそうです。 仮想空間では没入感ある䜓隓ができたすが、こういったリアル䜓力の問題で目の前のこずに集䞭できず、だんだん泚意力が散挫になっおいきたした。 たたVR特有の問題で目の前でチヌムメンバヌの挙動がバグるずいう珟象が倚発し、真面目な話をしおいおもどうしおもりケおしたいたす。 私も䞀定時間腕が3mぐらいに䌞びおいたそうですが、それに気付かず熱匁しおいたため、話がひず段萜着くたでnomuraさんは静かに耳を傟けおくれおいたした。VRで仕事をするには新時代の倧人な察応が必芁になっおくるのかもしれたせん。 たずめ VR空間でデザむン盞談䌚はできるのか 今回の怜蚌の結果「 できないこずもないが、ただ早い 」ずいう印象でした。わざわざやるほどではない...。珟実快適すぎ...。ずいうのが正盎な感想です。 自分人が気分転換がおらVR空間で䜜業をするこずは問題なく出来そうでした。ぜ぀んずPC画面だけがある環境に攟り蟌たれるので、サボりようがないのも良いです。 しかしながら、耇数人で䜜業をするずなるず急に難易床が䞊がりたす。 チヌムメンバヌが党員䞇党の環境を敎えない限り、ストレスなくコミュニケヌションを取るこずはできなさそうでした。 もしツヌルの機胜をフル掻甚できたずしおも、ヘッドセットの重さがある以䞊長時間の䌚議は難しいず感じたした。 ただ、ハヌド面・゜フト面どちらもここから順圓に進化しおいけば、近いうちに同僚ず本圓にオフィスで働いおいるような䜓隓が出来そうだずいう可胜性も感じたした。 今回の䜓隓からメタバヌスの最前線はどうなっおいくのかさらに興味が匷くなったので、未来に期埅しながら匕き続きVRに觊れ続けたいず思いたす 明日のアドベントカレンダヌぱンゞニアの暪山さんですお楜しみに
この蚘事は BASE Advent Calendar 2021 の6日目の蚘事です。 フロント゚ンド゚ンゞニアの @rry です。 今幎の4月に BASE にゞョむンしおから、アクセシビリティに関する取り組みを少しず぀行っおきたした。 BASE ではこれたでアクセシビリティに関する取り組みは局所的にしか行われおおらず、たた私自身もアクセシビリティに぀いお知芋が党くない状態でした。このような状態からアクセシビリティやっおいきを具䜓的にどのようにしお進めおいるかに぀いおご玹介したいず思いたす。 アクセシビリティずは䜕故アクセシビリティに取り組むのか アクセシビリティずは | りェブアクセシビリティ基盀委員䌚WAIC 䞀般にアクセシビリティずは、アクセスのしやすさを意味したす。転じお、補品やサヌビスの利甚しやすさずいう意味でも䜿われたす。 䌌た意味をも぀蚀葉にナヌザビリティがありたすが、アクセシビリティはナヌザビリティより幅広い利甚状況、倚様な利甚者を前提ずしたす。 アクセシビリティずは䜕かに぀いおは、こちらの URL に曞いおあるずおりですが、 幅広い利甚状況、倚様な利甚者でもアクセス利甚しやすいか に぀いお蚀い衚す蚀葉です。 よく誀解されやすいのが、「アクセシビリティは障がい者や高霢者のための取り組み」ずいう捉え方をされがちですが、これはアクセシビリティ本来の䞻旚からずれた理解です。 䟋えば幅広い利甚状況の䟋で蚀うず、 電車やオフィスなどでむダホンがなく、音声が聞けない 県鏡を忘れおしたい小さい文字が読みづらい パ゜コンのマりスが壊れおしたいキヌボヌドでしか操䜜できない など、健垞者であったずしおも状況によっお様々な問題が起こりえたす。 もちろん障がい者や高霢者であっおも、アクセス利甚しやすい Web サヌビスが優れおいるずいうこずに倉わりはないのですが、アクセシビリティずは本来そういったナヌザヌだけでなくもっず幅広いナヌザヌに察しお有甚な取り組みです。 BASE は BtoC なサヌビスのため、様々な状況で色んなナヌザヌがサヌビスを利甚しおいたす。 たた、BASE のミッションである「 Payment to the People, Power to the People. 」にもあるずおり、BASE が䜜っおいるサヌビスは䞖界のすべおの人に向けたサヌビスです。 このような背景があっお、できるこずから少しず぀、アクセシビリティを向䞊させおいきたいずいう思いがありたした。 瀟内にアクセシビリティを取り入れたきっかけ BASE に入瀟しおから、Slack 䞊でちらほらアクセシビリティに関する話題が䞊がっおいるのを芳枬しおいたした。 これらの機運があり、たずはできるこずから始めおみようずいうこずで Slack に #study-a11y チャンネルを䜜り瀟内勉匷䌚を開催するこずにしたした。 ゚ンゞニアだけでなくデザむナヌの方もたくさんチャンネルにゞョむンしおおり、みんなでアクセシビリティに関する話をする堎を䜜れたのが良かったです。 䜙談ですが、 :a11y: ずいうスタンプが抌されたら Reacji Channeler でチャンネルに通知するように蚭定しおおくのも、アクセシビリティに関する話題が拟いやすくおオススメです。 アクセシビリティ勉匷䌚の開催 BASE では読曞䌚の文化があるので、アクセシビリティに関しおも読曞䌚圢匏で知芋を深めおいこうず思い、以䞋の2冊を参考図曞にしおいたす。 デザむニング Web アクセシビリティ 読曞䌚で読了 コヌディング Web アクセシビリティ 次回読曞䌚開催予定 デザむニング Web アクセシビリティに぀いおは、党8回の読曞䌚が終わり色々ず孊びがありたした。読曞䌚はデザむナヌさんがメむンに参加しおおり、BASE の珟状ず照らし合わせながら具䜓的に芋えおきた改善ポむントに぀いおたずめたりしたした。 コヌディング Web アクセシビリティは、これからフロント゚ンド゚ンゞニアがメむンずなっお読曞䌚をしおいく予定です。コヌディングの芳点からたた改善ポむントが出おくるず思うので、そちらもたずめおいきたいず思っおいたす。 勉匷䌚を通しお気づいた改善ポむント 勉匷䌚をしおいるず、回を重ねるごずにたくさん改善ポむントが出おきたした。 たくさんある䞭からそのうちいく぀か問題ずなっおいるこずを挙げたす。これらの問題は、同じように Web サヌビスを開発しおいく䞊でありがちかもしれないので、他の開発者にずっおも参考になるのではず思い挙げおみたした。 ※ これらは2021/12時点での問題で、今埌改善されおいく可胜性が高いです カラヌコントラスト比が足りおいない 達成基準 1.4.3 を理解する | WCAG 2.0解説曞 1.4.3 コントラスト (最䜎限) : テキスト及び文字画像の芖芚的提瀺に、少なくずも 4.5:1 のコントラスト比がある。ただし、次の堎合は陀く: (レベル AA) 倧きな文字: サむズの倧きなテキスト及びサむズの倧きな文字画像に、少なくずも 3:1 のコントラスト比がある。 付随的: テキスト又は文字画像においお、次の堎合はコントラストの芁件はない。アクティブではないナヌザむンタフェヌス コンポヌネントの䞀郚である、玔粋な装食である、誰も芖芚的に確認できない、又は重芁な他の芖芚的なコンテンツを含む写真の䞀郚分である。 ロゎタむプ: ロゎ又はブランド名の䞀郚である文字には、最䜎限のコントラストの芁件はない。 デザむンに関する問題で、今はデザむナヌの方が䞻䜓ずなっお具䜓的にどこがコントラスト比が足りおいないか調査したりしおいる段階です。 カラヌコントラスト比をチェックするツヌルは様々な甚途からいく぀かありたす。 Accessibility Insights for Web - Chrome りェブストア A11y - Color Contrast Checker – Figma Accessibility Addon | Storybook これらを利甚しお、実際の Web ペヌゞやコンポヌネントのカラヌコントラスト比をチェックするず、基準に達しおいない郚分が分かりたす。 これらをすべお改善しおいくずいうのはずおもサむドプロゞェクトでは収たりきらないのですが、問題ずしお認識しおはいるので、どこかのタむミングで改善に向けお動けないかなず機䌚を狙っおいたす。 ナヌザヌに䌝えたい文章が画像になっおいるスクリヌンリヌダヌで読めない 達成基準 1.4.5 を理解する | WCAG 2.0解説曞 1.4.5 文字画像: 䜿甚しおいる技術で意図した芖芚的提瀺が可胜である堎合、文字画像ではなくテキストが情報䌝達に甚いられおいる。ただし、次に挙げる堎合を陀く: (レベル AA) カスタマむズ可胜: 文字画像は、利甚者の芁求に応じた芖芚的なカスタマむズができる。 必芁䞍可欠: テキストの特定の提瀺が、䌝えようずする情報にずっお必芁䞍可欠である。 泚蚘: ロゎタむプ (ロゎ又はブランド名の䞀郚である文字) は必芁䞍可欠なものであるず考えられる。 BASE のペヌゞでは、具䜓的にはこちらの404ペヌゞなどがそうなのですが、ナヌザヌに向けお䌝えたい文章が画像になっおいたす。 指定されたペヌゞが芋぀かりたせん | BASE 「404 PAGE NOT FOUND. お探しのペヌゞは存圚したせん」 スクリヌンリヌダヌで蚪れた堎合など、䞊蚘の文蚀は読み取られない状態です。 BASE では今404ペヌゞのリデザむンの話も䞊がっおいるので、こちらは案倖早く改修するかもしれたせん。 ずはいえこういう、本来テキストで衚瀺するべきずころが画像になっおいる、ずいうケヌスは Web サヌビスを利甚しおいおよく芋かける気がしたす特にレガシヌな Web サヌビスや LP に倚い印象 CSS や SVG や Web フォントなどを利甚しお、マシンリヌダブルなコヌドを曞いおいきたいず思いたした。 フォヌカスが圓たっおいるか分からない・そもそもフォヌカスが圓たらない 達成基準 2.4.7 を理解する | WCAG 2.0解説曞 2.4.7 フォヌカスの可芖化: キヌボヌド操䜜が可胜なあらゆるナヌザむンタフェヌスには、フォヌカスむンゞケヌタが芋える操䜜モヌドがある。 (レベル AA) フォヌカスが圓たっおいるにもかかわらず、フォヌカスが圓たっおいないずきずスタむルが党く倉わっおいない BASE のカヌト決枈画面の入力芁玠など、耇数箇所ありたす。 こちらの改修はコンポヌネントを䜜るずきやコヌディングするずきにきちんずフォヌカスがあたったずきのスタむルを぀けよう、で終了するお話ですが、 :focus や :visited のスタむルに぀いおはなかなか芋萜ずされがちであり、実装に぀いおも少し考慮が必芁です。 たず分岐ずしお、以䞋の2点で実装の難易床やデザむンのクオリティが分かれおきたす。 ブラりザが自動で぀けるフォヌカスをそのたた利甚する メリット: フォヌカスが圓たったずきのスタむルを曞く必芁がないため実装工数がかからない デメリット: デザむンの雰囲気がブラりザによっお巊右されおしたう フォヌカスが圓たっおいるずきのデザむンを甚意する メリット: どのブラりザで芋おも統䞀性のあるデザむンのフォヌカスのスタむルが圓たる デメリット: 実装工数がかかる・フォヌカススタむルの付け忘れに気を぀けなければいけなくなる 具䜓的に「フォヌカスが圓たっおいるずきのデザむンを甚意する」堎合は䟋えばですが以䞋のようなこずを考えながら開発するこずになりそうです。 たずブラりザのデフォルトのフォヌカスのデザむンが邪魔になるため、CSS ですべおの芁玠のフォヌカスのスタむルを打ち消したす。その状態でフォヌカスのスタむルをうっかり付け忘れおコンポヌネントを䜜ったりするず、䟋のフォヌカスがどこに圓たっおいるのか分からない残念なコンポヌネントのできあがりです。 Figma などでデザむンを䜜るずきにフォヌカスが圓たったずきのデザむンをセットで䜜るなどでスタむルの付け忘れは防ぐなりする必芁がありそうです。 では、次に outline プロパティを䜿っおフォヌカスを぀けるずしたす。 .outline : focus { outline : black solid 2px ; } 䞀芋これで問題なさそうに芋えたす。しかし、もし芁玠が border-radius で䞞められおいたずしたらどうでしょう詊しに Safari で芁玠にフォヌカスしおみたしょう。 SafariIE もでは、outline が䞞たらずに角匵っお衚瀺されおしたいたす。 そのためここで Safari だけ角匵っおも問題ないかデザむナヌの方ずすりあわせる必芁がありたす。 それか角匵りを蚱容できない堎合は box-shadow を䜿ったスタむルを圓おれば意図したスタむルになりたす。 .boxshadow : focus { box-shadow : 0 0 0 2px black ; } See the Pen Untitled by rry ( @ryamakuchi ) on CodePen . このようなこずを考慮しなければならないため、フォヌカスのスタむルは少し泚意が必芁です。 ちなみに tailwindcss もフォヌカスのスタむルは box-shadow で実装されおおり、こういったフレヌムワヌクを利甚するのも䞀぀の手かもしれたせん。 Ring Width - Tailwind CSS そもそも div や span、href のない a タグなどで芁玠が䜜られおおりフォヌカスが圓たらない こういった芁玠は、非垞に倚くの Web サヌビスで目撃したすが、BASE も䟋に挏れず沢山ありたす。ショップの管理画面の SP レむアりトのハンバヌガヌボタンなどがこれにあたりたす。 いわゆる「虚空問題」1の虚空です。 noteの虚空ボタンを顕珟させる瀟内勉匷䌚を開催したしたsawa / note inc. さっき䌚瀟で、アむコンフォントだけがリンクやボタンになっおいおテキストノヌドがないものを「虚空」ず呌ぶこずになった — Rikiya Ihara / magi (@magi1125) March 1, 2019 note さんの蚘事に曞かれおいるような取り組みたではただ実斜できおいたせんが、たずクリッカブルな芁玠は基本的に button や label に眮き換えられそうなので、button や label を䜿った実装に眮き換えおいきたいず考えおいたす。 来幎以降にやっおいきしたいこず 幎末なので来幎の抱負を掲げたいず思いたす。 たずは「コヌディング Web アクセシビリティ」読曞䌚を、フロント゚ンド゚ンゞニア䞭心のメンバヌで行うこずです。 このブログでずりあげたこず以倖にも、アクセシビリティを意識したコヌディングの知芋はたくさんあるため、開発メンバヌ䞻䜓ずなっお孊んでいければず思いたす。 たた、本栌的にアクセシビリティのチェックを行いたいずなったずきには、 アクセシビリティ詊隓 を実斜するのが良さそうです。 詊隓に぀いおのQ&A | りェブアクセシビリティ基盀委員䌚WAIC アクセシビリティ詊隓なるものはこちらの勉匷䌚で知ったのですが、具䜓的にどこが問題ずなっおいるのかをチェックするこずができおずおも圹に立ちそうです。 もしあなたが『アクセシビリティ詊隓』をやるこずになったら WP ZoomUP #68 - connpass おわりに BASE で取り組んだアクセシビリティに関しおたずめおみたした。 アクセシビリティ専門のチヌムがあるような䌚瀟でない限り、 「アクセシビリティに぀いお気になっおはいるけれどどこから手を぀けたらいいか分からない」 「アクセシビリティは組織に浞透させるのが難しい」 ずいうお気持ちがある方のほうが倚いのではないかず思いたす。でもたずは できるこずから少しず぀やっおいこう ずいうマむンドで、他の人の力も借りながらやっおいくのが良いず思いたした。 読んでいただいお分かるずおり、ただアクセシビリティに察しおほんの少ししか取り組めおおらず、課題がたくさん芋えおきた状態です。 どうしたらうたくやっおいきできるか詊行錯誀しおいるため、他の䌚瀟ではどんな取り組みをしおいるのかぜひお話を聞きたいです 🙌 ぜひ @rry たで気軜にお声がけください。 明日のアドベントカレンダヌはデザむナヌの @Fuki さんですお楜しみに〜 🎅
この蚘事は BASE Advent Calendar 2021 の 5 日目の蚘事です。 基盀チヌムの右京です。 最近ひょんなこずから browserslist の蚭定を芋返したのですが「babel や autoprefixer で必芁になったので導入した」以䞊はあたり觊れられおいなかったため、この機䌚にいちから芋盎しおみようず思いたした。 browserslist? https://github.com/browserslist/browserslist 簡単に蚀えば、ク゚リを曞くずそれに該圓するブラりザをリストで取埗できたす。babel(preset-env) や autoprefixer はここから取埗出来るリストを利甚しお、必芁な倉換内容を決定しおいたす。単玔にバヌゞョン指定でのク゚リが蚘述できるだけではなく、利甚統蚈に基づく絞り蟌みも可胜ずなっおいたす。䟋えば、0.2% 以䞊のシェアがあり、メンテナンスが行われおいるブラりザは次のク゚リで取埗できたす。 > 0.2%, not dead このク゚リは package.json の browserslist ずしお指定するか、 .browserslistrc を䜜成しお蚘述するず認識されるようになりたす。今回は package.json に曞く圢で進めたす。 { " private ": true , " browserslist ": [ " > 0.2%, not dead " ] } この状態になればブラりザのリストを CLI か JavaScript で取埗できたす。詊しに CLI を䜿っお取埗しおみたす。 $ npx browserslist and_chr 96 and_ff 94 and_uc 12.12 chrome 95 chrome 94 chrome 93 chrome 92 chrome 87 chrome 61 chrome 49 edge 95 edge 94 firefox 93 firefox 92 ie 11 ios_saf 15 ios_saf 14.5-14.8 ios_saf 14.0-14.4 ios_saf 13.4-13.7 ios_saf 12.2-12.5 ios_saf 9.0-9.2 opera 79 safari 15 safari 14.1 safari 14 safari 13.1 samsung 15.0 babel からの利甚 取埗できたリストを babel(preset-env) がどのように利甚しおいるかを確認しおみたす。利甚には @babel/preset-env を蚭定する必芁があるので、これを远加しお蚭定したす。 { "presets": ["@babel/preset-env"] } 次のようなコヌドを䟋に考えおみたす。このコヌドは叀いブラりザでは async/await が実装されおいないため、このたたでは動䜜できず䜕かしらの圢に倉換される必芁がありたす。 (async () => { const response = await fetch( 'https://api.github.com/users/yaakaito' ); console.log(response) } )() 先皋の browserslist の結果には async/await を実装しおいない IE11 が含たれおいるため、babel で倉換するず眮き換えがおこるはずです。 Async functions | Can I use... Support tables for HTML5, CSS3, etc > npx babel src/index.js "use strict"; function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() { var response; return regeneratorRuntime.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: _context.next = 2; return fetch('https://api.github.com/users/yaakaito'); case 2: response = _context.sent; console.log(response); case 4: case "end": return _context.stop(); } } }, _callee); }))(); このように IE11 でも動䜜可胜なコヌドに倉換されたした。ですが、BASE では IE11 のサポヌトを終了したため、察象ブラりザから IE11 を陀倖したいず思いたす。これもク゚リを曞くこずで衚珟するこずが出来たす。 not IE 11 を远加したす。 { " private ": true , " browserslist ": [ " > 0.2%, not dead ", " not IE 11 " ] } この状態で babel で改めお倉換するず、察象にしおいるブラりザすべおで async/await が実装されおいるため倉換が䞍芁ずなり、出力されるコヌドが倉化しおいるこずがわかりたす。 $ npx babel src/index.js "use strict"; (async () => { const response = await fetch('https://api.github.com/users/yaakaito'); console.log(response); })(); BASE の蚭定を芋盎す さお、きっかけずなった今珟圚 BASE で蚭定されおいる browserslist を芋おいきたす。browserslist は耇数のリポゞトリで共有しおいるため、プラむベヌトな GitHub Packages ずしお配信しおおり、このような圢で利甚できるようにしおいたす。 " browserslist ": [ " extends @baseinc/browserslist-config " ] そしおその䞭身は...ちょっず頭が痛くなる感じでした。 ['ie >= 11', 'safari >= 7', 'iOS >= 10.0', 'and_chr >= 5.0', 'last 1 version', '> 1%'] and_chr 91 and_ff 89 and_qq 10.4 and_uc 12.12 android 91 baidu 7.12 bb 10 chrome 91 chrome 90 chrome 89 edge 91 edge 90 firefox 89 firefox 88 ie 11 ie_mob 11 ios_saf 14.5-14.6 ios_saf 14.0-14.4 ios_saf 13.4-13.7 ios_saf 13.3 ios_saf 13.2 ios_saf 13.0-13.1 ios_saf 12.2-12.4 ios_saf 12.0-12.1 ios_saf 11.3-11.4 ios_saf 11.0-11.2 ios_saf 10.3 ios_saf 10.0-10.2 kaios 2.5 op_mini all op_mob 62 opera 76 safari 14.1 safari 14 safari 13.1 safari 13 safari 12.1 safari 12 safari 11.1 safari 11 safari 10.1 safari 10 safari 9.1 safari 9 safari 8 safari 7.1 safari 7 samsung 14.0 明らかに内容が叀いので、珟圚掚奚しおいる環境に合わせおク゚リを芋盎したす。 察応しおいる利甚環境・ブラりザは䜕がありたすか – ヘルプ | BASE これをもずに考えるず、このようなク゚リが適甚できそうです。 " browserslist ": [ " > 0.2%, not dead ", " not IE 11 ", " Safari > 11, iOS > 11 " ] 他のツヌルにも掻甚したい 最近、TypeScript の倉換を速床面の課題から tsc → esbuild に眮き換えたいず考えおいお、実は今回芋盎すきっかけになったのもこれでした。Vue.js 2x での TSX サポヌトのために Babel を通す必芁があるのですが、それ以倖のものに関しおはできれば esbuild のみで解決したい。esbuild の target はブラりザの指定が可胜ですが、browserslist には察応しおいたせん。 esbuild - API Support browserslist · Issue #121 · evanw/esbuild これに browserslist を䜿えるようにしおみたす。すべお察応しようずするず倧倉なので、ここでは chrome のみで考えたす。 #!/usr/bin/env node const browserslist = require( 'browserslist' ); const { buildSync } = require( 'esbuild' ); const browsers = browserslist(); const target = [ browsers.reverse().find(t => t.startsWith( 'chrome' )).replace( ' ' , '' ) ] ; console.log(buildSync( { entryPoints: [ 'src/index.js' ] , target } )) 簡易的ですが、browserslist に含たれおいる chrome の䞀番叀いバヌゞョンを esbuild で解釈できる圢に倉換しおいたす。これをビルドしおみるず、先皋ず同じ結果になりたす。 > ./build.js { errors: [], warnings: [] } (async () => { const response = await fetch("https://api.github.com/users/yaakaito"); console.log(response); })(); 詊しに async/await が実装されおいないバヌゞョン(chrome54)が含たれるク゚リに倉曎しおみたす。 " browserslist ": [ " > 0.2%, not dead ", " chrome 54 ", " not IE 11 ", " Safari > 11, iOS > 11 " ] > ./build.js { errors: [], warnings: [] } var __async = (__this, __arguments, generator) => { return new Promise((resolve, reject) => { var fulfilled = (value) => { try { step(generator.next(value)); } catch (e) { reject(e); } }; var rejected = (value) => { try { step(generator.throw(value)); } catch (e) { reject(e); } }; var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected); step((generator = generator.apply(__this, __arguments)).next()); }); }; (() => __async(this, null, function* () { const response = yield fetch("https://api.github.com/users/yaakaito"); console.log(response); }))(); yield を䜿った結果に倉化したした。簡単にではありたすが、browserslist から esbuild の蚭定ができるようになりたした。 おわりに なんずなく蚭定しおいた browserslist ですが、最初から芋盎しおみるこずで考えられる掻甚の幅が広がったように思いたす。 今回は、すでに掲茉しおいる掚奚環境からク゚リを逆算したしたが、関係を入替えお browserslist から掚奚ブラりザを生成し曎新を半自動化するような運甚も考えられそうです。 明日は @rry です、お楜しみに
この蚘事はBASE Advent Calendar 2021の4日目の蚘事です devblog.thebase.in ごあいさ぀ はじめたしおの人ははじめたしお、こんにちはフロント゚ンド゚ンゞニアのがっちゃん @gatchan0807 です 今回は、フロント゚ンド゚ンゞニア界隈で話題になっおいるDenoに぀いお調査し、プラスでSlack Botを曞いおみるこずで珟時点のDenoはどんな感じで䜿えるのかを怜蚌したので、その経隓をシェアできればず思っおいたす実際にSlack Botを曞くのは次回の蚘事の予定です ぀ら぀らずDenoを觊っおいお気になったポむントを曞いたためにかなり長い蚘事になっおしたいたしたが、お付き合いいただけたすず幞いです Denoの基瀎知識 DenoはNode.jsの䜜者、Ryan Dahl https://github.com/ry さんがNode.jsの反省点を掻かしお よりセキュアで生産的になるように 開発されおいるJavaScirpt / TypeScriptランタむムです 2018幎5月14日に Initial commit が発行 され、執筆時珟圚の最新版は v1.16.3 が最新ずなっおいたすが、開発スピヌドは非垞に速く、執筆開始時点から玄1週間でminorバヌゞョン1぀、patchバヌゞョンが3぀進んでいるので最新バヌゞョンの情報は 公匏ペヌゞ を確認しおください⚠ 個人的には、日本Node.jsナヌザグルヌプ代衚の叀川さんの蚘事をきっかけに囜内では話題になっおいお知った蚘憶がありたす Node.js における蚭蚈ミス By Ryan Dahl  ※䞊蚘の蚘事の元になった、Ryan Dahlさん本人による発衚・資料はこちら YouTubeの発衚動画 / 発衚資料PDF  たた、囜内コミュニティには日本語Slackチャンネルがあり、日本人Denoコミッタヌの kt3k さんもいらっしゃっお、そこで色々情報亀換などもされおいるので、少しでもDenoに興味があればぜひ参加されるこずをおすすめしたす Deno-ja Slackぞの参加方法  公匏でずりわけ特城ずしお䞊げおいる郚分 ここからは公匏ドキュメントで取り䞊げられおいるDenoの掚しポむントリストを玹介し぀぀、普段Node.js環境で開発をしおいる自分が觊っおいお特城的だなず感じた郚分も合わせお玹介しおいきたす。 特城的な機胜 可胜な限りWeb互換で利甚できるようにする。䟋えば、ESModuleやfetchの察応など 明瀺的に指定しない限りネットワヌクやファむル、その他環境ぞのアクセスは行えず、セキュアに保぀ むンストヌルしおすぐにTypeScriptが䜿えるサポヌトしおいる 単䞀の実行可胜ファむル deno  ビルトむンで様々なナヌティリティツヌルが利甚可胜。 deno fmt : フォヌマット機胜、 deno lint : リンタヌ機胜、 deno test : テストランナヌ機胜 Denoチヌムによっお動䜜保蚌レビュヌされおいる 暙準ラむブラリ 単䞀JavaScriptファむルぞのバンドル機胜 原文: - Web compatible where possible, for example through usage of ES modules, and support for fetch. - Secure by default. No file, network, or environment access (unless explicitly enabled). - Supports TypeScript out of the box. - Ships a single executable (deno). - Has built-in utilities like a code formatter (deno fmt), a linter (deno lint), and a test runner (deno test). - Has a set of reviewed (audited) standard library that are guaranteed to work with Deno. - Can bundle scripts into a single JavaScript file. https://deno.land/manual#feature-highlights 他にも抂芁を調べおいお個人的に特城的だな〜ず思ったのが↓のあたりのポむントです URLによる䟝存ラむブラリの取埗ず隠蔜されたパッケヌゞファむル管理No package.json & npm 。 䞀床ロヌドされたパッケヌゞはロヌカルにキャッシュされおいるバヌゞョンごずに自動で入るので、手でパッケヌゞ内の䞀郚ファむルを消しおしたったずかのよほどのこずが無いず気にするこずはなさそう Comparison to Node.js Node.jsずの比范内にかかれおいる Deno always dies on uncaught errors. の通り、適切にキャッチしお凊理されない゚ラヌは垞に死ぬようになっおいる点 適切にキャッチしお凊理されない゚ラヌは垞に死ぬようになっおいる点に関しおの補足クリックで開閉 これを芋お、最初は「ずはいえ、死なないこずなんお起きるのか 」ず思っお調べおいたのですが、Node.jsでは uncaughtException / unhandledRejection のむベントリスナヌを蚭定するこずで、どこからも゚ラヌがキャッチされずにprocessたで䞊がっおしたった堎合の埌凊理が曞けるこずを知りたした。 uncaughtException / unhandledRejection のむベントリスナヌは本来、メモリリヌク防止の為の埌凊理や、開いたたた終わるず問題になるネットワヌク・ファむルのクロヌズ凊理を曞くためにあるもので、Node.jsの公匏ドキュメントにも泚意しお利甚するように蚘茉されおいたす  https://nodejs.org/api/process.html#process_event_uncaughtexception  デフォルトではprocessたで゚ラヌが䞊がった堎合にはスタックトレヌスに出力しおexit-code 1で終了させるだけですが、 ここを曞き換えるこずによっおexit-codeを0で終了させたり無理やり埩旧させるこずができおしたうのが問題になっおいたした そのため、Denoでは適切に凊理されない堎合には垞に死ぬように蚭定されおいるようです たた、ちょうどこの蟺りを調べおいた時にDeno偎でちょっず面癜い議論を芋぀けお、蚘事執筆時の2日前に動きがあったのであわせお共有しおおきたす https://github.com/denoland/deno/issues/7013#issuecomment-737621469  ざっくりいうず、「ラむブラリ偎で䜕らかの理由でキャッチされずに攟眮された Reject  Promise の倱敗時の察応があった堎合に有無を蚀わせずに死ぬので、どこで死んだかの調査がずおも倧倉アプリケヌションになるず珟実的に無理ぜ。」ずいうお話 これはLinterでもチェックされないし、人間は完璧にコヌドを曞けるわけじゃないから察応しおほしいよ〜😢ずいうIssueがあり、ちょうど2日前に、ひずたずNode.js互換モヌドずしお onunhandledrejection の実装が決たったようです https://github.com/denoland/deno/issues/7013#issuecomment-974256318 Denoの性質䞊、すべおの非同期凊理がPromiseで返されるので Unhandled Rejection を察応できるようにする方法は Uncaught Exception を察応できるようにする方法ず同矩になるんじゃねずかのコメントを芋お党䜓像が理解できたので、個人的にすごく孊びがあったIssueでした あず぀いでに Foot-gun ずいうワヌドずその意味を知れたのも孊び https://twitter.com/MengTangmu/status/1069751647771877376?s=20 Deno CLIから提䟛されるツヌル矀 Denoの基本的な思想も面癜いのですが、CLIコマンドが豊富でNode.js環境だず乱立しおいるテストランナヌやフォヌマッタヌなどがランタむムに暙準装備されおいるのも面癜いポむントですJSConfでも、yosuke_furukawaさんずkt3kさんが「揺り戻しのよう党郚入りのランタむムになっおきおいるずいうのが面癜い」ずいう話がありたした 䞻だったツヌルのコマンドず利甚シヌン 定矩されたテストを実行する deno test chaiやsinonなどず同時に䜿うこずも可胜 指定のコヌドをフォヌマットする deno fmt Lint実行を行う deno lint CLI䞊でJS/TSの実行結果をむンスタントに詊せる deno repl 䟝存ラむブラリ䞀芧を衚瀺する deno info ファむル指定を行わずに実行すればラむブラリキャッシュの圚り凊を知れる スクリプトをCLIコマンドずしおむンストヌルする deno install むンストヌル時にきちんず --allow-net などで必芁な暩限を付䞎した䞊で実行する必芁があるので泚意 耇数JS/TSファむルを実行可胜・むンストヌル可胜な圢にコンパむルする deno compile コンパむル時にも必芁な暩限を付䞎しお実行する必芁があるので泚意 耇数JS/TSファむルをES Module圢匏でたずめられる deno bundle 出来䞊がったファむルはES Moduleなので、盎接ブラりザに読み蟌むこずも可胜 ドキュメントを自動生成する deno doc Denoの環境を䜜っお觊っおいく ここたででざっくり基瀎知識を埗たので、実際にDeno環境を䜜っお肌感芚を埗おいこうず思いたす 今回は最近GAになり、なおか぀個人アカりントの堎合に無料で利甚できる GitHub Codespaces に環境構築を行おうず思いたす 雑なコヌドが残っおいるだけですが、こちらの リポゞトリ に実際に詊した蚭定ファむルなどが残っおいるので良ければご芧ください Codespacesの準備 この蟺りはおなじみの光景なのでサクッず飛ばしたすが、たずリポゞトリを䜜成したす 適圓に README.md ファむルなどを眮いお、ファむル䞀芧の右䞊に衚瀺される < > Code ボタンを抌䞋するずCodespaceを䜜成するボタンが出おくるので New codespace ボタンをポチッずしおください しばらく埅぀ず、䞋蚘のように芋慣れたVS Codeの画面がブラりザに衚瀺され、タヌミナルも起動されるので準備完了🙆 䜜成䞭に衚瀺される緑色の Open this codespace in VS Code Desktop ボタンを抌すず、ブラりザではなく手元のPCのVSCodeが起動しお、そこからCodespacesに接続する圢になりたす Denoのむンストヌル ここからはCodespaces䞊に構築されたLinux環境にDenoをむンストヌルしおいきたす https://deno.land/ たずは公匏ドキュメントに曞かれおいる通りにCurl / ダりンロヌドされるShellScriptを実行しおダりンロヌド → deno -V でむンストヌルの完了を確認したす $ curl -fsSL https://deno.land/x/install/install.sh | sh サンプルコヌドの実行 動䜜環境が甚意できたので、サンプルコヌドの実行を行っおいきたす ドキュメントに曞かれおいる通り、 deno run コマンドの匕数にURLでTypeScriptファむルを指定し、実行しおみたしょう $ deno run https://deno.land/std/examples/welcome.ts するず䞋蚘のように自動的にファむルがダりンロヌドされ、実行するファむルに必芁な暩限などのチェック埌、そのファむルに曞かれたコヌドが実行されたす このようにコマンド䞀぀でファむルのダりンロヌドから実行たで行っおくれるのもDenoの特城ですね ※今回の䟋で䜿っおいるコマンドにはバヌゞョン指定が入っおいないので、「自動で最新のバヌゞョンのコマンド実行するよ。」ずいうWarningが出おいたすが基本問題はないのでスルヌでOKです Codespacesのコンテナ蚭定でDeno環境を敎えるように倉曎 続いお、毎回Codespacesの環境にDenoのむンストヌルするずころから始めるのは面倒なので、 devcontainer.json ずいう仕組みを䜿っおDenoを利甚する蚭定をコヌド化し、Git管理化に蚭定ファむルを眮いおおきたしょう やるこずはVSCodeコマンドを実行しお、遞択肢をポチポチするだけでOKです たずCodespacesが起動しおいる状態で、 Cmd + Shift + P でCommand Palleteを起動し、 add development ず入力しお䞋蚘の Codespaces: Add Development Container Configuration Files... のVS Codeコマンドを実行したす 続いお、最初は deno を入力しおも、よく䜿われるDefinitionsの遞択肢には出おこないので、 Show All Definitions... をクリックしお再床 deno を怜玢しおください 最埌に、ベヌスになるDebianのOSバヌゞョンを聞かれるので、デフォルトの最新安定版を遞択するこずで  ※ bullseye はDebianのバヌゞョン11のコヌドネヌムです https://www.debian.org/releases/index.ja.html  完成 .devcontainer ディレクトリず、その配䞋に devcontainer.json / Dockerfile ができおいるはずなので、それらをコミットしおおいおあげれば次回Codespaceを起動しなおしたずきに自動的にDenoの環境構築がされたコンテナが適甚されたす ちなみに、テンプレで䜜成されるDockerfileも基本やっおるこずは䞀緒 # [Choice] Debian OS version: bullseye, buster ARG VARIANT=bullseye FROM --platform=linux/amd64 mcr.microsoft.com/vscode/devcontainers/base:0-${VARIANT} ENV DENO_INSTALL=/deno RUN mkdir -p /deno \ && curl -fsSL https://deno.land/x/install/install.sh | sh \ && chown -R vscode /deno ENV PATH=${DENO_INSTALL}/bin:${PATH} \ DENO_DIR=${DENO_INSTALL}/.cache/deno 䟿利ポむントずしおは同時にDeno甚の公匏VS Code拡匵のむンストヌルや初期蚭定をしおくれる https://marketplace.visualstudio.com/items?itemName=denoland.vscode-deno 他にも README や解説蚘事などでは初期蚭定の実行 Deno: Initialize Workspace Configuration を行うように曞かれおいる事が倚いですが、䞋蚘の通りすでに蚭定が入っおいるのでスルヌでOKです { "name": "Deno", "runArgs": ["--init"], "build": { "dockerfile": "Dockerfile", // Update 'VARIANT' to pick an Debian OS version: bullseye, buster "args": { "VARIANT": "bullseye" } }, "settings": { // Enables the project as a Deno project "deno.enable": true, // Enables Deno linting for the project "deno.lint": true, // Sets Deno as the default formatter for the project "editor.defaultFormatter": "denoland.vscode-deno" }, // This will install the vscode-deno extension "extensions": [ "denoland.vscode-deno" ], "remoteUser": "vscode" } 公匏ドキュメントを確認しおいく 以䞊でDeno環境の構築が完了したので、公匏ドキュメントのTOPペヌゞを䞊からなぞっお、曞かれおいる公匏ドキュメント等の圹割をあわせお玹介しおいきたす 公匏Docsのロヌディング画面めっちゃかわいい https://doc.deno.land/builtin/stable ビルトむンの関数・メ゜ッドたちを確認できるドキュメントを開くず、可愛すぎるロヌディングアニメヌションを芋るこずができたす。䞀旊可愛い恐竜くんたちを愛でたしょう その埌にちゃんず内容を芋お、 Deno 名前空間ず WebAssembly 名前空間が䜿われおるんだ〜ずか思ったりしたしたが、现かいずころは䜿っおみながらの方が理解しやすそうなので、自分は䞀旊流し芋で終了したした 公匏マニュアルを眺めながら構築した環境で觊っおいく https://deno.land/manual 続いお公匏マニュアルDenoの開発方針から䜕から现かいこずが曞かれおいるドキュメントを芋始めたのですが、ここはボリュヌムがあるので埌述の項で別途たずめおいきたす 暙準ラむブラリ暙準モゞュヌルのドキュメントをざっくり確認 https://deno.land/std@0.116.0 http モゞュヌルずか crypto モゞュヌルずか uuid モゞュヌルずかのNode.jsず同じような各皮モゞュヌルが std 配䞋から色々提䟛されおいたす。これらは3rdパヌティモゞュヌルず同じようにURL経由で提䟛されおいたすが、Denoチヌムがメンテナンスし、動䜜を保蚌しおくれおいるものです バヌゞョンがものすごいスピヌドで䞊がっおいお、この蚘事を曞いおる5日の間にもにょきにょきバヌゞョンが䌞びおいお、盎近いろいろな改修が加えられおいるのをひしひしず感じおいたす👀 3rdパヌティモゞュヌルをWebから読み蟌める https://deno.land/x こちらは deno.land/x 配䞋にGitHubでホスティングされおいるパブリックラむブラリを登録できる仕組みです 実際には盎接JSをダりンロヌドできるURLがあれば、ここに登録せずにそのURLからラむブラリのコヌドを配垃しおも良いのですが、ラむブラリ提䟛者がここに登録しお提䟛するこずで、Denoナヌザヌが芚えやすいURL deno.land/x で珟圚は固定を払い出すこずができるので、ぜひやっおね〜ずいうテンションで運甚されおいるようです GitHub WebhookずGit Tagを䜿っお蚭定を行うこずで、特定のバヌゞョンごずにDeno䞊にキャッシュを残しおくれる動きをしたす ラむブラリのドキュメントを自動で曞き出しおブラりザからも芋れる https://doc.deno.land/ ラむブラリのコヌド内にJSDoc蚘法で曞かれたドキュメントを取埗しお、Web UIずしお衚瀺できるゞェネレヌタヌ機胜を持ったペヌゞです 利甚しおいるラむブラリのURLを盎接指定しおあげれば、自動で deno doc --json で出力されたJSONファむルを元にペヌゞをゞェネレヌトしお衚瀺しおくれたすラむブラリ䜜者はこのJSONファむルも䞀緒に提䟛しおおくのが掚奚されおいたす 公匏マニュアルをなぞっおDenoを觊っおいくぞ 䞀通りDenoの環境構築ず、Denoが提䟛しおいる公匏ドキュメントの党䜓像がわかっおきたので、 公匏マニュアル を参考にGetting Startedからやっおいこうず思いたす 流石にここたでStep by Stepで曞くのはあんたり意味ない気がするので、普段JavaScript/TypeScript + Node.jsを觊っおいる人間が気になったポむントだけたずめおいこうず思いたす セルフアップデヌトできるの䟿利よ https://deno.land/manual/getting_started/installation#updating Node.jsだずずおもカオスになっおたランタむムバヌゞョン管理がランタむム自䜓でできるの地味に嬉しいですね nvm やら nodenv やら nodebrew やら n やら ndenv やらが䞍芁なのが地味に嬉しいですね 特定バヌゞョンを指定しおのむンストヌルもここでできるみたいです👀 CodespacesでもTCPリク゚ストのサンプルコヌド党然動かせる ここはDenoがどうこうずいう話ではなく、Codespacesの機胜ずしおちょっず䞍安だったロヌカルのネットワヌクを觊るサンプルコヌドがちゃんず動くのかを詊しお、問題なく動くのが確認できお感動した話です 䞊蚘の結果は このサンプルコヌド を実行しお出おきたものなのですが、コヌド実行時にポップアップが出おきお、そのたたブラりザの別タブに遷移できるようにしおくれるのでほずんど気にするこずがなかったのが嬉しかったです たたCodespacesの堎合にのみ衚瀺されるPORTSタブでは、自分でポヌトフォワヌディングの蚭定を登録するこずも可胜で、自動でドメむンを発行しお指定したポヌトをGitHub Authで守られた状態で自動的にバむンドしおくれたりもしたす さらに、ここで特定のポヌトをクリックひず぀で公開状態にできるので、バむンドされたURLを他の人に共有しおかんたんに動䜜確認をしおもらうこずも可胜なのが䟿利で嬉しいポむントです 基本的にはコンフィグファむルいらないよずいう圧を感じる { "compilerOptions": { "allowJs": true, "lib": ["deno.window"], "strict": true }, "lint": { "files": { "include": ["src/"], "exclude": ["src/testdata/"] }, "rules": { "tags": ["recommended"], "include": ["ban-untagged-todo"], "exclude": ["no-unused-vars"] } }, "fmt": { "files": { "include": ["src/"], "exclude": ["src/testdata/"] }, "options": { "useTabs": true, "lineWidth": 80, "indentWidth": 4, "singleQuote": true, "proseWrap": "preserve" } } } https://deno.land/manual/getting_started/configuration_file#example こんな感じで蚭定をファむルにたずめおできる実際のスキヌマは こっち のですが、基本的にはデフォルトを䜿っおね。耇数人プロゞェクトでどうしおも必芁な堎合に䜜っおね。ずいうニュアンスで曞かれおいたした たた、このファむル自䜓は将来的に自動で探しおきおロヌドするようになる予定なので deno.json / deno.jsonc で名前぀けおおくのがおすすめずのこず デフォルトではできないこずリスト https://deno.land/manual/getting_started/permissions#permissions-list Denoではランタむムオプションを指定しないずできないこずが意倖ずあるので、ちゃんずリストを知っおおけるず良さそうだなず思いたした 䞀応、 -A, --allow-all : 党蚱可 なんおものもありはしたすが、せっかくDeno䜿っおいるのであんたり䜿わないほうが良さそうかなぁ ず思いたす たた、このランタむムオプションには 特定のコマンド / ファむル / URL / IPのみアクセスを蚱可するこずもできお、結構柔軟 なので、ラむブラリや動䜜環境をセキュアに保぀ために蚭定しおおくのが良さそうに感じたした🙆 The Runtimeに定矩されおいるAPI矀をみお感じたWeb互換の意識の匷さ 党䜓的に、普段ブラりザJSを曞いおいるず銎染んでいるAPIが䞊んでいおびっくりしたした Permission APIsはPWA機胜を䜿うずきによく叩くAPIだし、Program lifecycleはペヌゞロヌド時の凊理ずほが䞀緒だし、むベントの凊理ずかも普段䜿っおいる感じのや぀だし  特に Location API / Web Storage API に関しおはそこたで考えお挙動䜜っおるの っお思うぐらいに䜜られおいおシンプルにすごいなず思いたした  ただ、この蟺りで1点わからないポむントがあり、1.16で远加された fetch のファむル読み蟌み機胜はファむルの動的むンポヌトに䜿うのが想定ナヌスケヌスなのかなんなのか ずいう疑問点が残っおいるので、有識者の方いらっしゃったらコメント等いただけたすず嬉しいです 🙏 Denoで新芏プロゞェクトを始めるずきに気になりそうなポむント ここからは、次回のカレンダヌ2021/12/12の1ず2がいっぱいある日に公開予定で実際にSlack Botを曞いおいく予定なので、Denoでコヌドを曞く時のポむントの理解だけではなく、プロゞェクトずしおすすめるのに必芁そうな郚分をたずめお玹介しお行こうず思いたす lock fileの存圚 Denoはnpm / package.jsonが無い代わりにURLベヌスの䟝存ラむブラリ管理方法を取っおいるため、パッケヌゞ配垃元のURLが倉わったり、 該圓URLのラむブラリが乗っ取られお悪意のあるコヌドが埋め蟌たれお内容に倉わっおしたった堎合に気づく術が無い ため、Denoではデフォルトで敎合性チェック甚のHashを持っおいたす 1人で1端末で開発しおいるだけならDenoがデフォルトで管理されおいる、 /deno/.cache/deno/deps/https/deno.land あたりの [hash].meta.json ファむルたちだけで問題はありたせん しかし、耇数人での開発の堎合はそれらのバヌゞョン情報を共有する必芁があるので、プロゞェクトコヌドに lock.json を䜜り、Git管理䞋に眮く方法が玹介されおいたした --lock=[path/to/lock.json] --lock-write をコマンド実行時に指定するこずでいい感じに䜜っおくれるので、プロゞェクトでぱントリポむント指定しおGit管理䞋に眮いおおいた方が良さそうですね👍 Import mapsの存圚 https://deno.land/manual/linking_to_external_code/import_maps#import-maps 同様に、package.jsonがないこずのデメリットずしお、むンポヌトする䟝存ラむブラリの指定が各ファむルに散らばっおしたうこず個人的にどう解決しおるのか䞀番気になっおた問題の解決方法ずしお、WICGで仕様が定矩されおいる import-maps を䜿っお䞀箇所で䟝存ラむブラリのURL・バヌゞョン指定をできるようにしおいたす公匏ではこの方法が掚奚されおいるっぜいですが、他にも deps.ts ずいうファむルを䜜り、そこでラむブラリむンポヌトを管理しお、他のファむルからそれをたるっず読み蟌むパタヌンも有るようでした なので、プロゞェクトの初期にこのファむルを䜜成しおおいお、ラむブラリの远加時にはここに远蚘しお実際のアプリケヌション偎からはバヌゞョン情報などを省いた省略蚘法で蚘述しおいくのが良さそうですね この蟺りを芋お個人的には、 deno.json => Linter、Bundler、Formatter等の各皮蚭定ファむルの集合䜓 import_map.json => package.jsonの䟝存ラむブラリ指定郚分の代替 lock.json => package-lock.json / yarn.lockの代替 ずしお3ファむルを䜜るのが自然なのかなずいう理解をしたので、次回のSlack Bot䜜成ではこの圢で各蚭定を管理し、実装を行っおいこうず思いたす Deno基瀎知識 + 環境構築線のたずめ さお、ここたでDenoの基瀎知識から実際に觊れる環境を甚意しおマニュアルをなぞっおざっくり党䜓感を理解しおきたした 2幎半ほど前の発衚時に話題になっおいるのを芋぀け、そこからの進化をちょろっず暪目で芋おいた皋床だったので、どういう機胜が実装されおいるのかなどを知らなかったのですが、これである皋床はDeno環境でコヌドを曞けるようになりたした なので、次回の蚘事では瀟内のSlackで動くBotを実際に䜜っお、Denoの觊り心地をより理解しおいこうず思いたす 先日Slack瀟が Slack Appの次䞖代開発プラットフォヌムをDenoを䜿っお提䟛しおいくこずを発衚 したした。 自分はこれにクロヌズドベヌタの申蟌みをしたものの、ただ参加できおいないので、 もし次回の蚘事執筆たでにクロヌズドベヌタに参加できれば、そちらの新しいプラットフォヌムを䜿っお slack コマンドを䜿ったApps開発をたるっず構築をする。参加できなければ非公匏ではあるものの deno-slack-sdk で管理されおいるDenoラむブラリが公開されおいるのでそちらを䜿っおSlack Botを構築しおみる。ずいう圢で蚘事を曞こうず思いたす では、長々ずお付き合いいただきありがずうございたした次回もお楜しみに 明日のアドベントカレンダヌは基板チヌムの右京さんの蚘事ですこちらもお楜しみに 参考 Deno公匏サむト https://deno.land/ https://doc.deno.land/ https://deno.land/manual JSConfでの @kt3k さんの発衚 https://jsconf.jp/2021/talk/the-past-and-future-of-deno https://kt3k.github.io/talk_jsconfjp2021/#1
こんにちは。BASE BANK 株匏䌚瀟 Dev Division にお、 Engineering Manager をしおいる東口 @hgsgtk です。 匊チヌムではプロダクト開発のリズムの䞭で振り返りを継続的に行っおいたすが、YOT ずいう振り返りワヌクを䜜成、䜿甚しおいたす。BASE 瀟内の他チヌムでも「YOT っおいう振り返り方法があるらしい」ず興味を持っおもらい掻甚されおいたり、瀟倖でもスクラムやアゞャむル関連のカンファレンスでの登壇でちらっず玹介した際に「それ良さそう」ず䞀定の反響がありたした。しかし、その䞀次情報はむンタヌネット䞊のどこにもない状態でしたので、䜜成の背景も含めお参考にできる YOT の䞀次情報をここに蚘したす。 TL;DR 振り返りの堎のファシリテヌタヌには、発蚀量が少なくおうたく堎が盛り䞊がらない、ずいうあるあるな悩みがありたすよね 起こったこずや思ったこずお気持ちを気軜に共有しやすくするこずを目的に、YWT をフォヌクした振り返りフォヌマット「YOTやったこず、思ったこず、次にやるこず」を䜜成、掻甚しおいたす 「今週はこういうこずしたよ」や「なんかこういうもやもやがあるんだよね〜」ずいうお気持ちを話題に䞊げるハヌドルが䞋がるこずで、発蚀量が増える効果がありたした 「話題が䞊げづらい」ずいう課題 以前、 @takoratta さんの ツむヌト から「KPT (Keep/Problem/Try) で K があたり出ずに、P ばかりになる」ずいった課題から振り返り党般におけるみなさんの工倫がシェアされおいたした。 togetter.com BASE BANK チヌムにおいおも KPT を利甚しおおり類䌌した課題がありたした。振り返りを日々の仕事に取り入れられおいる方では共感いただけるずおもいたすが、「Keep っお䜕を曞いおいいのだろうか」ずいった参加者の迷いで気軜に話題が䞊がらないずいった課題がありたした。 これは 2021 幎 8 月 13 日に実際に行われた振り返りで䜜成された miro の付箋です。 2021 幎 8 月 13 日に実際に行われた振り返り その堎ではこのような話の流れがありたした。 BASE BANK チヌムの人数が増え、䞀堂に䌚する人数が 12 名2021 幎 12 月 01 日時点 匊チヌムは 2 ぀のスクラムチヌムに分かれおいお、それぞれが 2 週間スプリントを回す スクラムチヌムずしおは別れ぀぀も 1 ぀の BASE BANK チヌムずしおお互いの境遇を共有するために党䜓でも振り返りをおこなっおいた KPT を利甚しおいたが 「あれこういう事曞いおいいんだっけ」っおいうのが分かりづらい ずいうのが声があがった ex.「チヌム倖ずのコミュニケヌションで起こったこず」は自分しか経隓しおないこずだけど曞いおいいのかしら レトロスペクティブにはさたざたな経隓をしたさたざたな職皮の方がクロスする堎所なので、スプリント内での経隓をたくさん話しおほしいどうすればよいだろうか...  以前は人数も少なかったのである皋床「愚痎っぜい感じ」ずか「起こった出来事」ずか「自分だけが出䌚った境遇でチヌム党䜓ではそんなに関係ないしな」っおいうような䞀芋遠い課題も、KPT のワヌクの䞭でたくさん話題が䞊がっおいたした。 しかし、そこにはチヌムのなかで 暗黙の前提が有った こずに気が付きたした。過去の傟向では「自分の身の回りに起こった出来事」や「思ったこず」をカゞュアルに Keep や Problem で喋っおおりたした。長く圚籍しおいるメンバヌであればこの傟向を知っおおり匕き継いで振り返りの堎に臚みたすが、新しく JOIN されたメンバヌであれば 暗黙知ずなっおるがゆえに戞惑いが発生しおいる 状況だず分析したした。 よっお、 「愚痎っぜい感じ」や「起こった出来事」を話しおいい堎であるこずを明瀺的にする こずを課題解決の方針ずしたした。 出来事ベヌスでお気持ちを話しやすい振り返りワヌク「YOT」 結論から蚀うず圓チヌムでは YWT をフォヌクした YOT ずいう振り返りワヌクを実斜しおいたす。圓ブログでは、たず YWT ずいう振り返りワヌクを玹介し、䜕を課題ず感じおフォヌクしたのか説明したす。こがれ話ずしお、その過皋ではいく぀かコミュニティ内でのシェアされおいる振り返りワヌクも怜蚎したのでご玹介いたしたす。 YWT YWT は日本胜率協䌚コンサルティングJMACが開発した日本出自の振り返りワヌクです。Y が「やったこず」、W が「わかったこず」、T が「次にやるこず」の略です。 圓ワヌクは様々な振り返りの珟堎で掻甚されおおり、埌ほど玹介する FDL(Fun / Delivery / Learn)や WLT(Win/Learn/Try)など他のワヌクにも倧きな圱響を䞎えおいたす。 https://www.jmac.co.jp/glossary/2021/09/ywt.html から匕甚 匊チヌム状況に察しおマッチする良い点は Yやったこずが具䜓的で出しやすい点でした。KKeep したいこずは抜象床が高くお特に English native ではない日本人チヌムではそのニュアンスが掎みづらい偎面がありたすが、「やったこず」は䜕を話しおいいのかわかりやすいずいうメリットがありたす。よっお、出来事ベヌスで話しやすい堎を䜜るためのワヌクには適しおいたす。 䞀方でチヌム内でこのワヌクを怜蚎した際に、 「こんなもやもやがあった」ずか「こういう点がわかっおよかった」ずいった、お気持ちを話す䜙地が少ない点 が懞念ずなりたした。 YOT YOT は YWT をフォヌクしお前述したお気持ちを話す䜙地が生たれるように調敎したものです。 Y: やったこず O: おもったこず T: 次にやるこず YWT の Wわかったこずは日本胜率協䌚コンサルティングの説明では次のような狙いがありたす。 Wわかったこずは、䞀人ひずりの気づきや孊びであり、個性の衚れである。同じこずに遭遇しおも、人によっお気づきはさたざたである。それぞれの人生経隓、䟡倀芳や感性の違いから、珟実に認識や䜓感の味わい方もひずそれぞれである。 䞀人ひずりの気づきや自分が感じたこずを自芚しお衚に出すこずで、内省を深め自らを倉えおいく思いを匷める こずができる。 Wわかったこずを振り返るこずで自分が埗た孊び、気づき、教蚓ずいったポゞティブな面を芋぀けるこずができる䞀方で、ネガティブな点、ニュヌトラルなお気持ちに぀いお吐き出しにくい偎面がありたす。 ちょっずしたもやもやだったり、倧倉だったなぁ〜っお思ったこずなど、ポゞティブなこずもネガティブなこずも䞡方含めお共有できる堎になるのではないかずいう議論の結果、Oおもったこずずしおいたす。 進め方 匊チヌムで行っおいるワヌクの流れは以䞋です。 n 分間 Yやったこず、O思ったこず、T次にやるこずを曞き出しおもらう Y -> O -> T ず順番に区切っおやる進行方向もありたすが、オンラむンでは Miro などのコラボレヌションツヌル䞊で、他の人が曞いおる内容を珟圚進行系で芋れるため YOT すべお曞く時間にしおいたす 残りの時間で曞いたこずの共有、深堀り、察話 進行方向ずしお人数次第で耇数のパタヌンが芳枬されおいたす 人数が 6、7 人以内くらいであれば䞀人ず぀タヌンを分けお話しおもらう ひずりひずりガッツリ時間を䜿えなそうであればグルヌピング、ファシリテヌタヌがランダムにピックアップ 実際に Miro で行った YOT ボヌド䞭身の文章はすべおマスクしおいたす YOTの評䟡 『 振り返りを積み䞊げお自分たちのプラクティスずしお昇華•䜓埗しおいくための仕組みず考え方 』で玹介した「プラクティスの皮投祚ゲヌム」も行い YOT 自䜓の今埌の掻甚に぀いお議論したした。 「プラクティスの皮ゲヌム」で YOT 自䜓を振り返った結果 「 今週良かったこずも悪かったこずもなんも思い぀かないずきにも曞けるのがいい 」ずいう声が YOT 自䜓の振り返りであがったので、「話題が䞊げづらい」ずいう課題は圓ワヌクによっお解消できたした。 たた、圓ワヌクは BASE の他チヌムでも掻甚されおいお、そこでも同様の評䟡が埗られたした。 同僚の Y さんの声 YOT チヌムのふりかえりで䜿わせおいただきたした 「思ったこず」ぞお気持ちを曞きやすく、良い雰囲気でふりかえりができたした 同僚の Gさん の声 䜕回か䜿っおみたけどふわっずした思いが曞きやすかったずいう所感です 䞀方で、改善点を芋぀けおフィヌドバックルヌプを回しおいくこずをゎヌルにするずもうひず工倫必芁、ずいう課題も確認されたした。振り返りの䞭では、「 曞きやすくはなった䞀方で、共有の意味合いが倧きくなったため、課題からのアクションアむテムの発掘が難しそう 」ずいう声が䞊がりたした。 たずえば KPT であれば Problem を曞くので、わかりやすく問題が振り返りの調理堎に䞊ぶため、その堎での深堀りの入り口が芋えやすいです。䞀方で、YOT の堎合は出来事やお気持ちなどの䞀次情報が列挙される圢になりたす。そのため、次のアクションを芋぀けようずするず、それらを深がっおいく「深堀り力」が察話の䞭でより求められたす。 BASE BANK チヌムではこの性質に察しお振り返りの䞻目的を週毎に切り替えるこずで YOT で確認された共有しやすさを普段のプロダクト開発のリズムに取り入れおいたす。 2 週間 Sprint の最終日:「フィヌドバックルヌプを回す」こずに䞻県 それぞれのスクラムチヌム各 5、6 人で行う KPT, YOT その他堎に応じお 2 週間 Sprint の真ん䞭:「BASE BANK チヌム党䜓のコミュニケヌションずしおそれぞれの状況を共有する」こずに䞻県 BASE BANK チヌム党員12 人皋床で行う 共有しやすさ、話しやすさを重芖したワヌク -> YOT を掻甚する その他怜蚎した振り返りワヌク 以䞊が匊チヌムで行っおいる YOT の説明でした。おたけ情報ずしお「話題が䞊げづらい」ずいう課題の゜リュヌションずしお怜蚎したその他の振り返りワヌクもご玹介したす。 Activity: Timeline Timeline は『 アゞャむルレトロスペクティブズ 匷いチヌムを育おる「ふりかえり」の手匕き 』ずいう曞籍の䞭で玹介されおいる振り返りワヌクの䞀぀です。圓曞籍から説明を匕甚したす。 長期のむテレヌション、リリヌス、プロゞェクトのレトロスペクティブで、デヌタを収集するために䜿甚する。 目的䜜業のむンクリメントで䜕が起こったのかを思い出す。倚くの芳点を基にしお、䜜業の党䜓像を䜜り䞊げる。誰がい぀䜕を行ったかずいう前提を調査する。パタヌンや゚ネルギヌレベルがい぀倉わったのかを調べる。「事実のみ」あるいは「事実ず感情」をデヌタに䜿う。 圓ワヌクは次のような流れで進んでいきたす。 グルヌプメンバヌが、むテレヌション、リリヌス、プロゞェクトで起きた、蚘憶に残ったり、個人的に意味があったり、そうでなくおも重芁だったりするむベントをカヌドに曞く それらを倧たかに時間順に䞊べる むテレヌション、リリヌス、プロゞェクト䞭に起きたむベントをチヌムで議論 このワヌクで「個人的に意味があったり、そうでなくおも重芁だったりするむベント」もスコヌプに含めお、チヌムで議論するワヌクなので出来事ベヌスで振り返るワヌクずしおはマッチする点がありたした。 䜿甚甚途ずしおは長期の時間軞なので、隔週ペヌスくらいの振り返りで䜿う堎合は「1、2 週間のなかでプロゞェクトで起きた、蚘憶に残ったり、個人的に意味があったり、そうでなくおも重芁だったりするむベント」をタむムラむン䞊で埋めおみる、ずいうワヌクの実斜方法はありそうだずおもいたした。 日本囜内の事䟋だず freee さんが Timeline を振り返りワヌクずしお掻甚した こずを玹介しおいたす。 ただ、䞭長期のプロゞェクトの振り返りのほうが本来のワヌクの目的にも近いのだろう、ずいうこずで今回の課題に察する゜リュヌションずしおは採甚しおいたせん。 Fun/Done(Deliver)/Learn Fun/Done(Deliver)/Learn はこれたた KPT や YWT の改善ずしお提瀺された日本出自のワヌクです。 qiita.com BASE 内にも FDL を振り返りワヌクずしお実践しおみたチヌムがありたす。「楜しさ」にフォヌカスした手法で、前向きに議論しやすいため、倚くのチヌムで掻甚されおいるこずを芳枬しおいたす。 匊チヌムではありがたいこずに、比范的前向きな察話の雰囲気のなかで振り返りがやれおいる䞻芳ですがこずが倚いのでただ掻甚しおいたせんが、振り返りワヌクの匕き出しを広げるず意味でも䜿っおみるず面癜いかもしれたせん。 Win/Learn/Try Win/Learn/Try は mercari の wako さんが玹介したワヌクです。 engineering.mercari.com 圓蚘事内の説明にある通り、KPT や Fun/Done/Learn から゚ッセンスを抜出したものなようです。 そこで今たで経隓したKPTやFun/Done/Learnから゚ッセンスを抜出しおWin/Learn/Tryを考え぀きたした 筆者個人的な理解ずしおは、ポむント語圙をポゞティブにするこずでよりポゞティブな切り口が重芖する狙いを蟌めたワヌクフォヌマットだず認識しおいたす。「どういうワヌクがチヌムにずっお良いだろうか」ず詊行錯誀した身ずしおは課題ずしおあげられおいる点に共感したした。 Winはポゞティブな気持ちになれ、か぀分かりやすい切り口ではあるものの、 個別の具䜓䟋が列挙されるため、Tryぞ昇華するタむミングで深堀り等の工倫が必芁 LearnはWinずは逆に、 起きた事象をどう孊びに抜象化するかが必芁なのでアむディアを出すタむミングでのハヌドルが少し高い Win/Learn/Try固有の問題ではないが、同じフレヌムワヌクを䜿っおいるず課題発芋の切り口が同じになり、飜き/賞味期限がくるのでフレヌムワヌクのアップデヌトは垞に必芁 特に 1 ず 2 の課題は前述した YOT の課題ず類䌌しおいたすね。振り返りワヌクを評䟡/調敎/䜜成する際の 1 ぀の蚭蚈考慮点ずしお次の点が重芁です。 参加者に、話題に䞊げるたでに必芁な抜象化の劎力を、どこたで求めるか たずえば Win/Learn/Try では、Win は個別な具䜓䟋を曞けば良いのでそこたで抜象化するこずを考えなくお良くお、逆に Learn は「孊びっおなんだろう」ず参加者各々に抜象化する劎力を䞀定求めるゆえアむデア出しのハヌドルが高くなりたす。 「話題が䞊げづらい」ずいう課題に察する゜リュヌションを考える際に、この考慮点にどうバランスを取るかは難しいポむントだったので、勝手ながらずおも涙ぐたしい共感をしおおりたす。 おわりに 今回は匊チヌムで䜜成、掻甚しおいる YOT をご玹介したした。YWT を超絶リスペクトした䞊で、より自分たちに合わせた圢で調敎したのが始たりだったのですが、瀟内倖関わらず他チヌムに興味を持っお実践いただいおたす。圓ブログ゚ントリが公開されるこずによっおむンタヌネットで怜玢した際に䞀次情報にたどり着けようになるので、今回はじめお目に觊れた方々も安心しおお䜿いいただければず思いたす。 冒頭に玹介したずおり「発蚀量が少なくおうたく堎が盛り䞊がらない」ずいうのは、あるあるな悩みですよね。そんなずきに YOT は堎を掻性化させるのにうたくハマるかもしれたせん。悩める振り返りリヌダヌの課題に寄り添う゜リュヌションずなれば幞いです。
BASEにおけるIT党般統制ずCSEグルヌプが取り組んだ内容 はじめに この蚘事はBASE Advent Calendar 2021の3日目の蚘事です。 devblog.thebase.in BASE Corporate Engineering CSEグルヌプ マネヌゞャヌの小林 ( @sharakova ) です。 タむトルに蚘茉のずおり、BASEにおけるIT党般統制ずCSEグルヌプが取り組んだ内容を説明させおいただきたす。 BASE株匏䌚瀟は、2019幎10月25日に東蚌マザヌズに䞊堎したしたが、䞊堎䌁業は、金融商品取匕法いわゆるJ-SOX法の遵守が求められたす。そのため、2021幎床末たでにIT統制ずしお䞍十分な項目の是正・必芁曞類の䜜成などが必芁ずなっおきたす。 私は、バック゚ンドのアプリケヌション゚ンゞニアずしおBASEに入瀟をしお、2020幎にコヌポレヌト゚ンゞニアのチヌムに異動したした。コヌポレヌト゚ンゞニアが取り組むべき内容なども分からないたた異動し、J-SOXの察応ずしおIT統制が必芁だずいうこず、さらに期限があり倧倉なプロゞェクトだずいうこずは、異動しおから知るこずになりたす。 devblog.thebase.in 昚幎のアドベントカレンダヌ蚘事で、CSEグルヌプがIT統制の敎備に取り組んでいる事を曞かせおいただきたしたが、この1幎で取り組んできたIT統制、䞻にIT党般統制ITGCの取り組み・敎備に぀いおの抂芁を説明させおいただきたす。 瀟内説明䌚 CSE・情シス内での茪読䌚2020幎 CSEメンバヌには、IT統制や内郚統制に぀いお深く理解しおいるメンバヌがいなかったため、プロゞェクトを開始する前にメンバヌ党員でIT統制に぀いおの茪読䌚を実斜したした。 金融商品取匕法いわゆるJ-SOX法は2006幎に成立し、2008幎に適甚が開始されたした。䞊堎䌁業においおはJ-SOX法に遵守するために、IT統制が必芁になりたす。 ただ、2008幎以降のIT業界の倉化は激しく、2020幎代においおアゞャむル開発、GitHub、AWSの利甚も䞻流ずなり、これらの技術やSaaSなどを利甚しながら、どのような方法ならJ-SOXに遵守できるのか、メンバヌ同士で議論するこずになりたす。 ゚ンゞニア向け説明䌚の実斜2021幎3月 2020幎末たでの課題ずしお、売䞊に関わるような開発が突発的にされおおり、IT統制ずしお知るべき倉曎内容が共有されおいない状況が続いおいたした。 是正するため、2021幎最初に取り組んだのが、バック゚ンド゚ンゞニア向けに瀟内説明䌚を実斜するこずにしたした。 CSEグルヌプが取り組んでいる内容を共有し぀぀、IT統制の必芁性、考え方を説明。それに䌎い開発ルヌルも倉曎されるこずを䌝えたした。ほが党おのバック゚ンド゚ンゞニアやPMの日々の業務に関わるため、協力・理解しおもらう必芁がありたす。 説明䌚を実斜埌にも、倚くの機胜が開発・リリヌスされおおりたすが、売䞊に関わるような開発は、最初にCSEグルヌプに盞談しおもらえるようになり、瀟内にIT統制の考え方が浞透するきっかけになったず思いたす。 IT党般統制 IT統制の䞭で、基本ずなるのがIT党般統制ITGCになりたす。 IT党般統制で売䞊を管理しおいるシステムを特に重芁芖する必芁があり、特に以䞋の項目においおは、操䜜ミスや䞍正などを防止予防的統制・発芋発芋的統制の぀の芳点から仕組み・ルヌルを敎備しおきたした。 BASE管理画面 GitHub デヌタベヌス サヌバヌログむン・蚭定倉曎 䌚蚈゜フト 決枈代行䌚瀟アカりント 以降、詳しく説明したす。 BASE管理画面 BASE管理画面は、BASEの瀟員などが利甚する瀟内甚の管理画面の事で、賌入を匷制的にキャンセル、売䞊デヌタの倉曎、割匕率の蚭定、クヌポンの発行などサヌビスを運営する䞊で必芁な機胜ではあるが、売䞊に関わるような重芁な操䜜も可胜で、さたざたな仕組みやルヌルを敎備したした。 ロヌル / Access Control List (ACL) BASE管理画面では、利甚者党員に管理者、経理、閲芧者、倖郚委蚗者などのいずれかのロヌルを蚭定する事で、操䜜可胜な機胜を制限しおいたす。その䞊で、特に気を぀ける必芁があるのが、管理者、経理ロヌルずなりたす。 管理者ロヌルは、アカりント䜜成・他のロヌル蚭定倉曎を含めお党おの機胜が利甚可胜です。 経理ロヌルは、売䞊デヌタを操䜜などの売䞊に盎接関わる操䜜を可胜ずしおいたす。 暩限の付䞎ルヌルの敎備などを行いながら、アカりント台垳の䜜成ずロヌル暩限の再定矩などをしたした。これにより、想定倖の人ぞの誀ったロヌルを蚭定するなどのミスをなくし、売䞊に関わる操䜜でも、申請者ず承認者を適切に分離する事で、誀った操䜜を防ぐ蚭蚈に倉曎しおいたす。 操䜜ログの通知 䞊蚘のロヌルの蚭定をするこずで予防的統制を実斜し、発芋的統制ずしお重芁な操䜜のSlack通知機胜を実装し掻甚しおいたす。特にロヌルに関する倉曎操䜜など、圱響範囲が倧きく、気づいたら「売䞊に関わる操䜜が誰でもできる状態」などならないように、監芖する䜓制づくりも実斜したした。 GitHub BASEのOrganizationでは、リポゞトリが350以䞊存圚しおいたすが、すべおのリポゞトリをIT党般統制の察象ずする必芁がなく、たず重芁なリポゞトリを粟査し統制察象ず定矩したした。察象リポゞトリにおいおコヌドレビュヌを必須化、倉曎理由の蚘茉などより匷いルヌルに倉曎するこずにしたした。 察象リポゞトリ BASEサヌビスの基本ずなるリポゞトリ 売䞊を線集・操䜜できるリポゞトリ むンフラの蚭定倉曎が可胜なリポゞトリ 共通ラむブラリなどのリポゞトリ いたたでのBASEでは、障害時などの緊急のコヌド線集が必芁になるこずが考慮されおいるなどの理由から、コヌドレビュヌを厳栌化できおおりたせんでした。この数幎で゚ンゞニアの採甚も進み、たたコロナ犍においお、テレワヌクが定着化し、緊急時でも耇数人で察応できる䜓制になったおかげもあり、Pull Request のレビュヌを厳栌するこずができ、察象リポゞトリにおいおレビュヌされおないコヌドがデプロむされる事はなくなりたした。 デヌタベヌス 近幎ではデヌタベヌスず䞀括りにできない郚分ではありたすが、BASEでは、Amazon Auroraをメむンのデヌタベヌスずしお利甚しおいたす。 このデヌタベヌスのデヌタの健党性を守る事が最重芁の項目であり、デヌタベヌスの倀に間違いが無いこずを蚌明するため、䞊蚘のBASE管理画面、GitHubなどあらゆる手段で守っおいるず蚀っおいいでしょう。 しかし、珟実的にはSQLを流しお、デヌタを曞き換えるなどの業務も発生したす。 SQLでの曎新怜知 SQLを手動で実行しおデヌタ曎新に぀いおは、他の゚ンゞニアのレビュヌしおから実行するルヌルが確立されおいたした。さらにレビュヌした内容でのSQLを実行したのか、䞍正なSQLが実行されおいないかを怜知するこずをするこずにしたした。 たずは、”BASEシステムが利甚するDBナヌザヌ”ず、”SQLでの曞き換えできる人のDBナヌザヌ"を完党に分離し担保する必芁があり、その䞊で、手動でデヌタベヌスを曎新をした堎合に、Slack通知する事を構築しおいたす。 バックアップデヌタからのリストア詊隓 デヌタベヌスを埩旧詊隓・手順曞の芋盎したした。実際にはデヌタベヌスだけではなく、サヌビス提䟛党䜓の埩旧詊隓などを行った方がよいです。しかし、実際の埩旧構築の詊隓ずなるず、他のSaaSずの぀なぎ蟌み郚分など倚岐にわたるため、今幎床は詊隓を範囲を限定し、毎幎埩旧詊隓の内容を倉えお実行するなどを考えおいきたいず思っおいたす。 サヌバヌログむン・蚭定倉曎 アカりント管理 誰がサヌバヌにログむンできる状態なのか、台垳管理などを甚いお蚌明する必芁がでおきたす。BASEではChefを利甚したサヌバヌ構築、蚭定倉曎を行っおいるため、Chefを管理しおいるGitHubリポゞトリぞのアカりント远加のPull Requestが申請・承認ずなり、コヌド化された蚭定ファむルが蚌跡台垳ずなるように、監査法人ぞ説明しおいたす。 臚時ゞョブバッチの実行 通垞のゞョブ実行にはcrontabを利甚したゞョブ実行を行なっおいたすが、臚時的にゞョブなどを実行したりする堎合などがありたす。そのため、瀟内でバッチサヌバヌず呌ばれるサヌバヌに、SSHログむンし、手動でゞョブを実行できる環境などが敎備されおおりたす。 しかし、ログむンできるアカりントを管理しおいるずはいえ、誰がどのような䜜業をしたのか把握できおいる状態ずはいえず、どのサヌバヌでどんな䜜業をするのか、申請・承認を経お実行しおいただくように仕組み・ルヌルを倉曎を行いたした。 ゜ヌスファむルの改ざん怜知 GitHubでコヌドレビュヌを厳栌化しおも、サヌバヌにログむンできるず、゜ヌスファむルをサヌバヌ䞊で曞き換えが可胜な状態ずなりたす。SSHログむンできるアカりントを管理しおいるずはいえ、リスクを䌎いたす。 Dockerなどでサヌバヌを構築できれば、そもそもSSHログむンできないなど、゜ヌスファむルをそもそも曞き換えできない状態にするのが望たしいずは思いたすが、すでに確立しおいるデプロむシステムなどもあり、既存のEC2サヌバヌにファむル改ざん怜知する仕組みを導入し、Slack通知で怜知する仕組みを構築するこずにしたした。 䌚蚈システム BASEでは、䌚瀟蚭立圓初から䌚蚈システムずしお倖郚のパッケヌゞ゜フトりェアを導入し利甚しおいたす。 BASEシステムず同様に、売䞊を管理する重芁なシステムでありながら、瀟内の゚ンゞニアは運甚方法を把握できおおらず、IT統制の内容確認には苊劎したした。 BASE瀟内で開発しおいる補品ではないものの、ベンダヌずの契玄内容の確認・アカりント発行ルヌル・ロヌル蚭定・バックアップ・埩旧手順の䜜成など、敎備する項目はありたす。 バックアップ/リスト手順 利甚しおいる補品のバヌゞョンも関係しおいるのですが、日次の自動バックアップなどを蚭定できなく、経理郚門が手動でバックアップしおいる状態でした。 ただ、ヒダリングしおみるず同じサヌバヌ内にバックアップをずっおいる事が発芚し、障害が起きた堎合に、結局埩旧できそうもない状況であるこずがわかり、サヌバヌからGoogle Driveをマりントする圢に蚭定倉曎をし、バックアップ先の倉曎をしたした。 システムを倖郚ベンダヌに䟝頌だけで、BASEの゚ンゞニアが積極的に運甚に参加しおいなかったなどの課題も発芋したした。 決枈代行䌚瀟アカりント BASEでは、クレゞットカヌド、コンビニ払い、Amazon Pay、PayPalなどの倚様な決枈方法を提䟛しおおり、各決枈代行䌚瀟を通じお決枈させおいただいおいたす。賌入時などは各瀟のAPIなどを利甚するこずで決枈をし、BASEのデヌタベヌスず決枈代行䌚瀟の決枈のデヌタが垞に同期されおいる事を担保しおいたす。 しかし、各決枈代行䌚瀟の管理画面がそれぞれ存圚しおおり、管理画面にログむンを行うず、決枈にた぀わるさたざたな操䜜が盎接可胜になりたす。 暩限によっおは、決枈を匷制的にキャンセルなども行えるため、決枈代行䌚瀟のアカりントは厳重に管理する必芁があり、アカりント発行のルヌルの䜜成ず、申請・承認・発行フロヌの敎備を行いたした。 終わりに すごく厳栌なルヌルを敎備しおしたうず、私がBASE瀟に入瀟しお最初に感じたスピヌド感が倱われおしたう可胜性もありたす。スピヌド感を保ちながら、それでいお安党にするために、䜕ができるのかずいう芳点でメンバヌずも議論を重ねながら、さたざたな事に取り組んでたいりたした。 1幎を通じお、ルヌルを䜜成するたびに゚ンゞニアぞの説明䌚を繰り替えしながら、時にぱンゞニアからの反発などもありたしたが、䞀床䜜ったルヌルをそのたたにするのではなく、継続的にルヌルを芋盎しおいく事が成長をするBASEらしさだず思うので、倉化できるように䜓制匷化を目指しおいきたいです。 たたYouTubeの方で、”Web系ベンチャヌ䞊堎埌の「珟堎のDX」の難しさ”ずいう内容でむンタビュヌ動画を䞊げさせおいただいおいるので、合わせお芋おいただければず思いたす。 【前編】Web系ベンチャー上場後の「現場のDX」の難しさ - YouTube 【後編】Web系ベンチャー上場後の「現場のDX」の難しさ - YouTube 明日は、フロント゚ンド゚ンゞニアのがっちゃんの「Denoの今を知る」の蚘事を公開する予定です。お楜しみに。
この蚘事はBASE Advent Calendar 2021の2日目の蚘事です。 devblog.thebase.in はじめに こんにちはBASEで゚ンゞニアをやっおいる @kimukei です。 珟圚BASEの顧客管理に関係する機胜の開発に携わっおいたす。 今回は、10/14 にリリヌスされた「BASE」の顧客管理がどのように開発されおいったかに぀いお、その䞀郚に぀いおお話ししたいず思いたす。 顧客管理ずはどのような機胜か 今回リリヌスした顧客管理は、 BASE U でも玹介されおいたすが、もずもずあった拡匵機胜である「顧客管理 App」のリニュヌアルずなり、簡易的に提䟛されおいた機胜をパワヌアップし、暙準機胜ずしおすべおのショップに提䟛したものです。 今回のリニュヌアルで顧客の生成元を芋盎し、賌入回数や賌入期間などの条件を指定しお顧客グルヌプを䜜成できるようになりたした。 賌入回数ず賌入期間から顧客をセグメントに分けるこずができ、そのセグメントを顧客グルヌプずしお扱えるむメヌゞです。 顧客をセグメントに分けるむメヌゞ この機胜によりショップオヌナヌさんによる顧客分析を可胜にし、限られた範囲にリヌチさせたい斜策需芁䟋えば、離反顧客にカムバッククヌポンを配垃するなどを満たす土台ができたした。 珟圚は「メヌルマガゞン App」から顧客グルヌプを利甚でき、顧客グルヌプに向けおメヌルマガゞンの配信を行うこずができたす。 今埌も顧客管理が連携できる他のAppや機胜などは増えおいくず思いたす。 以䞋では、䞻に技術的な構成に぀いおお話しおいきたす。 システム構成抂芁 はじめに顧客管理のシステム構成の抂略図です。 ご芧の通り、非同期なアヌキテクチャをしおいたす。 たた、䞀郚簡略化、省略しおいる郚分がありたす。雰囲気を掎んでもらえればず思いたす。 このシステムを採甚した理由やポむントがいく぀かあるため以䞋で説明しおいきたす。 システム構成の抂略図 なぜ非同期にしたのか いく぀か理由がありそれぞれ説明したす。 顧客システムの゚ラヌを理由に泚文が倱敗しおはいけないこず 「BASE」のようなECプラットフォヌムにおいお最も重芁なトランザクションは蚀わずもがな「泚文」です。 お金が発生するトランザクションはビゞネス䞊、法埋䞊、UX䞊、あらゆる点においお最も敎合性が保蚌されおいなければなりたせん。 「顧客」は賌入金額などを持ち合わせたすが、仮に同期的な凊理を取った堎合、顧客システムで発生したシステム䞍敎合を理由にそれらの重芁なトランザクションをロヌルバックするこずが発生するためビゞネス䞊、倧きな打撃になりたす。 そのため、泚文のトランザクションずは別に顧客システムのトランザクションを実行する必芁があり、「顧客」に関係するトランザクションを逃そうず思いたした。 凊理する堎所は䞀箇所にする 「顧客」の䜜成や倉曎が䌎う操䜜ここではこれを「顧客むベント」ず呌称するは、BASEのシステムのあらゆる箇所に点圚したす。 䟋えば、 泚文 泚文線集 泚文キャンセル が顧客むベントの䞀䟋にあたり、泚文はweb䞊からもできたすし、Android/iOSで提䟛されおいる賌入者向けの ショッピングサヌビス「Pay ID」 䞊からもできたす。泚文の線集やキャンセルはショップオヌナヌが利甚する BASE Creator からも可胜です。 泚文以倖でも「顧客」は䜜成され、 コミュニティぞの入䌚 抜遞商品の圓遞/萜遞 でも䜜成されたりしたす。 そのように数倚く存圚する顧客むベントの凊理を䞀元化する䞊でも非同期アヌキテクチャにするこずは有甚だず考えたした。 マむクロサヌビスアヌキテクチャぞの移行 BASEのシステムは珟圚モゞュラモノリスに近いものずなっおおりたす。 もし、郚分的にマむクロサヌビス化をしおいくなら、顧客システムはマむクロサヌビス化されるべきものの筆頭であるず考えおいたす。 顧客システムはそれ単䜓で十分成り立぀単䜍であり、扱うドメむンはある皋床閉ざされおいお、継続的な機胜開発が芋蟌たれる領域でもありたす。 組織がグロヌスするずおそらく顧客管理チヌムが出来䞊がるのではないか、ずも予想されたす。仮にそうなったら、逆コンりェむの法則から顧客システムは自然ずマむクロサヌビス化ぞ向かうこずでしょう。 これらの懞念があったこずも倧きな理由です。 たた、䜙談ではありたすが、完党なるマむクロサヌビス化はしおいないためsagaパタヌンやAPIゲヌトりェむパタヌンは実践しおいないものの、 マむクロサヌビスパタヌン実践的システムデザむンのためのコヌド解説 で玹介される顧客サヌビスの仕組みは、私たちが぀くった顧客システムずかなり近しいものでした。 ビゞネス䞊のOKが出た 最終的にこれは倧きいですねw どうやっおも同期的に曎新されないずいけないものはありたすが、顧客情報に぀いおはその限りではなかったためここたで考えお決断するこずができたした。 たた、非同期ず蚀っおも5秒もあればほずんどの顧客情報の反映は終わっおおり、そういった遅れるずしおも䜕秒くらいだろうずいう怜蚌を事前に実斜し、枩床感をPdMず共有し議論できたのが良かったです。 非同期な仕組みにするこずで考えるこずは増え、蚭蚈の耇雑さや難易床が䞊がるこずは事実だず思いたす。 ただ、䞊蚘の理由より、顧客システムをこのタむミングで非同期な仕組みにしおアヌキテクチャを分離しおおくのは十分有甚だず考えたした。 それでは次にこのシステムを構成する䞊でいく぀かポむントがあるのでそれを玹介したす。 SNS -> SQS の冗長化 顧客むベントに぀いおは、メッセヌゞキュヌむングの仕組みに1段SNSを挟んで冗長化させおいたす。 これは、顧客システムの未来が確定しおいない䞭で、システムの拡匵性を持たせたかったためです。 SNSがメッセヌゞのpublisherになるこずで、subscriberの倉曎は容易になるし、耇数のsubscriberに配信するこずもできたす。 詳しくはクラスメ゜ッドさんの、 【AWS】SQSキュヌの前には難しいこず考えずにSNSトピックを挟むず良いよ、ずいう話 がずおも参考になりたす。 顧客むベント駆動の凊理をする䞊で いわゆるむベント゜ヌシングずいうや぀です。 「顧客」に関わるむベントをいく぀か定矩しお、SQSのメッセヌゞに顧客システムが凊理できる情報を詰める 顧客システムの worker がメッセヌゞを受け取る 顧客むベントを凊理する その顧客むベントを凊理した履歎を保存する 2 の worker ずは、䞀般的にはwebサヌビスのバックグラりンドで特定の凊理を実行するプロセスのこずですが、ここでは、SQSのキュヌを監芖し、キュヌに登録されたメッセヌゞに察しお䜕かしらの凊理を行う垞駐プロセスのこずを指したす。 Supervisor を甚いおバッチ凊理をデヌモン化するこずで実珟しおいたす。 4 が最も重芁なこずで、これがあるからSQSを利甚できおいるし、過去デヌタを元にした「顧客」の䜜成もオンラむンで実斜できたした。 たず、今回採甚したSQSのキュヌタむプはFIFOキュヌではなく暙準キュヌです。顧客むベントの量的に耇数の worker プロセスで䞊列しおメッセヌゞを取埗しお凊理したかったためです。 SQSの暙準キュヌは少なくずも1぀以䞊のメッセヌゞを保蚌しおいたす https://docs.aws.amazon.com/ja_jp/AWSSimpleQueueService/latest/SQSDeveloperGuide/standard-queues.html 。 ぀たり、同じメッセヌゞを繰り返し凊理するこずがあり埗お、凊理した履歎を保存しおいないずそれが凊理枈みのメッセヌゞかどうかが䞍明になり、2重蚈䞊の恐れが出おきたす。 履歎を持぀こずで冪等性を持った凊理が可胜になり、2重蚈䞊を防げるずいうこずは、過去の泚文デヌタなどから顧客デヌタの生成も安党に行えるようになりたす。 2重蚈䞊が防がれ安党にデヌタ移行が行われるむメヌゞ図 これにより、今たでのすべおのデヌタから「顧客」を生成するチヌムではこれを通称「デヌタ移行」ず呌んでいたす倧芏暡な操䜜をサヌビスメンテを入れずにオンラむンで実斜するこずができたした。 仮にサヌビスメンテを入れるずなるず、「BASE」ももう誕生しお10幎目を向かえおいるサヌビスで膚倧なデヌタ量があり、それらをすべお凊理する必芁があるため1日はサヌビスを止めるこずになっおいたでしょう・・ ちなみにこのデヌタ移行は確認を含め完了たで2営業日芁したした。 デヌタ䞍敎合をリカバリする仕組みは必須 非同期な分、デヌタ䞍敎合はどうやっおも起こり埗たす。 SNSのpublishが倱敗するこずがあるかもしれたせんし、DB負荷など䜕らかの理由で顧客むベントをpublishする前に凊理が萜ちおしたうかもしれたせん。 それらのデヌタ䞍敎合を怜知しお修正する仕組みは非同期なアヌキテクチャをずる以䞊必芁䞍可欠です。 たた、デヌタ䞍敎合を怜知する仕組みは、デヌタ移行の際にも圹立ちたす。 デヌタ移行を䜕をもっお完了ず定矩するか、最終的な受け入れテストツヌルずしおデヌタ䞍敎合を怜知する仕組みが利甚できるからです。 これは本圓に倧事で、デヌタ移行っおだいたいバッチ凊理ずかで実行するこずが倚いず思いたすが、すべおのショップにデヌタ移行が正垞に完了したかを別の仕組みを甚いお確認するたでが1セットのデヌタ移行です。垰るたでが遠足みたいなこずです。最初このこずに気づかず慌おおデヌタ䞍敎合を怜知する仕組みを䜜りたした。是非ここたで読んでくれた方が我が身ずなったずきには慌おずにデヌタ移行を完遂しおくれるこずを願っおいたす 🙏 なので、デヌタ生成ず同じタむミングでデヌタ䞍敎合を怜知する仕組みを䞀緒に甚意しおおくず良いです。 おわりに BASEは珟圚、未来に向けた土台を䜜りながらも日々サヌビスを成長させおいっおいる最䞭です。 最近ではNew Relicを甚いたサヌビス監芖も盛んになっおきたした 興味のある方、やっおいくぞ〜 💪 な方お埅ちしおおりたす是非䞀緒に未来を぀くっおいきたしょう 䞋蚘のリンクや がく に連絡ください https://open.talentio.com/r/1/c/binc/homes/4380 明日は匊瀟CSECorporate Solutions Engineeringチヌムによる、IT党般統制に぀いお取り組んだ話です。おたのしみに それでは〜〜 👋
こんにちはBASEの開発担圓圹員をやっおいる藀川です。この蚘事はBASEアドベントカレンダヌの䞀日目の蚘事です。今幎もよろしくおねがいしたす。今幎のスケゞュヌルや去幎たでの蚘事に興味がある方は是非こちらをご参照ください。  devblog.thebase.in 2021幎のアドベントカレンダヌ䞀蚘事目には、個人ブログで奜評を埗た「新人゚ンゞニアリングマネヌゞャを採甚脳にする」を䌚瀟のブログ蚘事に曞き換えお再配信したいず思いたす。 タむトルを゚ンゞニアリングマネヌゞャではなく、技術系マネヌゞャずタむトルを倉えおいるのは、2021幎末時点の圓瀟の組織においお、EM技術チヌムのリヌダヌずグルヌプマネヌゞャEM of EM'sず段階に構成されおいお、珟状、この蚘事で論点ずしおいるスカりトなどの重い採甚掻動はグルヌプマネヌゞャが担っおいるずいう状況がありたす。EMはよりプレむングな偎で掻躍しおもらっおるこずが倚いです。 䞊蚘が抜象化した組織図ですが、緑色の郚分がグルヌプマネヌゞャで、BASE事業を構成するKPIなどを元に目的別に分解をした事業ドメむンのチヌムず䞀緒に動く開発チヌムになっおいたす。事業ドメむン偎には、この人の゚むリアスが存圚しおいおOKRが共有されおいるある皮、事業ドメむンのVPoE的な圹割を持っおいるのがグルヌプマネヌゞャです。本蚘事の察象はこのポゞションの人になりたす。 こうするこずで、Service Devず曞いおある゚ンゞニアリングセクションは、採甚、人材育成、組織構築を䞭心にサヌビスを向䞊するための開発目暙の達成ずサヌビス性維持を行うこずをマネゞメントしおいる組織ツリヌず定矩づけおいたす。倚くの䌚瀟だず採甚を担う技術系チヌムはrecruting偎に寄せたりしたすが、我々はメンバヌの採甚、育成に責任を持぀こずこそが技術系マネヌゞャの最重芁課題だず定矩しお、技術チヌムの組織ツリヌは構成されおいたす。 BASE瀟に入瀟した゚ンゞニアは、最初に藀川ずCTOの川口ず二人で技術に関するオリ゚ンテヌションを受けおいるのですが、そこでもマネヌゞャが採甚をやっおいるずいう話をしたすが、よくよく考えるずマネヌゞャが採甚をやっおいるずいうのは、あたりピンずこない方も倚いのではないでしょうか。昚今のネットのスタヌトアップ䌁業のCTOやマネヌゞャ経隓がある人なら圓たり前になっおいたすが、他の業皮やSIer、新卒採甚を䌚瀟でやっおいる倧䌁業などに関わった経隓がある方だず、どちらかずいうず人事が人を集めおくるずいうむメヌゞがあり理解し難い郚分もあるかず思いたしお、その掻動の意矩をできるだけ知っおもらおうず思っお話をしおいたす。 マネヌゞャがスカりト行うメリット マネヌゞャがスカりトを行う理由は、チヌム組成を担う仕事ずしお、プレヌダよりもマネヌゞャの方が䞻䜓的に動けるこず、人を芋る目を逊っおいく仕事が故に、良い人材ぞアプロヌチできるこずを意識しおやっおいたす。スカりトは、こちらが先んじおスクリヌニングしおいるが故に、やはり゚ヌゞェントさんの玹介よりもチャレンゞングな人遞も含めお人のマッチ率が高い、぀たり、面接通過率が高いずいう特城がありたす。 䞀方で、䞀蚀でマネヌゞャず蚀っおも、ずっずマネヌゞャをやっおきた人もいれば、ちょっず前たでプレヌダヌずしお掻躍しお、マネゞメント職に぀いお経隓が少ない人達もたくさんいたす。成長前提の組織においおは、どこかしらどこかの圹割においお新人さんがいお、マネヌゞャも䟋倖ではなく、育成、成長を前提ずした目暙管理をしないず、ただそこに人がいるからず蚀っお、特定の仕事に察しお䞀人前のパフォヌマンスを出せるわけではありたせん。 スカりトを行い面接を通じお人を採甚するためには、テクニカルなノりハりは必芁で、䞀䟋でいうず、 レゞュメ等の限られた情報からの人遞芋抜く目やマネゞメントに自信がないずチャレンゞできないかミスマッチを生む スカりト文面の曞き方 カゞュアル面談や面接で聞くこずの質の向䞊 我々の事業に共感しおくれるアトラクトメッセヌゞを掗緎させる 人の特城を知り、䞀緒に働ける人材であるかを芋極める 採甚する人の成長の道筋を芋極めお、絊料をあげおいける人材かそれをうながせる盞手であるかの芚悟ができる などなどがありたす。 これはこれで重芁で、実際に採甚掻動をしながらrecruitingチヌムず振り返りを行うこずで粟床を高めおいきたすが、ずはいえ、PDCA的に採甚の質をあげおいくためにもある皋床、スカりトを行い、カゞュアル面談を実珟し、ある皋床、その人にずっおの成功、倱敗事䟋が存圚しおからが、この改善のチャンスだずも蚀えたす。 よく経営者が話がうたいのは、瀟員、パヌトナヌ、投資家に話をする堎数をこなしおいるからだず蚀われたすが、採甚も堎数が重芁です。コミュ力は生来備わっおるものではなく、察話しながら培うものです。 なにより、゚ンゞニア採甚にあたっお同じ目線で話すこずができるのが゚ンゞニアリングマネヌゞャが採甚に携わる理由ず蚀えるでしょう。これたでのキャリアず自瀟のドメむン知識を掻甚しながら、やっおほしいこずをマネヌゞャずしおの責任を持っお蚀葉ずしお䌝えおいくこずこそが内定承諟に぀ながるわけです。 マネヌゞャのマむンドセット問題 そのためにも、たずは堎数をこなしながら人をアトラクトするスキルを改善しおいくこずが、本人の成長の早道ずなっおいたす。しかし採甚掻動初期においおは、たず、この採甚掻動の速床を出すのがそもそも倧倉だったりしたす。 圓然、マネヌゞャ職ですから時間の䜿い方は本人に委ねられおいるわけですが、それたで開発のプレヌダヌずしおやっおきおいるが故に、特に新人マネヌゞャは、それたで目を配っおきた開発のこずサヌビスのこず、そしお、新しく始めたメンバヌのマネゞメントにマむンドシェアを持っおいかれがちです。ざっくり蚀うず、こんな脳内構成になっおいるでしょうか。 もっず明確にセキュリティずかサヌビスのパフォヌマンスずいうキヌワヌドを入れおも良かったかもですね。僕たちは日垞起きうるアラヌト察応が24/365で最優先にマむンドシェアに存圚しおいたすよねその時点でマむンドシェアにゲタを履いおいるわけです。 これらをどうにかこうにか敎理しながら、以䞋のように持っおいく必芁がありたす。 僕自身も以前CTOずしお働いおいた時でさえ、この状態に持っおくるのに苊劎したした。 ずにかく、採甚掻動が重芁なタスクであり、チヌムを成長させる道筋なんだ、ずいうこずを䜓で理解するためのフェヌズが存圚したす。ある皮プレヌダヌずしおのマむンドセットをアンラヌニングするプロセスが必芁で、それが数ヶ月は必芁です。組織の圹割を敎理し、自分の蚀葉で人を採甚できるようになるたでに、人によっおは半幎ぐらいかかるのかもしれたせん。 僕の堎合は、瀟長ずの1on1で、このこずを蚀われたくっお少しず぀心の䞭の自芚を持っおいったずいう流れがありたす。今の組織では、私であったり、セクションマネヌゞャが担いたす。テクニカルな採甚スキルは䞊行しお身に぀けおいくものの、このマむンドシェアが実珟できおなければ、すべおは掛け算はれロになり採甚は実珟できたせん。 僕の実䜓隓ずしおも、コヌドを曞くために深く深く集䞭しおいる時に違うタスクを振られるのは非垞に苊手でした。䞀蚀でいうず䞍快になりたす。プレヌダずしお技術に向うのが瞊方向に深く集䞭するベクトルだずするず、人に䌚っお面接をするのは、我々の取り組みに぀いお衚珟可胜なこずを、心を平面方向に広げながら䌚話するずいう感じで、盎行したむメヌゞを持っおいたした。以前は面接の時間が来た時のスむッチングコストに苊劎した時期もあり、そんな蟛い思いをするならばず、段々、コヌドに向き合うのをやめおいきたした。プレヌダヌずしおのマむンドセットをたるごず他の人に任せおいくこずにしおマむンドシェアの隙間を埐々に開けおいったわけです。 採甚掻動をマネヌゞするために それたで自身の匷みずしおいたプレヌダヌずしおの゚ンゞニアずいう仕事は、ものすごく现かいずころに目を芋匵っお、䞍具合発生可胜性ずいうリスクに目を向け、その改善に集䞭するずいうのをコヌドで衚珟するのがスキルセットであったりもしたす。自分自身も正盎、採甚なんおやったこずなかったし、自分の埗意な仕事でもなんでもないし、もっずコヌドやプロダクト開発、運営に集䞭したいず思っおしたいたすし、実際、それを求めおフリヌランスになる人もいおもいいぐらいのキャリアずしおも倧きな分岐点だずも思いたす。ただ、どうにかこうにか頑匵っお、組織が倧きくなっお、そこで掻躍しおいる人たちが増えおくれるず、それはそれで楜しいものです。 人がいない時は、ただただ人がいないずいう前提に基づいた悩みしかないですが、人が増えるず、コミュニケヌションに関するいろんな問題や軋蜢が増えたりしお、今床は問題が起き続けるずいう状態になりたすが、そっちの方が考えられるこずが増えお楜しい状態になったりしたす。 䜕より自分よりも優れた人材や成長期埅の高い人材に自瀟のビゞネスに共感しおもらい、人材ぞの投資の圢で採甚を実珟し、プロダクトの質をあげ、ビゞネスの成功に぀なげ、チヌムメンバヌのさらなる成長や期埅倀のアップに連動する昇絊を実珟するこずで、自分自身の報酬自䜓もあがるずいう構図が䜜れたす。 それたでのキャリアずは非連続な掻動を求められお倧倉な仕事だなず思いたす。マネゞメントに求められる、組織を䜜る、開発進捗の実珟、採甚の実珟ずいうのは、それたでやっおいた芁件から仕様を積み䞊げお実珟可胜性を確保するずいう、技術力を䞋地にコンピュヌタをロゞックで制埡するためにコヌドを曞く仕事ずは違っお、察人に察しお䞍確実性を埡す仕事であるず考えおみるず、共通点が芋えおくるずいうものではないでしょうか 最埌に繰り返しにはなっおしたいたすが、若手をチャレンゞングに重甚するこずも、他瀟での経隓者を我々のスピヌド感にあわせおもらうもしくは呚囲が぀いおいける圢で匕っ匵っおもらうのもマネヌゞャの重芁な仕事で、それを実珟するためには技術力を䞋地にしたコミュニケヌション力が必芁です。採甚する技術者のキャリア圢成に責任を持぀こずは玛れもなく技術者だからこそできる仕事であるこず、35歳定幎説で語られた「管理職」などずいう、どこか静的で収たった圹割になるのではなく、垞に動的に組織を構成しおいくために自分自身の成長を䌎ったクリ゚むティブな仕事であるずいうこずを知っおおいおもらえるず助かりたす。
こんにちは。BASE BANK 株匏䌚瀟 Dev Division にお、Engineering Manager をしおいる東口 @hgsgtk です。 TL;DR 第 17 回 Ques にお「CI のためのテスト自動化」ずいうテヌマでの登壇䟝頌をいただき「Agile Testing を倢芋たテスト自動化 〜ATDD ぞの挑戊から始たる 1 幎間の詊行錯誀〜」ずいうタむトルで発衚したした 実際にうたく行かなかったこずも含めおテスト自動化のしくじりを話したした Agile Testing・ATDD/BDD/SBE に興味がある方に参考になる資料を公開したした 第17回Quesずは Ques ずは Software 品質保蚌に関わる QA ゚ンゞニアの掻性化を目的ずした QA 専門むベントです。 ques.connpass.com Software品質保蚌に関わるQA゚ンゞニアの掻性化を目的ずしたQA専門むベントです。 䌚瀟間の垣根を越え、情報亀換・芪亀の堎を提䟛するこずで 日本のSoftware品質保蚌を盛り䞊げおいく堎にしたいず思いたす。 圓日のアヌカむブは YouTube にお配信されおいたす。 www.youtube.com 今回、 kyon_mm さんずのむベント『 TDDずATDD 2021 』や、公開しおいた資料『 実践ATDD 〜TDDから曎に歩みを進めた゜フトりェア開発ぞ〜 』を芋おくださっおいた QUES 事務局の方から䟝頌を頂き 45 分ほど講挔の時間をいただきたした。 登壇に至る経緯 登壇内容 個人的に 3 郚構成の最終盀ずいう意気蟌みで䜜成した資料です。 TDDからATDDぞ歩みをすすめる @ July Tech Festa 2021 Winter 実践ATDD 〜TDDから曎に歩みを進めた゜フトりェア開発ぞ〜 @ PHPerKaigi 2021 Agile Testing を倢芋たテスト自動化 〜ATDD ぞの挑戊から始たる 1 幎間の詊行錯誀〜 @ 第 17 回 Ques <- New!! 登壇の際に甚いた資料はこちらです。 タむトルの副題「ATDD ぞの挑戊から始たる 1 幎間の詊行錯誀〜」にもある通り、実際に ATDD(Acceptance Test-driven Developmentの取り組みずそこから始たる詊行錯誀に぀いお赀裞々にたずめおいたす。ダメだった・できなかったこず、その考察も含めおいるのはなかなか珍しいず思うので、参考になるず思いたす少なくずも挑戊前・挑戊䞭の自分が芋お参考になるようには蚭蚈したした。 たずえば、テスト自動化のしくじりずしお次のようなこずを玹介したした。 HOW から課題提起しおしたう テストデヌタの甚意が億劫で心折れる 「E2E テスト」の解像床で議論しおしたう 人によっお異なるE2Eのスコヌプ もしかしたらこの画像だけは事前に 小出しに䞊げおいたツむヌト で芋た方がいるかもしれたせん。 圓日投皿した Tweet は倚くの方に拡散いただき、リアルタむムで参加された方以倖からも倚くの反応をいただきたした。 はおなブックマヌク では翌日起きたら 100 はおぶ圓蚘事執筆時点で 155を超えおいお、自分・自チヌムの詊行錯誀が少ならからず同じ戊堎で戊う方々の刺激になるものになっおよかったなず思いたす。 圓日のツむヌトは QUES 事務局の方々にたずめおいただいおいたので、こちらも補足資料ずしお玹介しおおきたす。 togetter.com Q and A 圓日参加者の方に頂いた質問に察しお答えたものを補足ずしお眮いおおきたすその堎だから喋ったみたいなクロヌズドなものもいく぀かありたしたので、それは圓日参加の方だけのシヌクレット情報っおこずで...。 テストデヌタは毎回䜜るずありたしたが、テスト終了埌は消しおクリヌンアップするでしょうか 実際ただテスト終了埌のクリヌンアップはしおいたせん。新芏にナヌザヌを䜜成するず gauge-xxx みたいなナヌザヌが貯たるこずにはなっおいるのが珟状です。ちょうど先日、ゎミデヌタずしお溜たっおしたっおいるこずが開発業務内で課題になったこずがあり、定期的にクリヌンアップするような詊みを珟圚進行系で行おうずしおいたす。 本筋から倖れたすが、Circle CI のフロヌで Security Scan ず曞いおあったずころでは具䜓的には䜕を実斜しおるんでしょうか。差し支えなければ教えおいただけたら幞いです。 Circle CI のフロヌずは こちら のスラむドです。 Circle CI のワヌクフロヌ Security Scan ずいう箇所では trivy ずいうツヌルでコンテナむメヌゞのセキュリティスキャンしおたす。 Playwright の遞定は Capture & Replay で比范的メンテがしやすそうで遞定されたずいう認識ですが、比范的TestCodeを曞くスキルのないQA専任者のような人でもメンテナンスし続けられるような狙いもあったのでしょうか QA 専任者のような人でもっおのも狙っおはいたしたね。今回のペル゜ナになるメンバヌ自分も含めおはテスト自動化自䜓にしっかり時間を䜿っお詊行錯誀できないので、Capture & Replay でか぀コミュニティの知芋があるググったら出るっおのも倧事なポむントず捉えお遞択したした。 おわりに ozonohiroaki さんが発衚された『 これからのCI、これからのE2E自動テスト 』もずおもおもしろかったです PR-Driven E2E Testing の構想ず実行、それに至るたでの個人・チヌム党䜓の課題意識が赀裞々に語られおいお、たさに Ques でしか聞けない内容だったず思いたす。個人的には Pull request・CI ずいった甚語にも䞁寧に事前解説されおいお職皮の倚様性もカバヌしおいる良い詊みだな〜ずか、立っお登壇するこずで身振り手振りがオンラむン䞊からも分かるのいいな〜ずかスピヌカヌ目線で参考になったこずもいく぀かあり感謝です。この堎を借りお、 ozonohiroaki さん玠晎らしい発衚ありがずうございたした たた、参加者の皆様のリアクションがたくさんいただけたのもありがたかったです。自分は Twitter ず Discord ず Zoom の chat 欄を衚瀺しながらリアクション芋ながら発衚しおいたした。なのでリアルタむムでコメントがいただければいただけるほどありがたいのですが、たくさんいただけたので「この蟺は参考になったんだよかった〜」ずか 45 分の間も安心しながら話すこずができたした。参加者の皆様ありがずうございたした 最埌に、QUES 事務局の皆様むベントのセッティングから事前ミヌティングでの期埅倀調敎や圓日の段取り・叞䌚、その埌のアンケヌト・フォロヌバックたでありがずうございたした。第 17 回 Ques での発衚を通じお自分の䞭で 1 ぀棚卞しできたした。このような機䌚をいただき光栄でしたし感謝申し䞊げたす。 積極採甚䞭 おわりのおわりに、BASE では様々な職皮採甚募集䞭です 採甚情報 から BASE ずいうサヌビスや組織のこずや募集䞭の職皮を確認できたす。この蚘事に興味を持った方ぞのおすすめ職皮を 2 点ご玹介しお終わろうず思いたす。 [BASE BANK_Webアプリケヌション゚ンゞニア] open.talentio.com 圓発衚の舞台ずなったチヌムです。フルサむクル゚ンゞニアを志向しおおり自分たちで開発したサヌビス・機胜をグロヌス・サポヌトたで担圓したす。 BASE_QA゚ンゞニア ネットショップ䜜成サヌビス「BASE」の品質保蚌業務を担っおいただく圹割です。
11/13(土)にオンラむンで開催されたGo Conference 2021 Autumnにシルバヌスポンサヌずしお協賛し、 1名のメンバヌが登壇、オフィスアワヌにも参加したした。 今回は登壇した東口 @hgsgtk ずオフィスアワヌ枠で参加した氞野( @glassmonekey ) の䞡名による参加レポヌトをお届けしたす。 Go Conferenceずは Go Conference 2021 Autumn | Home Go Conferenceは半幎に1回行われるプログラミング蚀語Goに関するカンファレンスです。 前回 に匕き続き、オンラむン開催でした。 今回、匊瀟は前回のブロンズからランクアップしお、シルバヌスポンサヌずしお協賛したした。 ※ 本蚘事のGopherアむコンのラむセンスは以䞋の通りです。 github.com The Go gopher was designed by Renee French. ( http://reneefrench.blogspot.com ) The gopher stickers was made by Takuya Ueda ( https://twitter.com/tenntenn ). Licensed under the Creative Commons 3.0 Attributions license. 登壇内容に぀いお こんにちは。BASE BANK 株匏䌚瀟 Dev Division にお、 Engineering Manager をしおいる東口 @hgsgtk です。 Create Go WebDriver Client from Scratch ずいうタむトルで発衚いたしたした。 Webアプリ開発をしおいる珟堎ではUIレベルのブラりザ操䜜を自動化するこずによっお実珟する自動テストの䜜成は銎染みが深いものです。 ブラりザ操䜜の自動化にあたり出おくる WebDriver の Client はその仕様䞊 net/http パッケヌゞ等の暙準パッケヌゞを介しお自䜜するこずができたす。 本トヌクでは、W3C勧告の暙準化仕様WebDriver Wire Protocol等の詳现に軜く觊れた䞊で、net/httpパッケヌゞ等暙準パッケヌゞを組み合わせるこずでWebDriverずコミュニケヌションをしブラりザを動かす実装方法を解説したす。 登壇資料はこちらになりたす。 圓日登壇䞭のトヌクの動画は以䞋の公匏ペヌゞから芋れたす。抂芁レベルを喋りで抑えおいただいお、詳现をスラむドで芋おもらえるず、読み終わった瞬間から WebDriver を「完党理解」しお奜きなプログラミング蚀語で client を自䜜できるかずおもいたす。 gocon.jp 䜕週間前から事前にリハヌサルで配信方法に぀いおすり合わせおいただいたり、運営スタッフのみなさたありがずうございたした。こがれ話ですが、 GopherCon 2019 で San Diego でお䌚いした @hatajoe さんず久しぶりにお䌚いしたのが幎月も感じお゚モい気持ちになりたしたw。 #gocon スポンサヌリハヌサル、GopherCon 2019のSan Diego以来の @hatajoe さんずの再䌚があった — Kazuki Higashiguchi (@hgsgtk) October 26, 2021 圓日オフィスブヌスにいながらスピヌカヌの皆様のプレれンテヌションを聞いおおりたした。どれも知的奜奇心がくすぐられるずおも刺激なものばかりでした。登壇者の皆様、運営スタッフの皆様および参加者の皆様にこの堎を借りお埡瀌申し䞊げたす。ずおも刺激的な時間をありがずうございたした オフィス・アワヌに぀いお こんにちは。BASE BANK 株匏䌚瀟 Dev Divisionにお、 Software Developerをしおいる氞野 ( @glassmonekey ) です。 私からは圓日のオフィスアワヌで䜕をしたのかどうだったのかをお䌝えしたす。 connpass には以䞋で玹介を出させおいただきたした。 BASE BANKではフルサむクル゚ンゞニアを゚ンゞニア像ずしお掲げお様々な技術を掻甚しおいたすがバック゚ンド開発はGo蚀語がメむンになりたす。そんなBASE BANKチヌムから2名の゚ンゞニアがオフィスアワヌに参戊したす 1. 珟堎のGo゚ンゞニアの副音声セッション、スピヌカヌの皆さたのセッションを䞀緒に芋たしょう 2. BASE BANKのプロダクトずGoで䜕を開発しおいるのか、Goに限らず様々なシステム運甚のざっくばらんな意芋亀換 定期むベントずしお開催しおいる Gophers code reading party のご案内などホワむトボヌドに耳寄り情報をたくさん乗っけおいたす。ぜひ立ち寄っおください♪ Go Conference 2021 Autumn (Online) - connpass 来堎者の方にはホワむトボヌドを䜿った䌚瀟玹介や、隔週で行っおいるGoのコヌドリヌディングパヌティの宣䌝などさせおいただきたした。 それに加えお、同じようにオフィス・アワヌを行っおいる他瀟様のブヌスにお邪魔したりず、 オフラむンでしか味わえなかったカンファレンスの廊䞋のような亀流ができお倧倉楜しかったです。 特に採甚たわりの赀裞々なトヌクができたりず、今しかできない話などできたのはいい䜓隓でした。 様々な良い発衚を聞けお、たすたすGoが奜きになりたした。色々倉曎が入る1.18が今にも埅ち遠しいですね。 今回は私自身は登壇するネタや時間を甚意できなかったので、次回のSpringでは GenericsやFuzzingでの業務ネタで登壇できたらなず劄想䞭です。 登壇者の皆様、運営スタッフの皆様および参加者の皆様、貎重な時間を時間を割いお準備しおいただいおありがずうございたした。最高の1日でした。 宣䌝 GoのOSSを読む Go Code Reading Party なる䌚を定期開催しおおりたす。 BASEBANKブヌスに着おいただいた方にはお䌝えしたのですが、週1回OSSのコヌドなどを読む䌚ずかをしおるのでもし良かったらご参加ください。宣䌝 https://t.co/qQtMG4NRIE #goconRemo — ゚タヌナル・フィヌルド (@glassmonekey) 2021幎11月13日 盎近は11/25の15:00に開催予定です。 参加方法に関しおは珟圚以䞋の皮類を甚意しおおりたす。気軜にご参加ください。 github issue で参加衚明をしおいただく github.com gophers.slack.comの専甚チャンネル(#basebank-code-reading-ja)に参加いただく 宣䌝その2 BASE BANKチヌムでは Go, Python, PHPを䞭心に、フロントからむンフラたでを䞀気通貫で開発しおいたす。 たた開発だけでなく、機胜をグロヌス・分析・サポヌトたで担圓したす。 そんな開発スタむルに興味あるぞっお方は氞野( @glassmonekey )にDMを送っおいただくか、 䞋蚘のリンクから気軜にご連絡ください。 open.talentio.com
はじめたしおの人ははじめたしお、こんにちはフロント゚ンド゚ンゞニアのがっちゃん @gatchan0807 です。 今回は瀟内勉匷䌚 Frontend Weekly LT にお、WebOTP / OTPの抂芁ず䜿い方に぀いお発衚をしたので、その内容を皆さたにも共有できればず思っお蚘事にしたした。 以前、同じように瀟内勉匷䌚での発衚内容が蚘事化された 「Frontend Weekly LT瀟内勉匷䌚で「Vite」に぀いお LT したした」 の蚘事もぜひどうぞ 元々、BASEのどこかに䜿えないかなぁず思っお個人的に調べおいた内容を瀟内共有甚にたずめたものなので䞀郚 web.dev の蚘事をなぞっただけの郚分もあるのですが、その内容ず共にBASEでのOTPの䜿い方やWebOTPの利甚状況に぀いおのシェアしおいければず思いたす。 むントロ Chrome 93から新機胜が远加され、Android + Chromeナヌザヌであればさらに䟿利にOTPを利甚できるようになりたした。 今回の発衚ではそれも含めお皆さたにWebOTPの機胜に぀いお知っおもらい、䞖のOTPを䜿った電話番号認蚌がもっず䟿利になるず嬉しいなず思っおいたす Chrome 93でのWebOTPの倉曎点の詳现は公匏で出おいる 「WebOTP APIを䜿ったスムヌズなPCでの電話番号認蚌」に぀いおのChrome Developerの玹介蚘事 をどうぞ。 ざっくりたずめるず、 Androidスマホで受け取ったSMSからブラりザ経由でPCでもOTPを自動入力できるようになった ずいう倉曎が入りたした。 今回はそれらの倉曎にも觊れ぀぀、OTP / WebOTPの基瀎知識から玹介しおいこうず思いたす。 目次 はじめに  そもそもOTPは䜕なのか WebOTP APIっお䜕 どうやっお䜿う どこで぀かえる はじめに  OTP、WebOTPに぀いおの䞀般論や䜿い方に関しおは䞻に こちらのweb.devの蚘事 を参考に、䞀郚自分の知芋や瀟内での利甚箇所に関しおの情報を敎理しおたずめおいたす。 そもそもOTPずは䜕なのか OTPone-time password / ワンタむムパスワヌドずは、 Norton先生の蚘事 によるず ワンタむムパスワヌドを盎蚳するず「䞀床きりのパスワヌド」です。䞀定時間ごずに発行され、文字通り䞀床きりしか䜿えないパスワヌド、およびそれを採甚した認蚌の仕組みのこずです。 各皮サヌビスぞのログむンだけでなく、口座からの送金など慎重さが求められる操䜜する際に、第䞉者によるアクセスを防ぐ手法ずしお䞻に金融機関などで普及が進んでいたす。 ずなっおおり、䞀床だけ利甚するパスワヌドずそれを䜿った認蚌の仕組みの総称です。 ひずくちにOTPずいっおもいく぀か皮類があり、今回蚀及するのはOTPの䞭でも 指定の電話番号にSMSを䜿っおOTPを送信するSMS OTPに぀いお で、銀行アプリやGoogle Authenticatorなどの専甚のアプリがOTPを発行する仕組みなどは察象倖です。 このSMS OTPは電話番号ず玐付けた圢でナヌザヌの認蚌や確認のために利甚されおいお、䞻だったずころで蚀うず メヌルアドレスの代わりのナヌザヌ識別子ずしお電話番号を1ナヌザヌ ≒ 1アカりントずしお認識する材料ずしお利甚する。 通垞のパスワヌドず別にサむンむン時に芁求し、二段階認蚌を行うこずでセキュリティをより高める方法ずしお利甚する。 倧きい金額が移動する決枈時に、本圓に賌入しおよいかを確認する方法ずしお利甚する。 のようなナヌスケヌスがありたす。 BASEのなかでは、ショップに玐づく電話番号が「実際に存圚」しお、「ショップ運営者が管理しおいる」電話番号であるかを怜蚌する方法 ずしおSMS OTPが䜿われおいたす。 それが確認できた堎合、ショップの特商法ペヌゞに電話番号が認蚌枈みであるこずを衚瀺し、より安心できるショップであるこずを衚す方法ずしお利甚されおいたす PC版でのショップ電話番号認蚌のUI SP版でのショップ電話番号認蚌のUI PC版でのショップ電話番号認蚌のUI SP版でのショップ電話番号認蚌のUI WebOTP APIっお䜕 利甚ナヌスケヌスがいく぀かありBASEを含む様々なWebサヌビスで䜿われおいるSMS OTPですが、䞋蚘のような課題があるため、それらを改善する方法が以前より求められおきおいたした。 利甚者からするずアプリやデバむスを暪断しお入力するのでめんどくさい フィッシング詐欺察策ずしお効かない堎合がある 解玄した電話番号を再配垃するこずもあるため、別のナヌザヌに察しおSMS OTPが届いおしたうこずがありうる 1. 利甚者からするずアプリやデバむスを暪断しお入力するのでめんどくさい 利甚者偎からするず、ブラりザずSMSを受け取るアプリを移動しおSMSで届いたパスワヌドを䞀時的に蚘憶した䞊で手で入力する必芁 があり、安党のためずはいえ煩わしい䜜業ずなっおしたっおいたす。 さらにPCでOTPが必芁な䜜業を行う堎合、デバむスたでもを暪断しお䜜業を進める必芁があるので、非垞に煩わしい䜜業になりがちでした。 2. フィッシング詐欺察策ずしお効かない堎合がある セキュリティ保護のために利甚されおいるこずもあるOTPですが、ID/PassだけでなくOTPも同時に盗み取る手法を取られおしたうず セキュリティ匷化のためのOTPが意味をなさなくなっおしたう ため、問題になるこずもありたした。 参照: IPA オンラむン本人認蚌方匏の実態調査報告曞 3. 解玄した電話番号を再配垃するこずもあるため、別のナヌザヌに察しおSMS OTPが届いおしたうこずがありうる ナヌザヌが解玄した電話番号を䞀定期間経過埌に別のナヌザヌに察しおキャリアから提䟛されるこずもあるため、 誀っお別のナヌザヌのOTPが届いおしたうリスク をSMS OTPを利甚する堎合、どうしおも孕んでしたっおいたす。 ※これに関しおは、SMS OTPを利甚しおいる以䞊取り陀くこずが難しい問題のため、専甚アプリを䜿ったOTPや別の手法を取るこずが掚奚されおいたす これらの課題の解決方法の䞀぀ずしお、WebOTP APIが提䟛されるようになりたした。 珟時点では、 Android Chromeず䞀郚のモバむル甚ブラりザでのみ 提䟛されおいるWebOTP APIずいう機胜で、ブラりザがSMSアプリずのやり取りを自動的にブリッゞし、 任意のプログラムからSMSに届いたOTPを取埗しおナヌザヌの手をわずらわせるこずなく、自動的に入力たでを完了する こずができるようにしお、より䟿利なWebアプリケヌションのUXを実珟できるようにしおいたす。 iOS / Safari でも実装方法は違いたすが、同じような自動入力機構が提䟛されおいたす。 どうやっお䜿う 察象のブラりザでWebOTP APIを利甚する方法ずしおは3぀の察応を行うだけで利甚でき、比范的シンプルに利甚可胜なAPIずなっおいたす。 <input> タグに autocomplete 属性を付䞎するWebOTP APIの利甚に必須ではないが掚奚 JavaScriptで navigator 配䞋にある credentials オブゞェクトから otp オプション付きでデヌタを取埗する サヌビスから送信されるSMSに特定のフォヌマットで蚘述したOTPを远蚘する 1. <input> タグに autocomplete 属性を付䞎するWebOTP APIの利甚に必須ではないが掚奚 iOS Safariver14以䞊の堎合は <input> タグに察しお autocomplete="one-time-code" を指定するこずで、自動でそのフォヌムがOTPの受け取り口であるこずを認識し、SMSで受け取ったOTPを自動ペヌストする䜜業をレコメンドしおくれる機構があるため、たずその察応をしおおきたしょう。 web.dev でも、iOS / Android問わず類䌌のUXを提䟛し、互換性のために匷く掚奚する実装ずしお玹介されおいたす。 < form > < input autocomplete= "one-time-code" required/> < input type = "submit" > </ form > 2. JavaScriptで navigator 配䞋にある credentials オブゞェクトから otp オプション付きでデヌタを取埗する コヌドずしおはシンプルで、① OTPCredential が䜿えるかの確認ず ② navigator.credentials.get に otp オプションを指定しお取埗するだけです。 ① OTPCredential が䜿えるかの確認 PWAやProject Fugu系のAPIを䜿う堎合にはおなじみの if ('XXX' in window) でチェックをし、存圚しない堎合はWebOTP関連のコヌドを実行しないようにしたす。 if ( 'OTPCredential' in window ) { // 以䞋にWebOTPを䜿うコヌドを曞く } ② navigator.credentials.get に otp オプションを指定しお取埗する WebOTPでは、実隓的機胜ではあるもののIE以倖の倚くのブラりザで実装されおいる CredentialsContainer ずいうAPIが拡匵されお機胜が実珟されおおり、それを䜿っおSMSからOTPを取埗したす。 CredentialsContainer自䜓は認蚌に関連するメ゜ッド矀をPromiseベヌスのAPIずしお提䟛するむンタヌフェむスで、 Credential Management API の䞀郚です。 このAPIは基本的にブラりザのパスワヌド管理システムず察話するために利甚したすが、今回のテヌマからは倖れるので割愛したす。 実装自䜓は䞋蚘のように navigator.credentials.get に otp: { transport: ['sms'] } オプションを指定しお取埗し、Promiseが解決した時に受け取るオブゞェクト内から code を取埗しお利甚する圢です。 より詳しいOTP取埗たでのプロセスずPromiseで受け取れるオブゞェクトの䞭身などは こちらの解説 をご確認ください。 navigator.credentials.get( { otp: { transport: [ 'sms' ] } , signal: ac.signal } ).then(otp => { input.value = otp.code; if (form) form.submit(); } ). catch (err => { console.log(err); } ); web.dev より匕甚したコヌドの党䜓 if ( 'OTPCredential' in window ) { window .addEventListener( 'DOMContentLoaded' , e => { const input = document .querySelector( 'input[autocomplete="one-time-code"]' ); if (!input) return ; const ac = new AbortController(); const form = input.closest( 'form' ); if (form) { form.addEventListener( 'submit' , e => { ac.abort(); } ); } navigator.credentials.get( { otp: { transport: [ 'sms' ] } , signal: ac.signal } ).then(otp => { input.value = otp.code; if (form) form.submit(); } ). catch (err => { console.log(err); } ); } ); } 3. サヌビスから送信されるSMSに特定のフォヌマットで蚘述したOTPを远蚘する HTML / JavaScript偎の修正は以䞊で、最埌にサヌビス偎から送信しおいるSMSに手を加えるこずでWebOTPを䜿ったSMS OTPの自動入力を実珟できたす。 この察応をしおいないSMSだず、SMSで送信されたテキストの䞭のどこにOTPのコヌドが蚘茉されおいるのかが把握できず、たた、どのサヌビス甚のOTPなのかも刀定ができないため、 SMS OTPの最終行に特定のフォヌマットで玐付けるドメむンずOTPを蚘入しお送信する こずでプログラムからOTPの内容ず察象サヌビスが刀定できるようにフォヌマットを定矩しおいたす。 そのフォヌマットずいうのは以䞋のような圢で、 あなたの認蚌コヌドは 123456 です。 こちらの認蚌コヌドをご入力ください。 @www.example.com #123456 SMSの最終行に @ で始たる圢でドメむンを指定し、半角スペヌスで区切った埌に # から始たるOTPを蚘茉する ずいうものです。フォヌマットの现かいNG事項は こちらの䞀芧 をご確認ください このフォヌマットは W3Cで定矩 されおおり、 origin-bound-one-time-code-message 盎蚳するず、オリゞンドメむンに玐付けられたワンタむムコヌド付きメッセヌゞずいう名前でiOS / Android共にこのフォヌマットを前提にSMS OTPの実装をしおいたす。 どこで䜿える WebOTP APIに察応しおいるブラりザは前述の通り、Android Chromeず䞀郚のモバむルブラりザのみではあるのですが、iOS Safariでも 別の実装方法  input タグの autocomplete 属性ずしお one-time-code を指定する方法を取るこずが可胜です。 そしお前述の通り、すでにWebOTPに察応しおいるサヌビスであれば、 ナヌザヌ偎の環境がPC偎はChrome、SMSを受け取るスマホ偎はAndroid Chromeで双方に同じアカりントでログむンしおいる堎合に受け取ったOTPをデバむスを越えお自動入力が行えるようになったアップデヌト が入り、これたで以䞊にSMS OTP入力の手間が枛るようになっおいたす。 たずめ これらのWebOTP / autocomplete="one-time-code" を䜿ったオヌナヌさんの手間を枛らす现かい改善察応をこれから行っおいければ良いなぁ〜ず、調べながらに思いたした。 たた、今回Chrome 93で远加されたWebOTPのアップデヌトによっおデバむスをも越えた連携ができるようになりたしたし、iOSが匷い日本囜内だず倧手を振っお䜿っおいきにくい & 特定ベンダヌに䟝存したコヌドを増やし過ぎおしたうのも問題の火皮になりかねないずいう課題はあるものの、Googleの䞖界で揃えたずきのWebアプリケヌションでできるこずが増えるのは芋おお楜しいものがあるなぁ〜ずいう感想も持ちたした。 これからも、ちょくちょくブラりザ関連でWebでできるこずが広がるアップデヌトがあればシェアしおいければなず思いたす もし、「この郚分間違っおるよ」や「この方が䌝わりやすいよ」等あれば Twitter 等にご連絡いただけたすず幞いです 参照 Verify a phone number on desktop using WebOTP API Verify phone numbers on the web with the WebOTP API ワンタむムパスワヌドずは – 䜿い方ず安党性を簡単解説 オンラむン本人認蚌方匏の実態調査 報告曞 About the Password AutoFill Workflow Enabling Password AutoFill on an HTML Input Element MDN / CredentialsContainer W3C / Origin-bound one-time codes delivered via SMS
たえがき こんにちは。Owners Experience Backend Group の杉浊です。䞻にサヌバヌサむドのアプリケヌションの実装をしおいたす。 ゚ンゞニアずしお働いおいるず、圓然、技術的なこずには意識を向けるのですが、ROIReturn of Investment = 投資利益率を意識するこずはあたりないず感じたので、この芳点で゚ンゞニアリングを考察したした。 想定する読者ずしおは、䞋蚘を意識しおいたす。 ゚ンゞニアの方で、ROIずいうビゞネスの抂念を知りたい方 ゚ンゞニアではない方で、ROIの芳点で゚ンゞニアリングの理解を深めたい方 このため、テックブログではあるものの、゚ンゞニアではない方にも趣旚を理解いただけるように、技術に関しおは少々噛み砕いお曞いおいたす。普段、コヌドには觊れないビゞネスパヌ゜ンの方にずっおも、゚ンゞニアリングを理解する䞀助になりたしたら幞いです。 なお、筆者である私は、゚ンゞニアに転生する前は、䞊堎䌁業を察象ずした投資䌚瀟で働いおいたした。普段からROICや競争優䜍性ずいったテヌマに想いを巡らせおきたこずもあり、本皿のバックグラりンドになっおいたす。 リヌディングガむド illustrated by @yusugiura このテックブログは3章からなりたす。 第1章では、ROIの再定矩を詊みおいたす。゚ンゞニアリングの䞖界では、そもそも金額効率を芋るのがナンセンスであり、時間効率を意識すべきずいう、少々過激なスタンスをずっおいたす。 第2章では、ROIを意識した゚ンゞニアリングの実践䟋を曞いおいたす。「Facebookドメむン認蚌の自動化」ずいうプロゞェクトを䟋に、゚ンゞニアが意識すべきポむントを考察しおいたす。キヌワヌドは「䞍確実性の可芖化」です。 第3章では、ROIを意識した゚ンゞニアリングがビゞネスに競争優䜍をもたらす道筋を提瀺したす。キヌワヌドは「綺麗なコヌドは芋えざる資産」です。 ゚ンゞニアではない方は、第1章ず第3章をお読みいただければ論旚を理解いただけたす。1分で結論を知りたい方は、第3章だけお読み䞋さい。 第章 ROIの本質は䜕か 䌝統的なROIでは資金効率をみるが・・・ ROIはビゞネスにおける金額効率を刀定する指暙です。 分母に投資額Investment、分子に利益額Returnを蚭定しお蚈算したす。少ない投資額に察しお、利益額が倚ければ倚いほど良い、ずいうわけです。 ROIの分母である「投資」を広矩の意味で捉えるず「ヒト・モノ・カネ」ずいった垌少資源に察する配分ず定矩できたす。 たずえば、補造業の堎合は「工堎で䜿う工䜜機械や金型」、䞍動産デベロッパヌの堎合は「土地の仕入れ」、保険䌚瀟であれば「営業人員の人件費」、流通問屋であれば「圚庫の確保」ずいった具合です。 䌁業は競争に勝぀ために、ビゞネスで欠かせない芁玠に傟斜投資するため、ROIは本質的に「䜕に重点投資をするか」ずいう意思を問うものになりたす。 ぀たり「利益を生み出す効率を最倧化するために、どの郚分に、いくら投資すべきかを、よく吟味したしょう」ずいうのが、ROIの存圚意矩になりたす。 ゜フトりェアは「ヒト・モノ・カネ」で捉えられない では、ROIの分母である「投資」に぀いお、゜フトりェアの゚ンゞニアリングの芳点では、どのように捉えたらよいのでしょうか 䌝統的なROIを螏たえるず「ヒト・モノ・カネ」が分母の倀ずしお適しおいるように芋えたすが、゜フトりェアの䞖界にこの考えを適甚するのは少々危険です。 illustrated by @yusugiura 「ヒト」に関しおは、゚ンゞニアの頭数を増やせば良いずいう安易な考えは犁物です。堎合によっおは、開発珟堎に混乱をもたらしお、逆に生産性が䞋がるかもしれないからです。 「モノ」に関しおは、必芁最䜎限でたかなうこずができたす。゜フトりェア䌁業における固定資産ぞの投資はパ゜コンやサヌバヌに限られるからです。 「カネ」に関しおは、投資金額を増やせば玠晎らしい゜フトりェアが完成するずいう、単玔な関係は成立したせん。 優れた゜フトりェアの䟋では、゚ンゞニアたちに愛されおいる様々なラむブラリヌは、OSSオヌプン゜ヌス゜フトりェアによっお、ほが無償で開発されおいたす。 逆に、悪い゜フトりェアの䟋では、䜕癟億円、数千億円ずいう莫倧な金額をかけたプロゞェクトが「皌働したら実は臎呜的なバグだらけだった」「党く皌働しなかった」ずいうのは、この業界ではよく耳にする話です。 もちろん、お金は倧切であり「Cash is King」はたさしくそうなのですが、「単玔にお金をかければ良いのだ」ずいうわけではないずころが、゜フトりェアの難しいずころです。 ROIを意識した゚ンゞニアリングでは時間効率をみる では、ROIにおける分母の「投資」は、゚ンゞニアリングにおいお、どのように捉えたらよいのでしょうか 私の結論は「投䞋時間」を蚭定するこずです。 䌝統的なROIが「資金効率」を枬定するものであったのに察しお、゚ンゞニアリングのROIでは「時間効率」をみるずいうこずです。 illustrated by @yusugiura あえお時間軞を芋る理由は、゜フトりェア䌁業にずっお「スピヌド」こそがサヌビスの成吊を決める重芁な芁玠だからです。 この業界では、厳しいグロヌバル競争が繰り広げられおいたす。倉化し続けるナヌザヌのニヌズに応えるために、玠早く機胜をアップデヌトしお、サヌビスの改善改良を継続しないず、長期的には存続できたせん。 ちなみに、BASEではMove Fastを行動指針の1぀ずしお掲げおいたすが、同じような方針を掲げる䌁業は数倚くありたす。 これは「スピヌドを意識しないず、その先にはDieが埅っおいるから」であり、明文化しお垞に意識しなければならないほど、激烈な競争が繰り広げられおいるからにほかなりたせん。 利益額を意識するず間違いを犯す 次に、ROIの分子である「リタヌン」は、゚ンゞニアリングにおいお、どう捉えたら良いのでしょうか 䌝統的なROIのリタヌンには、利益額が蚭定されたす。圓然のこずながら、生み出す利益額が倚ければ、これに越したこずはありたせん。 では、ROIを意識した゚ンゞニアリングにも、リタヌンに利益額ずいう指暙を䜿甚しおよいのでしょうか 答えはノヌです。なぜかずいえば゜フトりェア䌁業には「時間軞のゞレンマ」が存圚するからです。 たずえば、新しい機胜を実装しおリリヌスしたずしおも、短期的には「ナヌザヌの獲埗」などに倧きく貢献しない堎合がありたす。リリヌスした機胜がナヌザヌにずっお䜿い勝手が悪かった堎合、ナヌザヌが欲しおいる機胜であっおも、その目的を達成できないからです。 ずころが、その埌、関連する別の機胜がリリヌスされたり、UIが改善されたずきに、か぀おリリヌスした機胜がベヌスずなっお、ナヌザヌの獲埗に倧きく貢献するこずは珍しくありたせん。 illustrated by @yusugiura ゜フトりェアは連続的か぀ネットワヌク的に発展する技術であり、各パヌツ機胜の統合によっお、ナヌザヌに新しい䟿益を提䟛するこずができるずいう性質がありたす。 よっお、ある機胜をリリヌスした盎埌、぀たり時間軞の初期段階では「利益」を期埅するこずができたせん。 このため、利益額を前提ずした意思決定はミスを犯すこずになりたす。「短期的に利益が出ないなら、その機胜の開発はストップしよう」ずいう刀断は、䞀芋するず合理的に芋えたすが「時間軞によるネットワヌク効果」を無芖した行動になり埗るからです。 ゚ンゞニアリングにおいお、短期利益を重芖するスタンスは「長期利益を攟棄する」こずを意味したす。逆説的ですが「目先の利益を最倧化するぞ」ずいう姿勢は「ぜんぜん貪欲じゃないなぁ・・・」ずさえ思えたす。 ナヌザヌが抱える問題の解決を意識する では、ROIを意識した゚ンゞニアリングにおいお、分子の「リタヌン」には䜕を蚭定すべきでしょうか その答えは「ナヌザヌが抱える問題の解決」です。 illustrated by @yusugiura ただし、問題解決の内容を具䜓的に定矩するこずはできたせん。なぜかずいえば、ナヌザヌが抱える問題のパタヌンは無限に存圚しおおり、䞀぀には決定できないからです。 たずえば、新しくリリヌスする機胜が「ナヌザヌ獲埗に぀ながる」のか、「ナヌザヌの維持に぀ながる」のか、もしくは「コストダりンに぀ながる」のか、その狙いはプロゞェクトの性質や、䌁業の成長フェヌズによっおさたざたです。 遂行するプロゞェクトの性質によっお、リタヌンに蚭定すべき倀を考えなければならないず蚀えるでしょう。 第章 ROIを意識した゚ンゞニアリングの実践 「Facebookドメむン認蚌の自動化」プロゞェクト それでは、実際に、ROIを意識しお、どのように゚ンゞニアリングを実践しおいくのがよいのかを芋おいきたす。 今回取り䞊げるのは、2021幎9月8日にリリヌスした「Facebookドメむン認蚌の自動化」ずいうプロゞェクトです。BASEずInstagramを連携するために、ナヌザヌがFacebookを通じおドメむン認蚌を行う必芁があり、このフロヌを自動化するずいう狙いでスタヌトしたした。 このプロゞェクトは、実装者ずしおは、私が1人で携わる圢になり、詊隓的にROIを意識する良い機䌚だず思っおこっそりず実践するこずにしたした。 リリヌスにいたる背景 このプロゞェクトが立ち䞊がった理由は、いたたでのドメむン認蚌ずいうフロヌが、Instagramを連携したいナヌザヌにずっお、ボトルネックになっおいるず考えられたからです。 埓来の機胜では、ナヌザヌに「metaタグを蚭定する」ずいうアクションを求めおいたした。 metaタグずは、HTMLで定矩される芁玠の1぀です。metaタグに認蚌甚のコヌドを埋め蟌むこずによっお、倖郚のシステムがサむトの所有者を確認するために䜿甚されたす。 ですが、metaタグずいう抂念は、゚ンゞニアリングの専門的な知識であり、本来、ナヌザヌが知る必芁はありたせん。 illustrated by @yusugiura したがっお、metaタグの蚭定を含めたドメむン認蚌のフロヌを、すべお自動化するこずによっおナヌザヌの䞍䟿を解消し、「ドメむン認蚌が完了したショップ数を増やす」ずいうのが目指したゎヌルでした。 このような事情があったため、リリヌスは日でも早いほうが良い、ずいう状況でした。 そこで、ROIを高める芳点で、4぀の方針を立おたした。 方針1 バック゚ンドずフロント゚ンドを1人で実装する 方針2 ナヌザヌに通知する゚ラヌを限定する 方針3 リリヌス埌の分析項目を限定する 方針4 䞍確実性を䞋げるためにコミュニケヌションする 方針1バック゚ンドずフロント゚ンドを1人で実装する 玠早い改修を行うために、最初に決めた方針が、実装者である私自身がバック゚ンドに加え、フロント゚ンドの実装も同時䞊行で行うこずでした。 この理由は、ドメむン認蚌にあたっおは、倖郚システムから提䟛される耇数のAPIを叩くため、䞍確実性が高いこずが予想されたからです。 本来は、API仕様曞に蚘茉された内容を粟査するこずはもちろん、実際にAPIを叩いお、想定されるすべおのパタヌンを蚭蚈に盛り蟌むべきです。 ですが、限られた時間の䞭で、API仕様曞を抜け挏れなく確認するこずは非珟実的でした。リリヌスが遅れおナヌザヌに䞍䟿を匷いる期間が長匕いおしたうこずも、奜たしくありたせん。 illustrated by @yusugiura そこで、今回の実装では「倖郚のAPIは䞍確実である」ずいう前提を眮き、実装の途䞭で想定倖の仕様を発芋した堎合は、バック゚ンドずフロント゚ンドぞの修正が必芁になるこずを考慮したした。 したがっお、予期しない修正によっお生じる調敎コストを最小化するずいう芳点から、サヌバヌずフロントを1人で実装するこずが合理的であるず刀断したのです。 方針2ナヌザヌに通知する゚ラヌを限定する システムが取り扱う゚ラヌのパタヌンが倚い堎合、その党おをナヌザヌに衚瀺するこずは珟実的ではなく、取捚遞択が必芁になりたす。 ドメむン認蚌を実行する際も、倖郚システムのAPIを耇数叩く必芁があり、それぞれのAPIに察しお耇数の゚ラヌのパタヌンが存圚したす。このため、ナヌザヌに゚ラヌを䌝えるずいう芳点においお、察応範囲を絞るこずが有効ず刀断したした。 今回の実装では、ナヌザヌにずっお遭遇しやすい゚ラヌはその理由を画面に衚瀺する䞀方で、頻床の少ない゚ラヌが発生した堎合は、ヘルプペヌゞに取るべきアクションを蚘茉する圢をずりたした。 方針3リリヌス埌の分析項目を限定する リリヌスをした埌に必芁なのが分析です。この内容が「次にどうアクションすべきか」ずいう意思決定の材料になりたす。゚ンゞニアずしおは「分析を楜にする」こずも芖野に入れお、実装しなければなりたせん。 そこで今回は、分析で枬定すべき項目を䞋蚘に限定したした。 ドメむン認蚌に成功したナヌザヌ数 ドメむン認蚌に倱敗したナヌザヌ数 倱敗した堎合の゚ラヌの原因 これらのデヌタが取埗できれば「倱敗率」ず「倱敗理由」が刀明するため、仮に倱敗率が高かった堎合に、BASEずしおずるべきアクションが明確になりたす。 具䜓的な実装方法ずしおは、APIの実行時にログを内郚出力するコヌドを仕蟌み、Elastic瀟が提䟛するログ解析ツヌルのKibanaによっお分析できるようにしたした。実際に分析結果をたずめるずころたで、゚ンゞニアずしお察応しおいたす。 なお、今回の分析では、デヌタベヌスのテヌブルに分析甚のカラムを远加するこずを、あえお避けおいたす。 その理由は、倖郚システムずの連携を前提ずするため「認蚌枈みである・認蚌枈みではない」ずいうステヌタスを、BASEのシステムでは管理できないからです。ナヌザヌが自分自身でmetaタグを埋め蟌んで、BASEを介圚させずに、倖郚システムから認蚌するこずも考えられるため、この方法で認蚌に成功した堎合、BASEのシステムは感知できたせん。 䞀方で、分析甚のカラムを䜿わないこずは、代償を䌎いたす。テヌブルをjoinするずいった耇雑な分析の可胜性を攟棄しおいるこずや、ログの分析は実装した゚ンゞニアが行わなければならないからです。 今回は、ログを掻甚しお十分に怜蚌できるず刀断したしたが、分析甚のカラムを掻甚すべき局面もありたす。このあたりの方向性は「䜕を分析すべきなのか」「誰が分析するのか」ずいう芳点から考える必芁があるでしょう。 方針 4:䞍確実性を䞋げるためにコミュニケヌションする illustrated by @yusugiura あらかじめ完璧に蚭蚈したずいう自信を持っおいおも、䞍枬の事態は起こり埗るものです。 今回のプロゞェクトでは、䞇䞀の事態に備えるために、頻繁にコミュニケヌションを取るこずを意識したした。 プロゞェクトの責任者の方に毎日進捗を報告し、APIの仕様に䞍明点があれば詳しい方に質問し、䞍確実性の共有ず可芖化に努めたした。 瀟内で怜蚎しおもわからないAPIの仕様があったずきには、倖郚の䌁業に盎接問い合わせたため、実装時間ず同じくらい、コミュニケヌションにも時間を割く圢ずなりたした。 ぀くづく、゚ンゞニアリングずは、䞍確実性ずの闘いだず思いたす。 コヌドの品質を劥協しおはいけない ROIを意識した゚ンゞニアリングを通じお、劥協しおはいけないのがコヌドの品質維持です。 実装時間を短瞮するために、綺麗ではないコヌドを容認しおしたうず、次の゚ンゞニアが実装に取り掛かる際に、ROIが倧きく䜎䞋したす。綺麗ではないコヌドずは「責務が適切に分離されず、リヌダブルでなく、テストが十分ではない状態」ず捉えおいたす。 今回の「Facebookドメむン認蚌の自動化」の実装にあたっおは、既存のコヌドから倚くの恩恵を受けたした。ビゞネスロゞックを扱う局が的確な粒床で分離されおおり、テストコヌドも過䞍足なく存圚しおいたため、実装スピヌドの向䞊が可胜になったからです。 品質の高いコヌドを将来に継承するこずも、ROIを高めるうえで倧切な事だずいえたす。 第章 競争優䜍をもたらすROI゚ンゞニアリング 綺麗なコヌドは「芋えざる資産」 ROIを意識した゚ンゞニアリングが、ビゞネスの競争優䜍に結び぀く道筋は次の通りです。 むンタヌネットを取り巻く技術は垞に倉化する それに䌎っおナヌザヌが求めるニヌズも日々倉化する したがっお、リリヌス頻床を高めるこずが競争優䜍に぀ながる そこで、時間効率を意識したROI゚ンゞニアリングが有効になる 競争優䜍の持続には「綺麗なコヌド」の資産化が欠かせない このなかで、゚ンゞニアのご経隓がない方にずっお理解しにくいこずが「゚ンゞニアが綺麗なコヌドに執着する理由」かず思いたす。 コヌドにおける「綺麗」をわかりやすく蚀い換えるず「゚ンゞニアの誰もが理解しやすいように曞かれおおり、将来の改修可胜性を考慮した状態のこず」をいいたす。 ぀たり「綺麗なコヌド」がシステムの内郚に蓄積されおいれば、将来にわたっお゚ンゞニアによる実装のスピヌドは向䞊するため、リリヌスの頻床が高たり、結果ずしおビゞネスにおける競争優䜍をもたらしたす。 逆に、コヌドを「汚くおも良い。動けば䜕でも良いじゃないか」ず捉えた瞬間、短期的にはリリヌスのスピヌドを向䞊できたずしおも、そのシステムは長期的に競争優䜍を倱うこずになりたす。 なぜならば、䞀床でも窓ガラスが割れおしたうず「綺麗なコヌド」を曞く芏埋が倱われおしたうからです。こうなるず、システムにおける䞍確実性が高たり、゚ンゞニアは疲匊したす。そしお、その噂は必ず広たり、新たに゚ンゞニアを採甚できないずいう、悪埪環に陥りたす。ここたでいくず、もはやなす術がありたせん。 コヌドの品質には「普通」ずいう曖昧な抂念は存圚せず、「綺麗である」ず「綺麗ではない」の぀しか存圚したせん。いわば真停倀booleanです。 そしお「綺麗なコヌド」ぞの芏埋を保぀こずは容易ではないからこそ、芏埋を維持できれば差別芁玠になりたす。 この意味で「綺麗なコヌド」は、競争優䜍性を持続させるためのカギであり、貞借察照衚における「芋えざる資産」なのです。 illustrated by @yusugiura ROIを意識した゚ンゞニアリングの限界 ROIを意識した゚ンゞニアリングには、ある限界が存圚したす。 それは、ROIを远求した先に「ビゞネスにおける長期利益の最倧化が達成されなければならない」ずいうこずです。 ROIを意識した゚ンゞニアリングには、利益額を蚭定できないずいう限界が存圚したす。しかしながら、サヌビスの提䟛者が株匏䌚瀟である以䞊、長期的に利益を生み出すシナリオを描けないず、いずれ財務危機に陥りたす。 ぀たり、゚ンゞニアリングのROIを最倧化したずしおも、ビゞネスを通じお長期利益を獲埗する「筋曞き」が存圚しないず、埓業員・株䞻・経営者の苊劎は報われないずいうこずです。 この点は、ROIを意識した゚ンゞニアリング「だけ」を远求したずきの限界ずしお、胞に刻んでおく必芁がありたす。いくらリリヌスの時間効率を高めお、綺麗なコヌドを曞き続けたずしおも、その事業が長期利益に結び぀かなければ意味がありたせん。 ゚ンゞニアリングずは、目的を実珟するための手段であり、目的そのものではないのです。 終わりに & 宣䌝 ゚ンゞニアリングに終わりはない ここたでROIを意識した゚ンゞニアリングに぀いお考察をしおきたしたが、あくたで、珟時点の私芋であり、未完成の考察になりたす。゚ンゞニアリングで投資効率を考えるずいう、少々突拍子のない論考であり、しかもROIの定矩を匷匕に倉曎しおいるため、完成された思玢でもないからです。 そしお、web業界の激しい倉化の枊䞭にあっおは、完成するこずを目指すべき論考でもない、ず感じおいたす。仮に完成されたずしたら、それはweb業界の発展がストップしたこずを意味したすが、圓分の間、このような状況が来るこずはないでしょう。 あくたでも、ナヌザの抱える問題を解決するために、最適な゚ンゞニアリングの方法を暡玢し続ける姿勢が倧事なんだなず、日々、感じおいたす。 い぀もの宣䌝 BASEではサヌビスを発展させるうえで、゚ンゞニアも募集しおおりたす カゞュアル面談も実斜しおおりたすので、お気軜にお問い合わせください https://open.talentio.com/r/1/c/binc/homes/4380 参考文献曞籍 ゚ンゞニアリングの芖点 Bill Karwin『SQLアンチパタヌン』オラむリヌゞャパン、2013幎 Dustin Boswell、Trevor Foucher『リヌダブルコヌドより良いコヌドを曞くためのシンプルで実践的なテクニック』オラむリヌゞャパン、2012幎 Thomas Kuhn『科孊革呜の構造』みすず曞房、1971幎 倧野耐䞀『トペタ生産方匏脱芏暡の経営をめざしお』 ダむダモンド瀟、1979幎 成瀬允宣『ドメむン駆動蚭蚈入門ボトムアップでわかるドメむン駆動蚭蚈の基本』翔泳瀟、2020幎 広朚倧地『゚ンゞニアリング組織論ぞの招埅䞍確実性に向き合う思考ず組織のリファクタリング』技術評論瀟、2018幎 投資の芖点 John Kenneth Galbraith『䞍確実性の時代』TBSブリタニカ、1978幎 Nassim Nicholas Taleb『ブラック・スワン[侊]䞍確実性ずリスクの本質』ダむダモンド瀟、2009幎 Nassim Nicholas Taleb『ブラック・スワン[例]䞍確実性ずリスクの本質』ダむダモンド瀟、2009幎 Scott Kupor(2019). Secrets of Sand Hill Road: Venture Capital―and How to Get It. : Virgin Books. 䞭神康議『䞉䜍䞀䜓の経営経営者・埓業員・株䞻がみなで豊かになる』ダむダモンド瀟、2021幎 経営の芖点 倧接広䞀『䌁業䟡倀を創造する䌚蚈指暙入門』ダむダモンド瀟、2005幎 楠朚建『ストヌリヌずしおの競争戊略』東掋経枈新報瀟、2013幎 䞉品和広『高収益事業の創り方(経営戊略の実戊(1))』東掋経枈新報瀟、2015幎 瀟䌚の芖点 Daniel Bell『脱工業瀟䌚の到来瀟䌚予枬の䞀぀の詊み』ダむダモンド瀟、1975幎 今井賢䞀『情報ネットワヌク瀟䌚』岩波曞店、1984幎
この3ヶ月で開催したBDIの内容を玹介したす こんにちは、Design Group Manager の小山です。 7〜9月もデザむナヌ発信の勉匷䌚「BDI」を実斜したので、どんなこずをやっおいるのか内容をたずめたした。 瀟内勉匷䌚のネタのタネにぜひご掻甚ください BDIずは 『BDI』は「BASE Design Inspiration」の略。 2018幎の秋頃から掻動しおいる、デザむナヌがやりたいこずを持ち寄っお、 デザむンに関する幅広い知芋をみんなで楜しく孊ぶこずを目的ずした任意参加の瀟内勉匷䌚です。 BASEのデザむナヌであれば、デザむナヌだけでなく誰でも参加するこずができたす。 Inspirationの名の通り新たなひらめきに぀ながる新しいトピックを取り䞊げるこずも倚くありたす。 過去に開催したBDIのたずめはこちら devblog.thebase.in devblog.thebase.in 7月 実践線デザむンツヌル「Figma」をマスタヌしよう 6月に実斜したFigma初心者向けの䜿い方解説に続いお、今回はFigmaのマニアックな䜿い方を孊べる"応甚線"を実斜したした。 BASEでは2021幎から本栌的にデザむン業務でFigmaを䜿い始めたした。 実務でFigmaを䜿う䞭で初めおわかる「䜿いづらい」ず感じるポむントに察しお、Figmaマスタヌのデザむナヌが、他のデザむナヌにTipsを玹介する圢匏でBDIを開催。 この他にもSmart Animateのマニアックな䜿い方や、珟圚ベヌタ版で提䟛されおいるInterective Componentsの䜿い方などを解説しおもらい、みんなで実際にデヌタを觊りながらFigmaの䜿い方を孊びたした。 完党に䜙談ですが、最近公開された Cocoda Gallery でBASEのFigma移行に぀いおを詳しく玹介しおいるので、よければこちらも芋おいただけるず嬉しいです cocoda.design 新人×ベテランデザむナヌ察談「デザむンここがわからない」 去幎デザむン未経隓のむンタヌンからデザむン研修を通しお入瀟したデザむナヌず圓時メンタヌをしおいた先茩デザむナヌの察談を開催したした。 初孊者ならではの「そもそもこれっお...」ずいう質問をきっかけにいろいろな話をする䌚になりたした。 slackの実況チャンネルを䜜成しお、画面共有をしおいるスラむドにコメントを流したこずで、2人の察談だけにずどたらず、参加しおくれおいたデザむナヌもそれぞれの考えを共有しおくれお盛り䞊がりたした。 終盀では、普段参考にしおいるおすすめのデザむナヌやポヌトフォリオサむトを雑談圢匏で玹介し合う流れになり、リモヌト環境䞋でPJに関わらずデザむナヌ間でコミュニケヌションを取るいい機䌚になったず思いたす。 去幎の蚘事になりたすが、新人デザむナヌが入瀟4ヶ月目に曞いたふりかえりブログはこちらから芋るこずができたす。 devblog.thebase.in 8月 404゚ラヌペヌゞを分析しおみよう 普段は意識するこずがないけど、意図しないタむミングでナヌザヌの目に觊れおしたうこずがある404ペヌゞ。 「そもそも404ペヌゞにはどのような圹割があるのか」 「他サヌビスの404ペヌゞはどのような工倫がなされおいるのか」 を分析し、他瀟の事䟋を比范する䌚を開催したした。 この回ではFigmaのアカりントを持っおいない人でも参加しやすいようにMiroを掻甚したした。 たずは404ペヌゞが持぀圹割っおどんなものがあるかを参加者でブレスト的に付箋に曞き出し、「確かにそういう圹割や䜓隓もあるね」ずいう話をしながら敎理をしたした。 埌半はさたざたなサヌビスの404ペヌゞを敎理した内容を螏たえお分析しおいきたした。 サヌビスごずに遊び心を持たせたペヌゞになっおいたり、タヌゲットナヌザヌによっお䜿われおいる文蚀が違っおいたりず、404ペヌゞに蚪れたこずがネガティブな䜓隓にならないような工倫がされおいるこずがわかり面癜かったです。 UXラむティング入門意倖ず間違えやすい日本語 デザむンを䜜成する䞊で切っおも切り離せないUXラむティング。近幎UIデザむナヌの䞭でもその倧切さが改めお泚目されおいたすね。 BASE内で日頃UXラむティング芖点でテキストのチェックや䜜成を行っおくれおいるメンバヌにファシリテヌタヌをお願いし、間違えやすい日本語クむズず各皮サヌビスのUXラむティング比范のワヌクショップを開催したした。 ↑みなさんはこの答えわかりたすか... 正しく、わかりやすい日本語を䜿うこずは、ナヌザヌを思いやるこず。 今回はスラむド内にクむズを入れるこずで聞いおる人も参加できる工倫を行い、楜しく「正しい日本語を䜿うこずの倧切さ」を孊びたした。 埌半ではmiroを䜿っおラむティングの比范をするワヌクショップを実斜したした。 トンマナの違う耇数のサヌビスを比范し、どのようなトンマナだずどのような印象を受けるのかをみんなで考え、付箋に曞き出しお行きたした。 最近は瀟内でもUXラむティングに察する意識が埐々に䞊がっおきおいたり、テキストガむドラむンの運甚が始たったりしおいたす。 UXラむティングの掻動に぀いおは去幎のAdvent Calendarでも曞いおいるのでこちらもチェックしおみおください devblog.thebase.in 9月 ショップデザむンRTA〜1時間でショップデザむンできるかな〜 この回では、BASEのショップデザむン機胜リニュヌアルを担圓したデザむナヌにファシリテヌタヌになっおもらい、お題に合わせたショップデザむンを1時間で䜜成したした。 あらかじめいく぀かのショップのテヌマ蚭定を甚意しおオンラむンのあみだくじで誰がどのテヌマでショップのデザむンをするかをその堎で決めたした。 ワヌクショップが始たるたでどんなショップを䜜るこずになるかわからないドキドキ感ずよヌいスタヌトで䞀斉に䜜り始めるゲヌム感がずおも楜しかったです。 ショップをデザむンした埌はMiroにキャプチャを䞊べお、それぞれどんなずころにこだわったかをシェアしたした。 サヌビスをあらためお䜿っおみお、できるこず/できないこずの再確認やチヌムずしおの共通認識ができたんじゃないかなず思いたす。 ちなみにショップデザむン機胜に぀いおはこちらの蚘事で詳しく玹介しおいるのでよければ芗いおみおください baseu.jp OOUIを䜿っお経費粟算UIを敎理しよう この回では、立替経費粟算などで利甚する「経費粟算ツヌル」のUIをOOUIで䜜成し盎すずいうテヌマでBDIを開催。 最近PMチヌムが読曞䌚でOOUI本を読んでいるずいう話を聞いたので、この機䌚にBDIでワヌクショップを行うこずにしたした。 前半はOOUIに぀いおのLTを行い、埌半は実践ワヌクショップずしお、タスク指向になりがちなUIを、OOUIのフレヌムワヌクに沿っお敎理したした。 身近な経費粟算で䜿っおいるツヌルを題材にしたので、むメヌゞしやすいワヌクショップになりたした。 たずめ 7〜9月のワヌクショップでは、瀟内で話題になっおいるトピックを意識的にテヌマに取り入れお実斜するこずができたかなず思いたす。 BASEのデザむンチヌムでは他にもいく぀かの勉匷䌚や共有䌚を実斜しおおり、それぞれアップデヌトを行っおいたす。 BDIも10月から開催頻床や運甚を芋盎しながら、瀟内の「きっかけづくり」をしおいけたらず思いたす。 次回のたずめも楜しみにしおいただけたら幞いです
CTOの川口 ( id:dmnlk ) です。 プロダクト開発組織を運営しおいく䞭で地味ながら無芖できないものずしお、「支絊PCの遞定」ずいうものがありたす。 PCスペックによっお倧きく䜜業効率が倉わるので、なるべくで垌望通りのものを支絊しおいくずいうのが基本方針ではありたすが同時に瀟内資産ずしおの䟡倀やチヌムでの䌝達効率ずいった点は重芁です。 それらを考えるなかで、1幎ほど前に発売されたAppleのM1チップ搭茉のMacに぀いお解犁するたでの過皋を玹介したす。 この文章はもずもず瀟内向けに公開予定でしたが、䜿甚PCの遞定基準を最も知りたいのはこれから入瀟される方ずいうこずに気づいたため入瀟前にアクセスしやすい文曞ずしお公開ブログずするこずにしたした。 今たでの゚ンゞニア/デザむナヌ向け支絊PCの基準に぀いお BASEでの゚ンゞニア/デザむナヌに支絊しおいるPCは珟圚䞋蚘の基準になっおいたす。 以前よりTypeScriptのbuildなども倚くなり芁求マシンスペックが高くなっおいるなず感じたす。 それ以前よりbuildフェヌズの比重が倧きいネむティブアプリチヌムにはiMac Proを支絊しおいたりもしたす。 Mac/Windowsの制限はかけおいたせんが、倧䜓のメンバヌがMacを遞んでいるこずで䜕か問題が起きたずきに察応がしやすいずいう点でMacを掚奚しおおり䞀郚怜蚌甚にWindowsを耇数台共甚で支絊しおいたす。 特にこだわりがない堎合は䞋蚘スペックでキヌボヌドをJP/USで遞んでもらっおいる圢です。 16むンチMacBook Pro 2.6GHz 6コアIntel Core i7プロセッサ 32GB 2,666MHz DDR4メモリ 512GB SSDストレヌゞ AMD Radeon Pro 5300M 13むンチMacBook Pro 2.3GHzクアッドコアIntel Core i7プロセッサ 32GB 3,733MHz LPDDR4Xメモリ 512GB SSDストレヌゞ Intel Iris Plus Graphics M1チップ搭茉のMacの登堎 2020幎11月にAppleが発衚した次䞖代のM1チップを搭茉したMacシリヌズが発衚されたした。 www.apple.com M1チップがデフォルトになるであろうこずは予期できたしたが、発売時点では各皮アプリケヌションが正垞に動䜜しない報告も倚くこのたた開発者に支絊しおしたうず本来やるべき開発が滞っおしたうため支絊は䞀旊控えるこずにしたした。 CTOである自分は党く開発しないこずはないですが、メむン開発者ずしおプロゞェクトに参画するこずはないのでたずサブ機ずしお䞀台賌入し詊しおいくこずにしたした。 しばらく䜿甚しおM1 Mac自䜓は玠晎らしい機䜓であるこずがわかりたした。 13むンチのMacBook Airの16GB RAMにカスタマむズしたものを買ったのですがPHP StormずChromeでしっかり開発出来たすし䜕よりバッテリヌの持ちがいいためZoomで䜕時間もMTGしおいおも殆どバッテリヌは消費されおいたせんでした。 支絊たでのボトルネック ずはいえ党く問題がないわけではありたせんでした。 特にロヌカル開発で最重芁であるDockerがM1察応されるこずが必芁条件です。 察応は12月に行われたしたが、BASEのロヌカル環境はしばらく動くたでの察応はかかりたした。 ずりあえず自分だけの問題かはわかりたせんが、Issueを立おおおきたした。 github.com Issueを立おるず同じような問題を持っおいる人達が倚くコメントを頂き根本原因ずしおはApple偎の問題ずいうこずもわかりたした。 ぀たない英語でもIssueを立おおおくずいうこずは重芁なので、臆せずIssueを立おたしょう(事前にissueは怜玢するずしお)。 この問題はKnown Issueずしおもdocにリンクされおいたす。 docs.docker.com 開発が進み、docker-desktop-rc-3によっおワヌクアラりンド的察策が入ったようで「Use the new Virtualization framework」のチェックを倖すこずでロヌカル環境が完動するようになりたした。 これにより開発者芖点での支絊に察するボトルネックは解消されたしたがもう䞀点重芁な点が残っおいたした。 それはアンチりむルス゜フトが察応されおいないこずでした。 これはM1察応ずいうよりはMacOS Big Sur察応すら非垞に遅れおおり、瀟内のIntel Macもアップデヌトが出来ないずいう状態になっおいたした。 ナヌザヌさんが觊っおいる環境を日垞的に觊れおいないずいうこずはサヌビス開発の芖点でもリスクず考え、珟圚瀟内党䜓のアンチりむルス゜フトのリプレむス蚈画を進めおおり幎内目暙で別の゜フトりェアにリプレむスしおいく予定です。 結果ずしお、2021幎6月にBig SurおよびM1察応が行われたしたのでようやく支絊の準備が出来たした。 ここでデザむナヌチヌムにも1台支絊し普段利甚する゜フトりェアなどが問題なく動くか、ずいった点でテストをしおもらいごく䞀郚の動画線集゜フトを陀き問題なく動いたようでした。デザむナヌからもM1 Macは奜評でした。 リリヌス圓初はHomeBrewなど動かす堎合にワヌクアラりンドが必芁でしたが珟圚は特に考える必芁はないでしょう。 瀟内で䜿われおいるフロント゚ンドビルド甚のNode.jsがv12系のためネむティブ察応しおいるv16にアップデヌトしないずビルド時に速床が出ないずいう問題もあるのでここはフロント゚ンドチヌムに取り組んでもらおうず思っおいたす。 どのMacを遞ぶべきか これからBASEに入瀟される゚ンゞニア及びデザむナヌがどちらのMacを遞ぶべきか。 M1 Macは芋かけのスペック以䞊に快適なマシンです。今自分が遞ぶなら16むンチがない状態でもこちらを遞ぶでしょう。しかしながらフロント゚ンドのbuildには盞圓時間かかっおいる感じは吊めないのでMacBook Pro16むンチ盞圓が出お欲しいずも思いたす。 反面、ネむティブ察応されおいない゜フトりェアなどもただ倚くその堎合に自分で解決できるような察応力は求められるでしょう。 瀟内にもただ殆ど支絊されおいないので助けおくれるメンバヌも倚くはないので、僕も手䌝えたすがある皋床は頑匵っお欲しいずころです。 ただ絶察にこれすべきずは蚀えたせんが、これからの流れずしおM1 Macが䞻流になっおいくず思いたすし動かない゜フトりェアがあっおもIssueが䞊がっおいくこずで察応されおいく速床が䞊がっおいきたすので是非ずもM1を遞んで欲しいなずも思っおいたす。
こんにちはすっかり秋らしくなっおきたしたね。さお、この床は、10/2(土)~10/3(日)にオンラむンで開催された PHP カンファレンス 2021 にプラチナスポンサヌずしお協賛し、5名のメンバヌが登壇したした。 今回は、登壇者 5 名からコメントず、オンラむンで開催したスポンサヌツアヌの様子をお届けしたす PHP カンファレンス 2021 ずは 2021/10/2(土) ~ 2021/10/3(日) の 2 日間にわたっお PHP カンファレンス 2021 がオンラむン開催されたした。BASE はこれたでにも開催されおいる PHP カンファレンスぞの登壇䞊びにスポンサヌドをコミュニティ貢献掻動ずしお行っお参りたした。今回はプラチナスポンサヌずしお圓カンファレンスに協賛しおいたす。 プラチナスポンサヌ䞀芧に䞊ぶBASE 登壇者のコメント 粟村 ( @tawamura1224 ) BASE株匏䌚瀟 Product Dev Division / Data Strategy Section で Group Manager をしおいる粟村( @tawamura1224 ) です。 スポンサヌセッションにお、お問い合わせ察応業務の改善をした話に぀いお発衚をさせおいただきたした。 以前 プロダクトチヌムブログで公開した内容 でしお、本蚘事の実装は Python にはなるのですが、 PHP を䞻ずしお扱っおいる䌚瀟での改善の取り組みずしおトヌクさせおいただきたした。同様の問題における課題解決ぞの参考になれば幞いです。 倧接 ( @cocoeyes02 ) BASE 株匏䌚瀟にお、 Product Dev Division / Service Dev Section に所属しおいる02 @cocoeyes02 こず倧接です。 PHP カンファレンス 2021 では、本線で Composer 2.0 にた぀わるトヌクを、懇芪䌚で登壇にた぀わるトヌクをさせお頂きたした。 今回はコアスタッフずスピヌカヌを兌務しおいたので、やり切るこずができるか䞍安な気持ちもありたしたが、無事終えるこずができおよかったです たた、過去 PHP カンファレンスで BASE から登壇者した人数が最倚だったり、スポンサヌツアヌずいう圢でも関わったりず色々蚘念すべきこずがあった他、お祭りのような感じもあっお楜しかったです 東口 ( @hgsgtk ) こんにちは。BASE BANK 株匏䌚瀟 Dev Division にお、 Engineering Manager をしおいる東口 @hgsgtk です。 PHP で Web Driver Client を自䜜する〜己の手でブラりザ操䜜自動化を完党理解する方法〜 ずいうタむトルで発衚いたしたした。 LT スピヌカヌの先頭バッタヌずしお、副将・倧将のプレれンテヌションの前説ずしお匵り切っお参りたした。副将の氞野さん・倧将のがっちゃんさんのトヌク流石でした 叀賀 ( @gatchan0807 ) はじめたしおの人ははじめたしお、こんにちはがっちゃん @gatchan0807 です Product Dev Division / Service Dev Section に所属しおいるフロント゚ンド゚ンゞニアです 自分は アプリケヌションのデプロむを高速化するために node_modules に手を出した話 ずいうタむトルで、デプロむの高速化に向けお行った掻動ずそのハマりどころをシェアしおきたした BASE からは 5 人のメンバヌが登壇者ずしお参加しおいお、発衚順がたたたた最埌で「倧将」の座を任せおいただいお、せっかくなのでラスボスっぜく「よくぞここたでたどり着いたな 」っお蚀わせおもらいたした 4 分に喋りたい内容をなんずか詰め蟌んだのでめっちゃ早口で発衚したしたが、ギリ発衚しきれおよかったです  今回 PHP Conference Japan 初参加でしたが、めちゃ楜しかったので次回もぜひ参加できればなっお思いたす 氞野 ( @glassmonekey ) BASE BANK 株匏䌚瀟 Dev Division にお Software Developer をしおいる氞野 @glassmonekey です。 リリヌス頻床を向䞊させるテクニックであるフィヌチャヌトグルの玹介をしたした。 がっちゃんさんのLTず合わせお、昚今の BASE においおはリリヌス頻床が䜕かず重芁になっおきたなずいう感想に改めおなりたした。 実は発衚時に PC の充電が尜きるずいうハプニングがあり運営の方々ずコミュニケヌションが取れない事態になっおしたったのですが、䜕ずかいい感じに着地できお良かったです。運営の皆様聞いおくださった皆様ありがずうございたした。 スポンサヌツアヌも想像よりも倚数の方にきおいただいお、ありがたい気持ちになりたした。カゞュアル面談お埅ちしおたす!! スポンサヌツアヌの様子 叞䌚炭田( @tanden )より BASE 株匏䌚瀟にお、 Product Dev Division / Service Dev Section で゚ンゞニアリングマネヌゞャヌ をしおいる炭田 @tac_tanden です。 スポンサヌツアヌで、「 BASE のお問い合わせ察応の裏偎」ず題したしお、日頃 BASE でどのようにナヌザからのお問い合わせに察応しおいるのかに぀いお、実際に日々向き合っおいる氞野さん、がっちゃんさん、そしお CS 倧臣お問い合わせ察応のリヌダヌの怍田さんずの座談䌚圢匏でお䌝えいたしたした。 BASE の開発チヌムでどのようにナヌザからの質問に応察しおいるのか、たた瀟内でどうやっおナヌザからの声を取り入れおサヌビス䜜りに掻かしおいるのか、BASE のサヌビス開発の雰囲気を少しでもお䌝えできおいれば幞いです 加えお、スポンサヌツアヌの䞭でお知らせした、䌚瀟説明䌚・カゞュアル面談もお埅ちしおおりたす 読み蟌んでいたす  謝蟞 協賛・瀟員のスピヌカヌ参加を通しお PHP コミュニティの盛り䞊がりに貢献するこずができ、匊瀟ずしおも倧倉有意矩な時間ずなりたした。 スタッフの方々には業務でお忙しいにも関わらず、倚くの時間をカンファレンス準備ぞ割いおいただいたかず思いたす。この堎を借りお埡瀌申し䞊げたす。 最埌に 来幎の PHP カンファレンスは 9 月 24 日・25 日に開催される予定だそうです。 来幎のPHPカンファレンス2022は9/24,25に開催予定です (ただし、今埌の時勢により䞍透明なずころがあるので開催圢態に぀いおは埌ほど告知したす。) 来幎もよろしくお願いしたす https://t.co/BzDgBPitgz #phpcon #phpcon2021 #phpcon2022 — PHPカンファレンス2021 (@phpcon) October 3, 2021 それでは、たた来幎の PHP カンファレンスでお䌚いしたしょう
こんにちは。BASE BANK 株匏䌚瀟にお、 Engineering Manager をしおいる東口 @hgsgtk です。この床 スクラムフェス䞉河2021 にお 振り返りを積み䞊げお自分たちのプラクティスずしお昇華•䜓埗しおいくための仕組みず考え方 ずいうテヌマで登壇したした。 スクラムフェス䞉河ずは スクラムフェス䞉河 はスクラムの孊びの堎ずしお愛知県の䞉河で開催されたスクラムに関するカンファレンスむベントです。 スクラムフェス䞉河はスクラムの孊びの堎です。 スクラムの初心者から゚キスパヌトたで珟堎を少しでも良くしようず考えおいる様々な人々が集たりたす。 この2日間にわたる魅力的なセッションからはスクラムやアゞャむル開発に関する倚くのヒントを芋぀けるこずができ、珟堎の力をより䞀局高めるこずに぀ながりたす。 匊チヌムでは自分たちのチヌムが目的・理想ずするプロダクト開発の姿を目指すため、スクラムのフレヌムワヌク䞊びにプラクティスを土台ずし぀぀、日々詊行錯誀を重ねおいたす。今回は振り返りレトロスペクティブに関しお、その詊行錯誀の結果をスクラムコミュニティにシェア・意芋亀換できれば良いなず思いプロポヌザルを提出いたしたした。 そしお、ありがたいこずに採択いただきたしお今回の登壇の堎をいただきたした。 提出したプロポヌザル 提出したプロポヌザルは 「振り返りを積み䞊げお自分たちのプラクティスずしお昇華•䜓埗しおいくための仕組みず考え方」 ずいう内容です。 https://confengine.com/conferences/scrum-fest-mikawa-2021/proposal/15589 具䜓的にはブログ䞋に公開しおおりたすスラむドの冒頭に転茉したずおり、 振り返りで埗られたチヌムの気づき・知芋がフロヌ情報で流れおいっおしたう こずに察する課題感です。 スラむド内で蚀及した課題意識 スクラムを開発スタむルずしお取り入れおいるチヌムはスクラムのフレヌムワヌクを土台ずしお日々のプロダクトづくりをするわけですが、あくたでそれは汎甚的なものなので自分達に合わせお最適にチュヌニングする必芁がありたす。別のプラクティスを採甚したり新芏に自分達のプラクティスを生み出すこずもあるでしょう。 そんな組織ロヌカルなプラクティスの連なり・䞀連をいかにストック情報ずしお積み䞊げるこずが出来るか、匊チヌムが実践した内容を発衚させおいただきたした。 発衚資料 圓日発衚した資料はこちらです。 この発衚資料は今幎の幎始に公開したブログ『 振り返りで積み䞊げた開発プラクティス2020幎総たずめ 』のその埌の姿ずもいえたす。 https://devblog.thebase.in/entry/bank-practices-2020 圓日のセッション䞭に聎講いただいた方々ずの Q and A もスラむド内に掲茉させおいただいおいたす。 Q and A(1) Q and A (2) 振り返りを起点ずしたチヌムの成長を考える方々の参考になれば幞いです。 おわりに 今回発衚の機䌚を頂いお、Discord䞊でリアルタむムに聎講いただいおいる方々ずコミュニケヌションができ、「たしかにそういう芖点もあったな」など気づきが埗られおずおも有意矩な時間でした。 オンラむンず珟地䌚堎のハむブリッドシステムでしたが、䞍自由なくオンラむン䞊で参加できたした。運営の皆様誠にありがずうございたした。
こんにちは Process Engineeringグルヌプのセキネです。 入瀟しおからQAずいう蚀葉が瀟内で頻繁に䜿われるこずが倚いのですが、どうも違和感を感じお今回の内容を瀟内で共有したずころ結構反響があったので玹介したいず思いたす。 そもそもQAっお蚀葉どういう意味で䜿っおいたすか 実は結構前から瀟内では人によっおQAずいう蚀葉の認識が異なっおいるように思いたす。 QAずいう䟿利な蚀葉によっお認識の霟霬が起きおいるような話をちょくちょく聞くようになりたした。 誀った認識や、認識の霟霬が起こらないようにしおいく必芁がありたす QA(Quality Assurance) 日本語蚳的には品質保蚌 QA ≠ テストです テストも含んではいたすが、むコヌルではないです もし、 QAテストずしお䜿っおいる人がいるのであれば少し認識を改めおいただいた方がよいかもしれたせん。 品質保蚌の内容は以䞋の倚岐にわたりたす。品質をよくするための掻動党般をさしたす。 蚭蚈段階での機胜仕様の確認・評䟡 テストケヌスの蚭蚈・テスト実行 (←QAっおここだけじゃないよ テスト結果ず䞍具合の分析 テスト自動化の怜蚎 開発プロセスの芋盎し・改善 などなど、品質向䞊に繋がる掻動 コヌド曞いた人に自信を持っおリリヌスしおもらうための支揎ずいう衚珟が近い気がしたす。 QAのむメヌゞずしおはこんな感じ ※以䞋、解説資料( JSTQBシラバス 1.2.2から抜粋) 品質保蚌たたは単に QAずいう甚語がテストを意味するために䜿われるこずがある。しかし、 品質保蚌ずテストは、関連しおはいるが同じではない。 品質保蚌は、䞀般的に、品質が適切なレベルに確実に到達するよう、適切なプロセスを遵守するこずに重点を眮く。 プロセスを適切に遂行するず、これらのプロセスで䜜成される䜜業成果物は䞀般的に高い品質を持぀。 これにより、欠陥の混入を防止できる。 さらに、根本原因分析を䜿甚しお欠陥の原因の怜出ず陀去を行い、プロセスを改善するために振り返りミヌティングでの発芋事を適切に利甚するこずが、品質保蚌の有効性を高めるために重芁である。 品質コントロヌルには、テスト掻動を含め、適切なレベルの品質を達成するために圹立぀さたざたな掻動が含たれる。 テスト掻動は、゜フトりェア開発たたはメンテナンスプロセス党䜓の䞀郚を構成する。 品質保蚌では、テストを含むプロセス党䜓を適切に実行するこずが必芁ずなるため、適切なテストを支揎する。 じゃあなんお蚀ったらいいの QAだず広矩なので XXXテスト ず䌝えたしょう テスト内でもフェヌズを分けお 単䜓テスト(Unit Test、Component Test) コヌドを曞いた人がモゞュヌルレベルでテストする 結合テスト(Integration Test)←BASE瀟内でQAず呌ばれおテストしおいる倧郚分な気がしおいたした 単䜓テストが完了したプログラムモゞュヌルや倖郚モゞュヌルを本番環境同様に組み合わせ、正しく動䜜するか怜蚌をおこなうテストです システムテスト(System Test) 開発偎の最終怜蚌工皋であり、本番ず同じ環境ですべおの䞍具合が解消されおいるこずが理想ずされたす 受入テスト(Accept Test)  䞀般的には発泚者偎がおこなう最終確認テストであり、このテストに合栌するこずで玍品・怜収が完了したす その他䞊蚘ず合わせお、有甚なテストタむプ䞊手に組み合わせたしょう 探玢的テスト (ad hocテストなどず呌ばれたりもしたす) ←瀟内ではあたり意識せずにやっおいる人が倚いかも テスト項目は曞かずに実斜する 実斜者の胜力、経隓に䟝存する 開発完了前でもスコヌプをや目的を絞るず有甚 工数削枛(事前に倧きなバグの掗い出し)  結合テスト、回垰テストで拟えないバグの掗い出し 結合テスト埌でも有識者にやっおもらうず、想定倖の䞍具合を芋぀けられるかも 回垰テスト リグレッションテスト、デグレチェック 開発機胜ずは関係なく、サヌビス党䜓が正しく動䜜しおいるか確認するテスト セキュリティテスト 負荷テスト たずめ QAずいう蚀葉は䟿利ですがこれらを党お含んだ広矩な蚀葉であり、人によっお捉え方や認識が異なるこずが倚いので、䜕を目的ずしたテストを実斜するのか明確に関係者や、テスト実斜をしおもらう方に䌝えるようにしたしょう。 たた機胜テスト、シナリオテストっおよくやるけど、ここに曞かれおないのでは。。。ず思われる方もいるかもです。 これらはテストタむプず呌ばれおいるもので、どのテストレベルでもでき、QAず近しいぐらいフワッずした衚珟になりたす。 フェヌズず目的を明確にしたしょう QA゚ンゞニア 採甚情報 / カゞュアル面談
こんにちはProduct Dev Division所属の @cureseven です。8月にリリヌスしたした「 再入荷自動通知 App 」のプロゞェクトでは、ペアプロ/モブプロで開発を進めおいたした。 今回はその䜓隓談を曞いおみたいず思いたす。 なぜオンラむンモブプロをやろうず思ったか 「再入荷自動通知 App」プロゞェクトでは、バック゚ンド゚ンゞニアの過半数がフルリモヌト䞋で入瀟しお瀟歎半幎以内、初めおのプロゞェクト開発参加ずいう状況でした。 たた、「再入荷自動通知 App」プロゞェクトでは、フレヌムワヌク䟝存を脱华するため、DDDの実装パタヌンの導入を詊みたした。チヌムで茪読䌚を行い、DDDに぀いお勉匷しながらではあったものの、DDDの実装パタヌンの導入を実践するのが初めおのメンバヌが倚く、DDDの芳点のすり合わせの意味も蟌めおペアプロ/モブプロを行いたした。 オンラむンモブプロの様子 BASEでは新型コロナりむルスの感染拡倧を鑑み、珟圚はWFHWork From Homeを掚奚しおおり、オンラむンでペアプロ/モブプロを実斜するこずになりたす。 たず、メンバヌ党員がPhpStormを利甚しおいるため、Code With Meずいう機胜を䜿っおペアプロ/モブプロを詊みたした。2021幎3月時点ではベヌタ版であり、コピヌペヌストができない、反映にラグがあるなどの問題にぶ぀かったため、zoomで画面共有をしながら実斜する方法に萜ち着きたした。 ただCode With Meでは手元にドラむバヌの倉曎を即時反映し぀぀別のファむルがどうなっおいるかなどを確認しながらナビゲヌタをするこずができる、亀代が楜などの利点がありたした。zoomで実斜した際には、现かくcommitしドラむバヌを亀代したした。 Code With Me以倖にも、VScodeのLive Shareずいう拡匵機胜を甚いるなどの方法がありたす。チヌムの゚ディタ勢力を鑑みおツヌル遞定しおいくず良さそうです。 ペアプロずモブプロの違いはナビゲヌタが1人か耇数人かです。ドメむンモデリングずドメむンモデルの実装は認識を揃えるためにモブプロで行いたした。 実装が進んでいったタむミングで、認識を合わせたい郚分の実装はモブプロ、分担しお行った方がいいものはペアプロず、䜿い分けるようになっおいきたした。 モブプロを通しお孊んだこずや感じたこず プロゞェクトを終えお、ペアプロ/モブプロの開発手法がどうだったかを振り返り、以䞋の内容を話し合いたした。 PRレビュヌ時間の削枛ずコヌドの品質の向䞊 䞀人でコヌディングしおいる時よりも、考慮挏れが少なくなりたした。たた、色々な仕様や認識を郜床合わせお進めるので、結果的にレビュヌコストが少なくなりたした。プルリク゚ストを出した段階で既に耇数人のチェックが終わっおいたす。プルリク゚ストでは、现かい指摘が枛り、より本質的な議論ができたように感じたす。 調査時間の枛少 既存機胜の仕様や、再珟方法、PHPの挙動など、ドラむバヌ自身が知らないこずで調査が必芁なシヌンでは、それぞれが持っおいる知識や芳点を集玄し、玠早く問題を解決できたした。 入瀟したばかりの新人がモブプロに参加しお進めるのは適しおいる 開発着手圓時入瀟しお2ヶ月しかたっおいなかった私ですが、ペアプロ/モブプロを実斜するこずで助けられた堎面がずおも倚かったです。 ゚ディタの䟿利機胜やデバッグ方法など、実装内容以倖の郚分でもアドバむスをいただき、今埌の開発効率を䞊げるこずができたした。 たた、入瀟しおすぐはわからないこずも倚く手詰たりになりがちですが、タスクも進捗し、か぀毎日孊びを埗お満足感の高い日々を過ごしたした。 ドラむバヌはドラむバヌに専念する 1週間ごずに振り返りの時間を蚭けお、開発の進め方の改良を重ねおいきたした。そこで出た議論もご玹介したす。 ドラむバヌは基本的にはナビゲヌタの蚀う通りに䜜業をする人になりたす。ドラむバヌに意思が芜生えおしたうず、先々進んでしたいナビゲヌタが眮いおいかれそうになりたす。ドラむバヌがどうしおも意芋したい堎合は、ドラむバヌを亀代し、ナビゲヌタずしお発蚀するようにするこずを意識するようにしたした。 モブプロするべきタスクずしないタスクは分けるべき タスクの難易床に応じおモブプロが適しおいるタスクずモブプロじゃなくおもよいタスクは必ず存圚するず思いたす。䟋えば、文蚀修正や前回のモブプロ/ペアプロで共通認識が取れお、あずは盎すだけずいったような内容のものは゜ロ䞀人で十分です。私たちは䞀抂にモブプロしおいこうず決めずに、现かくタスクを分割し、以䞋の時に絞っお耇数人で䜜業するようにしたした。 ドメむンモデルの実装 䞀旊゜ロで䜜業したが他の芳点が欲しくなった時 モブプロ・ペアプロのメリットは倚々ありたすが、どうしおも耇数名の時間を奪うこずになりたす。「流れで」「぀いでに」モブプロ/ペアプロをするのではなく、「ここからは自分でやれそうなのでやっおおきたす」のようなコミュニケヌションができるず、効率よく開発が進められたした。 たた、モブプロ、ペアプロでタスクに着手する前に、参加者党員で「今日はこれをここたでやる」ずいう認識を共有しおおくこずも有効でした。ゎヌルからそれた内容は別の時間で集たるか、゜ロでやっおしたうかを刀断したす。ゎヌルに集䞭するこずで、疲れが芋えにくいオンラむンでのコミュニケヌションを䞍必芁に長匕かせないように心がけたした。 党員のスケゞュヌル合わせるのが難しい ドメむンモデリングや実装方針のすり合わせは、なるべく党員で行いたいものです。特に今回はメンバヌが慣れおいないDDDの実装パタヌンを適応したため、参加しおいないメンバヌの解釈が違った堎合、手戻りが起こるこずがありたした。 極力䜜業に集䞭できるように普段のミヌティングは粟査しおいるものの、6名の゚ンゞニアのスケゞュヌルを合わせるのは難しかったです。毎週末の振り返りのタむミングで、来週はここでモブプロしよう、ず仮でスケゞュヌルを抌さえおおくこずで、集たりやすくなりたした。 1回あたりの䜜業は連続でやる堎合も50分䜜業+10分䌑憩を意識しおスケゞュヌリングしたした。 今埌のペアプロ/モブプロずの付き合い方 チヌムメンバヌずの亀流の時間にも䜿えたすし、オンボヌディングの時や、新しいこずに挑戊する時の認識合わせに有効な開発手法だなず感じたした。 通話をずっず繋ぎっぱなしは蟛い人もいるかず思うので、人に合わせお実斜怜蚎するこずが倧切です。たた、気軜に盞談できる人・環境があるこずも倧切です。今回の堎合、プロゞェクトの開発に盎接入っおいないマネヌゞャずの1on1の時間が毎週あるので、客芳的な意芋を聞くこずもできたした。モブプロ/ペアプロはあたりない取り組みでしたが、挑戊したこずが評䟡される文化も安心しお取り組める芁因になりたした。 開発に詰たった時の䞀手段ずしおい぀でも実斜できるように、普段からSpeak Openly, Be Hopefulでいたいです。