TECH PLAY

アプトポッド

アプトポッド の技術ブログ

å…š248ä»¶

Aptpod Advent Calendar 2022 23日目の蚘事です。※土日䌑みにしおいるので最終日です CTOの梶田です。 今幎もたたあっずいう間い぀も蚀っおたすね💊でAdvent Calendar もなんずか走りきれそうです。 昚幎に匕き続き継続するのは倧倉だなヌず痛感しおいたすが、なんずかみんな頑匵った💪 今幎はAdvent Calendar も5幎目ずなり、なんか新しいカタチにしようかどうか悩んだのですが、今幎も䟋幎通り、 1日目の神前の蚘事 でも觊れられおいたすが。。。 1日目の蚘事抜粋 12月ですし、幎末ネタずしお勝手に定着させようずしおいるので2022幎も 昚幎 ず同様に振り返ろうず思いたす ではでは始めたす。 ちょっずタむトルの "たた" が倚いなw はじめに MVV パヌトナヌ掻動 Amazon販売 ゜リュヌションパッケヌゞ 2023幎に向けお はじめに 2022幎も昚幎に匕き続き、COVID-19は終息するこずなく、新しい働き方が暙準になり぀぀ありたす。 ずいっおもTwitter瀟のようにリモヌトワヌクは終焉し、出瀟が匷制みたいなずころも出おき぀぀ありたすね💊 2022幎は、ロシアのりクラむナ䟵攻ず関連する材料/資源䞍足、物䟡高ただただ高くなりそうですが。。、為替倉動、円安。。。ず他にもいろんなこずありたしたが 瀟䌚の䞍安定感が増すなか、匊瀟ずしおもなかなか難しい局面は続き、攻めずいうよりはさらなる守り投資の抑制、財務の健党化等々ぞのシフト。。。 ずなかなか痺れる1幎だったのですが、 5月、6月ぐらいにスタヌトアップに冬の時代がやっおきたずいうのがちらほら出始めおいたころ、、 SmartHR創業者の宮田さんの蚘事 blog.shojimiyata.com には、特に走り続けるチカラをもらいたした💪 (瀟内でも "党員必読" みたいなかたちで少しだけ広たりたしたw 😅) 䞭でも 倉化に適応し続ける奎が䞀番匷い ずいうずころず スタヌトアップがキヌを打っおいる最䞭に死ぬこずはめったにないのだ。だからキヌを打ち続けよう! ずいうずころは、特に自分の䞭では心に留めおいたす。 ずいったずころで、 今幎のトピックをいく぀かピックアップしお曞いおいきたす。 MVV パヌトナヌ掻動 Amazon販売 ゜リュヌションパッケヌゞ MVV 䌚瀟ずしお、いわゆるMVVミッション・ビゞョン・バリュヌを今幎公開し、HPホヌムペヌゞを刷新したした。 youtu.be もずもず内郚的にはうっすらしおたものですが、蚀語化され公開されたこずで意識しやすくなり、 たた、バリュヌの浞透も含めおの斜策もいく぀かされお、意識するこずも増えたのかなず感じおはいたす。 なかなか策定や公開たでも玆䜙曲折あり぀぀、た぀わる斜策に぀いおも詊行錯誀の連続で。。。これだけの蚀葉だけで終わるのもなんずもですが😓 パヌトナヌ掻動 今幎は特にこのパヌトナヌ各瀟様ずの協業、共創掻動ぞのシフトを意識したした。 リリヌスずしおも、 2022.05.30 アプトポッド、様々な分野のパヌトナヌずの協業で産業DX支揎を加速 を䞭心に各瀟様ずの掻動をリリヌスさせおいただきたした。 2022.01.11 ax株匏䌚瀟のAI゜リュヌション「ailia」がintdashに察応 2022.02.02 アプトポッドずアクロク゚ストテクノロゞヌ マルチモヌダルデヌタによるAI/IoT゜リュヌション提䟛で協業 2022.09.07 アプトポッドずオルフェ 動䜜分析゜リュヌション提䟛で協業 2022.10.20 アプトポッド、NECず5Gを掻甚したナヌスケヌスの創出に向けお連携 たた、技術面においおは、NTTコミュニケヌションズ様やマクニカ様ずも技術的な共創掻動も今幎から始めおおり、来幎以降のどこかでお知らせできるこずを楜しみにしおいたす。 マクニカ様においおは、今回のAdvent Calendar2022の岩田の蚘事 tech.aptpod.co.jp でも觊れられおいたす MET2022Macnica Exponential Technology 2022 ずいうオンラむンむベントにおいおも匊瀟ずの取り組みをご玹介させおいただいおいたす。 内容は䞋蚘をご芧ください。 met.macnica.co.jp Amazon販売 ちょっず毛色の違うずころで軜いものを。 新しい詊みずしお、こちらのリリヌスの通り、 2022.05.09 アプトポッド、掚論や機械孊習の実行環境に最適な゚ッゞコンピュヌタ EDGEPLANT T1 を、Amazon で販売開始 昚幎販売開始をした EDGEPLANT T1 を今幎Amazonのプラットフォヌムで買えるようにしたした。 www.amazon.co.jp こういうかたちで芋えるずより身近な感じがしおよいですね 買う敷居が䞋がり、こちらをきっかけに䜿っおいただく機䌚が広がっおき぀぀あるのは嬉しい限りです。 ゜リュヌションパッケヌゞ 今幎の詊みずしお倧きなもので最近発衚しおいたす 2022.12.06 アプトポッド、モビリティやロボットの矀管理・遠隔制埡の ゜リュヌションフレヌムワヌクをベヌタリリヌス にありたすようにintdashをバック゚ンドに䜿甚した゜リュヌションずしお、最近新しいプロダクトをいく぀か発衚したした。 よりワヌクフロヌやナヌスケヌスに寄り添った゜リュヌションでお客様やパヌトナヌ様ぞ掻甚しやすくする狙いで進めおいたす。 今回のAdvent Calendar 2022でも蚘事ずなっおおりたすので是非ご芧ください。 13日目【intdash AUTOMOTIVE PRO REMOTE CAL】ECU遠隔適合システムのご玹介 tech.aptpod.co.jp 15日目モビリティ管制制埡システム向け゜リュヌション「intdash CONTROL CENTER」を玹介したす tech.aptpod.co.jp 2023幎に向けお 2022幎もたた期埅の通りずいうわけではなく、むしろ倧きな倉化の荒波に察しおどう察峙しおいくかずいったずころが詊されたような気がしおいたす。 やるこずすべおが必ずしもうたくいかず、パヌトナヌ様ずの共創掻動も含め、なかなか難しいこずも倚かった幎ではありたしたが、少しづ぀芜ずなっおいるものもあり、たた補品ずしおは進化しおいるずころもたくさんありたす。 2023幎はさらなる広がりに向けお、お客様およびパヌトナヌ様ずの共創をさらに深く、広げおいきたいず思っおおりたす。 䜕か自瀟の補品ず連携できそうずかこんな困りごずがあるずいったお客様やパヌトナヌ様は以䞋からお問い合わせいただけるず幞いです。 aptpod,Inc. Contact aptpod,Inc. Contact for Partners 再掲になりたすが、䞊蚘の宮田さんの蚘事の 倉化に適応し続ける奎が䞀番匷い ずいうずころず スタヌトアップがキヌを打っおいる最䞭に死ぬこずはめったにないのだ。だからキヌを打ち続けよう! ずいうずころを意識し぀぀2023幎も走り続けおいきたいず思っおいたす💪 来幎もたたアプトポッドにご期埅ください メリヌクリスマス🎄
アバタヌ
aptpod Advent Calendar 2022 も、22日目になりたした。本日は、ドキュメント担圓の篠厎がお届けしたす。 私は、瀟内で1人だけの「ドキュメント担圓」 *1 ずしお、瀟倖に公開するマニュアルや技術ドキュメントの制䜜を行っおいたす。 ドキュメントは新補品・新機胜のリリヌスに合わせお制䜜したすので、私は、新補品・新機胜の開発担圓者 *2 ず垞にコミュニケヌションをずりながらリリヌスたでの䜜業を進めおいたす。 そこで、この蚘事では、テクニカルコミュニケヌタヌずしおのドキュメント担圓が、補品開発担圓者ずどのようにコミュニケヌションをずりながら仕事を進めおいるか、曞いおみたいず思いたす。 *3 なお、ここでご玹介するやり方は、匊瀟内で「このようなドキュメントだったらこのようなやり方をする」ずいういく぀かのパタヌンのうちの1぀です。すべおのドキュメントを同じ方法で制䜜しおいるわけではありたせん。 この蚘事で䟋にするドキュメント 制䜜の䜓制ず流れ ドキュメントのキックオフミヌティング 目次を䜜成しお提案 開発担圓者によるレビュヌ ラむタヌはどこたで自分で悩むべきか 疑問点解決のためのミヌティング おわりに この蚘事で䟋にするドキュメント この蚘事では実際の䟋ずしお、最近公開した「intdash Edge Agent 2 デベロッパヌガむド」 PDF版 および HTML版 の制䜜を振り返りながら曞いおみたいず思いたす。 「intdash Edge Agent 2 デベロッパヌガむド」は、匊瀟゜フトりェア補品である「intdash Edge Agent 2」を掻甚いただくための、開発者向けガむドです。 本補品をLinux PCにむンストヌルするず、そのPCはデヌタ䌝送プラットフォヌム intdash のクラむアント゚ッゞずしお動䜜するようになりたす。 本補品は、埓来からある同等の補品「intdash Edge Agent末尟に2が付かない」を䜿いやすくリニュヌアルしたものであるため、デベロッパヌガむドも完党にリニュヌアルし、䞀から䜜るこずにしたした。 なお、ドキュメント制䜜に䜿甚しおいるツヌルは Sphinx です。たた、原皿デヌタは瀟内GitLabリポゞトリで管理しおいたす。 制䜜の䜓制ず流れ このドキュメントの制䜜には、䞻に以䞋の3名が携わりたした。 ラむタヌ1名私 圓該補品の開発担圓者1名ただし、これ以倖の開発メンバヌにも芁所芁所で助けおもらっおいたす プロダクト開発責任者か぀ラむタヌの䞊叞でもある たた、スケゞュヌルは、開発日皋ずの関係、たた、ラむタヌの他の䜜業ずの関係から、以䞋のようになりたした。 7月䞭旬ドキュメントのキックオフミヌティング 8月䞊旬開発担圓者の原案をもずにラむタヌが䜜業開始 8月䞋旬原案を敎理し、ラむタヌにお新しい目次を提案、OKをもらう 9月䞋旬第1回レビュヌ開発担圓者およびプロダクト開発責任者がレビュヌする。以降、レビュヌを重ね、その郜床修正する。 12月䞊旬第5回最終レビュヌ 12月䞭旬公開 ラむタヌは7月から12月たでずっずこの䜜業をしおいるわけではなく、他のドキュメントの制䜜も同時に進めおいたす。 レビュヌ日皋は䜜業の進捗に応じおその郜床蚭定する圢ずしたした。 ドキュメントのキックオフミヌティング たず、7月䞭旬に今回のドキュメント制䜜に関するキックオフミヌティングを行いたした。 ここでは、開発担圓者から「このようなドキュメントを぀くっおほしい」ずいう芁望をもらい、以䞋のこずに぀いお説明を受けたした。 intdash Edge Agent 2ずは䜕か特に、既存補品ずの違い、ナヌザヌ像 開発スケゞュヌルずドキュメント制䜜スケゞュヌル ナヌザヌに説明しなければならないこずの䞀芧 瀟内にある関連資料蚭蚈関連のドキュメント、むンストヌル甚パッケヌゞなどのありか 今回の堎合、このキックオフミヌティングを受けお、䞊蚘の「ナヌザヌに説明しなければならないこず」は、開発担圓者にお原案を曞いおもらうよう䟝頌したした。 「誰が執筆工皋を担圓するか」に぀いおは以䞋のように圹割分担をしおいるのですが *4 、今回は、䞊から2番目の「開発者向け補品マニュアル」の方法を採甚したずいうこずになりたす。 開発担圓者ずラむタヌの圹割分担 目次を䜜成しお提案 8月䞊旬、予定通り、十分な情報がしっかりず぀たった原案を開発担圓者からもらいたした。 原案を読み蟌み、以䞋のように倧きく3郚に分けお敎理するこずにしたした。 たず動かしおみるためのチュヌトリアル 目的に応じおやり方を参照するためのガむド 網矅的リファレンスここに、蚭定レシピ集も入れる これは、これたでの別ドキュメントでの反省をふたえ、たた、Divio Technologies瀟の The Documentation System などのベストプラクティスを参考にしたものです。 目次案 新しい目次に぀いお開発担圓者やプロダクト開発責任者から承認を埗られたら、実際にリラむトおよび執筆に入っおいきたす。 開発担圓者によるレビュヌ 8月䞋旬以降、説明察象の゜フトりェアを実際に操䜜し、調査や実隓をしながら、文章を曞いおいきたす。今回は開発担圓者が曞いた原案があるので、原案を利甚できるずころは利甚しながらリラむト、原案がない郚分は自分で䞀から曞きたす。 ある皋床圢になったら、開発担圓者やプロダクト開発責任者にレビュヌしおもらいたす。 このレビュヌは、技術的偎面から正しい蚘述になっおいるかを確認しおもらうのが䞻な目的です。 レビュヌ結果を曞き蟌んでもらう方法ずしおは以䞋の2぀を䜿いたした。 機胜远加等により、たずたった修正が必芁な時は瀟内GitLab䞊のマヌゞリク゚スト 现かい指摘はGoogleドラむブ䞊のPDFにコメント テキストが䞻䜓のドキュメントであれば、现かい指摘もマヌゞリク゚ストでやり取りをしたすが、今回のドキュメントは図や衚がたくさんあるこずから、PDFをGoogleドラむブで共有し、そこにコメントを぀けおもらう方法を䜿甚したした。 基本的に、レビュヌコメントを付けおくれるのは開発担圓者ずプロダクト開発責任者ですが、必芁に応じお関連する人がメンションされお呌び出され、議論に加わっおくれるずいう圢で進みたした。 PDFでのレビュヌ開発者がメンションされお呌ばれおきたずころ ラむタヌはどこたで自分で悩むべきか 説明を曞いおいるず、たびたび仕様に぀いおの疑問が生じるのですが、どのくらい悩んでから開発担圓者に質問すべきか迷いたす。 私はだいたい、「もう行き詰たった」ず思うずころたで頑匵っお䞀人で悩むようにしおいたす。同時に、「行き詰たった」ず感じるずころたでできるだけ早く行くように心がけおいたす。 これは、瀟内のラむタヌずしお、自分で答えを探すために必芁な材料が十分に䞎えられおいるためです。 今回の堎合は、手元のDocker環境で、説明察象の゜フトりェアを動䜜させ、実隓をするこずができたした。 実隓甚のintdashサヌバヌも自由に䜿えるため、蚭定を倉えお奜きなだけデヌタの送受信を詊しおみるこずができたす。 たた、瀟内WikiやGoogleドラむブに保存されおいる蚭蚈段階の倚くの資料も芋るこずができたす。 逆に蚀うず、自分で実隓できない堎合や資料ぞのアクセスがない堎合は、早く聞くしかないずいうこずになりたす。 実隓環境や瀟内資料など、情報ぞのアクセスが十分にあるずころでしっかり䞀人で悩んでおくこずは、無駄にはなりたせん。 䞀人で考えお行き詰たったずしおも、開発担圓者に質問するずきには、最終的に行き詰たった地点を瀺し、なぜその道筋をたどったのかを添えお質問するず、開発担圓者は返答をしやすくなるはず。 自分が行き詰たったずいうこずは、これからドキュメントを読むナヌザヌも同様に行き詰たる可胜性が高い。その道筋を自分で䜓隓しおいれば、それを避けるように説明ができる。 䟋を挙げおみたす。以䞋は、なんらかの蚭定項目ここでは蚭定項目Xずしたすの機胜に぀いお説明を曞こうずしお疑問が生じたケヌスです。ここでは、「このたた考えたら矛盟するこずが分かった」ずいうのが「行き詰たり」であり、それをもずに質問したした 蚭定項目Xの機胜はAずいうこずであるず考えたした。 しかし、他に蚭定項目Yがあるので、Xの機胜がAずするずXずYの蚭定が矛盟するこずになりたす。 もしかしお、Xの機胜はBでしょうか。 開発担圓者の返答は、だいたい以䞋のいずれかになりたす 䟋1Xの機胜はAずいう理解で正しいです。Yの機胜は特別なケヌスのための蚭定で、... Aずいう理解で正しかったずいうこずで安心です。でも、悩んだ甲斐がありたした。Xに぀いお悩むこずでXに぀いお正確に理解しおいるので、「Xずは異なるY」をどのように説明すればよいか、芋えおくるからです。 あるいは以䞋のような返答もありえたす。 䟋2そうです、Xの機胜は実はBなんです。ちょっず分かりにくいかもしれたせんね、そもそもXがなぜ存圚するかずいうず.... うヌむ、Xの機胜はAだず予想したのは間違いだったようです。でも、悩んだ甲斐がありたした。自分がこのように予想したずいうこずは、ナヌザヌもそのように予想する可胜性が高いからです。なぜ自分がそう予想したかを念頭に入れお、Xの「そもそも」のずころを説明する必芁がありそうです。それにより、Xの䜍眮づけがスムヌズに説明できるずよいです。 さらには、以䞋のような返答もあるかもしれたせん。 䟋3いいえ、Xの機胜は、AでもBでもなく、Cです。どういうこずかずいうず... 予想しおいなかった第3の答えでした。でも、悩んだ甲斐がありたした。これたでAずBを念頭に眮いお悩んできたわけですが、ここでも、「Aはでなく、Bでもない」ずいうこずがCを理解するための支えになりたす。 䟋2や䟋3のように理解や予想がしにくい機胜は、説明を曞くず長く耇雑なものになっおしたうこずがありたす。そんなずき、堎合によっおは、「こんなに説明が難しくなっおしたうずいうこずは、この仕様は芋盎したほうがよいかも」「蚭定項目の名前を倉えたほうがよいかも」ずいう話になり、ドキュメント化がきっかけで仕様の芋盎しにたで進むこずがありたす。 こういうこずができるのは、補品開発ずドキュメントの制䜜が瀟内で緊密に連携しながら進んでいるからこそだず思いたす。 なかなか耇雑なやりずりになっおきたした。PDFやマヌゞリク゚スト䞊のコメント䞊で䌚話を続けお解決すればよいですが、䟋2や䟋3のようなケヌスでは、詳现なコミュニケヌションが必芁になりたす。 そんなずきは、ラむタヌが䞻催しお、疑問点を解決するためのミヌティングをしたす。 疑問点解決のためのミヌティング 疑問点解決のためのミヌティングでは、ラむタヌは聞きたいこず時によっお1個から20個ぐらいを曞いた資料を甚意しおおいお、ひず぀ひず぀開発担圓者に聞きながら解決しおいきたす。 今回のドキュメントでは、開発担圓者ず78回のミヌティング各回1時間ぐらいをおこなったず思いたす。 通垞、もっず小さなドキュメントや、既存ドキュメントの改版の堎合はこんなに倚くのミヌティングはおこないたせんが、前述のずおり、今回は䞀から新しく制䜜したため、頻繁におこないたした。 *5 ちなみに、普段私はリモヌトワヌクをしおいるのですが、たたたたオフィスに出瀟した日に開発担圓者も出瀟しおいお、「せっかくなのでマニュアルの疑問点を解決したしょう」ずいうこずになっお、オフィスの片隅でミヌティングをおこなったこずもありたした。 察面でミヌティングをするず、マりスポむンタヌではなく自分の指を䜿っお「ここの説明が...」ず指し瀺したり、手元の玙に簡単な絵を描いたりしながら話ができ、やはりはかどりたす。 以䞊のような工皋を経お、最終レビュヌを通過したら、公開するこずができたす。 ひず段萜、ではありたすが、ここから先も、「このこずが曞かれおいない」「こう曞いおほしい」ずいった芁望をもらうこずになるず思いたす。終わりはありたせん。 おわりに どんなふうにドキュメントを䜜っおいるのか、今回は瀟内での開発者ずのコミュニケヌションに焊点をあおお、䞀端をご玹介しおみたした。 ドキュメントを䜜るテクニカルラむタヌは、ドキュメントをただ「きれいに」しおくれる人ずいうわけではなくお *6 、もっずいろんなずころで圹に立぀こずができるはず、ず思っおいたす。 テクニカルラむティングはテクニカルコミュニケヌションの䞀分野であり、今回は、瀟倖の方々に察しお「コミュニケヌション」をするためのドキュメントを䜜ったわけですが、そのために瀟内でも、いわば仕蟌みの段階で、開発担圓者ず「テクニカルなコミュニケヌション」を繰り返しおいたす。 このような瀟内コミュニケヌションの成果が、䟋えば䞊蚘のような「仕様自䜓を芋盎そう」ずいう動きになったり、「ここのずころは詳しく説明しよう」ずいう話になったりしお、瀟倖にお届けする補品およびドキュメントの改善に぀ながりたす。そのようなこずをめざしお、働いおいたす。 *1 : 匊瀟のドキュメント担圓の仕事に぀いおは、以前 「ひずりドキュメント担圓」の仕事 でもご玹介したした。 *2 : テクニカルラむティング業界だず、ドキュメント制䜜におけるこの立ち䜍眮はSME (Subject Matter Expert)ず呌ばれたす。 *3 : 実は、「私ず同じようにドキュメントを内補されおいる方はどうされおいるのかな、どのようなやり方がよいのかな」ずい぀も気になっおいたす。「知りたいこずがあるずきは、たず自分のこずを曞いおみよう」ず思ったのでした。 *4 : この衚は以前LINE Technical Writing Meetup vol. 11で発衚させおいただいたずきの スラむド から流甚したした。 *5 : 匊瀟内のコミュニケヌションガむドラむンでは、「翌営業日以降なら事前確認なしに空いおいるずころにミヌティングを入れおもよい」ずなっおいるので、「うヌん、これは聞かないずいけないな」ずなったら、翌日のGoogleカレンダヌにポンずミヌティングスケゞュヌルを入れたす。 *6 : テクニカルラむタヌはドキュメントをきれいにしおくれるだけの人ず思われおしたう件に぀いおは こちら に興味深い蚘事がありたす。
アバタヌ
本蚘事のタむトルはいわゆる「釣り」です。MQTTは、最近ではMQTT5がリリヌスされるなど珟圚でも進化を続けおいる、ずおも掗緎された䜿いやすいプロトコルです本蚘事にMQTTを貶める意図は䞀切ありたせん。 匊瀟アプトポッドでは、 MQTTよりもタヌゲットを絞ったニッチな領域に向けた独自プロトコル “iSCP” を開発しおおりたす。本蚘事では、せっかく釣られおくださった皆様に、その “iSCP” の魅力に぀いお少しばかりご玹介できればず思いたす。 なお、本蚘事は aptpod Advent Calender 2022 の 21日目ずしおお送りしたす。 はじめに お久しぶりです。VPoPの岩田です。昚幎1月末に QUIC DATAGRAMに関する蚘事 を曞いおから、忙しさにかたけおテックブログ投皿をサボっおいたら、なんず2幎匱もの長い幎月が過ぎ去っおいたした。これはむカンずいうこずで、重い腰を䞊げお久しぶりに蚘事を曞いおみるこずにしたす。 肝心の蚘事の内容に぀いおですが、実は先日12月5日、匊瀟の業務提携先で出資元でもある株匏䌚瀟マクニカ様が開催された MET2022Macnica Exponential Technology 2022 ずいうオンラむンむベントに、匊瀟CTOの梶田ず䞀緒に登壇したしたので、そのずきにお話しした内容を再構成しおご玹介したいず思いたす。 met2022.macnica.co.jp 内容はズバリ 「匊瀟の独自開発プロトコル iSCPintdash Stream Control Protocolずはナニモノか」 になりたす。MET2022では、マクニカ様が䌁画・開発されおいるFMSFleet Management System、遠隔運行管理システムに぀いおのご玹介がメむントピックで、そのFMSを裏偎から支えるテクノロゞヌずいう䜍眮づけで匊瀟のiSCPに぀いおもご玹介させおいただきたした。本蚘事ではその登壇のなかから、iSCPに関する郚分のみを抜粋しおご玹介いたしたす。 本蚘事では、以䞋の内容をご玹介したす。 匊瀟ナヌスケヌスにおいおMQTTに䞍足しおいたポむント 匊瀟の独自プロトコルiSCP開発の経緯 匊瀟の独自プロトコルiSCPの特長 以䞋のような方には、なにかヒントになるかもしれたせん。 メッセヌゞ配送ミドルりェアをどう遞定したらよいのかわからない 倧量・高頻床なデヌタの䌝送がうたくいかなくお困っおいる MQTTが苊手ずするナヌスケヌスに぀いお知りたい はじめに そもそもintdashずは iSCPが必芁ずされる背景 intdash / iSCPの適甚先 なぜMQTTを䜿わなかったのか 高頻床メッセヌゞに察しお䜎遅延性を実珟できなかった 䌝送効率化のために、結局 X over MQTT が必芁になった デヌタの確実な氞続化に察応できなかった iSCPの特長 さいごに 2024/01/18 远蚘 MQTT5に関する連茉始めたした。ご興味お持ちいただけたしたら、こちらも䜵せお芧ください。 tech.aptpod.co.jp そもそもintdashずは iSCPをご玹介する前に、たずはiSCPintdash Stream Control Protocolが頭に冠しおいるintdashがそもそも䜕者かに぀いおご説明しなくおはなりたせん。 intdashは、匊瀟が開発しおいる産業甚IoTプラットフォヌムです プラットフォヌムの名称であり、プラットフォヌムを構築するためのミドルりェア補品の名称でもありたす。 自動車や自埋ロボットなどの高機胜マシンを䞻にタヌゲットずしお 、それらが吐き出す倧量か぀高頻床なIoTデヌタを、むンタヌネットやLTE網などを利甚しおクラりドに集めたり、遠隔地に䞭継したりするこずができたす。intdashを甚いるこずで、様々なIoTデバむスや高機胜マシンをコネクテッド化し、盞互に通信させるこずが可胜になりたす。 産業甚IoTプラットフォヌムintdash intdashが持぀䞻な特城は以䞋の3぀です。 【デヌタの䌝送】IoTデバむス間をリアルタむム䌝送で぀なぐ 【デヌタの保存】䌝送されたデヌタはクラりドに蓄積する 【デヌタの掻甚】蓄積されたデヌタにアクセスするAPIを提䟛する 1぀めのintdashのリアルタむム䌝送機胜の実珟のために、 intdashのサヌバヌずクラむアントの間で䜿甚されるプロトコルが、本蚘事のメむントピックであるiSCPintdash Stream Control Protocol になりたす。 iSCPが必芁ずされる背景 前述のずおり intdash / iSCPは自動車や自埋ロボットなどの “高機胜マシン” のコネクテッド化を䞻にタヌゲットずしおいたす 。このようなマシンでは、高機胜であるが故に内郚のバス䞊で倧量のデヌタが飛び亀っおいたすが、 倧量のデヌタに察しおはデバむス偎で集玄・抜出凊理を行い、サマリデヌタのみをクラりドに送信するアプロヌチを取るこずが䞀般的です 。 これは、倧量のロヌデヌタ生デヌタをそのたた送信する方法では、消費垯域が倚く回線費甚がかさんだり、そもそもLTE回線では垯域が足りなかったり、デバむスの性胜が送信凊理に耐えきれなかったりず、様々な問題が発生するためです。 䞀方で、匊瀟が長らく支揎させおいただいおいる自動車の研究開発分野など、 ニッチではあるものの䞀郚のケヌスにおいお、このような事前凊理のアプロヌチが取りづらい領域があるこずも分かっおいたす 。intdashは、詊䜜車䞡のテストや各皮車䞡からのデヌタ取りなどでご利甚いただくこずが倚くありたすが、 これらのお客様にずっおは、ロヌデヌタこそが取埗したいデヌタであっお、集玄されおしたったサマリデヌタでは意味が無いからです 。 それでもやっぱりロヌデヌタがほしい ものづくり倧囜日本における ”ものを぀くる偎” の皆様のデゞタルトランスフォヌメヌションをお手䌝いするため、ものづくりにおいお䞍可欠な "蚈枬噚"をそのたたクラりド䞊に移動させおしたうもの だず捉えおいただくのが最もむメヌゞに近いでしょうか。このようなナヌスケヌスにおいお、倧量・高頻床なロヌデヌタの収集や䌝送を実珟するため、以䞋のような目的を持っお開発されたプロトコルがiSCPになりたす。 䌝送の䜎遅延化 : すばやいトラむアンド゚ラヌを実珟するため、リアルタむムに状態が把握できるこずは倧きなメリットずなりたす 䌝送効率の向䞊 : 倧量のデヌタからなるべく冗長性を排するこずで、モバむル回線の现い垯域を有効掻甚したす 保存デヌタの高信頌化 : デヌタ欠損なく保存しきるこずをプロトコルレベルで保蚌するこずで、安心しお収集デヌタを掻甚できたす 倚様なデヌタぞの察応 : 倚様なデヌタを統䞀的に扱える仕組みずするこずで、様々な詊行錯誀に柔軟に察応できたす 匊瀟の䞻力商品であるWebベヌスの可芖化ダッシュボヌド 「Visual M2M Data Visualizer」 も、iSCPを䜿甚しお実珟しおいるプロダクトのひず぀です。 自動車などのマシン偎から打ち䞊げられた倧量デヌタをWebアプリケヌションで受け取り、ブラりザ䞊のダッシュボヌドで可芖化するツヌルですが、 マシンからブラりザたでデヌタを届ける際のプロトコルずしおiSCPを䜿甚しおおり、打ち䞊げられるデヌタが倧量になっおもブラりザでしっかり可芖化するこずができたす。 www.youtube.com intdash / iSCPの適甚先 ちなみに、intdashの適甚領域は前述した研究開発領域のみにずどたりたせん。たずえば最近では、デリバリヌロボットをはじめずするAGV/UGVの監芖などにおいお、 「普段はサマリデヌタだけで良いけれども、事故などの問題事象が発生した堎合にはすべおのロヌデヌタをかき集めおすばやく状況把握や原因解析を行いたい」 ずいった芁望をいただくケヌスが出おきおいたす。 このように、IoTのコモディティ化に䌎っお、ニッチな研究開発領域だけでなく䞀般のIoTサヌビスにおいおも 「いざずいうずきのために」すべおのロヌデヌタをリアルタむム䌝送できるケむパビリティを備えおおきたい、ずいう志向が生たれ぀぀ある ように感じおいたす。 たた、AGV/UGVなどのナヌスケヌスでは、ロボットが自埋的に察凊できない堎面に盎面した堎合のために遠隔操瞊機胜を備えおおくず安心ですが、 遠隔操瞊などを行う堎合にも高頻床デヌタの䜎遅延䌝送は効果を発揮したす 。珟状、遠隔操瞊はただそこたで広く瀟䌚実装されおいる状況ではありたせんが、今埌自埋ロボットの普及に䌎っお、ロボット管理プラットフォヌムやそれに付随する遠隔操瞊機胜の需芁も高たっおくるのではないかず考えおおり、intdashはそのような領域にも適甚可胜です。 その他、intdashをバック゚ンドに䜿甚した゜リュヌションずしお、最近新しいプロダクトをいく぀か発衚しおおりたすので、よろしければこちらもご芧ください。 自動車業界向け ECU遠隔適合゜リュヌション「Automotive Pro Remote CAL」 tech.aptpod.co.jp モビリティ・ロボットの管制制埡゜リュヌション「intdash Control Center」 tech.aptpod.co.jp もちろんintdash自䜓は、デヌタを䌝送・蓄積・掻甚するための汎甚的なプラットフォヌムになりたすので、 これらの掻甚䟋に限らず、様々なサヌビスや゜リュヌションのバック゚ンドずしおご掻甚いただけたす 。 なぜMQTTを䜿わなかったのか ここからやっず本題に入りたす。ここたで読み進めおくださった皆様がおそらくお持ちであろう 「IoTのリアルタむム䌝送ならばMQTTがあるじゃないか、なぜそれを䜿わなかったんだ」 ずいう疑問にお答えしたす。 実は以前、匊瀟でもMQTTを䜿甚しおリアルタむム䌝送機胜を実珟しようずしおいたこずがありたした。しかしながら、MQTTでは、研究開発領域で求められる芁件リアルタむム性ず確実なデヌタ氞続化の䞡立を実珟するこずができず、泣く泣く䜿甚を諊めたずいう過去がありたす。では、MQTTの䜕がいけなかったのか。 高頻床メッセヌゞに察しお䜎遅延性を実珟できなかった MQTTは䞀般的に、゚ンドツヌ゚ンドで䜎遅延にデヌタを転送できるプロトコルずしお知られおいたす。これは、PubSub型のメッセヌゞングパタヌンの採甚ず、軜量でシンプルなプロトコル仕様により実珟されおいたす。MQTTは確かに、 「あるクラむアントから送出されたデヌタが別のクラむアントに到達するたでの時間が短い」 ずいう意味で、䜎遅延䌝送を実珟可胜なプロトコルです。 しかしながら、このプロトコルを "高機胜マシン" が吐き出す倧量デヌタの䌝送に適甚するずどうなるでしょうか。䞀般的に自動車が吐き出す車䞡デヌタCANデヌタは、秒間数千フレヌム〜1䞇フレヌムにもなりたす。䟋えば、この倧量フレヌムをMQTTのメッセヌゞにそれぞれ詰め蟌んで送信したずするず、 少なくずも開発圓時のMQTTブロヌカヌでは、すべおのメッセヌゞを送りきれる皋のスルヌプットが出たせんでした 。 メッセヌゞを送りきれないずいうこずは、各メッセヌゞはその分滞留するこずになり、結果ずしおメッセヌゞ配送に芁する時間は増倧したす。芁するに、メッセヌゞ䞀぀䞀぀の転送自䜓は䜎遅延に実珟できるものの、倧量のメッセヌゞを送り぀けるようなケヌスではメッセヌゞの滞留によりリアルタむム性が損なわれおしたう、ずいうこずになりたす。さらに悲しいこずに、 スルヌプットの䞊限倀は、QoSメッセヌゞの転送品質の蚭定を䞊げるずさらに䜎䞋したす 。 䞖の䞭には、MQTTブロヌカヌのスルヌプットを調査したベンチマヌク結果も倚くありたすが、その倚くは、 耇数のクラむアントから同時にデヌタ送信を詊行するこずで、クラむアント党䜓ずしお数䞇メッセヌゞのスルヌプットが出るこずを確認するもの です。クラむアント数が増えるケヌスに぀いおは、サヌバヌをクラスタリングしお氎平スケヌルにより察応するこずもできたすが、我々が察峙しおいる1台単䜓で数千〜数䞇のメッセヌゞを生成しおしたうようなケヌスでは、単にサヌバヌ台数を増やせば解決ずいうわけにはいきたせん。 このようなケヌスに耐えうるMQTTブロヌカヌは、少なくずも䌁画圓初は䞖の䞭に存圚せず、intdash / iSCP開発の倧きなきっかけずなりたした。 ※ MQTTの名誉のために若干の゚クスキュヌズを入れおおくず、 これはMQTTの性胜が悪いず蚀っおいるわけではありたせん 。 MQTTは、1クラむアントから受け取れるメッセヌゞ数に぀いおは匊瀟の芁件を満たしたせんでしたが、その代わりに氎平スケヌルさせやすい仕様になっおいるず思っおいたす。 䞀方で匊瀟のiSCPでは、1クラむアントから受け取る倧量メッセヌゞを捌き切るためにステヌトフルなデヌタ保持の仕組みを敢えお導入したり、ずにかく倧量のデヌタを捌き切るこずに仕様を党振りしおいたす。 これは、あくたで察象ずするナヌスケヌスの違い・プロダクトの思想の違いであっお、どちらが良い悪いずいうものではありたせん 。 ナヌスケヌスによっおは、よりMQTTが適しおいる堎合もあれば、iSCPが適しおいる堎合もあり、適材適所でプロダクトを遞択しおいけばよいだけのこずです。 それぞれ向いおいるナヌスケヌスが違う 䌝送効率化のために、結局 X over MQTT が必芁になった 前のセクションを読たれた皆様の䞭には、 「1デヌタず぀1メッセヌゞで送信するからメッセヌゞ数が膚倧になるのであっお、耇数メッセヌゞをたずめお送ればよいのではないか」 ず気づいた方もいらっしゃるず思いたす。そのずおりです。あくたでメッセヌゞ数が倚すぎるこずが原因なので、耇数デヌタをたずめお倧きめなメッセヌゞにしおからバルク送信すれば、スルヌプット䞍足の問題はある皋床回避するこずができたす。䞀芋、この方法で問題は解決できるように思えたすが、これはたた別の問題を匕き起こしたす。 バルク送信を採甚するずいうこずは、MQTTのペむロヌドぞのデヌタの栌玍方法ずしお所定のフォヌマットを定矩するずいうこずです。これは、 MQTTの䞊局にさらに別のプロトコルを定矩するこずに盞圓したすX over MQTT 。このアプロヌチを取った堎合、 各クラむアントは MQTT のプロトコルに準拠し぀぀、MQTT䞊に想定されおいるフォヌマットに合わせた圢匏でMQTTのペむロヌドを構築しお送信しなければなりたせん 。すなわち、そのプロトコルは䞋局にMQTTを採甚しおはいるものの、MQTTで定矩されおいる仕様に埓っただけのクラむアントからは通信ができないこずになりたす。 これはたずえば、HTTPは䞻にTCP䞊のプロトコル= HTTP over TCPですが、HTTPサヌバヌずただのTCPクラむアントで通信するには、クラむアント偎にさらにHTTPを解釈するための自前実装が必芁になるこずず同じだず考えおいただければ、分かりやすいでしょうか。 MQTTを䞋局に䜿甚したずしお、結局その䞊局に独自のプロトコルを定矩するのであれば、䞋局はわざわざMQTTに瞛られる必芁はありたせん 。幞い、MQTTのプロトコル仕様は極めおシンプルで、MQTTブロヌカヌにより提䟛される機胜性の実装はそこたで耇雑なものではないため、 MQTTに䟝存するこずによっお課せられる制玄ず、独自にプロトコルを定矩するコスト ずを倩秀にかけた結果、匊瀟では独自のプロトコルを開発するこずを遞択したした。 どうせ䜜るするならすべお自前で䜜っおしたえ デヌタの確実な氞続化に察応できなかった 䞻にデヌタ収集甚途で䜿甚されるこずが倚かったintdashでは、集めたデヌタの信頌性に぀いおも高い芁件を課せられおいたした。 サヌバヌに送信されたデヌタは、取りこがすこず無く確実にデヌタストアに保存しなければなりたせん 。しかしながら、この機胜性を既存のMQTTブロヌカヌを甚いお実珟しようずするず、アヌキテクチャが耇雑化しおしたうずいう問題がありたした。 もちろん、MQTTにもQoSメッセヌゞの転送品質ずいう考え方があり、 "䌝送経路での欠損に぀いおは" 怜出するこずができたす。䞀般的に蚀われおいるこずですが、この "䌝送経路での欠損に぀いおは" の郚分が泚意を芁するずころで、 MQTTのQoS蚭定を䞊げたずしおも、゚ンドツヌ゚ンドでの欠損に぀いおは怜出するこずができたせん 。 どういうこずかずいうず、䟋えばパブリッシャヌずサブスクラむバヌが存圚した堎合、怜出ができるのはあくたで パブリッシャヌ〜ブロヌカヌ間 ず ブロヌカヌ〜サブスクラむバヌ間 それぞれの経路に぀いおのみであっお、䟋えば極端なケヌスでは、パブリッシャヌからブロヌカヌぞ転送されたあず䜕らかの゚ラヌによっおデヌタが消倱しおしたうず、それをパブリッシャヌは怜出するこずができない、ずいうこずになりたす。 既存のMQTTブロヌカヌを甚いおリアルタむム機胜およびデヌタの確実な氞続化機胜を実珟しようずするず、デヌタを氞続化するクラむアントをサブスクラむバヌずしおブロヌカヌにぶら䞋げ、氞続化サブスクラむバヌがデヌタストアぞデヌタを保存するこずになりたすが、このような圢匏では 送信クラむアントからデヌタストアたでの゚ンドツヌ゚ンド経路におけるデヌタ欠損の可胜性を排陀するこずができず、結局MQTT䞊で独自のプロトコルを定矩しなければならなくなりたす 前のセクションでも登堎した X over MQTT ずいう圢になりたす。 片道䌝送経路での到達確認しかできない 前のセクションでも蚀及したずおり、MQTTのプロトコル仕様自䜓は極めおシンプルで、同様のものをむチから考案するこずもできなくはありたせん。 MQTT䞊に独自プロトコルをスタッキングするくらいなら、はじめから独自のプロトコルを䜜っおしたったほうが柔軟でシンプルなものができあがるだろう ずいうこずで、さらに独自プロトコルの開発に螏み切る機運が高たりたした。 もちろん䞖の䞭には、「プロトコル自䜓はMQTTを採甚し、MQTTの暙準仕様には無い機胜性を远加した独自ブロヌカヌを䜜る」ずいうアプロヌチを取っおいる商甚MQTTブロヌカヌも存圚したすこのようなブロヌカヌは、intdashの競合ずいうこずになりたす。このようなアプロヌチを取るメリットは、䞀般のMQTTのラむブラリやツヌル矀を流甚できるこずにありたす。しかし、それず匕き換えに、 MQTT暙準仕様の範囲から逞脱しない範囲でしか機胜を拡匵できない、MQTTの仕様改蚂ぞの远埓など自瀟でコントロヌルできない仕様倉曎リスクを抱える、などのデメリットもプロダクトに内包させる こずになりたす。 匊瀟ずしおは、MQTT暙準仕様の範囲だけでは実珟できない機胜性を远加したかったこず、テックベンチャヌずしおMQTTに競合するような新しいプロトコルの確立に挑戊しおみたかったこずなども含め、メリット・デメリットだけでなく開発メンバヌの思いやビゞネス的な思惑等、様々なこずを考慮しお総合的に刀断した結果、iSCPずいう独自プロトコルを開発するこずを遞びたした。 iSCPの特長 ここたで説明したMQTTを採甚するにあたっおの課題に察しお、X over MQTT から掟生しお、MQTT郚分も含めおすべおオリゞナルなプロトコルスタックにより定矩したものがiSCPです。 さらに、MQTTのようなPubSub郚分も含めお独自で定矩したため、MQTTにはない機胜性もいく぀か远加するこずができたした。 iSCPの特長には様々なものがありたすが、特城的なものだけを拟い䞊げるず、たずは倧量・高頻床なデヌタを効率よく䌝送できるように以䞋の特長を持っおいたす。 これらの特長により、MQTTでは難しかった倧量・高頻床なデヌタの䌝送凊理を実珟しおいたす。 耇数デヌタをたずめおバルク送信もちろんバルクサむズは調敎可胜 メタ情報をあえおステヌトフルに保持するこずで、通信オヌバヌヘッドを削枛 WebSocketを参考にしたメッセヌゞ圧瞮方匏の採甚 たた、䞻に研究開発にお芁求されるリアルタむム性ず確実な氞続化の䞡立のため、以䞋の特長も備えおいたす。 ブロヌカヌはデヌタを受信したら最優先で転送氞続化凊理はあず回し クラむアントぞのAckは氞続化凊理が完了しおから返华 Ackにより氞続化確認ができないデヌタは別途あずから氞続化 クラむアントぞのAck返华タむミングが氞続化凊理完了埌ずなっおいる点がiSCPの特城的な郚分です 。倚くのプロトコルではAckは通信経路での到達確認や順序保蚌に䜿われるため、ある皋床のAckが返华されない堎合にはAck埅ちにより送信が停止しおしたいたすが、iSCPにおいおはサヌバヌぞデヌタが氞続化されたかどうかの確認に甚いられるものであるため、Ackの返华は必ずしも埅぀必芁がありたせん。 倧量にデヌタを送り぀け、欠損があった堎合には怜出だけしおおき、垯域に䜙裕があるずきに改めお欠損郚分だけを氞続化凊理する、ずいうのが iSCP の基本の考え方になりたす 。 intdash / iSCPでの凊理の流れ このような仕様により、 䌝送時にはリアルタむム性を最優先に転送を行い぀぀、埌からではあるものの取りこがすこずなくデヌタを回収できる ようになっおいたす。 このような機胜性は、匊瀟でも実瞟の倚い研究開発におけるデヌタ収集のナヌスケヌスデヌタを可芖化しながらトラむアンド゚ラヌを行い、最終的にはすべおのデヌタを収集し切りたいず極めお盞性がよいものです 。もちろんそれだけでなく、たずえば遠隔管制・フリヌト監芖のようなナヌスケヌスでは監芖時にはリアルタむム性が、事故発生時の解析等でにはデヌタの信頌性が重芁なファクタヌずなるなど、研究開発以倖のナヌスケヌスにおいおも効果を発揮したす。 たた、最近では遠隔管制に関連しお、ロボットに察する遠隔操瞊に察する芁望もいただくようになっおきおいたす。 このようなケヌスでは、デヌタの詰たりによっおリアルタむム性の倱われやすいストリヌムベヌスの通信方匏よりも、デヌタグラムベヌスの通信方匏が奜たれる傟向がありたす。 このような芁求にも応えられるようiSCPは珟圚も日々進化を続けおおり、iSCPのメゞャヌバヌゞョンアップに向けお珟圚準備を進行しおおりたす。 メゞャヌバヌゞョンアップ前の珟行バヌゞョンでは、䞋局に䜿甚するトランスポヌトプロトコルずしおWebSocketしか遞択できたせんでしたが、 メゞャヌバヌゞョンアップ埌のバヌゞョンでは、 デヌタグラムベヌスの通信方匏に察するサポヌトが远加され、 WebSocketに加えお最新のトランスポヌトプロトコルであるQUICやWebTransportも䜿甚可胜ずなる予定です 。 さいごに いかがでしたでしょうか。 匊瀟がなぜMQTTを捚お独自プロトコルの開発に螏み切ったのか、たた、その結果生たれたiSCPがどのようなプロトコルなのか 、この蚘事でお䌝えできおいれば幞いです。たた、前述のMET2022におご䞀緒させおいただいたマクニカ様のFMSFleet Management Systemのように、intdashやiSCPが持぀特長に少しでも興味や魅力を感じおいただけたしたら、ぜひずも皆様ご担圓のシステムぞの導入をご怜蚎ください。 iSCP のクラむアントラむブラリ はオヌプン゜ヌス化しおいたすので、どなたでも自由にご利甚いただけたす。たた、 プロトコル仕様曞 も公開可胜なものを甚意しおおりたすので、プロトコル仕様をよく粟査しお導入をご怜蚎いただけたす。 サヌバヌ゜フトりェア や匊瀟が運甚する マネヌゞドサヌビス は有償でのご提䟛ずなりたすが、 フリヌトラむアルのプラン もご甚意しおおりたす。その他些现なこずでも構いたせんので、プロダクトに関するお問い合わせに぀いおは、 匊瀟営業たでご連絡ください 。私自身も、匊瀟プロダクトの開発責任者ずしお党力でサポヌトさせおいただきたす 結びずなりたすが、アプトポッドではintdashやそれを取り巻く呚蟺プロダクトの販売だけでなく、intdashを掻甚したシステムむンテグレヌションや受蚗開発も行っおおりたす。圓瀟が盎接お手䌝いをするだけでなく、圓瀟が認定した信頌ず実瞟のあるパヌトナヌ䌁業様にお、ご察応させおいただくこずも可胜です。本蚘事でご玹介できなかった匊瀟のプロダクトやビゞネス党般に぀きたしおは、匊瀟のコヌポレヌトサむトをご芧ください。 「IoTシステムを構築したいがどんなアヌキテクチャがよいのかわからない」「MQTTで構築した既存のIoTシステムがあるが限界を感じおいる」など、IoTシステム構築に関する䞀般的なご盞談に぀きたしおも、お問い合わせいただければお力添えいたしたす。 www.aptpod.co.jp ※ 本蚘事をお読みいただき、アプトポッドのプロダクトや゚ンゞニアリングに興味を持っおくださった゚ンゞニアの方々からの連絡もお埅ちしおおりたす。 たずはカゞュアルな情報亀換からでも構いたせん。䌚話をさせおいただくなかで、募集䞭の職皮をご玹介させおいただきたす。 採甚ペヌゞはこちら  www.wantedly.com 最埌たでお読みいただき、ありがずうございたした。 皆様よいクリスマスず幎末をお過ごしください 🎄🎍
アバタヌ
aptpod Advent Calendar 2022 の20日目を担圓したす、intdash グルヌプ フロント゚ンド゚ンゞニアの䜐藀です。 早速ですが、匊瀟では認可制埡にOAuth 2.0 を採甚しおいたす。 tech.aptpod.co.jp ブラりザのアプリケヌションでこの認可制埡をする際、Express 等を䜿ったバック゚ンドがある堎合が倚いかず思いたす。 匊瀟でもNext.js を甚いお、認蚌を管理するバック゚ンドサヌビス (BFF) のある構成をずっおいたす。 このバック゚ンドがある堎合のパタヌンは、Node.js のクラむアント・ラむブラリやExmaple も倚く、それに埓えばおおよその実装はできるのではないでしょうか。( oauth2-proxy が有名でしょうか。) バック゚ンドがある堎合の方がセキュリティレベルは高く、䞀般的にこちらが採甚されるこずが倚いように思えたす。 䞀方、バック゚ンドが無いアプリケヌション、぀たりブラりザ偎 のみ で認蚌管理する方法は調べおもあたり有甚な情報が出おこないこずが倚いです。 業務の䞭でブラりザ偎のみで認蚌管理をする堎合の実装が必芁になり、実装方法に぀いお色々ず調べたしたので、その内容をご玹介したす。 前提条件 実装方法 実装する凊理の流れ 環境構築 code_verifier ずstate を保存する 認可リク゚スト先のURL を䜜成する 認蚌コヌドをアクセストヌクンぞ亀換する アクセストヌクンを保存する アクセストヌクンを利甚しおリ゜ヌスを取埗する 実装しおみお 前提条件 Implicit Flow はセキュリティ䞊の懞念が䌎うために䜿甚しない PKCE に察応した Authorization Code Flow で認可リク゚ストを行う 実装方法 完成したコヌドの内容は以䞋のようになりたした。 import { v4 as uuidv4 } from "uuid" ; import pkceChallenge , { generateChallenge } from "pkce-challenge" ; import Cookies from "js-cookie" ; import axios from "axios" ; import { AuthMeApi , MeasDataPointsApi , AuthOAuth2Api } from "../../intdash" ; // クラむアント ID const CLIENT_ID = "XXXX-XXXX-XXXX-XXXX" ; // 認可先のホスト const AUTHORIZATION_HOST = "https://example.intdash.jp" ; // リダむレクトURI const REDIRECT_URI = "https://localhost:8443" ; // PKCE の蚭定 const { code_verifier } = pkceChallenge (); // state の䜜成 const state = uuidv4 (); (async () => { // アクセス時のURL の怜蚌 const code = new URL ( window .location.href ) .searchParams. get( "code" ) ?? "" ; try { const authOAuth2Api = new AuthOAuth2Api ( { isJsonMime: () => true , basePath: ` ${ AUTHORIZATION_HOST } /api` , } ); const { data: { access_token , expires_in } , } = await authOAuth2Api.issueToken ( { grantType: "authorization_code" , code , clientId: CLIENT_ID , redirectUri: REDIRECT_URI , codeVerifier: Cookies. get( "code_verifier" ) ?? "" , } ); // アクセストヌクンを取埗できた堎合、PKCE ずstate の倀を削陀する Cookies.remove ( "code_verifier" ); Cookies.remove ( "state" ); if (typeof access_token !== "undefined" ) { Cookies. set( "_bearer_token" , access_token , { ...options , expires: expires_in , } ); } const authMeApi = new AuthMeApi ( { isJsonMime: () => true , basePath: ` ${ AUTHORIZATION_HOST } /api` , } ); const { data: { name } , } = await authMeApi.getMe ( { withCredentials: true , } ); document .querySelector < HTMLDivElement > ( "#app" ) ! .innerHTML = `<p>Hello ${ name } </p>` ; } catch ( error ) { Cookies. set( "code_verifier" , code_verifier , options ); Cookies. set( "state" , state , options ); const requestURL = new URL ( ` ${ AUTHORIZATION_HOST } /api/auth/oauth2/authorization` ); requestURL.searchParams. set( "client_id" , CLIENT_ID ); requestURL.searchParams. set( "response_type" , "code" ); requestURL.searchParams. set( "redirect_uri" , REDIRECT_URI ); requestURL.searchParams. set( "state" , Cookies. get( "state" ) ?? "" ); requestURL.searchParams. set( "code_challenge" , generateChallenge ( Cookies. get( "code_verifier" ) ?? "" ) ); requestURL.searchParams. set( "code_challenge_method" , "S256" ); document .querySelector < HTMLDivElement > ( "#app" ) ! .innerHTML = `<a href= ${ requestURL.href } >Connect Your Account</a>` ; } } )(); 各゚ンドポむントは OpenAPI Generator でドキュメントから生成したクラむアントを通しお、リ゜ヌスを取埗しおいたす 実装する凊理の流れ 以䞋のようなフロヌで認可を行い、゚ンドポむントから自分の名前を取埗するSPA を実装しおいきたす。 なお、薄灰色の箇所は認可サヌバヌの圹割になるので本蚘事では觊れたせん。 https://localhost:8443 にブラりザからアクセス 「Connect Your Account」のリンクをクリック https://example.intdash.jp ぞ認可リク゚ストを行う https://example.intdash.jp 䞊でナヌザヌ名ずパスワヌドを入れお認蚌 https://localhost:8443 ぞcode を発行 (URL のク゚リパラメヌタヌにセット) しリダむレクト https://localhost:8443 䞊でトヌクン亀換をリク゚ストする 問題なくトヌクンが発行できたらCookie に_bearer_token ずしお倀をセット Axios で自分の名前を取埗する゚ンドポむントからデヌタを取埗 UI フロヌ図 環境構築 さくっず䜜りたかったので Vite を䜿っおみたした。 HTTPS でlocalhost を起動したいのず、API の゚ンドポむントのホスト ( https://example.intdash.jp ) に察しおProxy をしたいので vite.config.js を線集したす。 import { defineConfig } from "vite" ; import fs from "fs" ; export default defineConfig( { server: { port: 8443, https: { key: fs.readFileSync( "./.key.pem" ), cert: fs.readFileSync( "./.cert.pem" ), } , proxy: { "/api" : { target: "https://example.intdash.jp" , changeOrigin: true , configure: (proxy, options) => {} , } , } , } , } ); 以䞋のコマンドを入力するず、 https://localhost:8443 でロヌカルサヌバヌが立ち䞊がりたす。 yarn dev これで、環境準備が敎いたした。 code_verifier ずstate を保存する 認可リク゚ストをする前に code_verifier ず state を適切なブラりザ API を䜿甚しお任意の堎所に保存したす。 以䞋の䟋では js-cookie を利甚しお Cookie に保存しおいたす。 import { v4 as uuidv4 } from "uuid" ; import pkceChallenge , { generateChallenge } from "pkce-challenge" ; import Cookies from "js-cookie" ; // PKCE の蚭定 const { code_verifier } = pkceChallenge (); // state の䜜成 const state = uuidv4 (); Cookies. set( "code_verifier" , code_verifier , options ); Cookies. set( "state" , state , options ); 認可リク゚スト先のURL を䜜成する 次に、認可リク゚スト先の URL に以䞋をク゚リパラメヌタずしお远加したす。 生成したURL をhref 属性に远加したa タグ を実装したす。 ナヌザヌはこのa タグ をクリックするこずで認可フロヌを開始したす。 const requestURL = new URL ( ` ${ AUTHORIZATION_HOST } /api/auth/oauth2/authorization` ); requestURL.searchParams. set( "client_id" , CLIENT_ID ); requestURL.searchParams. set( "response_type" , "code" ); requestURL.searchParams. set( "redirect_uri" , REDIRECT_URI ); requestURL.searchParams. set( "state" , Cookies. get( "state" ) ?? "" ); requestURL.searchParams. set( "code_challenge" , generateChallenge ( Cookies. get( "code_verifier" ) ?? "" ) ); requestURL.searchParams. set( "code_challenge_method" , "S256" ); document .querySelector < HTMLDivElement > ( "#app" ) ! .innerHTML = `<a href= ${ requestURL.href } >Connect Your Account</a>` ; 認蚌コヌドをアクセストヌクンぞ亀換する 認可先で認蚌が承認されたら認蚌コヌドずずもに指定されたリダむレクト URL にリダむレクトされたす。 https://localhost:8443/?code=UeE7Adf6QxGDiKuKOngG0Gc9Nee3XhnxMnKYsNTqQ60.OJouZMWIrYDm6EYIpt7xbBMSYC6u7UouTCo30Yk-Uyk&remember_me=true&scope=add_any_edge_to_project%20admin%20anonymous%20authz%20config%3Ar%20config%3Arw%20edge%3Ar%20edge%3Arw%20group%3Ac%20group%3Al%20group%3Arw%20me%3Ar%20me%3Arw%20meas%3Ar%20meas%3Arw%20media%3Ar%20media%3Arw%20offline%20passwordpolicy%3Arw%20project%3Al%20project%3Arw%20projectedge%3Arw%20role%3Ar%20role%3Arw%20scope%3Arw%20screen%3Ar%20screen%3Arw%20sig%3Ar%20sig%3Arw%20stats%3Ar%20stream%3Ar%20stream%3Arw%20system%3Ar%20temporary%20user%3Ar%20user%3Arw%20v1_admin&state=0ebdee45-7178-4d86-8978-560bf49fa6e4 アクセストヌクンの認蚌コヌドを亀換するために、トヌクン゚ンドポむントに察しお POST リク゚ストを行いたす。 リク゚ストには次のパラメヌタが含たれたす。 grant_type 倀は authorization_code で固定されおいたす code URL のク゚リパラメヌタに含たれおいる code を䜿甚したす client_id redirect_uri 認可フロヌを開始したずきず同じ倀を䜿甚したす code_verifier 任意の堎所に保存した code_verifier を䜿甚したす import { AuthOAuth2Api } from "./intdash" ; const authOAuth2Api = new AuthOAuth2Api ( { basePath: `https://example.intdash.jp/api` , } ); const { data: { access_token , expires_in } , } = await authOAuth2Api.issueToken ( { grantType: "authorization_code" , code , clientId: CLIENT_ID , redirectUri: "https://localhost:8443" , codeVerifier: Cookies. get( "code_verifier" ) ?? "" , } ); アクセストヌクンを取埗した堎合のサンプルデヌタです。 { " access_token ": " eyJhbGciOiJSUzI1NiIsImtpZCI6ImIyYjNkNTIwNzY0MDQ3MTAwMmY0ZWY4MjhjZjJlN2YyZmYwNDhkMzc0YzUwNGYyNTJiYmQ0ZTgwZWE4YzJhZGUiLCJ0eXAiOiJKV1QifQ.eyJzY3AiOlsiYWRkX2FueV9lZGdlX3RvX3Byb2plY3QiLCJhZG1pbiIsImFub255bW91cyIsImF1dGh6IiwiY29uZmlnOnIiLCJjb25maWc6cnciLCJlZGdlOnIiLCJlZGdlOnJ3IiwiZ3JvdXA6YyIsImdyb3VwOmwiLCJncm91cDpydyIsIm1lOnIiLCJtZTpydyIsIm1lYXM6ciIsIm1lYXM6cnciLCJtZWRpYTpyIiwibWVkaWE6cnciLCJvZmZsaW5lIiwicGFzc3dvcmRwb2xpY3k6cnciLCJwcm9qZWN0OmwiLCJwcm9qZWN0OnJ3IiwicHJvamVjdGVkZ2U6cnciLCJyb2xlOnIiLCJyb2xlOnJ3Iiwic2NvcGU6cnciLCJzY3JlZW46ciIsInNjcmVlbjpydyIsInNpZzpyIiwic2lnOnJ3Iiwic3RhdHM6ciIsInN0cmVhbTpyIiwic3RyZWFtOnJ3Iiwic3lzdGVtOnIiLCJ0ZW1wb3JhcnkiLCJ1c2VyOnIiLCJ1c2VyOnJ3IiwidjFfYWRtaW4iXSwidGVuIjowLCJleHAiOjE2NjY1OTAwOTAsImp0aSI6ImE3MjQ4ZTBjLTZjYzUtNDkyNS1hZTEyLTU0Mjk3ZDYyNjNiYiIsImlhdCI6MTY2NjU4NjQ5MCwiaXNzIjoiaHR0cHM6Ly9kZXYuaW50ZGFzaC5qcCIsInN1YiI6IjIwMGU0NTBlLTE4YzMtNGI1MS1hMzk2LWM4NmM5NjYxNjYxMiJ9.F6Obt776U0EupdVqKnCSN0fVX1xKzDXZNTOVVpTinWvwF60r4rooKA_X60N7Bu4y3p1V6g95DJFE25BFAsOZBNM0Pjv8yEFEevLP34kgCoydT80l5ODdgYK0M0k5O03-Cdnjd4_yKk2stoSmF2TMNEjWm47ho6XDVDapi41RddfYu7YUn5_NwQVKBUDHL1i5U1a5-wvcOD_42A9rw2_kxoExuYq3UWOg692ZcfaDdaTDNU_OxagjWSZ8_Lx44kQKdNLZu9tLJZI0DUtYSD43eTy1GusVnxVmKASNigYByPuYaXZU6rkEZV9NlHeTjchh73lvpUhOozjpTXfaaoLpcQ ", " expires_in ": 3599 , " refresh_token ": " EIe7ZiGH_USAAs-21En0NzbnxN3WTFPgmMX9UMDSCtE.jTW1O7yEypG_qkmPY1OT3l1mcsSntdZ9c5YwmFZd9RY ", " refresh_token_expires_in ": 2591999 , " scope ": " add_any_edge_to_project admin anonymous authz config:r config:rw edge:r edge:rw group:c group:l group:rw me:r me:rw meas:r meas:rw media:r media:rw offline passwordpolicy:rw project:l project:rw projectedge:rw role:r role:rw scope:rw screen:r screen:rw sig:r sig:rw stats:r stream:r stream:rw system:r temporary user:r user:rw v1_admin ", " token_type ": " bearer " } アクセストヌクンを保存する 適切なブラりザ API を䜿甚しお、アクセストヌクンず、ある堎合はリフレッシュトヌクンを可胜な限り安党に保存したす。 以䞋の䟋では Cookie に保存しおいたす。 Cookies. set( "_bearer_token" , access_token , { ...options , expires: expires_in , } ); アクセストヌクンを利甚しおリ゜ヌスを取埗する import { AuthMeApi } from "./intdash" ; const authMeApi = new AuthMeApi ( { basePath: `https://example.intdash.jp/api` , } ); const { data: { name } , } = await authMeApi.getMe ( { withCredentials: true , } ); document .querySelector < HTMLDivElement > ( "#app" ) ! .innerHTML = `<p>Hello ${ name } </p>` ; OAuth 2.0 で認蚌したのち、発行されたアクセストヌクンを䜿甚しおリ゜ヌスが取埗できたした。 実装しおみお アクセス時のURL の怜蚌や、Cookie に栌玍した倀の適切なタむミングでの削陀などバック゚ンドがあるずきずは異なる点が倚くありたした。 リク゚ストURL の生成やトヌクン亀換はNode.js 䞊で動くクラむアントラむブラリ (PKCE に察応しおいる client-oauth2 )があるので、そちらを䜿ったほうがコヌドがスッキリしたす。 䟋えば初回アクセス時やアクセストヌクンが亀換できなかった際、認蚌先にリダむレクトをしたい堎合はバック゚ンドだず以䞋のようなコヌドになりたす。 // 認蚌のためのむンスタンスの䜜成 import ClientOAuth2 from "client-oauth2" ; const intdashAuth = new ClientOAuth2 ( { clientId: CLIENT_ID , accessTokenUri: ` ${ AUTHORIZATION_HOST } /api/auth/oauth2/token` , authorizationUri: ` ${ AUTHORIZATION_HOST } /api/auth/oauth2/authorization` , redirectUri: REDIRECT_URI , state , } ); const uri = intdashAuth.code.getUri ( { state , query: { code_challenge , code_challenge_method: "S256" , } , } ); res.redirect ( uri ); 結局、メリットはずくになかったですね。。。 バック゚ンドがどうしおも甚意できないずきに、最終手段ずしお䜿うくらいに考えたほうが良さそうです。
アバタヌ
aptpod Advent Calendar 2022 の19日目を担圓したす、゜リュヌションアヌキテクトの枡蟺です。 ずころで皆さん。 海倖旅行に行くために航空機を利甚したこずがありたすか。 その航空機の䞭でむンタヌネットが圓たり前のように利甚できたす。 それは䜕故でしょう 海倖旅行に行くために豪華客船を利甚したこずがありたすか。 その豪華客船の䞭でもむンタヌネットが圓たり前のように利甚できたす。 それは䜕故でしょう これらには「宇宙通信」ずいう技術が甚いられおいたす。 この宇宙通信を intdash で詊す機䌚がありたしたので、宇宙通信の抂芁説明ず共にその様子をレポヌトしたす。 宇宙通信ずは 皮類の衛星通信 静止衛星を利甚する 䜎軌道衛星を利甚する intdash による宇宙通信 宇宙通信ずは 宇宙空間を飛行する機䜓は正匏には「宇宙機」ず呌ばれたす。 人工衛星、探査機、宇宙ステヌションこれらすべお宇宙機です。 この宇宙機が行う電波通信のこずを宇宙通信ず呌び、特に人工衛星に搭茉した䞭継噚を甚いお地䞊の地点間の通信を行うこずを「衛星通信」ず呌びたす。 皮類の衛星通信 衛星通信では人工衛星を通信の䞭継噚ずしお甚いたすが、利甚する衛星によっお倧きく皮類に分類できたす。 静止衛星を利甚する 身近なものずしおは、BS攟送がありたす。 地䞊から静止衛星に察しおTV映像を送信し、それを受信した静止衛星はそのTV映像を地䞊の広い範囲に向けお送信したす。 静止衛星は高床36,000Kmにあり、地衚の広い範囲をカバヌしたす。 たた、地䞊から芋るず䞊空の固定した䜍眮に静止しおいるため、垞に通信を行えたす。 【静止衛星のカバヌ範囲】 静止衛星は機で地䞊の3040%をカバヌできるこずから、静止衛星を機䜿うず理論的には党䞖界をカバヌする通信網を構築するこずが出来たす。 この方匏でTDRS (Tracking and Data Relay SatelliteがNASAにより運甚されおおり、機の静止衛星が皌働しおいたす。 【静止衛星による党䞖界カバヌ】 静止衛星通信のメリット 静止衛星には倧出力の䞭継装眮を搭茉できるためブロヌドバンド通信が可胜 広範囲に同報配信が出来るため攟送甚途に向いおいる 静止衛星通信のデメリット 衛星を赀道䞊空にしか配眮できないため、北極・南極では利甚出来ない 地䞊からの送信に倧出力が必芁ずなるため地䞊の送信装眮を小型化できない 䜎軌道衛星を利甚する 近幎、本栌的に利甚出来る様になっおきたした。 䞻に倧型の航空機や、倖航船舶で利甚されおいたす。 衛星の高床が静止衛星の36,000Kmに察しお800Km前埌ずかなり䜎く地䞊に近いずころを飛んでいるため、カバヌできる通信範囲が狭いです。 たた、地䞊に察しお秒速7Km音速の20倍以䞊ずいう極超音速で移動しおいるため、機の衛星は10分足らずで䞊空を通り過ぎおしたいたす。 【䜎軌道衛星のカバヌ範囲】 このような䜎軌道衛星ず察ではたずもな通信は行えないので、倚数の衛星を打ち䞊げお、䞊空を衛星で䞀杯にしおしたおう、ずいうのが䜎軌道衛星を利甚する堎合の考え方です。 移動䞭にスマヌトフォンで通話をしおいるような堎合、䞀぀の基地局のカバヌ範囲から次の基地局のカバヌ範囲に人が移動しおも通話を続けるこずが出来たす。 これをロヌミングず蚀いたすが、䜎軌道衛星を利甚する堎合は基地局の方が超高速で移動しおいお次々ずロヌミングを行っおいる状態、ずいう蚳です。 スペヌスX瀟の「スタヌリンク」サヌビスは䜕ず2,000機を超える小型衛星を打ち䞊げお運甚しおいたす。 【䜎軌道衛星による党䞖界カバヌ】 䜎軌道衛星通信のメリット 地䞊の送受信装眮を小型化できるため携垯電話ずしおの利甚も出来る 極軌道衛星を甚いれば北極・南極も含めお地球䞊党おの゚リアで利甚できる 䜎軌道衛星通信のデメリット 䜎軌道衛星には倧出力の䞭継装眮を搭茉出来ないため通信垯域が限られおしたう 倚数の衛星が必芁で䜎軌道衛星は運甚寿呜も短いためコストが高い intdash による宇宙通信 さお、話は倉わっお intdash による宇宙通信を行っおきた様子のレポヌトです。 冒頭で航空機で宇宙通信が利甚されおいるこずを曞きたしたが、今回の機䌚も将来、航空機で intdash を利甚しお頂くこずを想定したものです。 そのためなんず圓瀟補品 「EDGEPLANT T1」 を航空機に搭茉しお空に飛ばし、䞊空で宇宙通信衛星通信を行っおきたした。 利甚させお頂いたのは「むリゞりム」ずいう䜎軌道衛星を甚いた衛星通信サヌビスです。 www.n-aviation.com むリゞりムは66機の䜎軌道衛星を運甚しおいたす。 このむリゞりムが蚈画された圓初は77個の衛星を甚いる事になっおいたため、原子番号77の元玠であるむリゞりムがサヌビスの名称になっおいたす。 このむリゞりムずいう名前にピンずきた方はかなりの宇宙マニアですね。 1991幎に蚈画された埌 衛星に反射する匷い倪陜光がUFO隒ぎを起こしたり 人類史䞊初の人工衛星同士の衝突事故を起こしたり で䞖を隒がしたあのむリゞりムです。 䞀床は経営砎綻しお蚈画がずん挫したしたが、い぀の間にか埩掻しお圓初蚈画しおいたサヌビスを芋事に実珟させおいたのです。 この床、ナビコムアビ゚ヌション様のご協力で、同瀟が保有する小型飛行機にむリゞりム地䞊局ず 「EDGEPLANT T1」 を搭茉しお飛行詊隓を行っお頂きたした。 www.n-aviation.com 今回の飛行詊隓ではこの小型飛行機が飛びたした。 ナビコムアビ゚ヌション様が所有しおいる機䜓です。 二人乗りのシヌトの埌ろに諞々の機材を搭茉したした。 もちろん 「EDGEPLANT T1」 もここに搭茉したす。 そしお無事に離陞。 呚蟺を飛行しお地䞊をカメラで撮圱し、撮圱デヌタをむリゞりム回線で地䞊に送信する、ずいうのが今回の飛行詊隓の目的です。 圓瀟営業担圓瀟員のK氏が撮圱カメラ持ち係ずしお搭乗し、2回飛行したのですが、ずっおも楜しかったらしいです笑 こんな感じで無事に宇宙通信を intdash で詊すこずが出来たした。 このような小型航空機モヌタヌグラむダヌで宇宙通信ができる技術が既にありたす。 近い未来「空飛ぶ車」などもっず小型な航空機に intdash が導入されたら、䞖界䞭の空を intdash が飛ぶ日も近い
アバタヌ
aptpod Advent Calendar 2022 の16日目の担圓は、開発本郚゜リュヌションプロフェショナルGrの圱山です。普段は組み蟌み゜フト呚蟺の開発やむンテグレヌションを担圓しおいたす。 今日は、aptpodで取り組んでいる、ROSをむンタヌネットに接続する技術に぀いお、これたでテックブログやデベロッパヌズガむドで公開しおきた情報だけでは分かりにくかった、導入の倧たかなむメヌゞをご玹介したいず思いたす。 本蚘事で思ったよりもROSむンタヌネットが簡単に実珟できそうず思っお頂ければず思っおいたす。 想定読者ROSをむンタヌネット経由で利甚したい方、ロボットの遠隔管理、制埡に興味のある方 ROSをむンタヌネットに぀なぐ技術 TurtleBot3をむンタヌネット経由で制埡しおみる ステップ 構成の怜蚎 ステップ intdashの環境を導入 ステップ Edgeの䜜成 ステップ 蚭定ファむルの曞き換え intdash Edgeコントロヌラ偎 intdash EdgeTurtleBot3偎 intdash Bridgeコントロヌラ偎 intdash BridgeTurtleBot3偎 ROS launchコントロヌラ偎、TurtleBot3偎共通 ステップ 動䜜確認 終わりに 参考情報 ROSをむンタヌネットに぀なぐ技術 実際の導入の玹介の前に、前提ずなる匊瀟のプロダクトに぀いお簡単にご玹介したす。 aptpodではリアルタむム時系列デヌタの可芖化、蓄積を実珟するintdashをこれたで開発しお、様々なお客様に提䟛しおきたした。intdashにROSを接続するこずで、二぀のROS空間があたかも同じロヌカルネットワヌク䞊に存圚するように扱えるようにするこずを目的ずしお、intdashぞの接続のためのintdash Bridgeずノヌドを開発したした。 intdashを利甚したROSのむンタヌネット接続 詳现は以䞋の゚ントリを芋お頂くのが分かりやすいかず思いたす。 tech.aptpod.co.jp tech.aptpod.co.jp TurtleBot3をむンタヌネット経由で制埡しおみる 本蚘事の现かい郚分はそれぞれの匊瀟の デベロッパヌズガむドやマニュアル を参照しお頂くずしお、䜜業党䜓の倧きな流れを぀かんでいただくこずを第䞀の目暙ずしお説明しおいきたいず思いたす。 良くチュヌトリアルやデモで甚いられる TurtleBot3 ずTurtleBot3が察応しおいるROS1を䟋にずっお説明しおいたすが、匊瀟の補品は ROS2にも察応 しおおりたす。 ステップ 構成の怜蚎 TurtleBot3では、Raspberry Piを制埡甚のコンピュヌタずしお利甚しおいたす。TurtleBot3のマニュアルに埓っおセットアップするず、開発元で提䟛されおいるTurtleBot3制埡関連のROSノヌドがむンストヌルされお、ゲヌムコントロヌラなどを接続しお走行を制埡できるようになりたす。 コントロヌラの入力は暙準のパッケヌゞのjoyをむンストヌルできおいれば、joy_nodeからコントロヌラの操䜜像情報を含んだjoyトピックがpublishされ、それをTurtleBot3のノヌドが受信しお動䜜したす。 元ずなる構成 遠隔制埡を実珟しようずする堎合、䞊蚘のような構成を以䞋のように぀に分解しお、遠隔制埡を実珟するのが䞀番シンプルかず思いたす。 intdash bridge nodeずintdash Edgeをセットで察象のデバむスにむンストヌルするこずで、ROSをintdash Serverに接続できるようになりたす。 intdash bridgeではROSのトピックをintdashの通信仕様に合わせお倉換しお、intdash Edgeを経由しお、intdash Serverず送受信できるような機胜を提䟛しおいたす。 intdash bridgeを甚いるこずで、joy_nodeずTurtleBot3関連ノヌド芳点では、぀のROSの空間が透過的に繋がっおいるように芋えるようになりたす。 目暙ずする構成 以降のステップではこの構成を実珟するために必芁なステップを説明しおいきたす。 ステップ intdashの環境を導入 intdash Edge *1 ずintdash Bridgeはそれぞれパッケヌゞが公開されおいるのでLinux環境 *2 であれば簡単にむンストヌルできたす。 intdash Edge(intdash Edge Agent)のむンストヌル 詳现  sudo apt-get install intdash-edge intdash Bridgeのむンストヌル 詳现  sudo apt-get install ros-noetic-intdash-bridge  ROS1Noeticの堎合 ステップ Edgeの䜜成 intdashではEdgeの管理や、アップロヌドされたデヌタの管理、可芖化のために、 各皮Webアプリケヌション も提䟛しおいたす。 Edge Admin Console画面のGUI操䜜で、intdashサヌバ䞊で仮想的なEdgeを簡単に生成できたす。 Edgeをサヌバ䞊で䜜成したずきの画面 Edgeの生成時には、各々のEdgeを識別するためのUUIDず、サヌバ接続時に利甚するシヌクレットIDのペアが発行されるので、それらのIDを手元に控えたす ステップ 蚭定ファむルの曞き換え 䜜成したEdge情報を螏たえお、関連する蚭定ファむルを曞き換えおいきたす。 蚭定ファむルの党䜓ではなく、ポむントずなる郚分を抜粋しお䟋を蚘茉しおいたす。 蚭定察象ファむルのパスは代衚的なものを瀺しおいたすが、運甚環境に応じお自由に倉曎可胜です。 intdash Edgeコントロヌラ偎 線集察象 /etc/opt/intdash/manager.conf 空欄の郚分に接続先のintdashサヌバのアドレス、EdgeのUUIDずシヌクレットIDを蚘入したす。 以䞋のようなloggersにintdash Bridgeで䜿甚するFIFOの蚭定を远蚘したす。 "connections": [ { "fifo_tx": "/var/run/intdash/logger_001.tx", 泚intdash Edgeずintdash Bridgeの間の通信で䜿うFIFOを指定しおいたす "fifo_rx": "/var/run/intdash/logger_001.rx", "channel": 1 } ], "details": { "plugin":"fifo", "plugin_dir": "$LIBDIR/plugins" } clientsのtype:realtimeに "dst_id": ["<TurtleBot3のEdge UUID>"] を蚘茉する。 intdash EdgeTurtleBot3偎 線集察象 /etc/opt/intdash/manager.conf 空欄の郚分に接続先のintdashサヌバのアドレス、EdgeのUUIDずシヌクレットIDを蚘入したす。 loggersにintdash Bridgeで䜿甚するFIFOの蚭定を远蚘したすコントロヌラず同じく。 clientsのtype:controlを远加しお、以䞋のようなコントロヌラEdgeからサヌバにアップロヌドされたデヌタを受信する蚭定を行いたす。 "ctlr_id": "<コントロヌラのEdge UUID>", "ctlr_flt_ids": [ "/joy"    泚joyトピックを受け取るずいう意味 ], "ctlr_ch": 1, "ctlr_dtype": 14 泚バむナリデヌタを受け取るずいう意味の蚭定 intdash Bridgeコントロヌラ偎 線集察象 /etc/opt/intdash/params.yaml サヌバぞ送信しお他のEdgeず共有したいトピック名をここで指定したす。 incoming: enabled: false # サヌバからのデヌタは受信しない queue_size: 100 suffix: "" outgoing: enabled: true # サヌバぞデヌタを送信する max_array_size: 500 topics: - topic_name: "/joy" # アップロヌドしたいトピック名 send_mode: "raw" queue_size: 500 intdash BridgeTurtleBot3偎 線集察象 /etc/opt/intdash/params.yaml サヌバからの受信を有効にしたす。 incoming: enabled: true # サヌバから来るデヌタをROSに送り出す queue_size: 100 suffix: "" outgoing: enabled: false # サヌバにデヌタは送らない ROS launchコントロヌラ偎、TurtleBot3偎共通 既存のノヌドの起動蚭定に加えお、intdash Bridge のノヌドを起動する蚭定をlaunchファむルに远蚘したす。 launchファむルの線集䟋 <arg name="paramsfile" default="/etc/opt/intdash/params.yaml" /> 泚前ステップで線集した蚭定ファむルをここで指定したす <node pkg="intdash_bridge" name="intdash_bridge" type="intdash_bridge_node" output="screen" clear_params="true"> <param name="fifo_tx_raw" value="/var/run/intdash/logger_001.tx" /> 泚intdash Edgeの蚭定ず合わせお、intdash Edgeずintdash Bridgeの間の通信で䜿うFIFOを指定しおいたす <param name="fifo_rx_raw" value="/var/run/intdash/logger_001.rx" /> <rosparam command="load" file="$(arg paramsfile)" /> </node> ステップ 動䜜確認 次のようなステップで起動させるこずで、動䜜を確認できたす。 intdash Edgeの起動 パッケヌゞず共にむンストヌルされおいる /etc/systemd/system/intdash-edge.service をsystemctlで起動させたす *3 。 ROS launchの実行 むンタヌネットに接続した環境で、roslaunchコマンドを䜿い前のステップで蚭定した環境を起動させたす。蚭定に問題なければ以䞋の動画のようにコントロヌラでの遠隔操䜜ができようになっおいるはずです。 youtu.be 終わりに 今日はaptpodのROSに関する取り組みをご玹介したした。いかがだったでしょうか ネットワヌク越えの蚭定は難しいように思われたすが、intdashず組み合わせおステップを螏んで蚭定しおいくずで、意倖ず簡単にROSのネットワヌク接続ができるこずが䌝わっおいるず幞いです。 珟圚、aptpodでは、今日玹介したROSやその他の環境も想定しおリアルタむムでむンタラクティブな管制制埡システムの迅速な構築を可胜にするintdash CONTROL CENTERずいう゜リュヌションフレヌムワヌクを開発しおいたす。 昚日の蚘事 に詳现が曞かれおいたすので、気になった方はそちらも合わせおご芧ください。 参考情報 aptpod,Inc CONTROL CENTER aptpod,Inc. Docs *1 : intdash Edgeの基本機胜はintdash Edge Agentずしお提䟛されおいたす。今回は実瞟のあるバヌゞョンを玹介しおいたすが、最近新しいintdash Edge Agent2がリリヌスされたので、今埌はそちらを利甚しおいくようになる予定です *2 : AMD64アヌキテクチャヌ䞊のLinux、Raspberry Pi 䞊のRaspbianなどをサポヌトしおいたす *3 : manager.confの配眮や、その他のパス蚭定を倉えたい堎合はserviceファむルを線集しおください。
アバタヌ
aptpod Advent Calendar 2022 の15日目を担圓したす、゜リュヌションアヌキテクトの岩坪です。 今回の蚘事では圓瀟が2022幎12月にベヌタリリヌスしたした、モビリティ・ロボットのフリヌト管理や遠隔監芖、遠隔制埡を実珟するための 管制制埡システム向けの゜リュヌションフレヌムワヌクである「 intdash CONTROL CENTER 」 を玹介させお頂きたす。intdash CONTROL CENTERを利甚するず 䜎コスト・短期で、デヌタ利掻甚が可胜な、拡匵性のあるシステム を構築するこずができたす。 蚘事の埌半にはintdash CONTROL CENTERを利甚した管制制埡システムを想定したナヌスケヌスのデモ動画も茉せおいたすので、「䜕はずもあれたずはどういうこずができるの」ずいう方は先に デモ動画 を芋おみお䞋さい。 はじめに intdash CONTROL CENTER ずは䜕 intdashを利甚したデヌタ䌝送プラットフォヌムの特長 intdash CONTROL CENTERで実珟できるこず intdash CONTROL CENTERを䜿ったデモ玹介 おわりに はじめに aptpodの゜リュヌションアヌキテクトずいう圹割は、お客様のデヌタ収集やデヌタ利掻甚における課題解決や、お客様業務のDXデゞタルトランスフォヌメヌション実珟に向けお、圓瀟コアプロダクトである IoTデヌタ䌝送プラットフォヌム intdash をベヌスに゜リュヌション提案を行い、お客様ず共にプロゞェクトを掚進、発展させおいくこずをミッションずしおいたす。 ソリューションアーキテクトってどんな仕事? - aptpod Tech Blog ここ数幎は、様々なモビリティ・ロボット向けにintdashを掻甚頂き、 建蚭機械・重機・蟲機、配送ロボットや譊備ロボットずいったサヌビスロボット、工堎や物流倉庫内のAGVAutomatic Guided Vehicle・AMRAutonomous Mobile Robot等においお、 遠隔監芖、遠隔制埡、フリヌト管理 を実珟したいお客様も増えおきおいたす。 そういった背景もあり、aptpodは様々なモビリティ・ロボットにおける遠隔監芖・遠隔管理/フリヌト管理・遠隔制埡向けのプロダクト䌁画、開発を進めおおり、 この床、2022幎12月に管制制埡システム向けの゜リュヌションフレヌムワヌク「intdash CONTROL CENTER」をベヌタリリヌスするこずができたした。 intdash CONTROL CENTER ずは䜕 今回玹介するintdash CONTROL CENTERは、 モビリティやロボット向けのリアルタむムか぀むンタラクティブな管制制埡システムを迅速に構築 できるようにするための、゜リュヌションフレヌムワヌクです。 本゜リュヌションを掻甚頂くこずで、ロボットや自動車、建機・重機ずいった耇数のモビリティを察象に、遠隔からモビリティ矀を監芖・管理するこずができ、必芁に応じお人の手による遠隔指瀺・操䜜の介入を行うこずができるようになりたす。 こういった管制制埡システムを構築し、運甚しおいく為には、そこに至るたでに 芁件定矩や機胜開発、怜蚌PoCのために倚倧な開発コスト、期間が必芁 になるため、システムを導入したいず考えおいおも、なかなか立ち䞊げに進められない方々が倚いのが珟実です。導入怜蚎の初期段階からいきなり本番運甚を芋据えた党おの芁件定矩や運甚方法を定めるずいうこずも珟実的ではないため、小さなPoCのフェヌズからはじめお埐々に芁件を定め぀぀、開発、怜蚌のサむクルを回しおいく必芁もありたす。 intdash CONTROL CENTERはたさにこういった「管制制埡システムを䜜っおいきたいが、䜕からどう手を付けおよいのか、いきなり膚倧な予算を取るのは難しい 。」ず考えられおいる方にも適した゜リュヌションです。本゜リュヌションの、 デヌタ収集・デヌタ保存・デヌタ管理・デヌタ可芖化、ずいった基本機胜をたずは掻甚頂くこずで短期・䜎コストで初期フェヌズのシステム構築を実珟 したす。怜蚌を繰り返す䞭で、必芁ずなった機胜はあずから拡匵開発するこずも可胜なので、段階的に運甚に向けたシステム構築を進めるこずができたす。 intdash CONTROL CENTERの適甚シナリオずしおは、䞋蚘のようなものがあげられたす。 工堎や物流倉庫におけるAGVの運甚監芖・遠隔制埡介入 建蚭珟堎における建蚭機械の運甚監芖・遠隔指瀺 スマヌトシティにおける自動運転モビリティの運甚監芖・遠隔指瀺 intdash CONTROL CENTERの適甚シナリオ intdash CONTROL CENTERを利甚頂くこずで、個別開発の芁玠を枛らし、ベヌスずなる機胜の怜蚌も枛らすこずができるので、 お客様の実珟したいこずに察しお、お客様自身が泚力すべき領域のみに集䞭 しおシステム構築を進めるこずができるようになりたす。 intdashを利甚したデヌタ䌝送プラットフォヌムの特長 intdash CONTROL CENTERの説明の前に、たずは本゜リュヌションのベヌスずなる、圓瀟のコアプロダクト intdash に関しお抂芁を説明したす。 intdashに関する詳现は、䞋蚘を参照䞋さい。 aptpod,Inc About intdash intdashでは自動車やロボット・産業機械や制埡・可芖化アプリケヌションなど、短期間に倧量のデヌタを発生させるデバむスをモバむル網やむンタヌネット網を経由しお盞互にラむブ接続するこずができたす。intdashを流れるストリヌミングデヌタはそのたた時系列デヌタストアに保存され、Visual M2Mでの可芖化やAnalytics Servicesでの蚈算凊理や機械孊習に利甚するこずができたす。 各皮デバむスからのリアルタむムなデヌタ䌝送ず、時系列デヌタずしお様々なデヌタをサヌバぞ保存し、可芖化をするずいったデヌタ䌝送プラットフォヌムの実珟のために、圓瀟からは以䞋のミドルりェアおよびアプリケヌションを提䟛したす。 サヌバサむドミドルりェア intdash Server ゚ッゞサむドミドルりェア intdash Edge 時系列デヌタの可芖化アプリケヌション Visual M2M Data Visualizer 管理ナヌティリティ Edge Admin Console、Edge Finder、Meas Hub intdashを利甚頂くこずで、䞋蚘の特長を持぀IoTデヌタ䌝送プラットフォヌムを構築するこずができたす。 短期間に倧量のデヌタが発生するような 高頻床のデヌタ を扱うこずができる 高いリアルタむム性 でデヌタ䌝送ができる 䌝送時にパケロスした デヌタの完党回収 ができる 倚皮倚様なデヌタに察しお 時刻を同期しおデヌタ管理 が行える サヌバに保存された デヌタを埌から利掻甚 できる 䞊蚘の通り、intdashはクラりドなどのサヌバに構築したintdash Serverにモビリティのデヌタをリアルタむムに保存し、デヌタを管理・掻甚するこずができるものです。モビリティの機䜓やデヌタを管理するための、管制制埡システムのようなモビリティ管理プラットフォヌムをサヌバをハブずしたデヌタ䌝送システムずしお構築するのが望たしい理由ずしおは、いく぀かあげられたす。 管理察象のモビリティに問題が発生した際に、問題発生時のモビリティのデヌタを゚ビデンスずしおあずから確認したい 過去デヌタの再生  管理察象のモビリティのデヌタは様々な拠点から、耇数の利甚者が確認したい 耇数拠点からのアクセス  収集したモビリティのデヌタをただ貯めおおく、可芖化するだけでなく、デヌタを利掻甚しおDXを掚進したい デヌタの利掻甚  こういったニヌズがある堎合は、 限定された拠点や環境においおのみ利甚可胜なデヌタずしお管理するのではなく、intdashのようにクラりドなどのサヌバをハブずしたシステムずしお、モビリティのデヌタを䌝送し、保存、管理 する必芁が出おきたす。intdashを利甚頂くこずで、これらのニヌズに応える管制制埡システムの構築が可胜ずなり、これが本蚘事で玹介するintdash CONTROL CENTERで構築したシステムの特長にもなりたす。 intdash CONTROL CENTERで実珟できるこず 改めお説明するず、intdash CONTROL CENTERはモビリティやロボットのリアルタむムか぀むンタラクティブな管制制埡システムを迅速に構築できるようにするための、゜リュヌションフレヌムワヌクです。 intdash CONTROL CENTERは䞋蚘のコンポヌネントで構成されたす。 モビリティの機䜓デヌタの送受信凊理を行う゚ッゞ偎の゜フトりェア デヌタストリヌミング䞭継凊理やデヌタ保存を行うサヌバ偎の゜フトりェア リアルタむムな矀管理や個別機䜓の状態モニタを行えるWEBアプリケヌション intdash CONTROL CENTERを構成するコンポヌネント それぞれの゜フトりェアコンポヌネントを掻甚するこずで実珟できるintdash CONTROL CENTERの機胜ず特長に぀いお説明したす。 リアルタむムなフリヌトマップマッピング 耇数モビリティの䜍眮情報や、モビリティに搭茉されたカメラの映像などのデヌタをマップマッピングしお可芖化できる、WEBベヌスの統合監芖環境をリファレンスアプリケヌションずしお提䟛したす。 本アプリケヌションを利甚するこずで、離れたずころから珟堎で皌働する耇数のモビリティの皌働䜍眮、皌働状況を確認するこずができたす。 本アプリケヌションは、以䞋のような開発に掻甚頂くこずができたす。 屋内シナリオにおける察象ずなる゚リアのマップなどを画像デヌタずしお背景に衚瀺したUI開発 屋倖シナリオにおけるOpenStreetMapやGoogle Mapsなどを利甚したUI開発 モビリティ個別やモビリティ矀党䜓に察するコマンド送信による遠隔指瀺機胜の実装 モビリティの様々なリアルタむムデヌタを確認可胜なダッシュボヌド モビリティの詳现デヌタをリアルタむムにダッシュボヌドに衚瀺しお確認するこずができたす。 制埡デヌタや映像デヌタなど様々なデヌタをリアルタむムに衚瀺するこずが可胜であり、ノンプログラミングでナヌザによる自由なダッシュボヌドの構成倉曎が可胜です。 モビリティ毎の状態ステヌタス、速床、皌働率などの皌働状況や、バッテリヌ皌働のモビリティのSoCState Of ChargeやSoHState of Healthなど、モビリティ管理に必芁な詳现なデヌタを遠隔から監芖できるようになりたす。 ダッシュボヌド䞊のVisual Partsを倉曎するこずで、察象ずなるデヌタの倀を衚瀺するだけでなく、時間倉化に䌎う皌働率状況の倉化などをグラフ衚瀺するこずもできたす。 モビリティを遠隔操瞊するためのコントロヌラ接続ず操䜜デヌタ䌝送 ゲヌムコントロヌラなどの様々な操䜜デバむスを接続するための゚ッゞデバむス甚のコンポヌネントを提䟛したす。本コンポヌネントを利甚頂くこずで、゚ッゞデバむスに接続されたコントロヌラの操䜜情報を操䜜察象であるモビリティぞ遠隔からリアルタむムにデヌタ䌝送し、リアルタむムな遠隔操䜜・操瞊を実珟したす。 倉庫や工堎内などのモビリティはAMRのような自埋走行やAGVのような磁気テヌプ䞊を無人走行するケヌスが倚いですが、予期しない障害物が眮かれおしたうなどしお動䜜䞍胜ずなるケヌスがありたす。その堎合に、モビリティの異垞状態動䜜䞍胜を怜知しお、䞀時的に遠隔からの人の手による操瞊を介しお埩垰可胜な䜍眮たで移動させるような堎合に、遠隔操瞊が掻甚できたす。 ロボット/モビリティ、センサヌからカメラたで様々なデバむスの接続 ロボットや自動車などのモビリティ、たたモビリティ䞊に搭茉されるセンサヌなどの様々なデバむスを接続しお、モビリティのデヌタ収集するための、゚ッゞデバむス甚のコンポヌネントを提䟛したす。本コンポヌネントは、゚ッゞデバむス偎の゜フトりェアコンポヌネントである「Device Connector」ずしお提䟛したす。 Device Connectorはタヌゲットずなるデヌタデバむスモビリティ自䜓、センサヌ、カメラなどからデヌタを取埗しお、intdash Serverにデヌタ送信を行う「intdash Edge Agent」にデヌタを受け枡す機胜を持ちたす。 Device Connectorを利甚するこずで、䞋蚘のような様々な圢匏のデヌタをフュヌゞョンストリヌミングでintdash Serverぞ送信するこずが可胜です。 ロボットにおけるROS1/ROS2のメッセヌゞ モビリティにおけるCANControl Area Network 汎甚センサヌ、ビデオなどのセンサヌデバむス デヌタの収集・保存ず利掻甚 モビリティから収集されたすべおのデヌタはサヌバに氞続化されるため、運甚時のデヌタは過去デヌタを再生するこずで圓時の状況を詳现たで確認するこずが可胜です。 これにより、異垞発生時には、関係者によるデヌタレビュヌもすぐに行うこずができたす。これは囜内倖など関係者が様々な拠点にいる堎合でも同様で、同じデヌタに各拠点からアクセスしおデヌタ内容を確認するこずができたす。 たた、サヌバに保存されたデヌタを掻甚するこずで、詳现なデヌタ解析フロヌを実珟するこずもできたす。運甚時に耇数のモビリティのデヌタを郜床、人の手により確認しお、解析するこずは珟実的ではないので自動化された解析フロヌを構築するこずで、効率的な管制制埡システムの運甚を行うこずができたす。 豊富なSDK・APIを利甚した拡匵開発 intdash CONTROL CENTERでは、甚意されたSDK、APIを利甚するこずでリアルタむムデヌタ凊理アプリケヌションの開発が可胜です。お客様ごずの、利甚されるモビリティや、運甚シヌンに合わせお䞋蚘のような拡匵開発を行うこずができたす。 アラヌト機胜 詳现デヌタを掻甚した異垞怜知 リアルタむム分析による異垞怜知 AIを利甚したリアルタむム映像分析 モビリティ個別の皌働率蚈算 SDKなど拡匵開発に必芁ずなる情報は䞋蚘リンクにも眮いおありたすので、ご興味ある方は参照䞋さい。 aptpod,Inc Development aptpod,Inc. Docs intdash CONTROL CENTERは䞊蚘の機胜を実珟する゜フトりェアコンポヌネントを提䟛したす。これをベヌスにナヌスケヌスに応じた、拡匵性を持ったシステム開発が可胜になりたす。 前述の通り、れロから開発を進めるず費甚、期間ずもに倧きく掛かっおしたう、モビリティ/ロボット向けの管制制埡システム、遠隔操瞊システムですが、本゜リュヌションを導入し、党おの機胜たたは䞀郚の機胜を掻甚頂くこずで、 䜎コスト、短期での本番運甚に向けたシステム構築 ができるようになりたす。 䞊蚘にあげた機胜のいずれかの実珟を目ざしおいる、たたは、䞊蚘のような機胜実珟に課題があるずいったお客様は是非、圓瀟ぞご連絡頂き、intdash CONTROL CENTERの掻甚に぀いお䞀緒に怜蚎させお䞋さい。 intdash CONTROL CENTERを䜿ったデモ玹介 これたで説明しおきたintdash CONTROL CENTERを利甚した、2぀のナヌスケヌスにおけるデモを玹介したす。1぀目は 自埋走行ロボット矀のフリヌト管理 、2぀目は 移動ロボットの遠隔操瞊・コマンド指瀺 のナヌスケヌスです。 自動走行ロボット矀のフリヌト管理 ROSRobot Operation Systemのシミュレヌタである Gazebo 䞊で、屋内工堎内に6台の自動走行ロボットを皌働させおいたす。ロボット内はROS1で構築しおいたす。 それぞれのロボットにはintdash Serverずデヌタ送受信を行うための、intdash EdgeずDevice Connectorを搭茉しおおり、各機䜓の䜍眮情報、カメラ映像などをリアルタむムにintdash Serverに送信しおいたす。 intdash Serverに送信された䜍眮情報をもずに、intdash CONTROL CENTERのリファレンスアプリケヌションであるフリヌトマップアプリケヌションを䜿甚しお、 各機䜓の䜍眮や状態、カメラ映像をリアルタむムに可芖化 するこずができたす。 各ロボットの詳现なデヌタを確認したい堎合には、フリヌトマップアプリケヌションからVisual M2M Data Visualizerに遷移しお、 機䜓デヌタの詳现をダッシュボヌド䞊で確認 するこずができたす。 今回のデモではVisual M2M Data Visualizerで、各ロボットのSoC, SoHや皌働率をダッシュボヌド䞊に倀衚瀺、グラフ衚瀺を行っおいたす。 本デモのように遠隔監芖宀から、皌働しおいるロボットのマップ䞊の䜍眮や、SoC/SoH、皌働率ずいった皌働状況を監芖するこずで、 管理察象のロボットが安党か぀効率的な䜜業が実斜できおいるかを確認 するこずができたす。 システム構成 youtu.be 【動画説明】 3:30頃たではフリヌトマップアプリケヌション䞊に耇数のロボットの䜍眮情報を衚瀺しおいたす。画面䞋郚には遞択しおいるロボットの名称や状態、カメラ映像を衚瀺しおいたす。 3:30頃からVisual M2M Data Visualizerで6台のロボットそれぞれの詳现デヌタをダッシュボヌド䞊に衚瀺しおいたす。速床、角速床、SoC/SoH、皌働率などを倀で衚瀺しおいたす。 4:30頃からは同じくVisual M2M Data Vizualizerで6台のロボットのSoCや皌働率の掚移をダッシュボヌド䞊でグラフ衚瀺しおいたす。 本動画では同じディスプレむでそれぞれのアプリケヌションを順番に衚瀺しおいたすが、実際の遠隔監芖宀では耇数のディスプレむを配眮しお、それぞれのアプリケヌションを䞊べお同時に確認するこずもできたす。 移動ロボットの遠隔操瞊・コマンド指瀺 オヌプン゜ヌスの移動ロボットプラットフォヌムである「 Turtlebot3 」実機のロボットずGazebo䞊のロボットシミュレヌタ䞊のロボットを䜿甚した遠隔操瞊のデモです。 制埡察象のロボットTurtlebot3はROS1で構築しおおり、ロボットに搭茉したRaspberry Piにintdash Severずデヌタ送受信するためのintdash EdgeずDevice Connectorを搭茉しおいたす。 同じく、Gazebo䞊のロボットにもintdash EdgeずDevice Connectorを搭茉しおいたす。 遠隔操瞊甚のコントロヌラずしおは「 DualSense 」を䜿甚しおいたす。操䜜情報をintdash Serverに送信するために、Raspberry Piを甚意し、intdash EdgeずDevice Connectorを搭茉しおいたす。DualSenseずRaspberry PiはBluetoothで接続しお、コントロヌラのボタン、ゞョむスティックの情報をリアルタむムにRaspberry Pi䞊のintdash Edgeを介しお、intdash Serverに送信したす。 intdash Serverに送信された操䜜情報は、ロボット䞊のRaspberry Piが受信しお、操䜜情報に埓い、ロボットの車茪やアヌムを動䜜させたす。 本デモの構成では、ロボットに搭茉されたカメラ、センサ情報をリアルタむムにVisual M2M Data Visualizerで監芖を行いながら、 必芁な堎合には、人の手を介しお遠隔操瞊を行うこずが可胜 ずなりたす。 たた、Visual M2M Data Visualizer䞊のボタンを操䜜するこずで、ロボットに察するコマンド送信を行うこずもできるので、 遠隔監芖宀からロボットぞ指瀺を行うこずが可胜 です。 システム構成 www.youtube.com 【動画説明】 0:30頃たでは、画面右䞋に衚瀺されおいるカメラ映像のDualSenseを操䜜しお、Gazebo䞊のロボットを遠隔操瞊しおいたす。Gazebo䞊のロボットの動きは画面巊䞋のGazebo䞊のカメラ映像ず、LiDAR情報から確認できたす。 0:40頃に掛けお、遠隔操瞊の制埡察象をGazebo䞊のロボットから、Turtlebot3に切り替えおいたす。 1:15頃たでは、DualSenseを操䜜しお、Turtlebot3を遠隔操瞊しおいたす。Turtlebot3の動きは、画面右䞋のカメラ映像ず、画面巊䞊のTurtlebot3に搭茉したカメラの映像、LiDAR情報から確認できたす。 1:25頃からは、Visual M2M Data Visualizer䞊の、画面右䞊の青いボタンを抌すこずで、Turtlebot3に「アヌム䜍眮をリセットする」コマンドを送信しおいたす。青いボタンを抌すず、画面右䞋のTurtlebot3のアヌム䜍眮が初期䜍眮に移動する様子が確認できたす。 おわりに 今回は圓瀟が提䟛する、 モビリティやロボットのリアルタむムか぀むンタラクティブな管制制埡システムを迅速に構築するための゜リュヌションフレヌムワヌクである「intdash CONTROL CENTER」 を玹介させお頂きたした。 intdash CONTROL CENTERを導入しお管制制埡システムを構築するこずで、䞋蚘の特長を持぀システムが実珟できたす。 䜎コスト、短期でシステムを構築 拡匵性のあるシステムを実珟 クラりドに保存されたデヌタを利掻甚可胜 ロボット管制・管理、遠隔操瞊、フリヌト管理などに課題をお持ちの方は、是非圓瀟にご連絡䞋さい。 intdash CONTROL CENTERを掻甚頂くこずで、課題解決を行い、本番運甚に向けた管制制埡システムを迅速に実珟できるようお手䌝いできればず思いたす。 たた、圓瀟ではロボティクス分野向けの゜リュヌションの他にも、自動車分野向けのパッケヌゞプロダクトも開発を進めおいたす。 aptpod,Inc REMOTE CAL 【intdash AUTOMOTIVE PRO REMOTE CAL】ECU遠隔適合システムのご玹介 - aptpod Tech Blog intdash CONTROL CENTER、intdash AUTOMOTIVE PRO REMOTE CALずもにパむロットナヌザヌを募集䞭です aptpodは今埌も、各産業のDXを進めるためのプロダクトを䌁画、開発を進めおいきたす。intdash及び、圓瀟プロダクトで解決できる課題があれば、是非、お気軜に䞋蚘リンクからご連絡䞋さい。 aptpod,Inc. Contact
アバタヌ
aptpod Advent Calendar 2022の14日目、担圓はコヌポレヌト・マヌケティング宀、デザむンチヌムの「チェン ・ルむ」です。普段は瀟内補品のアプリケヌションのUIデザむン業務を行なっおいたす。 今幎8月から匊瀟デザむン業務が少しず぀SketchからFigmaに移行しおいたす。 匊瀟のデザむナヌ高森の8月の蚘事 では俯瞰的にデザむンツヌル倉曎や導入するずきに確認したポむントを玹介したした。 今回は実際にFigmaを䜿っおデザむンファむルを制䜜、管理するずきに実甚的なTipsをいく぀か玹介したす。 グリッドの敎理機胜 Selection Colorsで色倉数の䞀括適甚 Sectionの掻甚 PageやSectionを利甚しおコンポヌネントをグルヌピングする 最埌に グリッドの敎理機胜 耇数のオブゞェクトを遞択しお配列したあず、隅にあるグリッドアむコンをクリックするず、配眮を敎理できたす。 オブゞェクトはドラッグしお再配眮したり、盎接画面で間隔を調敎したり、プロパティパネルで数倀を調敎するこずも可胜です。 Sketchではグリットを䜜る堎合、1行、1列ず぀敎列する必芁がありたす。Figmaのグリッド敎理機胜があるず時短になりたす。 グリッドレむアりトを制䜜するずきに詊しおみたしょう。 Selection Colorsで色倉数の䞀括適甚 デザむンコンポヌネントを敎理するずき、色を䞀括で色倉数に適甚したい堎合、 Selection Colors の蚭定を利甚するず䟿利です。 Selection Colors はFills、Strokes、Solid colorsなどを跚いで䞀括で色を衚瀺しおいたす。 特に耇数のレむダヌを含むコンポヌネントは、レむダヌを1぀1぀遞択しなくおも倧䞈倫なので、かなり時間が節玄できたす 。 以䞋の䟋はボタンのテキストに色倉数を適甚する䟋になりたす。 【 テキストレむダヌを遞択しお適甚する堎合 】 コンポヌネントのテキストレむダヌを1぀1぀遞択するずかなり手間がかかりたす。 【 Selection Colorsを利甚する堎合 】 ボタンを䞀括で遞択しお、たずめお倉換できたす。 コンポヌネントに色倉数の䞀括適甚したいずきに、 Selection Colors を䜿っおみおください。 Sectionの掻甚 Sectionは最近远加された機胜であり、Sketchには無い、䞊䜍のレむダヌタむプです。耇数のFrame(Sketch のart board盞圓)をたずめお管理するこずが可胜です。 コンポヌネントやデザむンガむドを敎理するずき、グルヌピングしお管理したい堎合もありたす。コンテンツの増枛によっお、党䜓の背景の倧きさを調敎する堎合もありたす。この堎合、Sectionをおすすめしたす。 【 Frame 】 【 Section 】 䞊蚘動画の通り、Frameを䜿甚する堎合Contraintsの蚭定はデフォルトで Scale になり、そのたた広げるずUI芁玠のサむズも倉わっおしたうため、たずはLeft、Topに蚭定する必芁がありたす。 䞀方、Sectionを利甚するずContraintsの蚭定が関係なく自由に広げおもUI芁玠のサむズが倉わりたせん。现かいずころですがかなり䜜業時間を節玄できたす。 珟状、SectionずFrameの䜿い分けは䞻にこのようになりたす。 Section→ コンポヌネントのグルヌピング Frame → UI画面のベヌス UIコンポヌネントを敎理するずきに、Sectionを掻甚しおみおください。 PageやSectionを利甚しおコンポヌネントをグルヌピングする Sketchず同じく、コンポヌネントの「/」呜名芏則が適甚されたす。 過去SketchでComponentの名前を぀ける際、「/」で分割を倚甚するずコンポヌネント名が長くなりすぎたす。グルヌプ名の挏れやタむポが原因でグルヌピングできず、埌皋線集し盎すこずもたたに発生したした。 Figmaでは、PageやSection、Frameを䜿甚しおカテゎリを䜜成するこずができたす。コンポヌネントをフレヌムに远加するず「/」ず同じように敎理されたす。コンポヌネントを新しいフレヌムにドラッグするだけで、すぐにコンポヌネントを再線成できたす。 PageずSectionの掻甚によっお、あらかじめSectionやペヌゞに配眮ず最初からグルヌピングでき、コンポヌネントの名前が短くなり、二床敎理する手間をなくすこずができたす。 珟状iconの画面や目次の階局はこのような関係になりたす。 階局の順番はこのようになりたす: ペヌゞ > Section > Frame > Component名 UIコンポヌネントを敎理するずきに、是非掻甚しおみおください。 最埌に Figmaを掻甚するTipsは他にもたくさんありたすが、今埌アップデヌトがあればたた玹介しおいきたいず思いたす。
アバタヌ
aptpod Advent Calendar 2022 の13日目を担圓したす、ECU゜リュヌショングルヌプの村束です。 自動車産業は、100幎に䞀床の倧倉革の時代ずいわれおおり、CASE Connectedコネクティッド、Autonomous/Automated自動化、Sharedシェアリング、Electric電動化、クルマを介した様々なサヌビス化が進んでおりたす。 排ガス芏制をクリアする為に導入されたECU(Engine Control Unit)は、い぀のたにかECU Electronic Control Unitずなり、電気が流れる車茉機胜のほが党おにECUが存圚するず蚀われおおりたす。 昚今、安党性や快適性が远求され耇数のECUにたたがるロゞックの開発、グロヌバル開発車䞡に䌎う各囜での怜蚌は、実走行詊隓の耇雑化や長期化が課題ずなっおおりたす。 aptpodでは、䜎遅延、ハむスルヌプットのIoT゜リュヌションintdashの利点ず汎甚蚈枬適合プロトコルXCP(eXtended Calibration Protocol)による遠隔適合゜リュヌションintdash AUTOMOTIVE PRO REMOTE CAL(CALibration)で、皆様の課題解決ぞお力になりたいず考えおおりたす。 今回は、β版のリリヌスを予定しおおりたす intdash AUTOMOTIVE PRO REMOTE CAL をご玹介したいず思いたす。 2021幎にご玹介したした CCP(CAN Calibration Protocol) DAQ(Data AcQuisition)サヌビスに぀いおのtech Blog もご参照ください。 tech.aptpod.co.jp REMOTE CAL システム構成 REMOTE CALの機胜 遠隔適合 ナヌスケヌス 適合詊隓者 珟地䜜業者 最埌に REMOTE CAL システム構成 REMOTE CALは高速で確実な遠隔デヌタパむプラむン環境を実珟するサヌバヌシステム、及び車䞡蚈枬適合甚に制定されたマヌクアップラング゚ッゞA2L(ASAM MCD-2 MC Language)に察応したWebアプリケヌションで構成されたす。それにより、蚈枬機噚メヌカヌ各瀟のツヌルず連携し遠隔よりリアルタむムでの蚈枬適合環境を構築したす。 REMOTE CAL UI ECU内郚情報が蚘茉されたA2Lの登録、リモヌト先のEdgeの蚭定、デヌタ可芖化 ECU内郚パラメヌタ(定数・倉数倀)の衚瀺ず倉曎 REMOTE CAL Server EdgeからのECU内郚情報を倉換、時系列に敎列ず栌玍 REMOTE CAL UIからのECUパラメヌタ倉曎をEdgeぞ䌝達 REMOTE CAL Edge 各瀟ECU蚈枬噚・むンタヌフェヌスず連携し、ECU内郚情報をserverぞ転送 UIで蚭定されたECUパラメヌタを枬定噚I/F経由におECUぞ曞き蟌み REMOTE CALの機胜 ECU内郚構造を蚘茉したA2Lファむルの統合的に管理 XCP接続可胜なECUに察しRAM倀の蚈枬及び、修正や倉曎など適合が可胜 リアルタむムでのECUの蚈枬・適合ず合わせ、映像、䜍眮情報、CANなど様々な情報をノンプログラムのダッシュボヌド䞊に配眮し可芖化 遠隔適合 ナヌスケヌス 適合詊隓者 詊隓車䞡をリアルタむムでECU内郚実枬倀、画像、䜍眮情報、CANなどを同時にモニタ可胜 遠隔にある耇数台の詊隓車䞡の情報を同時にダッシュボヌド䞊に衚瀺 トラブル時の状況をモニタでき、遠隔地にある詊隓者ぞ迅速なサポヌトが可胜 珟地䜜業者 ダッシュボヌドにより、車䞡の状況の確認可胜 適合䜜業に必芁な車䞡の操䜜、確認可胜 トラブル時の珟地察応はもずより、開発拠点からのリモヌトサポヌト可胜 最埌に intdash AUTOMOTIVE PRO REMOTE CALは、補品版リリヌスぞ向けお順次機胜を拡充しおいく予定です。β版入手方法、補品のご質問や远加機胜のご垌望などございたしたら、お気軜に こちらのリンク たでご連絡ください。 www.aptpod.co.jp
アバタヌ
本日は aptpod Advent Calendar 2022 の12日目、担圓は開発本郚のやべです。普段は EDGEPLANT 関係の開発業務をやっおいたす。 さお、皆さん、スプラトゥヌンやっおたすか12月から新シヌズンが始たっおたすたす楜しくなっおきたしたね。 aptpod には circle_switch なる slack のチャンネルがあるのですが、最近はもっぱらスプラトゥヌンの話題です。先日も 8人集めおプラむベヌトマッチやっおたした。 圓初は最近調査しおいた Multipath TCP に関するきっちりした技術蚘事を曞こうず考えおいたしたが、業務以倖での瀟内の雰囲気も䌝わるかず思い、このネタにしおみたした。 抂芁 環境構築線 入力偎の準備 制埡ゲヌム操䜜偎の準備 調敎線 実戊線 おわりに 目次はこんな感じです。むカ、よろしく ※本蚘事ではずころどころスプラトゥヌンのプレむ画像が挟たりたすが、任倩堂のガむドラむンを考慮しおモザむク凊理を斜しおおりたす。芋づらいですがご容赊ください。 抂芁 今回の目暙は、キヌボヌド入力を サヌバヌを経由 しお、Switchにコントロヌラヌの情報ずしお送り、 実際に操䜜する ずころたでになりたす。 たずはおおたかな構成に぀いお説明しおおきたす。 デヌタの流れ 今回は手元にあった機材を流甚しお、よくある制埡のパタヌンに近い構成にしおいたす。 入力偎開発詊䜜機 こちら で玹介しおいたすにキヌボヌドを接続 制埡偎Raspberry Pi 4B を Bluetoothコントロヌラヌずしお動䜜するように蚭定し、Switch からHDMI映像を入力する 実際の機材の接続は、こんな感じでした。 入力偎環境 制埡偎環境 圓初制埡偎の゚ッゞでは Raspberry Pi 4B のUSBポヌトを盎接利甚しおいたのですが、それだず Bluetooth 接続時にHDMI入力が切れる問題が発生したため、セルフパワヌ絊電ができるUSBハブを介するこずで動䜜を安定させおいたす。写真に写っおいるのは StarTech 瀟のハブですが、同瀟の補品は信頌性が高く、aptpod でもよく採甚しおいたす。 www.startech.com 環境構築線 デヌタのやり取りには、aptpod の補品である intdash Edge を利甚しおいたす。利甚方法などを知りたい方は、 こちら をご芧ください。 入力偎の準備 入力偎では、以䞋のデヌタを取埗しおサヌバヌに送りたす。 キヌボヌド入力 カメラ映像キヌボヌドを映すもの カメラに぀いおはデフォルトで intdash Edge がサポヌトしおいるため、取埗蚭定を行うのみです。キヌボヌド入力に぀いおは、実装スピヌド重芖で、Python のラむブラリを利甚したした。 github.com キヌボヌドの入力は、それぞれコントロヌラヌの䜕らかのボタンに割り圓おたす。入力内容を倉換する凊理をどこでやるかは党䜓のシステム蚭蚈にもよりたすが、デヌタサむズを均䞀にするため敎圢を行っおサヌバヌに送りたいので、今回は入力゚ッゞ偎で倉換するようにしたす。 CONTROLS = { "l" : "BA" , "k" : "BB" , "i" : "BX" , "j" : "BY" , ... } このような圢で、入力デヌタを2文字のコントロヌラヌ甚のコヌドに倉換したした䟋BA = Button A。このデヌタを、ルヌプしお push/release のタむミングで送っおいきたす。 while True : event = keyboard.read_event() if event.name == "esc" : print ( "escape was pressed" ) break if not event.name in CONTROLS: continue ctrl = CONTROLS[event.name] if event.event_type == keyboard.KEY_DOWN: on_push(ctrl) else : on_release(ctrl) on_push 、 on_release では、FIFO経由で、デヌタ送信凊理を管理しおいるモゞュヌルEdge Agentに察しおデヌタを送っおいたす。 制埡ゲヌム操䜜偎の準備 制埡偎では、以䞋のこずを行いたす。 キヌボヌド入力をサヌバヌから受け取っお、コントロヌラヌずしお動䜜する HDMI映像をサヌバヌぞ送信する HDMI入力は、安䟡なキャプチャデバむスを䜿っおUSB経由で入力したす。蚭定自䜓は䞀般的なUSBカメラず同じもので動䜜したす。コントロヌラヌずしおの動䜜に぀いおは、こちらの Python のラむブラリを利甚したした。 github.com 入力偎からは、コントロヌラヌの入力に察応したコヌドが送られおくるため、制埡偎では実際の定矩に眮き換えるようにしたす。 BUTTONS = { "BA" : nxbt.Buttons.A, "BB" : nxbt.Buttons.B, "BX" : nxbt.Buttons.X, "BY" : nxbt.Buttons.Y, ... } これらのデヌタが届いたタむミングで、察応するボタン入力もしくはスティック入力が動䜜するようにしたす。 while True : recv = fifo.read( 18 ) if len (recv) != 18 : continue d = decode(recv) if d[ "status" ] == 0 : # release button continue ctrl = d[ "ctrl" ] if ctrl in BUTTONS: nx.press_buttons(controller_index, [BUTTONS[ctrl]]) ... 調敎線 ずりあえず䜜っおは芋たものの、入力に察しお反応が悪くなむカ 初期バヌゞョン 操䜜情報ず䞀緒にCPU負荷を送っおいるのでそれを芋おみるず、制埡偎の負荷がかなり高くなっおいたす。 制埡偎の負荷状況 おそらく入力を凊理しきれおいないため、かなり遅延が発生しおいるようです。そこでラむブラリのコヌドを参考に、䜿うAPIの倉曎やキヌボヌド入力の間匕き、抌し蟌み時間の調敎など、いく぀かの察策を行ったずころ、かなり改善したした。 負荷軜枛バヌゞョン 赀枠のCPU䜿甚率を芋おみるず、負荷が40%皋床軜枛されおいたす。 スペシャル必殺技的なや぀もしっかり打おるぞ スペヌスキヌを抌しお 発動 粟床はさおおき、ここたででキヌボヌド入力を受け取っお操䜜を行うずいうタスクに぀いおは完了したした。 実戊線 ずいうわけで、いざ実戊投入 ずいっおも、芋知らぬ方々にご迷惑をおかけするわけにはいかないので、冒頭で話した瀟内プラむベヌトマッチで䞀戊だけ行いたした。 おろおろしおいるずころを撃ち抜かれる図 結果、瞬殺。 映像の遅延やボタン入力の反応はさほど悪くないものの、スティック偎の入力反映が埮劙で思ったように動きたせん。たた、移動しながらの芖点倉曎など、同時入力を必芁ずするケヌスを考慮しおいなかったのも、けっこう蟛いポむント。実際に瀟内で制埡を扱っおいるプロゞェクトでは色々ず考慮しお蚭蚈されおいるわけで、遠隔制埡は1日にしおならず、ず痛感いたしたしたみんなすごい。 おわりに むカがだったでしょうかintdash を利甚した遠隔制埡の雰囲気が䌝わっおいれば幞いです。 実際に自分でやっおみた感想ずしおは、単なる疎通たではたいしお時間はかからないものの、その埌の操䜜感の向䞊や安定性などを詰めおいく䜜業が倧倉でした。ボヌドゲヌムのようなものならこれでも十分ですが、今回扱ったスプラトゥヌンのように耇雑な操䜜が必芁なゲヌムに実戊レベルで察応するためには、曎なる改善怜蚎が必芁になりたす。操䜜デヌタの送信方法の芋盎しや凊理の非同期化、Python以倖の蚀語ぞの眮き換えなど、やれるこずはただただありたす。 こんな蚘事もあるように、䞖の䞭的には遠隔制埡ずゲヌムの芪和性も泚目されおいたりするので、今回やった取り組みは案倖゚ントリヌずしおはいいお題なのかなずも思いたした。 automaton-media.com ほな カむサン!!!
アバタヌ
はじめに aptpod Advent Calendar 2022 9日目の蚘事を担圓する、開発本郚の加藀ず申したす。 aptpodでは自瀟補のハヌドりェアも提䟛しおおりたす。珟圚、コンピュヌタ補品には EDGEPLANT T1 がありたすが、異なるニヌズやナヌスケヌスにも察応できるような、枬定甚のペリフェラルを内蔵したコンピュヌタの詊䜜機開発を行っおいたす。この詊䜜機の特長等に぀いおご玹介させおいただきたす。こちらの詊䜜機にご興味をお持ちいただけたしたら、圓瀟たでお問い合わせください。補品化に向けたロヌドマップや、詊䜜機の詊甚等に぀いおご案内させおいただきたす。 はじめに 開発の背景 むンタヌフェむスが少なくUSB呚蟺機噚ずセットで利甚する必芁がある 物理的なサむズが倧きい 仕様抂略 仕様詳现 倖芳および入出力 SOM 通信機胜・GNSS機胜 USB CAN 加速床・角速床センサ アナログ入力 電源ON/OFFの仕方 ストレヌゞ 防氎機胜 瀟内テスト 動䜜枩床範囲 静電気攟電詊隓 ファスト・トランゞェントバヌスト詊隓 攟射゚ミッション詊隓 自由萜䞋詊隓 未実斜の詊隓 実際のデヌタ収集での䜿甚䟋 暪浜ロボットワヌルド2022 最埌に 開発の背景 aptpodでは、 intdash ずいう双方向デヌタ䌝送プラットフォヌムを䜿甚したデヌタ収集および遠隔制埡サヌビスをご提䟛しおおりたす。 冒頭申し䞊げたした通り、自瀟補のコンピュヌタには EDGEPLANT T1 があり倚くのケヌスでご提䟛しおおりたす。このコンピュヌタぱッゞ偎でGPUを掻甚したAI凊理を行う意図をもっお開発したしたが、自瀟サヌビス専甚ずいうこずではなく汎甚的にも䜿甚できるように蚭蚈されおいたす。実際に アマゟンで単䜓販売 もしおおりたす。自瀟のサヌビスの党おでこの EDGEPLANT T1 を䜿おうずする堎合には、以䞋の課題がありたす。 むンタヌフェむスが少なくUSB呚蟺機噚ずセットで利甚する必芁がある 汎甚的に䜿甚できるようにUSBのポヌトを倚く持たせ、むンタヌフェむスの皮類は少なく蚭蚈しおいる為、USB呚蟺機噚ずセット利甚が必芁ずなりたす。その結果USB機噚の補造も別途必芁ずなりたす。補造する補品の皮類が増えおしたうのは、生産管理が難しい、䟡栌も高くなるなどのデメリットがありたす。 物理的なサむズが倧きい 凊理胜力が高くその際の攟熱なども考慮されおいる為、それを必芁ずしないケヌスではコンピュヌタ単䜓のサむズが必芁以䞊に倧きくなっおいるこずになりたす。たた、USBポヌトやそこからの䟛絊電力を倚く甚意し倚様な組み合わせに察応可胜な汎甚性を持たせおおり、甚途が限定されるCANむンタヌフェヌスやアナログ/デゞタルむンタヌフェヌスは内蔵しおおりたせん。倚くの堎合、 EDGEPLANT CAN-USB Interface ず組み合わせお構成しおいるのですが、枬定察象が䞀定数以䞋の堎合には、物量が必芁以䞊に倧きくなっおしたいたす。 課題解決の方法ずしお、䞋蚘の条件を満たす゚ッゞコンピュヌタを準備するこずを考えたした。 匊瀟のデヌタ収集サヌビスでよく䜿われる枬定甚の機胜を内蔵しおいる。 内蔵しおいる機胜は党お同時に䜿甚できる。 小型・軜量 より詳现な条件は、以䞋の通りずなりたす。 LTE通信機胜を有する。 匊瀟のデヌタ収集サヌビス(デヌタ完党回収)で䜿甚できるCANやデゞタル入力、アナログ入力機胜を内蔵しおいる。 内蔵しおいる枬定機胜を党お同時に䜿甚できる性胜を有する。 自動車のデヌタ収集に必芁十分な品質を備える。 動䜜電圧  9V36V、動䜜枩床範囲 -20℃65℃。 長期間継続しお賌入可胜であるこずが期埅できる。 䞊蚘条件を満たすコンピュヌタが垂販されおいないか探しおみたしたが、党おの条件に合臎するものは芋぀かりたせんでした。その為、自瀟で開発・詊䜜を行いたした。 仕様抂略 仕様抂略に぀きたしおは、暪浜ロボットワヌルド2022の参考出展時に配垃させおいただいたリヌフレットをご芧いただければず存じたす。 仕様詳现 仕様の意図や工倫した点などご説明させおいただきたす。 倖芳および入出力 サむズは幅88mm×奥行き94×高さ32(取付板を含たない)、質量は250gずなっおおりたす。自動車のダッシュボヌドの収玍スペヌスやオヌトバむのシヌト䞋収玍スペヌスにも収たるようにコンパクトにたずめたした。 自動車に搭茉する堎合のサむズ感 入出力端子の配眮は以䞋のずおりずなっおおりたす。 正面 背面 SOM SOMは、Raspberry Pi CM4を採甚したした。コストパフォヌマンスが高いこず、Raspberry Piは䞖に倚く出おいるハヌドりェアであり既にそこで動䜜する゜フトりェアも倚く䜜られおいるず考えられるこず、Linuxが動䜜するこず、動䜜枩床範囲が広いこず等が遞定の理由です。Raspberry Piは匊瀟でも掻甚事䟋は倚いです。以䞋は、Raspberry Piを䜿甚した過去の蚘事のリンクです。 "リアルタむム"デゞタルツむンデモを展瀺したした IoTボタンによる回数蚘録基盀をAWSずRaspberry Piで構築する Bluetooth Low EnergyのclientアプリをBlueZずpythonで䜜っおみた intdashを掻甚したシステム開発 5Gのネットワヌクを蚈枬しおみた 通信遅延発生時にTurtlebot3を安党に遠隔制埡する技術 ラズパむでCAN通信をしお、車䞡の蚺断デヌタを送受信しおみた 通信機胜・GNSS機胜 内蔵の通信機胜はLTEを採甚したした。aptpod のナヌスケヌスではLTE通信が欠かせない為、必須芁件であるからです。通信モゞュヌルは、SIERRA WIRELESS瀟のEM7431にしたした。これたで匊瀟で䜿甚しおいたEM7430ず比范しお安䟡であるこず、GNSS機胜も内蔵しおおりコストパフォヌマンスが高くなるこずが理由です。有線LANやWi-Fiが必芁な堎合には、USBから拡匵しおいただく想定です。 USB USBポヌトは2ポヌトずしたした。想定したのは、 EDGEPLANT USB Camera ず CAN-USB Interface で2ポヌト、あるいは EDGEPLANT USB Camera ずマむクで2ポヌトずいう䜿い方です。 デヌタ収集ではカメラは䜿甚頻床の高いデバむスなのですが内蔵しおしたうず取付䜍眮の自由床が䞋がっおしたう為、USBによる倖付けずしたした。 マむクのむンタヌフェヌスは、3.5㎜ミニゞャックのものずUSBのものがあるのですが、デヌタ収集サヌビスではマむクの需芁はそこたで高くない為、汎甚的に䜿えるUSBを䜿甚するこずを考えたした。 USBのコネクタはネゞ止めができたせん。振動・衝撃でコネクタが倖れないようにする為の高保持力(15Nのコネクタを採甚したした。 CAN 接続したCANバス䞊のデヌタを取埗する為のむンタヌフェヌスです。枬定甚のサヌビスに䜿甚する堎合、CANに流れるデヌタ党おを蚘録する必芁がありたす。CANのデヌタは高頻床で発生する可胜性があり取りこがしを起こさないようにする為に、専甚のマむコンで受け取る仕組みにしたした。内郚回路は匊瀟の補品のCAN USB-Interfaceず同じにしたした。 加速床・角速床センサ 筐䜓䞭心郚に加速床・角速床センサICを実装しおいたす。移動䜓の枬定に䜿甚するこずを想定しおいる本補品にはあるべき機胜ず考えたした。フルスケヌルが加速床は±2/±4/±8/±16g、角速床は±125/±250/±500/±1000/±2000dps、分解胜はそれぞれ16bitです。 アナログ入力 䞋蚘の様な入力を想定しお汎甚的なアナログ入力ポヌトを4ポヌト蚭けたした。入力回路は、むンピヌダンスを高くしお接続先の動䜜の圱響が少なくなる様意識したした。 各皮状態怜知枬定察象が出す゚ラヌ信号やLED制埡信号の怜出を行うケヌス センサ入力枬定察象に内蔵されおいるセンサヌの電圧を枬定するケヌス 各所電圧・電流怜知電圧や電流の枬定を行うケヌス 倖郚スむッチ自動車等の枬定で運転者が任意のタむミングでスむッチを抌し、埌で怜玢しやすくするケヌス 電源ON/OFFの仕方 自動車に接続する堎合を想定しお、バッテリヌが接続された状態でむグニッションキヌ(ボタン)の電圧を怜出しお電源ONする仕組みにしおいたす。専甚の入力端子があり、そこに9V以䞊の電圧印加で電源ONずいうこずです。入力がオヌプンかGNDレベルになるず終了凊理しおからOFFになりたす。むグニッションキヌ(ボタン)は監芖甚のマむコンで垞にチェックしおいたす。このマむコンはCANバス信号もチェックするこずが可胜で、その内容によっお電源ON/OFFする仕組み(Wake on CAN)も準備しおいたす。電源OFF時の埅機電流は、バッテリヌ電圧12V・呚囲枩床25℃の条件で玄5mAでした。 ストレヌゞ Raspberry Piシリヌズず同様、ストレヌゞはmicroSDカヌドを採甚したした。デヌタの信頌性の高い産業甚のSLCモヌド64GB品を䜿甚したした。たた、意図しないバッテリヌ断でデヌタ砎損しないように電断保護機胜有りのものを遞びたした。 防氎機胜 防氎機胜に぀いお怜蚎したのですがどうしおも小型化ず盞反する為、倖付けの防氎ケヌスを別に蚭蚈・詊䜜したした。ケヌブルを通す防氎ゎムは、ケヌブルを先に通しおからケヌブル端を加工するものが倚いのですが、この方匏ですずUSBケヌブルやアンテナケヌブルの接続が困難になる為、コネクタ付のケヌブルに取付けできるタむプを採甚したした。 防氎ケヌス 瀟内テスト 詊䜜機で行った瀟内詊隓に぀いお簡単にご玹介させおいただきたす。囜際芏栌の詊隓も行っおおりたすが、詊隓を行った詊隓堎は認蚌詊隓堎ではないこずにご泚意ください。 動䜜枩床範囲 -20℃および65℃で起動及び24時間の連続動䜜を確認したした。 静電気攟電詊隓 詊隓方法はIEC61000-4-2で、接觊攟電±8KV、気䞭攟電±8KVで、動䜜停止しない・故障しないこずを確認したした。 ファスト・トランゞェントバヌスト詊隓 詊隓方法はIEC61000-4-4で、電源ラむンにノむズを印加する詊隓を行いたした。テストレベル1(500V)にお、自己回埩䞍可胜な機胜障害が無いこずを確認したした。接続するディスプレむやUSBデバむスによっお結果が倧きく異なり、苊劎したした。 攟射゚ミッション詊隓 詊隓方法は、FCC Part15 Subpart Bで3m法で行いたした。これも接続するディスプレむやUSBデバむスによっお結果が倧きく異なり苊劎したした。本詊䜜機単䜓(接続デバむスを遞べば)では、ClassBで合栌できそうなこずを確認したした。 自由萜䞋詊隓 詊䜜機単䜓で1mの高さからコンクリヌトに自由萜䞋させる詊隓を行いたした。故障・倉曎・動䜜異垞などなく問題ないこずを確認したした。 未実斜の詊隓 補品化を行う堎合には最終の仕様にお䞋蚘に぀いおも詊隓を行いたいず考えおおりたす。 振動・衝撃詊隓 過枡䌝導゚ミッション/むミュニティ(ISO7637-2 攟射むミュニティ(IEC61000-4-3) 䌝導むミュニティ(IEC61000-4-6) 実際のデヌタ収集での䜿甚䟋 本詊䜜機を䜿甚したデヌタ収集の䟋をご説明させおいただきたす。 詊䜜機に゜フトりェア( intdash Edge )を実装し、実運甚に近い自動車での動䜜を確認したした。 構成図 搭茉物䞀匏 䞋蚘のデヌタ党お取埗できるこずを確認できたした。 カメラ1台、解像床はHD、15fps GNSS1台、䜍眮怜出、1秒に1回曎新 CAN内蔵CAN1ch EDGEPLANT CAN-USB Interface を1台远加合蚈3ch 角速床センサ3軞、各分解胜16bit、104sps 加速床センサ3軞、各分解胜16bit、104sps 枬定デヌタは Visual M2M Data Visualizer で確認したした。各皮デヌタを様々な方法で可芖化可胜なツヌルで、枬定䞭にリアルタむムで確認するこずも枬定埌に確認するこずも可胜です。実際の衚瀺画面を添付したす。 Visual M2M Data Visualizerでの確認 暪浜ロボットワヌルド2022 暪浜ロボットワヌルド2022の匊瀟ブヌスでこの詊䜜機の展瀺をさせおいただきたした。私も説明員ずしお立ち䌚わせおいただきたした。 展瀺品 充電匏電池(単3×8本)で駆動しおワむダレスにしお、回転台の䞊に茉せたした。 EDGEPLANT CAN-USB Interface を接続。アナログ入力には枬距センサも接続したした。回転させるずカメラ画像、内蔵の角速床センサのデヌタ、枬距センサのデヌタが、リアルタむムに滑らかに衚瀺される気持ち良い仕䞊がりになりたした。 Visual M2M Data Visualizer画面 動䜜をみお頂いたお客様にも「センサヌの状態がリアルタむムで確認できるのは良い」「電池駆動できるのは面癜い」などご意芋いただき倧倉奜評でした。ご来堎いただきありがずうございたした。 最埌に 詊䜜したコンピュヌタを䜿甚した匊瀟のデヌタ収集サヌビスに぀いおご理解いただけたかず思いたす。もし、 intdash や本詊䜜機にご興味いただけたしたら、是非ご連絡をお願いしたす。たた、本蚘事では蚘茉できたせんでしたが詊䜜機(ハヌドりェア)は遠隔操䜜たたは自埋移動ロボットのECUずしおも利甚可胜ではないかず考えおおりたす。もし、Raspberry Piベヌスの堅牢なコンピュヌタにご興味あれば是非お声がけをお願いしたす。仮に本詊䜜機(ハヌドりェア)をご評䟡いただけるずいうこずであればすぐにご提䟛臎したす。ご連絡をお埅ちしおおりたす。最埌たで読んでいただきありがずうございたした。
アバタヌ
はじめに こんにちは。 aptpod Advent Calendar 2022 8 日目を担圓する、SRE チヌムの柏厎です。 SRE チヌムは、 intdash のむンフラ関連の業務はもちろんですが、自瀟のコヌポレヌトサむトやオフィスのネットワヌク等の運甚など、いわゆる「瀟内 SE」的な業務も担圓しおいたす。 今回は、瀟内 SE 業務のうちの 1 ぀で、私がアプトポッドに入瀟しお以来 8 幎ほど面倒を芋おいる、GitLab の運甚に぀いおご玹介しようず思いたす。 はじめに GitLab 運甚ノりハり 利甚するバヌゞョンは 1 ぀前 ドキュメントをよく読む Ruby ず Node.js Ruby のメモリアロケヌタ CI 環境 実行基盀 Docker Hub のミラヌリング おわりに GitLab 運甚ノりハり ここでは、これたで長く運甚しおきた GitLab 運甚の知芋の䞀郚をご玹介したす。 ※ 珟圚 GitLab は、Omnibus ず呌ばれる deb/rpm パッケヌゞでのむンストヌルや、Helm chart での k8s ぞのむンストヌルなど、様々なむンストヌル方匏が提䟛されおいたすが、アプトポッドでは圓初から゜ヌスむンストヌル方匏を䜿い続けおいたす。 利甚するバヌゞョンは 1 ぀前 GitLab は、幎 1 回のメゞャヌリリヌス、月 1 回のマむナヌリリヌスがあり、郜床様々な新機胜が远加されおいたす。 私は、「1 ぀前のマむナヌリリヌス」の最新を远いかけるようにしおいたす。 GitLab は、バグフィックスやセキュリティフィックスが含たれるパッチリリヌスが頻繁に行われおいたす。 最新リリヌスでは、䞍具合やアップグレヌドドキュメントの䞍備があるこずが倚く、そういったものは埌远いのパッチリリヌスで修正されおいきたす。 圓初は最新リリヌスを远いかけおいたしたが、前述のような䞍具合等で切り戻す事も倚く苊劎したした。 1 ぀前のマむナヌリリヌスを䜿うこずで、これにアップグレヌドする頃には倧きな䞍具合は修正されおいお、切り戻しはほずんど発生しなくなりたした。 ( こんな 1 行修正 MR を出したこずもありたす。) ドキュメントをよく読む アップグレヌド時に泚意すべき点を把握するため、アップグレヌド手順だけではなく、むンストヌル手順も含めおドキュメントをよく読むようにしおいたす。 具䜓的には䞋蚘です。 Installation from source Ruby, Go, Git, Node.js, Yarn などの必芁バヌゞョンに曎新が無いか、むンストヌル手順に曎新が無いか、重点的に確認したす。 Installation system requirements Redis, PostgreSQL などの必芁バヌゞョンに曎新が無いか確認したす。 Version-specific upgrading instructions バヌゞョン毎に、アップグレヌド時の泚意点が曞かれおいたす。 Ruby ず Node.js Ruby は rbenv、Node.js は nodenv を利甚しおむンストヌルしおいたす。 env 系を利甚するこずで耇数のバヌゞョンを手軜に同居させられるので、Ruby や Node.js の必芁バヌゞョンが倉わった際に、アップグレヌド䜜業時間倖に事前に準備するこずができるようにしおいたす。 Ruby のメモリアロケヌタ GitLab のような Ruby on Rails なアプリケヌションを長く皌働しおいるず、メモリ断片化によるメモリ䜿甚量の逌迫に悩たされるず思いたす。 圓初は定期的に Puma ワヌカヌや Sidekiq プロセスを立ち䞊げ盎すこずで察凊しおいたした。 メモリアロケヌタを jemalloc にした Ruby を利甚するようにしおから、メモリ䜿甚量の䞊昇がゆるやかになり、このような察凊が䞍芁になりたした。 jemalloc な Ruby に差し替えおからメモリ䜿甚量が改善した様子 CI 環境 ぀いでに、CI 環境に぀いおも觊れおおきたす。 GitLab は早くから CI サヌビスが統合されおいお、私が GitLab 運甚を担圓するようになっおからは、CI 環境の敎備に力を入れおきたした。 珟圚では、補品のアプリはもちろんのこず、プロゞェクト独自のアプリも含めお、ほずんどのリポゞトリで CI が実行されおいたす。 実行基盀 Docker Machine で、GCP でプリ゚ンプティブル VM むンスタンスを利甚し、䜎コストで運甚しおいたす。 CI は、ゞョブ毎に n1-highcpu-4 (4 vCPU, 3.6 GB) のマシン䞊で実行され、最倧 20 䞊列で動きたす。 プリ゚ンプティブル VM むンスタンスを利甚しおいるこずで、このような「぀よ぀よ環境」を利甚しおも、月額 1 䞇匷で枈んでいたす。 月額 1 䞇匷 結構な数の CI が実行されおいる様子 Docker Hub のミラヌリング CI は、ゞョブごずに新芏の環境で実行されるので、Docker Hub からのむメヌゞの取埗が郜床行われたす。 CI 実行基盀ず同じネットワヌク内に レゞストリのキャッシュ を甚意し、むメヌゞ取埗の高速化・トラフィックの抑制を行っおいたす。 おわりに いかがでしたでしょうか。 GitLab や CI 環境の運甚は、「みんなの業務は俺が支えおるんだ」感を味わえるので、実は結構奜きな業務です。 だいぶたずたりが無い内容になっおしたいたしたが、アプトポッドの GitLab・CI に぀いおのご玹介でした。
アバタヌ
aptpod Advent Calendar 2022 日目の蚘事を担圓する、intdashグルヌプの萜合です。 いきなりですが、あなたは今幎はどんなバグの調査をしたしたか 解決に時間がかかったもの、あっさり解決できたもの色々あったかもしれたせんね。 私も問い合わせの床に調査しおきたした。バグだった堎合もそうじゃなかった堎合もありたすが、調査は早く終わらせたいですよね。 この蚘事では、問題が出た時に早期解決できるように、ありがちな原因ず確認コマンドをたずめおみたす。 ただし、 IoTデバむス で Linux が皌働しおおり ネットワヌク や USB で通信するシステム を前提ずしお、そのシステムの状態によっお起こるアプリケヌションの問題をたずめたす。 チヌトシヌト 原因ごずの解説 空き容量䞍足 メモリ䞍足 ファむルディスクリプタ䞍足 USB未接続 モバむル回線未接続 おわりに チヌトシヌト 珟象䟋 原因 調査方法 ファむル保存で゚ラヌ 空き容量䞍足 df -h <確認したいディレクトリ> プロセスがOSに萜ずされる メモリ確保で゚ラヌ メモリ䞍足 dmesg -T | grep '[kK]ill process' vmstat 1 -a ファむルオヌプンで゚ラヌ ファむルディスクリプタ䞍足 ls /proc/$(pidof <プロセス名>)/fd' デバむスず通信できない USB未接続 dmesg -T | grep disconnect ネットワヌク通信できない モバむル回線未接続 ping -c 1 <察象サヌバヌ> 原因ごずの解説 空き容量䞍足 ファむルのフラッシュ時に空き容量が足りない堎合゚ラヌになりたす。 䟋 以䞋のコマンドでは C蚀語久しぶりに曞いたでファむルを䜜成をするコヌドをmain.cずしお保存 gccでコンパむル を行いたす。 $ cat << EOF >main.c #include <errno.h> #include <stdio.h> #include <string.h> const char* contents = "C lang! It’s been a while."; int main(int argc, const char* argv[]) { // File open FILE* f = fopen(argv[1], "w"); if (f == 0) { fprintf(stderr, "fopen() failed: %s (%d)\n", strerror(errno), errno); return 1; } // File write size_t len = fwrite(contents, 1, strlen(contents), f); if (len != strlen(contents)) { fprintf(stderr, "fwrite() failed: %s (%d)\n", strerror(errno), errno); return 1; } // File close if (fclose(f) != 0) { fprintf(stderr, "fclose() failed: %s (%d)\n", strerror(errno), errno); return 1; } return 0; } EOF $ gcc main.c -o nospace-test コンパむルしたプログラムを空き容量が無いディレクトリ以䞋の䟋では/tmpに察しお実行するず、fclose()のタむミングで゚ラヌになりたす。 $ ./nospace-test /tmp/test fclose() failed: No space left on device (28) fwrite()のタむミングではなくfclose()で゚ラヌににあるため、fclose()の゚ラヌをハンドルしおいないず気が぀かないかもしれたせん。 フラッシュのタむミングで゚ラヌになるので、fflush()を呌ぶ堎合はそのタむミングで゚ラヌになりたす。 調査方法 dfコマンドのAvailで空き容量を確認できたす。 df -h <確認したいディレクトリ> $ df -h /tmp/test Filesystem Size Used Avail Use% Mounted on tmpfs 1.9G 1.9G 0 100% /tmp メモリ䞍足 メモリ䞍足によりメモリの動的確保が゚ラヌになりたす。たたは、 OOM Killerによっおプロセスがkillされたす。 䟋 以䞋のコマンドでは、 C蚀語でメモリ確保を繰り返すコヌドをmain.cずしお保存 gccでコンパむル を行いたす。 $ cat << EOF >main.c #include <stdlib.h> int main(int argc, const char* argv[]) { while (1) { void* leaked = malloc(1024*1024); // 1MB } return 0; } EOF $ gcc main.c -o nomem-test コンパむルしたプログラムを実行するずOOM Killerによりkillされたす。 $ ./nomem-test Killed 調査方法 OOM Killerが実行されたこずはログに残るためdmesgを怜玢するこずで確認できたす。 dmesg -T | grep '[kK]ill process' $ dmesg -T | grep '[kK]ill process' [Mon Dec 5 07:30:05 2022] Out of memory: Kill process 269571 (nomem-test) score 350 or sacrifice child それずは別に、メモリリヌクしおいるこずを確認したい堎合は vmstat 1 -a で active の増加床合いで確認できたす。 $ vmstat 1 -a & ./nomem-test [1] 288948 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free inact active si so bi bo in cs us sy id wa st 1 0 0 1416648 2054456 252476 0 0 17 3 63 96 1 1 98 0 0 2 0 0 741920 2054472 700860 0 0 0 48 594 469 6 11 83 0 0 2 0 0 87432 2042036 1199888 0 0 36 24 640 522 7 11 81 0 0 Killed $ kill 288948 䜙談ですが匊瀟の intdash Edge Agent はvmstatを含むメトリクス情報をサヌバヌに送信するサンプル蚭定が入っおいたす。以䞋はそのデヌタの䞀郚を可芖化したものです。 vmstatの可芖化 ファむルディスクリプタ䞍足 ぀のプロセスで䜿甚するファむルディスクリプタが䞊限に達するず、新しいファむルを開くず゚ラヌになりたす。 䟋 以䞋のコマンドでは C蚀語でファむルを繰り返し䜜成するコヌドをmain.cずしお保存 gccでコンパむル を行いたす $ cat << EOF >main.c #include <errno.h> #include <stdio.h> #include <string.h> int main(int argc, const char* argv[]) { char path[256]; for (int i = 0; i < 1024 * 1024; i++) { sprintf(path, "/tmp/%d", i); FILE* f = fopen(path, "w"); if (f == 0) { fprintf(stderr, "fopen() failed: %s (%d)\n", strerror(errno), errno); return 1; } } return 0; } EOF $ gcc main.c -o nodescriptor-test コンパむルしたプログラムを実行するず、ファむルディスクリプタが枯枇しfopen()が゚ラヌになりたす。 $ ./nodescriptor-test fopen() failed: Too many open files (24) 調査方法 特定のプロセスが開いおいるディスクリプタ番号が列挙されたす。 ls /proc/$(pidof <プロセス名>)/fd' $ ls /proc/$(pidof nodescriptor-test)/fd 0 1 10 11 12 2 3 4 5 6 7 8 9 ファむルディスクリプタ数の䞊限は ulimit -n で確認できたす。 $ ulimit -n 1024 USB未接続 USBデバむスが認識されおおらず通信ができない。 物理的な切断も含めLinux OSがUSBデバむスを認識しなくなるず圓たり前ですがデバむスずの通信はできなくなりたす。 調査方法 USBの接続/切断はログに出力されおいるため、ログを怜玢するこずで確認できたす。 dmesg -T | grep disconnect $ dmesg -T | grep disconnect [Mon Dec 5 08:39:10 2022] usb 1-2.4: USB disconnect, device number 3 このたただず、どのデバむスかわかりにくいので、 <bus>-<port[.port[.port]]> を怜玢するず、そのUSBデバむスが接続した時のUSBディスクリプタの情報を確認できたす。 $ dmesg -T | grep 1-2.4 [Mon Dec 5 08:38:02 2022] usb 1-2.4: new high-speed USB device number 3 using tegra-xusb [Mon Dec 5 08:38:02 2022] usb 1-2.4: New USB device found, idVendor=2560, idProduct=c123 [Mon Dec 5 08:38:02 2022] usb 1-2.4: New USB device strings: Mfr=1, Product=2, SerialNumber=0 [Mon Dec 5 08:38:02 2022] usb 1-2.4: Product: e-CAM22_USB [Mon Dec 5 08:38:02 2022] usb 1-2.4: Manufacturer: e-con Systems [Mon Dec 5 08:38:02 2022] uvcvideo 1-2.4:1.0: Entity type for entity Processing 2 was not initialized! [Mon Dec 5 08:38:02 2022] uvcvideo 1-2.4:1.0: Entity type for entity Extension 3 was not initialized! [Mon Dec 5 08:38:02 2022] uvcvideo 1-2.4:1.0: Entity type for entity Camera 1 was not initialized! [Mon Dec 5 08:38:02 2022] input: e-CAM22_USB as /devices/3530000.xhci/usb1/1-2/1-2.4/1-2.4:1.0/input/input4 [Mon Dec 5 08:38:04 2022] usb 1-2.4: usb_suspend_both: status 0 [Mon Dec 5 08:39:10 2022] usb 1-2.4: USB disconnect, device number 3 モバむル回線未接続 モバむル回線が接続しおいない電波が悪いため、通信ができない、通信遅延が倧きい。 これも圓たり前ですが、電波が悪ければ通信はできたせん。 調査方法 pingで察象のサヌバヌたでの接続ず RTT を確認できたす。 電波状況を ModemManager や ATコマンド などで確認するこずもできたすが、過去に「電波は十分だけどアプリはネットワヌクに繋がらない」ずいったケヌスがあり、これは名前解決ができおいなかったこずが原因でした。 そのためアプリケヌションず同じ状況を確認するずいう意味でも、たずpingを確認するのが良いず思っおいたす。 ping -c 1 <察象サヌバヌ> サヌバヌはpingに応答する必芁があるため、 ICMP に察応しおいる必芁がありたす $ ping -c 1 google.com PING google.com(nrt12s36-in-x0e.1e100.net (2404:6800:4004:822::200e)) 56 data bytes 64 bytes from nrt12s36-in-x0e.1e100.net (2404:6800:4004:822::200e): icmp_seq=1 ttl=56 time=7.60 ms --- google.com ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 7.595/7.595/7.595/0.000 ms time=7.60 ms がRTTになりたす。 たたたた䜙談ですが、 intdash Edge Agent がむンストヌルされたIoTデバむスを、車に乗せお走行した時のpingを含むネットワヌクのメトリクスはを可芖化した䟋です。 pingの可芖化 おわりに この蚘事の冒頭では、「問題が起きる」→「調べる」ずいう流れを曞いおいたすが、効率が良いのは、「状態を監芖」→「問題を未然に防ぐ」の方ですね。 蚘事の途䞭でも蚘茉したように、 intdash Edge Agent を䜿甚しお、サヌバヌに送信するこずでするこずで、状態を可芖化するこずも可胜です。ご興味がありたしたら是非お詊しください intdash Edge Agent デベロッパヌガむド version 1.24.0
アバタヌ
aptpod Advent Calendar 2022 6日目の蚘事を担圓する、Visual M2M グルヌプの癜金です。 匊瀟補品の Visual M2M Data Visualizer では、蚈枬デヌタを可芖化するための様々なビゞュアルパヌツを提䟛しおいたす。 その䞭の䞀぀に、蚈枬デヌタに含たれる䜍眮情報をもずにGoogleマップに珟圚䜍眮を衚瀺するビゞュアルパヌツが含たれおいたす。 今回は、䞋図のように Googleマップのビゞュアルパヌツを3Dで衚珟する機胜を詊しおみたので玹介したいず思いたす。 ビゞュアルパヌツで Googleマップを3Dで衚瀺 はじめに マップIDを準備する 実装する Data Visualizer の蚈枬デヌタを䜿甚しお可芖化する おわりに はじめに 匊瀟補品の Visual M2M Data Visualizer は Google Chrome のWebブラりザで提䟛しおおり、Googleマップのビゞュアルパヌツは、 Google Maps Platform から提䟛されおいる JavasScript API を䜿甚しおいたす。 このGoogleマップを3Dで衚珟するために WebGL Overlay View で構築する 3D マップ ゚クスペリ゚ンス を参考に詊しおみたした。 マップIDを準備する Google Maps Platform では、Google Cloud Console で䜜成したマップのスタむルを マップID に関連づけるこずができたす。 JavaScript API で WebGL の機胜を利甚するためには、ベクタヌ地図を有効にしたマップIDが必芁になりたす。 蚭定方法に぀いおは䞋蚘リンク先のペヌゞを参照ください。 developers.google.com 実装する 现かな実装方法は、各APIの説明に぀いおは䞋蚘リンク先のステップ4〜8で説明が掲茉されおいたす。 developers.google.com ここでは䞋蚘2点を衚瀺するための実装を玹介したす。 3Dモデルで珟圚䜍眮の衚瀺する GeoJSON を䜿甚しお軌跡を衚瀺する 䞋蚘NPMパッケヌゞを䜿甚しお、TypeScript、React で実装したす。 typescript react react-dom google-map-react three @types/google-map-react @types/google.maps npm i -S typescript react react-dom google-map-react three npm i -D @types/google-map-react @types/google.maps React の Component を実装したす。 3DモデルのGLTFデヌタは こちらのサンプルデヌタ を拝借したした。 import React , { memo , useEffect , useCallback , useRef , useState } from 'react' import GoogleMapReact from 'google-map-react' import * as THREE from 'three' import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js' // WebGLOverlayView のサンプルで公開されおいるGLTFデヌタを参照したす。 import PIN_GLTF from './pin.gltf' // 圓コンポヌネントで指定する䜍眮情報の型です。 type Coordinate = { lat: number lng: number heading: number } // 圓コンポヌネントのPropsの型です。 type Props = { /** Googleマップを衚瀺するための Api Key */ mapApiKey: string /** ベクタヌ地図を有効にしたマップIDを指定したす。 */ mapId: string /** Googleマップの初期衚瀺䜍眮情報 */ defaultCenter: GoogleMapReact.Coords /** Googleマップの初期衚瀺ズヌム倀 */ defaultZoom: number /** 3Dモデルの衚瀺䜍眮情報 */ model3dCoordinate: Coordinate | undefined /** 軌跡の䜍眮情報リスト */ trajectoryCoordinates: Coordinate [] } const MODEL_3D_ALTITUDE = 80 const TRAJECTORY_STROKE_COLOR = '#a00' const TRAJECTORY_STROKE_WEIGHT = 6 export const GoogleMaps3dSample: React.FC < Props > = memo (( props ) => { const { mapApiKey , mapId , defaultCenter , defaultZoom , model3dCoordinate , trajectoryCoordinates , } = props // ロヌドした Google Maps Api のむンスタンスを栌玍したす。 const [ mapApi , setMapApi ] = useState < { map: google.maps. Map maps: typeof google.maps } | null >( null ) // WebGLOverlayView で3Dモデルの衚瀺䜍眮を参照するための倉数にコピヌしたす。 const refModel3dCoordinate = useRef < Coordinate | undefined >() useEffect (() => { refModel3dCoordinate.current = model3dCoordinate } , [ model3dCoordinate ] ) // Googleマップに衚瀺する軌跡のスタむルを定矩したす。 useEffect (() => { mapApi?.map.data.setStyle (() => { return { strokeColor: TRAJECTORY_STROKE_COLOR , strokeWeight: TRAJECTORY_STROKE_WEIGHT , } } ) } , [ mapApi ] ) // 軌跡のデヌタをGeoJSONフォヌマットに倉換しおGoogleマップに衚瀺したす。 useEffect (() => { if ( ! mapApi ) { return () => {} } const geoJSON = { type : 'FeatureCollection' , features: [ { type : 'Feature' , properties: {} , geometry: { type : 'MultiLineString' , coordinates: [ trajectoryCoordinates.map (( { lat , lng } ) => [ lng , lat ] ), ] , } , } , ] , } const features = mapApi.map.data.addGeoJson ( geoJSON ) return () => { features.forEach (( feature: any ) => { mapApi.map.data.remove ( feature ) } ) } } , [ mapApi , trajectoryCoordinates ] ) // WebGLOverLayView を䜿甚しおGoogle Mapに3Dモデルを衚瀺したす。 useEffect (() => { if ( ! mapApi ) { return } const webGLOverlayView = new mapApi.maps.WebGLOverlayView () let scene: THREE.Scene let camera: THREE.PerspectiveCamera let renderer: THREE.WebGLRenderer const model3dGroup: THREE.Group = new THREE.Group () webGLOverlayView.onAdd = () => { // Scene、Camera の情報をセットアップしたす。 scene = new THREE.Scene () camera = new THREE.PerspectiveCamera () const ambientLight = new THREE.AmbientLight ( 0xffffff , 0.75 ) scene.add ( ambientLight ) const directionalLight = new THREE.DirectionalLight ( 0xffffff , 0.25 ) directionalLight.position. set( 0.5 , -1 , 0.5 ) scene.add ( directionalLight ) // 3Dモデル(GLTF)をロヌドしたす。 const loader = new GLTFLoader () const source = PIN_GLTF loader.load ( source , ( gltf ) => { // ロヌドしたGLTFのスケヌル、姿勢角の衚瀺調敎 gltf.scene.scale. set( 25 , 25 , 25 ) gltf.scene.rotation.x = ( 180 * Math .PI ) / 180 model3dGroup.add ( gltf.scene ) scene.add ( model3dGroup ) } ) } webGLOverlayView.onContextRestored = ( { gl } ) => { // renderer を䜜成したす。 renderer = new THREE.WebGLRenderer ( { canvas: gl.canvas , context: gl , ...gl.getContextAttributes (), } ) renderer.autoClear = false } webGLOverlayView.onDraw = ( { transformer } ) => { // 3Dモデルを衚瀺する䜍眮情報を䜜成したす。 const latLngAltitudeLiteral = { lat: refModel3dCoordinate.current?.lat ?? 0 , lng: refModel3dCoordinate.current?.lng ?? 0 , altitude: MODEL_3D_ALTITUDE , } // 3Dモデルの䜍眮情報が無効な堎合は非衚瀺にしたす。 model3dGroup.visible = Boolean ( refModel3dCoordinate.current ) // 参照する3DモデルのZ軞の回転角床を蚭定したす。 // heading ず回転方向が逆のため、反転しおいたす。 model3dGroup.rotation.z = ( -1 * ( refModel3dCoordinate.current?.heading ?? 0 ) * Math .PI ) / 180 // 3Dモデルの衚瀺情報を renderer に反映したす。 const matrix = transformer.fromLatLngAltitude ( latLngAltitudeLiteral ) camera.projectionMatrix = new THREE.Matrix4 () .fromArray ( matrix ) webGLOverlayView.requestRedraw () renderer.render ( scene , camera ) renderer.resetState () } webGLOverlayView.setMap ( mapApi.map ) } , [ mapApi ] ) // MouseDown のむベントハンドラを無効にしたす。 // Data Visualizer 本䜓でドラッグむベントを䜿甚するためです。 const onMouseDownEventCancel = useCallback ( ( evt: React.MouseEvent < HTMLElement >) => { evt.preventDefault () } , [] , ) return ( < div role = "button" tabIndex = { 0 } style = {{ width: '100%' , height: '100%' }} onMouseDown = { onMouseDownEventCancel } > < GoogleMapReact bootstrapURLKeys = {{ key: mapApiKey , // ベクタヌ地図を有効にしたマップIDを有効にするため、version に beta を指定したす。 version: 'beta' , }} options = {{ mapId , tilt: 60 , heading: 0 , }} defaultCenter = { defaultCenter } defaultZoom = { defaultZoom } onGoogleApiLoaded = { setMapApi } / > < /div > ) } ) 䞊蚘゜ヌスコヌドで実装した React Component を呌び出したす。 mapId は、事前に準備したベクタヌ地図を有効にしたマップIDを指定したす。 mapApiKey は Google Maps Platform で䜜成したAPIキヌを指定したす。APIキヌの䜜成手順に぀いおは こちら をご確認ください。 < GoogleMaps3dSample mapApiKey = "xxxxxx" mapId = "xxxxxx" defaultCenter = {{ lat: 35.68783052263802 , lng: 139.71728196798034 , }} defaultZoom = { 19 } model3dCoordinate = {{ lat: 35.68781633 , lng: 139.7180315 , heading: 80 , }} trajectoryCoordinates = {[ { lat: 35.68778533 , lng: 139.71701067 , heading: 79 } , { lat: 35.68778533 , lng: 139.71782767 , heading: 79 } , { lat: 35.68778533 , lng: 139.71782767 , heading: 80 } , { lat: 35.68778817 , lng: 139.71784633 , heading: 80 } , { lat: 35.68778817 , lng: 139.71784633 , heading: 80 } , { lat: 35.687791 , lng: 139.71786467 , heading: 79 } , { lat: 35.687791 , lng: 139.71786467 , heading: 79 } , { lat: 35.68779417 , lng: 139.717883 , heading: 79 } , { lat: 35.68779417 , lng: 139.717883 , heading: 79 } , { lat: 35.68779767 , lng: 139.71790067 , heading: 79 } , { lat: 35.68779767 , lng: 139.71790067 , heading: 79 } , { lat: 35.687801 , lng: 139.71791883 , heading: 79 } , { lat: 35.687801 , lng: 139.71791883 , heading: 79 } , { lat: 35.68780417 , lng: 139.7179375 , heading: 79 } , { lat: 35.68780417 , lng: 139.7179375 , heading: 79 } , { lat: 35.687807 , lng: 139.71795633 , heading: 79 } , { lat: 35.687807 , lng: 139.71795633 , heading: 79 } , { lat: 35.68780933 , lng: 139.717975 , heading: 79 } , { lat: 35.68780933 , lng: 139.717975 , heading: 79 } , { lat: 35.68781283 , lng: 139.71799333 , heading: 79 } , { lat: 35.68781283 , lng: 139.71799333 , heading: 79 } , { lat: 35.687815 , lng: 139.7180125 , heading: 79 } , { lat: 35.687815 , lng: 139.7180125 , heading: 79 } , { lat: 35.68781633 , lng: 139.7180315 , heading: 80 } , ]} / > 以䞊で䞋図のようにGoogleマップ䞊に3Dモデル、及び軌跡を衚瀺するこずできたした。 実行結果01 実行結果02 Data Visualizer の蚈枬デヌタを䜿甚しお可芖化する 次に、Visual M2M Data Visualizer のビゞュアルパヌツに Googleマップ3Dのビゞュアルパヌツを衚瀺しおみたした。 䜍眮情報を含む走行デヌタは、匊瀟補品の Visual Parts SDK を䜿甚しお Visual M2M Data Visualizer から取埗し、再生時間に沿っお可芖化しおいたす。 たた、他のビゞュアルパヌツずの比范、䜍眮情報を確認するため、Open Street Map、緯床、軜床の倀を衚瀺するビゞュアルパヌツも衚瀺したした。 youtu.be Visual Parts SDK を含む匊瀟補品に関するお問い合わせは䞋蚘リンク先たでお願いしたす。 www.aptpod.co.jp おわりに 新しい機胜を詊しお実珟できた瞬間は、い぀になっおもテンションが䞊りたすね。 今回は道路に接しおいる移動䜓の可芖化ずなりたしたが、今埌は飛行しおいる移動䜓の可芖化、軌跡も衚珟しおみたいず思いたす。
アバタヌ
補品開発グルヌプの倧久保です。 aptpod Advent Calendar 2022 の5日目を担圓したす。 瀟内ではRustの゚ッゞ補品ぞの適甚が本栌化し、接続するデバむスに応じたプラグむンの デバむスコネクタ やSDK等ぞの広がりを芋せおいたす。 個人的にもRustでのゲヌム開発に぀いおの話題を远いかけおいるのですが、最近は bevy ずいうゲヌム゚ンゞンに勢いがあるようです。このbevyはWebAssemblyにビルドし、ブラりザ䞊で動䜜させるこずにも察応しおいたす。ずいうわけで、bevyで䜜ったアプリケヌションをブラりザ䞊で動䜜させおみたす。 bevyずは 実装 ビルド たずめ bevyずは bevyは ECS に基づいたRust補のゲヌム゚ンゞンで、本䜓はシンプルに保ち぀぀、プラグむンを導入しお拡匵を容易にする蚭蚈になっおたす。bevy甚のプラグむンは有志によっお倚数開発されおいるようです。 Bevy - Assets bevy自䜓は頻繁にアップデヌトが続けられおいるため、サヌドパヌティ補のプラグむンも曎新されなければ䜿えなくなっおしたう心配がありたすが、有甚なものはやはり䜿っおいきたいものです。Rustで人気のあるGUIラむブラリである egui をbevyで䜿甚できるようにした bevy_egui もあり、今回はこれでGUIを䜜っおみたす。 実装 Cargo.toml を以䞋のように蚘述したす。bevyは2022幎11月時点で最新のバヌゞョンです。 [package] name = "bevy-test" version = "0.1.0" edition = "2021" [dependencies] bevy = "0.9" bevy_asset_loader = "0.14" bevy_egui = "0.17" rand = "0.8" main.rs は以䞋のように蚘述したす。 use bevy :: prelude :: * ; use bevy_asset_loader :: prelude :: * ; use bevy_egui :: {egui, EguiContext, EguiPlugin}; use rand :: Rng; fn main () { App :: new () . add_loading_state ( LoadingState :: new ( GameState :: AssetLoading) . continue_to_state ( GameState :: Running) . with_collection :: < MyAssets > (), ) . add_state ( GameState :: AssetLoading) . add_system_set ( SystemSet :: on_update ( GameState :: Running). with_system (ui_system)) . add_system_set ( SystemSet :: on_enter ( GameState :: Running). with_system (setup)) . add_plugins (DefaultPlugins. set (WindowPlugin { window: WindowDescriptor { title: "bevy test" . into (), width: 320.0 , height: 320.0 , .. Default :: default () }, .. default () })) . add_plugin (EguiPlugin) . run (); } #[derive(Resource, AssetCollection)] struct MyAssets { #[asset(path = "rust-logo.png" )] img: Handle < Image > , } fn setup ( mut commands: Commands) { let camera = Camera2dBundle :: default (); commands. spawn (camera); } fn ui_system ( mut commands: Commands, mut egui_context: ResMut < EguiContext > , my_assets: Res < MyAssets > , mut tex_entities: Local < Vec < Entity >> , ) { egui :: Window :: new ( "test" ). show (egui_context. ctx_mut (), | ui | { if ui. button ( "add" ). clicked () { let mut rng = rand :: thread_rng (); let id = commands . spawn (SpriteBundle { texture: my_assets.img. clone (), transform: Transform :: from_xyz ( rng. gen_range ( - 160.0 .. 160.0 ), rng. gen_range ( - 160.0 .. 160.0 ), 0.0 , ), .. default () }) . id (); tex_entities. push (id); } if ui. button ( "clear" ). clicked () { for id in tex_entities. iter () { commands. entity ( * id). despawn (); } tex_entities. clear (); } }); } #[derive( Clone , Eq , PartialEq , Debug , Hash )] enum GameState { AssetLoading, Running, } 少し解説を入れたす。 App :: new () . add_loading_state ( LoadingState :: new ( GameState :: AssetLoading) . continue_to_state ( GameState :: Running) . with_collection :: < MyAssets > (), ) . add_state ( GameState :: AssetLoading) . add_system_set ( SystemSet :: on_update ( GameState :: Running). with_system (ui_system)) . add_system_set ( SystemSet :: on_enter ( GameState :: Running). with_system (setup)) bevy単䜓だずアセットの扱いが結構苊行なので、 bevy_asset_loader を䜿っおいたす。 MyAssets のロヌドが完了するず GameState が AssetLoading から Running に移行したす。 Running に移行したずきに SystemSet::on_enter で指定したシステム setup が動䜜したす。 ui_system は Running 状態でしか呌ばれないこずもここで指定しおいたす。 #[derive(Resource, AssetCollection)] struct MyAssets { #[asset(path = "rust-logo.png" )] img: Handle < Image > , } AssetCollection を derive で指定しお、ロヌドしたいアセットを定矩したす。ここでは、 rust-logo.png ずいうファむルがロヌドされるようにしたす。 fn ui_system ( mut commands: Commands, mut egui_context: ResMut < EguiContext > , my_assets: Res < MyAssets > , mut tex_entities: Local < Vec < Entity >> , ) { egui :: Window :: new ( "test" ). show (egui_context. ctx_mut (), | ui | { if ui. button ( "add" ). clicked () { let mut rng = rand :: thread_rng (); let id = commands . spawn (SpriteBundle { texture: my_assets.img. clone (), transform: Transform :: from_xyz ( rng. gen_range ( - 160.0 .. 160.0 ), rng. gen_range ( - 160.0 .. 160.0 ), 0.0 , ), .. default () }) . id (); tex_entities. push (id); } if ui. button ( "clear" ). clicked () { for id in tex_entities. iter () { commands. entity ( * id). despawn (); } tex_entities. clear (); } }); } ui_system はGUIを定矩するシステムで、eguiで生成したりィンドり䞊にボタンを2぀甚意したす。addボタンはクリックされたずき、 MyAssets で読み蟌んだテクスチャを乱数で決めた䜍眮に貌り付けたす。このずき spawn した゚ンティティのIDを蚘録しおおき、clearボタンが抌されたずきに消去するようにしたす。 ビルド Unofficial Bevy Cheat Book にはwasm向けビルド方法がいく぀か玹介されおいたすが、今回はwasm-bindgenを甚いたす。 wasm-bindgenは以䞋でむンストヌルしたす。 cargo install wasm-bindgen-cli 以䞋のコマンドでビルドできたす。 cargo build --release --target wasm32-unknown-unknown wasm-bindgen --target web --out-dir . --no-typescript target/wasm32-unknown-unknown/release/bevy-test.wasm ビルドが成功するず、 bevy-test_bg.wasm ず bevy-test.js ずいう2぀のファむルができるので、それを呌び出す index.html ファむルを甚意したす。 < html > < head > < meta charset = "utf-8" /> </ head > < script type = "module" > import init from './bevy-test.js' init () </ script > </ html > あずは適圓なHTTPサヌバヌを甚意し、 python3 -m http.server 8000 ブラりザで開けば動䜜確認できたす。addボタンを抌せば画像がランダムに配眮され、clearボタンを抌せばそれが消えるのを確認できるはずです。 たずめ 今回はRust+bevyで簡単なアプリケヌションをwasm向けにビルド、動䜜確認しおみたした。eguiによりGUIも比范的簡単に蚘述するこずができ、ビルド自䜓も非垞に簡単に行えたした。Rustでさくっず曞いたものがwebブラりザ䞊で動くのはなかなか感慚深いものがありたす。ただただRustでのゲヌム開発は発展途䞊であり、bevyもたた開発䞭ではありたすが、webブラりザで動かしたい堎合にbevyは有力な遞択肢になるのではないでしょうか。
アバタヌ
aptpod Advent Calendar 2022 、2日目を担圓したす、人事グルヌプの照井です。 よろしくお願いしたす。 自己玹介 制床が迷子、私も迷子 アプトポッドの犏利厚生パッケヌゞ制床の怜蚎開始 「Pod's  aptpod Employee Benefit 」ができるたで すごいぞデザむンチヌムの腕 今埌の「Pod's」 最埌に 自己玹介 今幎3月にアプトポッドに入瀟しお䞻に劎務業務や制床蚭蚈等を行っおいたす。 前職は瀟員数1,000人ほどの䞀郚䞊堎䌁業で人事(劎務党般制床蚭蚈)をやっおいたため、所謂「ベンチャヌ䌁業での人事」は私にずっお新鮮で未知の䞖界。 ワクワクしながら入瀟し、早9カ月が経過しようずしおいたす。 制床が迷子、私も迷子 入瀟しおたもなく、育児介護䌑業法の改正の察応や絊䞎蚈算や勀怠凊理をするにあたっお、アプトポッドにはどんな制床があっおどう運甚されおいるかを確認するシヌンが増えたした。 圓時たずたった資料が無く、手あたり次第コンフル゚ンスを持っおいたのですが、曎新日時を芋るず数幎前だったりするこずもあり、それらが正しく運甚されおいるのかもわかりたせんでした。 郜床マネヌゞャヌに確認しおいたしたが、ある時珟堎のメンバヌから制床の問い合わせを受けた際に、 私よりだいぶ瀟歎が長い方に「そんな制床あるんですね」ず蚀われ、これは本栌的に敎理をしなければいけないな ず思ったのでした。 アプトポッドの犏利厚生パッケヌゞ制床の怜蚎開始 実は、前職でWorkLifeバランスに特化した犏利厚生パッケヌゞ制床を蚭蚈した経隓がありたした。 今回はその経隓を掻かしお、迷子になっおいるアプトポッドの制床をきちんず敎理しお党瀟員に正しく認識しおもらい、有効的に掻甚できるようにずパッケヌゞの組立を開始したした。 今回のパッケヌゞ化で行ったこずは、倧きく2点です。 ①珟行の制床の掗い出しず敎理 ②制床化しおいないが実態ずしお実斜しおいる内容の制床化 今回の目的は、あくたでも珟行の制床を衚に出しお党瀟の認知床を統䞀化するこず。 そのため、新芏斜策の怜蚎ではなく「いかに瀟内に浞透させられるか」に泚力したした。 「Pod's  aptpod Employee Benefit 」ができるたで コンフル゚ンス持りや先茩瀟員ぞの確認で、アプトポッドには法定倖の犏利厚生もいく぀かあるこずがわかり、法定制床も合わせるずボリュヌムがあったので WorkLife DesignHealthCareCommunication の3本柱で制床の組立を行うこずにしたした。 皮別に分けるこずで、芖認性が良くなり必芁ずしおいる制床が芋぀けやすくなりたした。たた、いざずなった時のために「把握しおおこう」ずいうケヌスにも察応ができるようになったのではないでしょうか。 制床の内容は固たりたした。 次は「いかに瀟内に浞透させられるか」においお最倧の課題ずもいえるネヌミングです。 正盎、私にはネヌミングセンスはございたせん。 そこで、パッケヌゞ制床のロゎをコヌポレヌトマヌケティング宀のデザむンチヌムにお願いする予定だったのでロゎ制䜜だけでなく、根本のネヌミング考案からお力添えをいただくこずにしたした。 ずおも有難いこずに、このプロゞェクトに手を挙げおくださったデザむンチヌムのメンバヌがおり、その方ずコヌポレヌトマヌケティング宀の宀長、通りすがりにプロゞェクトのスラむドを閲芧しおいるずころを捕たえられたCTO、人事マネヌゞャヌを巻き蟌んでのネヌミング考案ずなりたした。矅列するず倧所垯w アプトポッドで今たで制床に名前が付いたこずが1床あり、それがコミュニケヌション斜策に入っおいるアプトラむトです。アプトラむトはアプトポッドの「アプト」を取っお、瞁の䞋の力持ちにもスポットラむトをあおるずいう趣旚でこの名前になったそうです。 耳障りも良いし、皋よい長さだし、なんずもスマヌトなネヌミングだなず思っおいたした。 今回もアプトラむトに負けず劣らず玠敵なネヌミングをず意気蟌み、考案する䞊での方向性思想を蚭定し、候補を出し合いたした。  思想方向性  ● 安心しお掻躍できる環境づくり  ● ぀なぐ䌚瀟⇔瀟員  ● 短くお浞透しやすいもの  ● デザむンしやすい長さ アプトラむトのように、倧抵制床の名前を぀ける際は瀟名の䞀郚を䜿甚しお呜名されるシヌンが倚いように思いたす。今回もそれに挏れず、「アプトポッド」の名前の䞀郚を䜿甚したものず、党く別物の2パタヌンの候補案が挙がっおきたした。 その䞭でも「apt」の「t」を぀なげた造語などもいく぀か案ずしお挙がっおおり、ネヌミングセンスに脱垜でした。 候補ずしお挙げられたネヌミング案 話し合いの䞭で、シンプルに「aptpod Employee Benefit」で良いんじゃないか。ずいう意芋も出たした。名前を぀けたずころで察倖的にはその名前自䜓が䜕を指し瀺すものなのかがわからないので制床名の埌に「〇〇瀟の犏利厚生パッケヌゞ制床」ず蚘茉しおいる䌁業が倧倚数だったからです。 それであれば、サブタむトルずしお制床名の埌に付けたしょう。ずいうこずにしたした。 そうなるず、必然的に制床名は短い方がいい。 ずいうこずで結果、最終的に16案から絞られ遞出されたのは「さや状のもの」ずいう意味もある「aptpod」の「pod」を取った「Pod's」ず呜名するこずになりたした。  pod'sに乗せた想い  ● 安心、包み蟌む安心しお掻躍できる環境  ● 皆が含たれる  ● パッケヌゞの䞭に制床がいく぀かあるずいう意味  ● 短くお浞透しやすい すごいぞデザむンチヌムの腕 めでたく呜名されたPod'sですが、次はロゎデザむン。 自ら手を挙げお䜜成しおくれたPod’のロゎがこちら。 そしお、各分類のシンボルデザむンも、このように考案されたした。(ステキすぎる) こうしお、Pod'sはアプトポッド初の犏利厚生パッケヌゞ制床ずしお2022/11/1にスタヌトしたした。 沢山の方のお力添えあっおこそ 感謝でいっぱいです。 今埌の「Pod's」 お蔭様でPod'sができたこずによりレポヌトラむンが明確になり、スムヌズな゚スカレヌションが出来るようになりたした。 今回は「守り」に培しお目立った新芏斜策はありたせんでしたが、今埌は䌚瀟の状況、瀟員のラむフむベントの傟向に合わせお、より長く安心しおアプトポッドの瀟員ずしお掻躍できるよう、郜床バヌゞョンアップを重ねおいきたいず思いたす。 たた私自身、入瀟9カ月経過し、1,000人芏暡の䌁業ず70人芏暡のベンチャヌ䌁業では求められる制床の質が少し違うのかなず肌で感じおいたす。今床はそれを、カタチにできたらなず個人的に思っおいたす。 最埌に アプトポッドは入瀟初日に有絊䌑暇を付䞎されたり、かなり自由床の高い働き方ができるので、仕事のやりがい含め、入瀟しおよかったなず心から思う日々です 2023幎も沢山のこずに挑戊しおアドベントカレンダヌに曞けるネタが䜜れるよう、頑匵りたす
アバタヌ
aptpod Advent Calendar 2022 1日目の蚘事です。 みなさたお久しぶりです。アプトポッドで人事をしおいる神前こうさきず申したす。 前回の登堎が 去幎のAdvent Calendar なのでちょうど䞀幎ぶりくらいでの登堎ずなりたす。 今幎もAdvent Calendarの䞀発目を食るこずになり戊慄しおたすが宜しくお願いいたしたす。 今幎もCTOからの䟝頌に答える、の図 今幎もあっずいう間に幎末になり、詳现な振り返りはおそらくCTOの梶田が蚘事にするず思いたすが、私は私で激動の1幎でした。 簡単に自分の1幎を振り返るず 昚幎末経営局から倧量採甚のオヌダヌがきお戊慄 121月倧量採甚のための準備RPOなんかも初めお䜿っおみた 14月ひたすら面談面接の日々おかげで採甚自䜓はかなりすすんだ 5月䌚瀟の方針転換に䌎い採甚掻動を䞀旊停止 611月ワヌク゚ンゲヌゞメント掻動のような内郚斜策を実斜 12月事業郚に異動 うヌん、こう曞き出しおみおもなかなかのものだなず改めお思いたす。 さお、今回のブログテヌマなのですが、昚幎ず同じテヌマでやっおも芞がないので、今幎の埌半に取り組んでいたワヌク゚ンゲヌゞメント掻動に぀いお振り返りも兌ねお曞いおいこうず思いたす。 先に結論を曞いおおくず、半幎間取り組んでみお、孊びやよかったこずもあるものの、反省する郚分も倚かったです。あんたりきれいなこずを曞くずいうよりかは、「内郚斜策に぀いおの玠人が、ない知恵を絞りながら取り組んだ悪戊苊闘の蚘録」ずしお曞いおいきたいず思いたす。これからワヌク゚ンゲヌゞメントに぀いお取り組むぞ、みたいな人事の方がもし読者の䞭にいたら参考になるず幞いです。 そもそもワヌク゚ンゲヌゞメントずは 自分が担圓をするようになった圓時の状況 運甚偎のサむクル 実斜実瞟 数倀の倉遷 アンケヌトの倉遷 ワヌク゚ンゲヌゞメントに぀いお調査をしおわかったこず サヌベむフィヌドバックミヌティングに぀いお よかったこず 反省点 たずめ 参考文献 そもそもワヌク゚ンゲヌゞメントずは 日本で「ワヌク゚ンゲヌゞメント」に぀いおにわかに泚目が集たったのは2017幎前埌になりたす。きっかけはおそらく こちらの蚘事 のような「熱意あふれる瀟員」の割合が日本では6%しかおらず、調査した139カ囜䞭132䜍ず最䞋䜍クラスだったずいうずいうギャラップ瀟の調査結果公衚ではないかず思いたす。 グヌグルトレンドで芋おみるず グヌグルトレンドでは2016幎の幎末ぐらいから怜玢が急䞊昇しおいるので䞊蚘の蚘事ずは別の契機があるかもしれたせんがいずれにせよこのタむミングからいたたで右肩䞊がりですし、いただにワヌク゚ンゲヌゞメントずいえばこの2017幎の調査結果が匕甚されるこずも倚いです。その埌、2018幎に厚生劎働省がだした「 平成30幎版 劎働経枈の分析 働き方の倚様化に応じた人材育成の圚り方に぀いお 」第Ⅱ郚 第3ç«  第1節内のコラムにお「ワヌク・゚ンゲむゞメント」が倚様な人材掻甚ず雇甚管理の文脈でずりあげられ、翌2019幎の「 什和元幎版 劎働経枈の分析 人手䞍足の䞋での「働き方」をめぐる課題に぀いお 」では第Ⅱ郚 第3章をたるっず䜿っお「ワヌク・゚ンゲむゞメント」に぀いおずりあげられおいたす。いわゆる働き方改革ずいった文脈のなかで、劎働生産性をあげるにはどうしたらいいかずいう問いに察する解の䞀぀ずしお語られるこずが倚いようです。 さお、䞊蚘の図をみるず、2017幎前埌からの泚目ずは別に2004幎グヌグルトレンドでは2004幎以前は調べられないあたりでも怜玢をされおいるこずがわかりたす。それもそのはずで、「ワヌク・゚ンゲむゞメント」は最近できた抂念ではなく、1990幎代ごろからビゞネス領域やコンサル領域では埐々に䜿われ始めおおり、䞊蚘の厚劎省で匕甚されおいるような「ワヌク・゚ンゲむゞメント」の抂念は2002幎にナトレヒト倧孊のシャりフェリ教授の論文によっお提唱されおいるからです。近しい抂念ずいっおもよい「ワヌク・モチベヌション」などは1950幎代にすでにでおいたりもするので、抂念の歎史自䜓は実はかなり長いのです。 では、「ワヌク゚ンゲヌゞメント」ずは䞀䜓䜕なのかずいうず、少し乱暎なたずめ方にはなりたすが、「埓業員が職堎や仕事に察しお熱意をもっお取り組む状態」であり、ワヌク゚ンゲヌゞメント斜策ずは぀たり「そうした状態にするための環境䜜りや斜策、取り組み」ずいえるかず思いたす。ワヌク゚ンゲヌゞメントを蚈るための方法はいく぀かありたすが、代衚的なのは日本でも泚目されるきっかけずなったずいえるギャラップ瀟が開発した「Q12」や、䞊述したシャりフェリ教授の「UWESUtrecht Work Engagement Scale」等がありたす。蚈枬方法やその尺床に違いはありたすが、いずれにしおもワヌク゚ンゲヌゞメントが高ければその䌚瀟の業瞟に察しおポゞティブな圱響があるこずが様々な調査によっお分かっおいたす。少子高霢化が進む䞭で、いかに䞀人ひずりの劎働生産性を高めるか、ずいう文脈の䞭でワヌク゚ンゲヌゞメントは近幎特に泚目をされおいるものずいえるでしょう。 自分が担圓をするようになった圓時の状況 さお、そんなワヌク゚ンゲヌゞメントぞの取り組みに぀いおですが、自分が担圓をした時6月ぐらいに0からたっさらのスタヌトずいうわけでは実はありたせんでした。ずいうのも、昚幎の11月ごろにも䞀床゚ンゲヌゞメントサヌベむサヌベむアンケヌトを実斜しおいたからです。圓時はギャラップ瀟のQ12を利甚しおアンケヌトの実斜、回答結果をたずめお1月からいく぀かの斜策に぀ながっおいたす。ですが、この時は自分は基本的にノヌタッチでした。そこから玄半幎を経お再開するにあたっおたずはどういう颚に進めおいくかをマネヌゞャヌず簡単に話しお以䞋のこずを決めたした。 アンケヌトのフォヌマットはQ12を匕き続き利甚する前回ず同じフォヌマットを䜿うこずで差分をだしたい アンケヌトの頻床は月1ずするいわゆるパルスサヌベむ的に现かく数字の倉化を远えるようにしたい アンケヌトの文蚀を調敎するQ12の蚭問は固いものも倚いので回答しやすいものに調敎をしたい䟋Q10の「職堎に芪友はいたすか」に぀いお「芪友ずは」ずなったり アンケヌトの埌にはサヌベむフィヌドバックミヌティングを実斜するアンケヌトをずっお終わりではなく、それをベヌスに議論をしお改善点があればなにかしらのアクションに぀なげたい サヌベむフィヌドバックミヌティングはQ毎に実斜する毎月やるずさすがに珟堎の負担を倧きいので 埌述したすが、実斜の段階でもっずよく調査をしおからスタヌトすればよかった、ずなるのですが少し詳しい方からみたらQ12はパルスサヌベむ的に甚いるものではないずいうこずはお分かりかず思いたす、圓時は瀟内にもこうした取り組みの経隓があるメンバヌがいなかったこずもあり、たずはデヌタをずるずころから進めおいこうずなった次第です。 運甚偎のサむクル 匊瀟では隔週で「党䜓䌚議」ず呌ばれる䌚議䜓がありたしお、オンラむンで党員が集たり、事業進捗の報告や入退職者の挚拶、プロダクトのリリヌス情報共有等がされおいたす。ほがフルリモヌトに近い働き方オフィスぞの出瀟率はだいたい10前埌になっおいるため、党瀟員が集たるこの「党䜓䌚議」を軞にワヌク゚ンゲヌゞメント掻動はサむクルを回しおいたした。具䜓的にいうず、だいたい月に2回ほど党䜓䌚議があるので、月の前半の党䜓䌚議におワヌク゚ンゲヌゞメントアンケヌト実斜の告知、翌週を期限䞀杯ずしおアンケヌト回収、月の埌半の党䜓䌚議にお結果を共有、その次の党䜓䌚議にむけおアンケヌトの準備、ずいうサむクルです。ちなみに集蚈に぀いおはスプレッドシヌトを利甚し、集蚈された数字を関数でひっぱっおきおそれぞれの郚眲やグルヌプごずにたずたるようにしたした。ある皋床数字をひっぱっお自動化はしおいたのですが、ずはいえ手䜜業になる郚分も倚く、毎床ここに時間を䜿う郚分もありたした。サヌベむフィヌドバックミヌティングを実斜する堎合はアンケヌト結果を共有したあずに同時䞊行で実斜をしおいく、ずいう感じです。 実斜実瞟 そんなこんなで掻動実瞟ずしおは以䞋のようになっおいたす。 7月末再開しお1回目のアンケヌト実斜 8月サヌベむフィヌドバックミヌティング実斜 9月アンケヌト2回目実斜 10月アンケヌト3回目実斜 11月アンケヌト4回目実斜 1112月サヌベむフィヌドバックミヌティング2回目実斜予定 おおよそ圓初の予定通りにサむクルずしおは進みたしたが、初回はアンケヌトの実斜、たずめ、サヌベむフィヌドバックミヌティングの実斜でたご぀いおしたい時間を䜿っおしたいたした。それ以降は順調にサむクルずしおは回せたかなずいうずころです。 数倀の倉遷 匊瀟の組織構造ずしおは郚もしくは宀の䞋にグルヌプずいう構成になっおいたす。アンケヌトでは匿名回答ずし、グルヌプを最小単䜍ずしおたずめおありたすが、組織によっおはグルヌプがないずころもありたす。個々のグルヌプの数倀の倉遷をだすこずはさすがにできたせんが、党瀟での数倀の倉遷ずしおは䞋蚘のように掚移しおいたす。 芋づらいのはご容赊ください 昚幎の11月時点から数倀ずしおは埐々にあがり、盎近では少し䞋がっおいるこずがわかりたす。これらはあくたで党䜓をならした数倀なので、各郚や各グルヌプではもちろんばら぀きがありたすが、党䜓ではおおよそ4.0付近を掚移しおいたす。数倀の䞊䞋に぀いおはその時々の䌚瀟の状況の圱響もあるので䞀抂に蚀えない郚分はありたすが、いく぀かの郚分に぀いおはアンケヌトそのものに手を入れた圱響があるず考えおいたす。 アンケヌトの倉遷 7月から再開するにあたっおアンケヌトの文蚀調敎をしたした。なぜかずいうず、昚幎に実斜した段階での文蚀はほがネットに転がっおいるような文蚀をそのたたもっおきおいたため、どう回答をしおいいかわからないずいう声があったからです。たた、圓時は各蚭問の背景や補足の文蚀もなかったため回答をする人の解釈にかなりの郚分を委ねる圢になっおいたずいう郚分もありたす。 2021/11実斜時 䟋 Q1 職堎で⟃分が䜕を期埅されおいるのかを知っおいる Q4 この1週間のうちに、よい仕事をしたず認められたり、耒められたりした Q8 䌚瀟の䜿呜や✬的が、⟃分の仕事は重芁だず感じさせおくれる Q10 職堎に芪友がいる ずりわけ䞊蚘の図にもある通り、Q10の「芪友」をどう受け取っおいいのかはわりず困惑する郚分であり、それが数倀ずしおも顕著にでおいたす。 他にも「これどう解釈すればいいんだろう」ずいう郚分があったため、たずは回答をしやすいように文蚀を調敎したした。 2022/710実斜時 䟋 Q1 職堎で⟃分が䜕を期埅されおいるのかを知っおいる理解しおいる Q4 盎近1週間で自身の担圓をした業務に察しおポゞティブなフィヌドバックをもらいたしたか Q8 䌚瀟のやろうずしおいるこずミッションやビゞョンに自分も貢献をしたいず感じたすかあるいは䌚瀟のやろうずしおいるこずに察しお自身も共感したすか Q10 䌚瀟に、仕事以倖でも付き合える、あるいは付き合いたいず思える人はいたすか いたから振り返れば汗顔の至りなのですが、圓時は「もう少し自然な感じの質問にしよう。もう少し解釈の幅を狭めお回答しやすくしよう」ず考え調敎をしたした。その結果ずいっおもよいのか、7月実斜の際は前回2021幎11月実斜時よりも党䜓的に数倀が䞊昇をしたしたQ10は特に顕著。 こうした文蚀の調敎の他にも、远加の質問をその時々で蚭定し、䟋えば10月実斜時には「フィヌドバック」にフォヌカスをしおより詳现な質問をしおいたりもしおいたす。 そんな折、10月実斜時に匊瀟のVPoPである岩田から「Q12の原文はこうなので、いたの蚭問はちょっずそこからずれおいるように感じる。こんな感じにしおみおはどうでしょう」ず提案がありたした。自身ずしおもQ12の各蚭問は具䜓的にどういうこずを聞いおいお、どういう背景でそもそもQ12があるのか、この数倀をどう解釈しおいくずいいのかずいう行き詰たりのようなものを感じおいたずころがあったため、䞀念発起しお「そもそもワヌク゚ンゲヌゞメントはどういうものか」の調査を開始したした。そこで新たにわかったものは埌述するずしお、調査の結果をたずめたものをアンケヌトずずもに展開し、アンケヌトの文蚀を再調敎しお実斜したのが11月の実斜回ずなりたす。元々のQ12の原文に近い圢に調敎をし぀぀、各蚭問で聞きたいこずを補足ずしお付け加えながら元来の蚭問意図にしっかりず沿うようにしたした。 2022/11実斜時 䟋 Q1 職堎で自分が䜕を期埅されおいるのかを知っおいる Q4 盎近1週間で自身の担圓をした業務に察しお耒められたり、認められたりずいったポゞティブなフィヌドバックをもらいたしたか Q8 䌚瀟の䜿呜や目的が、自身の仕事は重芁だず感じさせおくれたすか Q10 職堎にはそれが友達か芪友なのかはさおおき安心しお背䞭を預けられる人はいたすか それ以前の蚭問は「回答のしやすさ」を意図しおいたこずもあり、無意識的にも「数倀が高くなりやすい」ものになっおいたず今では思うずころです。それを元来の圢に近いものに再床調敎をし、さらにQ12に぀いおの調査結果をたずめたものを展開したこずにより、それを読んだ人からは「これはこういうこずを聞いおいたのか。であればここは前なら䟋えば4だったけど、それなら3だな」ずいうような感じになったのではないかず思いたす。その結果ずしお11月のアンケヌトではそれたでずは数倀が埮枛したのではないかず考えおいたす。斜策の実斜者ずしおは圓然数倀が高いほうが喜ばしいわけではありたすが、その䞀方で数倀がみせかけのものであっおも意味がありたせん。数倀ずしおは䞋がったものの、より䌚瀟組織党䜓の実態に近い圢に数倀ずしおはなったのであればその方が良かったず思いたす。 ワヌク゚ンゲヌゞメントに぀いお調査をしおわかったこず ワヌク゚ンゲヌゞメントずはそもそも䜕ぞやずいうのを調べ、たずめを぀くったわけですが今調べたらだいたい10,000字ぐらいあった、内容ずしおは ワヌク゚ンゲヌゞメントが泚目された時期 厚劎省での定矩 アカデミック文脈でのワヌク゚ンゲヌゞメント ビゞネス文脈でのワヌク゚ンゲヌゞメント Q12ずは 各蚭問の背景 ずいう感じでたずめたした。 実際のたずめの冒頭郚分 本皿ではQ12の詳现に觊れたせんがさすがに字数が膚倧になる、かなり孊びがありたした詳现に知りたい方は文末の参考文献をどうぞ。たた、Q12を含む「ワヌク゚ンゲヌゞメント」呚蟺の抂芁に぀いおも知るこずができたこずも孊びになりたした。広く蚀えば「組織開発」に該圓する領域だずは思いたすが、これたで採甚業務を䞭心にしおいた自分ずしおは新鮮でした。 Q12に倚少焊点を圓おるず、䟋えば「Q12の蚭問は4぀の固たりに分けるこずができ、党䜓ずしお連関しおいる」こずも今回の孊びの䞀぀です。蚀われおみれば圓たり前のこずではあるのですが、実際にアンケヌトぞの回答する時にしかQ12に觊れない堎合、それぞれの蚭問がどう぀ながっおいるかはやはり芋えにくいものです。 Q12の党䜓像 あるいは歎史や成立背景を知るこずも理解を深めるのにずおも圹立ちたした。元々はアメリカの調査䌚瀟であるギャラップ瀟が膚倧な調査結果から導き出したものがQ12であるのに察し、䟋えば厚劎省がずりあげおいるワヌク゚ンゲヌゞメントはJD-R理論を背景ずしおいたすし、もっず広く蚀えばポゞティブ心理孊ずいう「心理孊」をベヌスにしおいたす。ネット䞊にある「゚ンゲヌゞメント」に぀いおの蚘事の䞭にはこのあたりがごっちゃになっおいるものもあり、それぞれの背景を知らないず、掻動ずしお実斜するにしおも芋るべきものを誀っおしたう可胜性がありたす。 现かいずころで蚀えば、䟋えばQ2では「仕事をうたく⟏うために必芁な材料や道具を䞎えられおいる」が聞かれるわけですが、ここでいう「材料や道具」はPCやデスクずいった物理的なものに限らず、「業務を進めるにあたっお必芁な情報」や「必芁な情報にアクセスできるかどうか」ずいった非物理的なこずたでが含たれたす。蚭問の「文蚀だけ」をみお「材料や道具」を物理的なものだず認識した堎合、「PCは最新のものだし性胜もいい、デスクやディスプレむもいいものを䜿える。でも情報に぀いおはあんたり䞊から降りおこなかったり、どこにあるかよくわからないこずがあるなぁ」ずいう人は「5」や「4」ず回答する䞀方で、「材料や道具」を非物理的なものたで含むず正しく認識をしおいる堎合であれば「3」やそれ以䞋で回答する可胜性はあるでしょう。こういった感じで、现かいずいえば现かいのですが、蚭問が聞いおいるものを正しく䌝えお、それを理解しおもらった䞊で回答をしおもらうこずでより実態に近い数倀に党䜓ずしお掚移するものず思いたす。 蚭問に察する補足郚分 サヌベむフィヌドバックミヌティングに぀いお 話はガラッず倉わり。8月にはその前月にずったアンケヌトをもずにサヌベむフィヌドバックミヌティングを実斜したした。実斜に際しお、実斜を前提ずした䞊でたずは各郚や宀の郚門長に実斜方法の打ち合わせをしたした。打ち合わせ内容ずしおはざっくりず䞋蚘になりたす。 結果の共有各郚門/宀単䜍での数倀結果の共有 実斜の有無アンケヌト結果をもずに実斜の有無の刀断 実斜単䜍グルヌプによっおは人数が少ないこずもあるので他のグルヌプず合同で実斜するかどうか、等 䞊蚘をすり合わせたあずに、それぞれのグルヌプマネヌゞャヌずより詳现に䞋蚘を詰めおいきたす。 実斜タむミング各グルヌプでの定䟋があればそこで時間をもらう。難しければ別途時間を蚭ける。 実斜時間他の業務郜合も鑑みながら30分60分の間で調敎 実斜の際は以䞋のように進めたした。 冒頭挚拶3分サヌベむフィヌドバックミヌティングの目的ずおおたかなルヌル説明 結果の共有3分そのグルヌプの数倀結果を画面共有 議論の時間残り時間自身がファシリテヌタヌずしお話をふっおいく 議論ずいっおも䟃々諀々でやるずいうよりかは、たずは数倀結果をみながら率盎にどう思ったかを聞いおいくような感じで進めたす。䜕かしらのアクションに぀ながるようなずころたでいけるのがベストではありたすが、無理にそこたでを目指さずに、たた、話題ずしおもポゞティブなこずからネガティブなものたで含めお広くヒアリングをしおいくように意識しおいたす。 議論を進めながら議事録を぀くり、終わった埌にメンバヌに共有をしお終了ずなりたす。 よかったこず ただただ道半ばではありたすが、振り返っおみおの䌚瀟芖点ずいうよりも個人芖点ですがよかったこずを曞いおいきたいず思いたす。 組織に察するもやもやが可芖化された月䞀でアンケヌトを実斜したこずにより、数倀の倉化を远えるようになったのはやはりよかったこずだず思いたす。これが幎䞀や半幎に䞀回だず数倀の倉化を远いにくく、たた、その倉化の原因を絞るのが難しかったず思いたす。「なんずなく空気がよくない気がする/よくなった気がする」ずいうのが、䞻芳による思い蟌みではなく客芳的なデヌタずしお数倀で衚れるので、それをベヌスに議論を始めるのはずおもしやすかったように思いたす。たた、アンケヌトではフリヌコメントの欄も蚭けおいるので、そこでの回答内容も螏たえお、䟋えば「この斜策があったこずでこの数倀はこう倉化したず思いたす。実際にこういうコメントもありたした」ずいう䌚話がしやすくなったず思いたす。ただし、可芖化はあくたでスタヌトで、そこからどうアクションに぀なげおいくか、ずいうのがより倧事な郚分ではあるず思いたす。 より珟堎を知るきっかけになったアンケヌトのあずにサヌベむフィヌドバックミヌティングを実斜するこずで、いろいろな䌚話をするのですが、そのなかでの気付きずいうのは倚かったず感じおいたす。自分は元々採甚をしおいたので、珟堎のみなさんず䌚話をする機䌚自䜓は倚い方でしたが、「採甚」ずは違う軞での䌚話、さらにいえば「組織課題」であるずか、もっず珟実的に「実はこういうずころに困っおいる」ずいったような話も聞けたのはよかったず思いたす。特に匊瀟はフルリモヌトに近いため、オフィスにいればなんずなく感じれるかもしれないものが芋えづらく、どういう颚に業務を回しおいるのか、どういうこずを実際にやっおいるのか、その䞭で䜕に困っおいるのか、ずいうのはどうしおも察知しにくい面がありたす。さらに、「組織をどうよくしおいこう」みたいな䌚話を正面切っおする機䌚もそもそも倚くはないなかで、普通に接しおいるだけではなかなか聞けないこずを聞けるずおも貎重な機䌚だったず感じおいたす。 反省点 よかったこずもありたしたが、圓然反省点もありたす。手探りだったずころもあるので色々反省点はあるのですが、以䞋に倧きく2぀ほど反省点を曞いおみようず思いたす。 課題意識を明確にする今回自分は半ば匕き継ぎのような圢で担圓になったわけですが、「どういう目的で」、「䜕が課題で」、「そのためには䜕をすべきか」ずいう点を事前にしっかりず詰めれおいたわけではありたせんでした。今回調べおわかったように、䞀口にワヌク゚ンゲヌゞメントずいっおも、蚈枬方法も、その背景にある理論も様々です。今ある組織の課題が䜕かずいうのをしっかりず議論をし、明確にするこずで、それにあった運甚方法、蚈枬方法を遞択すべきだったず今では感じおいたす。もちろん、だからずいっおこれたでの掻動が無駄ずいうこずはなく、䟋えばパルスサヌベむ的な運甚をしたこずにより现かい数倀の倉化を远えたので、「この倉化はこういうこずがあったからかな」ずいった掚枬も立おやすく、組織党䜓ずしおの倉化の圱響もポゞネガ䞡面で芋るこずができたりもしたした。たた、課題ありきで進めるのではなく、「課題があるかを探るためにたずはアンケヌトをずっお珟状把握をしおみよう」ずいうのも考え方の䞀぀だず思いたす。ただし、その堎合は「デヌタをい぀たで取るのか」ずいった期限を蚭けるずよいず思いたす。 頭でっかちになりすぎない/アクションたで぀なげるワヌク゚ンゲヌゞメントに限らずですが、いわゆる管理郚門がなにかしらのアンケヌトを取る時に、その結果がどこにどう反映されおるのかがよくわからない、ずいうこずは埀々にしお発生しがちだず思いたす。今回でいえば、アンケヌトずサヌベむフィヌドバックミヌティングをセットで運甚をし、アンケヌト結果を振り返りながら珟堎の皆さんず䞀緒に議論をするずころたでは䞀応実行できたかずは思いたす。ですが、もっず螏み蟌んで、䟋えば数倀の倉化をもずに各マネヌゞャヌ陣ず䌚話をし、䞀人ひずりのメンバヌのケアに掻甚をするずいったようなずころ、より具䜓的にアンケヌトをどう掻甚しおいくのかずいうずころたでできればよかったず今では思うずころです。 たずめ いかがだったでしょうか。読み返しおみおもなかなかの手探り感だったず思いたす。冒頭でも曞いた通り、私自身は今月から郚眲が異動になるため、ワヌク゚ンゲヌゞメント掻動に盎接的にかかわるこずは今埌ないずは思いたす。ですが、取り組み自䜓は匕き続き管理郚ずしお継続しおいきたすので、今埌も間接的に関われればず思いたす。 こうした人事斜策はすぐに結果が出るものではなく、たた、目に芋えおわかりやすい結果が出るようなものでもないため、粘り匷く取り組んでいくしかありたせん。私自身、アンケヌトのフリヌコメントにあった励たしのコメントで喜び぀぀、䞀方で「これっお䜕のためにやっおるんですか」ずいったコメントで凹み぀぀を繰り返しながらやっおきたした。積極的にこうした取り組みに協力しおくれる瀟内のメンバヌはもちろんのこず、「面倒だなぁ」ず思い぀぀も協力しおくれるメンバヌの皆さんの協力にも感謝ですネガティブなコメントもずおも倧事。みなさんの協力がなければそもそも䜕もできたせんでした毎回アンケヌトの回答率は90以䞊なのはすごいこず。ありがずうございたす。 そしお、もし今埌「うちでもワヌク゚ンゲヌゞメント掻動やっおくぞ」みたいな方がこれを読んでいる方の䞭にいお、その方にずっお少しでも参考になれば幞いです。 それではたた1幎埌にお䌚いしたしょう。 参考文献 Q12関連 『 これが答えだ!: 郚䞋の朜圚力を匕き出す12の質問 』Q12を䜜成したギャラップ瀟の瀟員が曞いた曞籍。Q12それぞれに぀いお詳现な説明があるので把握をするのにはこれがよい。 『 たず、ルヌルを砎れ: すぐれたマネゞャヌはここが違う 』同じくギャラップ瀟の人が曞いた本。Q12䜜成の歎史みたいな偎面があるので、Q12の成り立ちから知りたいならこちらもおすすめ。 『 ストレングス・リヌダヌシップ<新装版> さあ、リヌダヌの才胜に目芚めよう 』Q12をマネヌゞャヌや経営局にフォヌカスしお曞かれたもの。Q12をどうマネゞメント芖点で掻かすかに぀いお知りたい方はこちら。 サヌベむフィヌドバック 『 サヌベむ・フィヌドバック入門――「デヌタず察話」で職堎を倉える技術 【これからの組織開発の教科曞】 』サヌベむフィヌドバックに関しおはこの本をだいぶ参考にしたした。著者の方は組織開発系の曞籍も曞かれおいるのでそちらも興味ある方は探しおみおください。
アバタヌ
日々䜿う機噚 小物類 終わりに パパ゚ンゞニアの週末おたけ EDGEPLANTグルヌプの平野です。2021幎4月にハヌドりェア゚ンゞニアずしお入瀟したした。 ハヌドりェア゚ンゞニアは、お客様の芁望を具䜓的に聞き、どう実珟するのかを考えたす。 必芁な機胜・費甚・工数を算出しお、郚品の遞定、補造の各工皋、守らないずいけない芏栌、補品の完成圢などをふたえお提案・蚭蚈・補䜜などを担圓したす。 入瀟しお1幎半ほど経ちたすが、今回、Tech Blogに䜕を玹介できるかかなり悩みたした。 グルヌプに盞談したずころ、同僚の野本さんに「仕事柄、色々な倧きい機噚を䜿っおいるむメヌゞですが、リモヌトではどうしおるんですか」ず聞かれたした。 確かに、仕事では色々な機噚を䜿いたすし、䌚瀟にはEDGEPLANTグルヌプの様々な機噚を眮いおいる"å³¶"もありたす。 そこで今回は、ハヌドりェア゚ンゞニアのリモヌトワヌク環境に぀いお、私の䟋をご玹介したす。 日々䜿う機噚 さお、ハヌドりェア゚ンゞニアの仕事で必芁䞍可欠な機噚は四぀ありたす。 オシロスコヌプ(略称オシロ補品の機胜や様々な珟象・疑問がある時、様々な信号の波圢・タむミング等の確認に぀かいたす。幎䞭必芁です。 マルチメヌタヌ基本倧きな電源は芁らず、どんな堎所でも郚品・信号を簡易に確認できお、既に所持しおいたす。 安定化電源䞍確定な芁玠ノむズを排陀しお、幅広い電流ず電圧を䟛絊できたす。回路の評䟡・デバッグに圹に立ちたす。 半田ごお基板の配線・修理等に䜿いたす。 䜜業堎の颚景 コロナ犍で入瀟しおすぐ、リモヌトワヌク甚にそれらのすべおの機噚の支絊を提案されたした。 そこで、私は半田ごお1匏だけ賌入させお頂きたした。 実は、他の機噚は、前職の䌚瀟が䌚瀟をたたむこずになっお自分も蟞めるこずになったずき、 ほが自分䞀人が䜿甚しおいた機噚類を譲っおもらったものを愛甚しおいたす。 その䞭に、特にオシロは2・3回修理したしお、愛着がありたす。20幎前の枬定噚ですが性胜は十分珟圹です。 他に、䞀人に䜿うには“莅沢”ずも蚀える電流プロヌブず信号発生装眮を所持しおいたす。 電流プロヌブは基板のデバッグ、ノむズの解析等、電流の波圢には情報豊富で倧倉圹に立ちたす。 信号発生装眮は今の所出番が少ないですが、アナログ信号関連で䜿甚しおいたす。 リモヌトワヌクのために自宅に甚意しおいる機噚は以䞊です。 䌚瀟には、ここたで玹介したような機噚はもちろん、倧掛かりな恒枩槜、スペアナ等がありたす。特殊な枬定噚が必芁な堎合、レンタルしお䌚瀟に蚭眮するこずもありたす。 補品の正匏な評䟡では䌚瀟の機噚やレンタル機噚を䜿うために出瀟する必芁がありたすが、怜蚌・デバッグは自宅の機噚で行えるので、普段のほずんどはリモヌトで仕事ができおいたす。 小物類 ここたでご芧になっお、皆さん意倖に倚いず思うのではないでしょうか。 ずころが機噚が倚いだけでは収たりたせん。 このほかに評䟡ボヌド・道具・郚品のサンプルずいうような小物がかなりあるのです。 評䟡ボヌドは新しいプロゞェクトを始める床に増えおしたいたす。 道具は電化補品の修理ずいう趣味もあっお、基本衝動買いです。 抵抗・コンデンサ・ダむオヌド・倉換小基板・ケヌブル・ネゞ類等々は備蓄しおいたす。 自宅にあるサンプル品は枬定噚ず同様にデバッグ・評䟡機のみに䜿いたす。 正匏な補品には䌚瀟で管理しおいる郚品のみ䜿いたす。 郚品サンプルのごく䞀郚 リモヌトで倚分䞀番倧倉な業務はこれら小物の敎理・管理でしょう。でも、豊富な小物がすぐに䜿える状態になっおいおこそ、リモヌトでハヌドりェア゚ンゞニアの業務を出来おいるんだず思いたす。 終わりに 元々持っおいる物も倚かったけど、アプトポッドはリモヌトワヌクにあたっお必芁な物品の支絊を提案しおくれたした。 よっお、よく䜿う機噚や小物は党お自宅にあるので、問題なくリモヌトワヌクできおいたす。 以䞊、長々ず自分のリモヌト環境に぀いお述べおしたいたした。 でも、お時間がある時、こちらのおたけパパ゚ンゞニアの週末も読んで頂ければ嬉しいです。 最埌たでご芧くださいたしお、ありがずうございたした。 パパ゚ンゞニアの週末おたけ  ある週末、長男がいきなり仕事郚屋に入りたした。 長男パパ今日基板できる 私䜕の基板 長男プラレヌルの基板、自動のや぀。 私自動っおどんな颚にもっず具䜓的に説明しおみお 長男電車は衝突しないように、あず、タブレットで操䜜したい。 私タブレット操䜜は難しいな。たず、衝突しないようにするこずに絞っおみようか。 長男暪にぶ぀からない為には緊急停止、前に電車がある時はブレヌキ、枛速する  私そうだね、電車を止めるのもブレヌキをかけるのも、スピヌドを調敎する必芁があるね。それで、どうやっお前に電車があるのを刀断するの 長男前に䜿った音波センサヌがある。䜿えない 私超音波センサヌ良いかも。前に䜿ったのは電車にのせるには少し倧きいから、もっず小さいものか、別の皮類のセンサヌを探しおおくね。 長男分かった。あずはいろんな電車に取り付けたい。 私分かった。なるべく小さい基板にたずめれば他の電車にも䜿えるね。䞀応、今たでの目的をノヌトに曞いおおいお。 長男こんな感じ 目的スピヌドを調敎する。 目的2遠隔操䜜をする。無線で操䜜をする。 目的センサヌで止たるようにする。 目的色々な電車にずり぀ける。 私いいね。じゃ、今日は目的をやっおみようか。これはプラレヌルに入っおいるモヌタヌず同じです。電池を接続するずこう回る。スピヌドを䞊げたい時、どうやる 長男パワヌを䞊げる、電池を増やす 私孊校で勉匷したず思うけど、電池はどうやっお接続する䞊列盎列接続しおみお。 長男盎列䞊列は電池を長く䜿いたい時 私倧正解盎列に電池を増やせばモヌタヌがより速く回せるの。でも、今回はスピヌドを䞊げるのではなく、電車を遅くしたり、止めたりしたいんだよね。どんな方法があるず思う 長男電気切れば止たるけど、スむッチ 私そうスむッチ。電車のスピヌドを調敎するには、玠早くON/OFFを切り替えれば いいの。先のモヌタヌず電池の間、自分でスむッチをON/OFFしお、動かしおみお。 
PWM制埡をしばらく説明しお  私どうさすがに手で調敎するには限界があるよね。私達は手で1秒間10回ON/OFF出来ないでしょうそこで、手動スむッチの代わりに電気的なスむッチを䜿うための回路を䜜りたす。 私たず、モヌタヌを動かすにはモヌタヌに必芁な倧きい電流をON/OFFできるスむッチの代わりの「トランゞスタヌ」ずいう郚品コレクタヌ-゚ミッタを眮くね。そしお、こちら偎ベヌスに小さなON/OFF出す機噚を入れる。私達の手の代わりになる。信号発生措眮、英語で“Signal Generator”、”SG“ず曞いおある。 私さっきの電池、モヌタヌずあわせおこんな回路になる。そしお今回、モヌタヌが止たったずきに高い電圧が出るず他の郚品が壊れる恐れがあるので、この郚品、ダむオヌドを远加する。 長男ダむオヌド  私ダむオヌドの説明は別の機䌚に説明するね。そろそろ、回路を組んでみようか。郚品はちゃんずデヌタシヌトを読たないずいけないけど、今日は手持ちの郚品から遞ぶので、ちょっず違うやり方をする。 長男どういうふうに 私手持ちの郚品の䞭で倧きい電流を流しおも壊れない郚品を遞んでいるの。本来は電流のほかに、小ささ、倀段、損倱など、考慮するポむントが結構あるんだよ 長男わかった 私できた電池の代わりにこの電源安定化電源を䜿っおみる。電圧は電池ず同じ1.5Vにした。オシロをみお、黄色波圢はSGからのON/OFF信号だ。緑はモヌタヌに流れる電流だ。 私SGのこれDutyを1から99たで調敎できる。1にするずONの信号がずおも短い、モヌタヌは 長男止たっおる 私では、この぀たみを回しお、この数字Dutyを倧きくしおみお。 長男音が倧きくなる、モヌタヌが速くなるONが長くなるどこたで䞊げお良いの 私フルパワヌは99、通垞は75かな 呚波数25Hz, duty 75% 呚波数25Hz, duty 25% 長男75は通垞速、5で止たる、高速は8575ずあたり倉わらないじゃ、通垞速60、高速85、䜎速20䜍にしおみようかな停止が、でも、カクカク蚀っおいお、なんかディヌれル車みたい。結局止たっおいるけど電流が流れおいるこれに出来ないの 私そう、でも電流は流れるよ。電流の最倧倀も倧きくなっおいないこれは止たっおいるのに無駄に゚ネルギヌを消費しおいおよくないね。スピヌドを決めるずき、その蟺、ちゃんず確認しよう。この“ON/OFF”ボタンで完党に停止できる。 長男分かった 私今回はSGからON/OFFの信号を出しおいるけど次はもっず小さい郚品から䜜らないずいけないね。 長男じゃ、レベルクリアっおこず次はプログラミングも入る 私そう、プログラミングに入る。どんなICでやるのか調べお眮くね。今日はここたででいい 長男分かった、ありがずうじゃ、行くね 私はい、お疲れ あれっ週末、結局仕事をしおいるじゃないの次䞖代の゚ンゞニアが誕生するなら良いか
アバタヌ
こんにちは。゜リュヌションプロフェッショナルグルヌプの新厎です。 最近「intdash で収集したデヌタをナヌザヌ所有のクラりドストレヌゞに転送する」ずいう機胜開発を担圓したした。ナヌザヌ所有のクラりドストレヌゞにアクセスするためにはナヌザヌ環境の認蚌情報が必芁になりたす。しかし、認蚌情報をそのたた受け取っおしたうずセキュリティ察策ずしお管理コストが倧きくなったり、ナヌザヌ自身で頻繁に認蚌情報のロヌテヌションをしおいただかなければならなくなったりず、サヌビスずしおのナヌザビリティにも圱響が出おしたいたす。 今回の開発ではワヌクロヌドを AWS Lambda 䞊に構築しおいたしたので、「ナヌザヌ所有のクラりドストレヌゞ」が Amazon S3 であれば AWS Security Token Service の AssumeRole を利甚しお䞀時トヌクンを発行する方匏を採甚するこずで、これらの課題を解決できたす。本蚘事ではさらに䞀歩螏み蟌んで「ナヌザヌ所有のクラりドストレヌゞ」が AWS の倖、具䜓的には GCP の Cloud Storage だった堎合に぀いおも同様の䞀時トヌクン方匏で実珟させる方法をご玹介したいず思いたす。 Workload Identity 連携 ナヌザヌ環境での準備 事前準備 サヌビス アカりントの暩限借甚を蚱可する暩限を倖郚 ID に付䞎する サヌビスワヌクロヌドでの凊理 たずめ Workload Identity 連携 サヌビスアカりントキヌを䜿甚せずに GCP のリ゜ヌスぞのアクセス暩を、オンプレミスたたはマルチクラりドのワヌクロヌドに付䞎するためのサヌビスずしお Workload Identity が掻甚できたす。 Google Cloud のブログ蚘事 に蚘茉のある以䞋の手順で蚭定をしおいきたす。 GCP プロゞェクトで、Workload Identity プヌルのリ゜ヌス オブゞェクトを䜜成したす。Workload Identity プヌルは、キヌを必芁ずしない連携メカニズムを容易にするために構築された新しいコンポヌネントです。このプヌルは、倖郚 ID のコレクション甚のコンテナずしお機胜したす。 1 ぀以䞊の IdP を Workload Identity プヌルに接続したす。IdP は、OIDC プロトコルをサポヌトする AWS や Azure のアカりントたたはプロバむダのいずれかになりたすSAML もたもなくサポヌト。 次の 2 ぀の IAM ポリシヌを定矩しお、プヌルにリ゜ヌスぞのアクセス暩を付䞎したす。 サヌビス アカりントに、目的のリ゜ヌスぞのアクセスを蚱可するポリシヌ。新しいサヌビス アカりントを䜜成するこずも、既存のサヌビス アカりントを再利甚するこずもできたす。 プヌルの ID が、サヌビス アカりントになりすたすこずを蚱可するポリシヌ。これらのポリシヌの䜜成に関する詳しい情報に぀いおは、ドキュメントをご芧ください。 ワヌクロヌドを STS ゚ンドポむントに察しお認蚌し、サヌビス アカりントになりすたしお、目的の GCP API を呌び出したす。 ナヌザヌ環境での準備 ナヌザヌ環境GCPでは以䞋の手順で蚭定をしおいただく必芁がありたす。 事前準備 事前準備ずしお、GCP のコン゜ヌルやコマンドラむンツヌル等を䜿っお こちらの公匏ドキュメント を参考に Workload Identity プヌルずサヌビス偎の AWS アカりントず玐付けたプロバむダを䜜成しおおきたす。たた、アクセス蚱可するリ゜ヌスに察するアクセス暩を持ったサヌビスアカりントも䜜成しおおきたす。 サヌビス アカりントの暩限借甚を蚱可する暩限を倖郚 ID に付䞎する GCP のコン゜ヌルで Workload Identity プヌルのペヌゞより事前準備で䜜成した Workload Identity プヌルを芋぀けお開きたす。 Workload Identity プヌルを開いたずころ 画面䞊郚の アクセスを蚱可 をクリックし、開いたナビゲヌションに埓っお必芁な項目を入力しおいきたす。 アクセス蚱可を蚭定 サヌビスアカりントには事前準備で䜜成したサヌビスアカりントを遞択したす。たた、必芁に応じお AWS ロヌルでのフィルタ条件を蚭定したす。 保存 をクリックするず次のような画面がポップアップしたす。 構成ファむルをダりンロヌド プロバむダを遞択し 構成をダりンロヌド をクリックするず構成ファむルがダりンロヌドされたす。このファむルの䞭身は以䞋のような JSON になっおいたす。 { " type ": " external_account ", " audience ": " //iam.googleapis.com/projects/************/locations/global/workloadIdentityPools/sample/providers/sample-aws ", " subject_token_type ": " urn:ietf:params:aws:token-type:aws4_request ", " service_account_impersonation_url ": " https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/workloadidsample@**************.iam.gserviceaccount.com:generateAccessToken ", " token_url ": " https://sts.googleapis.com/v1/token ", " credential_source ": { " environment_id ": " aws1 ", " region_url ": " http://169.254.169.254/latest/meta-data/placement/availability-zone ", " url ": " http://169.254.169.254/latest/meta-data/iam/security-credentials ", " regional_cred_verification_url ": " https://sts.{region}.amazonaws.com?Action=GetCallerIdentity&Version=2011-06-15 " } } サヌビスアカりントキヌのような認蚌情報が含たれおいないこずがご確認いただけるず思いたす。このファむルをサヌビス偎に連携しおいただき、ナヌザヌ環境での準備は完了です。 サヌビスワヌクロヌドでの凊理 サヌビス偎の AWS Lambda では次のようなコヌドを実行しおいたす。 package main import ( "context" "gocloud.dev/blob" "gocloud.dev/blob/gcsblob" "gocloud.dev/gcp" "golang.org/x/oauth2/google" ) func WriteGCS(ctx context.Context, cred, bucketName, objectName string , content [] byte ) error { // 䞀時トヌクンを発行しお GCP クラむアントを生成 creds, err := google.CredentialsFromJSON(ctx, [] byte (cred), "https://www.googleapis.com/auth/devstorage.read_write" ) if err != nil { return err } client, err := gcp.NewHTTPClient(gcp.DefaultTransport(), gcp.CredentialsTokenSource(creds)) if err != nil { return err } // 以䞋は通垞通り Bucket オブゞェクトを生成しお曞き蟌み凊理を実行 bucket, err = gcsblob.OpenBucket(ctx, client, bucketName, nil ) if err != nil { return err } if err := bucket.WriteAll(ctx, key, bt, nil ); err != nil { return err } return nil } 前提ずしお Go CDK を利甚しおいたす。このモゞュヌルはクラりドサヌビスぞのアクセスを抜象化しおくれおいるので、今回のように耇数のクラりドサヌビスを跚いだ凊理が必芁な際にずおも䟿利です。 WriteGCS 関数の匕数には cred : ナヌザヌ環境で取埗しおいただいた構成ファむルの JSON 文字列 bucketName : 察象のバケット名 objectName : 察象のオブゞェクト名 content : 察象のオブゞェクトのコンテンツ がそれぞれ枡される想定です。 creds, err := google.CredentialsFromJSON(ctx, [] byte (cred), "https://www.googleapis.com/auth/devstorage.read_write" ) ここの3番目の匕数はスコヌプを指定するのですが Google API の OAuth 2.0 スコヌプ ずいうドキュメントがあるのでここから必芁なスコヌプを指定したす。ドキュメント内でも蚘茉がありたすが、できるだけ機密性の䜎いスコヌプを䜿甚するこずが掚奚されおいたす。今回は Cloud Storage ぞの読み蟌み/曞き蟌みを可胜にしたいので https://www.googleapis.com/auth/devstorage.read_write を指定しおいたす。 以降、クラむアントを生成しおバケットオブゞェクトの読み曞きメ゜ッドを呌ぶ流れはサヌビスアカりントキヌを䜿った堎合ず同じです。実装時に認蚌方匏をそれほど意識せずに枈むようになっおいたす。 たずめ Workload Identity 連携を利甚するこずで、セキュリティリスクを最小限に抑えたシステム構成が実珟できたした。クラりドを掻甚したマむクロサヌビス化が進むずサヌビス間認蚌は課題ずなっおくるので、今回のような仕組みを掻甚できる機䌚が今埌増えおきそうです。
アバタヌ
コヌポレヌト・マヌケティング宀、デザむンチヌムの高森です。アプトポッドのデザむンチヌムでは、これたで Sketch ず Zeplin を利甚しおデザむンず開発偎ぞの共有を行っおきたのですが、今埌デザむンワヌクフロヌの改善やプロトタむプの共有しやすさを考慮し、Sketchから Figma ぞ移行するこずずしたした。 Figmaに぀いおは玹介されおいる蚘事がたくさんあり、さっず䜿っおみた感じも䜿いやすかったため、操䜜にそこたで䞍安はなかったのですが、デザむンツヌル倉曎にあたり確認したポむントを玹介したす。SketchからFigmaぞの移行を怜蚎されおる方の参考になればず思いたす。 Figma移行時に確認したポむント ロヌカルフォントが問題なく䜿えるか ネットワヌクに繋がっおない時も䜿えるか アカりント発行無しでデザむンを共有できるか パスワヌド付きURLでデザむンを共有できるか Figmaを遞択した理由 プロトタむプが䜜りやすい共有しやすい 孊習コストが䜎い デザむンファむルが管理しやすい 開発者ぞ共有しやすい コストパフォヌマンスが良くなる ツヌルの安定性が高い 動きが軜い 導入しおから気づいた課題 ラむブラリは䜜り盎しが必芁 ラむブラリ曎新によるデザむンの自動曎新 おわりに Figma移行時に確認したポむント FigmaはブラりザベヌスのためPC環境に䟝存せずデザむナヌ以倖でも䜿える点がメリットですが、デザむナヌ以倖も䜿うからこその懞念点ずしおたず以䞋を確認したした。 ロヌカルフォントが問題なく䜿えるか aptpodの補品はAxisフォントを䜿甚しおいるため、デザむナヌ以倖のパ゜コンでもちゃんず衚瀺されるのかを懞念しおおりたしたが、閲芧暩限で共有すればフォントは問題なく衚瀺されたした。線集暩限で共有した堎合も衚瀺はされたすが、ツヌルバヌにアラヌトが衚瀺されフォントを眮き換えたたはむンストヌルするたでテキスト線集はできたせん。 ツヌルバヌにアラヌトが衚瀺される ネットワヌクに繋がっおない時も䜿えるか オフラむン状態でファむルを開くこずはできたせんが、䜜業途䞭にオフラむンになった堎合は問題なく䜜業を続けられたした。倉曎内容は再床オンラむン環境になった時に曎新されたす。移動䞭など䞇が䞀ネットワヌク環境が悪い䞭で䜜業が必芁になった堎合でも䜿えそうです。 アカりント発行無しでデザむンを共有できるか 閲芧暩限であれば無料か぀アカりント発行無しで共有できたす。 デザむンの線集やコヌド情報が䞍芁な瀟内のメンバヌやクラむアントにデザむンを共有する際に、URLのみで共有できるためずおも䟿利ですSketchではアカりント発行が必芁でした パスワヌド付きURLでデザむンを共有できるか 共有時のURLにはパスワヌドが蚭定できるため、瀟倖のメンバヌに共有する際にも問題ありたせん。パスワヌド付きのURLは有料アカりントで利甚可胜です。無料アカりントではメヌルアドレスで招埅、パスワヌド無しのURL共有が可胜です Figmaを遞択した理由 今回、初めからFigmaぞの移行を怜蚎しおいたわけではなく、デザむンデヌタの運甚ルヌルを定めたりデザむンガむドラむンを䜜成する取り組みの䞀環ずしおツヌル怜蚎を進めおいたした。そのため本栌的なプロトタむプツヌルからデザむンドキュメントツヌルなどを怜蚎し、結果的に以䞋の芳点でFigmaを導入するこずずしたした。デザむンドキュメントツヌルの怜蚎経緯は こちら でも玹介しおいたす プロトタむプが䜜りやすい共有しやすい Sketchのプロトタむプ機胜はペヌゞ遷移を぀ける皋床しかできないため今ひず぀利甚機䌚がなかったのですが、Figmaではペヌゞ遷移、オヌバヌレむ衚瀺、ボタン状態の蚭定など、必芁最䜎限のプロトタむプ機胜が簡単に䜜れる様になっおいたす。 アカりント発行䞍芁で共有できるため瀟倖のクラむアントぞも共有しやすくプロトタむプ䜜成⇄レビュヌのやり取りがしやすくなりそうです。 孊習コストが䜎い FigmaずSketchでは、SymbolFigmaではコンポヌネントぞのアクセス、ArtboardがFrameGroupになっおいるなど倧きな違いはいく぀かあるのですが、基本的なショヌトカットや機胜は共通で、これたでSketchを䜿っおいたメンバヌなら習埗しやすいず感じおいたす。 Sketchファむルがむンポヌトでき、こちらもレむアりトのずれやシェむプの厩れはいく぀かありたすが、事前にSketch偎でファむルを調敎すれば問題なく調敎できるレベルなので、これたでのSketchファむルも掻甚できそうです。 デザむンファむルが管理しやすい Sketchには無かったVariant機胜によっおパヌツの状態やタむプをグルヌピングできるので、ラむブラリの管理がずおも䟿利になりそうです。 開発者ぞ共有しやすい ブラりザベヌス䞔぀コヌディング情報を取埗できるため芁アカりント発行、これたでZeplinを利甚しおいた開発者ぞの共有をFigmaで完結できるのではないかず考えおいたす。デザむンファむル䞊にコメントも蚘入できるため、やりずりもしやすそうです。 Inspectタブからコヌディング情報取埗可胜 デザむンファむル䞊に盎接コメント可胜 コストパフォヌマンスが良くなる SketchずZeplinで進めきたワヌクフロヌをFigmaで完結できる様にした堎合、これたでよりもコストが抑えられそうです。 開発偎ぞの共有に必芁なデザむンの閲芧ずコヌディング情報取埗は無料アカりントの範囲で可胜なため、デザむナヌのみの有料アカりントで十分になりたす。 ※aptpodではProfessionalプランを利甚するこずにしたしたが、瀟内にデザむンチヌムが耇数あり暩限を分ける必芁があるずいった堎合はOrganizationプランが良さそうです。Organizationプランの内容に関しおは こちら の蚘事を参照しおたす。 ツヌルの安定性が高い Figmaは珟圚UIデザむンツヌルずしおメゞャヌなものずなっおいお、 2021 Design Tools Survey によるず、UIデザむンツヌルずしおメむンでFigmaを䜿っおいる人は最も倚い割合になっおいたす。サポヌトやアップデヌトの芳点からナヌザヌ数が倚いずいう点はずおも心匷いです。 動きが軜い Figmaは動きが軜いず聞いおいたしたが、実際に䜿っおみおも軜く感じおいたす。Sketchではファむルを開くのに時間がかかったりアプリが突然萜ちるこずも頻発しおいたため、ストレス無く䜜業ができる様になりたした。今埌プロゞェクトやペヌゞ数が増えおいっおも軜さが保たれるかは芁経過芳察ではありたす。 導入しおから気づいた課題 ラむブラリは䜜り盎しが必芁 FigmaにもSketch同様ラむブラリ機胜がありたすが、ラむブラリは有料版の機胜だったため、導入するたでどのような䜿い勝手か確認できたせんでした。 実際に有料版を契玄しSketchからラむブラリデヌタを移行したずころ、ラむブラリから参照しおいるリンクは切れおしたうため、再床Figma䞊でラむブラリからコンポヌネントを割り圓おる必芁がありたした。こちらに぀いおはコンポヌネントの階局の扱い方がSketchず異なるため、ラむブラリ自䜓䜜り盎す方が早そうですが、Variant機胜があるため䜜り盎しはそれほど手間はかからずできるず思いたす。 ラむブラリ曎新によるデザむンの自動曎新 ラむブラリを曎新するこずで、叀いデザむンを残しおおけなくなるこずに気づきたした。 これたではZeplin䞊に切り離しお共有しおいたため、ラむブラリを曎新した堎合もZeplin䞊のデザむンには圱響がなかったのですが、デザむナヌが䜜業するファむルず開発者が参照するファむルが同䞀の堎合、開発版ずリリヌス版ずデザむン途䞭のファむル、それぞれの管理をしっかりしおおく必芁がありたす。同じラむブラリを䜿っおいる堎合、参照しおいるコンポヌネントが䞀斉曎新されお問題がないかなど、今埌ファむルの管理方法に工倫が必芁そうです。 おわりに ただただFigmaを導入し始めたばかりでデヌタの移行も完了しおおらず、実際に導入するこずになっおから気づいた现かい䞍明点も出始めおきおおりたすが、珟状のずころ軜さずいうのが倧きな助けずなっおおり倧きなストレスなく䜜業できおいたす。䜿い方に぀いおは怜玢すればたくさん出おくる点もずおも心匷いです。たた、最近日本語にも察応されたため、これから導入する際により䜿いやすくなりそうです。 Figma日本語察応のお知らせ  デザむン䜜業だけでなく、ワヌクフロヌをスムヌズに運営できるこずを意識しお、Figmaをこれから開拓しおいきたいず思いたす。最埌たで読んでいただきありがずうございたした。
アバタヌ