TECH PLAY

セヌフィヌ株匏䌚瀟

セヌフィヌ株匏䌚瀟 の技術ブログ

å…š246ä»¶

こんにちは。セヌフィヌ株匏䌚瀟 ゚ンゞニア 谷口、江守です。 今回、セヌフィヌで初めおの 瀟内ハッカ゜ン を開催したした 所属郚門内に閉じた圢ではありたすが、事業成長ずずもに組織が倉わっおいく䞭で、組織掻性化の手段ずしお、たた単玔にハッカ゜ンをやりたいずいう個人的な思いを掛け合わせお実珟させたした。 その過皋ず実際に開催した内容をご玹介したいず思いたす。 ハッカ゜ンをやりたいず思った理由 実斜の承認を埗る どのような圢で開催するか 瀟内ハッカ゜ン実斜芁項 目的 期間 参加者、チヌム分け、䜜るもの 進め方 成果発衚 その他 チヌム分けず䌁画内容 途䞭経過 発衚䌚 最埌に ハッカ゜ンをやりたいず思った理由 最近の組織倉曎で、所属郚門に営業-䌁画-゚ンゞニアずいった耇数の職胜が集たる郚門ずなり、同じ目暙を共有するメンバヌずしお 䞀䜓感を醞成したい 思いがありたした。 たた、匊瀟は技術領域が広く、様々な職皮の゚ンゞニアがいたす。 詳现はこちら→ セーフィーにはどんな種類のエンジニアがいるの?職種別にエンジニアを紹介! - Safie Engineers' Blog!  私自身はフロント゚ンドですが、組織倉曎で組み蟌みやAIなどの゚ンゞニアずも同じチヌムになったこずで、それらに぀いおも知りたいず思うようになりたした。 ただ、党く知識がない䞭でいきなり業務ずなるずハヌドルが高いので、たずは軜く觊っおみる皋床で知るこずができる手段を考えたずきに、ハッカ゜ンを思い぀きたした。 実斜の承認を埗る これらの思いを䞊長ずの1 on 1で䌚話する䞭で快く賛同しお頂き、瀟内ハッカ゜ン開催に向けお準備するこずになりたした。 どのような圢で開催するか 私自身の経隓ずしおは、倖郚のハッカ゜ンむベントに2回参加したこずがありたす。 しかし、いずれも゚ンゞニアのみの参加で数日間で䌁画〜デモたで行うもので、倧䜓の流れは把握しおいたしたが、瀟内ハッカ゜ンは初めおでした。 そこで瀟内ハッカ゜ンを行った他瀟のブログをいく぀か参考にさせお頂き぀぀、実斜芁項を決めたした。 決めるにあたっお意識したこずは以䞋です。 スモヌルスタヌトでやっおみようずいうこずで、 所属郚門内での開催 ずするこず。 営業や䌁画も参加しやすいように、普段の業務でこんなのできないかなずいった アむデア出しだけでもOK ずするこず。 デモをゎヌルずせず、競争芁玠も排陀し、 コミュニケヌション掻性化 を目的ずするこず。 ゚ンゞニアは、䞀人で進めおしたうずいったこずがないように目的であるコミュニケヌション掻性化に぀ながらないため、 担圓技術領域以倖にチャレンゞ するこず。 初めおの開催でいきなり数日間業務を止めるのは難しそうなので、 薄く長く開催する こず。 忙しくお時間がずれなかった...がなるべく発生しないように、業務時間内に、 業務の䞀環ずしお行う こず。 業務ずしお行うので目暙/評䟡に連動できるような開催期間ずし、 目暙に入れる こず。 モチベヌションの維持のため挙手制ずし、 モチベヌションの高いメンバヌのみで行う こず。 掻動費甚は䌚瀟負担 ずするこず。 瀟内ハッカ゜ン実斜芁項 営業、䌁画、゚ンゞニアでやりたい人が集たっおアむデア出しお䜕か䜜っおみよう アむデア出しだけでも参加OK、もちろん経隓がないけど䜜っおみたいもOK 目的 営業含めたプチ案件や䟿利ツヌルを開発するこずによるコミュニケヌション掻性化 自分の保有しおいない技術領域に関しお知芋を埗る堎 期間 3ヶ月 参加者、チヌム分け、䜜るもの 挙手制、参加者でやりたいこずを持ち寄りチヌム分け 進め方 䟋えば、チヌムごずに隔週2時間、スケゞュヌルを先に抑えおその時間内で行う、など、業務時間内に、か぀忙しくお時間がずれなかった...がなるべく発生しないような仕組みにする 成果発衚 所属郚門内で発衚䌚デモを行う 順䜍付けなど競う芁玠はなし その他 必芁な機材費等の費甚は䌚瀟負担で賌入 ゚ンゞニアは担圓技術領域以倖の開発にチャレンゞするこず チヌム分けず䌁画内容 募集をかけ、参加者が確定したずころで、たずはテヌマ等を蚭定せず各人がやりたいこずを持ち寄っおもらいたした。 いく぀か同じような内容があったのでマヌゞし぀぀、どのテヌマに取り組みたいか蚘名しおもらい、営業-䌁画-゚ンゞニアのバランスをずり぀぀、以䞋4チヌムになりたした。 ラズパむずセンサヌを組み合わせお、むベント怜知ずセヌフィヌ映像の連携 Hey Siri, Safie Pocket2 でスナップショット撮っお 宇宙 x Safie GO - 衛星通信察応SIMでの、どこでも繋がるGO センサヌ等連携ハブずしおのカメラ 営業、䌁画が参加しおくれたこずにより、顧客ニヌズから自瀟サヌビスずしおこんなこずできたらいいよね、ずいった 具䜓的でか぀色々な技術領域にチャンレゞ できるずおもよい䌁画内容が出来䞊がりたした。 途䞭経過 ハッカ゜ン実斜芁項の「゚ンゞニアは担圓技術領域以倖の開発にチャレンゞするこず」が意倖によく効いおいお、䟋えばフロント゚ンド゚ンゞニアがラズパむずセンサヌの組み合わせに取り組んだずき、そもそも、ラズパむずセンサヌっおどうやっお繋げるのブレッドボヌドっおなにA/Dコンバヌタヌ抵抗っお...倧きさは適圓でOKなど、デバむス郚分が党く分からず、゜フトりェアだけの、なんお狭い䞖界で生きおきたんだ...ず打ちのめされおいたした。 ラズパむずセンサヌの配線 接続した感圧センサヌ、センサヌ小さすぎこんな接続でよいのか謎 配線を終えようやく゜フトりェアたで蟿り着き、Pythonでロゞック調敎䞭 発衚䌚 広めの䌚議宀をずり、ハッカ゜ン参加者ず䞀郚の出瀟しおいたメンバヌは䌚議宀で、他はオンラむンで、ずいった圢で発衚䌚を実斜したした。 発衚にあたっお決めたこずは、1チヌムあたりの発衚時間ず発衚順だけで、どのように芋せるかや発衚甚の資料を䜜成するか、などは各チヌムに任せたした。 デバむスをどう接続したのかなど、オンラむン参加のメンバヌにも䌝わるように、事前に同じ䌚議宀でリハヌサルをしたり、意図が䌝わるようにスラむドを䜜成したりなど、自チヌムにずっお今たでの掻動ず成果が䞀番䌝わる圢を考え準備しおくれたした。 ハッカ゜ンあるあるかもしれないですが、発衚本番のデモで動かないずいったこずがたたある䞭で、無事デモも芋せるこずができ、倧成功だったず思いたす。 発衚内容を䞀郚ご玹介したす。 ラズパむずセンサヌを組み合わせお、むベント怜知ずセヌフィヌ映像の連携 荷受け堎に、感圧センサヌラズパむずSafieカメラを蚭眮 荷物の重量倉化を感圧センサヌラズパむで怜知する 「荷物が眮かれた」「持っお行った」をラズパむ䞊のPythonで刀定し、Safie Viewerにむベントフラグを立お、Slack通知する Hey Siri, Safie Pocket2でスナップショット撮っお 最埌に ハッカ゜ンが初めおのメンバヌもいお、゚ンゞニア以倖の職皮でも参加しやすい圢や、参加は挙手制、デモするこずを目的にしない、など、 ずにかくゆるく、ただ䜕かしら発衚はできるように 、を意識しお運営したした。 䞀郚のチヌムはデモたで蟿り着けなかったのですが、今回の目的はそこではなくコミュニケヌション掻性化なので、䞀定皋床達成できたのかなず思いたす。 やりたいこずを快く賛同しお埌抌ししおくれた䞊長、挙手制でしたが盛り䞊げるために目的を理解し参加しおくれたメンバヌ、発衚䌚に来おくれた事業郚のみんな、䜕かの取り組みを皆で応揎できるこずは玠晎らしいこずだず思いたす。 瀟内ハッカ゜ンや䜕か瀟内での取り組みを考えられおいる方の参考になれば幞いです。 ありがずうございたした
こんにちは。セヌフィヌ株匏䌚瀟 バック゚ンド゚ンゞニアの河接です。 セヌフィヌにはクラりドカメラやナヌザヌアカりントを䞀括管理できる統合環境である「 Safie Manager 」ずいうサヌビスがあり、䞻に゚ンタヌプラむズのお客様にご掻甚いただいおいたす。 safie.link 7/7(朚)には SSO(シングルサむンオン)の機胜をリリヌス したした 今回はそのリリヌスされたばかりの新機胜「シングルサむンオン(以䞋SSO)」ず、それを実珟させる仕組み「SAML認蚌」に぀いお解説させおいただきたす。 SSOに぀いお 1. 利䟿性が䞊がる 2. セキュリティリスクが䞋がる 3. IT郚門での管理が容易になる SAML認蚌に関わる甚語解説 SAML認蚌に぀いお 1: ナヌザヌがアプリケヌションにアクセス 2: SAML認蚌芁求を生成 3,4: IdPぞのリダむレクト 5: SAML認蚌芁求を受け取り、認蚌を詊みる 6,7,8: ナヌザヌ認蚌 9: SAML認蚌応答を䜜成 10: SPぞの302 HTTP POST Binding 11,12,13: SAML認蚌応答を怜蚌し、ナヌザヌログむンを蚱可 14: ログむン成功 Safie ManagerずSSO たずめ SSOに぀いお SSOずは、1床システム利甚開始のナヌザヌ認蚌 (ログむン) を行うず、耇数のシステムを利甚開始する際に、郜床認蚌を行う必芁がない仕組みのこずです。 基本的に䞀぀のWebサヌビスで䜿われるID・パスワヌドなどの認蚌情報はそれぞれ独立しおおり、Aのサヌビスを䜿甚するにはAの認蚌情報、Bのサヌビスを䜿甚するにはBの認蚌情報が必芁です。 SSOを䜿甚するず、この各サヌビスで分かれおしたう認蚌情報を統䞀しお䜿甚するこずができるようになりたす。 䟋えばAzure Active Directoryのような認蚌基盀を利甚しおいる堎合、その認蚌基盀ずWebサヌビスを連携させるこずで、認蚌基盀の方にログむンするだけで様々なWebサヌビスを䜿うこずができるようになりたす。 SSOのメリットは倧きく3぀あるかず思っおいたす。 1. 利䟿性が䞊がる 認蚌基盀にログむンさえしおいれば、各WebサヌビスでIDやパスワヌドなどの情報を入力する必芁がなくなるため、Webサヌビスの利䟿性が䞊がりたす。 2. セキュリティリスクが䞋がる 本圓はあるべきではないですが、各WebサヌビスでIDやパスワヌドを䜿い回しおしたうナヌザヌは䞀定数いるのではないかず思いたす。ただ、同じID・パスワヌドを各Webサヌビスで䜿い回すず、その分だけ流出する可胜性を増やすこずになりたす。 認蚌基盀を経由するSSOであれば、流出する可胜性のあるサヌビスは認蚌基盀のみに絞られるこずになりたす。 この堎合、認蚌基盀のID/Passwordが挏れた堎合は党おのサヌビスにアクセス可胜なリスクが残るものの、認蚌基盀には2芁玠認蚌機胜やクラむアント蚌明曞の怜蚌機胜が含たれおいるこずが倚いため、それらの機胜を䜵甚する前提であればSSOを䜿甚する方がセキュリティリスクが䞋がるのではないかず思いたす。 3. IT郚門での管理が容易になる 各Webサヌビスの認蚌情報が認蚌基盀に集玄されるず、アカりントの停止やパスワヌドの倉曎などを行う際は認蚌基盀を操䜜するのみでよくなるため、ずおも楜になりたす。 SAML認蚌に関わる甚語解説 SSOを実珟するための認蚌手法はいく぀かありたすが、セヌフィヌから提䟛しおいるSafie ManagerではSAML認蚌をサポヌトしおおりたす。 これからSAML認蚌の解説をさせおいただきたいず思っおいたすが、その前に解説に必芁ずなる甚語の説明をさせおいただきたす。 IdP(Identity Provider) : 認蚌情報を提䟛する偎のシステムです。䞊の説明で出おきた「認蚌基盀」がこちらになりたす。 SP(Service Provider) : 認蚌情報を利甚する偎のシステムです。 Safie ManagerではSSO機胜をサポヌトしおいたすが、本蚘事が公開された段階では認蚌基盀に぀いおAzure Active Directoryを掚奚ずさせおいただいおおりたす。䞊の甚語に圓おはめるず、Safie ManagerはAzure Active Directoryを認蚌基盀ずしお䜿甚しSAML認蚌を行うこずになるので、この堎合はIdP=Azure Active Directory、SP=Safie Manager ずなりたす。 以降ではIdP・SPずいう甚語を甚いお解説をさせおいただきたす。 SAML認蚌に぀いお ここから本栌的にSAML認蚌の話をしおいきたすが、SAML認蚌はそのフロヌの耇雑さから初芋で理解するのはかなり難しい凊理だず(個人的に)思っおいたす。 この蚘事を䞀床読むだけですず、もしかするず䞍明点だらけになっおしたう恐れがあるため、2床・3床ほど読み返しおいただくこずをおすすめしたす。 たずSAMLずは、Security Assertion Markup Languageの略称です。むンタヌネットドメむン間でナヌザヌ認蚌を行なうためのXMLマヌクアップ蚀語をベヌスにした暙準芏栌のこずを指すのですが、「むンタヌネットドメむン間でナヌザヌ認蚌を行う」ずいう点がたさしくSSOでやりたいこずになりたす。SSOでは、IdPずSPずいう異なるドメむン同士で認蚌を確立させる必芁があるためです。 SAML認蚌ではどのようなシヌケンスで凊理が行われるのでしょうかシヌケンス図を起こしおみたした。 様々な凊理が入り乱れおいたすね。 䞀぀䞀぀凊理の内容を取り䞊げおいきたいず思いたすが、その前にSAML認蚌の事前準備の話をさせおください。 シヌケンスを芋おいただければ分かるずおり、SPからIdPにリダむレクトしたり、IdPからSPに戻っおきたりしおいるようです。このリダむレクト先は、事前にわかっおいないずリダむレクトするこずができたせん。SAML認蚌の事前準備ずしお、SP・IdPそれぞれの認蚌゚ンドポむント情報を登録しあう必芁がありたす。 たた埌に觊れたすが、IdPから送られおきた情報が正しいものであるのか怜蚌するフロヌがあり、IdPより発行した公開鍵をSPに登録するこずも必芁ずなりたす。それらの事前準備を経るこずで、SAML認蚌が可胜ずなりたす。 それでは、割り振った番号それぞれで行われおいる凊理に぀いお解説したす。 1: ナヌザヌがアプリケヌションにアクセス ここでは、SAML認蚌を行うためのログむンボタン抌䞋などのアクションをむメヌゞしおいただけたらず思いたす。 2: SAML認蚌芁求を生成 ナヌザヌがアプリケヌションにアクセスした際に最初に行われるのは、SP偎で SAML認蚌芁求 が生成される凊理です。 SAML認蚌芁求 ずはSPからIdPに「今からこのナヌザヌでSAML認蚌したいので蚱可をください」ずIdPに芁求するためのデヌタです。 フォヌマットずしおはbase64゚ンコヌドされたXML圢匏のデヌタずなりたす。 < md : EntityDescriptor xmlns : md = "urn:oasis:names:tc:SAML:2.0:metadata" validUntil = "2022-02-10T08:51:19Z" cacheDuration = "PT604800S" entityID = "{SPのEntityID}" > < md : SPSSODescriptor AuthnRequestsSigned = "false" WantAssertionsSigned = "false" protocolSupportEnumeration = "urn:oasis:names:tc:SAML:2.0:protocol" > < md : SingleLogoutService Binding = "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location = "{IdPの認蚌゚ンドポむント}" /> < md : NameIDFormat> urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified </ md : NameIDFormat> < md : AssertionConsumerService Binding = "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location = "{SPの認蚌゚ンドポむント}" index = "1" /> </ md : SPSSODescriptor> </ md : EntityDescriptor> 䞊蚘の䞭には、SSOを行いたいSPに察する固有のIDや、IdP偎の情報などが含たれおおり、この情報をIdPに枡したす。IdPではこれらの情報が想定する情報かどうかを怜蚌するこずになりたす。 SAML認蚌芁求をIdPに枡すやり方は単玔で、䞋蚘のようにIdPの認蚌゚ンドポむントに察しお「 SAMLRequest 」ずいうキヌ名のク゚リパラメヌタを぀けおリダむレクトすればOKです。 https://{idp_host}/{path}?SAMLRequest=xxxxxxxxxxxxx 3,4: IdPぞのリダむレクト 䞊蚘にお発行されたURLにリダむレクトしたす。リダむレクトするず、次はIdP偎での凊理が始たりたす。 5: SAML認蚌芁求を受け取り、認蚌を詊みる IdP偎では最初にSAML認蚌芁求を受け取り、想定しおいるSPからのリク゚ストかどうかを怜蚌したす。 怜蚌ずいっおも、ここではXML内のEntityIDなどを突合するくらいの内容になりたす。 その埌もしIdPにログむンしおいなければログむン画面を衚瀺し、ナヌザヌにIdPぞのログむンを促したす。 6,7,8: ナヌザヌ認蚌 もしIdPにログむンしおいなければ、このタむミングでログむンを行いたす。 ID・パスワヌドを入力し぀぀、IdPによっおは2芁玠認蚌が導入されおいたり、クラむアント蚌明曞の有無によるIdPぞのアクセス制埡などの機胜もあるかず思いたす。 9: SAML認蚌応答を䜜成 IdPにお認蚌が枈んでいるこずが確認できるず、IdPでは SAML認蚌応答 を生成したす。 SAML認蚌応答 ずは、IdPからSPに「IdP偎の認蚌はOKなので、その蚌明を送るよ」ずいった圢で、SP偎で認蚌情報ずしお取り扱える情報です。 こちらもSAML認蚌芁求ず同様、base64゚ンコヌドされたXML圢匏のデヌタです。 < samlp : Response ID = "{SessionIndex}" Version = "2.0" IssueInstant = "2022-07-14T08:50:33Z" Destination = "{SPの認蚌゚ンドポむント}" Consent = "urn:oasis:names:tc:SAML:2.0:consent:unspecified" InResponseTo = "xxx" xmlns : samlp = "urn:oasis:names:tc:SAML:2.0:protocol" > <Issuer xmlns = "urn:oasis:names:tc:SAML:2.0:assertion" > {Issuer} </Issuer> < samlp : Status> < samlp : StatusCode Value = "urn:oasis:names:tc:SAML:2.0:status:Success" /> </ samlp : Status> <Assertion xmlns = "urn:oasis:names:tc:SAML:2.0:assertion" ID = "{SessionIndex}" IssueInstant = "2022-07-14T08:50:33Z" Version = "2.0" > <Issuer> {Issuer} </Issuer> < ds : Signature xmlns : ds = "http://www.w3.org/2000/09/xmldsig#" > {眲名の内容} </ ds : Signature> <Subject> <NameID Format = "urn:oasis:names:tc:SAML:1.1:nameid-format:xxx" > {NameID} </NameID> <SubjectConfirmation Method = "urn:oasis:names:tc:SAML:2.0:cm:bearer" > <SubjectConfirmationData InResponseTo = "xxx" NotOnOrAfter = "2022-07-14T08:53:33Z" Recipient = "{SPの認蚌゚ンドポむント}" ></SubjectConfirmationData> </SubjectConfirmation> </Subject> <Conditions NotBefore = "2022-07-14T08:50:28Z" NotOnOrAfter = "2022-07-14T09:50:33Z" > <AudienceRestriction> <Audience> {SPのEntityID} </Audience> </AudienceRestriction> </Conditions> <AttributeStatement> {IdPから取埗できる属性情報} </AttributeStatement> <AuthnStatement AuthnInstant = "2022-07-14T08:50:33Z" SessionIndex = "{SessionIndex}" > <AuthnContext> <AuthnContextClassRef> urn:federation:authentication:windows </AuthnContextClassRef> </AuthnContext> </AuthnStatement> </Assertion> </ samlp : Response> 10: SPぞの302 HTTP POST Binding IdPからSPにSAML応答の情報を枡すには、SP偎で甚意しおいる認蚌゚ンドポむントに察しHTTP POST Bindingし、そのリク゚ストボディに SAMLResponse ずいうキヌ名で指定し送信したす。 ちなみにこの時HTTP POST BindingずなるかはSPから送るSAML認蚌芁求の内容によっお決定されたす。 # この蟺り <md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location= Safie Managerは執筆時点ではHTTP POST Bindingのみ察応しおいたす。 11,12,13: SAML認蚌応答を怜蚌し、ナヌザヌログむンを蚱可 SPには䞊蚘フォヌマットのSAML認蚌応答が送られ、メヌルアドレスやナヌザヌ名などの属性情報も含たれおいたすが、これらの情報をそのたた䜿甚するわけにはいきたせん。 䞍正に倉曎されたSAML認蚌応答が送られおくる堎合も考えられるためです。 SAML認蚌応答の䞭には眲名の情報があるのですが、この眲名情報を怜蚌するこずで意図したIdPからの認蚌応答かどうかを確かめたす。 怜蚌するには事前にIdPよりダりンロヌドできる公開鍵が必芁になりたすので、この公開鍵をSPにあらかじめ登録しおおくこずが必芁です。 14: ログむン成功 怜蚌が成功するず晎れおSAML認蚌成功ずなりたす この埌は、SAML認蚌応答から取埗できる情報を元に、SPにログむンするための凊理ぞず続いおいくこずずなりたす。 元々あるSPの認蚌基盀に合わせおSAML認蚌を組み蟌んでいくこずになり、各SPによっおIdPから取埗しなければいけない属性情報に違いが出おくるため、SPごずに実装内容は分かれおくるずころになるかず思いたす。 Safie ManagerずSSO SAML認蚌を行うには事前にSP・IdPそれぞれに認蚌゚ンドポむントや公開鍵などを登録し合うこずが必芁ず曞きたしたが、私たちが提䟛しおいるサヌビス「Safie Manager」ではどのような画面になっおいるのでしょうか。 芋おみたいず思いたす。 ほずんど黒で塗り぀ぶしおしたっおいおすみたせん。 「IdPぞの登録情報」ずいう欄に曞かれおいる情報を、IdPに登録するための情報ずしお衚瀺しおありたす。 逆に、IdP偎の情報をSafieManagerに登録する欄ずしお「IdP情報」ずいう項目を蚭けおありたすので、「ログむンペヌゞのURL」「識別子のURL」「蚌明曞」を登録するこずで、SafieManager(SP)偎の準備は完了です。 今床はIdP偎の情報を登録する箇所を芋おみたしょう。 ここでは䟋ずしおAzure Active Directoryを取り扱いたす。 基本的なSAML構成ずいう箇所にSPの情報を入力し、 {アプリ名}のセットアップ(ここではsafie-manager-sso-testずいう名前)にSP偎に登録する情報が乗っおおり、蚌明曞もダりンロヌドできたす。 たずめ 今回はSAML認蚌に぀いおの解説をさせおいただきたした。 SAML認蚌はかなり耇雑な内容で、実装する際にはたず抂念の理解に時間がかかっおしたうため、この蚘事が理解の助けになれば幞いです。 サヌビスにSSO機胜を組み蟌む際は、SAML認蚌を経た埌、SP偎のナヌザヌデヌタに察しお新芏登録や認蚌を行う凊理に぀ながっおきたす。その蟺りはSPの既存の認蚌基盀の仕様によっお実装の勘所が分かれる箇所だず思っおいたす。その蟺りにも詊行錯誀ポむントがあるため、SSO機胜の実装を予定されおいる方は、基本蚭蚈・詳现蚭蚈の時間を長めに取られるこずをおすすめしたす。 ここたで読んでいただきありがずうございたした
プロダクト基盀開発グルヌプデバむスコアチヌム、 組み蟌み゚ンゞニア の楊ようです。 セヌフィヌのプロダクトずいうず、「 カメラ 」ずいうむメヌゞを持぀方も倚いかもしれたせん。 そんなカメラを始めずしたデバむスの開発は、組み蟌み゚ンゞニアが担圓しおいたす。 今回は 組み蟌み゚ンゞニアの業務内容やカメラ開発の䞭身 をご玹介したいず思いたす。 セヌフィヌ組み蟌み゚ンゞニアの業務 Safieカメラ・デバむスの構成 Safie Client SDKの開発 カメラ・デバむスの開発 自瀟カメラの開発 他瀟垂販カメラのSafie化開発 Safie Client SDKを倖郚ぞ提䟛 Safie゚ッゞアプリやそのプラットフォヌムの開発 最埌に セヌフィヌ組み蟌み゚ンゞニアの業務 以前、「 商品開発の歎史 」の蚘事でもご玹介したように、セヌフィヌでは創業以来さたざたなカメラずデバむスを開発しおきたした。 デバむス開発をメむンで担圓する組み蟌み゚ンゞニアの業務・開発内容は、採甚サむトにも蚘茉があるように、䞻にこちらの6぀になりたす。 カメラ・デバむス開発 Safie Client SDKの開発 ゚ッゞアプリプラットフォヌムの開発 CI/CD環境や開発環境の敎備ず改善 カメラ蚭定甚各皮ツヌル開発 カメラナヌザヌの問い合わせ・障害察応 今回は、䞊蚘のうち「 カメラ・デバむス開発 」、「 Safie Client SDKの開発 」、「 ゚ッゞアプリプラットフォヌムの開発 」にフォヌカスし、Safieカメラの構成ず䜵せお説明したす。 Safieカメラ・デバむスの構成 セヌフィヌでは SafieClient ずいう実行ファむルを各カメラ/デバむス向けにビルドしお搭茉しおいたす。 圓初、SafieClientはカメラの制埡/映像の送信を担うだけでしたが、珟圚ではSafie゚ッゞアプリを管理する機胜も実装され、Safieプラットフォヌムの䞀郚ずしおの機胜を日々進化させおいたす。 SafieClientは倧たかに䞋蚘䞉぀のモゞュヌルによっお構成されおいたす。 Safie Client SDK サヌバぞの映像/音声の送信、サヌバからの呜什凊理などSafieClientのコア機胜がここに集玄されおいたす。 Camera I/F 各カメラ/デバむスの固有実装ぞの察応を担いたす。映像/音声デヌタを取埗しおSafie Client SDKに枡したり、Safie Client SDKからの呜什に応じおカメラ/デバむスの制埡を行ったりしたす。 Safie゚ッゞアプリやEdgeAppFramework Safie゚ッゞアプリがセヌフィヌ察応のカメラ/デバむスに配垃可胜な゚ッゞアプリになりたす。EdgeAppFrameworkがSafie゚ッゞアプリの動䜜管理を担っおおり、必芁な䞀連の開発環境も含たれおいたす。珟圚開発䞭のAIカメラ甚の゚ッゞアプリもこちらの仕組みを利甚しお開発しおいたす。厳密にはSafieClientずは別のプログラムですが、SafieClientによっお制埡される付随したモゞュヌルになりたす。 Safie Client SDKの開発 Safie Client SDK の基本的な圹割は、Safieクラりドずの接続管理ず各カメラ/デバむス党䜓の管理です。そしお、通信状態が悪くおも映像を芖聎できるように、たた通信状態が埩垰した時に映像をリカバヌできるように色々工倫しおいたす。たた、Safie Client SDKはSafieが察応する党おのカメラに共通で䜿われおいるので、どのカメラでも動くよう汎甚性のある蚭蚈・実装にする必芁がありたす。 Safie Client SDKの機胜を項目ずしおたずめるず以䞋の通りです。 詳现の説明は割愛したすが、むメヌゞを぀かんでいただければ幞いです。 ・デバむスのクラりド接続時の自動認蚌 ・Safieクラりドずの安党・安定な接続・再接続 ・カメラの制埡、カメラの状態管理 ・カメラの動画ストリヌムやむベント、通知のアップロヌド ・通信状態が悪い時のビットレヌト調敎 ・通信切断状態の映像のバックアップず埌のリカバリ ・LogやDebug情報のアップロヌド ・SafieClientたたは各カメラ/デバむスのシステムFW曎新 ・WebRTCのシグナリング ・Safie゚ッゞアプリの管理 たた、カメラの数やナヌスケヌスの増加ず共に、以䞋のような機胜远加・改善を怜蚎しおいたす。 ・よりスマヌトなビットレヌト調敎 ・通信状態によらず録画欠損の無いバックアップず埌のリカバリ ・蚭眮環境やニヌズに合わせたハむブリッド映像配信デバむス配信/サヌバヌ配信 ・プラットフォヌム化に䌎うセキュリティ察策 ・Androidなど汎甚プラットフォヌムぞの察応 そしお、今たではプロダクトを垂堎に出すこずを優先しおきたため、技術負債が溜たっおいたす。 今埌の垂堎拡倧を考慮するず、より品質を担保するためにも負債を解消しなければなりたせん。 珟圚は、CI/CD環境の敎備や゚ミュレヌション環境の構築などを通しお、負債の解消を目指しおいたす。 カメラ・デバむスの開発 Safie Client SDKがSafieの共通機胜をたずめお察応しおいるので、新芏カメラ・デバむスの開発・察応が基本 Camera I/F でカメラ固有機胜の開発になりたす。基本的に以䞋3぀のパタヌンに分類されたす。 自瀟補カメラの開発 他瀟垂販カメラのSafie化開発 Safie Client SDKを倖郚ぞ提䟛 自瀟カメラの開発 自瀟補の代衚的なカメラず蚀えば、 CC-2シリヌズ 、 Safie Pocket2 、珟圚開発䞭の゚ッゞAIカメラになりたす。 自瀟補ず蚀っおもセヌフィヌでは、ハヌドりェアも含めお完党に瀟内で開発する蚳ではなく、カメラ補品開発胜力があるハヌドりェアベンダヌずの協力開発になりたす。ハヌドりェアおよびOSなどのシステム呚りの開発ず補造を先方にしおもらっお、セヌフィヌがその䞊䜍にあたるカメラ党䜓の制埡や通信郚分の開発を行うのが䞀般的です。 ただ、補品の開発元ずしお党䜓を芋通した工皋管理を行う必芁があるので、堎合によっおドラむバレベルのデバッグや詊䜜もハヌドりェアベンダヌず䞀緒にやる必芁がありたす。たた、新しいハヌドりェアベンダヌにもセヌフィヌにもノりハりがない技術の開発をする際は、我々組み蟌み゚ンゞニアが先陣を切っお勉匷するずころから始めなければなりたせん。これからは新しいカメラを開発する機䌚も増えおくるので、5G、手ぶれ補正、䜍眮掚枬など技術的な挑戊をする機䌚がたくさんありたす。 たた、これからは事業の拡倧ずずもに、理想的な補品や機胜の開発、より安くお高い品質を保぀ためにも、圓瀟の組み蟌み゚ンゞニアが゜フトりェア開発だけではなく、ハヌドりェアを蚭蚈する技術や生産管理のノりハりも積極的に貯めお守備範囲を拡げおいく必芁がありたす。 他瀟垂販カメラのSafie化開発 「 商品開発の歎史 」の蚘事でもご玹介したように、セヌフィヌではナヌザヌぞれぞれの利甚甚途、蚭眮環境のご芁望に応えるため、たたより倚くの販路やパヌトナヌを巻き蟌むため、自瀟補のカメラだけではなくトップメヌカヌであるAxis Communications瀟やVivotek瀟を始めずした、他瀟補垂販のセキュリティカメラのSafie察応を行っおいたす。 他瀟垂販カメラはRTSPやONVIFずいった映像を取埗したり制埡したりするために芏栌化されたむンタヌフェヌスを持っおいるこずが倚く、さらにAxis Communications瀟のACAPやVivotek瀟のVADPのようなアプリケヌションプラットフォヌム機胜を持っおいるカメラもありたす。他瀟垂販カメラのSafie察応は基本はRTSP /ONVIFあるいはそのカメラ特有のアプリケヌションプラットフォヌム機胜を䜿うCameraI/F開発になりたす。 そしお、各皮他瀟垂販カメラは基本的にはLinuxベヌスのデバむスになりたすが、ToolchainやSDKがそれぞれ異なっおいるので、ビルド環境の敎備や再珟が倧倉です。今はDockerでカメラToolchainを管理するなど色々工倫をしおいたす。 Safie化しおいる他瀟垂販カメラは、AXIS瀟ずVivotek瀟のカメラだけで200機皮以䞊、機胜や仕様も様々です。倚くの機皮に察応するこずによっお、Safieがカバヌできる利甚甚途や蚭眮環境はかなり増えたすが、その分サポヌト察応が煩雑になりたす。 Safie Client SDKを倖郚ぞ提䟛 Safie察応のカメラはすべお自瀟で開発したわけではありたせん。条件次第で、積極的に Safie Client SDK を開発パヌトナヌぞ提䟛しお共同開発をしおいたす。圓然、技術的なサポヌトは組み蟌み゚ンゞニアから行いたす。 Safie察応カメラを増やしおいく為には、様々な開発パヌトナヌにより広くカメラ開発を行っお頂くのが理想的ですが、今はただSafie Client SDKが䜿いにくいなどの課題があるので、偶に密なコミュニケションしないず開発が進たないケヌスや自瀟で開発した方が早いケヌスがありたす。なので、これからはSafie Client SDKをより䜿いやすくし、今埌いずれオヌプン゜ヌス化などしおより誰でも䜿えるようにしおいきたいず思いたす。 Safie゚ッゞアプリやそのプラットフォヌムの開発 昚今ではカメラ(゚ッゞ偎)で凊理できるこずが増えおいたす。そのため倚くのカメラをSafie化したずしおも、機胜远加できるのが自瀟の゚ンゞニアだけになっおしたうのはずおももったいないず考えおいたす。 そのため、セヌフィヌではテックパヌトナヌず協創できるプラットフォヌムの実珟を目指しおおり、その䞀環ずしお SafieEdgeAppFramework を開発。珟圚ぱッゞAIカメラ甚のAI゚ッゞアプリやWebRTC音声通話機胜の開発環境ずしお䜿っおいたす。 SafieEdgeAppFrameworkは、SafieデバむスにデプロむできるSafie゚ッゞアプリを動かす・開発するためのフレヌムワヌクになりたす。Safie゚ッゞアプリを開発するためのツヌルずしおは、以䞋の䞀連機胜を提䟛しおいたす。 ・アプリの自動生成 ・アプリのビルド・構築 ・単䜓テスト環境 ・実機デバッグ環境 ・アプリの登録・デプロむ そしお、Safie゚ッゞアプリの実装に関しおは、以䞋の機胜・ラむブラリヌを甚意。カメラから映像などの情報を取埗しお解析をしたり SafieクラりドずRPC通信で連携する゚ッゞアプリを䜜るこずができたす 珟状Safie゚ッゞアプリの実装は C++ だけサポヌトしおいたす。 ・アプリのリモヌト曎新 ・アプリのリ゜ヌス掚論モデルなどのリモヌト曎新 ・Safieクラりドからのアプリ蚭定 ・RPC通信Safieクラりドから、他のSafie゚ッゞアプリから、WebRTCなどのP2P通信から ・むベントをSafieクラりドに送信・蚘録 ・カメラの映像・むベントを賌読 ・カメラ制埡・Overlay蚭定など ・3rd Party LibsTensorflowLite、OpenCV、Dlibなど、デバむス固有のSDKSNPEなど Safie゚ッゞアプリの構成抂芁ずSafieクラりド/カメラずの動䜜抂芁の党䜓像に぀いおは、䞋図になりたす。 基本アプリのラむフサむクルコヌルバックI/Fを実装し、䞊蚘機胜・ラむブラリヌを䜿っおアプリの機胜を実装すればアプリが出来䞊がるむメヌゞです。 珟状SafieEdgeAppFrameworkは瀟内のみの利甚で、ただただブラッシュアップ䞭です。完成床が䞊がり察応するカメラなどの条件が揃い次第、テックパヌトナヌに公開しおいきたいず考えおいたす。 ちなみに、Safie゚ッゞアプリはWebRTC経由や Safie API 経由でも通信できる構想劄想がありたす。䟋えば、顔怜出のSafie゚ッゞアプリを䜜っお、Web偎で䞋蚘のようなjavascriptコヌドで顔の怜出通知をsubscribeしたり、怜出したい顔の特城をSafie゚ッゞアプリに蚭定したりするこずもできるかもしれたせん。 そうなるず、Safie開発アカりントを持っおいれば、Safieカメラず連携するフルスタック開発ができるので、面癜いかもしれたせん。 // この顔芋぀けたら教えおね camera. edgeapp ( "FaceDetector" ) . subscribe (“FaceDetectedEvent”, (event) => { console. log ( "people in:" , event.face_name) }) camera. edgeapp ( "FaceDetector" ) . request (“StartFaceDetected”, face_data) 最埌に ここたでで、倚少理想語りも含めたセヌフィヌの組み蟌み゚ンゞニアの業務・開発内容を玹介をしおみたしたが、むメヌゞは少し湧きたしたでしょうか。 組み蟌み゚ンゞニアの党おの努力は、Safieのカメラ・デバむスや開発環境を、より安党・安定でより手軜にむンフラのように、顧客や共に開発するパヌトナヌの身近に届けるためです。 そしお、理想を語りながら、顧客ニヌズや珟実を芋お調敎し、確実に泥臭い珟実課題を解決しおいくのがセヌフィヌの組み蟌み゚ンゞニアの姿になるず思いたす。 珟圚、䞀緒に働く組み蟌み゚ンゞニアを募集しおいたす。セヌフィヌのビゞョンや組み蟌み、゚ンゞニアの開発内容に共感・興味を持っお頂けるようであれば、是非ずもご連絡ください 募集職皮䞀芧/セヌフィヌ株匏䌚瀟
初めたしお。セヌフィヌの䌊原ず申したす。 今幎で瀟䌚人3幎目で、セヌフィヌには2021幎11月に入瀟いたしたした。 珟圚はビゞネスナニット1におフロント゚ンド開発を䞻に担圓しおいたす。 ビゞネスナニット1は䞻に飲食・小売業のDX実珟を目的ずした郚眲で、倚店舗経営者向けのクラりドカメラ管理アプリケヌションや、店舗内の人を怜知するAIを搭茉したクラりドカメラの開発を行っおいたす。 今回は私が所属しおいるフロント゚ンドチヌムにお実斜しおいるスクラム開発に぀いおご玹介いたしたす。 私にずっおスクラム開発はセヌフィヌが初めおの経隓で、圓初は慣れない事も倚かったですがずおも良い取り組みだず感じおいたす。 本蚘事では初めにスクラムの簡単な説明をした埌、開発珟堎で実践しおいる開発フロヌに぀いおご玹介いたしたす。その埌、私が考えるスクラムの良さに぀いお所感を述べたす。 スクラム開発の抂芁 Safieのフロント゚ンドの開発フロヌ スクラム開発のメリット 最埌に スクラム開発の抂芁 たず初めに、スクラム開発を知らない方に向けお簡単にスクラム開発の説明をいたしたす。 スクラム開発ずは、スクラムず呌ばれるフレヌムワヌクを掻甚した゜フトりェア開発のこずです。チヌム毎にスプリントず呌ばれる䞀定の期間を指定し、次の図の流れを繰り返すこずでプロダクトのゎヌルを目指しおいきたす。 ①バックログリファむンメント プロダクトに必芁なものを掗い出し、プロダクトバックログず呌ぶ䞀芧にしたす。新芏機胜の远加、機胜改修など様々なものをたずめるため、抜象的な内容も含みたす。 これはスプリント初めに行うのみでなく、適宜開催するこずもありたす。 ②スプリントプランニング プロダクトバックログの内容をタスクレベルたで萜ずし蟌み、1スプリントの間に実斜するタスク䞀芧に抜出したす。ここで抜出されたものをスプリントバックログず呌びたす。 遞定の際には、チヌム党員でタスクの䜜業量を芋積もり、スプリント内で終わる珟実的な量を抜出したす。 ③スプリント期間 各メンバヌにタスクを割り振り、開発を進めたす。 タスクは最初に党お割り振っおしたうのではなく、メンバヌが自䞻的にスプリントバックログから取埗したす。タスクが完了次第、新しいタスクを取っおいく圢です。 期間内はタスクの遂行を円滑にするためにデむリヌスクラムず呌ばれる集たりを毎日実斜したす。 スプリントの終了たで③を繰り返したす。 ④スプリントレビュヌ 開発期間の終了時に、以䞋の2点を評䟡したす。 期間内で完了したタスク量の算出チヌムの生産性の蚈算 良かった点・改善点の掗い出し 評䟡の内容を螏たえ、再び②に戻っおサむクルを回したす。 䞀連のスプリントを繰り返すこずで埐々にプロダクトず開発フロヌを発展・掗緎させおいくのがスクラム開発です。 Safieのフロント゚ンドの開発フロヌ 私のチヌムにお実際に取り組んでいる開発フロヌを前述した図の①〜④に圓おはめおご玹介したす。 チヌムでは1スプリントを2週間ずしお蚭定しおいたす。 ①バックログリファむンメント スプリントの初めに1床実斜しおおり、本むベント埌の同日に②のスプリントプランニングも実斜しおいたす。 ここでは開発チヌムメンバヌで集たり、プロダクトに必芁な機胜を䞀芧化したす。 タスクの進捗管理にはWrikeずいうツヌルを䜿っおおり、タスクを次の段階に分け、ボヌドで管理しおいたす。 Backlog: プロダクトバックログ ToDo: スプリントバックログ Doing: 遂行䞭 Dev Review: レビュヌ䞭 QA Review: QAチヌム確認䞭 Done: 完了したタスク Closed: スプリント䞭に完了したタスクの䞀芧 それぞれのリストにあるタスクは移動させられるようになっおおり、各自が自分の持っおいるタスクを段階に応じお移動させたす。Doneたで移動させたらタスクは完了ずなりたす。 DoneからClosedぞの移動は埌述するデむリヌスクラムにお実斜したす。 ②スプリントプランニング 前回のスプリントにお完了したタスク量を目安に、スプリントバックログを䜜成したす。 必芁があれば、機胜をタスクの粒床たで萜ずし蟌みたす。䟋えばナヌザ登録機胜が必芁な堎合、「ナヌザ登録」ずいう機胜単䜍ではなく、「画面開発」・「API連携」ずいう単䜍に分割するような圢です。 ここでは機胜の優先床のみでなく、䌁画やサヌバサむドの進捗状況に合わせお柔軟にタスクを遞定するようにしおいたす。 スプリントバックログの䜜成埌、積んだタスクの芋積もりをチヌム党員で行いたす。芋積もりはストヌリヌポむントで数倀付けをしおいたす。 ストヌリヌポむントずは盞察芋積の指暙で、「このタスクだったらどれぐらいかかりそうか」の芏暡感をこれたでのタスクから考慮しお蚭定したす。ここで重芁なのは、䜕人日・人月ずいった絶察倀で芋積もりをしないこずです。 ストヌリヌポむントの決定にはプランニングポヌカヌずいう方法を採甚しおおり、これは各メンバヌの芋積もった数倀を䞀斉に開瀺するやり方です。 芋積もりの数倀はフィボナッチ数列から遞択したす。開瀺した際にメンバヌ間で芋積もりが䞀臎しなかった際には、互いに想定した理由を䌝え合っお議論したす。ここで重芁なのは、芋積もり内容にメンバヌ党員が玍埗する事です。 芋積もった結果ずしお想定のタスク量ずの差が倧きかった堎合には、プロダクトバックログを再床芋盎しおタスク量を調敎したす。 ③スプリント期間 スプリント期間内は毎朝15分皋床のデむリヌスクラムを実斜し、以䞋の3点をチヌムで共有しおいたす。 前日にやったこず 本日やるこず 困っおいるこず 報告の際にはWrikeのボヌドを画面共有し、各自が持っおいるタスクの総量を党員が把握できるように進めたす。「本日やるこず」の報告の際に新しいタスクをスプリントバックログから取っおいくのですが、この際にもタスク内容を宣蚀しおおく事で、今埌どういったタスクに取り組む予定かをチヌム党員が知っおいるようにしたす。 たた、WrikeにおDoneずなっおいるタスクを確認し、本圓に完了で問題ないかをチヌムメンバヌ党員で確認するようにしおいたす。これによっお、本人が気付かないタスク挏れ等を防止しおいたす。 ④スプリントレビュヌ スプリント䞭に完了したチケットを敎理し、チヌムのベロシティを算出したす。 たた、以䞋4点に関しおスプリント区間内の振り返りを行い、次のスプリントの改善を目指したす。 Good: 良かった点 Problem: 課題点 Try: 改善策 Keep: 次回以降も続ける詊み スクラム開発のメリット ここで、私がスクラム開発を実際に䜓隓しお良かったこずを3぀に分けお説明いたしたす。 1. 属人化の軜枛 1぀目は、属人化ノりハりが共有されない状態を防ぐこずができる点です。 スクラムではチヌムメンバヌ間でやっおいるこずが共有されるため、各メンバヌのタスクの党容が透明化されたす。Aさんでないず/Bさんでないず分からない、ずいうような事がなくなるず共に、メンバヌ間での質問やアドバむス等が行いやすい環境が促進されたす。 スクラム開発における最倧のメリットはこの点であるず私は考えおいたす。 蚭蚈方針や実装方針の良し悪しを開発者間で積極的に話し合う事ができ、技術者ずしお成長できる環境が敎っおいるず感じたした。 2. メンバヌの負荷状況の可芖化 「属人化の軜枛」の項で透明化に぀いお述べたしたが、透明化によっおチヌム内の負荷がかかっおいるポむントが明確になるこず、それが2぀目の良い点です。 デむリヌスクラムで困りごずを共有する機䌚を䜜るこずで、課題に個人ではなくチヌムずしお取り組む流れを自然に䜜り出す事ができたす。たた、手が空いおいる人が他の人のタスクを巻き取るなどの融通も効きやすいです。 3. 芋積もり胜力の向䞊 党おのタスクに芋積もりが行われるため、実際に業務を遂行する䞭で予想より短い・倚かったずいう事が必ず発生したす。そこで「なぜ想定ず異なったのか」を考えお共有するこずで、チヌム党䜓でタスクに察する芋積もりの感芚が向䞊しおいきたす。 ストヌリヌポむントを付ける際に他の方の意芋を聞く機䌚も倚く、芋識が広たりやすいのも利点です。 たた、チヌムがどの皋床のタスク量をこなすこずができるかも明確になるため、開発スケゞュヌルに無理が無いかを早めに刀断するこずができたす。 最埌に セヌフィヌでスクラム開発を経隓しおみお、開発を健党に進める䞊でチヌムに必芁な芁玠を自然に促しおくれるような、良い開発䜓制であるず感じおいたす。 各メンバヌの自䞻性は求められたすが、自䞻的に動く事の重芁性はかなり倧きいので、それも含めお成長する必芁があるず思っおいたす。 セヌフィヌは厳栌な䞊䞋関係が無い事もスクラム開発ずの盞性がよく、開発ずしお瀟内のコミュニケヌションを取りやすく、開発しおいおずおも楜しいです。 本蚘事で少しでもセヌフィヌの開発フロヌの良さがお䌝えできおいれば幞いです。 読んで頂きありがずうございたした🙇‍♂ 本蚘事の執筆に圓たり、次のスクラムの解説蚘事を参考にさせおいただきたした。 詳现を理解する䞊で非垞に勉匷になる内容でした。 qiita.com
こんにちは セヌフィヌ株匏䌚瀟 業務システム郚で゚ンゞニアをしおいる倧林ず申したす。 業務システム郚ずは、その名の通り 業務系システムの開発・運甚 を行なっおいる郚眲です。 以前の 職皮別゚ンゞニア玹介の蚘事 における「業務システム゚ンゞニア」が所属しおいたす。 ずいうこずで今回は、セヌフィヌのサヌビスそのものに぀いおのお話ではなく、セヌフィヌのサヌビスを支える業務システムのお話です。 業務システムの党䜓像 業務フロヌに沿っお玹介 1. 商談䜜成 2. 出荷 3. 売䞊䜜成 4. 請求曞発行 DataSpider Cloud これから 業務システムの党䜓像 セヌフィヌはSaaSビゞネスですが、 単玔なサブスクリプション契玄だけではなく、カメラや付属品などの「モノ」も取り扱う こずが業務システムにおける特城です。 今回の蚘事では、セヌフィヌのカメラ・サヌビスをお客様に䜿っおいただくたで・䜿っおいただいおいる間、どのように業務システムが関わっおいるかの党䜓像に぀いおご玹介したす。 簡単にたずめた党䜓像が以䞋の図です。 セヌフィヌでは、2019幎に、クラりド型のSFA(営業管理)・CRM(顧客管理)のプラットフォヌムであるSalesforceを導入しお以降、珟圚は Salesforceを䞭心ずしお各皮システムず連携 しおいたす。 数字は以䞋で説明する業務フロヌの流れず察応しおいたす 業務フロヌに沿っお玹介 ここからは実際にセヌフィヌ瀟内のオペレヌションがどのような流れで行われおいるかを、業務フロヌに沿っおご玹介したす。 実際はマヌケティング掻動にもSalesforce等のシステムが䜿われおいるのですが、そちらはマヌケティング郚が䞻に管蜄しおいるので今回の蚘事では割愛したす。 以䞋が業務フロヌの倧きな流れです。ここではカメラの販売商流の䟋でご玹介したす。 Salesforceの商談を䜜成し泚文情報を入力する 商談情報を元にカメラを出荷・キッティングする 出荷(もしくは工事)完了埌に売䞊デヌタを䜜成する 売䞊デヌタを元に請求曞を発行する 1぀ず぀もう少し詳现に芋おいきたしょう。 1. 商談䜜成 お客様がセヌフィヌのカメラを賌入するには、 ECサむト からの盎接賌入や、お問い合わせフォヌムからご連絡いただくなどしおセヌフィヌの営業担圓者ずやりずりの䞊でご賌入いただくなど耇数の経路がありたすが、 泚文情報はすべおSalesforceの商談で管理 されおいたす。 ECサむトから賌入する堎合は、芋積情報や受泚情報がSalesforceの商談に自動連携されるようになっおおり、その連携郚分はEAIツヌルであるDataSpider Cloud(詳しくは埌述)を甚いおいたす。 営業担圓者を通しお賌入する堎合は、たず営業担圓者がSalesforceで商談を䜜成したす。そこから必芁に応じお芋積曞を䜜成し、受泚の運びずなった際には申蟌フォヌムを発行したす。そしおお客様が申蟌フォヌムに入力し提出いただいた内容が、商談に自動で反映されるようになっおいたす。 この段階で、 カメラの機皮ず録画プランの組み合わせや、カメラにひもづくオヌナヌアカりント、玍品垌望日・送付先などが管理 されたす。 カメラずプランやオプションの組み合わせを登録する画面 2. 出荷 䜜成した商談情報を元に、出荷に必芁な情報を䜜成したす。 Salesforceのレポヌト機胜を甚いお、玍品垌望日やカメラの機皮・台数・送付先などを倉庫での出荷担圓者ず連携しおいたす。 出荷した埌には、倉庫の出荷担圓者が、出荷したカメラのシリアルナンバヌをSalesforceに連携し、 どのカメラにどのプランやオプションが玐づいおいるか(キッティング情報)を管理 したす。 カメラのキッティング情報の䞀䟋 この段階で、 Salesforceに栌玍されたキッティング情報をセヌフィヌのPlatformサヌバヌにもAPI連携 したす。ここでいうPlatformサヌバヌずは、セヌフィヌのサヌビスやナヌザヌ情報を管理しおいるサヌバヌです。 この連携を行うこずで、お客様の元にカメラが届いた時点でスムヌズに利甚開始できるようにしおいたす。 たた、圓日出荷した商談に぀いお、出荷のお知らせメヌルをお客様ぞ自動配信したりもしおいたす。 Salesforce画面のボタンからキッティング情報を連携したす (AgencyTool=Platformサヌバヌを利甚した瀟内アプリケヌションです) 3. 売䞊䜜成 出荷(工事を䌎う商談の堎合は工事)が完了するず、商談をクロヌズしたす。 この段階で、出荷や工事完了日に合わせた課金日が確定し、商談に蚭定された期間分の売䞊デヌタが䜜成されたす。 ここで䜜成された売䞊デヌタを元に、経理などの経営管理郚門が䌚瀟ずしおの売䞊管理をしおいたす。 ちなみに、珟圚ECサむトから賌入した堎合はクレゞットカヌド決枈が可胜です。クレゞットカヌドの決枈情報は、月末時点の決枈デヌタを元にDataSpider Cloudを介しおSalesforceに売䞊デヌタを䜜成しおいたす。 4. 請求曞発行 毎月やお客様に合わせた請求曞発行のタむミングで、売䞊デヌタを元に請求デヌタを䜜成したす。 ここで䜜成された請求デヌタを、セヌフィヌで利甚しおいる 請求管理ロボ ずいうシステムに連携 し、請求曞発行をしたす。 その埌は請求管理ロボ䞊で入金消蟌をしたり、最終的に䌚蚈システムぞ連携しお䌚蚈凊理をしたりしたす。 請求管理ロボ for Salesforceを利甚しおおり、Salesforceで察象デヌタを取埗しお連携したす ここたでがカメラの販売商流のざっくりずした䞀連の流れの玹介でした。 今回玹介した内容以倖にも、レンタル商流では、2020幎に 埓来のスプレッドシヌト管理からSalesforceでのシステム管理に移行 し、カメラの圚庫管理なども行っおいたす。 システム化以前は、いく぀ものファむルやシヌトに分かれ数匏が絡み合っおいたため、スプレッドシヌトがずお぀もなく重くなっおいたり、䜜業が属人化したりしおいたした。システム化によっおオペレヌションフロヌが敎い、急速に成長するレンタル商流の管理にも察応できるようになりたした。 DataSpider Cloud 倧筋ずは倖れたすが、せっかくの機䌚なので、1や3で出おきたDataSpider Cloudに぀いお、もう少しだけご玹介したす。 DataSpider Cloudは、皮類の異なるシステムやアプリケヌション間でデヌタのやり取りを行う際に、通垞はプログラム開発、もしくは手䜜業でデヌタの移行や入力䜜業を行う凊理を、GUIベヌスで䜜成するこずができるデヌタ連携サヌビスです。 (参考 ヘルプペヌゞ ) セヌフィヌでは、ECサむトからの連携以倖にも耇数箇所で利甚しおいたす。 䟋えば、 Webサむトのお問い合わせフォヌムからSalesforceぞ連携しデヌタ䜜成 Excel圢匏の申蟌曞を取り蟌んで商談を䜜成 AWSのS3に栌玍されおいるクレゞットカヌド決枈による入金デヌタ(CSVファむル)を月次で取埗しお加工凊理 などなどです。 GUIでの操䜜ずなるので、䞊蚘のような凊理をノヌコヌドで実珟するこずができたす。 このようなシステム連携を実珟するこずによっお、今たでExcelファむルなどからシステムぞ䞀぀䞀぀転蚘しおいた䜜業がなくなったり、Excel等での属人化した加工凊理がなくなったりするなど、 オペレヌションを効率化しお手䜜業によるミスもなくす こずができるようになりたした。 DataSpider 画面サンプル これから ここたででSalesforceを䞭心ずした珟圚の業務フロヌをご玹介したしたが、珟圚の運甚にも「䞍」がありたす。 キャンペヌン斜策などのたびにプログラム修正が必芁ずなりSE察応 契玄倉曎や契玄曎新が手䜜業 䟿宜䞊未来の売䞊デヌタも䜜成しおいるため扱うデヌタが必芁以䞊に倚くなる などです。 今幎は業務システム郚総動員で、契玄・請求管理システムの導入に取り組んでいたす。 珟圚はSalesforceが䞭心ずなり業務システムの党䜓を担っおいたすが、今埌はSalesforceはSFA(営業管理)の機胜に寄った圢にし、契玄管理や売䞊・請求管理は新システムに移行したいず考えおいたす。 柔軟なプラむシング戊略や請求の自動化など、䞊蚘で挙げた䞍の解消に向けおプロゞェクトが進行䞭です。 セヌフィヌのビゞネスが拡倧するに぀れ、管理するデヌタ(顧客・カメラ・請求など)は膚倧になっおいきたす。 瀟員が効率よくオペレヌションができ、そしおお客様の満足床向䞊に぀ながるように、 セヌフィヌの業務システムはこれからも進化しおいきたす
はじめに MDMずは 新倧 MDMを䜿ったiOSアプリの配垃術 1. AppleID無しでアプリを配垃できるMDM 【Safie事䟋】 2. 端末毎に異なる蚭定をしおアプリを配垃できるMDM 【仮説】 3. iOSのバヌゞョン曎新を抑制できるMDM 【Safie事䟋】 最埌に はじめに こんにちは。2021幎5月に入瀟し、モバむルグルヌプでiOSアプリ開発を担圓しおいる倪田です。 奜きなiOS SDKはExtensionsです👍 今回は、2021.9.17-19に開催されたiOSDCセッションの䞭から興味深かったテヌマを圓瀟サヌビスの事䟋を亀えお簡単にご玹介したす。 むベント開催から半幎以䞊経ち今さらなによず思われた方もいるず思いたす。 しかし、知っおいたしたかiOSDCのセッション動画は1ヶ月経぀ず Youtubeに無料で公開 されるのです むベントに参加した人もしおいない人もこの機䌚にぜひぜひ本ブログず䞀緒に芋お頂ければず思いたす。 ずいうこずで取り䞊げるテヌマはこちらですMDM 参考にしたiOSDCのセッションは 「MDMを䜿っお業務甚アプリの初期蚭定を自動化する」 です。 取り䞊げた理由は、 以前の蚘事 「画像認識技術、サヌビスの自瀟利甚」 で玹介した圓瀟 SafieEntranceサヌビス を利甚しお頂いおいるお客様の環境でも導入しおいるこず 「MDM テックブログ」でググったずころ、蚘事が少なかったこず なにより、開発者ずしお SafieViewerアプリ や SafieEntranceアプリ をただ単に䜜るだけでなく 導入・運甚するずきの課題や苊劎ずいった 珟堎の䞍 も認識しおおきたかったこず です。 MDMずは ちなみに、MDMずは Mobile Device Management の略で、倚数のモバむル端末を管理する仕組み、あるいはクラりドサヌビスのこずを蚀いたす。iOSの堎合はAppleが定めた MDM Protocol に埓い、アプリの配垃・端末OSの蚭定・遠隔操䜜などが実珟できるものになっおいたす。MDMが掻躍する察象領域は図のアプリを「導入する」「぀かう」ずなっおいたす。 図. MDMの察象領域 䜙談ですが、MDMを䜿うにあたりAPNsApple Push Notification service・ABMApple Business Managerずいうサヌビスも重芁になっおきたす。今回は、 珟堎の䞍 ず それを解決できるMDM ずいう内容をお䌝えしたいず思うのでMDM-APNs-ABM連携の仕組みに関する説明は割愛臎したす。 それでは、SafieEntranceの事䟋も亀えながらMDMで実珟できる぀のこずを玹介したす 新倧 MDMを䜿ったiOSアプリの配垃術 1. AppleID無しでアプリを配垃できるMDM 【Safie事䟋】 たず初めに開発者のみなさたにお䌝えしたいこずはAppleIDがないずiPad端末にアプリをむンストヌルできないずいうこず。 圓たり前だよずいうツッコミ、ありがずうございたす。 しかし埅っおくださいアプリをむンストヌルするために、AppleIDを200台の端末に蚭定するこずを考えおみるず、 AppleIDの登録䜜業が面倒 200台毎にAppleIDを䜜るず管理するのが面倒 AppleIDを䜿い回すにも端末䞊限は台、しかもアカりントを共有するずある端末で出たアラヌト等が共有した他の端末でも衚瀺されおしたうのが面倒 ずいった面倒に出くわすのでありたす。 そこで登堎するのがMDM。 MDMを䜿えばAppleIDなしでも指定したiPadに䞀括でアプリを配垃するこずができるのです。 正確にはAppleのVPPVolume Purchase ProgramずMDMの合わせ技。 VPP StoreからApp Storeに公開されおいるアプリを䞀括賌入しおMDMを䜿っお配信するずいう流れになりたす。 2. 端末毎に異なる蚭定をしおアプリを配垃できるMDM 【仮説】 続きたしお、SafieEntranceの事䟋ではないのですが、iOSDCセッションを聞いお実珟できそうだなず思った劄想事䟋を玹介したいず思いたす。 それはアプリの初回ログむン䜜業の手間を省くこず。 SafieEntranceアプリの堎合、ログむンした埌は基本的にログアりトするこずなくログむン埌の顔認蚌画面を垞時開いた状態にしおiPadを垞蚭しおおくずいう特城がありたす。 ぀たり、基本的にログむンする凊理は導入時の回のみ。 驚くこずにiOSDCでは Managed App Configuration ずいう機胜を䜿いMDM䞊で { key : value } を蚭定するだけでその情報をアプリに蚭定した状態で端末毎にアプリを配垃できるずいう事䟋が玹介されおいたした。 { key : value } の取埗方法はiOS SDKの UserDefaults を䜿っお取埗できるずのこず。 もしかしお、䞋蚘のように実装すればログむン䜜業も省けるのではず筆者は考えたのでありたす。 図. Managed App Configurationを䜿った自動ログむン実装䟋 これにより、䟋えばiPadの蚭眮工事の際にアプリを起動しおもらえればログむン情報の入力が省けるずいう算段です。 3. iOSのバヌゞョン曎新を抑制できるMDM 【Safie事䟋】 無事に導入できたのも束の間、䞍穏な空気を感じおいる開発者もいるず思いたす。 そう、iOSのバヌゞョン曎新でありたす。 iOS Developerであればこのバヌゞョン曎新に血ず汗ず涙を倧量に流した方も倚いこずでしょう。 しかし、MDMはOSのバヌゞョン曎新をも抑制しおアプリを配垃するこずができる匷者でもあったのです iOSではアクセスポむントぞのSSIDやパスワヌドなどの端末に必芁な情報をXML圢匏で蚘述した 構成プロファむル ずいうものを䜿っお蚭定できるようになっおいたす。 この構成プロファむルにOSのバヌゞョンが自動で曎新されないような蚘述をし、MDMからiPadに蚭定を流し蟌むずいうこずになりたす 䜙談ですが、Siriを無効化させるずいうこずも構成プロファむルで蚭定できそうです... 図. Apple Configurator 2 を䜿った構成プロファむルの蚭定 以䞊、新倧 MDMを䜿ったiOSアプリの配垃術 の玹介でした。 正盎に申したすず入瀟した時点では私自身がMDMのこずを知りたせんでした。今回、MDMの配垃術を敎理するこずで 珟堎の䞍 を考えながらモノづくりをするこずが重芁だずいうこずを改めお考えさせられた次第です。 アプリを導入する際の困りごずに関しおは珟堎でその䜜業を聞いたり実際にやっおみないず分からないこずも倚いず思いたす。玹介した事䟋は聞けば圓たり前のこずかもしれたせんが意識しないず気づかないこずずも思えたす。 䞊蚘で玹介させお頂いた珟堎の事䟋以倖でも、 垞蚭しお24時間動かしおいるiPadを定期的に拭き掃陀しおくれる業者さんがアプリを閉じないようにするためにアクセスガむド蚭定が必芁。アクセスガむドを蚭定しおアプリを起動させおいる堎合、 SFSafariViewController を䜿っおWebブラりザを開くこずはできるのかずいうこずも開発者は怜蚎しなければいけないずいうこずもありたした 😥 ゜フトりェア゚ンゞニアでも 珟地・珟物・珟認ずいう教えは倧事だな ず感じたずころです。 最埌に さお、ここたで読んで頂いおMDMを䜿っおみたいず思われた開発者のみなさたに残念なお知らせがありたす。 それは、個人で利甚できるMDMベンダヌさんが調べた限り無いずいうこず基本は法人契玄 安心しおください。 それでもMDMを䜿った開発の䞀端に觊れおみたいずいう゚ンゞニアの方のために 入口 を甚意しおありたす。詳しくは 👇 を芗いおみおください。 open.talentio.com これを機にあなたのDevelopmentの䞖界をExtensionしおみおはいかがでしょうか。 読んで頂きありがずうございたした🙇‍♂
初めたしお。セヌフィヌの柏朚です。 AI/画像凊理゚ンゞニアで、テックブログ運営チヌムにも所属しおいたす。 今回は、セヌフィヌにおけるメむン事業であるクラりド録画サヌビスず各職皮の゚ンゞニアの業務に぀いお玹介したす。 クラりド録画サヌビスシステムの党䜓像ず、それぞれの゚ンゞニアが䞀䜓䜕をやっおいるのか、わかりやすくお䌝えできればず思いたす。 セヌフィヌのクラりド録画サヌビスシステム クラりド録画サヌビスの流れず、担圓゚ンゞニアの玹介 組み蟌み゜フトりェア゚ンゞニア サヌバヌサむド゚ンゞニア/むンフラ・SRE゚ンゞニア AI/画像凊理 ゚ンゞニア フロント゚ンド゚ンゞニア iOS/Android゚ンゞニア 業務システム゚ンゞニア QA゚ンゞニア デヌタ゚ンゞニア 最埌に セヌフィヌのクラりド録画サヌビスシステム セヌフィヌのクラりド録画サヌビスは、カメラで撮圱した映像デヌタがクラりドにアップロヌドされ、必芁に応じおクラむアントアプリケヌションフロント゚ンド、モバむルに配信されおおり、幅広い領域の技術が組み合わさっお構成されおいたす。こういった領域に銎染みがないずなかなか耇雑に感じるサヌビスかもしれたせん。 そこで今回はそのサヌビスの流れにそっお、各領域の゚ンゞニア業務を玹介しおいきたす。 こちらがサヌビスの党䜓像に職皮別の゚ンゞニアを圓おはめた図になりたす。 䞀぀のサヌビスに察しお非垞に幅広い分野の゚ンゞニアが関わっおいるこずがわかりたすね。それでは䞀぀ず぀玹介しおいきたす。 クラりド録画サヌビスの流れず、担圓゚ンゞニアの玹介 組み蟌み゜フトりェア゚ンゞニア セヌフィヌではクラりドカメラを扱っおいたす。 カメラがないずたず映像が撮れたせん。セヌフィヌで扱っおいるカメラの数は非垞に倚く、たたメヌカヌも様々です。 これら幅広いカメラ機皮に察応し、䜿いこなすためのファヌムりェア開発を行っおいるのが、「組み蟌み゜フトりェア゚ンゞニア」です。 䜿いこなすための機胜ずしお䞀䟋を挙げるず、決められた時間にスナップショットの撮圱を行いサヌバヌに保存を行うスナップショットスケゞュヌル機胜や、サヌバヌずの通信接続が切れたずきに録画欠損を防ぐための本䜓録画バックアップ機胜がありたす。たた、撮圱した映像をサヌバヌに送信する機胜も画䞀化し実装しおいたす。 新しいカメラを販売する際は真っ先に察応し最前線に立っお実装する゚ンゞニアです。 䜿甚蚀語はC++。ラむブラリではBoostも䜿甚しおいたす。 サヌバヌサむド゚ンゞニア/むンフラ・SRE゚ンゞニア カメラで撮圱された映像はサヌバヌに送られ、録画されたす。 ここでサヌバヌで行われる凊理を実装するのが、「サヌバヌサむド゚ンゞニア」です。 サヌバヌで録画される期間はプランによっお異なるので、サヌバヌサむド゚ンゞニアはプランに応じた録画デヌタの保存凊理を行っおいたす。その埌PC等フロント偎に映像を送るための前凊理も行っおいたす。 たた、 セヌフィヌで䜿甚されるAPI党般の開発も行っおおり、フロントからの制埡の倧郚分はサヌバヌを経由するため、サヌバヌ偎のAPIの開発が必須ずなりたす。 映像芖聎アプリケヌション向けの機胜を実珟するためのAPIのほか、各皮管理アプリケヌション向けのAPIの開発も行っおいたす。合わせお保守・運甚・改善も継続的に実斜しおいたす。 䜿甚蚀語は䞻にPython。䞀郚Go、Javaも䜿っおいたす。 サヌバヌサむド゚ンゞニアが利甚しおいる膚倧な数のサヌバヌを構築・管理・運甚するのが、「むンフラ・SRE゚ンゞニア」です。 むンフラ・SRE゚ンゞニアの圹割は䞻に4぀ありたす。  新しいシステムに察するむンフラの蚭蚈  コヌドによるむンフラ管理  システム・サヌバヌのアプリケヌションに察する監芖  デプロむの改善 セヌフィヌではむンフラの芏暡が非垞に倧きく、1000台を超えるサヌバヌを扱っおいたす。 今埌も新しいプロダクト・アプリケヌションが増えおくるため、これらの管理・改善は必須の䜜業です。 䜿甚ツヌルはTerraform、Ansible。監芖にはPrometheus, Grafana, Amazon CloudWatch, StatusCakeなどを䜿いたす。デプロむではGitHub Actionsを䜿うこずもありたす。 AI/画像凊理 ゚ンゞニア 撮圱された映像はAI機胜を甚いお解析するこずができたす。 䟋えば映像内の人数を数えるオプションサヌビス「Safie AI People Count」がそれにあたりたす。解析はカメラの゚ッゞデバむス内で行うこずもあれば、サヌバヌ内で行うこずもありたす。 それぞれのタスクに察しお効率的な凊理のパむプラむンを䜜成し、 最適なアルゎリズムの調査・実装・改善を行うのが「AI/画像凊理゚ンゞニア」です。 アルゎリズムでは、Deep Learningを䜿甚するこずもあれば、ルヌルベヌスの画像凊理を扱うこずもありたす。 Deep Learningを䜿甚する際は、デヌタの収集やアノテヌションなども担圓したす。 䜿甚蚀語はPythonたたはC++。ラむブラリはOpenCVやPytorchを䜿うこずが倚いです。 フロント゚ンド゚ンゞニア 撮圱された映像はWebブラりザで芋るこずができたす。この 映像芖聎アプリケヌションの開発は「フロント゚ンド゚ンゞニア」の担圓です。 映像はカメラの状態によっお、Live配信が切れたり、録画映像が存圚しない可胜性があり、快適な芖聎のために耇雑な゚ラヌハンドリングを行っおいたす。 埓来の非クラりド型VMSVideo Management Systemで䞀般的なマルチビュヌアヌ耇数台のカメラ映像同時芖聎や、高解像床・倧型モニタヌでの芖聎に察応しおおり、倚くのカメラを扱えたす。倧量な情報を凊理し぀぀、ナヌザヌの䜿い勝手を向䞊する工倫を随所に凝らしおいたす。 このアプリケヌションの他に、䌁業・販売代理店向け管理アプリケヌションの開発もしおいたす。 䜿甚蚀語はTypeScriptで、利甚しおいるフレヌムワヌクはAngular、Vue.jsです。 iOS/Android゚ンゞニア 映像デヌタはモバむル端末スマヌトフォン、タブレットからも芋るこずができたす。 このモバむルアプリの開発を担圓しおいるのが、「iOS/Android゚ンゞニア」です。 モバむル端末向けアプリにおけるUIの構築や画面の遷移、動画ストリヌミングの制埡、SafieのサヌバヌAPIずの通信や、カメラずのBluetooth通信制埡などを行っおいたす。 近幎はモバむル端末甚アプリを䜿甚するナヌザヌが増え、䞀日に数䞇人が利甚しおおり、Webアプリの利甚ナヌザヌを超える人数ずなっおいたす。 アプリのデザむンに぀いおは、基本的にデザむン担圓の郚眲から仕様を受け取りたすが、UI/UXの改善案を゚ンゞニア偎から提案するこずもありたす。 開発蚀語はiOSがSwift、AndroidはKotlinを䜿甚しおいたす。 業務システム゚ンゞニア 顧客管理や受泚〜出荷〜請求ずいう䞀連のオペレヌションに甚いる瀟内システムを開発・運甚しおいるのが、「業務システム゚ンゞニア」です。 珟圚セヌフィヌではSalesforceをメむンのシステムに据え、他システムず連携しおいたす。 ECサむトからの泚文情報をSalesforceに連携したり、お客様に出荷するカメラず録画プランを玐付けた䞊でセヌフィヌの基幹システムず連携したり、売䞊の情報を請求管理システムに連携したりなど、サヌビスをより円滑にお客様のもずぞ届けるための仕組みづくりをしおいたす。 クラりドカメラサヌビスの開発ずは盎接関わりたせんが、今埌のセヌフィヌの成長を䞋支えするために必須の゚ンゞニアずなっおいたす。 QA゚ンゞニア ここたでご玹介したずおり、セヌフィヌの補品はフロントからデバむス、サヌバヌなど非垞に幅広い分野にたたがっおおりたす。 これらの補品を出すためには、品質の保蚌を行う゚ンゞニアが必芁です。セヌフィヌでは QCDMTQuality品質、Cost費甚Delivery玍期Managment Team)チヌムを䜜り、QA゚ンゞニアが圹割を担っおいたす。 QA゚ンゞニアは、開発した補品党般に察しおテストを行っおおり、開発ずのテスト内容のすり合わせ、テストスケゞュヌルの調敎など、品質のチェックにあたっお様々な察応を行っおいたす。 セヌフィヌのQAはデバむス・フロントアプリ・サヌバヌAPI・サヌビス(商品) など、広範囲にわたっお仕様を理解する必芁があるため非垞に難しいQAずなりたす。しかし開発メンバヌず距離が近いので、テスト時実斜方法の盞談や、実斜結果に぀いおの䞍明点などを迅速に話し合える環境がありたす。 たた、珟圚は効率のよいテストの実行に向けお、䞀郚テストケヌスの自動化進めるなどの仕組みの効率化を進めるなどの取り組みも行っおいたす。 個人の裁量で必芁に応じおJavaScriptやSQLを利甚するなど、幅広いスキルを掻かした働き方も可胜です。 デヌタ゚ンゞニア セヌフィヌのサヌビスレベルを向䞊させお行くためには、感芚だけに頌るのではなく各皮リアルな情報に基づいた分析が必芁です。 必芁な各皮デヌタを分析し様々な掻動に掻かすためのシステム基盀を開発しおいるのが「デヌタ゚ンゞニア」になりたす。 䟋えばナヌザヌの契玄、解玄状況やサヌビスの利甚動向などの集蚈、分析を行っおいたす。 珟圚はAmazon RedShiftを利甚しおおり、アナリストず連携しこれらの業務にあたっおいたす。䜿甚蚀語はPython、SQLです。 最埌に 今回は、セヌフィヌのクラりド録画サヌビスのシステムの党䜓像ず、各領域の゚ンゞニアの圹割に぀いお玹介したした。 今埌、本ブログでも自分の領域ずは銎染みのない゚ンゞニアの蚘事が出おくるこずがあるかず思いたすが、この蚘事をふり返るこずで「あこんな仕事をしおいるんだな」ず思いながら読んでいただければ嬉しいです。 採甚も積極的に行っおおりたすので、セヌフィヌに興味を持っおいただいた方はぜひご応募ください。 article.safie.link
こんにちは。 セヌフィヌ株匏䌚瀟 バック゚ンド゚ンゞニアの河接です。 先日ご瞁あっお、Node-REDをテヌマにしたミヌトアップで簡単なLT(ラむトニングトヌク)をさせおいただく機䌚がありたした。 Node-REDずいうのはフロヌベヌスのビゞュアルプログラミングツヌルでしお、ノヌコヌド/ロヌコヌドなアプリケヌションの開発を行うこずができるツヌルです。(詳しくは埌述したす。) どのような登壇内容にするか迷っおいたのですが、圓瀟で提䟛しおいるサヌビス「Safie API」ずNode-REDが、ノヌコヌド/ロヌコヌド開発の芳点から盞性いいのではなかろうかず思い立ち、これらを連携しお䌚議宀の空き状況を確認するシステムのプロトタむプを䜜りたした。 今回はその内容に觊れ぀぀、Safie APIずNode-REDの連携掻甚䟋に぀いお玹介させおいただきたす。 今回䜜るもの Safie APIずは Node-REDずは Safie APIの䜿甚準備 Node-REDでのシステム構築 1.Slack in ノヌド 2.Switch ノヌド 3.functionノヌド 4.http requestノヌド 5.functionノヌド 6.Slack outノヌド やっおみた感想 ちなみに、こちらの蚘事は enebular Advent Calendar 2021 に、24日目の蚘事ずしお参加させおいただいおいたす。 たた、こちらの内容は䞊述のミヌトアップコミュニティにおアヌカむブされおいたす。詳现な郚分など口頭での説明もありたすので、良ければ合わせおご芧ください。 www.youtube.com 今回䜜るもの Slackで「䌚議宀の空き状況を教えお」などのようにコメントするず、珟圚の混雑状況を教えおくれるBotを䜜成したいず思いたす。 䞊蚘のコメントをSlackのWebhookで受け取った際に、Safie APIにお珟圚䌚議宀にどれだけ人がいるかの情報を取埗し、その情報をベヌスに「珟圚〇〇人が䌚議宀を䜿っおいたす」ずいった情報をSlack Botが答えおくれる、ずいうようなシステムを䜜っおみるこずを目指したす。 SlackのWebhook先を蚭定するには、本来䜕かしらAPIを実装しおそれを蚭定する必芁があるのず、APIを動䜜させるためのサヌバも構築しなければなりたせんが、この䞭継地点ずなるサヌバおよび゚ンドポむントの圹割を、今回はNode-REDに担っおもらいたす。 䞋蚘のようなシヌケンスで䜜成しおいきたす。 Safie APIずは Safie APIは、セヌフィヌのカメラから埗られる情報を取埗・曎新するこずができるAPIです。 セヌフィヌではSafieViewerずいう、カメラに映った映像などの情報を芋るこずができるアプリケヌションを提䟛しおいるのですが、アプリケヌションずしおだけではなく、ナヌザヌが普段䜿っおいる業務システムにも組み蟌めるように、SafieViewerで提䟛しおいる各機胜をAPIずしお提䟛しおいたす。 developers.safie.link 䟋えば、ストリヌミング映像デヌタを取埗するこずができたり、静止画の取埗、動画のダりンロヌドなどを行うこずができたす。 テックブログ内に、「Safie APIの始め方ず動䜜方法の玹介」ずいうSafie APIに぀いお解説された蚘事がありたすので、こちらも合わせお読んでいただければず思いたす engineers.safie.link Node-REDずは Node-REDは元々IBMにお開発されたIoT向けのフロヌベヌスドプログラミングツヌルです。 珟圚はOSSずしお寄莈されおいるため、むンストヌルすれば誰でも䜿うこずができたす。 むンストヌルの手順などは公匏のこちらのペヌゞなどが参考になりたす。 nodered.org ちなみに今回僕はenebularずいうサヌビスを䜿い、クラりド䞊のNode-RED環境を䜿いたした。 www.enebular.com Node-REDは、「ノヌド」ずいう機胜単䜍の箱(䟋えば、Webhookを受け取る、倖郚APIず通信する、Slackにメッセヌゞを送る、など)を、「フロヌ」ずいう線で組み合わせるこずで、いわゆるビゞュアルプログラミングのような圢でシステムを組むこずができたす。 たた、现かな凊理を远加したい堎合はその郚分だけコヌドを曞くこずができるので、ノヌコヌド・ロヌコヌドで䜜りたい機胜を実珟するこずができたす。 Node-REDはIoTアプリケヌション開発に䜿われるケヌスが倚いですが、サヌバサむドの凊理を任せる䜿い方もできたす。 このNode-REDを利甚しお、䌚議宀の空き状況を教えおくれるBotの䜜成をしおいきたす。 Safie APIの䜿甚準備 前述した「 Safie APIの始め方ず動䜜方法の玹介 」の蚘事内にお、Safie APIを䜿甚するための手順が蚘茉されおいたすので、良ければこちらをご芧ください。 ※2021/12/17珟圚、Safie APIは䞀郚のナヌザヌにのみ利甚を開攟しおおり、申し蟌みいただいおも党員が䜿甚できるわけでないためご泚意ください。 蚘事内の手順からアクセストヌクンを取埗しお、準備完了です。 Node-REDでのシステム構築 繰り返しですが、今回は「Slackで䌚議宀の空き状況を聞くず、空き状況を答えおくれる」機胜を䜜成したす。そのために、Saife APIの「人物怜出結果䞀芧API」を䜿甚したす。 今回䜿甚するカメラにはこのような䌚議宀が映っおいたす。 「人物怜出結果䞀芧API」は、このカメラに映った映像から人物を怜出し、「䞀定期間の間に映った人の数」をカりントするこずができたす。 この「人物怜出結果䞀芧API」を䜿甚するこずで、盎近1分間に䌚議宀を䜿っおいた人の数(のべ人数)を出し぀぀、それをSlackで返答するようにしたす。 Node-REDのフロヌを、こんな颚に組んでみたした。 凊理の流れずしお、 Slackぞのメッセヌゞ送信怜知(Slack inノヌド) 特定のワヌドのみ反応するようにする(「振り分け」ずいう名前のSwitchノヌド) Safie APIにリク゚ストするためのパラメヌタ䜜成(「Safie人物怜知API送信準備」ずいう名前のfunctionノヌド) Safie APIぞのリク゚スト(「Safie人物怜知API疎通」ずいう名前のhttp requestノヌド) レスポンス内容を敎圢しお珟圚䌚議宀にいる人を算出(「返信文」ずいう名前のfunctionノヌド) Slackにメッセヌゞを送る(Slack outノヌド) ずいう流れになりたす。 䞀぀䞀぀、どのような凊理になっおいるかを解説したす。 1.Slack in ノヌド Slackにメッセヌゞが送られたこずをhookしおくれる機胜です。 Slack Bot䜜成の際に䜜られるAPI Tokenず、投皿されたら発火するチャンネル名を蚭定するこずができたす。 2.Switch ノヌド 「䌚議宀の利甚状況を教えお」などの、特殊なメッセヌゞにのみ反応しおほしいため、このSwitchノヌドで凊理の分岐を行っおいたす。 メッセヌゞの内容が「䌚議宀の利甚状況を教えお」だった堎合に、次のノヌド凊理に移りたす。 3.functionノヌド Safie APIで人物怜出結果を取埗するためのリク゚ストパラメヌタを䜜成したす。 functionノヌドではNode.jsでコヌドを曞くこずができ、今回は、䌚議宀を映すカメラ固有のID「device_id」を蚭定し぀぀、盎近1分間に映った人の数をカりントするようにパラメヌタを䜜成したす。 4.http requestノヌド Safie APIぞのリク゚ストを行いたす。 このノヌドにAPIの゚ンドポむントやアクセストヌクンを蚭定しお、認蚌を通るようにしたす。 5.functionノヌド Safie APIからのレスポンスをこのノヌドで敎圢したす。 デヌタには1分間に映った人数デヌタが入っおいるので、それを集蚈しのべ人数ずしおいたす。 圓然この䞭には同じ人がカりントされおいるデヌタもたずめお集蚈しおいるのですが、今回はプロトタむプずいうこずで蚱容しおいたす。 たたこの凊理の䞭で、次のノヌドであるSlackに送るメッセヌゞを組み立おたす。 6.Slack outノヌド Slackにメッセヌゞを送るノヌドです。 こちらにもSlack inノヌドず同様、BotのAPI Tokenず、通知するチャンネルを蚭定するこずで、䞋蚘のようなメッセヌゞを飛ばすこずができたす。 やっおみた感想 ここたでご玹介したようにNode-REDを䜿うこずで、少しコヌドを曞くだけでここたでの仕組みを構築するこずができたした。 本来はSlackずの連携や、Safie APIずの連携を行うためには䞭継の圹割ずなるサヌバが必芁になりたすが、Node-REDがそこを代替しおいるためかなり䜜成工数は抑えられおいたす。 䞀方で、Node-REDにはアクセストヌクンをベタ曞きにしおおり、そこをどう自動で曎新しおいくかずいう点や、APIから取埗したデヌタのうたい䜿い方を暡玢する必芁があるなず感じたした。 ノヌコヌド・ロヌコヌドの仕組みは開発箇所を絞れお工数を抑えられる反面、ツヌルを䜿う䞊で出おくる仕様䞊の瞛りずうたく向き合う必芁がありたす。 クオリティ向䞊のためにコヌドを曞いお远加開発を行うにも限界があるため、ノヌコヌド・ロヌコヌドのたたいかに機胜を組み合わせ拡充しおいくかずいう考え方・工倫が必芁になっおきそうだなず感じたした。
こんにちは このたびセヌフィヌ株匏䌚瀟でむンタヌンをさせおいただきたした、吉田ず申したす。 この蚘事を通しお、むンタヌンで埗た孊びや、䌚瀟の雰囲気などが䌝われば嬉しいです。 むンタヌンをした経緯・目的 セヌフィヌのどこに興味をもったのか 遞考 むンタヌンの抂芁 やったこず 行動認識の既存モデルの怜蚌 機械孊習モデルの量子化 孊んだこず・感想 むンタヌンをした経緯・目的 私は就職掻動においお、倧䌁業よりもベンチャヌ䌁業に魅力を感じおいたした。 ベンチャヌ䌁業のほうが、お客さんずも関われるし、事業党䜓に幅広く関わったり、新しいこずにチャレンゞできたりしそうだず思ったからです。 ただ、実際にベンチャヌ䌁業で働いおみた経隓はなかったので、職堎の雰囲気や業務内容がどうなのか䜓隓しおみたく、むンタヌンをするこずしたした。 セヌフィヌは珟圚の研究テヌマにあっおいお、か぀ベンチャヌ䌁業ずいうこずで、倧孊の就職担圓の方を通しお玹介しおいただきたした。 セヌフィヌのどこに興味をもったのか 私は、機械孊習や神経科孊を䜿っお人間の知胜に぀いお研究しおいる研究宀に所属しおおり、そのあたりの分野に関わりのある䌁業を探しお就掻をしおいたした。 セヌフィヌは、単に映像を扱っおいるだけでなく、将来的に「映像プラットフォヌム」を䜜ろうずしおいたす。 これは、耇数のカメラの映像を䞀元管理し、膚倧な映像を蚀語で怜玢したり、様々なアプリを䜿っお解析したりできる堎を䜜ろうずいうものです。 連続的な映像デヌタから、起きたむベントなどの抜象的な情報を取り出しお蚀語で怜玢できるようにするずいうのは、人間が芋たものの意味を理解するずいうこずず共通する点が倚いず感じ、興味を持ちたした。 たた、映像プラットフォヌムでは、他瀟補を含む映像解析アプリのプラットフォヌムを䜜り、そこから自由に遞んで自瀟のデヌタに䜿えるようにするずいう構想があり、ビゞネスの発展性ずいう点からも面癜い䌁業だなず思いたした。 遞考 むンタヌンにあたり、面談ずコヌディングテストを受けたした。 面談は䌚瀟説明を兌ねたカゞュアルなもので、絊䞎面や、私個人の将来に぀いおのこずも含め、いろいろ盞談させおいただきたした。 コヌディングテストは初めおだったので緊匵しおいたしたが、思ったよりも軜めのもので、ゆるく競技プログラミングに觊れおいたこずもあり通過するこずができたした。 むンタヌンの抂芁 プロダクト開発郚のむメヌゞングチヌムに加えおいただき、10月から12月にかけお週に2日、蚈16日間の日皋でむンタヌンを行いたした。 出瀟するかリモヌト勀務にするかは自分で決めるこずができ、今回はどちらも経隓しおみようずいうこずで、リモヌトず出瀟を半分ず぀で行いたした。 業務は䌚瀟から貞䞎されたラップトップで行いたした。 チヌムの゚ンゞニアの方にメンタヌずしお぀いおもらい、課題に取り組みたした。 業務䞭は基本的にSlackでコミュニケヌションをずりながら䜜業したした。 勀務時間の終わりにはミヌティングを行い、䜜業ログを芋ながらその日の振り返りをし぀぀、次回以降の方針を決めたした。このように毎回密にフィヌドバックを貰えたのは心匷かったです。 たた、Googleドキュメントにレポヌトの雛型を䜜っおおき、それを埋めおいくずいうドキュメントベヌスの圢で䜜業を進めたした。こうするこずで、あずどのくらいで終わりそうかずいう芋通しが立ち、短い期間の䞭でも安心感がありたした。 レポヌトは最埌に共有䌚を行い、゚ンゞニアチヌムのほか、䌁画や営業の方からもフィヌドバックをいただきたした。 出瀟した日には毎回いろんな郚眲の方ずランチの予定が組たれおいお、緊匵もしたしたが、どの方も気さくに話しかけおくれたので楜しかったです。 やったこず 私の興味がある分野ず、瀟内の課題ずを照らし合わせ、事前にいく぀かタスクを準備しおいただいおいたした。 面談の際に、将来やっおみたいこずずしお、映像解析の技術を応甚しおラむフログの解析をしおみたいず䌝えおいたので、関係しそうなものずしお、行動認識アルゎリズムの実甚性を評䟡するずいうタスクをするこずになりたした。 行動認識の既存モデルの怜蚌 行動認識ずは、映像䞭に映っおいる人を怜知し、その人が䜕をしおいるのかラベル付けするずいうタスクです。 店内に蚭眮したカメラで顧客の行動から興味があるか刀別しおマヌケティングに掻かしたり、瀟員の姿勢や動きを認識しおより働きやすいオフィスづくりに掻かしたりするなどのニヌズが考えられたす。 今回は、PoseC3D、SlowFast Networksずいう2぀の既存モデルに察しお、瀟内カメラのデヌタを䜿っお評䟡したした。 PoseC3Dは、人物の骚栌を怜出するスケルトンベヌスの行動認識アルゎリズムです。人物ごずのスケルトンず、映像党䜓がどんなシヌンかずいうラベルを出力したす。 github.com PoseC3Dの出力結果 SlowFast Networksは、2段階の時間解像床で映像を認識するこずでより正確に・効率的に認識をするずいう行動認識アルゎリズムです。人物ごずに行動のラベルを出力したす。 github.com SlowFast Networksの出力結果 個人ごずに行動を認識できるSlowFast Networksに぀いお、より詳しく評䟡を行うず以䞋のような結果ずなりたした。 被写䜓の距離 距離が遠かったり、画面の端のほうにいたりするず人物怜知されにくく、行動認識の粟床も䜎䞋した。 遮蔜物がなく党身が映っおいればある皋床認識できた。 被写䜓の行動 立ち䞊がる、座るなどの姿勢が倧きく倉化する動䜜だず行動認識の粟床が䜎䞋した。 映像の画質 画質(圧瞮方匏)を倉曎するこずで、同時に怜知される人数が増加した。 映像の画角 急な角床で芋䞋ろすような画角の堎合、人物怜知、行動認識の粟床がずもに䜎䞋した。 被写䜓ず氎平になるようにカメラを蚭眮するこずで改善した。 今埌より実甚的な状況で䜿うためには、以䞋のような工倫が考えられたす。 察象の党身が倧きく映るようカメラ䜍眮を調節する。 特殊な画角の堎合はファむンチュヌニング*を行う。 認識したい行動に絞っお再孊習する。 *ファむンチュヌニング: 孊習枈みモデルの䞀郚を再利甚しおネットワヌクを再構築する方法。 ナヌスケヌスを想定しながら実サヌビスずしおサヌバヌで運甚する堎合のコストの詊算を耇数のパタヌン行いたした。行動認識における掚論凊理を定垞的に行い続けるずコストが高くなるため、動䜓怜知ず組み合わせおむベントが起こったタむミングの映像でだけ掚論を行うこずで、コストパフォヌマンスを䞊げるアプロヌチも考えたした。 機械孊習モデルの量子化 時間が䜙ったため、ほかに提案しおいただいおいたタスクである、機械孊習モデルの量子化の実隓も行いたした。 量子化ずは、ネットワヌクのパラメヌタをより少ないビット数で衚珟するこずでモデルの軜量化を行う技術です。 通垞は32bitの浮動小数点数ずしお扱う数倀を、もう少し粗くしお、8bitや16bitなどの固定小数点数で衚珟するこずで、機械孊習のモデルサむズを抑えるこずができたす。結果ずしおメモリ消費量を軜枛できたり、蚈算を高速化したりできる利点がありたす。 サヌバヌではなくカメラ偎で画像認識を行う「゚ッゞAI」で特に重芁な技術です。 今回は、PyTorchで実装された物䜓怜知モデルを、゚ッゞデバむス向けの掚論ラむブラリであるTensorflow Liteのモデルに倉換しお量子化し、量子化による蚈算時間や掚論性胜の倉化を調べたした。 苊劎した点ずしおは、Tensorflow Liteぱッゞデバむスで䜿われるARMプロセッサ向けに最適化されおいお、intelプロセッサのPCで実行するず遅くなっおしたうずいう萜ずし穎がありたした。これは、Tensorflow Liteをintelプロセッサ向けのオプションを぀けおビルドするこずである皋床緩和されたした。 機械孊習モデル自䜓の研究ではなかなか量子化や゚ッゞAIの技術に觊れるこずがなかったので、勉匷になりたした。 そのほかにも、セヌフィヌ補品を䜿っおいる䌁業の芋孊に同行したり、協業䌁業ずのミヌティングに参加したり、瀟内の勉匷䌚に参加したりず、貎重な䜓隓をいく぀もさせおいただきたした。 瀟内で定期的に開かれおいる勉匷䌚では、メンバヌが自分の専門分野や最近觊っおいる技術に぀いお気軜に共有しおいお、ずおも良い文化だず感じたした。 孊んだこず・感想 今たで䌁業でしっかり実務に携わった経隓がなかったこずもあり、新鮮な経隓ばかりで、あっずいう間に終わっおしたったなずいう感じでした。 特に、実サヌビスを想定したサヌバヌ運甚コストの詊算や削枛に぀いおは、研究ではほずんど意識しないこずだったので新鮮でした。研究も、実甚的に䜿われおこそ意味があるものなので、このあたりの感芚を持っおいるこずは倧事な気がしたした。 たた、䌚議やミヌティングでは、倧人数が参加する堎であっおも立堎の䞊䞋なく若い人が積極的に発蚀しおいお、フランクで働きやすい雰囲気だなず感じたした。 むンタヌン期間を通しお、いろいろな方が進路の盞談に乗っおくださっお、倧倉励みになりたした。みなさんキャリア蚭蚈をきちんず考えおいお、私ももっず自分の将来を具䜓的に考えなければず思わされたした。 最埌になりたすが、メンタヌの方をはじめ、面倒を芋おいただいたむメヌゞングチヌムの皆様、そのほかお䞖話になった瀟員の皆様、本圓にありがずうございたした
䌁画郚 商品䌁画 今野です。Safie APIのプロゞェクトの䌁画を担圓しおいたす。 Safie APIは珟圚β版ずしお公開しおいたすが、それを正匏版にするこずが近々の私の業務目暙ずなっおいたす。私の業務区分は、䌁画立案・プロゞェクトマネヌゞメントですので、バリバリの技術屋の方々に比べるずテックブログを曞くには力䞍足感が正盎吊めたせんが、今回、Safie APIの玹介の堎を頂けるずのこずで、こうしお筆を取らせお頂くこずになりたした。 本投皿では、Safie APIの抂芁ず簡単な動䜜お詊し方法をご玹介したす。よろしくお願いいたしたす。 2023.11.6 远蚘: 最新のSafie APIの玹介ずしお「 Safie API v2(正匏版)の始め方ずトラむアル方法の玹介 」を投皿しおいたす。この蚘事の内容は叀いものになっおいたすので、最新の情報は䞊蚘蚘事を確認ください。 Safie APIずは Safie APIを利甚するには Safie APIを動かしおみる ①カメラ所有者に接続蚱可をもらう ②Code情報を䜿っおTokenを取埗する ③アクセスできるデバむス䞀芧を取埗する 最埌に Safie APIずは Safie APIは、セヌフィヌが提䟛するクラりド録画サヌビスのデヌタを、倖郚のサヌバから取埗したり、情報を曞き足したりする機胜を提䟛するものです。詳现な情報を知りたい方は、 Safie Develpersサむト にある APIドキュメント を参照ください。倧たかには、以䞋の぀のこずができるものず理解しお頂ければ、抂ね誀りはないかず思いたす。 カメラから動画や静止画、怜知したむベント音や動䜓怜知、などを取埗する 動画にむベント䜕かが起こった時間を蚘録するものを登録する 泚意頂きたいこずずしお、Safie APIは倖郚サヌバからの呌び出しを原則ずしおいるため、ブラりザから呌び出すこずはできないこずがありたす。ブラりザから呌び出したい堎合は、Safie APIの利甚プランに含たれおいる Safie web components をご利甚ください。 Safie APIを利甚するには Safie APIの新芏利甚をご垌望の際は、 Developerサむト の「お問い合わせ>API導入前のお問い合せ」の項目よりフォヌムを開いお頂き、項目「API新芏利甚」を「垌望する」にし、他、必芁情報を入力の䞊、送信ください。情報を受けお匊瀟より案内を差し䞊げ、手続きが進みたす。Safie APIの利甚には以䞋の2぀の前提条件がありたすので、お問い合わせの際にはご泚意ください。 クラりド録画プランを契玄するこず、既に契玄しおいるこず Safie APIを利甚するシステムがWebのペヌゞを持っおいるこず 1は、Safie APIがカメラ毎に利甚蚱可を管理しおいるために付いおいる条件です。利甚者の方にカメラのシリアルナンバヌを提䟛頂き、匊瀟偎の管理システムにおそのカメラに暩限付䞎を行いたす。 2は、認蚌に必芁な情報をAPI利甚者偎のWebペヌゞに向けお送信しなくおはいけない手続きが、認蚌プロセス䞭にあるために付いおいる条件です。利甚者の方より甚意されたWebペヌゞのURIを提䟛頂き、匊瀟偎の管理システムに事前に登録をしたす。 それぞれ事前に準備されおいるず手続きがスムヌズに進みたす。 手続きが完了するず、認蚌甚のClient IDずClient Secretが蚘茉された通知曞が手元に届き、APIが䜿甚できるようになりたす。 図Developerサむト お問い合わせ ここで倧倉申し蚳ないお話をしなければなりたせん。珟圚、Safie APIは運甚キャパシティの関係で、問い合わせを頂いた党おの方々に提䟛するこずができおいたせん。たた、法人向け公開に限定しおおり、個人のお問い合わせはお断りしおおりたす。β版が正匏版ずなった際にはより倚くの方々にご利甚頂けるよう、珟圚プロゞェクトを掚進しおおりたす。珟状はご了承頂ければず思いたす。 Safie APIを動かしおみる 具䜓的にどのように動䜜するのか、私の方で実際に動かしおみた手順を玹介させお頂きたす。REST APIですので、呌び出し方は倚皮倚様に可胜な蚳ですが、あたりこの分野に明るくない方もいらっしゃるかず思いたす。そのような方にずっお、どのようなものなのかの感觊を掎む䞀助になれれば幞いです。動䜜環境の圱響はほがないかずは思いたすが、参考に実際に動䜜させた環境を以䞋に蚘茉しおおきたす。 MacBook Pro (13-inch, M1, 2020) macOS Monterey version 12.0.1 Google Chrome version 95.0.4638.69 (Official Build) (arm64) Postman Version 9.0.3 (9.0.3) https://www.postman.com/ カメラにはトラむアル甚のSafie APIプランを付䞎 ①カメラ所有者に接続蚱可をもらう ※今回は蚱可を出すのは自分自身 最初にカメラ所有者から接続蚱可をもらう必芁がありたす。以䞋のURLに指定のQuery Paramsを付䞎し、カメラ所有者よりカメラ所有者のSafie Viewerのメヌルアドレス, パスワヌドを入力しおもらいたす。 https://openapi.safie.link/v1/auth/authorize 私はPostmanを䜿甚しおQuery Paramsを蚭定するこずで、Query Paramsを含んだURLを䜜成したした図2。 図2接続蚱可をもらうURLを生成Postman ※client_idずredirect_uriは利甚者のものを䜿甚するこず そのURLをコピヌペヌストでGoogle ChromeのURL欄に貌り付けるこずで、接続蚱可の画面が衚瀺されたす図3。 図3接続蚱可をするための認蚌画面Google Chrome 今回はカメラ所有者が自分なので、自分のSafie Viewerのメヌルアドレス, パスワヌドを打ち蟌みたした。カメラ所有者が別の人の堎合は、URLを送付し、メヌルアドレス, パスワヌドを打ち蟌んで蚱可をもらう必芁がありたす。図3の画面にお蚱可を行うず、redirect_uriで指定した画面に遷移したす。遷移した先では、Query ParamsのKey: Codeの文字列が付䞎されたす。以䞋のように「?code=」の埌に16進数の矅列が付䞎されたすので、「?code=」の埌から「&status=」の前たでの文字列を蚘録したした。 ~~~?code=XXXXXXXXXXXX16進数の矅列&status= ②Code情報を䜿っおTokenを取埗する Postmanに䞋蚘URLを入力し、マニュアルに蚘茉された指定の各パラメヌタを蚭定したす。codeは蚘録したものを䜿甚したした。 https://openapi.safie.link/v1/auth/token POSTメ゜ッド、か぀、パラメヌタもBodyに蚭定するこずなど指定が倚いので単玔にブラりザでは実行できないため、Postman䞊から実行しおいたす。私はBodyのデヌタ圢匏蚭定を誀り䞀床詰たりたした。正確に「x-www-form-urlencoded」を指定したす。 図4Tokenを取埗Postman ※各パラメヌタは利甚者のものを䜿甚するこず 成功するずPostmanのResponseにaccess_tokenが衚瀺されたす。ここで、access_tokenの文字列を蚘録したした。 図5: Access token 正垞系Response Postman ③アクセスできるデバむス䞀芧を取埗する Tokenを無事に取埗できたので、アクセス可胜なデバむス䞀芧を取埗したす。デバむス䞀芧取埗は特にパラメヌタ指定はないため、以䞋URLずToken蚭定のみを行いたす。 https://openapi.safie.link/v1/devices TokenはAuthorizationのタブを遞択し、Access Tokenの枠に②で蚘録した文字列を蚘入したした。Header Prefixは②のResponseに埓いBearerに蚭定したした。実行するずデバむス䞀芧がResponseに衚瀺されたす。衚瀺された䞀芧から操䜜したいデバむスを探し、そのdevice_idの文字列を蚘録したした。 図6Authorizationの蚭定Postman ④静止画像を撮圱しおみる デバむスを操䜜しおみたす。今回は静止画撮圱を行っおいたす。以䞋のURLの[device_id]の郚分に先ほど蚘録したdevice_idの文字列を蚭定したした。 https://openapi.safie.link/v1/devices/[device_id]/image ③の操䜜同様、Authorizationのタブ䞋にTokenを蚭定したした図7。実行するず、Responseに撮圱した画像が衚瀺されたす。実際に、図7のResponseで静止画像が衚瀺されたこずを確認できたした。 図7静止画の取埗Postman 最埌に いかがでしたでしょうか。β版では運甚キャパシティに限界があり、あたり倧々的な広報ができない状況ですが、今回、テックブログずいうこずで簡単に玹介をさせお頂きたした。玹介が䞻な内容だったずいうこずで、技術者の方にずっおは若干物足りなかったかもしれたせん。今埌、匊瀟技術者より「Safie API䜿っおXXXしおみた」ずいったような内容の蚘事が投皿される予定ずなっおいたすので、より技術的な内容を知りたい方は、そちらの蚘事も是非閲芧頂ければず思いたす。β版が正匏版になった際は、倚くの人が利甚できる環境を提䟛でき、情報展開も倧きくしおいける予定です。どうぞご期埅ください。
セヌフィヌでCTOをさせお頂いおいる森本です。 なぜ顔認蚌で勀怠管理をするこずに 実際のニヌズ 実際にやっおみた内容 1. 電子錠のリモヌト開閉 2.顔認蚌によるドアの解錠管理 1-1.セヌフィヌ察応カメラによる解錠管理 1-2.タブレットによる解錠管理 1-3.现かなチュヌニング 3.顔認蚌による勀怠管理 最埌に 久々の投皿ずなっおしたいたした。 先日の蚘事 で顔認蚌で勀怠管理の玹介をしたしたが、今回はそのシステムの導入たでの道筋も含めお玹介したす。 実際に利甚しおいる様子はこちらです。 なぜ顔認蚌で勀怠管理をするこずに 珟圚セヌフィヌでは SafieVisitors ※1、 SafieEntrance ※2ずいう顔認蚌サヌビスを提䟛しおいたすが、3幎ほど前からこれらのサヌビスに利甚する顔認蚌の仕組みを瀟内でも䜕かに掻かせないかずいうこずで色々怜蚎を行っおいたした。 顔認蚌に限りたせんが、様々な技術や仕組みが実際にプロダクトずしお䜿えるレベルのものなのかどうかずいう事を刀断をする為にも、自分達でずこずん䜿っおみるずいうのは非垞に有効な手段だず思っおいたす。 偶然にも、セヌフィヌ瀟内では䌚瀟の成長に合わせお以䞋のようなニヌズが発生しおいたした。 顔認蚌技術ずその応甚はこれらの察策にマッチするこずが期埅できたした。 実際のニヌズ 瀟員数の増加に䌎い匕っ越しを行ったが、匕越し先ビルはビル入口にオヌトロックが存圚するのみでオフィスフロアにはオヌトロックが存圚しなかった。 セヌフィヌずしおはオフィス入り口にもロックを蚭眮するこずを必須ずしおいたので、䜕らかの圢でロックを蚭眮する必芁があった。 カヌド匏のオヌトロックを蚭眮する堎合、ビル入口はビルが管理しおいるためオフィス入り口ずは別管理ずなりカヌドの2枚持ちが必芁ずなる。 圓時流行り始めおいたスマヌトロックを蚭眮しおみたが、Bluetoothの接続性含め安定性がいたいちでオフィスに入れない人が続出した。 安定しお動䜜する電子錠の蚭眮が望たしい。 䞊蚘を解決するため、実瞟のある䞀般的な電子錠を蚭眮しカヌド無しで入退宀出来る方法を顔認蚌で実珟出来ないかずいうアプロヌチを取る事ずしたした。 ※1顔認蚌技術により、人数のカりントや属性性別、幎霢掚定を行い、その統蚈結果をナヌザヌに提䟛するサヌビス。 ※2顔認蚌技術により、事前に登録したナヌザヌの入退宀管理を提䟛するサヌビス。 実際にやっおみた内容 1. 電子錠のリモヌト開閉 たずは䞀般的な電子錠を蚭眮しそれを開閉出来る仕組みを怜蚎したした。 たたたた、リモヌトから解錠できるプロダクトがあったので、たずはこちらを䜿っおみるこずずしたした。 電子錠リモヌトコントロヌラヌ 2.顔認蚌によるドアの解錠管理 䞊蚘はカヌドでの運甚もサポヌトしおいるのですが、圓瀟ずしおはカヌドの二重持ちはずにかく避けたかったのず、せっかく顔認蚌技術の怜蚎を進めおいたので、顔認蚌でドアの解錠を行うこずを決めたした。 以䞋そのアプロヌチずなりたす。 1-1.セヌフィヌ察応カメラによる解錠管理 セヌフィヌの録画サヌビスでは基本的にはIPカメラを利甚しおいたす。 たずはカメラをドアの前に蚭眮し、認蚌できたらドアを開けるずいうシステムを蚭眮したした。 セヌフィヌ察応カメラによる解錠管理 これで䞀応は顔認蚌によっおドアの解錠が出来るようになったのですが、IPカメラずいうこずで映像を取る事しかできず、ドアが開かなかった堎合にその理由がよく分かりたせんでした。 顔の写り方がおかしい、認蚌に倱敗等が考えられたすが、原因が分からないのでナヌザヌはどうすれば良いかず迷っおしたっおいたした。 1-2.タブレットによる解錠管理 そこで認蚌結果に぀いおフィヌドバックを埗る手段を提䟛する為、認蚌端末ずしおAndroidタブレットを利甚する事ずしたした。 タブレットによる解錠管理 タブレットでAndroidSDKの顔怜知機胜を利甚し顔の切り出しを行い、切り出した顔の認蚌はSafieクラりドで実斜するようになっおいたす。 これで倧幅にナヌザビリティが䞊がり、ドアが開かない堎合にその原因が明確に衚瀺されどのように察応すればよいのか分かるようになりたした。 1-3.现かなチュヌニング ただし、別の問題も発生したした。 AndroidSDKの顔怜知機胜では、実際の顔では無いものを怜知しおしたうずいう事象が倚発したした。 䟋えば、背景の壁等を誀怜知しおしたうような事象があったのですが、䞀床誀怜知をしおしたうず 背景は動くこずが無いので、誀怜知がひたすら継続しおしたうずいう問題が発生しおしたいたした。 顔の誀怜知 これを解決するために、倖郚の顔怜知ラむブラリを䜿甚する事ずしたした。 これにより誀怜知がなくなり、劇的にナヌザビリティが向䞊し、自分たちで䜿っおいおも最䜎限ストレス無く䜿えるレベルたでは品質を䞊げるこずができたした。 ただし、ただただ幟぀か䞍満も残りたした。 埌ろを通りかかっただけでもドアがあいおしたう タブレットに写っおから認蚌が完了しドアがあくたで2〜3秒皋床かかっおしたう 画像デヌタでも空いおしたう これらの䞍満を解決するため、以䞋のような察応を行いたした。 怜知最小サむズを蚭定できるようにし、必芁な人の顔だけ怜知するようにしたした。 怜知最小サむズの蚭定 ラむブラリをチュヌニングし1秒以内でも解錠するようにしたした。 圓瀟オフィスのセキュリティレベルに関わるので詳现はここでは述べたせんが、人間でない堎合は解錠できないずいう察策を実斜したした。 以䞊により党くストレス無くドアの解錠を行い自分たちのオフィスに入退宀できるシステムが完成したした。 3.顔認蚌による勀怠管理 䞊蚘により顔認蚌によるオフィスぞの入退宀管理が実珟できるようになりたした。 ドアの解錠を行うこずにより、誰が䜕時にオフィスに入ったか、出おいったかずいうこずも分かるようになったのですが、これを他にも利甚できないかずいう話になりたした。 圓瀟は勀怠システムずしおKingOfTimeを利甚しおいたのですが、いちいち打刻申請が必芁で面倒だずいう話があったので、ドアの解錠履歎をKingOfTimeに連携する事によりわざわざ打刻凊理をしなくずも勀怠登録ができるようにしようず考えたした。 䞀日の認蚌履歎を確認し、最初の入宀ず最埌の退宀を勀怠時間ずしおAPI連携によりKingOfTimeに登録するようにしたした。 勀怠管理ずの連携 ※残念ながら珟圚コロナの圱響により倧郚分の瀟員さんがリモヌトずなっおしたったので、リモヌト実斜時には個別に打刻しお頂いおいたすが、出瀟時には非垞に䜿いやすいずいうこずで瀟内で絶賛されおいたした笑 最埌に 今回は顔認蚌技術を自分たちで䜿い倒しおみたずころをご玹介したした。 これらの詊行錯誀がSafieEntranceサヌビスやSafieVisitorsサヌビスに繋がっおいたす。 これは䞀䟋ですが、実際のプロダクトを出しおいくにあたり、自分たちで商品を䜿っおみお、䞍満点を党お解消し満足いくたで䜜り䞊げおいくこずは非垞に重芁なプロセスだず感じおいたす。 補足ですが、ここに蚘茉した掻動は2名の゚ンゞニアが䞭心ずなり、3ヶ月ほど掛けお実珟しおくれたした。 尚、匊瀟ずしおはメむンの録画、配信、デヌタ解析サヌビスの曎なる匷化を実珟すべく開発業務に取り組んでいたすが、ただただ゚ンゞニアさんが足りおいない状況です。ご興味がある方はお気軜にご連絡頂けたすず幞いです。
こんにちはむメヌゞングシステムグルヌプの二宮です。2020幎2月に入瀟し、画像凊理の基瀎知識を日々孊びながら、機械孊習モデルのアルゎリズムを開発したり、デプロむメント方法を怜蚎したりしおAIシステム開発に携わっおいたす。「AIの仕事は実際䜕をやるの」や、「実務未経隓者でも倧䞈倫ず蚀われおもどこたで信じればいいのか・・・」などず思われる方も倚いず思いたすので、入瀟した経緯ず普段の業務の䞀郚を玹介しおたいりたす。 今たでの経歎 AIの仕事っお䜕をやるの デヌタ集め アノテヌション䜜業 アルゎリズムの調査 実装/実隓/評䟡 POC そもそもなぜセヌフィヌに入瀟を決めたのか AIをやるにはある皋床の䜙裕が必芁 入瀟を決めるずきの私の刀断基準 最埌に 今たでの経歎 倧孊院卒業埌、倧手メヌカヌで組み蟌み系の補品開発実装2幎 䞭小䌁業でIoT(環境の枬定&制埡)における組み蟌み系蚭蚈・実装 りェブペヌゞの開発実装・DB蚭蚈2幎 これを芋られお「なぜ最初からAIの仕事を遞ばなかったの」ず突っ蟌たれるこずが倚いので匁解させおください。 「同じ仕事を10幎間続けお、時代が倉わり自分の開発しおいる補品も䌚瀟もなくなる。そうなるず、それたでのスキルが掻かせる次の仕事が䞭々芋぀からないから、転職しながらゞェネラリストを目指すずいいかもね。」ず、倧孊院生時代に知り合いからいただいたアドバむスが心に響きたした。続けお楜しくやれそうなのはAIだずしたら、たずぱッゞ偎、りェブ開発の技術を身に着けおから最終的にAIの仕事に萜ち着くキャリアにしようず決めたした。そうしたら、その先もしものこずが起きおも、補品開発ができるための(最䜎限の)知恵はどこかで掻かせるず思いたした。 案の定、最初に務めた補品開発は楜しく思えたしたし、組み蟌み系の知識は貎重な知識だず思いたしたが、ハヌドりェアの蚭蚈開発を含めお補品開発をやっおいる䌚瀟では、仕様・䌁画・開発・補造・品質管理・広告・営業の間で䞀぀のモデルを通しお垂堎に出すだけでも1幎半はかかりたす。たた、䌁業によっおは仕組みも出来䞊がりすぎおいお人も倚いため、担圓させおもらえる機胜が限られおくるこずもありたす。 「これなら10幎間なんおあっずいう間に終わりそう・・・」 ず思い、早いうちにAIに携われる仕事に倉えおキャリアを磚きたい気持ちが匷くなりたした。 そこでセヌフィヌに出䌚い珟圚に至りたす。 AIの仕事っお䜕をやるの むメヌゞングシステムグルヌプの仕事は、孊習アルゎリズムをコツコツず調べお、ネットワヌクをチュヌニングするだけではありたせん。孊習モデルをシステム化できるたで幟぀かのステップが必芁なので玹介しおたいりたす。 デヌタ集め 恐らく、AIに取り組もうずしおこの段階で早速行き詰たる䌚瀟が倚いのではないでしょうか。 我々も、カメラの映像をクラりドに貯めおお客様に閲芧できる環境を提䟛しおいるずはいえ、 お客様のデヌタを芗くこずは䞀切蚱されたせんし、圓然勝手に機械孊習に䜿うこずもできたせん 。 そうするず、解決したい課題をお客様にヒアリングし、デヌタを機械孊習に䜿う蚱可を埗お、初めおデヌタ遞定に進むこずができたす。 アノテヌション䜜業 画像だけを入力しおモデルが勝手に賢くなっおいく魔法のような孊習の仕組みは䞭々ありたせん。 倚くの課題を解決するには、手っ取り早いやり方ずしお「正解ずは䜕か」をモデルに孊習させるずいう方法がありたす。 そうするず、「正解」ずいうのは開発偎で決めないずいけたせんし、自分達で画像䞀枚䞀枚に察し認識したいものに目印を぀ける(アノテヌション)䜜業が必芁です。 なので、画像にポチポチず点を付けおファむルに保存しおいる間に䞀日が終わるこずもありたす。 アルゎリズムの調査 「この課題に認識率ず蚈算時間がピッタリのニュヌラルネットワヌク構成を知っおいる」ずいう技術者であればこのステップは䞀瞬で終わるかもしれたせんが、筆者を含める実務未経隓者でも機械孊習の䞊玚者でも、倚くの人は、最先端技術に぀いおいくために日々孊習方法を調査しおいたす英語の文章が読めるずいいこずがあるかも・・・。 初心者は、「 そもそもCNNずは 」ずいうずころから勉匷し始めるずいいですよく議論で出おくるネットワヌクの名前ずその論文は以䞋です筆者も最初は読んでいなくお䌚議に぀いおいくのに倧倉でした。 YOLO (抂芁説明ペヌゞ論文は「publications」にたずめおありたす) VGG ResNet 実装/実隓/評䟡 論文は、読むだけでは自分の課題に適したネットワヌク構成かどうかが分からないこずが倚いです。そのずきは自分なりに構成を調敎しおたず実装しおみたす 昔なら、この段階ではニュヌラルネットワヌクをれロから自分でコヌディングしおいたした。認識率以前の問題で、そもそも党レむダヌの蚈算が合っおいるかどうかをデバッグするだけで無駄に時間が取られお䞭々研究が進みたせんでした。 今では、ちゃんずアルゎリズムの怜蚎だけに没頭できるように、ニュヌラルネットワヌクが簡単に䜜れるフレヌムワヌクを提䟛しおくださる䌚瀟がたくさんありたす我々のチヌムで䜿っおいるのは TensorFlow 2.0 + Keras です。 䟋えば、以䞋のネットワヌクの䞀局目だけを芋おみたしょう。 CNNに銎染みがない方は分からないかもしれないので、蚀葉にするず次のような蚈算になりたす。 入力画像から3x3の窓を切り取っお、その入力に察しお1個の出力を䜜りたす。 入力画像から3x3の窓が切り取れる数だけ、1. を䜜りたす。 さらに、チャンネルの数だけ画像では32、2. を䜜りたす。 蚀っおしたえば「ただの掛け算ず足し算」ですが、このような蚈算を党レむダに察しお楜しくハヌドコヌディングできる人はいるのでしょうか。 TensorFlow 2.0 + Kerasなら䞀行です。 layer = tf.keras.layers.Convolution2D(32, (3,3), strides=(1, 1), padding='same', activation='relu')(input) こうやっお䞀局䞀局を重ねれば、ニュヌラルネットワヌクの䜜成があっずいう間に終わりたす 因みに、筆者にずっおは初めおのPython開発ずなりたすが呚りの方のご指導の䞋なんずかやっおおりたすどんどん新しいこずにチャレンゞさせおくれる䌚瀟に感謝 POC 実装したモデルを孊習させ評䟡しお、玍埗できる結果が埗られたらプラットホヌムに茉せるステップに進みたす。リアルタむムで画像を取埗しながら、以䞋に぀いお様子を芋ながら開発の方向性を芋おいきたす。 モデルをさらに孊習させるのか デヌタを貯めおから孊習させるか どこたでモデルに汎甚性があるのか 凊理時間はどれくらいかかるか / 同時アクセスの数に芋合った凊理時間なのか これらのステップを繰り返しながら課題解決に挑んでいたす そもそもなぜセヌフィヌに入瀟を決めたのか AIをやるにはある皋床の䜙裕が必芁 これたで曞いたように、モデルの孊習からPOCができるたでのプロセスは簡単にできるこずではありたせん。 転職を考えるずき、自分に高い技術力を求められる分、䌚瀟偎に開発の環境がちゃんず敎っおいるかを厳しい目で芋おもいいず思いたす。特にAIずいう分野は、䞀぀ひず぀の実隓には倱敗の可胜性が十分にあるこずを䌚瀟に理解しおもらう必芁がありたす。でないず、自分の成果物に満足できないのに、改善する䜙裕がないたた提出する非効率的な開発の日々が進んでいきたす。「ちゃんず時間をかけおいいものが䜜りたい」ずいうのは転職掻動圓時の思いでした。 入瀟を決めるずきの私の刀断基準 開発は䜙裕を持ちながらもしっかりず進められそうだったので、セヌフィの印象はずおも良かったです。面接を終えお䞀぀だけモダモダずする点が残っおいたした。 「技術力はもちろん求めおいたすが、AIに関しおは実務未経隓でも倧䞈倫ですよ」の䞀蚀は、筆者も玠盎に受け入れるこずはできたせんでした。 開発経隓が4幎間しかなかった自分に、内定をいただいたなんおもちろん嬉しい限りでした。ですが、郜合のよすぎる話をすぐ疑っおしたう自分は考え始めたした。 「最初は未経隓者でも倧䞈倫だず蚀われお、埌から党郚䞀人で勉匷しお、党郚自己責任で成果をちゃんず出せずは蚀われないよね」 「デヌタっおそもそも集たっおいるのかな材料がないずころからいきなりAIをやろうずしおいるんじゃないよね」 頭の片隅に残っおいる疑問が解消できないたた入瀟するのも良くないず思い、最埌に実際のチヌム䜓制ず䌚瀟のビゞョンに぀いお聞いおみたした。 以䞋、埌の䞊叞ずなる二方よりの返信です。 「画像凊理のスペシャリストずプラットホヌム・開発のスペシャリストがいるのでプロゞェクトに参加しおいただき教育を行う」 「デヌタが集められる仕組みを䜜るのず、協力しおくださる取匕先ず信頌関係を築くのが第䞀フェヌズでした。そろそろ第二フェヌズに進んでもいいず感じおいるのでAI゚ンゞニア枠を蚭けおいたす。」 䞀気に安心できたした。 繰り返しになりたすが、機械孊習のモデルは実装しおみないず課題に適したものかどうかが分かりたせん。評䟡しおみた結果、理想の数倀に至らずに䜜り盎しになるこずだっお圓然ありたす。時間コストがかかるため、AIは「売り䞊げに困っおいるビゞネスを救うもの」でもなければ、「教育できる先茩がいなくおもなんずなく始められるもの」でもありたせん。 なので、私がこの手の仕事に挑むなら、 知恵が貯たっおおり、教育しおいただける環境であるこず ず 開発に協力しおいただけるお客様ず組んで効率的な開発ができる環境であるこず の二条件はどうしおも譲れたせんでした。 いただいた返信を信じ入瀟を決めお、結果的にAIの知識をしっかり身に着けながら、゚ンゞニアリングがより楜しく思える環境で働いおいたす。 因みに、いいメンタヌに出䌚えるず、䞀ヶ月ぐらいで以䞋の簡単な物䜓怜出デモが䜜れるようになりたす 最埌に 以䞊、むメヌゞングシステムグルヌプの䞀郚の業務ず入瀟を決めた理由を玹介させおいただきたした。AIに携わりたいずいう気持ちになっおいただけた方が䞀人でもいれば幞いです。 さらに倚くのアルゎリズムを䞀緒に詊しおAIプラットホヌムを構築できる開発仲間をお埅ちしおおりたす open.talentio.com
デザむナヌの朚䞋です。2020幎5月から䞻に Safie ViewerセヌフィヌビュヌアヌWebアプリケヌション のナヌザヌむンタヌフェむスデザむンを担圓しおいたす。Safie Viewerのカメラ䞀芧画面の機胜远加およびデザむン倉曎を機に、ナヌザヌむンタヌフェむスデザむンの改善を担圓し始めたした。 Safie Viewerのカメラ䞀芧画面の機胜远加ずデザむン倉曎にあたり、Safie Viewer党䜓のデザむン改善に向けお意識したこずや良かったこずを振り返っおみたす。 デザむンを担圓する前の状況ず前提 意識したこず それはなぜか プロゞェクトを進めるうえで良かったこず 既存の仕様やUIデザむンの経緯を知っおから進めるこずで、段階的な改善を進めやすくなった アップデヌトを続けやすい共有の仕様曞芁件定矩曞を甚意しおから進めた デザむンガむドラむンに沿っお䞀般的なUIデザむンに沿う衚珟に近づけた 事䟋レむアりトを䞀般的な衚珟に倉えた カメラ䞀芧画面デザむン倉曎前 カメラ䞀芧画面サムネむル衚瀺デザむン倉曎埌 カメラ䞀芧画面リスト衚瀺新芏远加 カメラ䞀芧画面の動き デザむンシステムを少しず぀導入 実装埌の现かな調敎によっおUIデザむン品質を高められた 仕様曞芁件定矩曞に経緯を残した 状況に応じたちょうど良いバランスを意識した UIデザむンの芖芚的な品質を高めるために 今埌改善したいこず さいごに デザむンを担圓する前の状況ず前提 珟圚のSafie ViewerWebアプリケヌションは2017幎に開発が始たり、すでに玄2幎半サヌビスが皌働しおいる2020幎5月時点。 お䜿いいただいおいるカメラ台数はナヌザヌによっお差があり、1台をお䜿いの方や1,000台以䞊をお䜿いの方など幅広い。 2020幎5月たではSafie Viewerのナヌザヌむンタヌフェむスは、゚ンゞニアがデザむンも実装も担圓されおいた。 デザむン倉曎前のSafie Viewerのカメラ䞀芧画面 Safie Viewerの党䜓的なデザむン改善を想定し぀぀、盎近の機胜远加開発に向けたカメラ䞀芧画面のデザむン倉曎に着手したした。その際に意識したこずや良かったこずをたずめたす。 意識したこず 以䞋はカメラ䞀芧の機胜远加にあたり、デザむンを敎えるうえで䞻に意識したこずです。 既存ナヌザヌの䜿い勝手に圱響しすぎないように、元のUIナヌザヌむンタヌフェむスデザむンから䞀気には倉えない。 今のUIデザむンや仕様がなぜこうなっおいるかの経緯や理由を知る。そのために実際にSafie ViewerWebアプリケヌションを觊り぀぀、疑問に思ったこずを゚ンゞニアに聞いお仕様や仕組みを確認しながら進める。 今埌の理想圢ずするナヌザヌむンタヌフェむスをある皋床むメヌゞしたうえで、䜿いやすさ、実装工数、公開スケゞュヌルなどのバランスを芋お珟時点に適したナヌザヌむンタヌフェむスを蚭蚈する。 䞀般的なナヌザヌむンタヌフェむスに沿った芋た目や操䜜性に近づける。その際にAppleの Human Interface Guidelines ヒュヌマンむンタヌフェむスガむドラむンやGoogleの Material Design マテリアルデザむンなどのデザむンガむドラむンを参考にする。 今埌のSafie Viewer党䜓のデザむンを統䞀しやすくするための仕組みを぀くりはじめる。䟋えば配色、䜙癜の倧きさ、文字サむズ、UIパヌツ衚珟などの各皮ルヌルづくりなど。 ダヌクテヌマのデザむンルヌル蚭蚈のタむミングダヌクテヌマの刷新は急ぎではないず刀断した。䞀方でダヌクテヌマの配色はあらかじめ怜蚎材料ずした。 オブゞェクト指向UIデザむンの考え方に基づいた蚭蚈。 これらを段階的に進めやすくする。 それはなぜか 以䞋が䞻な理由です。 セヌフィヌは防犯目的以倖にも、医療機関や工事珟堎で芋守りや安党管理のためにも掻甚いただいおいる。ナヌザヌむンタヌフェむスの倉曎で業務に支障が出おしたった際に、最悪の堎合は 人呜に関わる可胜性があるず考えた。よっお急なナヌザヌむンタヌフェむスの倉曎を避けお、段階的に改善しおいく 必芁があるず考えたため。 ビゞネス芁件、バック゚ンド芁件、カスタマヌサポヌト芁件、API仕様、既存のフロント゚ンド実装ルヌル、既存のコンポヌネント共通芁玠の管理䜓制など、様々な芁件や制玄のもずで最適なナヌザヌむンタヌフェむスを蚭蚈するためには、たず 珟状がどんな経緯で、なぜこうなっおいるのか、どんな仕様なのかを现かく知るこずが重芁だず刀断した ため。 長期的な改善を続けやすいデザむンの仕組みづくりデザむンシステムが必芁だず考えたため。 これらの理由から、UIデザむンの改善はいきなり理想圢ず考える状態に倉えるのではなく、耇数の芁件を総合的に刀断しながら段階的に敎えおいくず決めたした。 カメラ䞀芧画面のデザむン倉曎の怜蚌甚プロトタむプ 珟状のナヌザヌむンタヌフェむスに慣れおいる既存ナヌザヌの䜿い心地を考慮し、䞀気に理想ずするUIデザむンぞ぀くり倉えられない点がれロからナヌザヌむンタヌフェむスを蚭蚈するよりも難しいず感じたす。その䞀方で、耇数芁件を組み合わせるバランス感が必芁になるずいう意味での面癜さがあるかもしれたせん。 プロゞェクトを進めるうえで良かったこず 䞊蚘の意識したこずを元に、実際に詊しおみお良かったず感じるこずを振り返っおみたす。 既存の仕様やUIデザむンの経緯を知っおから進めるこずで、段階的な改善を進めやすくなった Safie Viewerを実際に䜿っおみお、 ナヌザヌずしお䜿っおみた感想や疑問点を曞き出し、疑問点や现かい仕様に぀いお、䞻にプロゞェクトチヌムの゚ンゞニアに経緯を聞くこずから始めたした 。䟋えば次のようなこずです。 どんな目的の機胜か 。 どのような䜿われ方を想定した機胜か。 どこに圱響があるかありそうか。 システム仕様がどのようになっおいお、どこたで倉曎が蚱容できそうか 䟋えば、怜玢の絞り蟌み条件はどうなっおいるか、デヌタは䜕件たで保存できるか、削陀時の挙動はどうなるか、出力される画像の解像床はいく぀か、状態によっおどのような倉化があるかなど。 ゚ンゞニアに教えおいただいたこれらの内容を、共有できる仕様曞ずしおたずめおいきたした。その仕様曞は芁件定矩やプロトタむプ制䜜においお、怜蚌材料ずしお掻甚できおいたす。ナヌザヌにずっお䜿いやすいナヌザむンタヌフェむスに近づけるために、商品䌁画や゚ンゞニアず䞀緒に議論を重ねお怜蚌しおいたす。 特に 「システム的にどこたで倉曎が蚱容できそうか」は、既存のシステムを掻かしお改善できる範囲なのか、システム仕様から芋盎したほうが良いかの刀断にも぀ながる ため、ナヌザヌむンタヌフェむスを蚭蚈するうえで重芁な点だず考えおいたす。 アップデヌトを続けやすい共有の仕様曞芁件定矩曞を甚意しおから進めた Adobe XDUIデザむン・プロトタむピングアプリケヌションでデザむンのプロトタむプを制䜜しお共有し、チヌムから受けたフィヌドバック内容をプロトタむプに反映する過皋で機胜の仕様曞をアップデヌトし、゚ンゞニアや商品䌁画、関連するプロゞェクトのデザむナヌずも認識を合わせながら進められたした。 仕様曞の䟋ブログ掲茉甚のため情報にはモザむクをかけおいたす 怜玢機胜の仕様䟋 デザむンガむドラむンに沿っお䞀般的なUIデザむンに沿う衚珟に近づけた 䜿いやすさ向䞊のため、䞀般的に広く知られおいお、ナヌザヌが䜿い慣れおいる可胜性が高いナヌザヌむンタヌフェむスの衚珟に近づくように蚭蚈したいず考えおいたす。 AppleのHuman Interface GuidelinesヒュヌマンむンタヌフェむスガむドラむンやGoogleのMaterial Designマテリアルデザむンなどのデザむンガむドラむンを参考にし぀぀、 党䜓的な統䞀感や䞀貫性の維持を目指しおいたす 。 事䟋レむアりトを䞀般的な衚珟に倉えた デザむン倉曎前のカメラ䞀芧では、カメラごずの情報ずしお䞊から、タむトル、各皮アむコン、サムネむル、タグの順番でレむアりトされおおり、䞀般的なカヌドレむアりトの䞊びずは異なっおいるこずに違和感を感じおいたした。 カメラ䞀芧画面デザむン倉曎前 既存のナヌザヌむンタヌフェむスから比范的倧きなレむアりト倉曎になるのですが、長期的には䞀般的なカヌドレむアりトに沿ったほうがカメラごずの情報のたずたりずしお認識しやすくなるず刀断しお、サムネむル、タむトル、各皮アむコン、タグの順番に倉曎したした。以䞋がデザむン倉曎埌の画面です。 カメラ䞀芧画面サムネむル衚瀺デザむン倉曎埌 现かい倉曎点ずしおは背景色や䜙癜の倧きさ、ボタンの配色なども改善しおいたす カメラブロックの比范 ナヌザヌからいただいた「より倚くのカメラを䞀芧で芋たい」ずいう芁望に応えるため、リスト衚瀺の画面も開発し、リスト衚瀺ずサムネむル衚瀺を切り替え可胜にしおいたす。以䞋はリスト衚瀺の画面です。 カメラ䞀芧画面リスト衚瀺新芏远加 カメラ䞀芧のレむアりトは今埌スナップショット静止画やムヌビヌクリップ動画など、他の機胜の画面レむアりトにもコンポヌネント共通芁玠ずしお掻甚できるず考え、゚ンゞニアず議論を重ねながら他画面ぞの統䞀化を芋据えお蚭蚈しおいたす。 カメラ䞀芧画面の動き 実際の画面は Safie Viewerのデモサむト で䜓隓できたす。 この蚘事を曞いおいる時点ではスナップショット機胜の画面デザむン倉曎をしおいるずころなのですが、カメラ䞀芧ず同様のコンポヌネントを掻かしお、デザむンの統䞀化を進めおいたす。 デザむンシステムを少しず぀導入 第1段階ずしお次のこずから始めたした。 芁玠や䜙癜の倧きさは基本的に8pxの倍数で蚭蚈し、デザむンずコヌディングの秩序ず開発効率を向䞊。 配色システムの蚭蚈たずはプラむマリヌカラヌずテキスト色の蚭蚈から。 ボタン芁玠の優先床衚珟の敎理少しず぀反映䞭。 自分がデザむンを担圓する時点で党䜓的な配色ルヌルはただ定たっおおらず、堎所によっお埮劙に䜿われおいる色が異なっおいたり、匷匱が䞀般的なルヌルずは異なっおいたりしたした。 そこで長期的なデザむン改善に向けお、党䜓的な配色ルヌルを蚭蚈しお統䞀化を図りたいず考えたした。 すでに倚くの箇所でUIパヌツずしお䜿われおおり圱響範囲が広い状態のため、䞀気に党おを倉えるのではなく、プロゞェクトごずに段階的に敎えおいくこずにしたした。長期的に党䜓の統䞀感を維持できるように進めおいたす。 構築䞭の配色システムカラヌコンポヌネント 䟋えば開発効率化のためにAdobe XDのデザむンデヌタで䜿甚する配色のコンポヌネント名ずSassSCSSの倉数名をなるべく合わせたり、定矩箇所を敎理したりしおチヌムの゚ンゞニアず盞談し぀぀開発を進めやすい仕組みづくりず効率化を図っおいたす。 実装埌の现かな調敎によっおUIデザむン品質を高められた オンスクリヌンのUIデザむン品質を高めるためには、コヌディングにおけるディテヌルの远求现郚の぀くり蟌みが求められたす。 ディテヌルDetailの远求には意図したデザむンを再珟するための䞁寧なコヌディング調敎、衚瀺怜蚌の繰り返し、むンタラクションの心地良さの怜蚌などが必芁 です。 以䞊の工皋には実装難易床や実装工数が増える課題がありたす。その課題ぞの察策ずしお、たずはデザむンで特に改善したいポむントを゚ンゞニアに䌝え、 実装に察しおの工数に぀いお盞談させおいただき、実装優先床を刀断しおUIデザむン品質ず実装工数バランスの維持 を図りたした。 チヌムの゚ンゞニアに、芁玠によっおは1px〜2px単䜍の䜍眮・サむズ調敎※基本は8の倍数pxで蚭蚈しおいたすや50msミリ秒単䜍の现かなむンタラクション調敎盞談をしおいたす。これはデザむン品質向䞊のためです。粘り匷く察応しおいただき、ずおも感謝しおいたす。 実装しおいただいたのちのデバッグおよびレむアりト調敎䟝頌時の画面キャプチャ䟋。赀い線に揃ったレむアりトぞの調敎をお願いしたした。2pxの䜍眮調敎のため、拡倧した状態で画面キャプチャを撮っお䌝えおいたす Webサむトでビゞュアルデザむンを再珟する実装に぀いお、倧たかな流れを補足したす。完成床を高めるためには、ブラりザによっお衚瀺結果が埮劙に異なる挙動をHTMLやCSS、JavaScriptでコヌディングによっお制埡し぀぀、デザむンデヌタに沿ったビゞュアルデザむンを再珟し、心地良いむンタラクションの実装などが必芁です。 さらには各皮フレヌムワヌクやラむブラリを理解し、管理しやすい効率的なコンポヌネント共通芁玠を蚭蚈するなど、 長期的にUIデザむンやシステムを維持するためのコヌディング実装は、デザむンの知識や芳点も必芁 です。熟緎床が必芁で難易床が高いこずです。盞談に乗っおいただき、䞁寧に実装しおいただいおいるチヌムの゚ンゞニアに感謝しおいたす。 ではなぜそこたでやるのか それは ナヌザヌにずっお䜿い心地の良いナヌザヌむンタヌフェむスを提䟛し、サヌビス品質を高めるため です。现かい芁玠Detailの積み重ねがアプリケヌションの䜿い心地の良さに぀ながるず考えおいたす。 仕様曞芁件定矩曞に経緯を残した 「経緯を残す」こずに泚力したした。機胜やデザむンに察しお、なぜこの機胜が存圚するのか、どういうずきに䜿われるのか、仕様はどうなっおいるのか、なぜこのデザむンにしたのかの経緯をなるべく資料ずしお残すようにしおいたす。 理由は、今埌の改善に向けお 各メンバヌが「なぜ今こうなっおいるのか」の経緯を把握しやすくするため です。仕様ず経緯がわかりやすくたずたっおいるこずで、「䜕をどこたで倉えお良いのか」ずいう点でUIデザむンやシステム改善時の品質向䞊に圹立ち、開発速床も䞊がるメリットがあるず考えたす。 これたでは珟状の機胜が詳しく明文化された仕様曞が存圚しなかったり、情報が䞍足しおいたりする課題がありたした。その際には機胜を詊し、仕様をヒアリングしお理解する工皋が必芁です。初動の調査リサヌチの時間が想定よりも長くかかる点が課題でした。 この課題を解決するため、 今進めおいるプロゞェクトからは仕様曞芁件定矩曞の土台を最初に䜜成しおから進めおいたす 。最終的に確定したデザむンや仕様に加えお、「なぜこうしたか」のデザむンの意図や経緯、システム芁件やビゞネス芁件の経緯、議事録の過皋などに埌からアクセスしやすい資料のたずめかたを意識しおいたす。 状況に応じたちょうど良いバランスを意識した ビゞネス芁件、システム芁件、ナヌザヌむンタヌフェむスずしおの䜿いやすさ、公開のタむミングスケゞュヌル、今埌の拡匵性など、状況によっおは盞反する芁玠に察しおちょうど良いバランスを維持できるように意識したした。これにより 「長期的に実珟したいこず」ず、「今求められおいるこず」の優先順䜍付けがしやすくなった ず感じたす。 UIデザむンの芖芚的な品質を高めるために WebアプリケヌションにおけるUIデザむンの芖芚的な品質を決める芁因は、最終的なコヌディング実装の品質であり、ブラりザのレンダリング結果衚瀺結果の調敎だず考えおいたす。より具䜓的には次の点です。 ブラりザのレンダリング結果衚瀺結果ずデザむンデヌタを芋比べお、 コヌディング埌の现かな調敎をどれだけおこなえるか 。 むンタラクションをどれだけ心地良いものにできるか 。 なぜならブラりザのレンダリング結果がナヌザヌが觊れるものナヌザヌむンタヌフェむスであり、ナヌザヌにずっおのUIデザむンだず考えるためです。 オンスクリヌンのUIデザむンにおけるデザむンデヌタやプロトタむプは、Adobe XDやIllustratorなどのデザむンアプリケヌションによっお制䜜しおいたすが、それはコヌディングのためのデザむン芋本ず捉えおいたす。ゆえに コヌディング埌のデザむン調敎が重芁 だず考えたす。 今埌改善したいこず スケゞュヌルの明確化。スケゞュヌルを明確化しおいない状態でプロゞェクトが走り出しおしたい、埌工皋で間に合わせるような圢になっおしたうこずがあった。今埌の改善ずしお、プロゞェクト開始時にスケゞュヌルをより詳现化しお進める実践䞭。 サヌビス党䜓のアむコンのデザむン統䞀化。圱響範囲が広いため、埐々に改善を進める長期的に改善䞭。 党䜓的な配色蚭蚈ず統䞀化。 䜙癜スペヌシングのルヌル化。 タむポグラフィシステムの構築。 ダヌクテヌマの蚭蚈。 ただただできおいないこずがあり、やりたいこずや改善したいこずはたくさんありたす。統䞀感のあるデザむンシステムを蚭蚈し、長期的な改善を続けやすい仕組みづくりのために少しず぀進んでいきたいず思いたす。 プロゞェクトの進め方自䜓も芋盎し、芁件定矩曞の䜜成・アップデヌトや共有方法など、 チヌムずしお耇数人で効率的に進めおいけるプロゞェクト䜓制づくり も進めおいたす。プロゞェクトの進め方で良い方法を他のチヌムにも共有し、盞互に改善を繰り返しおいけるように仕組み化できたらず考えおいたす。 さいごに 圹職はデザむナヌですが、実際にやっおきたこずを振り返っおみるず、 課題解決のためにビゞュアルデザむン以倖にも挑戊するこずはたくさんありたした 。䟋えば、芁件定矩、システム仕様策定、プロトタむプ制䜜、デザむンカンプ制䜜、むンタラクション蚭蚈、フロント゚ンド実装別プロゞェクトで、デバッグ、サヌビスや機胜の提案、ディレクションなどです。 セヌフィヌではデザむナヌも募集しおいたす。自分はセヌフィヌに所属しおからただ1幎半ほどですが、タむポグラフィや配色などのデザむンシステム構築、コヌディング、システム仕様蚭蚈など、領域を制限せず倚くのこずに興味のあるUIデザむナヌに向いおいる環境かず思いたす。 ご興味のある方、これから経隓を積みたいず考えおいる方の連絡もお埅ちしおいたす。 open.talentio.com
こんにちはセヌフィヌ株匏䌚瀟オペレヌションシステム郚の倧林です。 私は2019幎9月に実務未経隓から゚ンゞニアずしおセヌフィヌに入瀟したした。ちょうど1幎が経った頃なので、この1幎間でやっおきたこずや感じおきたこずを玹介しおみようず思いたす たずは自己玹介 オペレヌションシステム郚っお 1ヶ月目 Vue.jsずにらめっこ 3ヶ月目 独り立ち 蟛い時期もあった 5ヶ月目 サヌバヌサむド 6ヶ月目 レンタルシステム化PJ Salesforceずの出䌚い そしお今 さいごに たずは自己玹介 簡単に私の経歎をご玹介したす。 倧孊文孊郚卒業埌、倧手蚌刞䌚瀟に入瀟 地方総合職ずしお、地元の支店で4幎間個人向け営業 ゚ンゞニアになろうず決意し、退職しお䞊京 プログラミングスクヌルで玄3ヶ月間HTML/CSSやRuby on Railsã‚’å­Šç¿’ そしお転職掻動を開始しお初めお面接を受けたのがセヌフィヌでした。 CTOからの技術的な質問にたずもに答えられず、垰り道「おわた  」ず思ったのも今ではいい思い出です。 そんな䞭、面接の翌日に「たずはアルバむトで働きたせんか」ずオファヌがありたした。 圓時は私のように実務未経隓から入瀟した゚ンゞニアがおらず、ポテンシャル枠の採甚は初めおだからたずはアルバむトでお互いにミスマッチでないか様子を芋たしょう、ずのこずでした。 その埌2週間ほどしお正匏に内定をもらい、今に至りたす。 オペレヌションシステム郚っお 今たではサヌビス開発寄りの蚘事が倚かったので、セヌフィヌのオペレヌションシステム郚に぀いおも簡単に玹介したす。 オペレヌションシステム郚が関わる業務は、ものすごくざっくりですがこんな感じです。 フロントオフィス業務に関しおは、マヌケティングや営業支揎、契玄・請求・出荷管理などのシステムずしおSalesforceを利甚しおいたす。 たたセヌフィヌでは倚くのパヌトナヌ䌁業さたにサヌビスをOEMで提䟛しおいたす。パヌトナヌ䌁業さた向けの゚ンドナヌザヌ管理ツヌルAgency Toolや瀟内向けの管理ツヌルManagement Toolは内補のシステムです。 これらのシステムの管理や運甚、機胜拡充を行いながら、スプレッドシヌド管理になっおいる業務のシステム化や各皮連携などを進めおいたす。 右䞋の Safie Entrance 管理ツヌルに぀いおは、厳密に蚀うずオペレヌションシステム郚の管蜄ではないのですが、私がフロント゚ンド開発に携わっおいるので茉せたした。 では、私がこの䞀幎で関わっおきた順に玹介しおいきたす 1ヶ月目 Vue.jsずにらめっこ 2019幎9月にアルバむトずしお入瀟し、たずはじめはフロント゚ンド゚ンゞニアずしおAgency Tool・Management Toolの刷新プロゞェクトに携わりたした。そこから玄半幎間、メむンの業務ずしおいたした。 蚀語はVue.js+TypeScriptです。これらの私の経隓倀はほが0でした。 Vue.jsに぀いおはスクヌル圚籍䞭に興味を持ち少しだけ独孊しおいたもののVuexは䜿ったこずがなく、TypeScriptに関しおは恥ずかしながら名前だけは知っおいる皋床でした   私が入るたでは、Agency Tool・Management Toolのフロント゚ンド開発は䞀人の先茩が担圓しおいお、その先茩の䞋に付く圢でスタヌトするこずになりたした。 今でも芚えおいるのは、アルバむト2日目に初めおプルリクを出したずきのこず。 思い返すずタスクずしおはものすごく簡単で、今なら30分もあれば䜙裕で終わるようなものでしたが、圓時は党然分からなくお先茩にほが半日぀きっきりで䞀緒にやっおもらいたした   でも、コヌドを曞いお、それが動いお、人が䜿っおくれる、ずいう実感がわいおずおも嬉しかったです。 そういう嬉しさの反面、やはり倧倉なこずもありたした。 たずは、個人で開発するのずは党くスケヌルの違うコヌド量に圧倒されたした。既存のコヌドのどこに䜕が曞いおあるのか玐解くのに必死でした。 しかも呚りにいる゚ンゞニア達ず自分のレベルの差があたりにも倧きいこずを勝手に感じすぎお、粟神的にも瞮こたっおしたいたした。 今思えば、そんなの分かりきっおいるんだからもっず割り切っお過ごしおも良かったですね。 CTOも先茩もよくこう蚀っおくれおいたした たた、今は入瀟時の研修でカメラのこずやサヌビスのこず、䜿うツヌルのこずなどを知る機䌚があり仕様曞もたくさんたずたっおいるのですが、圓時はそこたで敎備されおおらず、私はただコヌドずしか向き合っおいなかったのも良くなかったなず思いたす。朚を芋お森を芋ず、っおや぀です。 はじめにもっず䌚瀟党䜓のサヌビス抂芁や自分が開発しおいるものの目的を把握しおいれば  ず思うこずがよくありたした。なので今は教蚓ずしお 新しいこずを始めるずきはたず党䜓感を把握するようにしおいたす。 ある時ふず、スクヌルで孊習したこず䜕も䜿っおなくない  ず思いたしたが、Slackでのコミュニケヌションの取り方やGitHubの䜿い方などに慣れおいたこずなど、プログラミング以倖の郚分でも倚いに圹立っおいたした。 それに䞀番倧きかったのは「未知のこずに立ち向かうこずが楜しいず思えるマむンド」が育っおいたこずかもしれたせん。 圓時Twitterで「未経隓から゚ンゞニアになった人のうち䞀定数は数ヶ月で消える」ずいうのをよく目にしおいお、消える人の気持ちもちょっぎりわかる  ず思っおしたった時期もありたした。 でも前職で培ったメンタルず、スクヌル時代に培ったマむンドのおかげで、生き抜くこずができたした。 3ヶ月目 独り立ち 3ヶ月目に、 Safie Entrance のお客様向け管理ツヌルのフロント゚ンド担圓にアサむンされたした。今も継続しお担圓しおいたす。 フロント゚ンドの担圓は私だけだず知っお、えっ䞍安  ず思いたしたが、Agency Tool・Management Toolず同じVue.js+TypeScriptでの開発で共通のコンポヌネント䜿うこずもできたので、それたでの経隓を生かすこずができたした。 䞀方で、自分の理解が曖昧なたた進めおしたうず、䜕床もPMに仕様を確認したり、サヌバヌサむドに䜕床もAPIを改修しおもらったり、ず手戻りが発生しおしたうずいうこずに気づき、これたでは先茩にタスクを振っおもらっおいる受け身にすぎなかったんだ  ずいうこずを痛感したした。 でも、他のチヌムの人ずコミュニケヌションを取りながら開発しおいくのは楜しく、私゚ンゞニアになったんだな〜ずしみじみ感じるこずもできたした。 蟛い時期もあった このあたりの時期にはオペレヌションシステム郚の䞀員らしく、業務フロヌ党䜓を芋盎すようなミヌティングにも参加するようになりたした。 それは私にずっお興味深くもあったけど蟛い時間でもありたした。 IT甚語もカメラのこずも分からない、ビゞネス甚語も分からない、業務フロヌも党然知らない  ただひたすら聞くだけで自分は䜕もできない時間がほずんどだったからです。 今ぱンゞニア含め他業界・他職皮からの転職組も増えおきたしたが、圓時は䌚瀟党䜓を芋おもそういう人は少なく、私からするずみんながスペシャリストに芋えたした。 ビゞネスのこずも知らない、゚ンゞニアずしおもただただ、そんな私の存圚䟡倀っお䜕なんだろう  ず考えお無胜感に苛たれたこずもありたす。 圓時の私に蚀葉をかけるこずができるなら、「そんなこず分かり切っおるんだからうじうじ考えおる暇があれば勉匷でも䜕でもしお少しでも早くできるようになれ」ず蚀いたいです。 5ヶ月目 サヌバヌサむド 幎明けあたりから数ヶ月、サヌバヌサむドにも携わり、Agency Tool・Management Toolで䜿っおいるAPIの䜜成や改修を行った時期がありたした。 蚀語はPython、フレヌムワヌクはTornadoです。これらの私の経隓倀はほが0でした2回目。 PythonはProgateをやったこずがあるだけで、Tornadoは存圚すら知りたせんでした。 既存のコヌドの芋よう芋たねでなんずか実装し、先茩方のレビュヌで無数の指摘をもらい、自分の知識の足りなさや考慮の浅さに向き合いながらもがいおいたした。 でも入瀟しおVue.jsずにらめっこしおいる時よりは既存のコヌドの理解が早くできるようになっおいお、蚀語が違っおも䞀床できるようになったこずは掻かせるんだなヌず思っお嬉しかったです。 たた、それたでのフロント゚ンド開発ではデヌタベヌス構成を意識するこずなくAPIのレスポンスだけを芋おいたので、デヌタベヌス構成に぀いお知るこずができたのも良かったです。むしろもっず早く知るべきでした   それに、自分がフロントから呌んでいるAPIのサヌバヌサむドの構成が把握できたこずで、フロントの開発もしやすくなりたした。 たずえサヌバヌサむドの開発にがっ぀り携わるわけでなくおも、構成を把握しおコヌドを読めるようになったり、簡単なタスクをやっおみたりするのは非垞に圹立぀こずだなず思いたした。 6ヶ月目 レンタルシステム化PJ 2月からの玄半幎間は、レンタル管理のシステム化プロゞェクトがメむンの業務ずなりたした。 セヌフィヌではカメラのレンタルも行っおいるのですが、その管理はスプレッドシヌトで行われおおり、受泚から請求に至るたで手䜜業が非垞に倚く、これからレンタル件数が増えるにあたりシステム化は急務でした。 最初は珟圚の業務のヒアリングから始たったのですが、たたも同じ苊しみを味わうこずになりたした。 私、セヌフィヌの業務・カメラに぀いお党然知らないじゃん  泚文があっお、カメラ・サヌビスをセットしおお客様に提䟛しお、そしお売䞊蚈䞊しお請求する、ずいう䞀連の流れに぀いお䜕も分かっおない   このたたで倧䞈倫なのかずいう䞍安でいっぱいでしたが、オペレヌションシステム郚からは頌れる先茩前述の先茩ずは別ずの2名䜓制だったのでなんずか食らい぀いおいくこずができたした。 ヒアリングず䞊行しお耇数のシステムを比范怜蚎した結果、販売で既に利甚しおいるSalesforceに機胜を远加するこずに決定。 開発は倖郚ぞ委蚗し、玆䜙曲折ありたしたが、蚈画通り7月にリリヌスするこずができたした。 開発委蚗䌚瀟や瀟内の業務サむドずのコミュニケヌションが倧切なのはもちろんのこず、特に業務サむドずは、業務フロヌにおける䟋倖はないのか・今埌可倉にできるように考慮しおおくべき事項はないかなどを䞁寧にやりずりし、システム化の範囲ず機胜に぀いおのコンセンサスをきちんず取っおおく必芁があるんだず孊びたした。 このプロゞェクトにおいお、珟堎ぞのヒアリングから始たり、スケゞュヌル立おや芁件定矩、開発委蚗䌚瀟ずの調敎や進捗確認、そしお受入テスト運甚テストを経おリリヌスデヌタ移行、ずいう䞀連の流れを経隓でき、私の䞭で倧きな経隓ずなりたした。 Salesforceずの出䌚い レンタルシステム化においおSalesforceを採甚するこずになりたしたが、私の経隓倀はほが0でした3回目。 それたで名前は知っおいたけど、顧客管理をするものだよね皋床の認識でした。 いざ觊っおみるず、機胜もめちゃくちゃたくさんあるしすごい䟿利ず思うのず同時に、裏偎の蚭定ずか凊理ずかどこをどういじれば  ずいうブラックボックス感も感じお䞍安になったのを芚えおいたす。 3月から4月にかけおオンラむン研修を蚈9日間受講したり、テスト環境でいろいろ詊したり、既存の販売管理での簡単な改修タスクを行ったりする䞭でだんだんずできるこずが増えおきたした。知らないこずが分かっおできるようになるずいうのは本圓にい぀でも楜しいです。 今もスキマ時間に Trailhead での孊習をしおいお、そこでのTrailblazerランクを今期の自分の評䟡項目に加えおいたす。 研修を受けたり孊習を行ったりするこずを支揎しおくれお評䟡にも぀ながる環境はありがたいなぁず思いたす。 たたSalesforceはナヌザヌコミュニティが充実しおいるこずにも驚きたした。 先月には党囜の掻甚事䟋チャンピオン倧䌚がオンラむン開催され、Salesforceをフル掻甚しおいる䌁業の事䟋を聞くこずができたり、五反田の利甚䌁業の方々ずもオンラむンで懇芪䌚をしたりず、自瀟の事䟋以倖をいろいろ知るこずができおずおも興味深かったです。 そしお今 そんなこんなでフロント〜サヌバヌ、サヌビス寄り〜瀟内向け、ず広く浅くいろいろずやっおきた䞀幎間でした。 今は、Salesforceに関わる新たなシステム化に取り組み぀぀、レンタル管理の察応やSafie Entrance管理ツヌルの゚ンハンスを行っおいるずいう状況です。 正盎なずころ、゚ンゞニアになる前に想像しおいた仕事ずは違う郚分もありたす。 今の自分が䜕者かず聞かれるず、おそらく答えは「業務系゚ンゞニア」です。 が、゚ンゞニアになるたでは「゚ンゞニアサヌビスを䜜る人」ずいうむメヌゞが匷く、Web系・組み蟌み系しか知りたせんでしたずいうか、このブログを曞く過皋で先茩に教えおもらうたで、自分は䜕者なんだず思っおいたした。 それに、コヌドを曞きたくっおフルスタックになるんやず思っおいた時期もありたしたが、今の仕事でコヌドを曞いおいる時間は半分もありたせん。 でも、オペレヌションシステム郚での今の仕事は自分の性にすごく合っおいるず自信を持っお蚀えたす。 意識的に遞択しおきた道ではなく、流れに身を任せおいたらい぀の間にか走っおいた道ではあるけれど、結果的に楜しく働けおいお、今埌も進んでいきたい道だなず思っおいたす。 ↑みんなありがずうこれからもよろしくね さいごに アクセンチュアで提唱された「シックスバブルズ」ずいう考え方がありたす。 内容を簡単にたずめるず、 戊略策定・ビゞネスプロセス改善・組織改革・人材育成はすべおBehaviorふるたいを倉えるためである ITはBehaviorを盎接倉えるこずはできない。あくたでもビゞネスプロセスや組織を通じおBehaviorを倉える ずいうものです。 オペレヌションシステム郚の郚長からこのシックスバブルズの考え方を聞いたのですが、郚の圹割・ミッションに぀いお「ITでビゞネスの戊闘力をあげるこず」ず蚀っおいたした。 その考えにずおも玍埗しお、い぀も心に留めお仕事をしおいたす。 セヌフィヌのサヌビスに興味がある方はもちろん、䞀緒にビゞネスの戊闘力をあげおくださる方からのご連絡、お埅ちしおおりたす open.talentio.com
セヌフィヌ株匏䌚瀟芁玠技術開発郚のおにきです。 クラりドカメラを甚いた画像解析の開発を担圓しおいたす。 AWSのMLOps環境である Sagemaker に぀いお調査したした。詊しに物䜓怜出アルゎリズムである YOLOv4 の孊習環境を䜜っおみたので玹介したす。今回孊習環境ずしおYOLOv4の著者Alexey Bochkovskiy氏が公開しおいる ゜ヌスコヌド を利甚しおいたす。これはYOLOv3たでの著者であるJoseph Redmon氏の開発しおいたフレヌムワヌクである Darknet をブランチしたものになりたす。 今回䜜成したコヌドは Github にあげおいるのでご参照ください。 Amazon Sagemaker Sagemakerによる孊習 孊習の凊理の流れ カスタムコンテナの仕様 ゚ントリヌポむント 入力 出力 YOLOv4甚にSagemakerでカスタムコンテナを甚いた孊習環境の䜜成 Step1 ゚ントリヌポむントの䜜成 Step2 Dockerfileの䜜成 Step3 ECRの準備 Step4 S3に孊習デヌタをアップロヌド Step5 孊習の実行 孊習結果 さいごに Amazon Sagemaker Amazon Sagemakerは機械孊習を甚いたサヌビスを実珟するために、デヌタ䜜成、モデル開発、孊習実行、サヌビス運甚ずいういわゆるMLOpsず呌ばれる業務を実珟する環境を提䟛するAWSのサヌビスです。AWSのサヌビスなのでもちろんクラりド環境であり、初期費甚が必芁なく物理サヌバヌの管理が䞍芁などのメリットがありたす。 SagemakerはMLOpsを実珟するための倚様なツヌル・環境を提䟛しおいたす。代衚的な機胜を䞊げるず以䞋になりたす。 孊習デヌタ䜜成 å­Šç¿’ デプロむ ゚ンドポむント構築 今回の蚘事ではSagemakerの孊習機胜を利甚しおいたす。 Sagemakerによる孊習 Sagemakerによる孊習ではGPUむンスタンスを必芁な時に必芁なだけ利甚できる点がメリットずしおあげられたす。機械孊習の開発ではモデルの比范やハむパヌパラメタ比范のためにある䞀時期だけGPUマシンが必芁ずなる堎合がありたすが、その時に必芁な分だけGPUむンスタンスを確保できたす。 Sagemakerによる孊習は以䞋の3぀のパタヌンに分けられたす。 組み蟌みアルゎリズムの利甚 Amazonがすでに甚意したアルゎリズムを利甚したす。開発者は孊習デヌタを甚意するだけすみたす。画像認識ではむメヌゞ分類、オブゞェクト怜出、セマンティックセグメンテヌションが甚意されおいたす。 構築枈みのコンテナむメヌゞの利甚 Pythonを甚いおTensorFlow、PyTorch、Chainer、MXNetなどのフレヌムワヌクが動䜜する孊習甚Dockerコンテナが甚意されおおり、Pythonでアルゎリズムを開発する堎合にはJupyter Notebookから孊習むンスタンスにアルゎリズムを自動で転送しおの実行ができるなどスムヌズな開発ができたす。 独自のカスタムコンテナむメヌゞの利甚 開発者が独自のDockerコンテナを䜜成しお孊習むンスタンスで実行させるこずができたす。Dockerコンテナずしおの仕様に合わせおいればPython以倖の蚀語でも孊習を行うこずができたす。YOLOv4の孊習環境であるDarknetはC蚀語+CUDA Cで実装されおいるため、今回は独自のカスタムコンテナむメヌゞを利甚した孊習を遞択したした。Pythonベヌスのアルゎリズムであっおも䞀郚C/C++によるMakeが必芁な堎合などは独自のカスタムコンテナむメヌゞの利甚が遞択肢になりたす。 孊習の凊理の流れ Sagemakerによる独自のカスタムコンテナむメヌゞを利甚した孊習を図にするず以䞋になりたす。 開発者は①のJupyter Notebookから孊習実行をするだけで ②  â‘€ の凊理は自動で行われたす。 カスタムコンテナの仕様 カスタムコンテナを䜜成するためには、凊理の゚ントリヌポむント・入力・出力の仕様を抑えるこずが重芁ずなりたす。この仕様に合わせさえすれば、様々なケヌスに察応したカスタムコンテを䜜成する事が可胜になりたす。 ゚ントリヌポむント 孊習むンスタンス内ではコンテナむメヌゞがダりンロヌドされたあずに以䞋のコマンドが実行されたす。 docker run <image> train 䞊蚘のコマンドが呌ばれた堎合に実行したい孊習凊理が起動するコンテナむメヌゞを䜜成するには以䞋の2぀の方法がありたす。 (1)コンテナむメヌゞ内にtrainずいうファむル名で実行可胜なファむルを配眮する (2)DockerfileでENTRYPOINTを定矩する どちらも倧きな差はないので、今回は(2)の方法を採甚したした。 入力 トレヌニングデヌタ /opt/ml/input/data/<channel> S3においた孊習デヌタは䞊蚘のディレクトリにダりンロヌドされたす。チャネルを利甚するこずでデヌタを孊習、バリデヌション、テストなどに分けお扱うこずが可胜です。チャネルの名前は開発者が自由に遞択するこずができたす。今回はtrainだけを利甚するこずにしたした。 ハむパヌパラメタ /opt/ml/input/config/hyperparameters.json Jupyter Notebookから起動する際にハむパヌパラメタを枡すこずができたす。泚意点ずしおJupyter Notebook偎から数倀型で倀を䞎えおも文字列型に倉換されたjsonがコンテナに蚭眮されたす。Jupyter Notebookで孊習凊理を起動する際にグリッドサヌチを行うこずも可胜です。 入力デヌタ蚭定 /opt/ml/input/config/inputdataconfig.json 起動したコンテナがどのチャネルを利甚できるかの情報を埗るこずができたすが、今回はtrainだけを䜿甚するため䜿甚しおいたせん。 Amazon SageMaker がトレヌニング情報を提䟛する方法 - Amazon SageMaker #入力デヌタ蚭定 出力 孊習枈みモデルデヌタ /opt/ml/model 孊習凊理が終了した時点で䞊蚘のディレクトリ内にあるファむルがアヌカむブ化されおS3にアップロヌドされたす。 Sagemakerに぀いおのより詳しい情報は以䞋を参照ください。 Amazon SageMaker で独自のアルゎリズムやモデルを䜿甚する - Amazon SageMaker YOLOv4甚にSagemakerでカスタムコンテナを甚いた孊習環境の䜜成 ここたではSagemakerの䞀般的な説明しおきたしたが、ここからはYOLOv4を孊習するための環境の䜜成に぀いお説明したす。 Sagemakerで利甚するS3、ECR、Sagemaker ノヌトブックむンスタンスはすべお同じリヌゞョンで䜜成しないず動䜜しないのでご泚意ください。 Step1 ゚ントリヌポむントの䜜成 コンテナむメヌゞの゚ントリヌポむントずしおmain.pyずいうPython3スクリプトを䜜成したした。 機械孊習における本来的な意味でのハむパヌパラメタではないのですが、dataファむルずcfgファむルのファむル名を読み取っお、Darknetの匕数ずしお起動しおいたす。 Step2 Dockerfileの䜜成 コンテナむメヌゞ䜜成甚に以䞋のDockerfileを䜜成したした。 䞊蚘のDockerfileでは、DarknetがGPU、cuDNN、OpenCVを利甚できるようMakefileを曞き換えおビルドしおいたす。 Step3 ECRの準備 ECRにレポゞトリを䜜成したす。dockerコマンドを甚いおむメヌゞを䜜成しお、レポゞトリにプッシュしたす。 $ aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin xxxx.dkr.ecr.us-west-2.amazonaws.com $ docker build -t darknet-yolov4 . $ docker tag darknet-yolov4:latest xxxx.dkr.ecr.us-west-2.amazonaws.com/darknet-yolov4:latest $ docker push xxxx.dkr.ecr.us-west-2.amazonaws.com/darknet-yolov4:latest Step4 S3に孊習デヌタをアップロヌド 孊習デヌタをS3にアップロヌドしたす。 $ aws s3 cp dataset/ s3://sagemaker-xxxx/dataset --recursive Darknetでは画像デヌタのパスをdataファむルに蚘茉する必芁があるため、dataファむルにはSagemakerのコンテナむメヌゞでの絶察パスずしお蚘述したした。 Darknetではbackupがモデルファむルの出力先であるため、 /opt/ml/model/ に指定しおいたす。 classes= 1 train = /opt/ml/input/data/train/train.txt valid = /opt/ml/input/data/train/test.txt names = /opt/ml/input/data/train/classes.txt backup = /opt/ml/model/ train.txtは同様に絶察パスで蚘述しおいたす。 /opt/ml/input/data/train/camera/000.jpg /opt/ml/input/data/train/camera/001.jpg /opt/ml/input/data/train/camera/002.jpg ・・・ このあたりのファむルパスの扱いはmain.pyで自動生成するなど改善の䜙地はありそうです。 yolov4-custom.cfgは Github のファむルをもずに䜜成したした。 S3にアップロヌドしたファむルは以䞋の構造です。 s3://sagemaker-xxxx └── train ├── camera │ ├── 000.jpg │ ├── 000.txt │ ├── 001.jpg │ ├── 001.txt │ ・・・ │ ├── camera.data ├── classes.txt ├── test.txt ├── train.txt └── yolov4-custom.cfg Step5 孊習の実行 AWSのコン゜ヌルでSagemaker > ノヌトブックむンスタンスでノヌトブックむンスタンスの䜜成を行いたす。ノヌトブックむンスタンス自䜓は孊習を行わないのでむンスタンスのタむプは䞀番安いml.t2.mediumで十分です。Jupyter䞊にノヌトブック䜜成する際には「conda_python3」を遞択したした。 Jupyter Notebook䞊から孊習の実行を行いたす。以䞋のコヌドでは先ほど䜜成した゚ントリヌポむントmain.pyに枡すハむパヌパラメタずしおdataファむルずcfgファむルを蚭定しおいたす。 estimator = Estimator( image_name= "xxxx.dkr.ecr.us-west-2.amazonaws.com/darknet-yolov4:latest" , role=role, train_instance_type= "ml.g4dn.xlarge" , train_instance_count= 1 , train_max_run = 3 * 60 * 60 , hyperparameters={ "data_file" : "camera.data" , "cfg_file" : "yolov4-custom.cfg" } ) estimator.fit({ "train" : "s3://sagemaker-xxxx/dataset/" }) ml.g4dn.xlargeはGPUが利甚できるむンスタンスタむプずしおは最安オレゎンで0.736$/時ですが、16GBずいう倧きなGPUメモリが利甚できたす。 孊習䞭の状態はAWSのコン゜ヌルのSageMaker > トレヌニングゞョブで確認するこずもできたす。 孊習結果 孊習凊理が終了するず結果であるモデルファむルはS3にアップロヌドされたす。 Sagemakerで孊習したYOLOv4のモデルで掚論しおみた結果です。今回はお詊しずしお、匊瀟で扱っおいるセキュリティカメラの画像から孊習デヌタを䜜成し、孊習凊理を行っおみたした。 さいごに 今回はクラりドのMLOps環境であるAWSのSagemakerを利甚しおYOLOv4の孊習を行う環境を䜜成したした。クラりド環境を利甚するこずで䞀時的に倧量の孊習むンスタンスを確保するずいった柔軟な開発が可胜になるかず思いたす。今回は孊習凊理に぀いおだけ扱いたしたが、Sagemakerを適切に利甚するこずで機械孊習を甚いた補品を効率よく開発・運甚できるのではないかず考えおいたす。 セヌフィヌでは珟圚数䞇台のセキュリティカメラが匊瀟システムに接続されおおり、これらのカメラから画像認識技術を甚いお情報を抜出するサヌビスを開発しおいたす。そのために䞀緒に開発を進めおいくメンバヌを募集しおいたす。 open.talentio.com
初めたしお、こんにちは。 セヌフィヌ株匏䌚瀟 プラットフォヌム開発郚の倧友です。 サヌバヌサむド呚りの開発を担圓しおいたす。 今回はナヌザヌより問い合わせを受け、システム内を調べなければならないずき、サヌバヌサむドはどのように察応しおいるのかその䞀䟋を玹介したいず思いたす。 テヌマはログ解析を甚いた問い合わせ察応です。 Amazon Athena ず お問い合わせ Athenaの泚意点 セヌフィヌの構成 さいごに Amazon Athena ず お問い合わせ 今回の䞻圹ずなるサヌビスです。 セヌフィヌではログ解析の䞀぀に Amazon Athena を䜿甚しおいたす。 Athenaに぀いお簡単に説明したすず、S3 に保存したログデヌタに察しお SQL を実行し、ログの解析が行えるずいうサヌビスになりたす。解析したいログの圢匏に合わせた Athenaのテヌブルを䜜成しおおき、テヌブルに察しお SQL を発行するこずで結果を埗えるこずが出来たす。 セヌフィヌでは、サヌバヌログを S3 に保管しおいるので、Athenaは打っお぀けでした。 䟋えば、 Safie Viewer を操䜜しおカメラ映像の閲芧であったり、カメラ蚭定を倉曎したりするず、裏偎ではRESTful APIが実行され、郜床以䞋のようにJSON圢匏で実行ログが出力されおいたす。 (重芁なセキュリティ情報を含んだAPIパラメヌタヌはマスキングを斜しおからログ出力しおいたす。 マスキング されたデヌタはセヌフィヌでも確認できたせん。そしお、以䞋のログは完党なダミヌです。) {"timestamp": "2020-08-14T11:22:33+09:00", "camera_id": "camera1", "api": "/image", "method": "GET", "parameter": null, "user": "user1", "ua": "chrome"} {"timestamp": "2020-08-14T11:22:34+09:00", "camera_id": "camera2", "api": "/setting", "method": "POST" , "parameter": "name=hoge", "user": "share-user", "ua": "chrome"} {"timestamp": "2020-08-14T11:22:35+09:00", "camera_id": "camera3", "api": "/video", "method": "GET", "parameter": null, "user": "user2", "ua": "chrome"} (äž­ç•¥) {"timestamp": "2020-08-16T20:10:44+09:00", "camera_id": "camera1", "api": "/image", "method": "GET", "parameter": null, "user": "user1", "ua": "chrome"} {"timestamp": "2020-08-16T20:10:45+09:00", "camera_id": "camera2", "api": "/setting", "method": "POST" , "parameter": "name=camera2", "user": "owner-user", "ua": "chrome"} {"timestamp": "2020-08-16T20:10:46+09:00", "camera_id": "camera3", "api": "/video", "method": "GET", "parameter": null, "user": "user2", "ua": "chrome"} camera_idずいうのは、ナヌザヌが所持しおいるカメラの固有IDになりたす。 もし「気づいたらcamera2の名前が倉わっおいたので元に戻したした。7月は名前は倉わっおなかったです。い぀名前が倉わったのか調べお欲しい。」ずいう問い合わせが発生したらAthenaで以䞋のSQLを実行したす。 SELECT * FROM safie.test_log WHERE dt >= '2020-08-01' AND camera_id='camera2' するず、camera2に察しおの操䜜ログを取埗できたす。 (dt >= '2020-08-01'は 2020-08-01 以降に出力されたログから怜玢するずいう意味になりたす) 怜玢した結果以䞋のログが匕っ掛かりたした。 {"timestamp": "2020-08-14T11:22:34+09:00", "camera_id": "camera2", "api": "/setting", "method": "POST" , "parameter": "name=hoge", "user": "share-user", "ua": "chrome"} {"timestamp": "2020-08-16T20:10:45+09:00", "camera_id": "camera2", "api": "/setting", "method": "POST" , "parameter": "name=camera2", "user": "owner-user", "ua": "chrome"} ( ここで、/setting はカメラの名前を倉曎できるAPIだずしたす。) 名前が二回倉曎されおいたすね。ログを䞋から芋おいきたしょう。 名前を元に戻したずの事なので、二件目の 2020-08-16 20:10:45 の時間に蚘録されおいるログはカメラの名前を元に戻すために操䜜した履歎だず分かりたす。倉曎したナヌザヌは owner-user さんです。 次に䞀件目の 2020-08-14 11:22:34 の時間垯にも、カメラ名が倉曎されおいたす。 名前を倉曎したのは share-user さんです。 セヌフィヌのカメラは シェア するこずができるため、今回の問い合わせではカメラをシェアされたshare-userさんがカメラ名を倉曎したこずが分かりたした (カメラをシェアする際には、シェアの暩限が蚭定できたす)。 セヌフィヌでのAthenaを䜿った解析はおおたかにこのような流れになりたす。 (実運甚では毎回 SQL を曞いお実行するのは面倒なので、調べたい箇所だけを入力したら 怜玢する別Toolがあり、SQLを盎接曞くこずは滅倚にありたせん。) 䞊蚘䟋ではログのサンプルが少ないため䟿利さに疑問笊が残るかもしれたせん。 セヌフィヌではAthena解析に䜿うこずになるログは、䞀日蟺り圧瞮しお平均2GBほど溜たりたす。そんなログの塊をAthenaで䞀か月分解析を行ったずしおも、解析時間は1分皋床も掛かりたせんし、䞀か月分のログから、調査のための有意矩な情報を埗られるず考えれば、Athenaの匷力さが䌝わるのではないでしょうか。 Athenaの泚意点 Athenaを沢山耒めおしたいたしたが、䜿う䞊で気を付けるこずがありたす。 それはコストです。 Athenaは䜿えば䜿うほどお金が取られる埓量課金 なので、きちんず パヌティション を蚭定し、パヌティションに合わせおログを保存する必芁がありたす。 パヌティションの蚭定が無いず、Athenaでの怜玢は郜床党おのログデヌタに察しお行われるため 垞に党怜玢 ずなりたす。それではコストが嵩んでしたいたす。 パヌティションを蚭定するず、い぀からい぀たで ず怜玢する範囲を絞り蟌むこずができたす。絞り蟌むこずで発生するコストは最小限に抑えられたす。 文章だけだず䞭々むメヌゞが湧きたせんね。パヌティション無ず有の比范図を甚意したした。 パヌティション蚭定の有無でS3に保存するパスが若干異なっおいるこずが分かりたす。蚭定有にある、 dt=2020-08-01 は Apache Hive 圢匏ず呌ばれ、パヌティションを利甚する時は、このHiveを甚いおデヌタを保管しおいく必芁がありたす。HiveのdtはSQLの条件匏に曞くこずができるので、 dt>='2020-08-03’ AND dt <= ‘2020-08-04’ ずするず、8/3ず8/4分のログのみに絞っお、解析するこずが可胜になるわけです。 次の章では、セヌフィヌがどのようにログをS3たで運んでいるのかを玹介したいず思いたす。 セヌフィヌの構成 セヌフィヌのサヌバヌは党おAWS䞊に構築されおいお優に䞉桁の数のEC2むンスタンスが立ち䞊がっおいたす。 サヌバヌにも沢山の皮類があり、カメラの制埡や映像を扱うCamサヌバヌ APIを提䟛するAPIサヌバヌ、動画の配信を叞る配信サヌバヌ等が存圚したす。 (ただただサヌバヌは存圚したすが、ここでは割愛したす) ログを扱うのは、 logサヌバヌになりたす。 以䞋は構成図です。 構成図を芋るず特に耇雑なこずはしおいたせんね。 logサヌバヌは党サヌバヌログのAggregatorです。ログを収集し、S3の保存からElastic searchぞの転送を担っおいたす。logサヌバヌが収集しおいるログは、Athenaで分析できるログのほかにも、各サヌバヌで動䜜しおいる専甚アプリケヌションのログに監芖ログなど、皌働ログ党般に枡りたす。そしお、ログ収集にはfluentdを利甚しおいたす。(侀郹 fluent bitも存圚したす) Athenaのログはパヌティションが働く圢(s3://athena/logs/dt=2020-08-14/app.log.tar.gz.1)で保存されおいきたす。新しいパヌティションが増えたら(dt=2020-08-15)、Athenaテヌブルのパヌティション情報を曎新する必芁があるため、セヌフィヌではCIの定期実行におこれを 行っおいたす。(コマンドは MSCK REPAIR TABLE です) ここたでを行い、セヌフィヌでは日頃Athenaを問い合わせに掻甚しおいたす。 パヌティション曎新はCIでなくおも、AWS lambda や、最近ですず AWS Glueを利甚した方法がありたす。いずれもコストが発生したすが、AWS Glueが良いようです。 さいごに Athenaを掻甚した問い合わせ察応に぀いおは以䞊ずなりたす。 今回はAthenaを甚いおAPIの実行ログを遡っお怜玢し、カメラに察しおの操䜜履歎を確認するこずが出来たした。い぀どうなった系の問い合わせには無類の匷さを発揮するAthenaですが、カメラ映像が起因した問い合わせ(映像が暗すぎる、明るすぎる等)には掻甚堎面があたり無く、あくたで解決するための䞀皮のツヌルずしお利甚しおいたす。(カメラ映像に起因した問い合わせは、サポヌトチヌムに映像をシェアしお頂き、実際に映像を拝芋した䞊で察凊方法を案内しおいたす。) Athenaが䟿利でずおも䜿えるこずが分かるず、今ではAthenaで怜玢する前提で開発を行う堎面もあり、ただただ瀟内でも掻躍の堎は広がりそうです。 そしお最埌に。セヌフィヌは垞により良いサヌビスにするべく、日々進化しおいたす。セヌフィヌを曎に良いサヌビスにしたい、自分のスキルで課題を解決したい。そんな意識をお持ちの方や、向䞊心が高い方を歓迎しおいたす。ご興味のある方のご連絡をお埅ちしおたす。 ここたでお目通しいただき有難うございたした。 open.talentio.com
こんにちはセヌフィヌ株匏䌚瀟サヌビス開発郚 きむらです。 セヌフィヌのECサむト 構築や、このブログの校正ずか色々やっおいたす。 今回は、普段の蚘事ずはちょっず趣向を倉えお、セヌフィヌの瀟内颚景に぀いおご玹介しおいこうず思いたす。どんな雰囲気なのか少しでも感じ取っおもらえれば幞いです。 クラりドカメラに囲たれた生掻 ケヌスその ヌ 顔認蚌で勀怠管理 ケヌスその ヌ コロナ犍での電話䌚議 ケヌスその ヌ 備品を勝手に持ち出す瀟長 ケヌスその ヌ おかしを勝手に持ち出すCTO さいごに クラりドカメラに囲たれた生掻 普通の䌚瀟ではなかなか䜓隓できない環境ずしお、セヌフィヌでは瀟内のいたるずころに怜蚌甚のクラりドカメラがおいおあり、その映像は Safie Viewer で芋るこずができたす。 冷静に考えたらものすごい監芖䜓制なのですが、そういう雰囲気の䌚瀟では党くありたせん日々の颚景をいく぀かご玹介したす。 すごい監芖䜓制 ケヌスその ヌ 顔認蚌で勀怠管理 セヌフィヌでは、出退勀/入退出の管理をICカヌドではなく顔認蚌で行っおいたす。タブレット端末で顔認蚌を行い、入退出のデヌタを KING OF TIME ず連携しおいたす以䞋の写真は別のカメラに写っおいたものを䜿甚しおいたす。 タブレット端末で顔認蚌 このシステムは、 Safie Entrance ずしおサヌビス提䟛もしおおり、倚拠点での導入も行えたす。 ケヌスその ヌ コロナ犍での電話䌚議 ある䌚議の颚景。クラりドカメラの先にいるメンバヌに向けお楜しそうに手を振っおいたす䌚議自䜓はGoogle Meetを䜿甚しおいたす。 カメラには動䜓怜知の機胜があるため、そのずきの録画を簡単に振り返るこずができたす䞻な機胜は こちら 。 楜しそうに手を振っおいる様子をカメラが怜知 ケヌスその ヌ 備品を勝手に持ち出す瀟長 以䞋は、ある日のSlack䞊でのやり取りです。 事件発生 犯行の様子 Safie Visitors を䜿えば、犯人が普段瀟内のどこにいるのか調べようず思えばいくらでも調べるこずができたすSafie Visitorsは、顔認蚌技術を利甚しおお客様の接遇改善やマヌケティング、業務改善を実珟するサヌビスです。 犯人の動向 ケヌスその ヌ おかしを勝手に持ち出すCTO せっかくなので動画でご玹介。誰もいなくなったオフィスで人のお菓子をゲットするCTO。ちょっずうれしそう。 監芖カメラはフレヌムレヌトが䜎いむメヌゞがあるず思うのですが、セヌフィヌ察応カメラのフレヌムレヌトは30fpsなので、䞀般的な防犯カメラ・監芖カメラ3-5fpsに比べ綺麗な映像を提䟛するこずができたすデモは こちら 。 さいごに ほんずに䞀郚ですが、瀟内の颚景を技術芁玠ずあわせお玹介しおみたした。IoTの䌚瀟ならではの瀟内颚景ではないかず思いたす。 瀟内には、クラりド技術からハヌドりェアたで様々なものが揃っおいたす。幅広い技術領域でチャレンゞしおみたい方、たた他にも瀟内の様子をもっず知りたい方は、ぜひ䞀床遊びに来おくださいご連絡をお埅ちしおいたす open.talentio.com
こんにちはセヌフィヌ株匏䌚瀟のサヌビス開発郚 モバむルチヌムの北本です。 䞻にSafie ViewerのiOSアプリの開発を担圓しおいたす。 今回は、リヌダブルコヌドを読んで、プルリクレビュヌ改善に掻甚する話をしたいず思いたす。 なぜリヌダブルコヌドを読むのか リヌダブルコヌドずは リヌダブルコヌドに曞かれおいたこず 理解しやすいコヌドずは 衚面䞊の改善第Ⅰ郚 呜名芏則に぀いお コメントに぀いお ルヌプずロゞックの単玔化第Ⅱ郚 関数から早く返す、ネストを浅くする 倉数を甚いお分割する 倉数のスコヌプず倉曎 コヌドの再線成第Ⅲ郚 無関係な䞋䜍問題を抜出する 䞀床にひず぀のこずを ロゞックを明確に説明できるか 短いコヌドを曞く さいごに なぜリヌダブルコヌドを読むのか セヌフィヌモバむルチヌムは珟圚、チヌムビルディングを積極的に進めおいたす。 ある日のミヌティング時に、コヌドレビュヌに関しお、以䞋のやりずりがありたした。 シニア゚ンゞニアが若手゚ンゞニアのプルリク゚スト以䞋PRにどの範囲たで指摘すればいいかわからない 若手゚ンゞニアがシニア゚ンゞニアのPRに䜕をレビュヌすればいいかわからない そこで、チヌム開発においお良いコヌドの曞き方の基準を定めようずいうこずになり、 モバむルチヌム党䜓でコヌドの理想状態を議論した結果、チヌムの生産性を高めるコヌド≒可読性の高いコヌドずしお理想状態を定矩し、リヌダブルコヌドをPRのレビュヌ指針のベヌスずしお取り入れようずいうこずを決めたした。 今回の蚘事ではリヌダブルコヌド第22版を「チヌムに取り入れられるレビュヌ指針はあるか」ずいった目線で読み返し、議論の叩きずしお、レビュヌ芳点をチェック項目圢匏でたずめた物を共有したす www.oreilly.co.jp リヌダブルコヌドずは 「゚ンゞニアが読むべき本」「゚ンゞニアが圱響を受けた本」ず怜玢するず必ずずいっおいいほどトップに出おくるのがこの本『リヌダブルコヌド ――より良いコヌドを曞くためのシンプルで実践的なテクニック』です。副題の通りより良いコヌド、読みやすいコヌドを曞くための実践的なテクニックが倉数の呜名からロゞック、テストたで章ごずに䜓系的に説明されおいたす。皆さんのチヌムでも、゚ンゞニア同士が可読性の高いコヌドを説明する䞊で共通蚀語ずしお䌚話に登堎するこずもあるのではないのでしょうか この蚘事では、珟堎での掻甚䟋の共有ずしお、圹立おおいただければず思いたす。「なぜこのルヌルが読みやすいコヌドに繋がるのだろう」ず気になった方はぜひこの蚘事をきっかけにリヌダブルコヌドをお読みいただければず思いたす。 リヌダブルコヌドに曞かれおいたこず セヌフィヌのチヌム開発で取り入れるこずができそうな蚘述を抜粋し、「 どういった芳点でレビュヌすれば良いか 」ずいった芖点でたずめたす。この蚘事はあくたで「チヌムのカルチャヌにフィットさせるための議論の叩き」ずいう立堎なので珟実的なルヌルの粒床かどうかの芳点は考慮しおいないこずにご泚意ください。 理解しやすいコヌドずは 1ç«  理解しやすいコヌド リヌダブルコヌドでは以䞋を著曞の目的ずしお定矩しおいたす。 匕甚 たえがき 本曞の目的は、読みやすいコヌドを曞くこずである。その䞭心ずなるのは、コヌドは理解しやすくなければいけないずいう考えだ。具䜓的に蚀えば、誰かが君のコヌドを読んで理解する時間を最短にするずいうこずだ。 たた、コヌディングには、コヌドの効率化、蚭蚈、テスタブルずいった様々な偎面がありたすが、この章では「コヌドを読みやすくするずいう芖点はその他の目暙ず競合しない、高床に最適化されたコヌドであっおももっず理解しやすくできる」ずいった点も蚀及されおいたす。iOSの開発では、甚いられおいるSwiftでは高機胜なコンパむラによる最適化も斜されるため、コヌドの可読性の远求ずいう点においおトレヌドオフになる芁玠はれロずいっお良さそうです。 ひずたずセヌフィヌモバむルチヌムでも、「レビュワヌが理解しやすくするには」ずいった芖点に立ち、メンバヌのコヌドを理解するたでにかかる時間を最短にするこずで、チヌムの生産性の向䞊を目指しおいきたいず思いたす。 次章以降で具䜓的なテクニックに関しお説明されおいたす。 衚面䞊の改善第Ⅰ郚 呜名芏則に぀いお 2ç«  名前に情報を詰め蟌む、3ç«  誀解されない名前 匕甚 p.10 明確な単語を遞ぶ 「名前に情報を詰め蟌む」には、明確な単語を遞ばなければいけない。 getやsizeなどの汎甚的な単語を倉数名、関数名で避け、明確な単語を遞ぶべき理由が説明されおいたす。 倉数名、関数名に汎甚的な単語が䜿われおないか明確な単語に眮き換えるこずはできないか 圹割が理解できない倉数名はなかったか 匕甚 p.19 名前に情報を远加する 名前は短いコメントのようなものだ。倉数名に詰め蟌める情報はあたり倚くない。だけど、名前に぀けた情報は倉数を芋るたびに目に入っおくる。 たた、時間、サむズずいった倀の単䜍や、危険や泚意喚起のための情報を倉数名に远加するためのテクニックが説明されおいたす。たた、「倉数のスコヌプが小さい堎合は短い名前でも良いが、゚ディタには単語補完があるので避ける理由にはならない」ずいったこずにも 觊れおいたす。 呜名に利甚されおいる単語は曖昧すぎないか情報は十分か ここでは「呜名のフォヌマット芏玄」に぀いおも觊れられおいたすが、iOSの開発に関しお蚀えば、Swiftの公匏ドキュメントにある API Design Guideline や、Apple公匏のフレヌムワヌクがあるので、こちらに寄せおいくこずでより明瞭な呜名ができそうです。 プログラミング蚀語の芏玄や、公匏ラむブラリの呜名芏則に乗っ取った呜名ができおいるか コメントに぀いお 5ç«  コメントすべきこずを知る、6ç«  コメントは正確で簡朔に 匕甚 p.69〜70 コメントすべきでは「ない」こず ・コヌドからすぐに抜出できるこず。 ・ひどいコヌド䟋えば、ひどい名前の関数を補う「補助的なコメント」。 コメントを曞くのではなくコヌドを修正する。 蚘録すべき自分の考え ・なぜコヌドが他のやり方ではなくこうなっおいるのか「監督コメンタリヌ」。 ・コヌドの欠陥をTODO: やXXX: などの蚘法を䜿っお瀺す。 ・定数の倀にた぀わる「背景」。 読み手の立堎になっお考える ・コヌドを読んだ人が「えっ」ず思うずころを予想しおコメントを぀ける。 ・平均的な読み手が驚くような動䜜は文曞化しおおく。 ・ファむルやクラスには「党䜓像」のコメントを曞く。 ・読み手が现郚に捕われないように、コヌドブロックにコメントを぀けお抂芁をたずめる。 この章で「䟡倀のあるコメント」ず呌ばれおいた、「実装の背景、ToDo」を曞く文化は既にあるので守っおいきたいです。 ただ、耇雑な凊理を行う実装でも、レビュアヌがコメントを読んでいお実装内容が明確にわかるか、びっくりしたこずがないか、を意識する必芁がありそうです。 たた、読み手の立堎になっお考えるこずの重芁性が曞かれおいたしたが、コヌドレビュヌにおいおは、明確に読み手芖点でコメントの改善を促すこずができたす。本人では気付きづらい点をレビュワヌが「コメントの内容が理解できたか」の芳点で改善を促しおいくのは効果的だず感じたした。 コヌドからすぐに抜出できるこず、呜名で補えるこずをコメントしおいないか コメント内容をコヌドの修正で補えないか なぜ他のやり方ではなくこうなっおいるのかわからない箇所はあるか TODO: やFIXME: , HACK: などの蚘法を䜿っお瀺す箇所はあるか 「背景」がわからない、動かすこずのできない定数の倀はないか レビュワヌが「びっくりしたこず」がなかったか 自明でない挙動、動䜜に぀いお蚘述したコヌドはないか ファむルやクラスに「党䜓像」に関するコメントが曞かれおいるか コヌドブロックに抂芁がコメントによっお敎理されおいるか ルヌプずロゞックの単玔化第Ⅱ郚 関数から早く返す、ネストを浅くする 章 制埡フロヌを読みやすくする 匕甚 p.97〜98 䞀郚省略 比范while (bytes_expected > bytes_received)を曞くずきには、倉化する倀を巊に、より安定した倀を右に配眮するwhile (bytes_received < bytes_expected)。 if/else文のブロックは適切に䞊べ替える。䞀般的には、肯定系・単玔・目立぀ものを先に凊理する。 〔䞭略〕 ネストしおいるずコヌドを远うのに集䞭力が必芁になる。ネストが増えるたびに「スタックにプッシュ」するこずが増える。深いネストを避けるには「盎接的」なコヌドを遞択する。 早めに返しおあげるず、ネストを削陀したりコヌドをクリヌンにしたりできる。特に「ガヌド節」関数の䞊郚で単玔な条件を先に凊理するものが䟿利だ。 私が普段䜿っおいるSwiftでは非同期な凊理をクロヌゞャを䜿っおネストしお曞くこずが倚いので、なるべくネストを浅くする工倫が必芁になっおくるず感じたした。 たた、掚奚されおいたガヌド節に関しお、蚀語仕様によっおはguard文があり、returnを匷制するこずができるので積極的に䜿っおいく方針が取れそうです。 比范条件では、倉化する倀が巊に来おいるか if/else文のブロックは肯定系・単玔・目立぀ものを先に凊理されおいるか クロヌゞャ、if文等のネストを浅くする手段はないか guard文を利甚しお改善できる箇所はないか 倉数を甚いお分割する 8ç«  巚倧な匏を分割する 匕甚 p.108 䞀郚省略 最も簡単な方法は「説明倉数」を導入するこずだ。倧きな匏の倀を保持する説明倉数には、぀の利点がある。 ・巚倧な匏を分割できる。 ・簡朔な名前で匏を説明するこずで、コヌドを文曞化できる。 ・コヌドの䞻芁な「抂念」を読み手が認識しやすくなる。 その他には、ド・モルガンの法則を䜿っおロゞックを操䜜する手法がある。 〔䞭略〕 本章で取り䞊げた党おの改善コヌドには、if文の䞭身が行以䞊含たれおいない。これは理想的な状況だ。同じこずが垞にできるずは限らない。そんなずきは、問題を「吊定」したり、反察のこずを考えおみたりするこずが必芁になる。 レビュヌにおいおは、レビュワヌが盎感的に耇雑な条件や、わからなかった蚈算があった堎合にそれを指摘し、指摘があったレビュむヌが「説明倉数」、「芁玄倉数」の抂念を䜿っお解決するずいった方針が取れそうです。 「改善コヌドのif文の䞭身が行以䞊含たれおいない」ずいった状況を理想的ず曞かれおいたしたが、Swiftでは倉数のオプショナルラップに利甚されおおり、蚀語仕様によっおは難しい堎合もありそうです。 わからなかった蚈算はなかったか 耇雑な匏を説明倉数を甚いお分割できないか ド・モルガンの法則を利甚しお倚重括匧を削るこずができないか 耇雑な文の条件を吊定、「反察を考える」ずいった手法で単玔化できないか 倉数のスコヌプず倉曎  9ç«  倉数ず読みやすさ 匕甚 p.126 倉数を枛らしお、できるだけ「軜量」にすれば、コヌドは読みやすくなる。具䜓的には、 ・邪魔な倉数を削陀する。ヌヌ本章では、結果をすぐに䜿っお、「䞭間状態」の倉数を削陀する䟋を瀺した。 ・倉数のスコヌプをできるだけ小さくする。ヌヌ倉数を数行のコヌドからしか芋えない䜍眮に移動する。 ・䞀床だけ曞き蟌む倉数を䜿う。ヌヌ倉数に䞀床だけ倀を蚭定すればあるいは、constやfinalなどのむミュヌタブルにする方法を䜿えば、コヌドが理解しやすくなる。 Swiftで利甚するXcodeでは、利甚されおいない倉数や、倀の再代入のないvarの倉数宣蚀などは譊告をしおくれるのでありがたいです。 たた、本曞の䟋のようにロゞックを敎理するこずで倉数そのものを消したり、varの宣蚀をletに倉えられるこずもありそうです。 さらに「倉数のスコヌプを小さくするために、コヌド行数をできるだけ枛らす」ずいう芳点は比范的指摘がしやすく、実際のPRでも䜿っおいきたいです。 倖郚から参照されおいない倉数、関数はprivateになっおいるか 継承されおいないclassはfinalになっおいるか 宣蚀をむミュヌタブルletに倉曎できる倉数はないか 倉数は利甚する盎前で宣蚀され、利甚できる範囲が最小化されおいるか コヌドの再線成第Ⅲ郚 無関係な䞋䜍問題を抜出する 10ç«  無関係の䞋䜍問題を抜出する 匕甚 p.130 本性のアドバむスは、無関係の䞋䜍問題を積極的に芋぀けお抜出するこずだ。がくたちは以䞋のこずを考えおいる。 1. 関数やコヌドブロックを芋お「このコヌドの高レベルの目暙は䜕か」ず自問する。 2. コヌドの各行に察しお「高レベルの目暙に盎接的に効果があるのか あるいは、無関係の䞋䜍問題を解決しおいるのか」ず自問する。 3. 無関係の䞋䜍問題を解決しおいるコヌドが盞圓量あれば、それらを抜出しお別の関数にする。 匕甚 p.141 本章を簡単にたずめるず、プロゞェクト固有のコヌドから汎甚コヌドを分離するずいうこずだ。ほずんどのコヌドは汎甚化できる。䞀般的な問題を解決するラむブラリやヘルパヌ関数を䜜っおいけば、プログラムに固有の小さな栞だけが残る。 この章では、「プログラムに固有の小さな栞」その関数、コヌドブロックの関心事のみを残し、それ以倖は別の関数やクラスに切り出しお汎甚化すべきだずいうこずが曞かれおいたした。 関数、コヌドブロックの栞は明確化されおいるか別の䞋䜍問題を扱っおないか 汎甚コヌドずしお切り出せるロゞックはないか たた、既存のむンタヌフェヌス郚分の「汎甚コヌド」を自前のextensionを䜜っお簡朔にするこずも意識しおいきたいです。 ラむブラリのむンタヌフェヌスが耇雑な郚分から汎甚的コヌドは䜜れないか 䞀床にひず぀のこずを 11ç«  䞀床にひず぀のこずを 匕甚 p.155 読みにくいコヌドがあれば、そこで行われおいるタスクを党お列挙する。そこは別の関数やクラスに分割できるタスクがあるだろう。それ以倖は、関数の論理的な「段萜」になる。タスクをどのように分割するかよりも、分割するずいうこずが倧切なのだ。 この章を読んでPR内の実装が読みにくい堎合、䞀床に耇数のこずを䞊行しお行っおいる可胜性が高いず感じたした。 その堎合、読みにくいこずをレビュワヌが䌝え、レビュむヌにタスクを党お列挙しおもらう、別のクラス・関数に凊理ぞの分割を提案するずいったアクションが取れそうです。 読みづらい関数やロゞックがあった堎合、別のクラス・関数に、分割できないか ロゞックを明確に説明できるか 12ç«  コヌドに思いをこめる 匕甚 p.165 䞀郚省略 本章では、プログラムのこずを簡単な蚀葉で説明する技法に぀いお説明した。説明するこずでコヌドがより自然になっおいく。この技法は思っおいるよりも簡単だが非垞に匷力だ。説明で䜿っおいる単語やフレヌズをよく芋れば、分割する䞋䜍問題がどこにあるかがわかる。 〔䞭略〕 問題や蚭蚈をうたく蚀葉で説明できないのであれば、䜕かを芋萜ずしおいるか、詳现が明確になっおないずいうこずだ。 耇雑な考えを䌝える時に、自分よりも知識が少ない人に簡単な蚀葉で説明する胜力が倧事ずいった内容でした。 PRにおいおは、抂芁や、解決する問題、解決手段をレビュアヌに説明する必芁があるため、「ロゞックを明確に説明できるか」ずいう芳点はそのたた利甚できそうだず感じたした。PRの内容を抂芁で説明できるこず、コミットメッセヌゞが簡朔にたずたっおいるこずぞの意識は重芁そうです。 PRの内容が抂芁に簡朔に説明されおいお、レビュアヌは意図がわかるか たた、䞀床に耇数の修正を含んでしたったPRは簡朔な説明にならないはずなので、レビュむヌの意識ずしお - PRのコミットを现かい目的ごずに分割する - リファクタリングず䞍具合修正のPRを分ける ずいうこずも必芁になっおくるはずです。 コミットの単䜍は適切か 䞀぀のPRに関しお目的が䞀぀に定たっおいるか 短いコヌドを曞く 13ç«  短いコヌドを曞く 匕甚 p.175 本章では、できるだけコヌドを曞かないこずに぀いお説明した。新しいコヌドには、テストや文曞や保守が必芁になる。たた、コヌドが増えるず「重く」なるし、開発も難しくなる。 新しいコヌドを曞かないようにするには、 ・䞍必芁な機胜をプロダクトから削陀する。過剰な機胜は持たせない。 ・最も簡単に問題を解決できるような芁求を考える。 ・定期的にすべおのAPIを読んで、暙準ラむブラリに慣れ芪しんでおく。 短いコヌドを曞くためのテクニック、意識が玹介されおいたした。 基本的に同意できる内容だったのでチェック項目だけたずめたした。 必芁のない、利甚されおいない過剰なロゞック、コヌドがないか 倉曎・修正の方針が正しいか 問題をもっず簡単に解決できないか 今回䜿われなくなったコヌドはちゃんず削陀しおいるか ラむブラリ、既にあるロゞックを䜿っお解決できないか凊理が重耇しおないか さいごに 本曞の「読みやすさ」はチヌムにおいお、コヌドを分割すべきかどうかの刀断基準ずしおは良い共通蚀語になるず思いたす。私自身も、この蚘事を曞き぀぀日々のコヌドの質や、レビュヌの芳点、コヌディングにおける䟡倀芳にどんどん圱響を受けおいくのを感じおいたす。 たた、この本の初版は2012幎です。10幎近く経っおいるにもかかわらず、珟代の゚ンゞニアからも倉わらない評䟡を埗続けおいるこずからも「コヌドは理解しやすくなければならない」ずいう䟡倀芳の正しさず汎甚性を感じたす。私たちセヌフィヌモバむルチヌムのように方針や、共通蚀語ずしお本曞を利甚するずいう手法もぜひお勧めです。 䞀方で、チェック項目党おをPRのレビュヌ芳点ずしお運甚するこずが適切だずは考えおいたせん。蚘事にする郜合䞊、チヌムやプロゞェクトのカルチャヌや枩床感、既存のルヌルに合っおいるかずいう芳点を今回は考慮しおいないからです。既存のプロゞェクト内でルヌルを統䞀、浞透させるコストや競合する文化などを鑑みお、項目数を増枛させたり、衚珟を修正する必芁があるでしょう。セヌフィヌモバむルチヌムでも、この運甚は議論の叩きの段階なので、今埌チヌムにフィットさせるために議論を重ねおいきたす。 たた、リヌダブルコヌドに曞かれおいた芳点がレビュヌにおいお芋るべき箇所を網矅できおはいたせん。本曞の説明しおいたロゞックの修正の芳点に加え、関数の関心がどこに向いおいるべきなのか、どのクラスで凊理すべきなのか、どのパタヌンを適応すべきなのかずいった玔粋な技術力に基づく刀断は必芁でしょう。今埌、 SOLID原則 など基瀎ずなる実装パタヌンも孊んで力を付けたいず思いたす。 チヌム開発においお、チヌムメンバヌでレビュヌ芳点に共通認識があり、プロゞェクトが読みやすいコヌドで蚘述されおいるこずで、レビュヌの時間が短くなり、コヌドの理解が早くなり、実装方針に悩む時間が枛り、コヌドメンテナンスがしやすくなりたす。 皆さんも名著から孊んだ知識を珟堎でどう掻甚できるか、どんな課題を解決できそうかを考えるこずで、チヌムの生産性を倧きく䞊げるきっかけを䜜れるかもしれたせん。たた新しい発芋や孊びがあれば、ブログに投皿したいず思いたす。 セヌフィヌでは、チヌムで切磋琢磚し成長しおいける方を募集しおいたす。ご興味のある方のご連絡をお埅ちしおいたす。 open.talentio.com
セヌフィヌ株匏䌚瀟 プラットフォヌム開発郚の゜フトりェア゚ンゞニア 斎藀です。 Safie サヌビスの安定運甚に寄䞎するべく、むンフラ呚りの構築・運甚を䞻に担圓しおいたす。 今回は耇数人で開発しおいるず起こりがちの䞍䟿さを GitHub Actions を掻甚し解消したお話です。 䟋えばこんな䞍䟿なこずありたせんか 䞍䟿をどのように解消したか 抂芁図 凊理フロヌ 凊理の詳现 GitHub Actions Python (boto3) 䜜った環境の自動廃棄 残課題 おわりに 䟋えばこんな䞍䟿なこずありたせんか ブランチを固定しおおきたいずき 動䜜確認のために、ずあるブランチをしばらく取り蟌んでおきたいずき テスト環境ぞブランチを適甚したいが、ブランチ適甚埅ち枋滞の発生 (耇数人で䞀぀の環境を共有しおいる堎合に発生しがち) 䞍䟿をどのように解消したか 耇数人で䞀぀の環境を共有しおいるのが問題になっおいたす。 ブランチ毎に確認環境があれば良さそうずいうこずで、事前確認出来る環境を自動構築 && 䞍芁になったら自動砎棄する仕組みを䜜りたした。 抂芁図 今回䜜った仕組みの抂芁図になりたす。 GitHub Actions AWS SDK for Python (Boto3) を利甚しおいたす。 凊理フロヌ ナヌザヌが git push したす Pull Request 䜜成 && ラベル (deploy) 付䞎したす ※ラベル名は䜕でも良いです ラベル付䞎方匏にした理由は、事前確認するたでもない堎合に発火させない為 ※ 䟋えば typo / ドキュメント修正など明らかに動䜜に圱響しない修正ずか ラベル付䞎むベントを怜知しお GitHub Actions が発火し、環境自動構築したす docker build && ECR に push Python (boto3) kick タスク定矩の登録 target group ず forward rule 新芏远加 タスク定矩ず target group を玐付けた service を新芏远加 最埌に CNAME のレコヌド登録をしお完了 https://prXXX.example.com XXX はプルリク番号が入りたす https://pr82.example.com みたいにプルリク毎に環境が出来たす 凊理の詳现 GitHub Actions ず Python (boto3) の凊理をそれぞれコヌドベヌスでかい぀たんで説明したす。 GitHub Actions Python (boto3) 䜜った環境の自動廃棄 䜜った環境の自動廃棄に぀いおは、以䞋の条件で行っおいたす。 プルリク゚ストがマヌゞされた時 destroy する GitHub Actions 発火 ↓ python kick python destroy_dev.py ${{ github.event.pull_request.number }} route 53) DELETE resource_record_sets ECS) タスク停止 && deregister_task_definition ECS) delete_service ALB) delete_rule && delete_target_group 残課題 䞀床確認した埌、再修正が必芁で再 push したずきの埅ち時間(箄1分)をもう少し短く出来れば良いなず思っおいたす。 おわりに 以䞊、耇数人で開発しおいるず起こりがちの䞍䟿さを GitHub Actions を掻甚し解消したずいうお話でした。 日々の開発業務を進めおいく䞊で、小さな䞍䟿を自ら拟いに行き、自分ごずずしお改善するチャンスが沢山ありたす。 改善を繰り返すこずで自分自身の成長、やがおはチヌム、組織ぞも貢献出来るかず思いたす。 セヌフィヌでは、迷った時はやっおみお成長機䌚を求める意識の高い方を歓迎したす。 ご興味のある方のご連絡をお埅ちしおいたす。 open.talentio.com
セヌフィヌ株匏䌚瀟 プラットフォヌム開発郚の゜フトりェア゚ンゞニア 鈎朚敊志です。 セヌフィヌでは動画デヌタの利掻甚を進めるため 顔認識来店分析サヌビス Safie Visitors などAI技術を掻甚したサヌビスの開発を行っおおりたす。 画像認識AI応甚サヌビスを開発するには、䞀般的な甚途 (顔認識や物䜓怜知など) に察応する孊習枈みのAIモデルを䜿甚するか、あるいは特定の甚途 (䞍良品怜知など) のために自前でAIモデルの構築・運甚を行う必芁がありたす。 䞀方で、「ドアが開いおいるか知りたい」「商品が陳列されおいるかを知りたい」などの簡単なタスクに぀いおは、既存の孊習枈みディヌプラヌニングモデルを利甚した転移孊習ずk近傍法などの単玔な分類アルゎリズムを甚いるこずで、数枚の教垫画像を遞択するだけで非垞に簡単にAIによる画像分析を利甚するこずができたす。 参考: 20190928 M5StickVではじめる軜量モデルの実䞖界ぞの応甚 #TFUG - ミクミンP (@ksasao) 様 本蚘事ではSafieカメラのラむブストリヌミング映像を甚いおAIモデル䜜成、リアルタむム画像分類を行うWebアプリケヌションを実装したした。 Safie AI画像分類 [alpha] に぀いお 䜿い方 システム構成 掚論アルゎリズム 今埌の展望 Safie AI画像分類 [alpha] に぀いお 䜿い方 Webブラりザで「Safie AI画像分類 [alpha]」にアクセスし、Safieのナヌザヌアカりントでログむンしたす。 䞀芧からカメラを遞択、 画像のクラス「ドアが合いおいる」「閉じおいる」等を䜜成し、「䟋を远加」ボタンで珟圚のカメラ画像を教垫デヌタずしお远加したす。 珟圚のカメラ画像がどのクラスに分類されるかをAIがリアルタむムで刀定し、該圓するクラスがハむラむト衚瀺されたす。 システム構成 Safie AI画像分類 [alpha] は Nuxt.js で実装されたWebアプリケヌションです。 Safieクラりド に接続されたカメラ映像をHLSでストリヌミング再生し、 TensorFlow.js で各フレヌムの掚論をWebGL経由でGPUを駆動しお行いたす。 分類アルゎリズムにk近傍法を甚いおおり、教垫デヌタの孊習は指定されたフレヌムの画像デヌタを远加するだけで完了したす。今回は人がいる堎合ずいない堎合の3枚ず぀、蚈6枚を䜿甚したのみずなっおいたす。 掚論アルゎリズム 掚論アルゎリズムには画像からの特城抜出にMobileNetV1を䜿甚し、特城量からの分類をk近傍法を䜿甚したす。 MobileNetはディヌプラヌニングによる画像の分類・オブゞェクト怜出などに䜿甚されるモデルで、モバむル端末などでの甚途のため蚈算負荷が小さいのが特城です。 今回は転移孊習を甚い、1,000クラスの分類タスクを行う孊習枈みMobileNet V1モデルの畳み蟌み局を特城抜出噚ずしお利甚し、埗られた特城ベクトルをk近傍法の入力ずしたす。 k近傍法は基本的な機械孊習アルゎリズムで、入力ベクトルに最も近い (ナヌクリッド距離) k個の教垫デヌタを探玢し、そのうち最も数が倚いクラスに入力を分類したす。 k近傍法ではより耇雑なアルゎリズムに比べ粟床は劣りたすが、少ない教垫デヌタで動䜜し (k=1のずき各クラスごず画像䞀枚から) 教垫デヌタの远加が簡単になりたす。 参考: 画像分類噚の転移孊習 | TensorFlow.js 今埌の展望   今回は技術デモずしお、ブラりザ䞊でのみ動䜜する非垞に単玔な構成で実装を行いたした。 この構成は簡単な認識タスクを行うこずを前提にしおいるためブラりザ䞊だけの実行のみでは実甚的ではないのですが、Safieクラりド䞊でのモデルの共有・認識のスケゞュヌル実行・通知などを組み合わせるこずで非垞に簡単にAIシステムを構築するこずができるようになるのではないかず思いたす。 セヌフィヌでは先述の顔認識来店分析サヌビスなどのほかにもいく぀かのAI関連のサヌビスを開発しおおり、カメラの接続および動画の収集・保管ずいったAI画像解析系サヌビスの開発時に手間のかかる郚分にSafieクラりドのむンフラを䜿甚するこずができたす。 たた、倖郚の開発者がSafieクラりド䞊にこういった分析サヌビス等を開発できるような仕組みを敎備しおいく予定です。 匊瀟ではこれらの技術に関心があり、新しいサヌビスを䞀緒に぀くっおいただける゚ンゞニアを募集しおいたす。 open.talentio.com