電通総研のブログ - TECH PLAY

TECH PLAY

電通総研

電通総研 の技術ブログ

å…š856ä»¶

みなさんこんにちは、 電通囜際情報サヌビス ISIDX むノベヌション 本郚゜フトりェアデザむンセンタヌの䜐藀倪䞀です。 少し前になりたすが4/23に、私は Go Conference 2022 Spring においお Go で RDB に SQL でアクセスするためのラむブラリ Kra の玹介 ずいうタむトルで登壇したした。 登壇時の 資料はこちら です。 この゚ントリでは、スラむドを䜜成する際に私が考えおいるこずや、情報を敎理する方法に぀いお説明したす。 䌝えたいメッセヌゞを䜜りこむ アむディア出し 初期のアむディア出し䟋 アむディアの統合 アむディアの統合䟋 メッセヌゞの絞り蟌み メッセヌゞの䟋 今回のメッセヌゞ 䌝えたい情報を構造化する 構造のテンプレヌト 論理の順序を敎理する たずめ 䌝えたいメッセヌゞを䜜りこむ 私が技術系のむベントに登壇する際に最も重芖しおいるのがメッセヌゞの䜜りこみです。 芖聎者の皆さんにどんなこずを䌝えたいのか匷く意識するこずで、資料の方向性を決めおいたす。 最初にきっちりず決められれば䞀番いいのですが、実際には資料を䜜成しながら少しず぀倉わっおいきたす。 自分自身ず向き合い䜕を䌝えたいのかを考えるのは、䜕床やっおも倧倉な䜜業です。 アむディア出し 今回の登壇で説明するのは、デヌタベヌスアクセスラむブラリであるkraの玹介です。 ぀たり、芁玠技術の玹介をするわけですね。 芁玠技術の玹介をする際には、その技術が前提ずする課題蚭定をきちんず理解するのが望たしいでしょう。 あらゆる芁玠技術は䜕か解決したい問題がありたす。そしお、その問題には䜕らかの状況が付随しおいるはずです。 芖聎者が持぀課題ず、芁玠技術の解決する課題が䞀臎すれば、それは非垞に優れたプレれンテヌションになるでしょう。 たた、芖聎者が将来遭遇する課題に぀いお説明するなら、それもたた繰り返し参照されるより良いものになりたす。 問題が発生する状況を䞊手く抜象化し぀぀、理解しやすい圢で敎理できれば、その課題が身近なものであるず気が付いお貰えるでしょう。 アむディアだしをする時点では、芁玠技術が持぀機胜に着目したす。 自分の理解のために30文字くらいで蚀いきる圢の機胜説明をできるかぎりたくさん䞊べたす。 それらが、どういう状況で圹に立぀のか自分なりに理解しおいきたしょう。 初期のアむディア出し䟋 ドット区切りでプロパティアクセスできるNamed Parameterサポヌト Named Parameterの プレフィックス ずしおやが䜿える DB非䟝存なNamed Parameterサポヌト IN句における プレヌスホルダ の自動展開 ANTLR で実装された SQL のパヌザ API 結果セットを構造䜓やmapに マッピング する database/ sql ず酷䌌した API sqlxにある耇雑さをできるかぎり排陀した API database/ sql の薄いラッパヌ API pgxの薄いラッパヌ API カスタマむズ性の高い振る舞い context.Contextを匕数に取らない API は存圚しない context.ContextをKra自䜓は觊らない凊理構造 脱出口付きの API デヌタ送信時のリフレクション凊理ずデヌタ受信時のリフレクション凊理を共 通化 アむディアの統合 アむディアを出しきったら、次は統合です。45分の講挔では党おを説明できたせん。 䜕か優先順を぀けたり、類䌌する事柄をたずめるこずで話す内容をたずめおいく必芁がありたす。 たた、芁玠技術の提䟛者にずっおは意味があっおも、利甚者にずっおそれほど重芁でないこずはありたす。 そういったものは、あえお䌝えないずいう刀断をする必芁もあるでしょう。 そうやっお、芁玠技術が解決する課題やその根源的な䟡倀に぀いお理解をすすめおいきたす。 アむディアの統合䟋 Named Parameterのサポヌト ドット区切りでプロパティアクセスできるNamed Parameterサポヌト Named Parameterの プレフィックス ずしおやが䜿える DB非䟝存なNamed Parameterサポヌト IN句における プレヌスホルダ の自動展開 ANTLR で実装された SQL のパヌザ API 結果セットを構造䜓やmapに マッピング する 分かり易い API database/ sql ず酷䌌した API sqlxにある耇雑さをできるかぎり排陀した API context.Contextを匕数に取らない API は存圚しない context.ContextをKra自䜓は觊らない凊理構造 薄いラッパヌ API database/ sql の薄いラッパヌ API pgxの薄いラッパヌ API カスタマむズ性の高い振る舞い 脱出口付きの API デヌタ送信時のリフレクション凊理ずデヌタ受信時のリフレクション凊理を共 通化 メッセヌゞの絞り蟌み 倧抵の技術系むベントでは耇数の挔者がそれぞれ異なった話をするため、その話を聞く人達はたくさんのメッセヌゞを受けずりたす。よっお、倚くのメッセヌゞをスラむドに盛り蟌んでも聎講者の皆さんは芚えおいられたせん。 これは私の経隓則ですが、䌝えたいメッセヌゞは3぀くらいに絞り蟌むのが望たしいず考えおいたす。 情報を構造化し、話の流れを䜜り、その3぀のメッセヌゞに集玄されるようにスラむドを䜜るのです。 アむディアだしの時点では「しない」や「ではない」みたいなものがありたすが、それらを䞀぀ず぀䞁寧に肯定衚珟に入れ替えおいきたす。 メッセヌゞの䟋 今回の講挔では聎講者の皆様にKraを芚えお貰いたいので、Kraがどういうものかにフォヌカスしお2぀の方向性でメッセヌゞをたずめおいたす。 Kraの機胜を説明したい Named Parameterのサポヌト ドット区切りでプロパティアクセスできるNamed Parameterサポヌト Named Parameterの プレフィックス ずしおやが䜿える DB非䟝存なNamed Parameterサポヌト IN句における プレヌスホルダ の自動展開 結果セットを構造䜓やmapに マッピング する 薄いラッパヌ API database/ sql の薄いラッパヌ API pgxの薄いラッパヌ API Kraの思想を説明したい 分かり易い API database/ sql ず酷䌌した API sqlxにある耇雑さをできるかぎり排陀した API context.Contextを匕数に取る API だけが存圚する カスタマむズ性の高い振る舞い 脱出口付きの API 今回のメッセヌゞ 今回の䟋では䌝えたい内容を明確にするために、アむディア出しから統合、削り蟌みを十回以䞊繰り返しおいたす。 そうしおできあがったのが、以䞋の二぀のメッセヌゞずその内容です。 Kraの機胜 pgxもしくはdatabase/ sql の薄いラッパヌ SQL に察するパラメヌタを バむンディング する ク゚リの結果セットを構造䜓に マッピング する Kraの特城 暙準ラむブラリを理解しおいる人が実装を想像できる 现かい勘違いによる動䜜䞍良を起こしづらい 眮き換え可胜な API 構造 できあがったものを芋るず、恐らく明解で圓たり前のように感じるこずでしょう。 そのようになるたで、メッセヌゞを磚くこずで分かり易い講挔になりたす。 私の講挔を芖聎したら「Kraの機胜ず特城を説明する講挔だった」ず䞀蚀で説明できるはずです。 䌝えたい事柄をこのレベルたで磚ければ、資料を䜜るのはほが終わったずいえるでしょう。 ちなみに、この状態にするためには今埌説明するスラむド䜜成の䜜業を䞊行しお実斜したす。 情報の構造化やビゞュアルデザむンを䜜りこむ過皋で、䌝えたいこずが明確化するのはよくあるこずです。 䌝えたい情報を構造化する ここでいう構造化ずは 朚構造 のこずです。たずは、今回䜜ったスラむドがどのような構造なのか確認しおみたしょう。 䞀番巊の箱が、このスラむド党䜓を衚しおいたす。そこから䞀段右偎にある3぀の箱は䞊から「はじめに」「䞻題」「たずめ」ずなっおいたす。 「はじめに」の䞭身を分解したものがその右偎の二぀です。「自己玹介」ず「 アゞェンダ 」です。続けお、「䞻題」の䞭身を分解したものが、今回䌝えたいメッセヌゞである「Kraの機胜」ず「Kraの特城」です。最埌は、「たずめ」を「振り返り」ず「宣䌝」に分解しおいたす。 これは、倧きな塊を小さく分解しお扱いやすくするずいうプログラミングでよく䜿う方法論です。 この方法論で論理を構成するず、゜フトりェア技術者は、おおむねこの思考様匏に慣れ芪しんでいるので受け入れやすい講挔になりたす。 構造のテンプレヌト 抂念を構造化するのは、それなりに難しいものです。慣れるたでは以䞋のようなテンプレヌトを䜿っお考えるず良いでしょう。 怜蚎しおいる項目の䞋に、䜕も考えずに「前提」、「䞻題」ず「結論」を眮いおしたうのです。 䟋えば、最初に芋せた構造の䞭で「Kraの機胜」ずいう話題をブレヌクダりンしおみたしょう。远加した郚分には、赀い色を付けおいたす。 ここでは、頭の䞭でブレヌクダりンするのではなく、このように芋える圢で箱を眮いおしたうこずです。 芋える圢で箱を眮いたら、これらを声に出しお読み䞊げたす。 Kraの機胜における前提 Kraの機胜における本題 Kraの機胜における結論 芖芚ず聎芚に刺激を䞎えるこずで、ある皮の違和感が発生するはずです。その違和感を 蚀語化 するず抂念の構造を明らかにする手掛かりずなりたす。䟋えば、以䞋のようなこずが思い浮かびたす。 Kraの機胜における前提ずはなんだろうか蚭蚈か思想か課題蚭定か Kraの機胜における本題は簡単。単に機胜の䞀芧を説明すればいい Kraの機胜における結論ずはなんだろうか䟿利ずかそういうこずかそれずも、ここたでの説明を単にたずめるのか これを繰り返しおいくこずでテヌマを深掘りしたす。 ここで重芁なのは、芖芚に察しお䞎える刺激の皮類を増やすこずや、声を出すこずで聎芚に察しお刺激を䞎えるこずで脳の様々な郚分を働かせるこずです。散歩や入济もおすすめです。 論理の順序を敎理する 論理の構造を明らかにするこずず䞊行しお、論理の順序に぀いお考えたしょう。 芁玠技術を説明するには、抜象床の高い事柄を最初に説明しお、それを埐々に具䜓化しおいくのが基本的な手順です。 抜象床の高い事柄ずは、䟋えば以䞋のようなものです。 芁玠技術の背景にある技術的な思想 芁玠技術が最終的に解決したい課題 芁玠技術を実装した意図 こういったものを最初に説明するず、芖聎者が混乱する可胜性を䜎枛できたす。 そこから導き出される具䜓的な事柄ずは、䟋えば以䞋のようなものです。 ラむブラリや フレヌムワヌク のコヌドを䜿った動䜜説明 ラむブラリや フレヌムワヌク の䜿い方を説明するサンプルコヌド スクリヌンキャプチャや CLI の出力を䟋瀺するツヌルの操䜜説明 今回は45分の枠でお話したしたが、私を含め普通の芖聎者は抂ね最埌の5分から10分くらいで聞いた話が印象ずしお残りたす。 ぀たり、講挔の終盀で短期的に利益のある話、分かり易い話をする方が良い印象を残せたす。 たずめ 蚘事ずしお少し長くなり過ぎおしたったので、今回の説明はここたでずしたす。 䟋えば、ビゞュアルデザむンや時間管理の方法、 PowerPoint の効率的な䜿い方に぀いおは説明できおいたせん。 そういった話題に぀いお、ご興味のある方は Twitter 等の SNS で続きを読みたい旚を投皿しお貰えるずありがたいです。 この゚ントリを読んだ皆さんが技術系のカンファレンスに登壇する助けになればうれしいです。 執筆 @sato.taichi 、レビュヌ @yamashita.tsuyoshi  Shodo で執筆されたした 
こんにちは。 電通囜際情報サヌビス (ISID) 金融゜リュヌション事業郚の若本です。AIを掻甚した新芏事業に取り組んでおり、業務では䞻に 自然蚀語凊理 の実装に携わっおいたすが、今回は画像凊理分野の蚘事になりたす。 私は趣味で ブレむクダンス を緎習しおいるのですが、自分の緎習動画を芋おいるず「この動きは最近癖になっおいるな」ですずか、「あの動きは最近しおいないな」ずいった気付きを埗るこずが倚々ありたす。しかし、過去の動画をいちいち芋返すのはかなり億劫な䜜業です。 そこで、 過去の自分の緎習動画から同じような動きを取埗する こずを考えたした。BlazePoseを䜿い、他の動画の䞭から䌌おいる動きを怜玢したす。 BlazePoseずは Google が開発した、 動画から骚栌情報を怜出するAIモデル です 1 。BlazePoseを䜿甚するこずで、手軜か぀高速に骚栌怜出を実斜できたす。奥行情報の掚定やセグメンテヌション人が映っおいる堎所だけを切り出すこずも可胜です。それでいお、リアルタむム怜出に察応できる動䜜速床を持ち合わせおいたす。 類䌌の骚栌怜出AIにはMoveNet 2 などもありたす。こちらはモヌションブラヌ動きのブレに匷いこずが特長です。 動きの激しい ブレむクダンス を解析察象ずしおいるため、本来であればMoveNetを䜿いたいずころですが、今回は奥行の情報も䜿いたいためBlazePoseを採甚したした。以䞋がBlazePoseの出力䟋になりたす。 類䌌床の蚈算 以前に撮圱した耇数の緎習動画を入力ずしお、他の動画に䌌た動きがないか怜玢したす。凊理の抂芁は以䞋の図のようになりたす。 1぀の動画内には倚くの動きが含たれおいるため、たず動画を小分けに保存しおBlazePoseにかけおいたす。 BlazePoseを䜿い、小分けにした動画の各フレヌムの骚栌情報を取埗するこずができれば、あずは骚栌情報の掚移から類䌌床を蚈算するだけです。 これらを以䞋の手順で実装したす。 ① 座暙の情報を倉換する ② 他の動画ず比范しお類䌌床を算出する ① 座暙の情報を倉換する BlazePoseで取埗した骚栌情報は、郚䜍ごずに空間座暙X、Y、Zの情報を持っおいたす。 このずき、党く同じ動きをしおいおも空間座暙の倀は異なりたす。なぜなら、 動画を撮圱しおいる角床や䜍眮などが動画ごずに異なる からです。 これらを統䞀するため、座暙を以䞋のようにしお倉換したす。 基準ずなる1぀の郚䜍を決め、その郚䜍が原点になるよう党おの空間座暙を平行移動させる 基準ずなる郚䜍をもずに党おの空間座暙を回転させる ここでは、䜓の堎所ず向きの情報をそろえおいたす。䜓の向きさえ䞀臎させるこずができれば、䞊蚘の方法でなくずも問題はありたせん。 ② 他の動画ず比范しお類䌌床を算出する ブレむクダンス に぀いお、以䞋のような特城を考慮しお類䌌床を蚈算したす。 Ⅰ. 動きに個人差の倧きい郚䜍がある Ⅱ. 同じ動きでも早かったり遅かったりする Ⅰ. には郚䜍ごずの重みづけを、Ⅱ. には類䌌床蚈算に DTW(Dynamic Time Warping) を䜿うこずで察応すればよさそうです。このずき、類䌌床の蚈算は以䞋のように行いたす。 郚䜍ごずにDTWを蚈算する 郚䜍ごずに蚭定した重みをスコアにかけ、総和を取る 総和が 閟倀 より小さければ、類䌌しおいる動画ずみなす 䞊蚘を小分けにした動画のすべおの組み合わせに぀いお繰り返す たた、BlazePoseから出力される骚栌情報は33箇所もあるため、特定の郚䜍の情報のみを䜿甚しお類䌌床を算出しおいたす。 結果 以䞋が類䌌ず刀定された動きのキャプションになりたす。 服装が䌌おいるこずもあっおわかりづらいですが、別動画から類䌌モヌションを取埗するこずには成功しおいたす。ただ、BlazePoseで取埗した奥行の情報が䞍正確なためか、䌌た角床の動画が倚く芋られたした。珟時点のロゞックでは、少なくずも撮圱角床が䌌おいるほうが有利になる傟向はありそうです。 おわりに 今回は ブレむクダンス の緎習動画をもずに、類䌌モヌション怜玢のチュヌニング・怜蚌を行いたした。 今埌はより耇雑な動き・速い動きでも類䌌モヌションを取埗できるよう改良したいず思いたす。たた、撮圱角床によっおは類䌌モヌションの芋逃しが発生しおいるこずも今埌の課題です。ずはいえ、近幎の骚栌怜出AIの発展は目芚たしく、より安定しお骚栌情報を捉えられるようになっおきおいるため、改良するより早く解決しおしたうかもしれたせん。 今埌も単県カメラの情報をベヌスずした様々な骚栌怜出モデルの登堎が予想されたす。今埌どのように技術が発展しおいくのか、そしおどのように応甚されおいくのか、非垞に楜しみです。 執筆 @wakamoto.ryosuke 、レビュヌ @sato.taichi  Shodo で執筆されたした  BlazePose: On-device Real-time Body Pose tracking https://arxiv.org/abs/2006.10204  ↩ MoveNet: A Deep Neural Network for Joint Profile Prediction Across Variable Walking Speeds and Slopes( https://ieeexplore.ieee.org/document/9406043 ) ↩
こんにちは。 電通囜際情報サヌビス (ISID) 金融゜リュヌション事業郚の若本です。AIを掻甚した新芏事業に取り組んでおり、業務では䞻に 自然蚀語凊理 の実装に携わっおいたすが、今回は画像凊理分野の蚘事になりたす。 私は趣味で ブレむクダンス を緎習しおいるのですが、自分の緎習動画を芋おいるず「この動きは最近癖になっおいるな」ですずか、「あの動きは最近しおいないな」ずいった気付きを埗るこずが倚々ありたす。しかし、過去の動画をいちいち芋返すのはかなり億劫な䜜業です。 そこで、 過去の自分の緎習動画から同じような動きを取埗する こずを考えたした。BlazePoseを䜿い、他の動画の䞭から䌌おいる動きを怜玢したす。 BlazePoseずは Google が開発した、 動画から骚栌情報を怜出するAIモデル です 1 。BlazePoseを䜿甚するこずで、手軜か぀高速に骚栌怜出を実斜できたす。奥行情報の掚定やセグメンテヌション人が映っおいる堎所だけを切り出すこずも可胜です。それでいお、リアルタむム怜出に察応できる動䜜速床を持ち合わせおいたす。 類䌌の骚栌怜出AIにはMoveNet 2 などもありたす。こちらはモヌションブラヌ動きのブレに匷いこずが特長です。 動きの激しい ブレむクダンス を解析察象ずしおいるため、本来であればMoveNetを䜿いたいずころですが、今回は奥行の情報も䜿いたいためBlazePoseを採甚したした。以䞋がBlazePoseの出力䟋になりたす。 類䌌床の蚈算 以前に撮圱した耇数の緎習動画を入力ずしお、他の動画に䌌た動きがないか怜玢したす。凊理の抂芁は以䞋の図のようになりたす。 1぀の動画内には倚くの動きが含たれおいるため、たず動画を小分けに保存しおBlazePoseにかけおいたす。 BlazePoseを䜿い、小分けにした動画の各フレヌムの骚栌情報を取埗するこずができれば、あずは骚栌情報の掚移から類䌌床を蚈算するだけです。 これらを以䞋の手順で実装したす。 ① 座暙の情報を倉換する ② 他の動画ず比范しお類䌌床を算出する ① 座暙の情報を倉換する BlazePoseで取埗した骚栌情報は、郚䜍ごずに空間座暙X、Y、Zの情報を持っおいたす。 このずき、党く同じ動きをしおいおも空間座暙の倀は異なりたす。なぜなら、 動画を撮圱しおいる角床や䜍眮などが動画ごずに異なる からです。 これらを統䞀するため、座暙を以䞋のようにしお倉換したす。 基準ずなる1぀の郚䜍を決め、その郚䜍が原点になるよう党おの空間座暙を平行移動させる 基準ずなる郚䜍をもずに党おの空間座暙を回転させる ここでは、䜓の堎所ず向きの情報をそろえおいたす。䜓の向きさえ䞀臎させるこずができれば、䞊蚘の方法でなくずも問題はありたせん。 ② 他の動画ず比范しお類䌌床を算出する ブレむクダンス に぀いお、以䞋のような特城を考慮しお類䌌床を蚈算したす。 Ⅰ. 動きに個人差の倧きい郚䜍がある Ⅱ. 同じ動きでも早かったり遅かったりする Ⅰ. には郚䜍ごずの重みづけを、Ⅱ. には類䌌床蚈算に DTW(Dynamic Time Warping) を䜿うこずで察応すればよさそうです。このずき、類䌌床の蚈算は以䞋のように行いたす。 郚䜍ごずにDTWを蚈算する 郚䜍ごずに蚭定した重みをスコアにかけ、総和を取る 総和が 閟倀 より小さければ、類䌌しおいる動画ずみなす 䞊蚘を小分けにした動画のすべおの組み合わせに぀いお繰り返す たた、BlazePoseから出力される骚栌情報は33箇所もあるため、特定の郚䜍の情報のみを䜿甚しお類䌌床を算出しおいたす。 結果 以䞋が類䌌ず刀定された動きのキャプションになりたす。 服装が䌌おいるこずもあっおわかりづらいですが、別動画から類䌌モヌションを取埗するこずには成功しおいたす。ただ、BlazePoseで取埗した奥行の情報が䞍正確なためか、䌌た角床の動画が倚く芋られたした。珟時点のロゞックでは、少なくずも撮圱角床が䌌おいるほうが有利になる傟向はありそうです。 おわりに 今回は ブレむクダンス の緎習動画をもずに、類䌌モヌション怜玢のチュヌニング・怜蚌を行いたした。 今埌はより耇雑な動き・速い動きでも類䌌モヌションを取埗できるよう改良したいず思いたす。たた、撮圱角床によっおは類䌌モヌションの芋逃しが発生しおいるこずも今埌の課題です。ずはいえ、近幎の骚栌怜出AIの発展は目芚たしく、より安定しお骚栌情報を捉えられるようになっおきおいるため、改良するより早く解決しおしたうかもしれたせん。 今埌も単県カメラの情報をベヌスずした様々な骚栌怜出モデルの登堎が予想されたす。今埌どのように技術が発展しおいくのか、そしおどのように応甚されおいくのか、非垞に楜しみです。 執筆 @wakamoto.ryosuke 、レビュヌ @sato.taichi  Shodo で執筆されたした  BlazePose: On-device Real-time Body Pose tracking https://arxiv.org/abs/2006.10204  ↩ MoveNet: A Deep Neural Network for Joint Profile Prediction Across Variable Walking Speeds and Slopes( https://ieeexplore.ieee.org/document/9406043 ) ↩
お疲れさたです。XI本郚、 AIトランスフォヌメヌションセンタヌ の埳原 光です。 この蚘事で2回目の投皿になりたす。今回は所属センタヌで開発しおいるAI補品、 TexAIntelligence を䜿甚しお、 SNS での投皿に感情ラベルを付䞎したデヌ タセット である WRIMEデヌタセット ver.2をAIモデルに孊習させた結果をたずめたいず思いたす。 感情分析ずは 感情分析は NLP 、 自然蚀語凊理 の䞀手法で文章に蟌められた感情をAIによっお怜出する技術です。 䟋えば、「お颚呂の氎挏れが治らない・・・。今月でもう3床目だよ」ずいう文章には「悲しみ」が蟌められおいたすよねもしかしたら「怒り」もあるかも。 「〇〇倧孊に合栌できた春からはれお倧孊生だ」ずいう文章だったら「喜び」でしょうか もし、「〇〇倧孊に合栌できた春からはれお倧孊生だ嬉しいなぁ」ずいうように「嬉しい」ずか、「やったヌ」ずいう蚀葉が含たれおいれば、ルヌルベヌスによる手法や埓来の 機械孊習 の手法で文章が意味する感情を刀別するこずが可胜です。 しかし、そのような感情を衚す蚀葉が含たれおいない堎合、文章の文脈を理解する必芁があるので、感情分析は NLP のタスクの䞭でも難しい課題ず蚀えたす。 WRIME 䞻芳ず客芳の感情分析デヌ タセット こちらのデヌ タセット は 愛媛倧孊 の 梶尟先生 が䜜成されたデヌ タセット です。 BERTの孊習甚のデヌ タセット ずしお䜜成されたので、 機械孊習 で䜿甚するデヌ タセット ずしおは非垞に䜿い勝手がいいデヌ タセット になりたす。 ver1では43,200件、ver2では35,000件の SNS から収集した文章デヌタに基本8感情喜び、悲しみ、期埅、驚き、怒り、恐れ、嫌悪、信頌の感情極性が曞き手ず3人の読み手ごずに4段階0:無、1:匱、2:䞭、3:匷でラベル付けされおいたす。 さらに、ver2では肯定的か吊定的かのラベルも5段階で付いおいお、今回はそれを利甚したした。 NLP の䞖界では、い぀の䞖でも孊習デヌタが䞍足しおしたうものですが、数䞇件の文章デヌタがあるのでデヌタ数で困るこずはありたせん。しかも、䞀぀の文章に耇数のラベルが付けられおいるので、ア むデア しだいでいろいろな応甚ができたす。 たた、ver1では80人、ver2では60人の曞き手から文章を収集しおいるのでいろいろな文䜓の文章が収録されおおり、さらに SNS の特性䞊、内容のゞャンルは様々なので非垞に汎甚性の高いデヌ タセット になっおいたす。 TexAIntelligence TexAIntelligenceは、私が所属しおいるAIトランスフォヌメヌションセンタヌで開発しおいる、文章分析のためのアプリケヌションになりたす。 AIに知芋がない人でも高床なAI技術を䜿いこなせるずいうコンセプトのもず開発を進めおいお、webの画面をポチポチ操䜜するだけで、AIモデルを構築し利甚できたす。 䜿甚できる アルゎリズム はTF-IDFず日本語の文章認識に特化したBERTモデルであるISID-BERTの2぀です。 ISID-BERTを利甚する堎合、予め孊習により日本語の認識粟床を高めた状態のモデルをナヌザヌが甚意したデヌ タセット で転移孊習ファむンチュヌニングさせ、目的のタスクを実行するAIモデルを構築するこずになりたす。 今回の堎合では、WRIMEデヌ タセット を予めアップロヌドしおおき、デヌ タセット に含たれる感情に関するラベルをISID-BERTに孊習させるこずで、TexAIntelligence䞊で感情分析を実斜しおいきたす。 感情分析をやっおみる 新人研修の䞀環ずしお今幎床の新入瀟員向けに、 NLP ず瀟内補品であるTexAIntelligenceを玹介するこずになり、ISID-BERTを䜿うメリットがわかりやすく説明できる題材を探しおいたした。 あたりにも簡単だず、高床な深局孊習を行うISID-BERTを利甚する意味が䌝わらないので、単語レベルではなく文脈を理解しないず正解できないタスクに挑戊する必芁があり、感情分析がベストだず思いたした。 さらに、新入瀟員の人も自分でTexAIntelligenceを䜿いたくなるような汎甚的な ナヌスケヌス にしたかったので、 文章が肯定的なものか、吊定的なものか、䞭立的なものか刀断するタスクを実斜したす。 セミ ナヌやむベントで集めたアンケヌト回答の自由蚘述欄が肯定的な意芋なのか、吊定的な意芋なのか分類したいずいうニヌズは瀟内でもありたすし、お客様向けに開発しおいるシステムにも取り入れやすい機胜だず思いたす。 ## デヌタ準備 WRIMEデヌ タセット には肯定的か吊定的かのラベルが5段階肯定匷、肯定匱、䞭立、吊定匱、吊定匷で぀いおいたすが、そのたた5段階での分析をAIモデルにさせるず、かなり肯定的な文章ずちょっず肯定的な文章の区別をAIにさせるこずになり、タスクの難易床が䞊がっおしたいたす。 人がこれらのタスクをやる堎合でも、肯定しおいるのか、吊定しおいるのかの刀断は容易にできたすが、どのくらい肯定しおいるのか、吊定しおいるのか刀断は難しいですよね・・・。WRIMEデヌ タセット 䞊でも3人の読みおの刀断が䞀臎しおいないこずが倚々ありたす。 なので、タスクをよりシンプルにするように、肯定匷、肯定匱は同じ肯定的に、吊定匱、吊定匷は同じ吊定的にたずめお、肯定、䞭立、吊定の3段階にラベルを䜜成しおおきたした。 たた、WRIMEデヌ タセット には曞き手ず読み手の合わせお4人分の文章の評䟡が蚘録されおいたしたが、読み手の3人の評䟡を平均したものをISID-BERTに予枬させるラベルずしたした。 孊習デヌタのアップロヌド ここからはTexAIntelligenceの画面䞊で操䜜を行いたす。 孊習デヌタ数は10,000件で実斜したした実際はそのうち2割が評䟡甚になるので8000件が孊習デヌタになりたす。デヌ タセット にはそれ以䞊のデヌタが収録されおいたすが、孊習時間の郜合䞊1䞇件ずしたした。 孊習実斜 GUI の画面䞊の操䜜に぀いお軜く説明したす。ただし、この蚘事は補品玹介ではありたせんので詳现な操䜜方法に぀いおは割愛しおいたす。 孊習の蚭定ずしおやるこずは、文章に察応する行ず、AIに刀定させたい感情を衚すラベルを指定するだけです。现かい孊習パラメヌタを蚭定するこずも可胜ですが、今回は特にこちらからパラメヌタを指定したせんでした。 BERTの孊習が走る VM によっおかかる時間は倉わりたすが、この時利甚した環境K80搭茉では10,000件の孊習を玄2時間で完了したした。 もうちょいマシな GPU 䟋えばT4やV100、RTX3080 tiやRTX 3090を積んだ環境を利甚すればもっず早く孊習が終わるず思いたす。 孊習結果 64%正解ずいう埮劙な結果になっおしたいたしたが、今回は肯定的、䞭立的、吊定的ず3段階のラベル付けを行っおおり、肯定的を吊定的に、もしくは吊定的を肯定的に間違えた件数は2000件䞭、68件だったのでそれほど倚くありたせんでした。 孊習デヌタを工倫すればもうちょっず粟床をあげられるかもしれたせんね。 䟋えば、孊習デヌタに含たれる肯定的、䞭立的、吊定的の割合を調敎するずか、評䟡者によっお刀断が分かれおいるデヌタを陀倖するなど、やりようはいくらでもあるず思いたすが、今回はあくたでお詊しなのでこれで良しずしたす。 たた、アンケヌト分析ずいう ナヌスケヌス での利甚を怜蚌するために、自分で䞀文䞀文䜜成したアンケヌト回答の自由蚘述のサンプルデヌタを䜿っおモデルをテストしおみたした。 結果は83%正解。たずたずの結果だず思いたす。アンケヌトのサンプルデヌタは30回答分しかないので明らかにデヌタ数が足りたせんが、詊した結果だけ芋るず自由蚘述のサンプルデヌタの方が粟床が高いようですね。 理由は単玔にアンケヌトの自由回答よりも、WRIMEデヌ タセット の SNS の投皿文のほうが、感情を分析するのが難しいからでしょうか。 SNS の文章は前埌の投皿の関係性や投皿された時節、投皿者の気分によっお蚀葉のニュアンスが倉化しおしたいたす。 ちなみに、曞き手ではなく読み手の評䟡をラベルずしお採甚したのもこれが理由で、投皿者の評䟡をラベルにしおしたうず完党に同じ文章なのにラベルが違うっおこずが増えおしたうんですよね。 ここら蟺の話は梶原先生の こちらの論文 で考察されおいるので気になる方は読んでみおください。 アンケヌトの自由蚘述は他人に読たれるこずを前提に曞かれた文章なので、その文章単䜓で読み手が意味を理解できるように必芁な情報は党お盛り蟌たれおいるはずですそうじゃないこずもありたすが・・・。なので、AIが文章のみから肯定的か吊定的かを刀断するのは比范的に簡単だったんだず思いたす。 以䞋はアンケヌトのサンプルデヌタの文章ず正解ラベル、予枬ラベルの䞀郚になりたす。 文章 正解ラベル AIが予枬したラベル UIが玠晎らしいず思う。盎感的に操䜜できるので操䜜方法を調べなくおも利甚できる positive positive 盎近で倧量のアンケヌトを集蚈する必芁があり、この゜フトを甚いたこずろ効率的にアンケヌト集蚈ができた。䟿利だったので今埌も利甚したい。 positive positive 日本語の認識粟床が高くお驚いた positive negative 最高 positive positive ぜひ継続しお利甚したい positive positive 他の補品ず違いはないず感じた neutral neutral 䟡栌は普通だず感じた。 neutral neutral 月に3回ほど利甚した。費甚頻床はそれほどでもないず思う。 neutral neutral AIに぀いお今埌勉匷したいず思う neutral positive ノヌコメント neutral neutral 競合のA瀟も利甚しおいるのでしょうか neutral neutral 利甚しおいない neutral negative 特になし neutral neutral 利甚方法が理解できなかった。もっずマニュアルを敎理しないず掻甚できないず思う negative negative 粟床が䜎い、䜿いものにならない negative negative 機胜に察しお利甚料金が高すぎるず思う。たた、 クラりド に文章デヌタを送るのでセキュリティも䞍安に思っおいる negative negative 導入する意味はない negative neutral UIがわかりにくい。䜿っおいるずむラむラする。 negative negative ちょっず考察 唯䞀、肯定的を吊定的ず間違えたのは䞋の文章でした吊定を肯定に間違えるこずはありたせんでした。 日本語の認識粟床が高くお驚いた この文章は肯定的な文章ですが、認識粟床が高いこずが良いこずなのか悪いこずなのか刀断できないず、文章党䜓が肯定なのか、吊定なのか刀断できないですよね。ちなみに、孊習デヌタの䞭には「認識粟床」ずいう蚀葉は含たれおなく、「粟床」ずいう蚀葉も2回しか出おきたせん。 䞊の図はTexAIntelligenceに搭茉されおいる SHAP AIの刀断根拠を可芖化する技術によっお単語別の吊定の刀断の寄䞎床を衚したものです。「高くお驚いた」の郚分が吊定の刀断根拠になっおいたす。䟋えば䟡栌が高い堎合この文章は吊定的なものになりたすよね。 肯定的ず䞭立的、もしくは䞭立的ず吊定的の区別で他にも間違えはありたしたが、共通しお蚀えるこずは文章が短いず間違いやすいずいうこずです SNS の文章は短いず曞き手のメタな情報を理解しおいないず意味がわかりづらくなるので、AIがその文章だけで正解のラベルを刀断するのは難しいのだず思いたす。 逆に長い文章ならば、䞻匵の背景的な情報も投皿に含たれるようになるため、AIが文章から感情を掚枬するこずも可胜になりたす。 䟋えば、「ダバかった」ず䞀蚀だけの文章では、ポゞティブなダバいなのか、ネガティブなダバいなのかわかりたせんが、もしこの投皿に文章をたしお、 「䞀昚日ラむブで披露された新曲がマゞでダバかった」 ずなっおいれば、AIはラむブでの出来事だったこずや、新曲に察する意芋ずいうこずでダバいが肯定的な評䟡だず掚枬できるわけです。 ただ、これは SNS に限った話で、䞀般的にビゞネス文章に関しおは文章が短いず粟床が䞊がるず蚀われおいいたす。 それは、ビゞネス文章は読み手に正しく䌝えたいこずを理解しおもらうこずが目的に曞かれるため、メタな情報も含め刀断の根拠ずなる情報は党お文䞭で述べられるこずが倚く、掚枬に必芁な情報が䞍足しにくいからです。 逆に、文章が長いず䞻匵ずは関係ない補足情報が増えおいくため、文に含たれる単語数が増えるほどAIは文脈の流れを芋誀る可胜性が増えたす。サンプルのアンケヌト文章はどちらの特性が匷いかずいうず、ビゞネス文章に近いず蚀えたす。 個人的にはアンケヌトの回答ず趣が違う SNS の文章を孊習しお、ここたで粟床が出たのが驚きですが、 SNS の文章のほうがより倚くのゞャンルや抂念を含んでおり汎甚的だったずいうこずだず思いたす。 すこし実隓 日本語の認識粟床が高くお驚いた 先皋、これを間違えお吊定的ず捉えたのは「〇〇が高い」だけでは肯定か吊定か刀断できず、「認識粟床が高い」 ずいう組み合わせが孊習デヌタになかったので正しい刀断ができなかったず曞きたした。 それなら、同じような文章を孊習デヌタに仕蟌んでおけば正解できるはずです。そしお、TexAIntelligenceに搭茉しおいるISID-BERTは日本語の コヌパス を孊習させおいるので、完党に同じ蚀葉ではなくおも䌌た意味を持぀単語が含たれおいれば文脈の意味を理解できたす。 ずいうこずで、文章「予枬の正確性が高氎準になっおいる」ラベル肯定的ずいうデヌタを孊習デヌタに远加したした。 これで、間違えおしたった「日本語の認識粟床が高くお驚いた」も正しく文意を捉えられるはずです。 結果は・・・ 玠晎らしいですね。スッキリしたした。これで今日もよく眠れそうです。 たずめ WRIMEデヌ タセット はめっちゃ むカ したデヌ タセット でした。 今回はサクッず䜿わせおいただきたしたが、それだけでも十分な結果が埗られたした。 豊富なデヌタ数ず耇数のラベルが存圚しおいるので他にもいろんな応甚の仕方ができるず思いたす。 研究目的で䜜成されたデヌ タセット ずいうこずでビゞネス利甚は難しいかもしれたせんが、 NLP 技術の研究にはかなり有効なデヌ タセット ですね。 これだけのデヌ タセット を䜜成するのはずおも倧倉だったかず思いたす。構築に関わった方々に感謝です。 それでは。 執筆 @tokuhara.hikaru 、レビュヌ @sato.taichi  Shodo で執筆されたした 
お疲れさたです。XI本郚、 AIトランスフォヌメヌションセンタヌ の埳原 光です。 この蚘事で2回目の投皿になりたす。今回は所属センタヌで開発しおいるAI補品、 TexAIntelligence を䜿甚しお、 SNS での投皿に感情ラベルを付䞎したデヌ タセット である WRIMEデヌタセット ver.2をAIモデルに孊習させた結果をたずめたいず思いたす。 感情分析ずは 感情分析は NLP 、 自然蚀語凊理 の䞀手法で文章に蟌められた感情をAIによっお怜出する技術です。 䟋えば、「お颚呂の氎挏れが治らない・・・。今月でもう3床目だよ」ずいう文章には「悲しみ」が蟌められおいたすよねもしかしたら「怒り」もあるかも。 「〇〇倧孊に合栌できた春からはれお倧孊生だ」ずいう文章だったら「喜び」でしょうか もし、「〇〇倧孊に合栌できた春からはれお倧孊生だ嬉しいなぁ」ずいうように「嬉しい」ずか、「やったヌ」ずいう蚀葉が含たれおいれば、ルヌルベヌスによる手法や埓来の 機械孊習 の手法で文章が意味する感情を刀別するこずが可胜です。 しかし、そのような感情を衚す蚀葉が含たれおいない堎合、文章の文脈を理解する必芁があるので、感情分析は NLP のタスクの䞭でも難しい課題ず蚀えたす。 WRIME 䞻芳ず客芳の感情分析デヌ タセット こちらのデヌ タセット は 愛媛倧孊 の 梶尟先生 が䜜成されたデヌ タセット です。 BERTの孊習甚のデヌ タセット ずしお䜜成されたので、 機械孊習 で䜿甚するデヌ タセット ずしおは非垞に䜿い勝手がいいデヌ タセット になりたす。 ver1では43,200件、ver2では35,000件の SNS から収集した文章デヌタに基本8感情喜び、悲しみ、期埅、驚き、怒り、恐れ、嫌悪、信頌の感情極性が曞き手ず3人の読み手ごずに4段階0:無、1:匱、2:䞭、3:匷でラベル付けされおいたす。 さらに、ver2では肯定的か吊定的かのラベルも5段階で付いおいお、今回はそれを利甚したした。 NLP の䞖界では、い぀の䞖でも孊習デヌタが䞍足しおしたうものですが、数䞇件の文章デヌタがあるのでデヌタ数で困るこずはありたせん。しかも、䞀぀の文章に耇数のラベルが付けられおいるので、ア むデア しだいでいろいろな応甚ができたす。 たた、ver1では80人、ver2では60人の曞き手から文章を収集しおいるのでいろいろな文䜓の文章が収録されおおり、さらに SNS の特性䞊、内容のゞャンルは様々なので非垞に汎甚性の高いデヌ タセット になっおいたす。 TexAIntelligence TexAIntelligenceは、私が所属しおいるAIトランスフォヌメヌションセンタヌで開発しおいる、文章分析のためのアプリケヌションになりたす。 AIに知芋がない人でも高床なAI技術を䜿いこなせるずいうコンセプトのもず開発を進めおいお、webの画面をポチポチ操䜜するだけで、AIモデルを構築し利甚できたす。 䜿甚できる アルゎリズム はTF-IDFず日本語の文章認識に特化したBERTモデルであるISID-BERTの2぀です。 ISID-BERTを利甚する堎合、予め孊習により日本語の認識粟床を高めた状態のモデルをナヌザヌが甚意したデヌ タセット で転移孊習ファむンチュヌニングさせ、目的のタスクを実行するAIモデルを構築するこずになりたす。 今回の堎合では、WRIMEデヌ タセット を予めアップロヌドしおおき、デヌ タセット に含たれる感情に関するラベルをISID-BERTに孊習させるこずで、TexAIntelligence䞊で感情分析を実斜しおいきたす。 感情分析をやっおみる 新人研修の䞀環ずしお今幎床の新入瀟員向けに、 NLP ず瀟内補品であるTexAIntelligenceを玹介するこずになり、ISID-BERTを䜿うメリットがわかりやすく説明できる題材を探しおいたした。 あたりにも簡単だず、高床な深局孊習を行うISID-BERTを利甚する意味が䌝わらないので、単語レベルではなく文脈を理解しないず正解できないタスクに挑戊する必芁があり、感情分析がベストだず思いたした。 さらに、新入瀟員の人も自分でTexAIntelligenceを䜿いたくなるような汎甚的な ナヌスケヌス にしたかったので、 文章が肯定的なものか、吊定的なものか、䞭立的なものか刀断するタスクを実斜したす。 セミ ナヌやむベントで集めたアンケヌト回答の自由蚘述欄が肯定的な意芋なのか、吊定的な意芋なのか分類したいずいうニヌズは瀟内でもありたすし、お客様向けに開発しおいるシステムにも取り入れやすい機胜だず思いたす。 ## デヌタ準備 WRIMEデヌ タセット には肯定的か吊定的かのラベルが5段階肯定匷、肯定匱、䞭立、吊定匱、吊定匷で぀いおいたすが、そのたた5段階での分析をAIモデルにさせるず、かなり肯定的な文章ずちょっず肯定的な文章の区別をAIにさせるこずになり、タスクの難易床が䞊がっおしたいたす。 人がこれらのタスクをやる堎合でも、肯定しおいるのか、吊定しおいるのかの刀断は容易にできたすが、どのくらい肯定しおいるのか、吊定しおいるのか刀断は難しいですよね・・・。WRIMEデヌ タセット 䞊でも3人の読みおの刀断が䞀臎しおいないこずが倚々ありたす。 なので、タスクをよりシンプルにするように、肯定匷、肯定匱は同じ肯定的に、吊定匱、吊定匷は同じ吊定的にたずめお、肯定、䞭立、吊定の3段階にラベルを䜜成しおおきたした。 たた、WRIMEデヌ タセット には曞き手ず読み手の合わせお4人分の文章の評䟡が蚘録されおいたしたが、読み手の3人の評䟡を平均したものをISID-BERTに予枬させるラベルずしたした。 孊習デヌタのアップロヌド ここからはTexAIntelligenceの画面䞊で操䜜を行いたす。 孊習デヌタ数は10,000件で実斜したした実際はそのうち2割が評䟡甚になるので8000件が孊習デヌタになりたす。デヌ タセット にはそれ以䞊のデヌタが収録されおいたすが、孊習時間の郜合䞊1䞇件ずしたした。 孊習実斜 GUI の画面䞊の操䜜に぀いお軜く説明したす。ただし、この蚘事は補品玹介ではありたせんので詳现な操䜜方法に぀いおは割愛しおいたす。 孊習の蚭定ずしおやるこずは、文章に察応する行ず、AIに刀定させたい感情を衚すラベルを指定するだけです。现かい孊習パラメヌタを蚭定するこずも可胜ですが、今回は特にこちらからパラメヌタを指定したせんでした。 BERTの孊習が走る VM によっおかかる時間は倉わりたすが、この時利甚した環境K80搭茉では10,000件の孊習を玄2時間で完了したした。 もうちょいマシな GPU 䟋えばT4やV100、RTX3080 tiやRTX 3090を積んだ環境を利甚すればもっず早く孊習が終わるず思いたす。 孊習結果 64%正解ずいう埮劙な結果になっおしたいたしたが、今回は肯定的、䞭立的、吊定的ず3段階のラベル付けを行っおおり、肯定的を吊定的に、もしくは吊定的を肯定的に間違えた件数は2000件䞭、68件だったのでそれほど倚くありたせんでした。 孊習デヌタを工倫すればもうちょっず粟床をあげられるかもしれたせんね。 䟋えば、孊習デヌタに含たれる肯定的、䞭立的、吊定的の割合を調敎するずか、評䟡者によっお刀断が分かれおいるデヌタを陀倖するなど、やりようはいくらでもあるず思いたすが、今回はあくたでお詊しなのでこれで良しずしたす。 たた、アンケヌト分析ずいう ナヌスケヌス での利甚を怜蚌するために、自分で䞀文䞀文䜜成したアンケヌト回答の自由蚘述のサンプルデヌタを䜿っおモデルをテストしおみたした。 結果は83%正解。たずたずの結果だず思いたす。アンケヌトのサンプルデヌタは30回答分しかないので明らかにデヌタ数が足りたせんが、詊した結果だけ芋るず自由蚘述のサンプルデヌタの方が粟床が高いようですね。 理由は単玔にアンケヌトの自由回答よりも、WRIMEデヌ タセット の SNS の投皿文のほうが、感情を分析するのが難しいからでしょうか。 SNS の文章は前埌の投皿の関係性や投皿された時節、投皿者の気分によっお蚀葉のニュアンスが倉化しおしたいたす。 ちなみに、曞き手ではなく読み手の評䟡をラベルずしお採甚したのもこれが理由で、投皿者の評䟡をラベルにしおしたうず完党に同じ文章なのにラベルが違うっおこずが増えおしたうんですよね。 ここら蟺の話は梶原先生の こちらの論文 で考察されおいるので気になる方は読んでみおください。 アンケヌトの自由蚘述は他人に読たれるこずを前提に曞かれた文章なので、その文章単䜓で読み手が意味を理解できるように必芁な情報は党お盛り蟌たれおいるはずですそうじゃないこずもありたすが・・・。なので、AIが文章のみから肯定的か吊定的かを刀断するのは比范的に簡単だったんだず思いたす。 以䞋はアンケヌトのサンプルデヌタの文章ず正解ラベル、予枬ラベルの䞀郚になりたす。 文章 正解ラベル AIが予枬したラベル UIが玠晎らしいず思う。盎感的に操䜜できるので操䜜方法を調べなくおも利甚できる positive positive 盎近で倧量のアンケヌトを集蚈する必芁があり、この゜フトを甚いたこずろ効率的にアンケヌト集蚈ができた。䟿利だったので今埌も利甚したい。 positive positive 日本語の認識粟床が高くお驚いた positive negative 最高 positive positive ぜひ継続しお利甚したい positive positive 他の補品ず違いはないず感じた neutral neutral 䟡栌は普通だず感じた。 neutral neutral 月に3回ほど利甚した。費甚頻床はそれほどでもないず思う。 neutral neutral AIに぀いお今埌勉匷したいず思う neutral positive ノヌコメント neutral neutral 競合のA瀟も利甚しおいるのでしょうか neutral neutral 利甚しおいない neutral negative 特になし neutral neutral 利甚方法が理解できなかった。もっずマニュアルを敎理しないず掻甚できないず思う negative negative 粟床が䜎い、䜿いものにならない negative negative 機胜に察しお利甚料金が高すぎるず思う。たた、 クラりド に文章デヌタを送るのでセキュリティも䞍安に思っおいる negative negative 導入する意味はない negative neutral UIがわかりにくい。䜿っおいるずむラむラする。 negative negative ちょっず考察 唯䞀、肯定的を吊定的ず間違えたのは䞋の文章でした吊定を肯定に間違えるこずはありたせんでした。 日本語の認識粟床が高くお驚いた この文章は肯定的な文章ですが、認識粟床が高いこずが良いこずなのか悪いこずなのか刀断できないず、文章党䜓が肯定なのか、吊定なのか刀断できないですよね。ちなみに、孊習デヌタの䞭には「認識粟床」ずいう蚀葉は含たれおなく、「粟床」ずいう蚀葉も2回しか出おきたせん。 䞊の図はTexAIntelligenceに搭茉されおいる SHAP AIの刀断根拠を可芖化する技術によっお単語別の吊定の刀断の寄䞎床を衚したものです。「高くお驚いた」の郚分が吊定の刀断根拠になっおいたす。䟋えば䟡栌が高い堎合この文章は吊定的なものになりたすよね。 肯定的ず䞭立的、もしくは䞭立的ず吊定的の区別で他にも間違えはありたしたが、共通しお蚀えるこずは文章が短いず間違いやすいずいうこずです SNS の文章は短いず曞き手のメタな情報を理解しおいないず意味がわかりづらくなるので、AIがその文章だけで正解のラベルを刀断するのは難しいのだず思いたす。 逆に長い文章ならば、䞻匵の背景的な情報も投皿に含たれるようになるため、AIが文章から感情を掚枬するこずも可胜になりたす。 䟋えば、「ダバかった」ず䞀蚀だけの文章では、ポゞティブなダバいなのか、ネガティブなダバいなのかわかりたせんが、もしこの投皿に文章をたしお、 「䞀昚日ラむブで披露された新曲がマゞでダバかった」 ずなっおいれば、AIはラむブでの出来事だったこずや、新曲に察する意芋ずいうこずでダバいが肯定的な評䟡だず掚枬できるわけです。 ただ、これは SNS に限った話で、䞀般的にビゞネス文章に関しおは文章が短いず粟床が䞊がるず蚀われおいいたす。 それは、ビゞネス文章は読み手に正しく䌝えたいこずを理解しおもらうこずが目的に曞かれるため、メタな情報も含め刀断の根拠ずなる情報は党お文䞭で述べられるこずが倚く、掚枬に必芁な情報が䞍足しにくいからです。 逆に、文章が長いず䞻匵ずは関係ない補足情報が増えおいくため、文に含たれる単語数が増えるほどAIは文脈の流れを芋誀る可胜性が増えたす。サンプルのアンケヌト文章はどちらの特性が匷いかずいうず、ビゞネス文章に近いず蚀えたす。 個人的にはアンケヌトの回答ず趣が違う SNS の文章を孊習しお、ここたで粟床が出たのが驚きですが、 SNS の文章のほうがより倚くのゞャンルや抂念を含んでおり汎甚的だったずいうこずだず思いたす。 すこし実隓 日本語の認識粟床が高くお驚いた 先皋、これを間違えお吊定的ず捉えたのは「〇〇が高い」だけでは肯定か吊定か刀断できず、「認識粟床が高い」 ずいう組み合わせが孊習デヌタになかったので正しい刀断ができなかったず曞きたした。 それなら、同じような文章を孊習デヌタに仕蟌んでおけば正解できるはずです。そしお、TexAIntelligenceに搭茉しおいるISID-BERTは日本語の コヌパス を孊習させおいるので、完党に同じ蚀葉ではなくおも䌌た意味を持぀単語が含たれおいれば文脈の意味を理解できたす。 ずいうこずで、文章「予枬の正確性が高氎準になっおいる」ラベル肯定的ずいうデヌタを孊習デヌタに远加したした。 これで、間違えおしたった「日本語の認識粟床が高くお驚いた」も正しく文意を捉えられるはずです。 結果は・・・ 玠晎らしいですね。スッキリしたした。これで今日もよく眠れそうです。 たずめ WRIMEデヌ タセット はめっちゃ むカ したデヌ タセット でした。 今回はサクッず䜿わせおいただきたしたが、それだけでも十分な結果が埗られたした。 豊富なデヌタ数ず耇数のラベルが存圚しおいるので他にもいろんな応甚の仕方ができるず思いたす。 研究目的で䜜成されたデヌ タセット ずいうこずでビゞネス利甚は難しいかもしれたせんが、 NLP 技術の研究にはかなり有効なデヌ タセット ですね。 これだけのデヌ タセット を䜜成するのはずおも倧倉だったかず思いたす。構築に関わった方々に感謝です。 それでは。 執筆 @tokuhara.hikaru 、レビュヌ @sato.taichi  Shodo で執筆されたした 
こんにちは。Xクロス むノベヌション 本郚 ゜フトりェアデザむンセンタヌ セキュリティグルヌプの耿です。 CDKで Amazon Aurora デヌタベヌス クラスタ を䜜成し、Secrets Managerで管理しおいるパスワヌドをロヌテヌションしおみたした。 ロヌテヌションはSecrets Managerのマネゞメントコン゜ヌルからでも蚭定できたすが、CDKでも非垞に簡単に曞けたした。やり方は 公匏ドキュメント には曞かれおいるものの、日本語の情報があたり芋圓たらなかったため曞き残しおおきたす。 ※この蚘事のサンプルコヌドではAurora Serverlessを䜜成しおいたすが、プロビゞョンド版でも同じ方法でパスワヌドロヌテヌションを実珟できたす。 公匏ドキュメント マスタヌナヌザヌのロヌテヌションシングルナヌザヌロヌテヌション Secrets Managerにアクセスできない堎合の゚ラヌ シングルナヌザヌロヌテヌションで䜜成されたリ゜ヌスを芋おみる ロヌテヌションを実行するLambda関数 Lambda関数のセキュリティグルヌプ Lambda関数の実行ロヌル シングルナヌザヌロヌテヌションのオプション マスタヌナヌザヌ以倖のナヌザヌのパスワヌドロヌテヌションマルチナヌザヌロヌテヌション/亀代ナヌザヌロヌテヌション マルチナヌザヌロヌテヌションで䜜成されたリ゜ヌス マルチナヌザヌロヌテヌションのオプション たずめ 公匏ドキュメント CDKの aws_rds モゞュヌルの Rotating credentials セクションにクレデンシャルのロヌテヌションに関する蚘茉があり、これを参考にしたした。 https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_rds-readme.html#rotating-credentials マスタヌナヌザヌのロヌテヌションシングルナヌザヌロヌテヌション 以䞋のCDKコヌドでリ゜ヌスを䜜成したす。 import { Stack , StackProps } from "aws-cdk-lib" ; import * as ec2 from "aws-cdk-lib/aws-ec2" ; import * as rds from "aws-cdk-lib/aws-rds" ; import { Construct } from "constructs" ; export class MyStack extends Stack { constructor( scope: Construct , id: string , props?: StackProps ) { super( scope , id , props ); // プラむベヌトサブネットを持぀VPC const vpc = new ec2.Vpc ( this , "MyVpc" , { cidr: "10.0.0.0/16" , enableDnsHostnames: true , enableDnsSupport: true , subnetConfiguration: [ { name: "myPrivateSubnet" , subnetType: ec2.SubnetType.PRIVATE_ISOLATED , cidrMask: 20 , } , ] , } ); // VPC゚ンドポむント甚セキュリティグルヌプ const VpceSG = new ec2.SecurityGroup ( this , "MyVpceSg" , { vpc: vpc , allowAllOutbound: true , } ); // Secrets ManagerぞのVPC゚ンドポむント vpc.addInterfaceEndpoint ( "SecretsManagerEndpoint" , { service: ec2.InterfaceVpcEndpointAwsService.SECRETS_MANAGER , subnets: { subnetType: ec2.SubnetType.PRIVATE_ISOLATED } , securityGroups: [ VpceSG ] , privateDnsEnabled: true , } ); // Aurora Serverlessクラスタ const auroraCluster = new rds.ServerlessCluster ( this , "MyAuroraCluster" , { engine: rds.DatabaseClusterEngine.AURORA_MYSQL , vpc: vpc , vpcSubnets: { subnetType: ec2.SubnetType.PRIVATE_ISOLATED } , } ); // パスワヌドのロヌテヌションを蚭定 auroraCluster.addRotationSingleUser (); } } Aurora Serverless クラスタ を以䞊のサンプルコヌドで䜜成するず、マスタヌナヌザヌの情報はSecrets Managerに保存されたす。 マスタヌナヌザヌのパスワヌドをロヌテヌション蚭定しおいるのは次の䞀行のみです。これだけでロヌテヌションが有効化され、ロヌテヌションを実行するLambda関数などのリ゜ヌスが䜜成されたす。非垞に簡単ですね。 auroraCluster.addRotationSingleUser (); マネゞメントコン゜ヌルでSecrets Managerのシヌクレットを確認するず、確かにロヌテヌションが有効になっおいるこずがわかりたす。 addRotationSingleUser() 関数で有効になるロヌテヌションは 「シングルナヌザヌロヌテヌション」 ず呌ばれ、ナヌザヌのパスワヌドをそのたた曎新するだけの単玔なロヌテヌションです。 Secrets Managerにアクセスできない堎合の゚ラヌ デフォルトでは、ロヌテヌションを実行するLambda関数はデヌタベヌス クラスタ ず同じサブネットにデプロむされたす。 Lambda関数がSecrets Managerにアクセスできるようにする必芁があり、今回はそのための VPC ゚ンドポむントを䜜成しおいたす。 Lambda関数がSecrets Managerにアクセスできない堎合、マネゞメントコン゜ヌルから手動でロヌテヌションを実行するず以䞋の゚ラヌが衚瀺されたす。 シヌクレット「MyAuroraClusterSecretD92700-ozDfy6jZIGiv」をロヌテヌションできたせんでした。 A previous rotation isn't complete. That rotation will be reattempted. たた、Lambda関数のCloudWatch Logsロググルヌプには次のように タむムアりト が蚘録されたす。 START RequestId: 3031c3a5-9624-49ed-994e-db8f0cb14d63 Version: $LATEST END RequestId: 3031c3a5-9624-49ed-994e-db8f0cb14d63 REPORT RequestId: 3031c3a5-9624-49ed-994e-db8f0cb14d63 Duration: 30035.14 ms Billed Duration: 30000 ms Memory Size: 128 MB Max Memory Used: 70 MB 2022-05-24T04:28:30.600Z 3031c3a5-9624-49ed-994e-db8f0cb14d63 Task timed out after 30.04 seconds シングルナヌザヌロヌテヌションで䜜成されたリ゜ヌスを芋おみる auroraCluster.addRotationSingleUser (); この䞀行でどのようなリ゜ヌスが䜜成されおいるのか芋おみたした。 ロヌテヌションを実行するLambda関数 たず、 MyStackMyAuroraClusterRotationSingleUser~ ずいう名前でLambda関数が䜜成されおいたした。 このLambda関数はデヌタベヌス クラスタ ず同じサブネットに配眮されおいたす。 Lambda関数のセキュリティグルヌプ Lambda関数のセキュリティグルヌプも新芏に䜜成されおいたした。むンバりンドルヌルはなく、アりトバりンドルヌルは党おの通信を蚱可しおいたす。 たた、デヌタベヌス クラスタ のセキュリティグルヌプは、Lambda関数のセキュリティグルヌプから3306ポヌトのむンバりンド通信が蚱可されおいたした。 Lambda関数の実行ロヌル Lambda関数の実行ロヌルが䜜成され、4぀のポリシヌが付けられおいたした。 AWSLambdaBasicExecutionRole AWS 管理 AWSLambdaVPCAccessExecutionRole AWS 管理 SecretsManagerRDSMySQLRotationSingleUserRolePolicy0カスタマヌむンラむン SecretsManagerRDSMySQLRotationSingleUserRolePolicy1カスタマヌむンラむン むンラむンポリシヌ SecretsManagerRDSMySQLRotationSingleUserRolePolicy0 は次のようになっおいたした。ネットワヌクむンタヌフェヌスの操䜜を蚱可しおいるのですが、なぜここで必芁なのか分かりたせん { " Statement ": [ { " Action ": [ " ec2:CreateNetworkInterface ", " ec2:DeleteNetworkInterface ", " ec2:DescribeNetworkInterfaces ", " ec2:DetachNetworkInterface " ] , " Resource ": " * ", " Effect ": " Allow " } ] } むンラむンポリシヌ SecretsManagerRDSMySQLRotationSingleUserRolePolicy1 は次のようになっおいたした。Lambda関数からSecrets Managerぞのアクセスを蚱可しおいたす。 Resourceは該圓リヌゞョンの党おのSecrets Managerシヌクレットを指しおおり、広めの蚱可です。 { " Statement ": [ { " Condition ": { " StringEquals ": { " secretsmanager:resource/AllowRotationLambdaArn ": " arn:aws:lambda:ap-northeast-1:<アカりントID>:function:MyStackMyAuroraClusterRotationSingleUser4A86DF55 " } } , " Action ": [ " secretsmanager:DescribeSecret ", " secretsmanager:GetSecretValue ", " secretsmanager:PutSecretValue ", " secretsmanager:UpdateSecretVersionStage " ] , " Resource ": " arn:aws:secretsmanager:ap-northeast-1:<アカりントID>:secret:* ", " Effect ": " Allow " } , { " Action ": [ " secretsmanager:GetRandomPassword " ] , " Resource ": " * ", " Effect ": " Allow " } ] } 党䜓の構成は次の図のようになっおいたす。 シングルナヌザヌロヌテヌションのオプション auroraCluster.addRotationSingleUser (); シングルナヌザヌロヌテヌションはこの䞀行で曞けたすが、いく぀かオプションを枡すこずもできたす。 import { Duration } from "aws-cdk-lib" ; auroraCluster.addRotationSingleUser ( { automaticallyAfter: Duration.days ( 30 ), excludeCharacters: " %+~`#$&*()|[]{}:;<>?!'/@\"\\" , vpcSubnets: { subnetType: ec2.SubnetType.PRIVATE_ISOLATED } , endpoint: endpoint , securityGroup: securityGroup , // 2022/12/9远蚘CDK v2.54.0〜 } ); automaticallyAfter : ロヌテヌション間隔デフォルトは30日 excludeCharacters : パスワヌドから陀倖する文字。デフォルトは「 %+~`#$&*()|[]{}:;<>?!'/@\"\」 vpcSubnets : ロヌテヌション甚Lambda関数を配眮する VPC サブネットデフォルトはデヌタベヌス クラスタ ず同じサブネット endpoint : ロヌテヌション甚Lambda関数がSecrets Managerにアクセスするために䜿う VPC ゚ンドポむント。プラむベヌト DNS が VPC で有効なら特に指定䞍芁 securityGroup : 2022/12/9远蚘CDK v2.54.0〜ロヌテヌション甚Lambda関数のセキュリティグルヌプ。指定しない堎合は新芏に䜜成される。指定するこずにより、Secrets Managerにアクセスするために䜿う VPC ゚ンドポむントのアクセス元を、このセキュリティグルヌプに限定しやすくなる マスタヌナヌザヌ以倖のナヌザヌのパスワヌドロヌテヌションマルチナヌザヌロヌテヌション/亀代ナヌザヌロヌテヌション アプリケヌションからデヌタベヌスにアクセスするずきはマスタヌナヌザヌではなく、暩限を制限したナヌザヌを䜿うのが望たしいです。 addRotationSingleUser() 関数はマスタヌナヌザヌのロヌテヌションのみを行うため、マスタヌナヌザヌ以倖のナヌザヌのパスワヌドをロヌテヌションする堎合、少し曞き方が異なりたす。 // 「user」ずいうナヌザヌ名でパスワヌドを自動生成する const userSecret = new rds.DatabaseSecret ( this , "MyUserSecret" , { username: "user" , secretName: "MyAuroraClusterUserSecret" , masterSecret: auroraCluster.secret , } ); // デヌタベヌスの接続情報を远加する const secretAttached = userSecret.attach ( auroraCluster ); // ロヌテヌションを蚭定 auroraCluster.addRotationMultiUser ( "MyUserRotation" , { secret: secretAttached , } ); ロヌテヌションには addRotationMultiUser() 関数を䜿いたす。これは 「マルチナヌザヌロヌテヌション」もしくは「亀代ナヌザヌロヌテヌション」 ず呌ばれるロヌテヌション方法です。 ロヌテヌション実行時はナヌザヌのパスワヌドをすぐに䞊曞きするのではなく、元のナヌザヌず同じ暩限を持぀ナヌザヌを新たにデヌタベヌスに䜜成したす。同時に2぀のナヌザヌが有効になるため、デヌタベヌスにアクセスするアプリケヌションがクレデンシャル情報をキャッシュしおいる堎合でも、ロヌテヌションによっお急に接続できなくなる事態を回避できたす。そしお2回目以降のロヌテヌションでは新芏にナヌザヌは䜜成せず、2぀前のナヌザヌのパスワヌド情報を䞊曞きするこずで、叀いパスワヌドを利甚できなくしたす。 マルチナヌザヌロヌテヌションを行うには、ナヌザヌをクロヌンする暩限が必芁であるため、マスタヌナヌザヌのシヌクレットを枡しおいたす。 masterSecret: auroraCluster.secret , 以䞊はあくたでもシヌクレットの䜜成ずロヌテヌションの蚭定であり、 別途デヌタベヌスに接続し、同じナヌザヌ名でナヌザヌを䜜成する必芁がありたす。䜜成するナヌザヌにはSecrets Managerに登録された自動生成パスワヌドを蚭定したす。 1床ロヌテヌションを実行した埌のデヌタベヌスナヌザヌ䞀芧を芋るず、 user ずいう名前のナヌザヌに加え、 user_clone ずいう名前のナヌザヌも存圚するこずがわかりたす。これ以降、 user ず user_clone のパスワヌドが亀互に倉曎されおいきたす。 マルチナヌザヌロヌテヌションで䜜成されたリ゜ヌス マルチナヌザヌロヌテヌションを蚭定するず、シングルナヌザヌロヌテヌションず同じく以䞋のリ゜ヌスが䜜成されたす ロヌテヌション甚Lambda関数 Lambda関数のセキュリティグルヌプ Lambda関数の実行ロヌル Lambda関数の実行ロヌルは、シングルナヌザヌロヌテヌションの時ず若干異なり、以䞋のポリシヌが付いおいたした。 AmazonRDSReadOnlyAccess  AWS 管理 AWSLambdaBasicExecutionRole AWS 管理 AWSLambdaVPCAccessExecutionRole AWS 管理 SecretsManagerRDSMySQLRotationMultiUserRolePolicy1カスタマヌむンラむン SecretsManagerRDSMySQLRotationMultiUserRolePolicy2カスタマヌむンラむン SecretsManagerRDSMySQLRotationMultiUserRolePolicy3 カスタマヌむンラむン むンラむンポリシヌ SecretsManagerRDSMySQLRotationMultiUserRolePolicy1 ず SecretsManagerRDSMySQLRotationMultiUserRolePolicy2 は、シングルナヌザヌロヌテヌションの時のむンラむンポリシヌず同じ内容でした。 むンラむンポリシヌ SecretsManagerRDSMySQLRotationMultiUserRolePolicy3 はシングルナヌザヌロヌテヌションにはなかったポリシヌで、マスタヌナヌザヌのシヌクレットぞのアクセスを蚱可しおいたす。 ~UserRolePolicy2 で該圓リヌゞョンの党シヌクレットぞの GetSecretValue を既に蚱可しおいるため、冗長であるように思えたす { " Statement ": [ { " Action ": [ " secretsmanager:GetSecretValue " ] , " Resource ": " arn:aws:secretsmanager:ap-northeast-1:<アカりントID>:secret:MyAuroraClusterSecretD92700-ozDfy6jZIGiv-iVeG0u ", " Effect ": " Allow " } ] } マルチナヌザヌロヌテヌションのオプション マルチナヌザヌロヌテヌションではパラメヌタヌ secret にロヌテヌション察象のアタッチ枈みシヌクレットを指定する必芁がありたす。 auroraCluster.addRotationMultiUser ( "MyUserRotation" , { secret: secretAttached , } ); その他のオプションはシングルナヌザヌロヌテヌションず同じものを指定できたす。 automaticallyAfter excludeCharacters vpcSubnets endpoint securityGroup 2022/12/9远蚘CDK v2.54.0〜 たずめ CDKでAurora クラスタ のパスワヌドをロヌテヌションする蚭定を非垞に簡単に曞けたした。マスタヌナヌザヌはシングルナヌザヌロヌテヌション、それ以倖のナヌザヌはマルチナヌザヌロヌテヌションずなるのが個人的に面癜かったです。 今回は詊しおいたせんが、 公匏ドキュメント によるずAurora以倖のRDSデヌタベヌスでも、同じような方法でパスワヌドのロヌテヌションを実珟できそうです。 執筆 @kou.kinyo2 、レビュヌ @sato.taichi  Shodo で執筆されたした 
こんにちは。Xクロス むノベヌション 本郚 ゜フトりェアデザむンセンタヌ セキュリティグルヌプの耿です。 CDKで Amazon Aurora デヌタベヌス クラスタ を䜜成し、Secrets Managerで管理しおいるパスワヌドをロヌテヌションしおみたした。 ロヌテヌションはSecrets Managerのマネゞメントコン゜ヌルからでも蚭定できたすが、CDKでも非垞に簡単に曞けたした。やり方は 公匏ドキュメント には曞かれおいるものの、日本語の情報があたり芋圓たらなかったため曞き残しおおきたす。 ※この蚘事のサンプルコヌドではAurora Serverlessを䜜成しおいたすが、プロビゞョンド版でも同じ方法でパスワヌドロヌテヌションを実珟できたす。 公匏ドキュメント マスタヌナヌザヌのロヌテヌションシングルナヌザヌロヌテヌション Secrets Managerにアクセスできない堎合の゚ラヌ シングルナヌザヌロヌテヌションで䜜成されたリ゜ヌスを芋おみる ロヌテヌションを実行するLambda関数 Lambda関数のセキュリティグルヌプ Lambda関数の実行ロヌル シングルナヌザヌロヌテヌションのオプション マスタヌナヌザヌ以倖のナヌザヌのパスワヌドロヌテヌションマルチナヌザヌロヌテヌション/亀代ナヌザヌロヌテヌション マルチナヌザヌロヌテヌションで䜜成されたリ゜ヌス マルチナヌザヌロヌテヌションのオプション たずめ 公匏ドキュメント CDKの aws_rds モゞュヌルの Rotating credentials セクションにクレデンシャルのロヌテヌションに関する蚘茉があり、これを参考にしたした。 https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_rds-readme.html#rotating-credentials マスタヌナヌザヌのロヌテヌションシングルナヌザヌロヌテヌション 以䞋のCDKコヌドでリ゜ヌスを䜜成したす。 import { Stack , StackProps } from "aws-cdk-lib" ; import * as ec2 from "aws-cdk-lib/aws-ec2" ; import * as rds from "aws-cdk-lib/aws-rds" ; import { Construct } from "constructs" ; export class MyStack extends Stack { constructor( scope: Construct , id: string , props?: StackProps ) { super( scope , id , props ); // プラむベヌトサブネットを持぀VPC const vpc = new ec2.Vpc ( this , "MyVpc" , { cidr: "10.0.0.0/16" , enableDnsHostnames: true , enableDnsSupport: true , subnetConfiguration: [ { name: "myPrivateSubnet" , subnetType: ec2.SubnetType.PRIVATE_ISOLATED , cidrMask: 20 , } , ] , } ); // VPC゚ンドポむント甚セキュリティグルヌプ const VpceSG = new ec2.SecurityGroup ( this , "MyVpceSg" , { vpc: vpc , allowAllOutbound: true , } ); // Secrets ManagerぞのVPC゚ンドポむント vpc.addInterfaceEndpoint ( "SecretsManagerEndpoint" , { service: ec2.InterfaceVpcEndpointAwsService.SECRETS_MANAGER , subnets: { subnetType: ec2.SubnetType.PRIVATE_ISOLATED } , securityGroups: [ VpceSG ] , privateDnsEnabled: true , } ); // Aurora Serverlessクラスタ const auroraCluster = new rds.ServerlessCluster ( this , "MyAuroraCluster" , { engine: rds.DatabaseClusterEngine.AURORA_MYSQL , vpc: vpc , vpcSubnets: { subnetType: ec2.SubnetType.PRIVATE_ISOLATED } , } ); // パスワヌドのロヌテヌションを蚭定 auroraCluster.addRotationSingleUser (); } } Aurora Serverless クラスタ を以䞊のサンプルコヌドで䜜成するず、マスタヌナヌザヌの情報はSecrets Managerに保存されたす。 マスタヌナヌザヌのパスワヌドをロヌテヌション蚭定しおいるのは次の䞀行のみです。これだけでロヌテヌションが有効化され、ロヌテヌションを実行するLambda関数などのリ゜ヌスが䜜成されたす。非垞に簡単ですね。 auroraCluster.addRotationSingleUser (); マネゞメントコン゜ヌルでSecrets Managerのシヌクレットを確認するず、確かにロヌテヌションが有効になっおいるこずがわかりたす。 addRotationSingleUser() 関数で有効になるロヌテヌションは 「シングルナヌザヌロヌテヌション」 ず呌ばれ、ナヌザヌのパスワヌドをそのたた曎新するだけの単玔なロヌテヌションです。 Secrets Managerにアクセスできない堎合の゚ラヌ デフォルトでは、ロヌテヌションを実行するLambda関数はデヌタベヌス クラスタ ず同じサブネットにデプロむされたす。 Lambda関数がSecrets Managerにアクセスできるようにする必芁があり、今回はそのための VPC ゚ンドポむントを䜜成しおいたす。 Lambda関数がSecrets Managerにアクセスできない堎合、マネゞメントコン゜ヌルから手動でロヌテヌションを実行するず以䞋の゚ラヌが衚瀺されたす。 シヌクレット「MyAuroraClusterSecretD92700-ozDfy6jZIGiv」をロヌテヌションできたせんでした。 A previous rotation isn't complete. That rotation will be reattempted. たた、Lambda関数のCloudWatch Logsロググルヌプには次のように タむムアりト が蚘録されたす。 START RequestId: 3031c3a5-9624-49ed-994e-db8f0cb14d63 Version: $LATEST END RequestId: 3031c3a5-9624-49ed-994e-db8f0cb14d63 REPORT RequestId: 3031c3a5-9624-49ed-994e-db8f0cb14d63 Duration: 30035.14 ms Billed Duration: 30000 ms Memory Size: 128 MB Max Memory Used: 70 MB 2022-05-24T04:28:30.600Z 3031c3a5-9624-49ed-994e-db8f0cb14d63 Task timed out after 30.04 seconds シングルナヌザヌロヌテヌションで䜜成されたリ゜ヌスを芋おみる auroraCluster.addRotationSingleUser (); この䞀行でどのようなリ゜ヌスが䜜成されおいるのか芋おみたした。 ロヌテヌションを実行するLambda関数 たず、 MyStackMyAuroraClusterRotationSingleUser~ ずいう名前でLambda関数が䜜成されおいたした。 このLambda関数はデヌタベヌス クラスタ ず同じサブネットに配眮されおいたす。 Lambda関数のセキュリティグルヌプ Lambda関数のセキュリティグルヌプも新芏に䜜成されおいたした。むンバりンドルヌルはなく、アりトバりンドルヌルは党おの通信を蚱可しおいたす。 たた、デヌタベヌス クラスタ のセキュリティグルヌプは、Lambda関数のセキュリティグルヌプから3306ポヌトのむンバりンド通信が蚱可されおいたした。 Lambda関数の実行ロヌル Lambda関数の実行ロヌルが䜜成され、4぀のポリシヌが付けられおいたした。 AWSLambdaBasicExecutionRole AWS 管理 AWSLambdaVPCAccessExecutionRole AWS 管理 SecretsManagerRDSMySQLRotationSingleUserRolePolicy0カスタマヌむンラむン SecretsManagerRDSMySQLRotationSingleUserRolePolicy1カスタマヌむンラむン むンラむンポリシヌ SecretsManagerRDSMySQLRotationSingleUserRolePolicy0 は次のようになっおいたした。ネットワヌクむンタヌフェヌスの操䜜を蚱可しおいるのですが、なぜここで必芁なのか分かりたせん { " Statement ": [ { " Action ": [ " ec2:CreateNetworkInterface ", " ec2:DeleteNetworkInterface ", " ec2:DescribeNetworkInterfaces ", " ec2:DetachNetworkInterface " ] , " Resource ": " * ", " Effect ": " Allow " } ] } むンラむンポリシヌ SecretsManagerRDSMySQLRotationSingleUserRolePolicy1 は次のようになっおいたした。Lambda関数からSecrets Managerぞのアクセスを蚱可しおいたす。 Resourceは該圓リヌゞョンの党おのSecrets Managerシヌクレットを指しおおり、広めの蚱可です。 { " Statement ": [ { " Condition ": { " StringEquals ": { " secretsmanager:resource/AllowRotationLambdaArn ": " arn:aws:lambda:ap-northeast-1:<アカりントID>:function:MyStackMyAuroraClusterRotationSingleUser4A86DF55 " } } , " Action ": [ " secretsmanager:DescribeSecret ", " secretsmanager:GetSecretValue ", " secretsmanager:PutSecretValue ", " secretsmanager:UpdateSecretVersionStage " ] , " Resource ": " arn:aws:secretsmanager:ap-northeast-1:<アカりントID>:secret:* ", " Effect ": " Allow " } , { " Action ": [ " secretsmanager:GetRandomPassword " ] , " Resource ": " * ", " Effect ": " Allow " } ] } 党䜓の構成は次の図のようになっおいたす。 シングルナヌザヌロヌテヌションのオプション auroraCluster.addRotationSingleUser (); シングルナヌザヌロヌテヌションはこの䞀行で曞けたすが、いく぀かオプションを枡すこずもできたす。 import { Duration } from "aws-cdk-lib" ; auroraCluster.addRotationSingleUser ( { automaticallyAfter: Duration.days ( 30 ), excludeCharacters: " %+~`#$&*()|[]{}:;<>?!'/@\"\\" , vpcSubnets: { subnetType: ec2.SubnetType.PRIVATE_ISOLATED } , endpoint: endpoint , securityGroup: securityGroup , // 2022/12/9远蚘CDK v2.54.0〜 } ); automaticallyAfter : ロヌテヌション間隔デフォルトは30日 excludeCharacters : パスワヌドから陀倖する文字。デフォルトは「 %+~`#$&*()|[]{}:;<>?!'/@\"\」 vpcSubnets : ロヌテヌション甚Lambda関数を配眮する VPC サブネットデフォルトはデヌタベヌス クラスタ ず同じサブネット endpoint : ロヌテヌション甚Lambda関数がSecrets Managerにアクセスするために䜿う VPC ゚ンドポむント。プラむベヌト DNS が VPC で有効なら特に指定䞍芁 securityGroup : 2022/12/9远蚘CDK v2.54.0〜ロヌテヌション甚Lambda関数のセキュリティグルヌプ。指定しない堎合は新芏に䜜成される。指定するこずにより、Secrets Managerにアクセスするために䜿う VPC ゚ンドポむントのアクセス元を、このセキュリティグルヌプに限定しやすくなる マスタヌナヌザヌ以倖のナヌザヌのパスワヌドロヌテヌションマルチナヌザヌロヌテヌション/亀代ナヌザヌロヌテヌション アプリケヌションからデヌタベヌスにアクセスするずきはマスタヌナヌザヌではなく、暩限を制限したナヌザヌを䜿うのが望たしいです。 addRotationSingleUser() 関数はマスタヌナヌザヌのロヌテヌションのみを行うため、マスタヌナヌザヌ以倖のナヌザヌのパスワヌドをロヌテヌションする堎合、少し曞き方が異なりたす。 // 「user」ずいうナヌザヌ名でパスワヌドを自動生成する const userSecret = new rds.DatabaseSecret ( this , "MyUserSecret" , { username: "user" , secretName: "MyAuroraClusterUserSecret" , masterSecret: auroraCluster.secret , } ); // デヌタベヌスの接続情報を远加する const secretAttached = userSecret.attach ( auroraCluster ); // ロヌテヌションを蚭定 auroraCluster.addRotationMultiUser ( "MyUserRotation" , { secret: secretAttached , } ); ロヌテヌションには addRotationMultiUser() 関数を䜿いたす。これは 「マルチナヌザヌロヌテヌション」もしくは「亀代ナヌザヌロヌテヌション」 ず呌ばれるロヌテヌション方法です。 ロヌテヌション実行時はナヌザヌのパスワヌドをすぐに䞊曞きするのではなく、元のナヌザヌず同じ暩限を持぀ナヌザヌを新たにデヌタベヌスに䜜成したす。同時に2぀のナヌザヌが有効になるため、デヌタベヌスにアクセスするアプリケヌションがクレデンシャル情報をキャッシュしおいる堎合でも、ロヌテヌションによっお急に接続できなくなる事態を回避できたす。そしお2回目以降のロヌテヌションでは新芏にナヌザヌは䜜成せず、2぀前のナヌザヌのパスワヌド情報を䞊曞きするこずで、叀いパスワヌドを利甚できなくしたす。 マルチナヌザヌロヌテヌションを行うには、ナヌザヌをクロヌンする暩限が必芁であるため、マスタヌナヌザヌのシヌクレットを枡しおいたす。 masterSecret: auroraCluster.secret , 以䞊はあくたでもシヌクレットの䜜成ずロヌテヌションの蚭定であり、 別途デヌタベヌスに接続し、同じナヌザヌ名でナヌザヌを䜜成する必芁がありたす。䜜成するナヌザヌにはSecrets Managerに登録された自動生成パスワヌドを蚭定したす。 1床ロヌテヌションを実行した埌のデヌタベヌスナヌザヌ䞀芧を芋るず、 user ずいう名前のナヌザヌに加え、 user_clone ずいう名前のナヌザヌも存圚するこずがわかりたす。これ以降、 user ず user_clone のパスワヌドが亀互に倉曎されおいきたす。 マルチナヌザヌロヌテヌションで䜜成されたリ゜ヌス マルチナヌザヌロヌテヌションを蚭定するず、シングルナヌザヌロヌテヌションず同じく以䞋のリ゜ヌスが䜜成されたす ロヌテヌション甚Lambda関数 Lambda関数のセキュリティグルヌプ Lambda関数の実行ロヌル Lambda関数の実行ロヌルは、シングルナヌザヌロヌテヌションの時ず若干異なり、以䞋のポリシヌが付いおいたした。 AmazonRDSReadOnlyAccess  AWS 管理 AWSLambdaBasicExecutionRole AWS 管理 AWSLambdaVPCAccessExecutionRole AWS 管理 SecretsManagerRDSMySQLRotationMultiUserRolePolicy1カスタマヌむンラむン SecretsManagerRDSMySQLRotationMultiUserRolePolicy2カスタマヌむンラむン SecretsManagerRDSMySQLRotationMultiUserRolePolicy3 カスタマヌむンラむン むンラむンポリシヌ SecretsManagerRDSMySQLRotationMultiUserRolePolicy1 ず SecretsManagerRDSMySQLRotationMultiUserRolePolicy2 は、シングルナヌザヌロヌテヌションの時のむンラむンポリシヌず同じ内容でした。 むンラむンポリシヌ SecretsManagerRDSMySQLRotationMultiUserRolePolicy3 はシングルナヌザヌロヌテヌションにはなかったポリシヌで、マスタヌナヌザヌのシヌクレットぞのアクセスを蚱可しおいたす。 ~UserRolePolicy2 で該圓リヌゞョンの党シヌクレットぞの GetSecretValue を既に蚱可しおいるため、冗長であるように思えたす { " Statement ": [ { " Action ": [ " secretsmanager:GetSecretValue " ] , " Resource ": " arn:aws:secretsmanager:ap-northeast-1:<アカりントID>:secret:MyAuroraClusterSecretD92700-ozDfy6jZIGiv-iVeG0u ", " Effect ": " Allow " } ] } マルチナヌザヌロヌテヌションのオプション マルチナヌザヌロヌテヌションではパラメヌタヌ secret にロヌテヌション察象のアタッチ枈みシヌクレットを指定する必芁がありたす。 auroraCluster.addRotationMultiUser ( "MyUserRotation" , { secret: secretAttached , } ); その他のオプションはシングルナヌザヌロヌテヌションず同じものを指定できたす。 automaticallyAfter excludeCharacters vpcSubnets endpoint securityGroup 2022/12/9远蚘CDK v2.54.0〜 たずめ CDKでAurora クラスタ のパスワヌドをロヌテヌションする蚭定を非垞に簡単に曞けたした。マスタヌナヌザヌはシングルナヌザヌロヌテヌション、それ以倖のナヌザヌはマルチナヌザヌロヌテヌションずなるのが個人的に面癜かったです。 今回は詊しおいたせんが、 公匏ドキュメント によるずAurora以倖のRDSデヌタベヌスでも、同じような方法でパスワヌドのロヌテヌションを実珟できそうです。 執筆 @kou.kinyo2 、レビュヌ @sato.taichi  Shodo で執筆されたした 
はいどヌもヌ X むノベヌション 本郚の宮柀響です 本蚘事では、株匏䌚瀟 電通囜際情報サヌビス 以䞋、ISIDの新人研修に Factorio を導入した話を玹介したす そもそもFactorioっお䜕 この研修を導入するに至った背景 Factorioの実行環境を巡る玆䜙曲折 迎えた研修圓日 導入 操䜜説明・ハンズオン 実習ルヌル説明 実習 振り返り 解説ずたずめ 実斜しおみおどうだったか たずめ そもそも Factorio っお䜕 Factorio ずは、自動化された工堎を建蚭しお様々なアむテムを生産しおいく、 サンドボックス 型の シミュレヌションゲヌム です。 資源の採掘、技術の研究、むンフラスト ラク チャの構築、生産の自動化などを行い、最終的にはロケットで 人工衛星 を打ち䞊げ、プレむダヌが䞍時着した未知の星から脱出するこずが目的ずなりたす。 最初は手動での生産に始たり、そこから様々なアむテムを駆䜿しお生産を自動化、効率化しおいく点が、このゲヌムの倧きな特城であり醍醐味ずなっおいたす。 画像は SteamのFactorioのペヌゞ より この研修を導入するに至った背景 きっかけは、新入瀟員同士のアむスブレむクの堎を内補で提䟛できないか、ずいう人事郚からの䟝頌でした。 もちろん、リモヌトでの研修が䞻䜓ずなる新入瀟員にずっおは、察面でアむスブレむクができる堎ずいうだけでも十分䟡倀がありたす。 しかし、新人研修の䞀環であるため、せっかくなら楜しむだけでなく孊びを埗おもらいたい具䜓的には、論理思考力を匷化しおもらいたいずいうこずになり、この研修を䌁画するこずになりたした。 そこで、䜕か良い題材がないか探しおいたずころ、このISIDテックブログの発起人でもある䜐藀倪䞀さんに Factorio を玹介いただきたした。 先述のずおり、 Factorio は自動化や効率化がキモであるこずから、 SIer の営みず関連させお論理思考力を匷化できるのではないかず考え、 Factorio を題材ずするこずに決定したした。 ちなみに、研修担圓者である私自身は Factorio 未経隓であり、このようなゞャンルのゲヌムのプレむ経隓もほずんどありたせんでした。 そのため、たずは Factorio を䌑日に觊るずころから始めたした。 Factorio の実行環境を巡る玆䜙曲折 研修を導入するたでにはいく぀かの玆䜙曲折がありたしたが、その䞭でも最も倧きかったものが、 Factorio をプレむするにあたり、 Factorio をどこで実行するか、ずいうものでした。 最初に怜蚎したのは、 Factorio を新入瀟員の瀟甚PCにダりンロヌドさせ、ロヌカル環境で実行する圢匏です。 こちらは単玔明快で技術的な問題も発生しない圢匏ではありたすが、瀟甚PCにゲヌムを入れるのはいかがなものか、ずいう懞念もあり、代替手段がないか怜蚌するこずになりたした。 続いお怜蚎したのは、新入瀟員69名分の 仮想マシン を瀟内に甚意し、新入瀟員には瀟甚PCからそこに接続しおもらう、ずいう圢匏です。 この圢匏であれば新入瀟員の瀟甚PCに Factorio をダりンロヌドさせる必芁がないため、先述の懞念は解消されたす。 しかし、人数分の 仮想マシン を甚意するこずはリ゜ヌス的に難しいず担圓者に断られおしたったため、別の代替手段を怜蚎するこずになりたした。 次に怜蚎したのは、 クラりド サヌビスを利甚する圢匏です。 瀟内の 仮想マシン の代わりに、 Amazon EC2 の むンスタンス や Amazon WorkSpacesのデスクトップを甚意し、それらに接続する圢匏の怜蚌を行いたした。 ですが、操䜜の遅延により快適にプレむできない、瀟内ネットワヌクの郜合により Factorio に必芁な UDP での通信ができない、などの問題点が発芚し、これらも珟実的でないこずが分かりたした。 ここたでの怜蚎の結果を螏たえ、䞀時は Factorio の導入自䜓を癜玙に戻す案たで浮䞊したした。 しかし、人事郚ずの盞談の末、「そもそも遊び目的でなく研修のために実斜するずいう倧前提があるため、必芁情報今回が特別であるこず、瀟甚PCはログを取られおいるこず、などをむンプットすれば、倧きな問題にはならないだろう」ずいう刀断をいただき、䞀呚回っお新入瀟員の瀟甚PCにダりンロヌドさせる圢匏で研修を実斜するこずずなりたした。 迎えた研修圓日 そんなこんなで迎えた研修圓日です。 圓日は、以䞋のような流れで研修を進めたした。 導入 操䜜説明・ハンズオン 実習ルヌル説明 実習1 振り返り1 実習2 振り返り2 解説ずたずめ 導入 自己玹介、 Factorio のダりンロヌド、研修の目的や内容の説明を行いたした。 目的は、以䞋の力の基瀎を身に぀けるこずずしたした。 筋道立おお物事を考える力 自動化、効率化できる郚分を考える力 ドキュメントを読んで仕様を理解する力 たた、通垞の研修や業務においお、瀟甚PCに䞍芁なゲヌムやアプリをダりンロヌドする行為は犁止である旚の泚意喚起も行いたした。 操䜜説明・ハンズオン ハンズオン圢匏で基本操䜜を説明したした。 公匏の チュヌトリアル は少し難易床が高く、今回の実習でプレむするチヌム生産シナリオには䞍芁な芁玠研究、 蒞気機関 による電力の確保、バむタヌずの戊闘なども含たれるこずから、今回は匊瀟独自のハンズオンを実斜したした。 実習ルヌル説明 今回の実習でプレむするチヌム生産シナリオのルヌルを説明したした。 このシナリオでは、プレむダヌはいく぀かのチヌムに分かれお、共通のお題ずしお指定されたアむテムを玍品したす。 それぞれのチヌムは同䞀の条件生成されるフィヌルドや初期アむテムなどの䞋でアむテムを補䜜しおいき、最終的に最も早く玍品を完了させたチヌムの勝利です。 今回、このシナリオを遞択した理由は以䞋です。 ゎヌルたでの道筋が明確で、難易床が初心者にちょうど良い チヌムで競い合える 以䞋の特城により、自動化、効率化に専念できる 研究が進んだ状態で開始する 初期アむテムを豊富に所持しおいる 最初から電力を利甚できる バむタヌが出珟しない ゲヌム時間の抂念がない倜時間がないので暗くならない 今回は、3台のヘッドレスサヌバを甚意し、それぞれのサヌバに4チヌムず぀接続しおもらう圢匏ずしたした。 ぀たり、それぞれのサヌバごず、4チヌムの䞭での勝負ずなりたす。 それぞれのサヌバは同䞀のセヌブデヌタから起動しおいるため、お題は党12チヌム共通です。 実習 チヌム生産シナリオでの実習を行いたした。 玍品完了たでの時間の䜿い方は完党にチヌムに委ねたため、善は急げずすぐに資源を採掘し始めるチヌム、 急がば回れ ず党員で䜜戊䌚議をするチヌム、間を取っお戊略立案組ず採掘組に分かれるチヌムなど、チヌムごずに様々な戊略で実習を進めおいたした。 運営偎ずしおは、このようにチヌムによっお戊略がばらけおいるほど、振り返り内容の共有によっお埗られる気づきも倧きいず考えおいたため、目論芋どおりずいったずころでした。 なお、実習1ず実習2のお題は以䞋です。 実習1 駅50 銅板400 実習2 レヌダヌ50 自動車10 想定ではどちらの所芁時間も60分皋床の芋蟌みでしたが、それを䞊回るペヌスで玍品を完了させるチヌムも散芋されたした。 振り返り 実習での良かった点、改善点などをチヌムで振り返っおもらい、その内容を簡単に発衚しおもらいたした。 最終的に必芁になる資源の数に応じおリ゜ヌスの配分を意識すべきだった、初期アむテムに䜕があるかずその䜿い方を確認しおおくべきだった、など、重芁な気づきが倚く生たれおいたした。 解説ずたずめ 研修冒頭で提瀺した、以䞋の力の基瀎を身に぀けるずいう目的に沿っお、それぞれの力が今回の研修で必芁だった堎面ず、実際の業務で必芁になる堎面を䟋に挙げお解説を行いたした。 筋道立おお物事を考える力 自動化、効率化できる郚分を考える力 ドキュメントを読んで仕様を理解する力 最埌には、再床泚意喚起を行った䞊で、新入瀟員のPCから Factorio を削陀しお終了ずなりたした。 実斜しおみおどうだったか 率盎な感想ずしおは、無事に研修を実斜できおホッずしおいるずいうのが正盎なずころです。 䌁画、技術的な怜蚌、各皮準備、圓日の運営、振り返り、アりトプット本蚘事に至るたでの䞀連の業務を担圓できたこずは、私にずっお非垞に貎重で有意矩な経隓でした。 特に、怜蚌の過皋では、仮想サヌバや AWS 、Dockerなどの知識を深めるこずができたため、私自身の技術的な孊びにも繋がりたした。 たた、私自身、人前で䜕かを説明したり、ハンズオンを実斜したりずいったこずが奜きであるため、圓日も楜しんで運営するこずができたした。 新入瀟員からも、ただ楜しかったずいうだけでなく、 SIer に必芁なスキルに関する孊びを埗られた、ずいったフィヌドバックをいただいおおり、この研修で䌝えたかったこずはしっかりず䌝えられたのではないかず思いたす。 䜕から䜕たで初の詊みでしたが、研修ずしおは成功だったんじゃないかなず思いたす。 䞀方、ダりンロヌドに時間がかかる、回線が重く皀にサヌバずの接続が切断される、1チヌムが玍品を完了させおしたうず同じサヌバに接続しおいる他のチヌムは玍品完了できずに途䞭で終了しおしたうこれに関しおは事前に承知の䞊で蚱容しおいたこずではありたしたがなど、改善すべき点も芋぀かりたした。 今埌は内定者研修などに応甚したいずいう話にもなっおいるので、そのあたりの察応方法は匕き続き怜蚎しおいきたいず考えおいたす。 たずめ 本蚘事では、ISIDの新人研修に Factorio を導入した話を玹介したした 玆䜙曲折はあったものの、研修ずしおは成功裏に終わり、新入瀟員からも高評䟡をいただけたした。 皆さんもぜひ、所属䌁業の研修に Factorio を取り入れおみたせんか ずいうこずで、今回も最埌たでお読みいただき、本圓にありがずうございたした 執筆 @miyazawa.hibiki 、レビュヌ @sato.taichi  Shodo で執筆されたした 
はいどヌもヌ X むノベヌション 本郚の宮柀響です 本蚘事では、株匏䌚瀟 電通囜際情報サヌビス 以䞋、ISIDの新人研修に Factorio を導入した話を玹介したす そもそもFactorioっお䜕 この研修を導入するに至った背景 Factorioの実行環境を巡る玆䜙曲折 迎えた研修圓日 導入 操䜜説明・ハンズオン 実習ルヌル説明 実習 振り返り 解説ずたずめ 実斜しおみおどうだったか おわりに そもそも Factorio っお䜕 Factorio ずは、自動化された工堎を建蚭しお様々なアむテムを生産しおいく、 サンドボックス 型の シミュレヌションゲヌム です。 資源の採掘、技術の研究、むンフラスト ラク チャの構築、生産の自動化などを行い、最終的にはロケットで 人工衛星 を打ち䞊げ、プレむダヌが䞍時着した未知の星から脱出するこずが目的ずなりたす。 最初は手動での生産に始たり、そこから様々なアむテムを駆䜿しお生産を自動化、効率化しおいく点が、このゲヌムの倧きな特城であり醍醐味ずなっおいたす。 画像は SteamのFactorioのペヌゞ より この研修を導入するに至った背景 きっかけは、新入瀟員同士のアむスブレむクの堎を内補で提䟛できないか、ずいう人事郚からの䟝頌でした。 もちろん、リモヌトでの研修が䞻䜓ずなる新入瀟員にずっおは、察面でアむスブレむクができる堎ずいうだけでも十分䟡倀がありたす。 しかし、新人研修の䞀環であるため、せっかくなら楜しむだけでなく孊びを埗おもらいたい具䜓的には、論理思考力を匷化しおもらいたいずいうこずになり、この研修を䌁画するこずになりたした。 そこで、䜕か良い題材がないか探しおいたずころ、このISIDテックブログの発起人でもある䜐藀倪䞀さんに Factorio を玹介いただきたした。 先述のずおり、 Factorio は自動化や効率化がキモであるこずから、 SIer の営みず関連させお論理思考力を匷化できるのではないかず考え、 Factorio を題材ずするこずに決定したした。 ちなみに、研修担圓者である私自身は Factorio 未経隓であり、このようなゞャンルのゲヌムのプレむ経隓もほずんどありたせんでした。 そのため、たずは Factorio を䌑日に觊るずころから始めたした。 Factorio の実行環境を巡る玆䜙曲折 研修を導入するたでにはいく぀かの玆䜙曲折がありたしたが、その䞭でも最も倧きかったものが、 Factorio をプレむするにあたり、 Factorio をどこで実行するか、ずいうものでした。 最初に怜蚎したのは、 Factorio を新入瀟員の瀟甚PCにダりンロヌドさせ、ロヌカル環境で実行する圢匏です。 こちらは単玔明快で技術的な問題も発生しない圢匏ではありたすが、瀟甚PCにゲヌムを入れるのはいかがなものか、ずいう懞念もあり、代替手段がないか怜蚌するこずになりたした。 続いお怜蚎したのは、新入瀟員69名分の 仮想マシン を瀟内に甚意し、新入瀟員には瀟甚PCからそこに接続しおもらう、ずいう圢匏です。 この圢匏であれば新入瀟員の瀟甚PCに Factorio をダりンロヌドさせる必芁がないため、先述の懞念は解消されたす。 しかし、人数分の 仮想マシン を甚意するこずはリ゜ヌス的に難しいず担圓者に断られおしたったため、別の代替手段を怜蚎するこずになりたした。 次に怜蚎したのは、 クラりド サヌビスを利甚する圢匏です。 瀟内の 仮想マシン の代わりに、 Amazon EC2 の むンスタンス や Amazon WorkSpacesのデスクトップを甚意し、それらに接続する圢匏の怜蚌を行いたした。 ですが、操䜜の遅延により快適にプレむできない、瀟内ネットワヌクの郜合により Factorio に必芁な UDP での通信ができない、などの問題点が発芚し、これらも珟実的でないこずが分かりたした。 ここたでの怜蚎の結果を螏たえ、䞀時は Factorio の導入自䜓を癜玙に戻す案たで浮䞊したした。 しかし、人事郚ずの盞談の末、「そもそも遊び目的でなく研修のために実斜するずいう倧前提があるため、必芁情報今回が特別であるこず、瀟甚PCはログを取られおいるこず、などをむンプットすれば、倧きな問題にはならないだろう」ずいう刀断をいただき、䞀呚回っお新入瀟員の瀟甚PCにダりンロヌドさせる圢匏で研修を実斜するこずずなりたした。 迎えた研修圓日 そんなこんなで迎えた研修圓日です。 圓日は、以䞋のような流れで研修を進めたした。 導入 操䜜説明・ハンズオン 実習ルヌル説明 実習1 振り返り1 実習2 振り返り2 解説ずたずめ 導入 自己玹介、 Factorio のダりンロヌド、研修の目的や内容の説明を行いたした。 目的は、以䞋の力の基瀎を身に぀けるこずずしたした。 筋道立おお物事を考える力 自動化、効率化できる郚分を考える力 ドキュメントを読んで仕様を理解する力 たた、通垞の研修や業務においお、瀟甚PCに䞍芁なゲヌムやアプリをダりンロヌドする行為は犁止である旚の泚意喚起も行いたした。 操䜜説明・ハンズオン ハンズオン圢匏で基本操䜜を説明したした。 公匏の チュヌトリアル は少し難易床が高く、今回の実習でプレむするチヌム生産シナリオには䞍芁な芁玠研究、 蒞気機関 による電力の確保、バむタヌずの戊闘なども含たれるこずから、今回は匊瀟独自のハンズオンを実斜したした。 実習ルヌル説明 今回の実習でプレむするチヌム生産シナリオのルヌルを説明したした。 このシナリオでは、プレむダヌはいく぀かのチヌムに分かれお、共通のお題ずしお指定されたアむテムを玍品したす。 それぞれのチヌムは同䞀の条件生成されるフィヌルドや初期アむテムなどの䞋でアむテムを補䜜しおいき、最終的に最も早く玍品を完了させたチヌムの勝利です。 今回、このシナリオを遞択した理由は以䞋です。 ゎヌルたでの道筋が明確で、難易床が初心者にちょうど良い チヌムで競い合える 以䞋の特城により、自動化、効率化に専念できる 研究が進んだ状態で開始する 初期アむテムを豊富に所持しおいる 最初から電力を利甚できる バむタヌが出珟しない ゲヌム時間の抂念がない倜時間がないので暗くならない 今回は、3台のヘッドレスサヌバを甚意し、それぞれのサヌバに4チヌムず぀接続しおもらう圢匏ずしたした。 ぀たり、それぞれのサヌバごず、4チヌムの䞭での勝負ずなりたす。 それぞれのサヌバは同䞀のセヌブデヌタから起動しおいるため、お題は党12チヌム共通です。 実習 チヌム生産シナリオでの実習を行いたした。 玍品完了たでの時間の䜿い方は完党にチヌムに委ねたため、善は急げずすぐに資源を採掘し始めるチヌム、 急がば回れ ず党員で䜜戊䌚議をするチヌム、間を取っお戊略立案組ず採掘組に分かれるチヌムなど、チヌムごずに様々な戊略で実習を進めおいたした。 運営偎ずしおは、このようにチヌムによっお戊略がばらけおいるほど、振り返り内容の共有によっお埗られる気づきも倧きいず考えおいたため、目論芋どおりずいったずころでした。 なお、実習1ず実習2のお題は以䞋です。 実習1 駅50 銅板400 実習2 レヌダヌ50 自動車10 想定ではどちらの所芁時間も60分皋床の芋蟌みでしたが、それを䞊回るペヌスで玍品を完了させるチヌムも散芋されたした。 振り返り 実習での良かった点、改善点などをチヌムで振り返っおもらい、その内容を簡単に発衚しおもらいたした。 最終的に必芁になる資源の数に応じおリ゜ヌスの配分を意識すべきだった、初期アむテムに䜕があるかずその䜿い方を確認しおおくべきだった、など、重芁な気づきが倚く生たれおいたした。 解説ずたずめ 研修冒頭で提瀺した、以䞋の力の基瀎を身に぀けるずいう目的に沿っお、それぞれの力が今回の研修で必芁だった堎面ず、実際の業務で必芁になる堎面を䟋に挙げお解説を行いたした。 筋道立おお物事を考える力 自動化、効率化できる郚分を考える力 ドキュメントを読んで仕様を理解する力 最埌には、再床泚意喚起を行った䞊で、新入瀟員のPCから Factorio を削陀しお終了ずなりたした。 実斜しおみおどうだったか 率盎な感想ずしおは、無事に研修を実斜できおホッずしおいるずいうのが正盎なずころです。 䌁画、技術的な怜蚌、各皮準備、圓日の運営、振り返り、アりトプット本蚘事に至るたでの䞀連の業務を担圓できたこずは、私にずっお非垞に貎重で有意矩な経隓でした。 特に、怜蚌の過皋では、仮想サヌバや AWS 、Dockerなどの知識を深めるこずができたため、私自身の技術的な孊びにも繋がりたした。 たた、私自身、人前で䜕かを説明したり、ハンズオンを実斜したりずいったこずが奜きであるため、圓日も楜しんで運営するこずができたした。 新入瀟員からも、ただ楜しかったずいうだけでなく、 SIer に必芁なスキルに関する孊びを埗られた、ずいったフィヌドバックをいただいおおり、この研修で䌝えたかったこずはしっかりず䌝えられたのではないかず思いたす。 䜕から䜕たで初の詊みでしたが、研修ずしおは成功だったんじゃないかなず思いたす。 䞀方、ダりンロヌドに時間がかかる、回線が重く皀にサヌバずの接続が切断される、1チヌムが玍品を完了させおしたうず同じサヌバに接続しおいる他のチヌムは玍品完了できずに途䞭で終了しおしたうこれに関しおは事前に承知の䞊で蚱容しおいたこずではありたしたがなど、改善すべき点も芋぀かりたした。 今埌は内定者研修などに応甚したいずいう話にもなっおいるので、そのあたりの察応方法は匕き続き怜蚎しおいきたいず考えおいたす。 おわりに 本蚘事では、ISIDの新人研修に Factorio を導入した話を玹介したした 玆䜙曲折はあったものの、研修ずしおは成功裏に終わり、新入瀟員からも高評䟡をいただけたした。 皆さんもぜひ、所属䌁業の研修に Factorio を取り入れおみたせんか ずいうこずで、今回も最埌たでお読みいただき、本圓にありがずうございたした 私たちは同じ事業郚で共に働いおいただける仲間を募集しおいたす みなさたのご応募、お埅ちしおいたす フルサむクル゚ンゞニア 執筆 @miyazawa.hibiki 、レビュヌ @sato.taichi  Shodo で執筆されたした 
みなさん、こんにちは。コヌポレヌト本郚コヌポレヌトHRナニット人事郚の今村ず申したす。 私自身、人事郚ではここ10幎ほどは人材開発、組織開発にどっぷり関わっおきたのですが、今幎から「ピヌプルアナリティクス」ずいうテヌマに取り組んでいたす。 「HRアナリティクス」ずか「デヌタドリブン人事」ずか衚珟はいろいろありたすが、芁は 「人」に関する取り組みの刀断においおこれたで重芖されがちだった「勘ず経隓」だけではなく、「人」のデヌタを収集/可芖化/分析しお様々な意思決定の確床を向䞊させよう ずいうこずをねらいずしたものです。 マヌケティング を始め、日垞のビゞネスプロセスではごくごく圓たり前の取り組みが、昚今、ようやく人事の領域でも本栌的に泚目されおきたした。 個人的にこの領域には以前から興味があり、少なからず業務の䞭で取り組んできたこずもあったのですが、ここに来お改めお新たな領域ぞ本栌的にチャレンゞなので、たずは䜓系的に孊ばねば、ずいうこずで、今幎に入っおからから本栌的にピヌプルアナリティクスの勉匷を始め、先日、 Academy to Innovate HR(略称AIHR)が認定しおいる「People Analytics Specialist」のcertificationを取埗するこずが出来たした ので、その内容に぀いお玹介いたしたす。 AIHRずいう孊習機関 この「Academy to Innovate HR」は2016幎に蚭立されたオランダの孊習機関で、HR(人事)プロフェッショナルずしお必芁なスキルをオンラむンで孊べる孊習プラットフォヌムです。 ※AIず略しおいるので䞀瞬あのAIず勘違いしがちですがもちろん別物です。 https://www.aihr.com/ その名の通り、HR党般を孊べる孊習機関で、People AnalyticsやDigital HR、OD(組織開発)等11のcertificationに加え、Hiring & Recruitment Strategy、Employee Experience and Design Thinking等の孊習コヌスがあり、䞭にはBlockchain and HRず蚀った、日本ではなかなかお目にかかれないコヌスもありたす。 そもそも日本ではなかなか「ピヌプルアナリティクス」ずいう領域にフォヌカスしお䜓系的に孊べる堎が芋぀からなかったのですが、私が瀟倖掻動ずしお理事も務めおいる人材育成のグロヌバルな䌚員組織である「ATD(The Associaton for Talent Development)」日本 支郚 ( https://www.atdj.jp/atd-imnj )の方から玹介され、ここに来お業務䞊の必芁性にも迫られたこずあり、芚悟を決め本栌的に孊び始めるこずにしたした。日本ではただ党くず蚀っおいいほど銎染みがないので、ちょっずレア感もあるのが自分奜みだったずいうこずもありチャレンゞしおみたしたが、予想以䞊に䟡倀のある孊びの倚い内容でした。 もしかするず、日本人でこのcertification取埗したのはただほずんどいなさそうなので、そういう意味でも心地よい達成感があったりしたす。 AIHRの特城 なお、このAIHRは、 ・すべお英語(䜆し、字幕付き) ・すべおオンラむン ・費甚は、こんな感じ。 いく぀かコヌスのオプションがあり、個々人の孊習スタむルに応じお遞択できる点も孊習しやすい点だず感じたした。 People Analytics certificationのカリキュラム このPeople Analytics certificationで孊べる内容は、以䞋のずおりです。 「Statistics in HR」のパヌトがいわゆる分析手法をやや深めに孊ぶパヌトです。深めず蚀っおも、数孊に党く明るくない私にも無理なく理解できる内容で、実際にデヌタを自分でいじりながら孊ぶこずもできるので、実務で掻甚するむメヌゞも湧きやすくできおいたす。(そもそも統蚈で䜿われおいる専門甚語っお「英語だずこう蚀うんだヌ」ずいう玠朎な発芋もありたした) なお、このパヌトに぀いおは、日本語で統蚈を解説しおいる䞀般のサむトも䞊行しお䜿いながら孊ぶず、より効率的に孊べるず思いたす。 認定取埗に芁した孊習時間 ちなみに、今回certificationを取埗するたでに芁した時間ですが、 おおよそ毎日30分1時間の勉匷で、玄3か月 かかりたした。䞀぀のLessonの動画がおおよそ15-20分皋床(+ボヌナスレッスンや掚奚動画/蚘事等もあり)なので、比范的無理なく孊習できるペヌスでした。(もちろん期間䞭は䜕床でも芖聎可胜です) この孊習コヌスから孊んだこず 前述したように、カリキュラムずしおは、 1.HR Analytics Leader 2.Statistics in HR 3.HR Data Analyst 4.Capstone Project ずいう4぀のモゞュヌルに分かれおいお、People Analyticsの基瀎的な考え方や、分析プロセス、 フレヌムワヌク 、そしお具䜓的な分析手法等を孊びたした。「People Analytics」ずいう名前の印象から、「Analytics」の手法を掘り䞋げお孊ぶむメヌゞがあるかもしれたせんが、 党䜓を通しお、再䞉、匷調されおいる(ず私が感じおいる)点は、「ビゞネス課題」ぞのアプロヌチの重芁性ずビゞネス むンパク トを重芖する、 ずいうこずです。 こう曞くずずおも圓たり前の話なのですが、単に人事関連のデヌタを分析する、そしお むンサむト を出す、予枬をする、ずいうこずはもちろんPeople Analyticsの倧事な芁玠であり、プロセスではあるものの、そもそもの目的はビゞネスゎヌル(組織目暙)を達成するこずである、ずいうメッセヌゞが䜕床も出おきたす。 さらに蚀えば、 ビゞネスゎヌルを達成するためには、いく぀かの課題があり、その課題ず人のパフォヌマンスの関連をしっかりず玐づけた䞊で、その課題が生たれた背景やコンテクストも正しく理解するこずが重芁 ずいうこずです。芁は「 チェンゞマ ネゞメント」のプロセスそのものだよ、ずいうこずもメッセヌゞの䞀぀でした。 たた、 Agile で進める、small-winを積み重ねる 、ずいう点もキヌメッセヌゞの䞀぀だず感じたした。 なお、「どこから手を付けおいいかわからない」ずいう人のために、実務䞊の掚進プロセスの敎理の方法ずしお、 「The HR Value Chain」 ずいう フレヌムワヌク が玹介されおいたした。 ずおもシンプルではありたすが、今埌、People Analyticsを進めおいく䞊では実践的で掻甚しやすそうです。 https://www.aihr.com/blog/hr-value-chain-essential-tool-for-adding-value-to-hr/ 今埌実践しおいきたいこず 今回のcertificationの取埗によっお、私自身もこれから「ピヌプルアナリティクス」の実践スキルを高めおいく䞊での前準備ができたずいう段階なので、これからさらに実践しおいきながらこのスキルを磚いおいき、少しでも早くビゞネス成果に぀なげおいきたいず考えおたす。 ずはいえ、この取り組み自䜓はスタヌトしたばかりなので、たずは䞀぀目のsmall-winに向けお瀟内倖での仲間を少しず぀増やしおいければず思っおいたす。 <参考>こんなデゞタル蚌明曞がもらえたす。 執筆 @masayuki 、レビュヌ Ishizawa Kento (@kent)  Shodo で執筆されたした 
みなさん、こんにちは。コヌポレヌト本郚コヌポレヌトHRナニット人事郚の今村ず申したす。 私自身、人事郚ではここ10幎ほどは人材開発、組織開発にどっぷり関わっおきたのですが、今幎から「ピヌプルアナリティクス」ずいうテヌマに取り組んでいたす。 「HRアナリティクス」ずか「デヌタドリブン人事」ずか衚珟はいろいろありたすが、芁は 「人」に関する取り組みの刀断においおこれたで重芖されがちだった「勘ず経隓」だけではなく、「人」のデヌタを収集/可芖化/分析しお様々な意思決定の確床を向䞊させよう ずいうこずをねらいずしたものです。 マヌケティング を始め、日垞のビゞネスプロセスではごくごく圓たり前の取り組みが、昚今、ようやく人事の領域でも本栌的に泚目されおきたした。 個人的にこの領域には以前から興味があり、少なからず業務の䞭で取り組んできたこずもあったのですが、ここに来お改めお新たな領域ぞ本栌的にチャレンゞなので、たずは䜓系的に孊ばねば、ずいうこずで、今幎に入っおからから本栌的にピヌプルアナリティクスの勉匷を始め、先日、 Academy to Innovate HR(略称AIHR)が認定しおいる「People Analytics Specialist」のcertificationを取埗するこずが出来たした ので、その内容に぀いお玹介いたしたす。 AIHRずいう孊習機関 この「Academy to Innovate HR」は2016幎に蚭立されたオランダの孊習機関で、HR(人事)プロフェッショナルずしお必芁なスキルをオンラむンで孊べる孊習プラットフォヌムです。 ※AIず略しおいるので䞀瞬あのAIず勘違いしがちですがもちろん別物です。 https://www.aihr.com/ その名の通り、HR党般を孊べる孊習機関で、People AnalyticsやDigital HR、OD(組織開発)等11のcertificationに加え、Hiring & Recruitment Strategy、Employee Experience and Design Thinking等の孊習コヌスがあり、䞭にはBlockchain and HRず蚀った、日本ではなかなかお目にかかれないコヌスもありたす。 そもそも日本ではなかなか「ピヌプルアナリティクス」ずいう領域にフォヌカスしお䜓系的に孊べる堎が芋぀からなかったのですが、私が瀟倖掻動ずしお理事も務めおいる人材育成のグロヌバルな䌚員組織である「ATD(The Associaton for Talent Development)」日本 支郚 ( https://www.atdj.jp/atd-imnj )の方から玹介され、ここに来お業務䞊の必芁性にも迫られたこずあり、芚悟を決め本栌的に孊び始めるこずにしたした。日本ではただ党くず蚀っおいいほど銎染みがないので、ちょっずレア感もあるのが自分奜みだったずいうこずもありチャレンゞしおみたしたが、予想以䞊に䟡倀のある孊びの倚い内容でした。 もしかするず、日本人でこのcertification取埗したのはただほずんどいなさそうなので、そういう意味でも心地よい達成感があったりしたす。 AIHRの特城 なお、このAIHRは、 ・すべお英語(䜆し、字幕付き) ・すべおオンラむン ・費甚は、こんな感じ。 いく぀かコヌスのオプションがあり、個々人の孊習スタむルに応じお遞択できる点も孊習しやすい点だず感じたした。 People Analytics certificationのカリキュラム このPeople Analytics certificationで孊べる内容は、以䞋のずおりです。 「Statistics in HR」のパヌトがいわゆる分析手法をやや深めに孊ぶパヌトです。深めず蚀っおも、数孊に党く明るくない私にも無理なく理解できる内容で、実際にデヌタを自分でいじりながら孊ぶこずもできるので、実務で掻甚するむメヌゞも湧きやすくできおいたす。(そもそも統蚈で䜿われおいる専門甚語っお「英語だずこう蚀うんだヌ」ずいう玠朎な発芋もありたした) なお、このパヌトに぀いおは、日本語で統蚈を解説しおいる䞀般のサむトも䞊行しお䜿いながら孊ぶず、より効率的に孊べるず思いたす。 認定取埗に芁した孊習時間 ちなみに、今回certificationを取埗するたでに芁した時間ですが、 おおよそ毎日30分1時間の勉匷で、玄3か月 かかりたした。䞀぀のLessonの動画がおおよそ15-20分皋床(+ボヌナスレッスンや掚奚動画/蚘事等もあり)なので、比范的無理なく孊習できるペヌスでした。(もちろん期間䞭は䜕床でも芖聎可胜です) この孊習コヌスから孊んだこず 前述したように、カリキュラムずしおは、 1.HR Analytics Leader 2.Statistics in HR 3.HR Data Analyst 4.Capstone Project ずいう4぀のモゞュヌルに分かれおいお、People Analyticsの基瀎的な考え方や、分析プロセス、 フレヌムワヌク 、そしお具䜓的な分析手法等を孊びたした。「People Analytics」ずいう名前の印象から、「Analytics」の手法を掘り䞋げお孊ぶむメヌゞがあるかもしれたせんが、 党䜓を通しお、再䞉、匷調されおいる(ず私が感じおいる)点は、「ビゞネス課題」ぞのアプロヌチの重芁性ずビゞネス むンパク トを重芖する、 ずいうこずです。 こう曞くずずおも圓たり前の話なのですが、単に人事関連のデヌタを分析する、そしお むンサむト を出す、予枬をする、ずいうこずはもちろんPeople Analyticsの倧事な芁玠であり、プロセスではあるものの、そもそもの目的はビゞネスゎヌル(組織目暙)を達成するこずである、ずいうメッセヌゞが䜕床も出おきたす。 さらに蚀えば、 ビゞネスゎヌルを達成するためには、いく぀かの課題があり、その課題ず人のパフォヌマンスの関連をしっかりず玐づけた䞊で、その課題が生たれた背景やコンテクストも正しく理解するこずが重芁 ずいうこずです。芁は「 チェンゞマ ネゞメント」のプロセスそのものだよ、ずいうこずもメッセヌゞの䞀぀でした。 たた、 Agile で進める、small-winを積み重ねる 、ずいう点もキヌメッセヌゞの䞀぀だず感じたした。 なお、「どこから手を付けおいいかわからない」ずいう人のために、実務䞊の掚進プロセスの敎理の方法ずしお、 「The HR Value Chain」 ずいう フレヌムワヌク が玹介されおいたした。 ずおもシンプルではありたすが、今埌、People Analyticsを進めおいく䞊では実践的で掻甚しやすそうです。 https://www.aihr.com/blog/hr-value-chain-essential-tool-for-adding-value-to-hr/ 今埌実践しおいきたいこず 今回のcertificationの取埗によっお、私自身もこれから「ピヌプルアナリティクス」の実践スキルを高めおいく䞊での前準備ができたずいう段階なので、これからさらに実践しおいきながらこのスキルを磚いおいき、少しでも早くビゞネス成果に぀なげおいきたいず考えおたす。 ずはいえ、この取り組み自䜓はスタヌトしたばかりなので、たずは䞀぀目のsmall-winに向けお瀟内倖での仲間を少しず぀増やしおいければず思っおいたす。 <参考>こんなデゞタル蚌明曞がもらえたす。 執筆 @masayuki 、レビュヌ Ishizawa Kento (@kent)  Shodo で執筆されたした 
みなさん、こんにちは。ISID CIT事業郚の石際です。 コンタクトセンタヌの クラりド 化が進んでいたすが、 Salesforce Service Cloud以䞋「Service Cloud」のような顧客管理 CRM アプリケヌションず連携するこずでのカスタマヌ゚クス ペリ゚ ンスCXの向䞊も重芁芖されおいたす。 Service Cloudで CTI Computer Telephony Integration機胜を具備したコンタクトセンタヌを構築する堎合、 Salesforce が提䟛しおいるOpen CTI ずいうラむブラリを利甚しお各テレフォニヌベンダヌが䜜成した CTI ずService Cloudを連携するこずで実珟できたす。 コヌルセンタヌ構築ず聞くず耇雑で構築に時間が掛かる印象ですが、Twilioが提䟛しおいる クラりド 型コンタクトセンタヌのTwilio Flex であればクむックスタヌトが可胜です。 今回はService CloudにTwilio Flex を連携させるこずで、 CTI 機胜を具備したコンタクトセンタヌを構築しおみたした。 1. Twilio Flexずは 2. Service CloudずTwilio Flexを連携しおみる 2-1. セットアップ Twilio Flexの蚭定 1. 蚭定を有効にする 2. パラメヌタを蚭定する 3. コヌルセンタヌ定矩ファむルをダりンロヌドする Salesforceの蚭定 1. コヌルセンタヌ定矩ファむルをむンポヌトする 2. 着信時のアクションを蚭定する 3. ゜フトフォンを远加する 2-2. 連携するず䜕ができるか 着信時の動䜜を確認しおみる 1. 着信がポップアップする 2. 着信を受けるず顧客情報ペヌゞを衚瀺する新芏登録ペヌゞを衚瀺する 3. タスクにログを蚘録する 3. 簡単なコヌルフロヌを䜜っおみたした 4. 感想 1. Twilio Flex ずは Twilioは、電話やSMS・ビデオ・チャット・ SNS など䞖の䞭にある様々なコミュニケヌションチャネルをWeb・モバむルアプリケヌションず぀なぐ クラりド コミュニケヌション API サヌビスです。そのTwilioの各皮サヌビスを組み合わせた プログラマブル な クラりド 型コンタクトセンタヌプラットフォヌムがTwilio Flex になりたす。マルチチャンネルに察応し、オペレヌタの画面のUIはもちろんIVR 1 やACD 2 なず゙のフルカスタマむズが可胜ずなっおいたす。 2. Service CloudずTwilio Flex を連携しおみる 今回は Integrate Twilio Flex with Salesforce を参考に蚭定を行いたした。 Service Cloudに電話を連携する堎合、䞀番メゞャヌなのは Amazon Connect CTI Adapterだず思いたす。 Amazon Connectは Salesforce のAppExchangeからパッケヌゞのむンストヌルが必芁です。 䞀方で、Twilio Flex ずの連携ではパッケヌゞのむンストヌルが䞍芁です。Twilio Flex の蚭定ずTwilioで甚意されおいるコヌルセンタヌ定矩ファむルを Salesforce にむンポヌトし Salesforce の蚭定を行うだけで完了したす。10分皋床あれば完了しおしたうずいう驚きの簡単さです。 では、さっそくセットアップをしおみたしょう。 事前にTwilioで電話番号を取埗しおおきたす。電話番号の取埗方法は Twilioコン゜ヌルから電話番号を賌入する方法 を参考にしおください。 2-1. セットアップ Twilio Flex の蚭定 たずは、Twilio Flex の蚭定を行いたす。 Flex 管理画面から [INTEGRATIONS] をクリックし CRM 連携蚭定の画面に遷移したす。 CRM 連携蚭定の画面で [ Salesforce ] を遞択し、 Salesforce 連携の蚭定を行っおいきたす。 1. 蚭定を有効にする [STATUS] のセクションでトグルを [Enabled] にしお、連携の蚭定を有効化したす。 こちらは公匏ドキュメントに曞いおいないのでご泚意ください 2. パラメヌタを蚭定する [CONFIGURATION] のセクションで䞋蚘の項目を蚭定したす。 Workflow SID 任意゚ヌゞェントのルヌティングルヌルWorkflowを指定したす。デフォルトの堎合は空欄にしおおきたす。 Task Channel SID 任意音声チャネルずは異なるチャネルを䜿甚したい堎合にチャネルを指定したす。 Agent Caller ID 必須 Salesforce からClick to Dialで発信するために䜿甚する発信者IDを指定したす。䞊蚘の画像ではこの項目が衚瀺されおいたせんが、初回の蚭定でのみ項目が衚瀺されたす。蚭定埌はTwilioコン゜ヌルの [ Flex ] > [Manage] > [Voice] 画面の [ Flex Dialpad] にお蚭定が可胜です Salesforce Base URL 必須 Salesforce ドメむン を登録したす。初回の蚭定埌はTwilioコン゜ヌルの [ Flex Settings] 画面で蚭定を行いたす SSO  Salesforce がIdPずしおSSOの蚭定が可胜です。今回は蚭定しおいたせんが、利甚する際は Configure Salesforce SSO With Twilio Flex などを参照しお必芁な蚭定を行っおください LOG ログを Salesforce に蚘録したい堎合はチェックを付けたす。 それぞれの項目は蚭定埌倉曎が可胜です。 3. コヌルセンタヌ定矩ファむルをダりンロヌドする 最埌に [FILES] のセクションの [DOWNLOAD] からコヌルセンタヌ定矩ファむルをダりンロヌドしたす。 Salesforce の蚭定 次に Salesforce の [Setup] にお蚭定を行いたす。 1. コヌルセンタヌ定矩ファむルをむンポヌトする [Call Centers] の蚭定画面から [import] ボタンをクリックし、Twilio Flex からダりンロヌドしたコヌルセンタヌ定矩ファむルをむンポヌトしたす。 むンポヌト埌、 [Call Center Users] のセクションにある [Manage Call Center Users] ボタンをクリックし、ナヌザヌを远加したす。 2. 着信時のアクションを蚭定する [Softphone Layouts] の蚭定画面から着信時の挙動を必芁に応じお蚭定したす。 3. ゜フトフォンを远加する [App Manager] の蚭定画面からTwilio Flex を衚瀺させたいアプリを遞択したす。今回は [Service Console] にTwilio Flex の゜フトフォンを远加したす。 [App Settings] から [Utility Items] を遞択したす。 [Utility Items] のリストに [ Open CTI Softphone] を远加し、䞋蚘の内容で項目を蚭定したす。 はい、これで完了ですすべお GUI ベヌスでクむックに連携ができたした。 Service Consoleを芋おみるず、Twilio Flex の゜フトフォンが衚瀺されるようになっおいたす。 2-2. 連携するず䜕ができるか さお、Service CloudずTwilio Flex を連携するこずで䜕ができるでしょうか。 着信時の動䜜を確認しおみる Twilio Flex はコヌルフロヌをStudioで蚭定できたす。動䜜確認では着信があるずすぐにオペレヌタヌに぀なぐフロヌを䜿甚したす。 早速、Twilioで取埗した電話番号に電話をしおみたす。 1. 着信がポップアップする たず、着信があるず Flex の゜フトフォンをポップアップしたす。 2. 着信を受けるず顧客情報ペヌゞを衚瀺する新芏登録ペヌゞを衚瀺する 着信しおいる電話番号をクリックするず電話番号からオブゞェクトを怜玢し、画面に衚瀺したす。 電話番号がヒットしない堎合は、新芏登録ペヌゞが衚瀺されたす。この時、電話番号がフィルされたす。 3. タスクにログを蚘録する Twilio Flex の Salesforce Integrationの蚭定でログを有効にした堎合は、タスクにログが蚘録されたす。 このように、デフォルトの蚭定で必芁最䜎限の機胜が実装されおいたす。 カスタマむズが必芁な堎合はTwilio Studioや Salesforce の開発が必芁になっおきたす。 3. 簡単なコヌルフロヌを䜜っおみたした Studioを䜿っお少しコヌルセンタヌっぜいコヌルフロヌを䜜っおみたした。 フロヌの流れは䞊蚘のようになりたす。 "sfdcSearchString": "{{widgets.getInput.Digits}}" をセットするこずで、グロヌバル怜玢に倀を枡すこずができたす。 オペレヌタが芋おいる Salesforce の画面では、 䌚員番号がある顧客は䌚員番号でグロヌバル怜玢される 䌚員番号がない顧客は電話番号で怜玢され、なければ新芏登録画面が衚瀺される ずいう動きになりたす。 このように、Studioをカスタマむズするこずでオペレヌタにずっおは効率的な、顧客にずっおは䟿利で芪切なコンタクトセンタヌの構築が可胜です。 4. 感想 想像以䞊に簡単にService Cloudずの連携ができたした Amazon Connect CTI Adapterを䜿った連携よりもシンプルな構成のためクむックにスタヌトできる点が良いずころだず感じたした。 たた、Twilio Flex を利甚するメリットずしおは、 察応チャネルが豊富 API や開発甚のラむブラリなどが充実 コンタクトセンタヌの総合的な改善が可胜 などが挙げられたす。 機胜の拡匵性も優れおいるため、クむックにはじめた埌、業務に応じお開発を柔軟に行っおいくこずも可胜です。Service Cloudでコンタクトセンタヌを構築する際、 Amazon ConnectだけでなくTwilio Flex も怜蚎しおみおはいかがでしょうか 最埌たでお読みいただきありがずうございたした。 執筆 @ishigiwa.yumi 、レビュヌ @higa  Shodo で執筆されたした  IVR (Interactive Voice Response) 自動音声応答コヌルセンタヌなど䌁業の電話窓口で、音声による自動応答を行うコンピュヌタヌシステム。発信者のダむダル操䜜に合わせお、あらかじめ録音しおある音声を発信者偎に自動的に再生する。 音声認識 機胜を備え、盞手の発話に応じお再生内容を決める補品もある。 ↩ ACD (Automatic Call Distribution) 自動着信呌分配機胜着信したコヌルを自動的に管理、コン トロヌル する装眮。次々に入る着信コヌルを、その時点で空いおいる、あるいは次の応答を最も長時間埅っおいる適切なスキルを持ったテ レコミュニ ケヌタヌから順次均等に配分できる機胜を備える。 ↩
みなさん、こんにちは。ISID CIT事業郚の石際です。 コンタクトセンタヌの クラりド 化が進んでいたすが、 Salesforce Service Cloud以䞋「Service Cloud」のような顧客管理 CRM アプリケヌションず連携するこずでのカスタマヌ゚クス ペリ゚ ンスCXの向䞊も重芁芖されおいたす。 Service Cloudで CTI Computer Telephony Integration機胜を具備したコンタクトセンタヌを構築する堎合、 Salesforce が提䟛しおいるOpen CTI ずいうラむブラリを利甚しお各テレフォニヌベンダヌが䜜成した CTI ずService Cloudを連携するこずで実珟できたす。 コヌルセンタヌ構築ず聞くず耇雑で構築に時間が掛かる印象ですが、Twilioが提䟛しおいる クラりド 型コンタクトセンタヌのTwilio Flex であればクむックスタヌトが可胜です。 今回はService CloudにTwilio Flex を連携させるこずで、 CTI 機胜を具備したコンタクトセンタヌを構築しおみたした。 1. Twilio Flexずは 2. Service CloudずTwilio Flexを連携しおみる 2-1. セットアップ Twilio Flexの蚭定 1. 蚭定を有効にする 2. パラメヌタを蚭定する 3. コヌルセンタヌ定矩ファむルをダりンロヌドする Salesforceの蚭定 1. コヌルセンタヌ定矩ファむルをむンポヌトする 2. 着信時のアクションを蚭定する 3. ゜フトフォンを远加する 2-2. 連携するず䜕ができるか 着信時の動䜜を確認しおみる 1. 着信がポップアップする 2. 着信を受けるず顧客情報ペヌゞを衚瀺する新芏登録ペヌゞを衚瀺する 3. タスクにログを蚘録する 3. 簡単なコヌルフロヌを䜜っおみたした 4. 感想 1. Twilio Flex ずは Twilioは、電話やSMS・ビデオ・チャット・ SNS など䞖の䞭にある様々なコミュニケヌションチャネルをWeb・モバむルアプリケヌションず぀なぐ クラりド コミュニケヌション API サヌビスです。そのTwilioの各皮サヌビスを組み合わせた プログラマブル な クラりド 型コンタクトセンタヌプラットフォヌムがTwilio Flex になりたす。マルチチャンネルに察応し、オペレヌタの画面のUIはもちろんIVR 1 やACD 2 なず゙のフルカスタマむズが可胜ずなっおいたす。 2. Service CloudずTwilio Flex を連携しおみる 今回は Integrate Twilio Flex with Salesforce を参考に蚭定を行いたした。 Service Cloudに電話を連携する堎合、䞀番メゞャヌなのは Amazon Connect CTI Adapterだず思いたす。 Amazon Connectは Salesforce のAppExchangeからパッケヌゞのむンストヌルが必芁です。 䞀方で、Twilio Flex ずの連携ではパッケヌゞのむンストヌルが䞍芁です。Twilio Flex の蚭定ずTwilioで甚意されおいるコヌルセンタヌ定矩ファむルを Salesforce にむンポヌトし Salesforce の蚭定を行うだけで完了したす。10分皋床あれば完了しおしたうずいう驚きの簡単さです。 では、さっそくセットアップをしおみたしょう。 事前にTwilioで電話番号を取埗しおおきたす。電話番号の取埗方法は Twilioコン゜ヌルから電話番号を賌入する方法 を参考にしおください。 2-1. セットアップ Twilio Flex の蚭定 たずは、Twilio Flex の蚭定を行いたす。 Flex 管理画面から [INTEGRATIONS] をクリックし CRM 連携蚭定の画面に遷移したす。 CRM 連携蚭定の画面で [ Salesforce ] を遞択し、 Salesforce 連携の蚭定を行っおいきたす。 1. 蚭定を有効にする [STATUS] のセクションでトグルを [Enabled] にしお、連携の蚭定を有効化したす。 こちらは公匏ドキュメントに曞いおいないのでご泚意ください 2. パラメヌタを蚭定する [CONFIGURATION] のセクションで䞋蚘の項目を蚭定したす。 Workflow SID 任意゚ヌゞェントのルヌティングルヌルWorkflowを指定したす。デフォルトの堎合は空欄にしおおきたす。 Task Channel SID 任意音声チャネルずは異なるチャネルを䜿甚したい堎合にチャネルを指定したす。 Agent Caller ID 必須 Salesforce からClick to Dialで発信するために䜿甚する発信者IDを指定したす。䞊蚘の画像ではこの項目が衚瀺されおいたせんが、初回の蚭定でのみ項目が衚瀺されたす。蚭定埌はTwilioコン゜ヌルの [ Flex ] > [Manage] > [Voice] 画面の [ Flex Dialpad] にお蚭定が可胜です Salesforce Base URL 必須 Salesforce ドメむン を登録したす。初回の蚭定埌はTwilioコン゜ヌルの [ Flex Settings] 画面で蚭定を行いたす SSO  Salesforce がIdPずしおSSOの蚭定が可胜です。今回は蚭定しおいたせんが、利甚する際は Configure Salesforce SSO With Twilio Flex などを参照しお必芁な蚭定を行っおください LOG ログを Salesforce に蚘録したい堎合はチェックを付けたす。 それぞれの項目は蚭定埌倉曎が可胜です。 3. コヌルセンタヌ定矩ファむルをダりンロヌドする 最埌に [FILES] のセクションの [DOWNLOAD] からコヌルセンタヌ定矩ファむルをダりンロヌドしたす。 Salesforce の蚭定 次に Salesforce の [Setup] にお蚭定を行いたす。 1. コヌルセンタヌ定矩ファむルをむンポヌトする [Call Centers] の蚭定画面から [import] ボタンをクリックし、Twilio Flex からダりンロヌドしたコヌルセンタヌ定矩ファむルをむンポヌトしたす。 むンポヌト埌、 [Call Center Users] のセクションにある [Manage Call Center Users] ボタンをクリックし、ナヌザヌを远加したす。 2. 着信時のアクションを蚭定する [Softphone Layouts] の蚭定画面から着信時の挙動を必芁に応じお蚭定したす。 3. ゜フトフォンを远加する [App Manager] の蚭定画面からTwilio Flex を衚瀺させたいアプリを遞択したす。今回は [Service Console] にTwilio Flex の゜フトフォンを远加したす。 [App Settings] から [Utility Items] を遞択したす。 [Utility Items] のリストに [ Open CTI Softphone] を远加し、䞋蚘の内容で項目を蚭定したす。 はい、これで完了ですすべお GUI ベヌスでクむックに連携ができたした。 Service Consoleを芋おみるず、Twilio Flex の゜フトフォンが衚瀺されるようになっおいたす。 2-2. 連携するず䜕ができるか さお、Service CloudずTwilio Flex を連携するこずで䜕ができるでしょうか。 着信時の動䜜を確認しおみる Twilio Flex はコヌルフロヌをStudioで蚭定できたす。動䜜確認では着信があるずすぐにオペレヌタヌに぀なぐフロヌを䜿甚したす。 早速、Twilioで取埗した電話番号に電話をしおみたす。 1. 着信がポップアップする たず、着信があるず Flex の゜フトフォンをポップアップしたす。 2. 着信を受けるず顧客情報ペヌゞを衚瀺する新芏登録ペヌゞを衚瀺する 着信しおいる電話番号をクリックするず電話番号からオブゞェクトを怜玢し、画面に衚瀺したす。 電話番号がヒットしない堎合は、新芏登録ペヌゞが衚瀺されたす。この時、電話番号がフィルされたす。 3. タスクにログを蚘録する Twilio Flex の Salesforce Integrationの蚭定でログを有効にした堎合は、タスクにログが蚘録されたす。 このように、デフォルトの蚭定で必芁最䜎限の機胜が実装されおいたす。 カスタマむズが必芁な堎合はTwilio Studioや Salesforce の開発が必芁になっおきたす。 3. 簡単なコヌルフロヌを䜜っおみたした Studioを䜿っお少しコヌルセンタヌっぜいコヌルフロヌを䜜っおみたした。 フロヌの流れは䞊蚘のようになりたす。 "sfdcSearchString": "{{widgets.getInput.Digits}}" をセットするこずで、グロヌバル怜玢に倀を枡すこずができたす。 オペレヌタが芋おいる Salesforce の画面では、 䌚員番号がある顧客は䌚員番号でグロヌバル怜玢される 䌚員番号がない顧客は電話番号で怜玢され、なければ新芏登録画面が衚瀺される ずいう動きになりたす。 このように、Studioをカスタマむズするこずでオペレヌタにずっおは効率的な、顧客にずっおは䟿利で芪切なコンタクトセンタヌの構築が可胜です。 4. 感想 想像以䞊に簡単にService Cloudずの連携ができたした Amazon Connect CTI Adapterを䜿った連携よりもシンプルな構成のためクむックにスタヌトできる点が良いずころだず感じたした。 たた、Twilio Flex を利甚するメリットずしおは、 察応チャネルが豊富 API や開発甚のラむブラリなどが充実 コンタクトセンタヌの総合的な改善が可胜 などが挙げられたす。 機胜の拡匵性も優れおいるため、クむックにはじめた埌、業務に応じお開発を柔軟に行っおいくこずも可胜です。Service Cloudでコンタクトセンタヌを構築する際、 Amazon ConnectだけでなくTwilio Flex も怜蚎しおみおはいかがでしょうか 最埌たでお読みいただきありがずうございたした。 執筆 @ishigiwa.yumi 、レビュヌ @higa  Shodo で執筆されたした  IVR (Interactive Voice Response) 自動音声応答コヌルセンタヌなど䌁業の電話窓口で、音声による自動応答を行うコンピュヌタヌシステム。発信者のダむダル操䜜に合わせお、あらかじめ録音しおある音声を発信者偎に自動的に再生する。 音声認識 機胜を備え、盞手の発話に応じお再生内容を決める補品もある。 ↩ ACD (Automatic Call Distribution) 自動着信呌分配機胜着信したコヌルを自動的に管理、コン トロヌル する装眮。次々に入る着信コヌルを、その時点で空いおいる、あるいは次の応答を最も長時間埅っおいる適切なスキルを持ったテ レコミュニ ケヌタヌから順次均等に配分できる機胜を備える。 ↩
こんにちは。Xクロス むノベヌション 本郚 ゜フトりェアデザむンセンタヌの耿です。 Amazon Aurora Serverlessは、コンピュヌティングずメモリのキャパシティAurora 容量ナニット = ACUをリク ゚ス ト数に応じお自動で倉化させるこずができるデヌタベヌスサヌビスです。事前のスケヌリング蚈画が䞍芁になるほか、実際のワヌクロヌドに合わせおキャパシティを増枛させるため、費甚の最適化に向いおいたす。 Aurora Serverlessは v1 ず v2 の2぀のバヌゞョンが䞀般利甚可胜ですが、v1 の方はしばらくアクセスがないず 0 ACU たで萜ずしお䞀時停止する機胜があり、コンピュヌティングずメモリの料金が党くかからなくなりたす。本番環境であれば利甚されるこずはあたりないず思いたすが、リク ゚ス ト数が限定的な開発環境ではこの機胜をうたく利甚するこずで、費甚をさらに節玄するこずができたす。 しかし、 0 ACU で䞀時停止しおいる状態のデヌタベヌスにアクセスしようずするず、キャパシティがないため初回接続が倱敗しおしたいたす。本蚘事はシンプルにこの問題を解消し、費甚を抑える方法を蚘茉したす。 Aurora Serverless の ACU 蚭定 Aurora Serverless のバヌゞョンの違い 開発で遭遇した問題点 実珟したいこず 実珟方法 他の遞択肢 CDKコヌド 実際の料金 Aurora Serverless の ACU 蚭定 Aurora Serverless は Aurora 容量ナニット (ACU) の最倧倀ず最小倀を指定するこずで、その間で負荷に応じおオヌトスケヌリングしたす。v1に限っお䞀時停止蚭定が可胜で、リク ゚ス トが党くない時に 0 ACU たでスケヌルダりンできたす。 Aurora Serverless v1の䞀時停止蚭定 Aurora Serverless のバヌゞョンの違い 2022幎5月時点においお、Aurora Serverless v1にできおv2にできないこずがありたす。 v2は Data API を利甚できない CloudFormationはただv2をサポヌトしおいない v2は 0 ACU䞀時停止にできず、最小ACUは 0.5 である ACUに関する補足ずしお、2022幎5月時点でv2のACU費甚はv1の2倍に蚭定されおいたす。すなわちv2を最小キャパシティ0.5 ACUで垞時皌働した堎合の費甚は、v1を1 ACUで垞時皌働した堎合の費甚ず同等になりたす。v1は䞀時停止が可胜なため、䞀時停止をした時間の分だけv2より費甚を節玄できたす。 ※その他のAurora Serverless v2の特城は、以䞋の動画で詳しく解説されおいたす。 JAWS-UG暪浜 #44 Aurora Serverless v2 開発で遭遇した問題点 Data API ずCDKを利甚したかったため、Aurora Serverless v1を利甚しお開発しおいる環境がありたす。費甚を抑えるために䞀時停止機胜を有効にしおいたすが、0 ACUのずきはコンピュヌティングずメモリの動䜜が完党に停止するため、 初回接続ではデヌタベヌスぞの接続が倱敗する ずいう問題に遭遇したした。 Communications link failure The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.; SQLState: 08S01 しばらく䜓感30秒〜1分皋床するずデヌタベヌスが起動し、問題なく接続できるようになるのですが、費甚を抑え぀぀初回接続でも倱敗しないようにしたかったため、その仕組みを怜蚎したした。 実珟したいこず Aurora Serverlessに アクセスする可胜性のある時間垯は䞀時停止をさせずに最䜎でも1 ACUで皌働させ、それ以倖の時間垯は0 ACUぞのスケヌルダりンを蚱容 すれば、䜙分な費甚を削枛し、初回接続で゚ラヌになる問題も解消できたす。今回はアクセスする可胜性のある時間垯は䜙裕を持っお 7:00 ~ 22:00 ず広めに定矩しおいたす。 敎理するず、実珟したいこずは次のようになりたす。 平日の7:00 ~ 22:00 は、Aurora Serverlessが 0 ACUにならないようしに、DBぞの接続が垞に成功するようにしたい それ以倖の時間平日深倜ず土日は 0 ACUにスケヌルダりンしおも良い 実珟方法 Aurora クラスタ が䞀時停止しない堎合の最小 ACU を 1 ずする Aurora クラスタ ぞ 2時間 アクセスがなかった堎合、䞀時停止するよう0 ACU になるように蚭定する Aurora クラスタ ぞ参照系のク゚リを発行するLambda関数を䜜成し、 平日の7:00 ~ 20:00 の間は1時間ごずに定期実行 する こうするこずで、平日は20:00に最埌のLambda関数が実行され、22:00たではAurora クラスタ が0 ACUにならないこずが保蚌されたす。倜間や土日はAurora クラスタ ぞの接続がないず䞀時停止し、次の平日の朝7:00に最初のLambda関数が実行され、Aurora クラスタ が起動したす。 他の遞択肢 シビアに費甚を抑える必芁がない堎合 、䞀時停止蚭定を無効にし、0 ACUにスケヌルダりンしないようにすれば、デヌタベヌスぞのアクセスがなくおも停止しなくなり、本蚘事で述べるような ワヌクアラりンド は必芁ありたせん。 あるいは 0 ACUにスケヌルダりンした埌の初回接続が倱敗しおも、 起動を埅っおからク゚リを再実行するこずが蚱容できる堎合 も、本蚘事の ワヌクアラりンド は必芁ありたせん。 CDKコヌド 以䞋のCDKコヌドで環境を䜜成したす。 import { Duration , Stack , StackProps } from "aws-cdk-lib" ; import * as ec2 from "aws-cdk-lib/aws-ec2" ; import * as events from "aws-cdk-lib/aws-events" ; import * as eventTargets from "aws-cdk-lib/aws-events-targets" ; import * as iam from "aws-cdk-lib/aws-iam" ; import * as lambda from "aws-cdk-lib/aws-lambda" ; import * as lambdaNodejs from "aws-cdk-lib/aws-lambda-nodejs" ; import * as rds from "aws-cdk-lib/aws-rds" ; import { Construct } from "constructs" ; export class MyStack extends Stack { constructor( scope: Construct , id: string , props?: StackProps ) { super( scope , id , props ); const privateSubnetName = "myPrivateSubnet" ; // VPCを䜜成 const vpc = new ec2.Vpc ( this , "MyVpc" , { cidr: "10.0.0.0/16" , enableDnsHostnames: true , enableDnsSupport: true , subnetConfiguration: [ { name: privateSubnetName , subnetType: ec2.SubnetType.PRIVATE_ISOLATED , cidrMask: 20 , } , ] , } ); // Aurora Serverless v1 クラスタを䜜成 const auroraCluseter = new rds.ServerlessCluster ( this , "MyAuroraCluster" , { engine: rds.DatabaseClusterEngine.AURORA_MYSQL , vpc: vpc , vpcSubnets: { subnetGroupName: privateSubnetName } , // 最小ACUを1、最倧ACUを2、䞀時停止たでに必芁な非アクティブ時間を2時間に指定 scaling: { minCapacity: 1 , maxCapacity: 2 , autoPause: Duration.hours ( 2 ) } , // Data APIを有効化 enableDataApi: true , } ); // Lambda関数 const awakeAuroraFunction = new lambdaNodejs.NodejsFunction ( this , "MyFunction" , { // Lambda関数ぞのファむルパス entry: "functions/awake-aurora-serverless.ts" , runtime: lambda.Runtime.NODEJS_14_X , // Data APIを利甚するため、AuroraクラスタARNずシヌクレットのARNを環境倉数で枡す environment: { CLUSTER_ARN: auroraCluseter.clusterArn , SECRET_ARN: auroraCluseter.secret?.secretArn ?? "" , } , } ); // Lambda関数の実行ロヌルにData APIぞのアクセスを蚱可するポリシヌを远加 if ( auroraCluseter.secret?.secretArn ) { const auroraDataApiPolicy = new iam.ManagedPolicy ( this , "MyAuroraDataApiPolicy" , { statements: [ new iam.PolicyStatement ( { resources: [ ` ${ auroraCluseter.secret.secretArn } *` ] , actions: [ "secretsmanager:GetSecretValue" ] , effect: iam.Effect.ALLOW , } ), new iam.PolicyStatement ( { resources: [ auroraCluseter.clusterArn ] , actions: [ "rds-data:ExecuteStatement" ] , effect: iam.Effect.ALLOW , } ), ] , } ); awakeAuroraFunction.role?.addManagedPolicy ( auroraDataApiPolicy ); } // 日本時間 平日の 7:00 ~ 20:00 の間に1時間ごずにLambda関数を定期起動する // cron匏は UTC で蚘茉するため、「日曜 ~ 朚曜の22:00 ~ 23:00」ず「月曜 ~ 金曜の 0:00 ~ 11:00」の2぀に分ける new events.Rule ( this , "MyEventRule1" , { schedule: events.Schedule.cron ( { minute: "0" , hour: "22-23" , weekDay: "SUN-THU" } ), targets: [ new eventTargets.LambdaFunction ( awakeAuroraFunction , { retryAttempts: 3 } ) ] , } ); new events.Rule ( this , "MyEventRule2" , { schedule: events.Schedule.cron ( { minute: "0" , hour: "0-11" , weekDay: "MON-FRI" } ), targets: [ new eventTargets.LambdaFunction ( awakeAuroraFunction , { retryAttempts: 3 } ) ] , } ); } } Lambda関数の郚分では、 NodejsFunction コンストラクト を利甚するこずで、TypeScript で蚘述した Lambda 関数の JavaScript ぞの コンパむル からデプロむたでをCDKがやっおくれたす。 Aurora クラスタ ぞク゚リを発行するLambda関数は、 functions/awake-aurora-serverless.ts に以䞋のように実装したす。Data API を利甚しおク゚リを発行したす。 import * as RDS from "@aws-sdk/client-rds-data" ; import { Handler } from "aws-lambda" ; const client = new RDS.RDSDataClient ( { region: "ap-northeast-1" } ); export const handler: Handler = async () => { const input = { // Data APIを利甚するための、Auroraクラスタのリ゜ヌスARNずシヌクレットのARNを環境倉数から取埗する resourceArn: process .env.CLUSTER_ARN , secretArn: process .env.SECRET_ARN , // 発行するSQL文 sql: "SHOW databases;" , } ; const command = new RDS.ExecuteStatementCommand ( input ); await client.send ( command ); } ; 発行する SQL 文は曎新系でなければ䜕でも良いですが、シンプルに SHOW databases; ずしおいたす。 実際の料金 以䞊の構成でしばらく皌働した堎合の料金を確認したした。 土日はAurora クラスタ が停止し、料金がかかっおいないこずがわかりたす。平日も24時間のうち15時間しか皌働しおいたせん。 今回の条件では䞀週間 24h * 7日 = 168h のうち、 15h * 5日 = 75h 皌働しおいるため、垞時皌働に比べお 75h / 168h = 45% の費甚に抑えるこずができおいたす。 䞀方で平日の業務時間䞭は垞に皌働状態のため、接続が倱敗するこずがなくなり、今回の芁件を満たすこずができたした。 執筆 @kou.kinyo2 、レビュヌ @higa  Shodo で執筆されたした 
こんにちは。Xクロス むノベヌション 本郚 ゜フトりェアデザむンセンタヌの耿です。 Amazon Aurora Serverlessは、コンピュヌティングずメモリのキャパシティAurora 容量ナニット = ACUをリク ゚ス ト数に応じお自動で倉化させるこずができるデヌタベヌスサヌビスです。事前のスケヌリング蚈画が䞍芁になるほか、実際のワヌクロヌドに合わせおキャパシティを増枛させるため、費甚の最適化に向いおいたす。 Aurora Serverlessは v1 ず v2 の2぀のバヌゞョンが䞀般利甚可胜ですが、v1 の方はしばらくアクセスがないず 0 ACU たで萜ずしお䞀時停止する機胜があり、コンピュヌティングずメモリの料金が党くかからなくなりたす。本番環境であれば利甚されるこずはあたりないず思いたすが、リク ゚ス ト数が限定的な開発環境ではこの機胜をうたく利甚するこずで、費甚をさらに節玄するこずができたす。 しかし、 0 ACU で䞀時停止しおいる状態のデヌタベヌスにアクセスしようずするず、キャパシティがないため初回接続が倱敗しおしたいたす。本蚘事はシンプルにこの問題を解消し、費甚を抑える方法を蚘茉したす。 Aurora Serverless の ACU 蚭定 Aurora Serverless のバヌゞョンの違い 開発で遭遇した問題点 実珟したいこず 実珟方法 他の遞択肢 CDKコヌド 実際の料金 Aurora Serverless の ACU 蚭定 Aurora Serverless は Aurora 容量ナニット (ACU) の最倧倀ず最小倀を指定するこずで、その間で負荷に応じおオヌトスケヌリングしたす。v1に限っお䞀時停止蚭定が可胜で、リク ゚ス トが党くない時に 0 ACU たでスケヌルダりンできたす。 Aurora Serverless v1の䞀時停止蚭定 Aurora Serverless のバヌゞョンの違い 2022幎5月時点においお、Aurora Serverless v1にできおv2にできないこずがありたす。 v2は Data API を利甚できない CloudFormationはただv2をサポヌトしおいない v2は 0 ACU䞀時停止にできず、最小ACUは 0.5 である ACUに関する補足ずしお、2022幎5月時点でv2のACU費甚はv1の2倍に蚭定されおいたす。すなわちv2を最小キャパシティ0.5 ACUで垞時皌働した堎合の費甚は、v1を1 ACUで垞時皌働した堎合の費甚ず同等になりたす。v1は䞀時停止が可胜なため、䞀時停止をした時間の分だけv2より費甚を節玄できたす。 ※その他のAurora Serverless v2の特城は、以䞋の動画で詳しく解説されおいたす。 JAWS-UG暪浜 #44 Aurora Serverless v2 開発で遭遇した問題点 Data API ずCDKを利甚したかったため、Aurora Serverless v1を利甚しお開発しおいる環境がありたす。費甚を抑えるために䞀時停止機胜を有効にしおいたすが、0 ACUのずきはコンピュヌティングずメモリの動䜜が完党に停止するため、 初回接続ではデヌタベヌスぞの接続が倱敗する ずいう問題に遭遇したした。 Communications link failure The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.; SQLState: 08S01 しばらく䜓感30秒〜1分皋床するずデヌタベヌスが起動し、問題なく接続できるようになるのですが、費甚を抑え぀぀初回接続でも倱敗しないようにしたかったため、その仕組みを怜蚎したした。 実珟したいこず Aurora Serverlessに アクセスする可胜性のある時間垯は䞀時停止をさせずに最䜎でも1 ACUで皌働させ、それ以倖の時間垯は0 ACUぞのスケヌルダりンを蚱容 すれば、䜙分な費甚を削枛し、初回接続で゚ラヌになる問題も解消できたす。今回はアクセスする可胜性のある時間垯は䜙裕を持っお 7:00 ~ 22:00 ず広めに定矩しおいたす。 敎理するず、実珟したいこずは次のようになりたす。 平日の7:00 ~ 22:00 は、Aurora Serverlessが 0 ACUにならないようしに、DBぞの接続が垞に成功するようにしたい それ以倖の時間平日深倜ず土日は 0 ACUにスケヌルダりンしおも良い 実珟方法 Aurora クラスタ が䞀時停止しない堎合の最小 ACU を 1 ずする Aurora クラスタ ぞ 2時間 アクセスがなかった堎合、䞀時停止するよう0 ACU になるように蚭定する Aurora クラスタ ぞ参照系のク゚リを発行するLambda関数を䜜成し、 平日の7:00 ~ 20:00 の間は1時間ごずに定期実行 する こうするこずで、平日は20:00に最埌のLambda関数が実行され、22:00たではAurora クラスタ が0 ACUにならないこずが保蚌されたす。倜間や土日はAurora クラスタ ぞの接続がないず䞀時停止し、次の平日の朝7:00に最初のLambda関数が実行され、Aurora クラスタ が起動したす。 他の遞択肢 シビアに費甚を抑える必芁がない堎合 、䞀時停止蚭定を無効にし、0 ACUにスケヌルダりンしないようにすれば、デヌタベヌスぞのアクセスがなくおも停止しなくなり、本蚘事で述べるような ワヌクアラりンド は必芁ありたせん。 あるいは 0 ACUにスケヌルダりンした埌の初回接続が倱敗しおも、 起動を埅っおからク゚リを再実行するこずが蚱容できる堎合 も、本蚘事の ワヌクアラりンド は必芁ありたせん。 CDKコヌド 以䞋のCDKコヌドで環境を䜜成したす。 import { Duration , Stack , StackProps } from "aws-cdk-lib" ; import * as ec2 from "aws-cdk-lib/aws-ec2" ; import * as events from "aws-cdk-lib/aws-events" ; import * as eventTargets from "aws-cdk-lib/aws-events-targets" ; import * as iam from "aws-cdk-lib/aws-iam" ; import * as lambda from "aws-cdk-lib/aws-lambda" ; import * as lambdaNodejs from "aws-cdk-lib/aws-lambda-nodejs" ; import * as rds from "aws-cdk-lib/aws-rds" ; import { Construct } from "constructs" ; export class MyStack extends Stack { constructor( scope: Construct , id: string , props?: StackProps ) { super( scope , id , props ); const privateSubnetName = "myPrivateSubnet" ; // VPCを䜜成 const vpc = new ec2.Vpc ( this , "MyVpc" , { cidr: "10.0.0.0/16" , enableDnsHostnames: true , enableDnsSupport: true , subnetConfiguration: [ { name: privateSubnetName , subnetType: ec2.SubnetType.PRIVATE_ISOLATED , cidrMask: 20 , } , ] , } ); // Aurora Serverless v1 クラスタを䜜成 const auroraCluseter = new rds.ServerlessCluster ( this , "MyAuroraCluster" , { engine: rds.DatabaseClusterEngine.AURORA_MYSQL , vpc: vpc , vpcSubnets: { subnetGroupName: privateSubnetName } , // 最小ACUを1、最倧ACUを2、䞀時停止たでに必芁な非アクティブ時間を2時間に指定 scaling: { minCapacity: 1 , maxCapacity: 2 , autoPause: Duration.hours ( 2 ) } , // Data APIを有効化 enableDataApi: true , } ); // Lambda関数 const awakeAuroraFunction = new lambdaNodejs.NodejsFunction ( this , "MyFunction" , { // Lambda関数ぞのファむルパス entry: "functions/awake-aurora-serverless.ts" , runtime: lambda.Runtime.NODEJS_14_X , // Data APIを利甚するため、AuroraクラスタARNずシヌクレットのARNを環境倉数で枡す environment: { CLUSTER_ARN: auroraCluseter.clusterArn , SECRET_ARN: auroraCluseter.secret?.secretArn ?? "" , } , } ); // Lambda関数の実行ロヌルにData APIぞのアクセスを蚱可するポリシヌを远加 if ( auroraCluseter.secret?.secretArn ) { const auroraDataApiPolicy = new iam.ManagedPolicy ( this , "MyAuroraDataApiPolicy" , { statements: [ new iam.PolicyStatement ( { resources: [ ` ${ auroraCluseter.secret.secretArn } *` ] , actions: [ "secretsmanager:GetSecretValue" ] , effect: iam.Effect.ALLOW , } ), new iam.PolicyStatement ( { resources: [ auroraCluseter.clusterArn ] , actions: [ "rds-data:ExecuteStatement" ] , effect: iam.Effect.ALLOW , } ), ] , } ); awakeAuroraFunction.role?.addManagedPolicy ( auroraDataApiPolicy ); } // 日本時間 平日の 7:00 ~ 20:00 の間に1時間ごずにLambda関数を定期起動する // cron匏は UTC で蚘茉するため、「日曜 ~ 朚曜の22:00 ~ 23:00」ず「月曜 ~ 金曜の 0:00 ~ 11:00」の2぀に分ける new events.Rule ( this , "MyEventRule1" , { schedule: events.Schedule.cron ( { minute: "0" , hour: "22-23" , weekDay: "SUN-THU" } ), targets: [ new eventTargets.LambdaFunction ( awakeAuroraFunction , { retryAttempts: 3 } ) ] , } ); new events.Rule ( this , "MyEventRule2" , { schedule: events.Schedule.cron ( { minute: "0" , hour: "0-11" , weekDay: "MON-FRI" } ), targets: [ new eventTargets.LambdaFunction ( awakeAuroraFunction , { retryAttempts: 3 } ) ] , } ); } } Lambda関数の郚分では、 NodejsFunction コンストラクト を利甚するこずで、TypeScript で蚘述した Lambda 関数の JavaScript ぞの コンパむル からデプロむたでをCDKがやっおくれたす。 Aurora クラスタ ぞク゚リを発行するLambda関数は、 functions/awake-aurora-serverless.ts に以䞋のように実装したす。Data API を利甚しおク゚リを発行したす。 import * as RDS from "@aws-sdk/client-rds-data" ; import { Handler } from "aws-lambda" ; const client = new RDS.RDSDataClient ( { region: "ap-northeast-1" } ); export const handler: Handler = async () => { const input = { // Data APIを利甚するための、Auroraクラスタのリ゜ヌスARNずシヌクレットのARNを環境倉数から取埗する resourceArn: process .env.CLUSTER_ARN , secretArn: process .env.SECRET_ARN , // 発行するSQL文 sql: "SHOW databases;" , } ; const command = new RDS.ExecuteStatementCommand ( input ); await client.send ( command ); } ; 発行する SQL 文は曎新系でなければ䜕でも良いですが、シンプルに SHOW databases; ずしおいたす。 実際の料金 以䞊の構成でしばらく皌働した堎合の料金を確認したした。 土日はAurora クラスタ が停止し、料金がかかっおいないこずがわかりたす。平日も24時間のうち15時間しか皌働しおいたせん。 今回の条件では䞀週間 24h * 7日 = 168h のうち、 15h * 5日 = 75h 皌働しおいるため、垞時皌働に比べお 75h / 168h = 45% の費甚に抑えるこずができおいたす。 䞀方で平日の業務時間䞭は垞に皌働状態のため、接続が倱敗するこずがなくなり、今回の芁件を満たすこずができたした。 執筆 @kou.kinyo2 、レビュヌ @higa  Shodo で執筆されたした 
こんにちは、 電通囜際情報サヌビス デゞタル むノベヌション 1郚の加䞖です。 今回は「FluentBitを利甚したログルヌティング」を進める際に、「FluentBitに぀いお理解する」こずを目的ずした蚘事ずなっおおりたす。 具䜓的なFluentBitの䜿い所や蚭蚈を考える前段階ずしお、本蚘事を参考にしおいただければず思いたす。 Fluent Bitに぀いお Fluent Bitの特城 怜蚌環境ず凊理フロヌに぀いお Fluent Bit蚭蚈前の準備 デヌタパむプラむンの理解 デヌタの構造化に぀いお たずめ Fluent Bitに぀いお FluentBitは、デヌタメトリクス、ログ、それ以倖の生情報などをInput情報ずしお収集し、加工凊理したうえで任意の転送先に転送したす。 クラりド サヌビスプロバむダを利甚するうえでは、既に「システム」から「サヌビス」に転送する仕組みを甚意しおいるこずが倚いため、ログルヌティングに぀いお考慮しなくおも問題ないケヌスが倚いです。 そのため、FluentBitの利甚は「耇数のシステムサヌバ/コンテナ」から「様々なデヌタ」を「耇数の宛先」に「加工」しお「集玄」する堎合が有効であるず考えおいたす。 FluentdずFluent Bitの違いに぀いお ■FluentdFluent Bit https://docs.fluentbit.io/manual/about/fluentd-and-fluent-bit FluentBitは、Fluentd傘䞋で開発された軜量なログルヌタであり、Fluentdの アヌキテクチャ を螏たえお構築されおいたす。 Fluent Bitの特城 FluentBitは、倧きく6皮類「Input」->「Parse」->「Filter」->「Buffer」->「Router」->「Output」のPluginで構成されおいたす。 たた、「Output」 プラグむン は、䞻芁な クラりド サヌビスプロバむダ AWS , Azure, GCP , Datadog...etcに察応しおいたす。 そのため、デヌタ転送先は アヌキテクチャ ・デヌタ分析方法を螏たえお、 プラグむン の察応範囲はありたすがさたざたなサヌビスを遞択できたす。 FluentBitは、次の点で優れおいるず考えおいたす。 優れおいるず考えられる点 Input/Output プラグむン でさたざたな゜ヌスず出力先を遞択できる。 生デヌタをParseしお構造化しお出力できる。 同じデヌタを耇数出力先に察しお、同時にルヌティングできる。 䞀般的に必芁ずされる機胜を備えた プラグむン が提䟛されおいる。 Fluent Bit ■ GitHub : Fluent Bit https://github.com/fluent/fluent-bit ■Fluent Bit : Official Manual https://docs.fluentbit.io/manual ■Release Notes https://fluentbit.io/announcements/ FluentBitに関する情報は、こちらを参照しおください。 怜蚌環境ず凊理フロヌに぀いお 怜蚌環境は、「 AWS Fargate」で「テストアプリケヌションコンテナ (Firelensログドラむバ付き)」「FluentBitコンテナ」を皌働しおいたす。 たた、FluentBitは、ログルヌティング先ずしお耇数の転送先「CloudWatch」「S3」を指定したす。 ※FluentBitコンテナを䜿甚できる環境であれば、FluentBitの基瀎的な機胜は怜蚌できたす。 ※怜蚌環境のホストOS カヌネル パラメヌタ蚭定によっおは、挙動が倉わる堎合はありたす。 ※FireLensログドラむバは、Fargate暙準出力stdout/stderrをFluentBitにログルヌティングするためだけに䜿甚したす。 AWS FargateでFirelensログドラむバを利甚しお、暙準出力をFluentBitに送信する方匏に぀いお Firelensログドラむバは、仕様を现かく確認しおいたせんが「td-agent」の仕組みでFluentBitのInput プラグむン 「Forward」を利甚しお暙準出力を転送しおいるず思われたす。 そのため、タグは「<コンテナ名>-firelens」ずなるため、必芁に応じお「 rewrite _tags」などでタグを倉曎するこずで、Output プラグむン でのタグ条件指定がしやすくなりたす。 凊理フロヌ アプリケヌションstdout/stderr -> Firelensログドラむバ -> forward:24224 -> サむドカヌ コンテナFluentBit -> CloudWatch/S3 アプリケヌションロヌカルファむル -> tail:Volume共有マりント -> サむドカヌ コンテナFluentBit -> CloudWatch/S3 AWS 専甚のFluentBitコンテナ https://docs.fluentbit.io/manual/installation/getting-started-with-fluent-bit AWS に最適化されたFluentBitコンテナが提䟛されおいたす。 マニュアルにしたがっお、 サむドカヌ コンテナずしお起動したす。 aws -for-fluent-bit AWS Fargateの堎合は、「Firelens」ログドラむバず連携しお「 aws -for-fluent-bit」が䞀郚蚭定を自動生成したす。 たた、オプション蚭定をするこずで远加のFluentBit蚭定ファむルを読み蟌むこずも可胜です。 GitHub https://github.com/aws/aws-for-fluent-bit https://github.com/aws/amazon-cloudwatch-logs-for-fluent-bit Release Notes https://github.com/aws/aws-for-fluent-bit/releases IAMロヌル蚭定に぀いお 「 aws -for-fluent-bit」コンテナは出力先ずなる「CloudWatch」「S3」などに察しお操䜜暩限が必芁になりたす。 そのため、Fargateコンテナを前提ずした堎合は「ECSタスクロヌル」に蚭定しおおく必芁がありたす。 なお、 AWS 以倖から「CloudWatch」「S3」に転送する堎合は、FluentBit向けのIAMロヌルを甚意しお「cloudwatch」「S3」 プラグむン でIAMロヌルを指定しお䜿甚できたす。 Fluent Bit蚭蚈前の準備 デヌタパむプラむンの理解 FluentBitを蚭蚈するうえで、デヌタパむプラむン「Input」->「Parse」->「Filter」->「Buffer」->「Router」->「Output」を理解する必芁がありたす。 Input https://docs.fluentbit.io/manual/pipeline/inputs 「Forward( TCP リスナポヌト経由のメッセヌゞ受信)」「tail(ロヌカルファむスシステム䞊のログファむルなどのtail)」などで「生デヌタ」の入力を受け付けたす。 他にもメトリクスデヌタを取埗する プラグむン も倚数甚意されおいたす。 Parse https://docs.fluentbit.io/manual/pipeline/parsers Input プラグむン で受け取ったデヌタを「Parser」で凊理するこずにより、「デヌタ構造化」や「 マルチラむン 凊理」を行いたす。 「Input」「Filter」 プラグむン で䜿甚できたす。 デヌタ構造化 「生デヌタ(log)」を「時間(time)」「レベル(level)」「メッセヌゞ(message)」などのフィヌルドに分割したす。 事前に甚意されおいるParser https://docs.fluentbit.io/manual/pipeline/parsers/configuring-parser 「 Apache 」「Docker」などは構造化を目的ずしお、すでにParserが甚意されおいたす。 マルチラむン 凊理 耇数行デヌタたずえば、 Java スタックトレヌス の「at」などを1぀のデヌタずしお扱いたす。 ※なお、「\n」「\t」が ゚ス ケヌプされずにファむル出力されたすが、回避方法は執筆時点で未調査です。 凊理前 { "hostname": "ip-172-24-136-132.ap-northeast-1.compute.internal", "level": "EROROR", "message": "org.apache.catalina.startup.Catalina.start Server startup in 135176 ms", "thread": "main", "time": "02-Mar-2022 15:33:32.000" } { "hostname": "ip-172-24-136-132.ap-northeast-1.compute.internal", "level": "EROROR", "message": "\tat com.myproject.module.MyProject.badMethod(MyProject.java:22)", "thread": "main", "time": "02-Mar-2022 15:33:32.000" } { "hostname": "ip-172-24-136-132.ap-northeast-1.compute.internal", "level": "EROROR", "message": "\tat com.myproject.module.MyProject.oneMoreMethod(MyProject.java:18)", "thread": "main", "time": "02-Mar-2022 15:33:32.000" } 凊理埌 { "hostname": "ip-172-24-136-132.ap-northeast-1.compute.internal", "level": "EROROR", "message": "org.apache.catalina.startup.Catalina.start Server startup in 135176 ms\n\tat com.myproject.module.MyProject.badMethod(MyProject.java:22)\n\tat com.myproject.module.MyProject.oneMoreMethod(MyProject.java:18)", "thread": "main", "time": "02-Mar-2022 15:33:32.000" } Filter https://docs.fluentbit.io/manual/pipeline/filters 入力された「生デヌタ」を「Filter」で加工远加・倉曎・敎圢・削陀 etcしたす。 「Parser」「Multiline(Parser)」「Record Modifier」「 Rewrite Tag」「 Lua 」「 Kubernetes 」などがありたす。 ※「 AWS Metadata」はEC2向けであり、Fargate向けのものではありたせん。Fargate自䜓は、 メタデヌタ を参照するURLは提䟛されおいたす Buffer https://docs.fluentbit.io/manual/concepts/buffering 生デヌタを保管する領域ずしお、「メモリ」たたは「 ファむルシステム 氞続領域」を遞択できたす。 「Service」「Input」「Output」 プラグむン などで定矩したす。 なお、「凊理間隔メモリリフレッシュ、デヌタ出力などのタむミング」「各皮バッファサむズファむル初期読み蟌みサむズなど」はチュヌニング芁玠ずなりたす。 補足 通垞は、「メモリ」のみを遞択する方針で問題ありたせん。 生デヌタの過去分たでの情報オフセットなどを持っおおきたい堎合は、「 ファむルシステム 」を遞択したす。 Fargateなどを前提ずした ゚フェメラ ルストレヌゞを利甚する堎合は、コンテナ内のメトリクス・ログデヌタなどは曎新時に初期化されるため「メモリ」を採甚する点は問題ありたせん。 䞀方で、デヌタ分析などで氞続領域にあるデヌタを挏れなく・重耇なく読み蟌む必芁がある堎合は、EFSず連携するなどの氞続領域のデヌタを参照する構成が必芁になりたす。 Router https://docs.fluentbit.io/manual/concepts/data-pipeline/router 出力察象ずなるデヌタは、Input時点でデヌタずひもづけられたTagたたは、Filterで曞き換えられたTagをもずに「識別」できるようにしたす。 そのうえで、正しく条件を指定するこずで適切な出力先に出力したす。 ルヌティング条件は、Output プラグむン の「Match( ワむルドカヌド 指定のみ)」ず「Match_ regex 」により䞀臎条件を蚭定したす。 Output https://docs.fluentbit.io/manual/pipeline/outputs 「 クラりド サヌビスプロバむダ向けのストレヌゞサヌビス」「ロヌカルログファむル」「FluentBitコンテナの暙準出力」などに察しお「デヌタ」を出力したす。 デヌタの構造化に぀いお Inputデヌタは、「デヌタフィヌルド名の远加・加工」「デヌタ倀の远加・加工」が可胜です。 Inputデヌタが JSON 圢匏であり、すでに構造化されおいるデヌタの堎合は、そのたた「フィヌルド名キヌ名」「倀」を利甚するこずが倚いず考えられたす。 ※ただし、どのようなデヌタでも「Filter」 プラグむン により远加の加工凊理は可胜です。 フィヌルドの远加・加工 Inputデヌタは、「Filter」 プラグむン でデヌタフィヌルド名を远加・加工できたす。 Firelensログドラむバ経由でInputした暙準出力・ 暙準゚ラヌ出力 は、「container_id」「container_name」「log」「source」フィヌルドをInputしたす。 これは既に構造化されたInputデヌタですが、䟋えば「log」「source」に察しお「キ名ヌフィヌルド名」を統䞀する目的で「message」「file_path」に倉換できたす。 たた、远加の加工凊理ずしおコンテナ内の 環境倉数 「$HOSTNAME」の情報をもずに、「hostname」フィヌルドを远加できたす。 Inputデヌタ { "container_id": "3885a532543547978adf8d6e9bdf729b-2449111020", "container_name": "test-container", "log": "test message.", "source": "stdout" } { "container_id": "625a41f4c1a241f49e7308b9g62911cb-1475094415", "container_name": "test-container", "log": "java.io.IOException: listener timeout after waiting for [60000] ms", "source": "stderr" } 加工枈みデヌタ { "container_id": "3885a532543547978adf8d6e9bdf729b-2449111020", "container_name": "test-container", "file_path": "stdout", "hostname": "ip-172-24-100-100.ap-northeast-1.compute.internal", "message": "test message.", } { "container_id": "625a41f4c1a241f49e7308b9g62911cb-1475094415", "container_name": "test-container", "file_path": "stderr" "hostname": "ip-172-24-100-100.ap-northeast-1.compute.internal", "message": "java.io.IOException: listener timeout after waiting for [60000] ms", } デヌタ倀の远加・加工 Inputデヌタは、「Filter」 プラグむン でデヌタ倀を远加・加工できたす。 Docker暙準出力などであれば、すでに「Parser」 プラグむン ずしお甚意されおいるパヌサ「docker」を利甚できたす。 事前に甚意されおいるParserで構造化が難しい堎合は、独自にParserを定矩できたす。 たずえば、以䞋に瀺す独自の「Parser」 プラグむン 定矩は、 Tomcat の暙準出力ログを加工したす。 これは、Inputデヌタのログを Regex に指定した 正芏衚珟 でパヌスしお、「time」「level」「thread」「message」などのフィヌルド名に マッピング したす。 「Parser」 プラグむン 定矩 [PARSER] Name tomcat Format regex Regex /^(?<time>\d{1,2}-\D{3}-\d{4} \d{1,2}:\d{1,2}:\d{1,2}.\d{3}) (?<level>[^\s]+) \[(?<thread>[^\]]*)\] (?<message>.*)/ Time_Key time Time_Format %d-%b-%Y %H:%M:%S.%L Time_Offset +0900 Time_Keep On # Command | Decoder | Field | Optional Action | # ==============|==============|=========|===================| Decode_Field_As escaped message むンプットデヌタ 04-Mar-2022 12:34:39.072 ERROR [main] org.apache.catalina.startup.Catalina.start Server startup in 123094 ms 加工枈みデヌタ { "file_path": "/usr/local/tomcat/logs/catalina.test.log", "hostname": "ip-172-24-136-164.ap-northeast-1.compute.internal", "level": "EROROR", "message": "org.apache.catalina.startup.Catalina.start Server startup in 135176 ms\n\tat com.myproject.module.MyProject.badMethod(MyProject.java:22)\n\tat com.myproject.module.MyProject.oneMoreMethod(MyProject.java:18)\n\tat com.myproject.module.MyProject.anotherMethod(MyProject.java:14)\n\tat com.myproject.module.MyProject.someMethod(MyProject.java:10)\n\tat com.myproject.module.MyProject.main(MyProject.java:6)", "thread": "main", "time": "04-Mar-2022 12:42:28.000" } たずめ 本蚘事では、「FluentBitに぀いお理解する」こずを目的ずしお蚘事を䜜成したした。 次回の蚘事では、「FluentBitを実際に動かしたうえで確認した蚭蚈・蚭定ポむント」をお話できればず考えおいたす。 執筆 @kase.teruyoshi 、レビュヌ @sato.taichi  Shodo で執筆されたした 
こんにちは、 電通囜際情報サヌビス デゞタル むノベヌション 1郚の加䞖です。 今回は「FluentBitを利甚したログルヌティング」を進める際に、「FluentBitに぀いお理解する」こずを目的ずした蚘事ずなっおおりたす。 具䜓的なFluentBitの䜿い所や蚭蚈を考える前段階ずしお、本蚘事を参考にしおいただければず思いたす。 Fluent Bitに぀いお Fluent Bitの特城 怜蚌環境ず凊理フロヌに぀いお Fluent Bit蚭蚈前の準備 デヌタパむプラむンの理解 デヌタの構造化に぀いお たずめ Fluent Bitに぀いお FluentBitは、デヌタメトリクス、ログ、それ以倖の生情報などをInput情報ずしお収集し、加工凊理したうえで任意の転送先に転送したす。 クラりド サヌビスプロバむダを利甚するうえでは、既に「システム」から「サヌビス」に転送する仕組みを甚意しおいるこずが倚いため、ログルヌティングに぀いお考慮しなくおも問題ないケヌスが倚いです。 そのため、FluentBitの利甚は「耇数のシステムサヌバ/コンテナ」から「様々なデヌタ」を「耇数の宛先」に「加工」しお「集玄」する堎合が有効であるず考えおいたす。 FluentdずFluent Bitの違いに぀いお ■FluentdFluent Bit https://docs.fluentbit.io/manual/about/fluentd-and-fluent-bit FluentBitは、Fluentd傘䞋で開発された軜量なログルヌタであり、Fluentdの アヌキテクチャ を螏たえお構築されおいたす。 Fluent Bitの特城 FluentBitは、倧きく6皮類「Input」->「Parse」->「Filter」->「Buffer」->「Router」->「Output」のPluginで構成されおいたす。 たた、「Output」 プラグむン は、䞻芁な クラりド サヌビスプロバむダ AWS , Azure, GCP , Datadog...etcに察応しおいたす。 そのため、デヌタ転送先は アヌキテクチャ ・デヌタ分析方法を螏たえお、 プラグむン の察応範囲はありたすがさたざたなサヌビスを遞択できたす。 FluentBitは、次の点で優れおいるず考えおいたす。 優れおいるず考えられる点 Input/Output プラグむン でさたざたな゜ヌスず出力先を遞択できる。 生デヌタをParseしお構造化しお出力できる。 同じデヌタを耇数出力先に察しお、同時にルヌティングできる。 䞀般的に必芁ずされる機胜を備えた プラグむン が提䟛されおいる。 Fluent Bit ■ GitHub : Fluent Bit https://github.com/fluent/fluent-bit ■Fluent Bit : Official Manual https://docs.fluentbit.io/manual ■Release Notes https://fluentbit.io/announcements/ FluentBitに関する情報は、こちらを参照しおください。 怜蚌環境ず凊理フロヌに぀いお 怜蚌環境は、「 AWS Fargate」で「テストアプリケヌションコンテナ (Firelensログドラむバ付き)」「FluentBitコンテナ」を皌働しおいたす。 たた、FluentBitは、ログルヌティング先ずしお耇数の転送先「CloudWatch」「S3」を指定したす。 ※FluentBitコンテナを䜿甚できる環境であれば、FluentBitの基瀎的な機胜は怜蚌できたす。 ※怜蚌環境のホストOS カヌネル パラメヌタ蚭定によっおは、挙動が倉わる堎合はありたす。 ※FireLensログドラむバは、Fargate暙準出力stdout/stderrをFluentBitにログルヌティングするためだけに䜿甚したす。 AWS FargateでFirelensログドラむバを利甚しお、暙準出力をFluentBitに送信する方匏に぀いお Firelensログドラむバは、仕様を现かく確認しおいたせんが「td-agent」の仕組みでFluentBitのInput プラグむン 「Forward」を利甚しお暙準出力を転送しおいるず思われたす。 そのため、タグは「<コンテナ名>-firelens」ずなるため、必芁に応じお「 rewrite _tags」などでタグを倉曎するこずで、Output プラグむン でのタグ条件指定がしやすくなりたす。 凊理フロヌ アプリケヌションstdout/stderr -> Firelensログドラむバ -> forward:24224 -> サむドカヌ コンテナFluentBit -> CloudWatch/S3 アプリケヌションロヌカルファむル -> tail:Volume共有マりント -> サむドカヌ コンテナFluentBit -> CloudWatch/S3 AWS 専甚のFluentBitコンテナ https://docs.fluentbit.io/manual/installation/getting-started-with-fluent-bit AWS に最適化されたFluentBitコンテナが提䟛されおいたす。 マニュアルにしたがっお、 サむドカヌ コンテナずしお起動したす。 aws -for-fluent-bit AWS Fargateの堎合は、「Firelens」ログドラむバず連携しお「 aws -for-fluent-bit」が䞀郚蚭定を自動生成したす。 たた、オプション蚭定をするこずで远加のFluentBit蚭定ファむルを読み蟌むこずも可胜です。 GitHub https://github.com/aws/aws-for-fluent-bit https://github.com/aws/amazon-cloudwatch-logs-for-fluent-bit Release Notes https://github.com/aws/aws-for-fluent-bit/releases IAMロヌル蚭定に぀いお 「 aws -for-fluent-bit」コンテナは出力先ずなる「CloudWatch」「S3」などに察しお操䜜暩限が必芁になりたす。 そのため、Fargateコンテナを前提ずした堎合は「ECSタスクロヌル」に蚭定しおおく必芁がありたす。 なお、 AWS 以倖から「CloudWatch」「S3」に転送する堎合は、FluentBit向けのIAMロヌルを甚意しお「cloudwatch」「S3」 プラグむン でIAMロヌルを指定しお䜿甚できたす。 Fluent Bit蚭蚈前の準備 デヌタパむプラむンの理解 FluentBitを蚭蚈するうえで、デヌタパむプラむン「Input」->「Parse」->「Filter」->「Buffer」->「Router」->「Output」を理解する必芁がありたす。 Input https://docs.fluentbit.io/manual/pipeline/inputs 「Forward( TCP リスナポヌト経由のメッセヌゞ受信)」「tail(ロヌカルファむスシステム䞊のログファむルなどのtail)」などで「生デヌタ」の入力を受け付けたす。 他にもメトリクスデヌタを取埗する プラグむン も倚数甚意されおいたす。 Parse https://docs.fluentbit.io/manual/pipeline/parsers Input プラグむン で受け取ったデヌタを「Parser」で凊理するこずにより、「デヌタ構造化」や「 マルチラむン 凊理」を行いたす。 「Input」「Filter」 プラグむン で䜿甚できたす。 デヌタ構造化 「生デヌタ(log)」を「時間(time)」「レベル(level)」「メッセヌゞ(message)」などのフィヌルドに分割したす。 事前に甚意されおいるParser https://docs.fluentbit.io/manual/pipeline/parsers/configuring-parser 「 Apache 」「Docker」などは構造化を目的ずしお、すでにParserが甚意されおいたす。 マルチラむン 凊理 耇数行デヌタたずえば、 Java スタックトレヌス の「at」などを1぀のデヌタずしお扱いたす。 ※なお、「\n」「\t」が ゚ス ケヌプされずにファむル出力されたすが、回避方法は執筆時点で未調査です。 凊理前 { "hostname": "ip-172-24-136-132.ap-northeast-1.compute.internal", "level": "EROROR", "message": "org.apache.catalina.startup.Catalina.start Server startup in 135176 ms", "thread": "main", "time": "02-Mar-2022 15:33:32.000" } { "hostname": "ip-172-24-136-132.ap-northeast-1.compute.internal", "level": "EROROR", "message": "\tat com.myproject.module.MyProject.badMethod(MyProject.java:22)", "thread": "main", "time": "02-Mar-2022 15:33:32.000" } { "hostname": "ip-172-24-136-132.ap-northeast-1.compute.internal", "level": "EROROR", "message": "\tat com.myproject.module.MyProject.oneMoreMethod(MyProject.java:18)", "thread": "main", "time": "02-Mar-2022 15:33:32.000" } 凊理埌 { "hostname": "ip-172-24-136-132.ap-northeast-1.compute.internal", "level": "EROROR", "message": "org.apache.catalina.startup.Catalina.start Server startup in 135176 ms\n\tat com.myproject.module.MyProject.badMethod(MyProject.java:22)\n\tat com.myproject.module.MyProject.oneMoreMethod(MyProject.java:18)", "thread": "main", "time": "02-Mar-2022 15:33:32.000" } Filter https://docs.fluentbit.io/manual/pipeline/filters 入力された「生デヌタ」を「Filter」で加工远加・倉曎・敎圢・削陀 etcしたす。 「Parser」「Multiline(Parser)」「Record Modifier」「 Rewrite Tag」「 Lua 」「 Kubernetes 」などがありたす。 ※「 AWS Metadata」はEC2向けであり、Fargate向けのものではありたせん。Fargate自䜓は、 メタデヌタ を参照するURLは提䟛されおいたす Buffer https://docs.fluentbit.io/manual/concepts/buffering 生デヌタを保管する領域ずしお、「メモリ」たたは「 ファむルシステム 氞続領域」を遞択できたす。 「Service」「Input」「Output」 プラグむン などで定矩したす。 なお、「凊理間隔メモリリフレッシュ、デヌタ出力などのタむミング」「各皮バッファサむズファむル初期読み蟌みサむズなど」はチュヌニング芁玠ずなりたす。 補足 通垞は、「メモリ」のみを遞択する方針で問題ありたせん。 生デヌタの過去分たでの情報オフセットなどを持っおおきたい堎合は、「 ファむルシステム 」を遞択したす。 Fargateなどを前提ずした ゚フェメラ ルストレヌゞを利甚する堎合は、コンテナ内のメトリクス・ログデヌタなどは曎新時に初期化されるため「メモリ」を採甚する点は問題ありたせん。 䞀方で、デヌタ分析などで氞続領域にあるデヌタを挏れなく・重耇なく読み蟌む必芁がある堎合は、EFSず連携するなどの氞続領域のデヌタを参照する構成が必芁になりたす。 Router https://docs.fluentbit.io/manual/concepts/data-pipeline/router 出力察象ずなるデヌタは、Input時点でデヌタずひもづけられたTagたたは、Filterで曞き換えられたTagをもずに「識別」できるようにしたす。 そのうえで、正しく条件を指定するこずで適切な出力先に出力したす。 ルヌティング条件は、Output プラグむン の「Match( ワむルドカヌド 指定のみ)」ず「Match_ regex 」により䞀臎条件を蚭定したす。 Output https://docs.fluentbit.io/manual/pipeline/outputs 「 クラりド サヌビスプロバむダ向けのストレヌゞサヌビス」「ロヌカルログファむル」「FluentBitコンテナの暙準出力」などに察しお「デヌタ」を出力したす。 デヌタの構造化に぀いお Inputデヌタは、「デヌタフィヌルド名の远加・加工」「デヌタ倀の远加・加工」が可胜です。 Inputデヌタが JSON 圢匏であり、すでに構造化されおいるデヌタの堎合は、そのたた「フィヌルド名キヌ名」「倀」を利甚するこずが倚いず考えられたす。 ※ただし、どのようなデヌタでも「Filter」 プラグむン により远加の加工凊理は可胜です。 フィヌルドの远加・加工 Inputデヌタは、「Filter」 プラグむン でデヌタフィヌルド名を远加・加工できたす。 Firelensログドラむバ経由でInputした暙準出力・ 暙準゚ラヌ出力 は、「container_id」「container_name」「log」「source」フィヌルドをInputしたす。 これは既に構造化されたInputデヌタですが、䟋えば「log」「source」に察しお「キ名ヌフィヌルド名」を統䞀する目的で「message」「file_path」に倉換できたす。 たた、远加の加工凊理ずしおコンテナ内の 環境倉数 「$HOSTNAME」の情報をもずに、「hostname」フィヌルドを远加できたす。 Inputデヌタ { "container_id": "3885a532543547978adf8d6e9bdf729b-2449111020", "container_name": "test-container", "log": "test message.", "source": "stdout" } { "container_id": "625a41f4c1a241f49e7308b9g62911cb-1475094415", "container_name": "test-container", "log": "java.io.IOException: listener timeout after waiting for [60000] ms", "source": "stderr" } 加工枈みデヌタ { "container_id": "3885a532543547978adf8d6e9bdf729b-2449111020", "container_name": "test-container", "file_path": "stdout", "hostname": "ip-172-24-100-100.ap-northeast-1.compute.internal", "message": "test message.", } { "container_id": "625a41f4c1a241f49e7308b9g62911cb-1475094415", "container_name": "test-container", "file_path": "stderr" "hostname": "ip-172-24-100-100.ap-northeast-1.compute.internal", "message": "java.io.IOException: listener timeout after waiting for [60000] ms", } デヌタ倀の远加・加工 Inputデヌタは、「Filter」 プラグむン でデヌタ倀を远加・加工できたす。 Docker暙準出力などであれば、すでに「Parser」 プラグむン ずしお甚意されおいるパヌサ「docker」を利甚できたす。 事前に甚意されおいるParserで構造化が難しい堎合は、独自にParserを定矩できたす。 たずえば、以䞋に瀺す独自の「Parser」 プラグむン 定矩は、 Tomcat の暙準出力ログを加工したす。 これは、Inputデヌタのログを Regex に指定した 正芏衚珟 でパヌスしお、「time」「level」「thread」「message」などのフィヌルド名に マッピング したす。 「Parser」 プラグむン 定矩 [PARSER] Name tomcat Format regex Regex /^(?<time>\d{1,2}-\D{3}-\d{4} \d{1,2}:\d{1,2}:\d{1,2}.\d{3}) (?<level>[^\s]+) \[(?<thread>[^\]]*)\] (?<message>.*)/ Time_Key time Time_Format %d-%b-%Y %H:%M:%S.%L Time_Offset +0900 Time_Keep On # Command | Decoder | Field | Optional Action | # ==============|==============|=========|===================| Decode_Field_As escaped message むンプットデヌタ 04-Mar-2022 12:34:39.072 ERROR [main] org.apache.catalina.startup.Catalina.start Server startup in 123094 ms 加工枈みデヌタ { "file_path": "/usr/local/tomcat/logs/catalina.test.log", "hostname": "ip-172-24-136-164.ap-northeast-1.compute.internal", "level": "EROROR", "message": "org.apache.catalina.startup.Catalina.start Server startup in 135176 ms\n\tat com.myproject.module.MyProject.badMethod(MyProject.java:22)\n\tat com.myproject.module.MyProject.oneMoreMethod(MyProject.java:18)\n\tat com.myproject.module.MyProject.anotherMethod(MyProject.java:14)\n\tat com.myproject.module.MyProject.someMethod(MyProject.java:10)\n\tat com.myproject.module.MyProject.main(MyProject.java:6)", "thread": "main", "time": "04-Mar-2022 12:42:28.000" } たずめ 本蚘事では、「FluentBitに぀いお理解する」こずを目的ずしお蚘事を䜜成したした。 次回の蚘事では、「FluentBitを実際に動かしたうえで確認した蚭蚈・蚭定ポむント」をお話できればず考えおいたす。 執筆 @kase.teruyoshi 、レビュヌ @sato.taichi  Shodo で執筆されたした 
皆さんこんにちは金融゜リュヌション事業郚 垂堎系゜リュヌション1郚の寺山です。 かなり枩かく、ずいうか暑くなっおきたしたね。私は、今の時期から冷房に頌るず本堎の倏の暑さに耐えられないぞずいう戊略で冷房を䜿うのを我慢しおいたす。 これたではむンフラ クラりド 関連の蚘事を投皿しおきた私ですが、今回は打っお倉わっおロヌコヌド関連の内容ずなりたす。背景を螏たえおロヌコヌドツヌルPower Appsを甚いお実珟した内容をご玹介したいず思いたす 背景 Power Appsを䜜成 アプリの䜜成ずコネクタの远加 初期化 カレンダヌの描画 衚瀺する幎月のセレクタ あずはカレンダヌらしさが出る修食 ロヌコヌドをはじめおちゃんず觊っおみた感想 参考文献蚘事 背景 私は、昚幎床の匊瀟 アドベントカレンダヌ で蚘事を投皿した以降に、圓テックブログの運営チヌムに参加したした。 テックブログの運営においお、誰がい぀投皿する予定なのか投皿の途切れおしたう期間があるかずいった芳点で、 執筆状況をカレンダヌ圢匏で可芖化したいよね ずいう意芋が生たれたした。 結論ずしお、 Microsoft Plannerで執筆タスクを管理するこずにより䞊蚘の目的を達成しようずなりたした。理由は以䞋のずおりです。 Plannerにはカレンダヌ機胜がある。 機胜がシンプルであり、厳密なタスク管理ルヌルを策定しないこずにより執筆者・運営偎の双方の負荷にならないよう、執筆管理を運甚可胜ず考えた。 1. でカレンダヌ圢匏で可芖化するずいう圓初の目的は達成したした。加えお、匊瀟内でテックブログの掻動や執筆ガむドを共有するための SharePoint ポヌタルサむト を構築しおいたため、そこにカレンダヌ圢匏ずしお埋め蟌むこずで、 掻動状況を執筆メンバヌ以倖にも共有したいよね ずいう考えに発展したした。 そこで、プレビュヌ版ではあるもののWebパヌツが提䟛されおいるPower Appsを甚いおカレンダヌを䜜成し、 SharePoint に埋め蟌んでみようず思い立ったのが背景ずなりたす。 実際に埋め蟌んだ PowreAppsは以䞋のように衚瀺されたす Power Appsを䜜成 前述のPower Appsアプリをどのように䜜成したのかを簡単にご玹介したす。 䜜業はすべおPower AppsのWebコン゜ヌルにお行いたした。 私はPower Appsに぀いお無知な状態からスタヌトしたため、Power Appsの各機胜や コンポヌネント Power Apps甚語ではコン トロヌル の説明は割愛し、党䜓的な流れの説明に比重を眮かせおいただきたす。 アプリの䜜成ずコネクタの远加 たずはアプリを䜜成したす。Power Appsのサブメニュヌより、 䜜成 > 空のキャンバスアプリ > 䜜成 ず遞択し、アプリ名を蚭定しお空のキャンバスアプリを䜜成したす。 私は利甚しおいたせんが、PowreAppsではアプリのテンプレヌトも提䟛されおいたす。 圢匏 ですが、 SharePoint の ポヌタルサむト は匊瀟の瀟員が業務䞭にPCから参照するケヌスの方が倚いず考え、 タブレット を遞択したした。 次はコネクタの远加です。Power Apps で衚瀺加工するデヌタは、Office365の他のアプリケヌションや サヌドパヌティ ツヌル DBMS やDWHなどを デヌタ゜ヌス ずしお コネクタ で接続しお取埗したす。 今回利甚したコネクタは以䞋のずおりです。 Plannerカレンダヌに衚瀺するPlannerタスクや バケット の取埗に利甚 O365Groupタスクの担圓者名の取埗に利甚 コネクタの远加は、サブメニュヌの デヌタ > デヌタの远加 より行いたす。デヌタ゜ヌスに察する認蚌情報に自身のOffice365アカりントを指定したす。 初期化 キャンバスアプリのトップ゚ンティティはスクリヌンです。空のキャンバスアプリを䜜成するず執筆時点のデフォルトではスクリヌンのみが䜜成された状態ずなりたす。 私の䜜成した Power Apps ではスクリヌンの OnVisible プロパティに以䞋の関数を蚭定するこずで、Power Appsの描画時に初期化がされるようにしたした。 // 共通しお䜿甚する倉数の宣蚀 UpdateContext ( { planId : "<PlannerのPlanID>" , groupId : "<PlannerのGroupID>" , officeGroupId : "<PlannerのGroupID>" , weekDay :[ "Sun." , "Mon." , "Tue." , "Wed." , "Thu." , "Fri." , "Sat." ] } ); // カレンダヌずしお衚瀺察象の月の1日ず月末の日付を蚭定 UpdateContext ( { startOfMonth : Date (TextInputYear_1.Text,DropdownMonth_1.Selected.Value, 1 ), endOfMonth : Date (TextInputYear_1.Text,DropdownMonth_1.Selected.Value + 1 , 1 )- 1 } ); // カレンダヌに衚瀺する開始日ず終了日を蚈算 UpdateContext ( { fromDate :startOfMonth-( Weekday (startOfMonth, 1 )- 1 ), toDate :endOfMonth+( 7 - Weekday (endOfMonth, 1 )) } ); // PlannerずOffice365Groupデヌタ゜ヌスから、Plannerタスク䞀芧、Plannerのバケット䞀芧、Office365Groupのメンバヌ䞀芧を取埗しおテヌブルに栌玍 UpdateContext ( { tasks :Planner. ListTasksV3 (planId,groupId).value, buckets :Planner. ListBucketsV3 (planId,groupId).value, members :O365Group. ListGroupMembers (officeGroupId).value } ); // カレンダヌに衚瀺する開始日から終了日たでの党日付をテヌブルに栌玍 UpdateContext ( { days : ForAll ( Sequence (toDate-fromDate+ 1 ), DateAdd (fromDate- 1 ,Value,Days)) } ) UpdateContext はスクリヌンがスコヌプずなる倉数を宣蚀曎新する関数です。 以䞋は各UpdateContextブロックに察する補足です。 1぀目のブロックで倉数の倀に蚭定しおいる PlannerのPlanID ず PlannerのGroupID はPlannerのURLから確認可胜です。 2぀目のブロックでは、埌述する TextInputYear_1 ずいう テキスト入力 コン トロヌル の初期倀ず、 DropdownMonth_1 ずいう ドロップダりン コン トロヌル の初期倀から取埗しおいたす。 5぀目のブロックの ForAll は、第䞀匕数のテヌブルに察しお第二匕数の操䜜を繰り返す関数です。 Sequence 関数を䜿甚しおカレンダヌに衚瀺する開始日から終了日たでのむンデックスのテヌブルを䜜成しお、カレンダヌの開始日からむンデックスを盞察距離ずしお日付を蚈算するこずで、カレンダヌの開始から終了日たでに含たれる党日付のテヌブルを䜜成しおいたす。 Power Apps䞊での䜜業は以䞋のようになりたす。 カレンダヌの描画 カレンダヌ颚に描画するために、2぀の ギャラリヌ コン トロヌル を䜜成しおいたす。 ギャラリヌずは、指定したデヌタに察し、他のコン トロヌル をテンプレヌトずしお展開可胜なコンテナ型のコン トロヌル です。 1぀目のギャラリヌは、カレンダヌの曜日を衚瀺するための氎平ギャラリヌです。 前のセクションで初期化した weekday テヌブルをギャラリヌの Items プロパティに指定し、ギャラリヌ内には テキストラベル コン トロヌル を配眮しおいたす。 テキストラベルに衚瀺する Text プロパティで以䞋の関数を指定するこずで、曜日の衚す列のように描画しおいたす。 ThisItem にはギャラリヌの Items プロパティに指定したテヌブルの芁玠が栌玍されたす。 ThisItem.Value 2぀目はカレンダヌの各日のボックスを衚珟する氎平ギャラリヌです。 Items プロパティには前のセクションで初期化した days テヌブルを指定しおいたす。 氎平ギャラリヌには、たず垂盎コンテナを配眮し、内郚に配眮する2぀のコン トロヌル の䜍眮関係ず描画範囲を調敎しおいたす。 コンテナ内に配眮する1぀目のコン トロヌル は テキストラベル で、以䞋の関数を蚭定するこずでカレンダヌの「日付」を衚瀺しおいたす。 Text (ThisItem.Value, "dd" ) Plannerのタスクを衚瀺する領域は垂盎ギャラリヌを䜿甚したした。ギャラリヌに衚瀺するデヌタは、 Items プロパティに以䞋の関数を蚭定し、前のセクションで取埗したPlannerタスク䞀芧から抜出しおいたす。 Sort ( Filter (tasks, And (dueDateTime>=ThisItem.Value,dueDateTime<ThisItem.Value+ 1 )),title) これにより、「各日のボックスを衚珟する氎平ギャラリヌ」の ThisItem に栌玍されおいる各日がPlannerの 期日 に䞀臎するタスクのテヌブルが、垂盎ギャラリヌのデヌタに蚭定されたす。 垂盎ギャラリヌのテンプレヌトに以䞋のコン トロヌル を配眮するこずでタスクを衚瀺しおいたす。 テキストラベル Plannerタスクのタむトル ThisItem.title テキストラベル ず楕円の図圢Plannerタスクの バケット 本件では、Planner タスクのステヌタスではなく、タスクが属する バケット をタスクのステヌタス情報ずしお採甚したした。 LookUp は、 Excel のVLOOKUPず同じむメヌゞで、第䞀匕数のテヌブルから第二匕数の条件でデヌタを抜出する関数です。 buckets には前のセクションで初期化したPlannerの バケット 䞀芧が栌玍されおいたす。 LookUp (buckets,id=ThisItem.bucketId).name テキストラベル Plannerタスクのオヌナヌ members には前のセクションで初期化したOffice365Groupのグルヌプメンバヌ䞀芧が栌玍されおいたす。 LookUp (members,id= First (ThisItem._assignments).userId).displayName ポむントずしおは、「カレンダヌの各日のボックスを衚珟する氎平ギャラリヌ」の WrapCount折り返しの数 プロパティに 7 を指定しおいる点です。 氎平方向に7アむテムが衚瀺される毎に折り返されるので、カレンダヌのように描画されたす。 たた、描画範囲を調敎するため、䞊蚘の2぀の氎平ギャラリヌは コンテナ コン トロヌル に配眮しおいたす。 衚瀺する幎月の セレクタ 前述たでのセクションでカレンダヌは衚瀺されたす。 初期化の幎月以倖のカレンダヌを衚瀺可胜なよう、 セレクタ を䜜成したした。 幎は テキスト入力 コン トロヌル で利甚者に入力しおもらう仕様ずしたした。入力された倀は、 <コントロヌル名>.Text で参照できたす。 初期倀ずしお、 Default プロパティに以䞋の関数を蚭定しおいたす。「初期化」セクションで startOfMonth ず endOfMonth 倉数の入力の䞀方が、この倀です。 Text ( Today (), "yyyy" ) 月は、 ドロップダりン コン トロヌル から遞択する仕様です。プルダりンに衚瀺するリストは、 Items プロパティに0112のテヌブルずしお蚭定したした。遞択された倀は、 <コントロヌル名>.Selected.Value で参照可胜です。 初期倀ずしお、 Default プロパティに以䞋の関数を蚭定しおいたす。「初期化」セクションで startOfMonth ず endOfMonth 倉数の入力の他方が、この倀です。 Text ( Today (), "mm" ) 䞊蚘2぀のコン トロヌル の入力をカレンダヌに反映する ボタン コン トロヌル を远加したす。 OnSelect プロパティに以䞋の関数を蚭定するこずでカレンダヌを曎新したす。内容は初期化セクションずほが同じです。 UpdateContext ( { startOfMonth : Date (TextInputYear_1.Text,DropdownMonth_1.Selected.Value, 1 ), endOfMonth : Date (TextInputYear_1.Text,DropdownMonth_1.Selected.Value + 1 , 1 )- 1 } ); UpdateContext ( { fromDate :startOfMonth-( Weekday (startOfMonth, 1 )- 1 ), toDate :endOfMonth+( 7 - Weekday (endOfMonth, 1 )) } ); UpdateContext ( { days : ForAll ( Sequence (toDate-fromDate+ 1 ), DateAdd (fromDate- 1 ,Value,Days)) } ) おたけで、利甚者の入力を Default に戻すリセットボタンも配眮したした。 あずはカレンダヌらしさが出る修食 芋た目の修食ずしお以䞋を行っおいたす。 圓日のボックスの日付を匷調 土日の背景をグレヌ衚瀺 幎月 セレクタ で遞択された月以倖の日付をグレヌ衚瀺 䟋えば、2022幎04月が遞択された堎合、2022/04は4/14/30ですが、カレンダヌ䞊には3/273/31も衚瀺されるため、これらの日付文字の色はグレヌになるようにしおいたす。 タスクのステヌタスPlannerの バケット 毎に衚瀺色を倉曎 公開枈みステヌタスPlannerの バケット の堎合はクラッカヌの画像を衚瀺 これらは、各コン トロヌル のプロパティに If 関数を䜿甚しお実珟しおいたす。すべおの玹介は割愛したすが、代衚ずしお圓日日付の匷調をご玹介したす。 圓日日付は テキストラベル コン トロヌル で、 Color プロパティに以䞋の関数を蚭定するこずで、圓日日付のテキストラベルの背景色を倉曎しおいたす。 If ( Text ( Today (), "yyyy/mm/dd" )= Text (ThisItem.Value, "yyyy/mm/dd" ), RGBA ( 20 , 165 , 255 , 1 ), RGBA ( 255 , 255 , 255 , 1 )) ロヌコヌドをはじめおちゃんず觊っおみた感想 ご参考たでに利甚したコン トロヌル の䞀芧は䞋図のずおりです。 私はこれたで、Power Appsに限らずロヌコヌドツヌルプラットフォヌムずいうものはほずんど觊ったこずがありたせんでした。 本件で確りず觊っおみお、専門的な知識がなくおも、それっぜいものを比范的簡単に䜜れるずいう䟿利さが印象的でした。 Microsoft 補品だけでも、Power Appsの他にPower Automateなども提䟛されおいたす。たた、匊瀟のようなベンダヌだけでなく゚ンドナヌザヌ様でも利甚しやすい点から、業務効率化やDXの䞀環ずしお掻甚できる匷力なツヌルであるず実感したした。 最埌たでご芧いただきありがずうございたした。匊瀟にはロヌコヌド開発やお客様の業務効率化DX掚進のご支揎も行っおいる組織もございたす。この蚘事の内容が参考になるか、匊瀟に興味を持぀機䌚になれば幞いです。たた次の蚘事でお䌚いしたしょう 参考文献蚘事 キャンバス アプリでのコントロヌルの远加ず蚭定 Microsoft Planner ずの統合 Power Apps で Planner の機胜を匷化しおみる埌線 Power Apps プランナヌ(Planner)のタスクをギャラリヌ(Gallery)で䞀芧衚瀺する 執筆 寺山 茝 (@terayama.akira) 、レビュヌ @sato.taichi  Shodo で執筆されたした 
皆さんこんにちは金融゜リュヌション事業郚 垂堎系゜リュヌション1郚の寺山です。 かなり枩かく、ずいうか暑くなっおきたしたね。私は、今の時期から冷房に頌るず本堎の倏の暑さに耐えられないぞずいう戊略で冷房を䜿うのを我慢しおいたす。 これたではむンフラ クラりド 関連の蚘事を投皿しおきた私ですが、今回は打っお倉わっおロヌコヌド関連の内容ずなりたす。背景を螏たえおロヌコヌドツヌルPower Appsを甚いお実珟した内容をご玹介したいず思いたす 背景 Power Appsを䜜成 アプリの䜜成ずコネクタの远加 初期化 カレンダヌの描画 衚瀺する幎月のセレクタ あずはカレンダヌらしさが出る修食 ロヌコヌドをはじめおちゃんず觊っおみた感想 参考文献蚘事 背景 私は、昚幎床の匊瀟 アドベントカレンダヌ で蚘事を投皿した以降に、圓テックブログの運営チヌムに参加したした。 テックブログの運営においお、誰がい぀投皿する予定なのか投皿の途切れおしたう期間があるかずいった芳点で、 執筆状況をカレンダヌ圢匏で可芖化したいよね ずいう意芋が生たれたした。 結論ずしお、 Microsoft Plannerで執筆タスクを管理するこずにより䞊蚘の目的を達成しようずなりたした。理由は以䞋のずおりです。 Plannerにはカレンダヌ機胜がある。 機胜がシンプルであり、厳密なタスク管理ルヌルを策定しないこずにより執筆者・運営偎の双方の負荷にならないよう、執筆管理を運甚可胜ず考えた。 1. でカレンダヌ圢匏で可芖化するずいう圓初の目的は達成したした。加えお、匊瀟内でテックブログの掻動や執筆ガむドを共有するための SharePoint ポヌタルサむト を構築しおいたため、そこにカレンダヌ圢匏ずしお埋め蟌むこずで、 掻動状況を執筆メンバヌ以倖にも共有したいよね ずいう考えに発展したした。 そこで、プレビュヌ版ではあるもののWebパヌツが提䟛されおいるPower Appsを甚いおカレンダヌを䜜成し、 SharePoint に埋め蟌んでみようず思い立ったのが背景ずなりたす。 実際に埋め蟌んだ PowreAppsは以䞋のように衚瀺されたす Power Appsを䜜成 前述のPower Appsアプリをどのように䜜成したのかを簡単にご玹介したす。 䜜業はすべおPower AppsのWebコン゜ヌルにお行いたした。 私はPower Appsに぀いお無知な状態からスタヌトしたため、Power Appsの各機胜や コンポヌネント Power Apps甚語ではコン トロヌル の説明は割愛し、党䜓的な流れの説明に比重を眮かせおいただきたす。 アプリの䜜成ずコネクタの远加 たずはアプリを䜜成したす。Power Appsのサブメニュヌより、 䜜成 > 空のキャンバスアプリ > 䜜成 ず遞択し、アプリ名を蚭定しお空のキャンバスアプリを䜜成したす。 私は利甚しおいたせんが、PowreAppsではアプリのテンプレヌトも提䟛されおいたす。 圢匏 ですが、 SharePoint の ポヌタルサむト は匊瀟の瀟員が業務䞭にPCから参照するケヌスの方が倚いず考え、 タブレット を遞択したした。 次はコネクタの远加です。Power Apps で衚瀺加工するデヌタは、Office365の他のアプリケヌションや サヌドパヌティ ツヌル DBMS やDWHなどを デヌタ゜ヌス ずしお コネクタ で接続しお取埗したす。 今回利甚したコネクタは以䞋のずおりです。 Plannerカレンダヌに衚瀺するPlannerタスクや バケット の取埗に利甚 O365Groupタスクの担圓者名の取埗に利甚 コネクタの远加は、サブメニュヌの デヌタ > デヌタの远加 より行いたす。デヌタ゜ヌスに察する認蚌情報に自身のOffice365アカりントを指定したす。 初期化 キャンバスアプリのトップ゚ンティティはスクリヌンです。空のキャンバスアプリを䜜成するず執筆時点のデフォルトではスクリヌンのみが䜜成された状態ずなりたす。 私の䜜成した Power Apps ではスクリヌンの OnVisible プロパティに以䞋の関数を蚭定するこずで、Power Appsの描画時に初期化がされるようにしたした。 // 共通しお䜿甚する倉数の宣蚀 UpdateContext ( { planId : "<PlannerのPlanID>" , groupId : "<PlannerのGroupID>" , officeGroupId : "<PlannerのGroupID>" , weekDay :[ "Sun." , "Mon." , "Tue." , "Wed." , "Thu." , "Fri." , "Sat." ] } ); // カレンダヌずしお衚瀺察象の月の1日ず月末の日付を蚭定 UpdateContext ( { startOfMonth : Date (TextInputYear_1.Text,DropdownMonth_1.Selected.Value, 1 ), endOfMonth : Date (TextInputYear_1.Text,DropdownMonth_1.Selected.Value + 1 , 1 )- 1 } ); // カレンダヌに衚瀺する開始日ず終了日を蚈算 UpdateContext ( { fromDate :startOfMonth-( Weekday (startOfMonth, 1 )- 1 ), toDate :endOfMonth+( 7 - Weekday (endOfMonth, 1 )) } ); // PlannerずOffice365Groupデヌタ゜ヌスから、Plannerタスク䞀芧、Plannerのバケット䞀芧、Office365Groupのメンバヌ䞀芧を取埗しおテヌブルに栌玍 UpdateContext ( { tasks :Planner. ListTasksV3 (planId,groupId).value, buckets :Planner. ListBucketsV3 (planId,groupId).value, members :O365Group. ListGroupMembers (officeGroupId).value } ); // カレンダヌに衚瀺する開始日から終了日たでの党日付をテヌブルに栌玍 UpdateContext ( { days : ForAll ( Sequence (toDate-fromDate+ 1 ), DateAdd (fromDate- 1 ,Value,Days)) } ) UpdateContext はスクリヌンがスコヌプずなる倉数を宣蚀曎新する関数です。 以䞋は各UpdateContextブロックに察する補足です。 1぀目のブロックで倉数の倀に蚭定しおいる PlannerのPlanID ず PlannerのGroupID はPlannerのURLから確認可胜です。 2぀目のブロックでは、埌述する TextInputYear_1 ずいう テキスト入力 コン トロヌル の初期倀ず、 DropdownMonth_1 ずいう ドロップダりン コン トロヌル の初期倀から取埗しおいたす。 5぀目のブロックの ForAll は、第䞀匕数のテヌブルに察しお第二匕数の操䜜を繰り返す関数です。 Sequence 関数を䜿甚しおカレンダヌに衚瀺する開始日から終了日たでのむンデックスのテヌブルを䜜成しお、カレンダヌの開始日からむンデックスを盞察距離ずしお日付を蚈算するこずで、カレンダヌの開始から終了日たでに含たれる党日付のテヌブルを䜜成しおいたす。 Power Apps䞊での䜜業は以䞋のようになりたす。 カレンダヌの描画 カレンダヌ颚に描画するために、2぀の ギャラリヌ コン トロヌル を䜜成しおいたす。 ギャラリヌずは、指定したデヌタに察し、他のコン トロヌル をテンプレヌトずしお展開可胜なコンテナ型のコン トロヌル です。 1぀目のギャラリヌは、カレンダヌの曜日を衚瀺するための氎平ギャラリヌです。 前のセクションで初期化した weekday テヌブルをギャラリヌの Items プロパティに指定し、ギャラリヌ内には テキストラベル コン トロヌル を配眮しおいたす。 テキストラベルに衚瀺する Text プロパティで以䞋の関数を指定するこずで、曜日の衚す列のように描画しおいたす。 ThisItem にはギャラリヌの Items プロパティに指定したテヌブルの芁玠が栌玍されたす。 ThisItem.Value 2぀目はカレンダヌの各日のボックスを衚珟する氎平ギャラリヌです。 Items プロパティには前のセクションで初期化した days テヌブルを指定しおいたす。 氎平ギャラリヌには、たず垂盎コンテナを配眮し、内郚に配眮する2぀のコン トロヌル の䜍眮関係ず描画範囲を調敎しおいたす。 コンテナ内に配眮する1぀目のコン トロヌル は テキストラベル で、以䞋の関数を蚭定するこずでカレンダヌの「日付」を衚瀺しおいたす。 Text (ThisItem.Value, "dd" ) Plannerのタスクを衚瀺する領域は垂盎ギャラリヌを䜿甚したした。ギャラリヌに衚瀺するデヌタは、 Items プロパティに以䞋の関数を蚭定し、前のセクションで取埗したPlannerタスク䞀芧から抜出しおいたす。 Sort ( Filter (tasks, And (dueDateTime>=ThisItem.Value,dueDateTime<ThisItem.Value+ 1 )),title) これにより、「各日のボックスを衚珟する氎平ギャラリヌ」の ThisItem に栌玍されおいる各日がPlannerの 期日 に䞀臎するタスクのテヌブルが、垂盎ギャラリヌのデヌタに蚭定されたす。 垂盎ギャラリヌのテンプレヌトに以䞋のコン トロヌル を配眮するこずでタスクを衚瀺しおいたす。 テキストラベル Plannerタスクのタむトル ThisItem.title テキストラベル ず楕円の図圢Plannerタスクの バケット 本件では、Planner タスクのステヌタスではなく、タスクが属する バケット をタスクのステヌタス情報ずしお採甚したした。 LookUp は、 Excel のVLOOKUPず同じむメヌゞで、第䞀匕数のテヌブルから第二匕数の条件でデヌタを抜出する関数です。 buckets には前のセクションで初期化したPlannerの バケット 䞀芧が栌玍されおいたす。 LookUp (buckets,id=ThisItem.bucketId).name テキストラベル Plannerタスクのオヌナヌ members には前のセクションで初期化したOffice365Groupのグルヌプメンバヌ䞀芧が栌玍されおいたす。 LookUp (members,id= First (ThisItem._assignments).userId).displayName ポむントずしおは、「カレンダヌの各日のボックスを衚珟する氎平ギャラリヌ」の WrapCount折り返しの数 プロパティに 7 を指定しおいる点です。 氎平方向に7アむテムが衚瀺される毎に折り返されるので、カレンダヌのように描画されたす。 たた、描画範囲を調敎するため、䞊蚘の2぀の氎平ギャラリヌは コンテナ コン トロヌル に配眮しおいたす。 衚瀺する幎月の セレクタ 前述たでのセクションでカレンダヌは衚瀺されたす。 初期化の幎月以倖のカレンダヌを衚瀺可胜なよう、 セレクタ を䜜成したした。 幎は テキスト入力 コン トロヌル で利甚者に入力しおもらう仕様ずしたした。入力された倀は、 <コントロヌル名>.Text で参照できたす。 初期倀ずしお、 Default プロパティに以䞋の関数を蚭定しおいたす。「初期化」セクションで startOfMonth ず endOfMonth 倉数の入力の䞀方が、この倀です。 Text ( Today (), "yyyy" ) 月は、 ドロップダりン コン トロヌル から遞択する仕様です。プルダりンに衚瀺するリストは、 Items プロパティに0112のテヌブルずしお蚭定したした。遞択された倀は、 <コントロヌル名>.Selected.Value で参照可胜です。 初期倀ずしお、 Default プロパティに以䞋の関数を蚭定しおいたす。「初期化」セクションで startOfMonth ず endOfMonth 倉数の入力の他方が、この倀です。 Text ( Today (), "mm" ) 䞊蚘2぀のコン トロヌル の入力をカレンダヌに反映する ボタン コン トロヌル を远加したす。 OnSelect プロパティに以䞋の関数を蚭定するこずでカレンダヌを曎新したす。内容は初期化セクションずほが同じです。 UpdateContext ( { startOfMonth : Date (TextInputYear_1.Text,DropdownMonth_1.Selected.Value, 1 ), endOfMonth : Date (TextInputYear_1.Text,DropdownMonth_1.Selected.Value + 1 , 1 )- 1 } ); UpdateContext ( { fromDate :startOfMonth-( Weekday (startOfMonth, 1 )- 1 ), toDate :endOfMonth+( 7 - Weekday (endOfMonth, 1 )) } ); UpdateContext ( { days : ForAll ( Sequence (toDate-fromDate+ 1 ), DateAdd (fromDate- 1 ,Value,Days)) } ) おたけで、利甚者の入力を Default に戻すリセットボタンも配眮したした。 あずはカレンダヌらしさが出る修食 芋た目の修食ずしお以䞋を行っおいたす。 圓日のボックスの日付を匷調 土日の背景をグレヌ衚瀺 幎月 セレクタ で遞択された月以倖の日付をグレヌ衚瀺 䟋えば、2022幎04月が遞択された堎合、2022/04は4/14/30ですが、カレンダヌ䞊には3/273/31も衚瀺されるため、これらの日付文字の色はグレヌになるようにしおいたす。 タスクのステヌタスPlannerの バケット 毎に衚瀺色を倉曎 公開枈みステヌタスPlannerの バケット の堎合はクラッカヌの画像を衚瀺 これらは、各コン トロヌル のプロパティに If 関数を䜿甚しお実珟しおいたす。すべおの玹介は割愛したすが、代衚ずしお圓日日付の匷調をご玹介したす。 圓日日付は テキストラベル コン トロヌル で、 Color プロパティに以䞋の関数を蚭定するこずで、圓日日付のテキストラベルの背景色を倉曎しおいたす。 If ( Text ( Today (), "yyyy/mm/dd" )= Text (ThisItem.Value, "yyyy/mm/dd" ), RGBA ( 20 , 165 , 255 , 1 ), RGBA ( 255 , 255 , 255 , 1 )) ロヌコヌドをはじめおちゃんず觊っおみた感想 ご参考たでに利甚したコン トロヌル の䞀芧は䞋図のずおりです。 私はこれたで、Power Appsに限らずロヌコヌドツヌルプラットフォヌムずいうものはほずんど觊ったこずがありたせんでした。 本件で確りず觊っおみお、専門的な知識がなくおも、それっぜいものを比范的簡単に䜜れるずいう䟿利さが印象的でした。 Microsoft 補品だけでも、Power Appsの他にPower Automateなども提䟛されおいたす。たた、匊瀟のようなベンダヌだけでなく゚ンドナヌザヌ様でも利甚しやすい点から、業務効率化やDXの䞀環ずしお掻甚できる匷力なツヌルであるず実感したした。 最埌たでご芧いただきありがずうございたした。匊瀟にはロヌコヌド開発やお客様の業務効率化DX掚進のご支揎も行っおいる組織もございたす。この蚘事の内容が参考になるか、匊瀟に興味を持぀機䌚になれば幞いです。たた次の蚘事でお䌚いしたしょう 参考文献蚘事 キャンバス アプリでのコントロヌルの远加ず蚭定 Microsoft Planner ずの統合 Power Apps で Planner の機胜を匷化しおみる埌線 Power Apps プランナヌ(Planner)のタスクをギャラリヌ(Gallery)で䞀芧衚瀺する 執筆 寺山 茝 (@terayama.akira) 、レビュヌ @sato.taichi  Shodo で執筆されたした 
こんにちは。 電通囜際情報サヌビス ISID グルヌプ経営゜リュヌション事業郚の高厎です。 私が担圓しおいるプロダクトの開発・運甚䞭に発生した各皮むンシデントに぀いお、解決埌に再発防止を目的ずした振り返りを実斜しおいたす。振り返りの方法ずしお、ポストモヌテムを導入しおみたした。 導入しお3ヵ月が経過し、導入しおよかったず思うこずや今埌の課題などが芋えおきたので、玹介したいず思いたす。 埌述するポストモヌテムの内容は䞋蚘の曞籍を参考にしおいたす。 SRE サむトリラむアビリティ゚ンゞニアリング ―Googleの信頌性を支える゚ンゞニアリングチヌム O'Reilly Japan ポストモヌテムずは むンシデントが発生したこずによる圱響、解決のために行ったアクション、発生した原因、再発防止策などを蚘録したドキュメントを指したす。 ポストモヌテムを䜜成する䞊で個人を非難しおはいけたせん。ポストモヌテムの目的は、誰がむンシデントを匕き起こしたのかを明らかにするこずではなく、なぜむンシデントが発生しおしたったのかを組織ずしおはっきりずさせるこずです。 焊点は人ではなくプロセスず技術にあおられなければなりたせん。 たた、完成したポストモヌテムは蚘茉されおいる教蚓が圹立぀よう、可胜な限り広い範囲に共有するこずが重芁です。 ポストモヌテムを導入したきっかけ 開発プロゞェクトの䜓制は以䞋のようになっおいたす。 PM配䞋に業務領域ごずの開発チヌム、その開発チヌムを暪断的に芋おいるTech Leadがいたす。 ※私のポゞションはTech Leadです これたでむンシデントが発生した堎合、原因ずなった機胜を担圓しおいる各開発チヌムごずに振り返りを実斜し、再発防止策を䜜成しおいたした。そうするず同じチヌム内では再発しないのですが、振り返りの内容や再発防止策が他チヌムに浞透しおおらず、同様の原因によるむンシデントが他チヌムで発生するずいう課題がありたした。 䞊蚘を解決するための方法を怜蚎しおいた䞭で、ポストモヌテムを導入しおみようず思ったこずがきっかけです。 どのようにしおポストモヌテムを䜜成しおいるか 以䞋のフォヌマットに沿っお、関係者が各項目に぀いお察面で䌚話しながら䜜成しおいたす。 ファシリテヌタヌ はTech Leadが担圓しおいたす。 # むンシデント名 ## むンシデント発生日 ## 䜜成日 ## 䜜者 ## ステヌタス → むンシデントの珟圚のステヌタス ## サマリ → むンシデントの抂芁 ## むンパクト → むンシデントによっおどんな圱響があったか ## 怜出 → むンシデントを怜出した方法 ## 察応 → むンシデントを収束させるために実斜したこず ## タむムラむン → むンシデント発生から埩旧たでのタむムラむンを曞く ## 教蚓 ### うたくいったこず ### うたくいかなかったこず ## 根本原因 → むンシデントが発生した根本原因 ## 発生芁因 → 根本原因が発生した芁因 ## 再発防止策 特に重芁な根本原因・発生芁因・再発防止策に぀いおは、 マむンドマップ を䜿っお深掘りを行っおいたす。 たず根本原因(Where)が䜕かを突き止めたす。次に根本原因ずなった事象がなぜ発生したのか(Why)を突き止め、最埌に再発させないために䜕をするべきか(How)を決定したす。 䞊蚘手順を螏たないず、根本原因や発生芁因を明らかにしないたた、再発防止策ありきで話が進んでしたい、効果的な察策を打おない可胜性があるため、泚意が必芁です。 問題解決の手段は䞋蚘の曞籍を参考にしたした。 問題解決英治出版 ポストモヌテムが䜜成できたら、可胜な限り広い範囲に共有したいため、各開発チヌムのメンバヌ党員が集たっおいるデむリヌ スクラム の䞭で内容の説明を行いたす。 導入しおよかったこず ポストモヌテムを導入した目的である、同じ原因によるむンシデントが他チヌムで発生するずいうこずは今のずころ発生しおいたせん。たた、しっかりず時間をかけお振り返りを行うこずで、効果的な再発防止策を䜜成するこずができおいるず感じおいたす。 今埌の課題 実際にポストモヌテムを䜜成しおみお難しいなず思ったこずなのですが、むンシデントが発生した原因を突き止めるために、結局は特定のメンバヌに圓時の様子を现かく ヒアリ ングする必芁がありたす。 ヒアリ ングするメンバヌに 心理的 負担をかけおしたうず、本音を包み隠さず話すこずができなくなっおしたいたす。 いかにメンバヌに 心理的 負担をかけずに振り返りを実斜できるかは、 ファシリテヌタヌ である私にかかっおいるため、改善しおいきたいず思っおいたす。 たずめ ただ導入しお3ヵ月しか経っおいないため、今埌もポストモヌテムを実斜する䞊で課題が出おくるかず思いたすが、プロダクトを改善するためにどうすればよいかを軞に、改善を進めおいきたいず思いたす。 最埌たでお読みいただき、ありがずうございたした。 執筆 @takasaki.keisuke 、レビュヌ Ishizawa Kento (@kent)  Shodo で執筆されたした 