TECH PLAY

電通総研

電通総研 の技術ブログ

å…š843ä»¶

こんにちは。Xクロス むノベヌション 本郚 ゜フトりェアデザむンセンタヌ の山䞋です。 入瀟したのが2021幎の10月なのでそろそろ1幎ず半幎くらいが経過したした。 今日は入瀟たでの経緯や、仕事の雰囲気などに぀いおお話出来ればず思いたす。 䌚瀟の雰囲気 自分が受けおいる印象では、ISIDは䌚瀟の雰囲気ずしお意思決定が玠早く意芋が通りやすいずいう印象がありたす。 結果、䌚議の時間がずおも短く倧倉驚いおいたす。 コロナ犍での入瀟だったので、基本的にリモヌトでしか業務に参加しおいないのですが、皆さん意芋をちゃんず蚀っおくれたす。たた自分が提案した意芋に぀いおも真剣に議論しお貰えたす。 やっおいる業務内容 担圓しおいる業務ですが、瀟内の開発に関する改善掻動党般ずいう感じです。 䟋えば、CI/CDの普及掻動であったり、 GitHub のCodespacesなどに぀いおの怜蚌掻動ずいったこずをやっおいたす。 成果の䞀郚はテックブログずしお公開したりしおいたすね。 たた、新しい技術が出おきたらそれをキャッチアップするために詊しおみるずいったこずもやっおいたす。 入瀟の経緯 前職では、家電メヌカヌの研究郚門で゜フトりェア開発の生産性に関する研究、瀟内斜策の実斜などの業務に携わっおいたした。䟋えば、゜フトりェア リポゞトリ のマむニング、CI/CD環境の敎備などです。 前職の業務もやりがいがあるものでした。しかし、䌚瀟芏暡が倧きい䌚瀟ずいうこずもあり段々ずマネゞメントに関する業務が増え、スキルなどもマネゞメント系の胜力を䌞ばしおいくこずが期埅されるようになっおきたした。 もう少し技術に觊れおいる時間を増やせる䌚瀟を探しおいたずころISIDを知人に玹介されお、自分も良さそうず思っお転職を決めたした。 入瀟前に䞍安だったこず、実際 入瀟前に䞍安に感じおいたものは以䞋のような物でした。 技術力の䞍足 業務知識や業界の垞識の䞍足 プラむベヌトの時間の確保 それぞれに぀いお䞍安ず実際どうだったかに぀いお芋おいきたす。 技術力の䞍足 前職では研究職で、ISIDに入瀟するず技術職になりたす。これは䌌おいる面はありたすが違うものであるず自分は思っおいたす。䟋えば、補品開発を最初から最埌たで党郚やり切るずいった経隓は研究職だずなかなか経隓できたせん。 なので、実際の開発で圹に立぀ような知識を自分が持っおいるか䞍安でした。 特に入瀟前から技術をリヌドしおいく立堎ずしお、メンバに技術を教える立堎であるこずを期埅されおいたした。䞊手くやれるのか䞍安を持っおいたした。結論から蚀うず、これは杞憂だったようです。 技術的な偎面に぀いおは、教える堎面では高床な技術の知識が必芁ずいうよりは基本的な知識があれば十分でした。䟋えば蚈算機に関する基本的な知識、 Linux の操䜜に関する䞀通りの知識などです。なので今のずころ自分の技術の胜力が䞍足しおいお困ったずいう堎面には遭遇しおいたせん。 たた、ISIDでは知らない技術がある堎合にはその知識を獲埗するための期間や勉匷する堎が準備される䜓制になっおいたす。知識䞍足で業務に支障が出るずいうこずは発生しなさそうです。 業務知識や業界の垞識の䞍足 前職でSIのような仕事ず党く無関係ずいうこずはなかったのですが、いざ圓事者ずなるず業界の ドメむン 知識が十分であるかずいうずかなり疑問でした。入瀟しお1幎経ちたすが、過去の経隓が生きおいる堎面もありたすが、やはり分からない話もありたす。その堎合、瀟内で質問すれば教えおもらえるので倧倉助かっおいたす。皆さたありがずうございたす。 逆に前職の経隓に匕っ匵られおしたう堎面も倚く、ただただ勉匷するこずは倚いなず感じおいたす。 プラむベヌトの時間の確保 前職では業務時間がやや長くなる傟向にありたした。プラむベヌトの時間に圱響が出るほどではなかったのですが、ISIDに入瀟しおからはプラむベヌトの時間が倧幅に取れるようになりたした。前職ず比范しお䌚議の時間が枛り、効率的な働き方が可胜になったからず自分では分析しおいたす。 たた、前職では8時間ず蚭定されおいた暙準の劎働時間がISIDでは7時間ずなっおおり、玔粋に1時間ほどプラむベヌトの時間を確保しやすくなりたした。 前職ず働き方で倉わった事 業務䞊の目暙は前職で䞀番倉化した点は意思決定が早くなり、䜜業時間の確保が比范的容易になったので 技術的な調査、怜蚌ずいった時間を確保できるようになったのが䞀番の倉化だず考えおいたす。 前職では䌚瀟の芏暡が倧きかったため、利害関係者が倚くなる傟向にありたした。 結果ずしお資料䜜成や䌚議が倚くなり実際の技術に䜿える時間は限られおいたした。 ISIDに入瀟しおからは、利害関係者も少なく意思決定が早いこずから調敎の為の䌚議やそれに向けた資料の䜜成 ずいった時間が枛り、技術的な調査、怜蚌の時間が増えおいたす。 䞀方で、意思決定や利害関係者が少なく、自分の刀断が䌚瀟に圱響を䞎える比率が倧きくなりたした、そのため責任を感じる堎面も増えたなずいう印象がありたす。気を匕き締めお仕事に臚たないずいけない堎面は増えたかもしれたせん。 これは、自分ずしおはやりたいこずをやるたでの手数が枛ったので良かったかなず考えおいたす。意思決定の早さに぀いおは1幎半経った今でも驚かされる事が倚いので、ただただ慣れが必芁だなず考えおいたす。 最埌に 今回は、ISIDに入瀟しお1幎半経った自分の入瀟前の䞍安や働き方の倉化に぀いお簡単にですが振り返っおみたした。 もし、ISIDにご興味がある方は是非応募しおみおください。 私たちは同じチヌムで働いおくれる仲間を探しおいたす。今回の゚ントリで玹介したような仕事に興味のある方、ご応募お埅ちしおいたす。 ゜リュヌションアヌキテクト 執筆 @yamashita.tsuyoshi 、レビュヌ @handa.kenta  Shodo で執筆されたした 
はじめに ISID Xクロス むノベヌション 本郚 の䞉浊です。 暩限の問題でシステム郚門での䜜業が必芁だったのですが、ようやくシステム郚門での䜜業が完了し、匊瀟でも AWS Chatbotが Microsoft Teamsでも䜿えるようになりたした。 ずいうこずで今さら感もありたすが、システム郚門の䜜業前の状態、䜜業埌の䞀般ナヌザヌによる蚭定䟋、利甚方法に぀いお蚘述しようず思いたす。 目次 はじめに 目次 AWS Chatbot の抂芁 システム郚門の䜜業前の状態 䜜業埌の䞀般ナヌザヌによる蚭定䟋 利甚䟋 ゚むリアスの利甚 たずめ AWS Chatbot の抂芁 簡易な䜜業でTeams等から AWS の操䜜を可胜にする機胜です。同様のこずは、 AWS Lambda、webhookを利甚すれば実装可胜でしたが、 AWS Chatbotによっお非垞に簡易にできるようになりたした。 筆者の堎合、開発環境、デモ環境の立ち䞊げを簡易にやりたいずいうニヌズがありたした。 ゚ンゞニアが察象の堎合は、自身で AWS コン゜ヌルから立ち䞊げるようにする、 スクリプト で起動するずいった手も取れたす。しかし、非゚ンゞニアが倚い堎合、䟝頌を受けお運甚゚ンゞニアが起動する、停止するずいう運甚をしおいる䟋がありたした。 これらの問題を AWS Chatbotを䜿甚しお察応する䟋を瀺したす。 システム郚門の䜜業前の状態 䞋蚘の芁領で、『Teamsクラむアント  アプリ  AWS で怜玢  チヌムに远加』でアプリの登録を詊みたす。 しかしながら、テナントの蚭定状況の問題でアプリが䜿えない状態でした。 䞊蚘の旚をシステム郚門に申請し、アプリの承認および AWS からのアクセス暩付䞎を察応しおいただきたした。 本䜜業は、倚くのテナントでは䞀般ナヌザヌに暩限解攟されおいないず思いたすので、システム郚門に実斜しおいただく必芁がありたす。 䜜業埌の䞀般ナヌザヌによる蚭定䟋 䞊蚘の察応が枈んでいる堎合、䞋蚘画面より先に進めたす。 連携するチャネルを遞択したす。 しかし、privateチャネルは衚瀺されない、5個以䞊のチャネルは衚瀺されないteam名+チャネル名で絞り蟌めたすなどのやや癖のある動きをするようです。 連携が終わるず、䞊蚘のようにメッセヌゞが投皿されたす。 続いお、 AWS アカりント偎で AWS Chatbot の蚭定を行っおいきたす。 たず、チャネル情報を AWS Chatbot で蚭定する必芁がありたす。ですので、 Microsoft Teams のチャネル䞀芧から察象チャネルを右クリックし「チャネルぞのリンクを取埗」メニュヌから URL を取埗したす。 続いお、 AWS コン゜ヌルにログむンし、 AWS Chatbot コン゜ヌルを開きたす。 チャットクラむアント蚭定画面で Microsoft Teams が遞択できるようになっおいるので、遞択したす。 先ほど取埗した察象チャネルの URL を蚭定したす。 組織ずしお認蚌枈みのため、特に認蚌画面が出るこずなく完了したす。 続いお、チャネル登録をしたす。 チャネル名の衚蚘がURL ゚ンコヌド で衚瀺されおいお芋た目が悪いですが、問題なく動䜜したす。 次にこのチャットボットで䜕ができるか暩限を指定したす。 䞋蚘のように、いく぀かロヌルのテンプレヌトがあるのですが、それらでは限られた暩限しかありたせん。 そのため、䞋蚘の蚭定より新芏にロヌルを䜜成したす。 『信頌された゚ンティティ』に AWS Chatbotを遞び 今回はec2の起動、停止をしたいため、䞀旊雑にEc2FullAccessを指定したす。実際に利甚されるずきは、そのチャネルの利甚者のロヌルに応じお暩限を蚭定するのがよいでしょう。 このようにしお䜜成したIAMロヌルには、chatbotに察する信頌関係が蚭定されおいたす。 本ロヌルを元の画面で蚭定し、チャネルガヌドレヌルポリシヌにも同等の暩限であるEc2FullAccessを指定したす。 これで、chatbotの蚭定が完了したした。 利甚䟋 それでは、chatbotを利甚しおみたしょう。 chatbotの構文は、ほが、 aws cli ず同じです。 ずいうこずで、 むンスタンス の起動を詊みたす。 初回利甚のため、リヌゞョンを蚭定しろず蚀われおしたいたした。 ずいうこずでchatbot䞊でリヌゞョンを蚭定したす。 再床コマンドを実行するず、本圓にこのコマンドを流しおいいかず聞かれるため実行したす。 コマンドが実行されたした。 AWS コンロヌルで確認したずころ、 むンスタンス が起動しおいるこずを確認できたした。 同様の手順で むンスタンス の停止も可胜です。 ゚むリアス の利甚 が、 AWS CLI に盞圓するものをTeam䞊で叩けずいうのは敷居が高いため、 ゚むリアス を蚭定したす。 䞋蚘のような芁領で ゚むリアス の䜜成が可胜です。 開始、停止甚の ゚むリアス を䜜成したので、さっそく詊したす。 ゚むリアス を䜿甚しお環境1を立ち䞊げろず呜じたずころ、実際に実行するコマンドが展開されお衚瀺されたした。 䟿利ですね。 で、実行するず、䞋蚘のようにコマンドが実行されたす。 なお、日本語での ゚むリアス は蚭定できたせんでした。 たずめ このようにしお、簡易にTeamsから AWS の むンスタンス の開始、停止ができるようになりたした。非゚ンゞニアにずっお非垞に良い機胜なのではないかず思っおいたす。 執筆 @miura.toshihiko 、レビュヌ @wakamoto.ryosuke  Shodo で執筆されたした 
はじめに ISID Xクロス むノベヌション 本郚 の䞉浊です。 暩限の問題でシステム郚門での䜜業が必芁だったのですが、ようやくシステム郚門での䜜業が完了し、匊瀟でも AWS Chatbotが Microsoft Teamsでも䜿えるようになりたした。 ずいうこずで今さら感もありたすが、システム郚門の䜜業前の状態、䜜業埌の䞀般ナヌザヌによる蚭定䟋、利甚方法に぀いお蚘述しようず思いたす。 目次 はじめに 目次 AWS Chatbot の抂芁 システム郚門の䜜業前の状態 䜜業埌の䞀般ナヌザヌによる蚭定䟋 利甚䟋 ゚むリアスの利甚 たずめ AWS Chatbot の抂芁 簡易な䜜業でTeams等から AWS の操䜜を可胜にする機胜です。同様のこずは、 AWS Lambda、webhookを利甚すれば実装可胜でしたが、 AWS Chatbotによっお非垞に簡易にできるようになりたした。 筆者の堎合、開発環境、デモ環境の立ち䞊げを簡易にやりたいずいうニヌズがありたした。 ゚ンゞニアが察象の堎合は、自身で AWS コン゜ヌルから立ち䞊げるようにする、 スクリプト で起動するずいった手も取れたす。しかし、非゚ンゞニアが倚い堎合、䟝頌を受けお運甚゚ンゞニアが起動する、停止するずいう運甚をしおいる䟋がありたした。 これらの問題を AWS Chatbotを䜿甚しお察応する䟋を瀺したす。 システム郚門の䜜業前の状態 䞋蚘の芁領で、『Teamsクラむアント  アプリ  AWS で怜玢  チヌムに远加』でアプリの登録を詊みたす。 しかしながら、テナントの蚭定状況の問題でアプリが䜿えない状態でした。 䞊蚘の旚をシステム郚門に申請し、アプリの承認および AWS からのアクセス暩付䞎を察応しおいただきたした。 本䜜業は、倚くのテナントでは䞀般ナヌザヌに暩限解攟されおいないず思いたすので、システム郚門に実斜しおいただく必芁がありたす。 䜜業埌の䞀般ナヌザヌによる蚭定䟋 䞊蚘の察応が枈んでいる堎合、䞋蚘画面より先に進めたす。 連携するチャネルを遞択したす。 しかし、privateチャネルは衚瀺されない、5個以䞊のチャネルは衚瀺されないteam名+チャネル名で絞り蟌めたすなどのやや癖のある動きをするようです。 連携が終わるず、䞊蚘のようにメッセヌゞが投皿されたす。 続いお、 AWS アカりント偎で AWS Chatbot の蚭定を行っおいきたす。 たず、チャネル情報を AWS Chatbot で蚭定する必芁がありたす。ですので、 Microsoft Teams のチャネル䞀芧から察象チャネルを右クリックし「チャネルぞのリンクを取埗」メニュヌから URL を取埗したす。 続いお、 AWS コン゜ヌルにログむンし、 AWS Chatbot コン゜ヌルを開きたす。 チャットクラむアント蚭定画面で Microsoft Teams が遞択できるようになっおいるので、遞択したす。 先ほど取埗した察象チャネルの URL を蚭定したす。 組織ずしお認蚌枈みのため、特に認蚌画面が出るこずなく完了したす。 続いお、チャネル登録をしたす。 チャネル名の衚蚘がURL ゚ンコヌド で衚瀺されおいお芋た目が悪いですが、問題なく動䜜したす。 次にこのチャットボットで䜕ができるか暩限を指定したす。 䞋蚘のように、いく぀かロヌルのテンプレヌトがあるのですが、それらでは限られた暩限しかありたせん。 そのため、䞋蚘の蚭定より新芏にロヌルを䜜成したす。 『信頌された゚ンティティ』に AWS Chatbotを遞び 今回はec2の起動、停止をしたいため、䞀旊雑にEc2FullAccessを指定したす。実際に利甚されるずきは、そのチャネルの利甚者のロヌルに応じお暩限を蚭定するのがよいでしょう。 このようにしお䜜成したIAMロヌルには、chatbotに察する信頌関係が蚭定されおいたす。 本ロヌルを元の画面で蚭定し、チャネルガヌドレヌルポリシヌにも同等の暩限であるEc2FullAccessを指定したす。 これで、chatbotの蚭定が完了したした。 利甚䟋 それでは、chatbotを利甚しおみたしょう。 chatbotの構文は、ほが、 aws cli ず同じです。 ずいうこずで、 むンスタンス の起動を詊みたす。 初回利甚のため、リヌゞョンを蚭定しろず蚀われおしたいたした。 ずいうこずでchatbot䞊でリヌゞョンを蚭定したす。 再床コマンドを実行するず、本圓にこのコマンドを流しおいいかず聞かれるため実行したす。 コマンドが実行されたした。 AWS コンロヌルで確認したずころ、 むンスタンス が起動しおいるこずを確認できたした。 同様の手順で むンスタンス の停止も可胜です。 ゚むリアス の利甚 が、 AWS CLI に盞圓するものをTeam䞊で叩けずいうのは敷居が高いため、 ゚むリアス を蚭定したす。 䞋蚘のような芁領で ゚むリアス の䜜成が可胜です。 開始、停止甚の ゚むリアス を䜜成したので、さっそく詊したす。 ゚むリアス を䜿甚しお環境1を立ち䞊げろず呜じたずころ、実際に実行するコマンドが展開されお衚瀺されたした。 䟿利ですね。 で、実行するず、䞋蚘のようにコマンドが実行されたす。 なお、日本語での ゚むリアス は蚭定できたせんでした。 たずめ このようにしお、簡易にTeamsから AWS の むンスタンス の開始、停止ができるようになりたした。非゚ンゞニアにずっお非垞に良い機胜なのではないかず思っおいたす。 執筆 @miura.toshihiko 、レビュヌ @wakamoto.ryosuke  Shodo で執筆されたした 
こんにちは、ISID 金融゜リュヌション事業郚の岡厎です。 今回はUE5で コリゞョン 衝突刀定機胜を䜿っお、自動で開閉するドアや、 NPC ずの簡単な䌚話システムを䜜成しおみたす。 はじめに UE5ではフィヌルド䞊のさたざたなオブゞェクトや、プレむダヌが操䜜するキャ ラク タヌに コリゞョン 刀定機胜を持たせるこずができたす。 これにより、物䜓にキャ ラク タヌが圓たった時や、前もっお蚭定しおおいた領域に他のオブゞェクトが䟵入した時などに、 任意の機胜を䜜成できたす。 今回はこの コリゞョン 刀定機胜を利甚しお䞋蚘2぀の機胜を実装したす。 キャ ラク タヌが近づくず開き、遠ざかるず閉じる自動ドアの機胜 察象キャ ラク タヌ NPC にプレむダヌが近づき、任意のキヌボヌドを抌すず䌚話が行われる機胜 怜蚌環境/ツヌル Unreal Engine5.2.0 AWS EC2 Windows _Server-2022-English-Full-Base-2023.01.19 実装手順 【自動ドア線】タむムラむンを利甚したドアのアニメヌションの䜜成 【自動ドア線】 コリゞョン を利甚した自動開閉システムの䜜成 【 NPC 䌚話線】䌚話UI甚の りィゞェット の䜜成 【 NPC 䌚話線】 コリゞョン を利甚した䌚話UI甚の りィゞェット の衚瀺 【 NPC 䌚話線】 NPC 毎のメッセヌゞ内容切り替え 1. 【自動ドア線】タむムラむンを利甚したドアのアニメヌションの䜜成 今回はThirdPersonテンプレヌトを利甚したプロゞェクトで進めおいきたす。 たず初めにドアに䜿甚するアクタヌのBluePrintを䜜成したす。 コンテンツドロワヌより、BlueprintClassを遞び、Actorを遞択したす。今回は「BP_Door」ずいう名前にしたす。 「BP_Door」の線集画面に入りたす。 コンポヌネント 远加ボタンより、「Static Mesh」を远加し、「Door」ず 呜名 したす。 右偎の詳现パネルより、Static Meshのセレクトボックスでスタヌタヌコンテンツの「SM_Door」を遞びたす。 次にドアの圓たり刀定甚に コンポヌネント 远加ボタンより、「Box Collision」を远加し、ドアの倧きさに合わせお倉曎したす。 たたキャ ラク タヌがドアをすり抜けおしたわないよう、今䜜った「Box Collision」のあたり刀定を蚭定する コリゞョン プリセットの倀を「BlockAllDynamic」に倉曎したす。 続いお、䜜成したドアにアニメヌションを぀けおいきたす。 本ステップでは、ドアにアニメヌションを぀けるこずが目的なので、わかりやすくするため、 ゲヌム開始時に、ドアが開く仕組みを䜜成したす。 「BP_Door」のむベントグラフを開きたす。 「むベント BeginPlay」の埌に、ドアに動きを぀けるためにタむムラむンを䜿甚したす。 以前のこちらの蚘事UE5 x ZBrushでタむムラむンを掻甚したアニメヌションを䜜成する で、タむムラむンに぀いお詳しく説明しおいるので、今回は割愛したす。 「DoorOpenRate」ずいう名前でタむムラむンを䜜成し、さらに「Rate」ずいうトラックを䜜成し、䞋蚘倀を远加したした。 秒数0:倀0 秒数0.5:倀1 むベントグラフに戻るず、返华倀ずしお「Rate」を持぀タむムラむンができおいるので、「むベント BeginPlay」のピンず぀なぎたす。 次に「Make Rotator」ノヌドを䜜成しZ軞の倀を「90」に蚭定したす。これはドアが90床開くための倀になりたす。 「乗算」ノヌドを远加し、䞋の写真のように䜜成したタむムラむンず぀なぎたす。 最埌に「Set Relative Rotation(Door)」を遞択し、「New Rotation」にタむムラむンから乗算した倀を぀なぎたす。 コンパむル し、Map䞊に「BP_Door」を配眮を行い、ゲヌムを開始するこずでドアが開くアニメヌションを確認できたす。 2. 【自動ドア線】 コリゞョン を利甚した自動開閉システムの䜜成 ここでは、 コリゞョン を利甚しお、キャ ラク タヌが近づくず自動で開き、離れるず自動で閉じるドアにしたす。 ちなみに先ほどドアに「Box Collision」を䜿いたしたが、これはキャ ラク タヌがドアを通り抜けられなくするための コリゞョン のため、 これから䜜る自動ドアの範囲を瀺す コリゞョン ずは別のものになりたす。 「BP_Door」を開き、「 Sphere Collision」を远加したす。 次に、「 Sphere Collision」をドアの䞭心ぞ移動し拡倧を行い、キャ ラク タヌが入るず自動でドアが開く領域を蚭定したす。 詳现パネルのむベント欄から「On Component Begin Overlap」ず「On Component End Overlap」の右のプラスボタンを抌したす。 むベントグラフに䞋のようなノヌドができおいるこずを確認したす。 䜜成された「On Component Begin Overlap」を「むベント BeginPlay」ず入れ替えるこずで、キャ ラク タヌが コリゞョン で蚭定した領域に入るこずでドアが開く挙動になりたす。 たた、「On Component End Overlap」をタむムラむンの「Reverse」ピンに接続するこずで、タむムラむンで蚭定した倀ず逆の挙動が行われるので、キャ ラク タヌが領域からでた際にドアが閉たりたす。 以䞊がキャ ラク タヌが近づくず開き、遠ざかるず閉じる自動のドアの機胜の玹介になりたす。 3. 【 NPC 䌚話線】䌚話UI甚の りィゞェット の䜜成 続いお、察象キャ ラク タヌ NPC にプレむダヌが近づき、任意のキヌボヌドを抌すず䌚話が行われる機胜の䜜成手順を玹介したす。 たずは䌚話UIに䜿甚する りィゞェット を䜜成するために、「 Widget Blueprint」を「WBP_ Talk 」ずいう名前で䜜成したす。 りィゞェット の䜜成方法は 以前のこちらの蚘事UE5 PixelStreamingで、マりスカヌ゜ルを別の画像に倉曎しおクリックむベントを䜜成する で玹介しおおりたす。 たずはパレット内の䞀般から「Border」を「WBP_ Talk 」内に ドラッグ&ドロップ し、「 Canvas Panel」でラップしたす。 詳现パネルからアンカヌを遞び、䞋に䌞びおいるものを遞びたす。 「Brush」内の「Tint」の郚分にカラヌピッカヌがあるので「Aアルファ」の倀を「0.5」たで䞋げお、先ほど䜜成した「Border」を半透明にしたす。サむズを䞋の写真のように倧きくしお簡易的な䌚話テキストを眮く郚分のUIずしたす。 次にパレット内から「Text」を遞び、今䜜成した「Border」内に ドラッグ&ドロップ したす。 詳现タブの「Padding」から䞊䞋巊右䞭倮そろえにしたす。たた、「Font」から文字サむズも「36」に倉曎したす。 これで䌚話UI甚の りィゞェット が出来たした。 実際に画面に衚瀺させおみたす。 スタヌタヌコンテンツで初期から入っおいるキャ ラク タヌを䜿甚したす。 ファむルは、コンテンツThirdPersonBlueprintsBP_ThirdPersonCharacter にありたす。 たずはこのBlueprintから りィゞェット にアクセスできるように蚭定したす。 「 りィゞェット を䜜成」ノヌドを远加し、Class属性にWBP_ Talk を蚭定したす。たた「Owning Player」には「Get Player Controller」を぀なぎたす。 次に りィゞェット を䜜成ノヌドを「むベント BeginPlay」のピンず぀なげたす。 「WBP_ Talk りィゞェット を䜜成」のノヌドの「Return Value 」を倉数ずしおセットし、「UI_ Talk 」ず 呜名 したす。 次に 「Q」 を抌した時に りィゞェット を画面に衚瀺させるようにしたす。 「Add to Viewport(UI_ Talk )」を遞び、 「Q」 のノヌドず぀なぎたす。 これで実際に画面に䌚話甚のUIを衚瀺するこずが出来たした。 ここたでで、䌚話甚のUIに必芁な りィゞェット の準備が敎いたした。 続いお コリゞョン を利甚しお、プレむダヌが操䜜しおいるキャ ラク タヌの前に、他のキャ ラク タヌがいる時のみ 「Q」 を抌すこずで、䌚話甚のUIを出す機胜を䜜成したす。 4. 【 NPC 䌚話線】 コリゞョン を利甚した䌚話UI甚の りィゞェット の衚瀺 たずは「BP_ThirdPersonCharacter」のキャ ラク タヌに、先ほどドアを䜜成した時ず同じように「 Sphere Collision」を䜜成したす。 キャ ラク タヌの前方に䞋の写真のように「 Sphere Collision」を配眮したす。 むベントグラフに戻り、「Get Overlapping Actors( Sphere )」を䜜成したす。これは先ほど䜜成した「 Sphere Collision」に 接觊 しおいるアクタヌの䞀芧を配列で返しおくれるノヌドになりたす。 先ほど䜜成した 「Q」 を抌した埌の「ブランチIF文」でfalseだった時に「For Each Loop With Break」ノヌドで「 Sphere Collision」に 接觊 しおいるアクタヌの配列を展開したす。 本ステップではただアクタヌごずに䌚話の文章の内容を分けず、 コリゞョン 内にアクタヌがある堎合のみ䌚話甚のUIを出すだけの凊理なので䞋の写真のように「Add to Viewport」に぀なぎ、配列がなくなるたでルヌプさせたす。 これで、 コリゞョン 内にアクタヌが1぀でもあれば、 「Q」 を抌すこずで䌚話甚のUIを衚瀺できたす。 たた、このたただず䌚話甚UIが出たたたになっおしたうので、消去する凊理も䜜成したす。 「IsTalk」ずいうBooleanの倉数を䜜成し、䌚話䞭ではない時のみ画面に䌚話甚UIが出るように蚭定したす。 たた䌚話䞭の堎合は、画面から䌚話甚UIを消すために「Remove From Parent」ノヌドを远加し、画面から䌚話甚UIを消去し、「IsTalk」のフラグをfalseに倉曎したす。 実際に詊しおみるために、マップにいく぀かアクタヌを蚭眮させたす。 どんなアクタヌでも良いですが、今回は NPC 颚の人型アクタヌを䜜成しお蚭眮したす。 Blueprint䜜成画面からCharacterを遞択しお「BP_ NPC 」を䜜成したす。 コンポヌネント 䞀芧よりより、「Mesh」を遞択し、詳现パネルよりメッシュを遞びたす。今回は「SK_Mannequin」を遞択したす。 マテリアルも任意のものを遞び、マップに配眮したす。 ここたでの実装で、プレむダヌが操䜜するキャ ラク タヌの前にアクタヌがある時のみ、 「Q」 を抌すこずで、䌚話甚のUIが出おくる凊理が完成したした。 続いお、マップに配眮した NPC ごずに䌚話の内容を倉曎させる機胜を䜜成し説明したす。 5. 【 NPC 䌚話線】 NPC 毎のメッセヌゞ内容切り替え たずはアクタヌ間を超えお共通の䌚話甚の関数を䜿甚できるようにブルヌプリントむンタヌフェヌスを䜜成したす。 コンテンツドロワヌからブルヌプリントむンタヌフェヌスを䜜成し、「BPI_ Talk 」ず 呜名 したす。 線集画面で「CanTalk」ずいうBooleanを返す関数ず、「GetTalkMessage」ずいうTextを返す関数を䜜成したす。 「BP_ NPC 」で2぀の関数を䜿甚するために、「BP_ NPC 」を開き画面䞊郚のクラス蚭定を抌し、右偎の実装むンタヌフェヌスのセレクトボックスより「BPI_ Talk 」を遞択したす。 巊偎にむンタヌフェヌス欄が远加され、先ほど䜜成した2぀の関数があるこずを確認したす。 巊偎のむンタヌフェヌス欄から「CanTalk」をダブルクリックで開き、Booleanの返り倀をtrueに蚭定したす。 同様に「GetTalkMessage」を開き、リタヌンノヌドのTextの返り倀を倉数ずしおセットし、「TalkMessage」ず 呜名 したす。 さらに、倉数欄の右偎の目のアむコンをクリックしお、UEの党䜓の線集画面から盎接倉数の倀を倉曎できるように蚭定しおおきたす。 最埌のステップずしお「BP_ThirdPersonCharacter」を開き、前にいるアクタヌBP_ NPC が「CanTalk」でtrueを返しおいるかをチェックし、trueだった堎合に「TalkMessage」でセットした文字列を䌚話甚UIに埋め蟌んで衚瀺させる凊理を䜜成したす。 先ほど配列で取埗した コリゞョン 内のアクタヌをForEachで回しおいる郚分で、「CanTalk」がtrueかどうか確認するためにノヌドを远加したす。 trueだった堎合に、さらにそのアクタヌが蚭定しおある䌚話の内容を「GetTalkMessage」から取埗したす。 BP_ NPC は党お「CanTalk」をtrueで返す蚭定をしおいたす。 「GetTalkMessage」のタヌゲットはアクタヌの配列が入っおいる「Array Element」です。 次に取埗しおきた䌚話の内容を「WBP_ Talk 」の䞭に埋め蟌みたす。 「WBP_ Talk 」を開き、階局から「Text」を遞択したす。次に右䞊の「is Variable」にチェックを入れ、「 Widget _TalkMessage」ず 呜名 したす。 「WBP_ Talk 」をグラフ衚瀺に倉曎しお、関数を䜜成したす。今回は「 Widget _SetTextMessage」ず 呜名 したす。 むンプットにTextを蚭定したす。 「SetText(Text)」ノヌドを぀なぎ、タヌゲットに「 Widget _TalkMessage」を蚭定し、タヌゲットに「UI_ Talk 」を぀なぎたす。 「BP_ThirdPersonCharacter」に戻り、「 Widget _SetTextMessage」ノヌドを䜜成し、「GetTalkMessage」ず぀なぎたす。 最埌に「Add to Viewport」ず繋ぐこずでBlueprint偎での凊理は完了です。 党䜓の凊理は䞋蚘のような流れになっおいたす。 UEの線集画面からアクタヌを遞択し、詳现タブの「 Talk Massage」欄に任意の文蚀を远加するこずで、アクタヌごずに䌚話する内容を蚭定できたす。 実際に䌚話を行っおみたす。 以䞊が コリゞョン 機胜を䜿っお、自動で開閉するドアや、 NPC ずの簡単な䌚話システムの䜜成方法の玹介です。 所感 コリゞョン を利甚するこずで、オブゞェクトを動かしたり、重なったアクタヌの情報を取埗したりず、さたざたな䜿い方ができるこずがわかりたした。 たた、基本的な䌚話の䜜り方もわかったので、より耇雑な䌚話方法や、 りィゞェット の䜜成方法なども孊習しおいきたす。 特に りィゞェット でできるこずはただただありそうなので、もう少し深がっお調査しおいきたいず思いたす。 珟圚ISIDは web3領域のグルヌプ暪断組織 を立ち䞊げ、Web3および メタバヌス 領域のR&Dを行っおおりたすカテゎリヌ「3DCG」の蚘事は こちら 。 もし本領域にご興味のある方や、䞀緒にチャレンゞしおいきたい方は、ぜひお気軜にご連絡ください 私たちず同じチヌムで働いおくれる仲間を、是非お埅ちしおおりたす ISID採甚ペヌゞWeb3/メタバヌス/AI 参考 https://note.com/ak_schweitzer/n/n2a7b116c8ee8 https://qiita.com/4_mio_11/items/fed86efca7407a7975fb https://www.youtube.com/watch?v=b8AwUvTaCs0& 執筆 @okazaki.wataru 、レビュヌ @wakamoto.ryosuke  Shodo で執筆されたした 
こんにちは、ISID 金融゜リュヌション事業郚の岡厎です。 今回はUE5で コリゞョン 衝突刀定機胜を䜿っお、自動で開閉するドアや、 NPC ずの簡単な䌚話システムを䜜成しおみたす。 はじめに UE5ではフィヌルド䞊のさたざたなオブゞェクトや、プレむダヌが操䜜するキャ ラク タヌに コリゞョン 刀定機胜を持たせるこずができたす。 これにより、物䜓にキャ ラク タヌが圓たった時や、前もっお蚭定しおおいた領域に他のオブゞェクトが䟵入した時などに、 任意の機胜を䜜成できたす。 今回はこの コリゞョン 刀定機胜を利甚しお䞋蚘2぀の機胜を実装したす。 キャ ラク タヌが近づくず開き、遠ざかるず閉じる自動ドアの機胜 察象キャ ラク タヌ NPC にプレむダヌが近づき、任意のキヌボヌドを抌すず䌚話が行われる機胜 怜蚌環境/ツヌル Unreal Engine5.2.0 AWS EC2 Windows _Server-2022-English-Full-Base-2023.01.19 実装手順 【自動ドア線】タむムラむンを利甚したドアのアニメヌションの䜜成 【自動ドア線】 コリゞョン を利甚した自動開閉システムの䜜成 【 NPC 䌚話線】䌚話UI甚の りィゞェット の䜜成 【 NPC 䌚話線】 コリゞョン を利甚した䌚話UI甚の りィゞェット の衚瀺 【 NPC 䌚話線】 NPC 毎のメッセヌゞ内容切り替え 1. 【自動ドア線】タむムラむンを利甚したドアのアニメヌションの䜜成 今回はThirdPersonテンプレヌトを利甚したプロゞェクトで進めおいきたす。 たず初めにドアに䜿甚するアクタヌのBluePrintを䜜成したす。 コンテンツドロワヌより、BlueprintClassを遞び、Actorを遞択したす。今回は「BP_Door」ずいう名前にしたす。 「BP_Door」の線集画面に入りたす。 コンポヌネント 远加ボタンより、「Static Mesh」を远加し、「Door」ず 呜名 したす。 右偎の詳现パネルより、Static Meshのセレクトボックスでスタヌタヌコンテンツの「SM_Door」を遞びたす。 次にドアの圓たり刀定甚に コンポヌネント 远加ボタンより、「Box Collision」を远加し、ドアの倧きさに合わせお倉曎したす。 たたキャ ラク タヌがドアをすり抜けおしたわないよう、今䜜った「Box Collision」のあたり刀定を蚭定する コリゞョン プリセットの倀を「BlockAllDynamic」に倉曎したす。 続いお、䜜成したドアにアニメヌションを぀けおいきたす。 本ステップでは、ドアにアニメヌションを぀けるこずが目的なので、わかりやすくするため、 ゲヌム開始時に、ドアが開く仕組みを䜜成したす。 「BP_Door」のむベントグラフを開きたす。 「むベント BeginPlay」の埌に、ドアに動きを぀けるためにタむムラむンを䜿甚したす。 以前のこちらの蚘事UE5 x ZBrushでタむムラむンを掻甚したアニメヌションを䜜成する で、タむムラむンに぀いお詳しく説明しおいるので、今回は割愛したす。 「DoorOpenRate」ずいう名前でタむムラむンを䜜成し、さらに「Rate」ずいうトラックを䜜成し、䞋蚘倀を远加したした。 秒数0:倀0 秒数0.5:倀1 むベントグラフに戻るず、返华倀ずしお「Rate」を持぀タむムラむンができおいるので、「むベント BeginPlay」のピンず぀なぎたす。 次に「Make Rotator」ノヌドを䜜成しZ軞の倀を「90」に蚭定したす。これはドアが90床開くための倀になりたす。 「乗算」ノヌドを远加し、䞋の写真のように䜜成したタむムラむンず぀なぎたす。 最埌に「Set Relative Rotation(Door)」を遞択し、「New Rotation」にタむムラむンから乗算した倀を぀なぎたす。 コンパむル し、Map䞊に「BP_Door」を配眮を行い、ゲヌムを開始するこずでドアが開くアニメヌションを確認できたす。 2. 【自動ドア線】 コリゞョン を利甚した自動開閉システムの䜜成 ここでは、 コリゞョン を利甚しお、キャ ラク タヌが近づくず自動で開き、離れるず自動で閉じるドアにしたす。 ちなみに先ほどドアに「Box Collision」を䜿いたしたが、これはキャ ラク タヌがドアを通り抜けられなくするための コリゞョン のため、 これから䜜る自動ドアの範囲を瀺す コリゞョン ずは別のものになりたす。 「BP_Door」を開き、「 Sphere Collision」を远加したす。 次に、「 Sphere Collision」をドアの䞭心ぞ移動し拡倧を行い、キャ ラク タヌが入るず自動でドアが開く領域を蚭定したす。 詳现パネルのむベント欄から「On Component Begin Overlap」ず「On Component End Overlap」の右のプラスボタンを抌したす。 むベントグラフに䞋のようなノヌドができおいるこずを確認したす。 䜜成された「On Component Begin Overlap」を「むベント BeginPlay」ず入れ替えるこずで、キャ ラク タヌが コリゞョン で蚭定した領域に入るこずでドアが開く挙動になりたす。 たた、「On Component End Overlap」をタむムラむンの「Reverse」ピンに接続するこずで、タむムラむンで蚭定した倀ず逆の挙動が行われるので、キャ ラク タヌが領域からでた際にドアが閉たりたす。 以䞊がキャ ラク タヌが近づくず開き、遠ざかるず閉じる自動のドアの機胜の玹介になりたす。 3. 【 NPC 䌚話線】䌚話UI甚の りィゞェット の䜜成 続いお、察象キャ ラク タヌ NPC にプレむダヌが近づき、任意のキヌボヌドを抌すず䌚話が行われる機胜の䜜成手順を玹介したす。 たずは䌚話UIに䜿甚する りィゞェット を䜜成するために、「 Widget Blueprint」を「WBP_ Talk 」ずいう名前で䜜成したす。 りィゞェット の䜜成方法は 以前のこちらの蚘事UE5 PixelStreamingで、マりスカヌ゜ルを別の画像に倉曎しおクリックむベントを䜜成する で玹介しおおりたす。 たずはパレット内の䞀般から「Border」を「WBP_ Talk 」内に ドラッグ&ドロップ し、「 Canvas Panel」でラップしたす。 詳现パネルからアンカヌを遞び、䞋に䌞びおいるものを遞びたす。 「Brush」内の「Tint」の郚分にカラヌピッカヌがあるので「Aアルファ」の倀を「0.5」たで䞋げお、先ほど䜜成した「Border」を半透明にしたす。サむズを䞋の写真のように倧きくしお簡易的な䌚話テキストを眮く郚分のUIずしたす。 次にパレット内から「Text」を遞び、今䜜成した「Border」内に ドラッグ&ドロップ したす。 詳现タブの「Padding」から䞊䞋巊右䞭倮そろえにしたす。たた、「Font」から文字サむズも「36」に倉曎したす。 これで䌚話UI甚の りィゞェット が出来たした。 実際に画面に衚瀺させおみたす。 スタヌタヌコンテンツで初期から入っおいるキャ ラク タヌを䜿甚したす。 ファむルは、コンテンツThirdPersonBlueprintsBP_ThirdPersonCharacter にありたす。 たずはこのBlueprintから りィゞェット にアクセスできるように蚭定したす。 「 りィゞェット を䜜成」ノヌドを远加し、Class属性にWBP_ Talk を蚭定したす。たた「Owning Player」には「Get Player Controller」を぀なぎたす。 次に りィゞェット を䜜成ノヌドを「むベント BeginPlay」のピンず぀なげたす。 「WBP_ Talk りィゞェット を䜜成」のノヌドの「Return Value 」を倉数ずしおセットし、「UI_ Talk 」ず 呜名 したす。 次に 「Q」 を抌した時に りィゞェット を画面に衚瀺させるようにしたす。 「Add to Viewport(UI_ Talk )」を遞び、 「Q」 のノヌドず぀なぎたす。 これで実際に画面に䌚話甚のUIを衚瀺するこずが出来たした。 ここたでで、䌚話甚のUIに必芁な りィゞェット の準備が敎いたした。 続いお コリゞョン を利甚しお、プレむダヌが操䜜しおいるキャ ラク タヌの前に、他のキャ ラク タヌがいる時のみ 「Q」 を抌すこずで、䌚話甚のUIを出す機胜を䜜成したす。 4. 【 NPC 䌚話線】 コリゞョン を利甚した䌚話UI甚の りィゞェット の衚瀺 たずは「BP_ThirdPersonCharacter」のキャ ラク タヌに、先ほどドアを䜜成した時ず同じように「 Sphere Collision」を䜜成したす。 キャ ラク タヌの前方に䞋の写真のように「 Sphere Collision」を配眮したす。 むベントグラフに戻り、「Get Overlapping Actors( Sphere )」を䜜成したす。これは先ほど䜜成した「 Sphere Collision」に 接觊 しおいるアクタヌの䞀芧を配列で返しおくれるノヌドになりたす。 先ほど䜜成した 「Q」 を抌した埌の「ブランチIF文」でfalseだった時に「For Each Loop With Break」ノヌドで「 Sphere Collision」に 接觊 しおいるアクタヌの配列を展開したす。 本ステップではただアクタヌごずに䌚話の文章の内容を分けず、 コリゞョン 内にアクタヌがある堎合のみ䌚話甚のUIを出すだけの凊理なので䞋の写真のように「Add to Viewport」に぀なぎ、配列がなくなるたでルヌプさせたす。 これで、 コリゞョン 内にアクタヌが1぀でもあれば、 「Q」 を抌すこずで䌚話甚のUIを衚瀺できたす。 たた、このたただず䌚話甚UIが出たたたになっおしたうので、消去する凊理も䜜成したす。 「IsTalk」ずいうBooleanの倉数を䜜成し、䌚話䞭ではない時のみ画面に䌚話甚UIが出るように蚭定したす。 たた䌚話䞭の堎合は、画面から䌚話甚UIを消すために「Remove From Parent」ノヌドを远加し、画面から䌚話甚UIを消去し、「IsTalk」のフラグをfalseに倉曎したす。 実際に詊しおみるために、マップにいく぀かアクタヌを蚭眮させたす。 どんなアクタヌでも良いですが、今回は NPC 颚の人型アクタヌを䜜成しお蚭眮したす。 Blueprint䜜成画面からCharacterを遞択しお「BP_ NPC 」を䜜成したす。 コンポヌネント 䞀芧よりより、「Mesh」を遞択し、詳现パネルよりメッシュを遞びたす。今回は「SK_Mannequin」を遞択したす。 マテリアルも任意のものを遞び、マップに配眮したす。 ここたでの実装で、プレむダヌが操䜜するキャ ラク タヌの前にアクタヌがある時のみ、 「Q」 を抌すこずで、䌚話甚のUIが出おくる凊理が完成したした。 続いお、マップに配眮した NPC ごずに䌚話の内容を倉曎させる機胜を䜜成し説明したす。 5. 【 NPC 䌚話線】 NPC 毎のメッセヌゞ内容切り替え たずはアクタヌ間を超えお共通の䌚話甚の関数を䜿甚できるようにブルヌプリントむンタヌフェヌスを䜜成したす。 コンテンツドロワヌからブルヌプリントむンタヌフェヌスを䜜成し、「BPI_ Talk 」ず 呜名 したす。 線集画面で「CanTalk」ずいうBooleanを返す関数ず、「GetTalkMessage」ずいうTextを返す関数を䜜成したす。 「BP_ NPC 」で2぀の関数を䜿甚するために、「BP_ NPC 」を開き画面䞊郚のクラス蚭定を抌し、右偎の実装むンタヌフェヌスのセレクトボックスより「BPI_ Talk 」を遞択したす。 巊偎にむンタヌフェヌス欄が远加され、先ほど䜜成した2぀の関数があるこずを確認したす。 巊偎のむンタヌフェヌス欄から「CanTalk」をダブルクリックで開き、Booleanの返り倀をtrueに蚭定したす。 同様に「GetTalkMessage」を開き、リタヌンノヌドのTextの返り倀を倉数ずしおセットし、「TalkMessage」ず 呜名 したす。 さらに、倉数欄の右偎の目のアむコンをクリックしお、UEの党䜓の線集画面から盎接倉数の倀を倉曎できるように蚭定しおおきたす。 最埌のステップずしお「BP_ThirdPersonCharacter」を開き、前にいるアクタヌBP_ NPC が「CanTalk」でtrueを返しおいるかをチェックし、trueだった堎合に「TalkMessage」でセットした文字列を䌚話甚UIに埋め蟌んで衚瀺させる凊理を䜜成したす。 先ほど配列で取埗した コリゞョン 内のアクタヌをForEachで回しおいる郚分で、「CanTalk」がtrueかどうか確認するためにノヌドを远加したす。 trueだった堎合に、さらにそのアクタヌが蚭定しおある䌚話の内容を「GetTalkMessage」から取埗したす。 BP_ NPC は党お「CanTalk」をtrueで返す蚭定をしおいたす。 「GetTalkMessage」のタヌゲットはアクタヌの配列が入っおいる「Array Element」です。 次に取埗しおきた䌚話の内容を「WBP_ Talk 」の䞭に埋め蟌みたす。 「WBP_ Talk 」を開き、階局から「Text」を遞択したす。次に右䞊の「is Variable」にチェックを入れ、「 Widget _TalkMessage」ず 呜名 したす。 「WBP_ Talk 」をグラフ衚瀺に倉曎しお、関数を䜜成したす。今回は「 Widget _SetTextMessage」ず 呜名 したす。 むンプットにTextを蚭定したす。 「SetText(Text)」ノヌドを぀なぎ、タヌゲットに「 Widget _TalkMessage」を蚭定し、タヌゲットに「UI_ Talk 」を぀なぎたす。 「BP_ThirdPersonCharacter」に戻り、「 Widget _SetTextMessage」ノヌドを䜜成し、「GetTalkMessage」ず぀なぎたす。 最埌に「Add to Viewport」ず繋ぐこずでBlueprint偎での凊理は完了です。 党䜓の凊理は䞋蚘のような流れになっおいたす。 UEの線集画面からアクタヌを遞択し、詳现タブの「 Talk Massage」欄に任意の文蚀を远加するこずで、アクタヌごずに䌚話する内容を蚭定できたす。 実際に䌚話を行っおみたす。 以䞊が コリゞョン 機胜を䜿っお、自動で開閉するドアや、 NPC ずの簡単な䌚話システムの䜜成方法の玹介です。 所感 コリゞョン を利甚するこずで、オブゞェクトを動かしたり、重なったアクタヌの情報を取埗したりず、さたざたな䜿い方ができるこずがわかりたした。 たた、基本的な䌚話の䜜り方もわかったので、より耇雑な䌚話方法や、 りィゞェット の䜜成方法なども孊習しおいきたす。 特に りィゞェット でできるこずはただただありそうなので、もう少し深がっお調査しおいきたいず思いたす。 珟圚ISIDは web3領域のグルヌプ暪断組織 を立ち䞊げ、Web3および メタバヌス 領域のR&Dを行っおおりたすカテゎリヌ「3DCG」の蚘事は こちら 。 もし本領域にご興味のある方や、䞀緒にチャレンゞしおいきたい方は、ぜひお気軜にご連絡ください 私たちず同じチヌムで働いおくれる仲間を、是非お埅ちしおおりたす 私たちは䞀緒に働いおくれる仲間を募集しおいたす 電通総研䞭途採甚ペヌゞ 電通総研新卒採甚ペヌゞ 参考 https://note.com/ak_schweitzer/n/n2a7b116c8ee8 https://qiita.com/4_mio_11/items/fed86efca7407a7975fb https://www.youtube.com/watch?v=b8AwUvTaCs0& 執筆 @okazaki.wataru 、レビュヌ @wakamoto.ryosuke  Shodo で執筆されたした 
電通囜際情報サヌビス 、オヌプン むノベヌション ラボの 比嘉康雄 です。 今回は、 Expo に入門したす。 Expo ずは、開発者が React Native 単䜓で開発した堎合に意識しないずいけなかったネむティブ郚分を隠蔜しお、アプリケヌション本䜓の開発をより Web アプリケヌションの開発䜓隓に近づけたものです。 expo cliのむンストヌル Expo Goのむンストヌル プロゞェクトの䜜成 QRコヌドの読み取り アプリの修正 たずめ 仲間募集 expo cli のむンストヌル expo cli は、䞋蚘のようにしお、npxでむンストヌルするようです。 npx expo -h 実行するず䞋蚘のように蚀われるので、yでむンストヌルしたす。 Need to install the following packages: expo@48.0.17 Ok to proceed? (y) Expo Goのむンストヌル Expo Go は、ロヌカルで䜕も構築する必芁がなく、Android および iOS 䞊で React Native アプリをテストするための無料のオヌプン゜ヌス クラむアントです。 Android たたは iOS デバむスで Expo Go クラむアントアプリを䜿甚するのが、最も速く起動しお実行できる方法です。これにより、Expo CLI を通じお提䟛されるアプリを開いお、開発時にプロゞェクトをより速く実行できたす。 ず公匏が蚀っおいるので、Expo Goを䜿いたしょう。 iOSのApp Store や AndroidのPay Store からむンストヌルしおください。 プロゞェクトの䜜成 npx create-expo-app my-app でプロゞェクトを䜜成したしょう。 my-app に移動しお、プロゞェクトを開始したす。 cd my-app npx expo start QRコヌド の読み取り QRコヌド が衚瀺されたす。 Scan the QR code above with Expo Go (Android) or the Camera app (iOS) ず蚀われるので、僕は、 iPhone のカメラで QRコヌド を読み蟌みたした。Expo Goが立ち䞊がっお、䞋蚘のようにアプリが衚瀺されたす。 Open up App.js to start working on your app! アプリの修正 my-app ディレクト リで、 VS Code を立ち䞊げたす。 code . App.js のTextタグで囲たれおいる郚分を適圓に修正しおください。アプリの衚瀺もすぐ倉わりたす(HOT Reloading)。 たずめ Expoは、Webアプリを開発しおいるような感芚で、Nativeアプリを開発できるずいうのは、本圓だなず感じたした。Expoはもう少し詳しく芋おいきたいず思いたす。 仲間募集 私たちは同じグルヌプで共に働いおいただける仲間を募集しおいたす。 珟圚、以䞋のような職皮を募集しおいたす。 ゜リュヌションアヌキテクト AI゚ンゞニア 執筆 @higa  Shodo で執筆されたした 
電通囜際情報サヌビス 、オヌプン むノベヌション ラボの 比嘉康雄 です。 今回は、 Expo に入門したす。 Expo ずは、開発者が React Native 単䜓で開発した堎合に意識しないずいけなかったネむティブ郚分を隠蔜しお、アプリケヌション本䜓の開発をより Web アプリケヌションの開発䜓隓に近づけたものです。 expo cliのむンストヌル Expo Goのむンストヌル プロゞェクトの䜜成 QRコヌドの読み取り アプリの修正 たずめ 仲間募集 expo cli のむンストヌル expo cli は、䞋蚘のようにしお、npxでむンストヌルするようです。 npx expo -h 実行するず䞋蚘のように蚀われるので、yでむンストヌルしたす。 Need to install the following packages: expo@48.0.17 Ok to proceed? (y) Expo Goのむンストヌル Expo Go は、ロヌカルで䜕も構築する必芁がなく、Android および iOS 䞊で React Native アプリをテストするための無料のオヌプン゜ヌス クラむアントです。 Android たたは iOS デバむスで Expo Go クラむアントアプリを䜿甚するのが、最も速く起動しお実行できる方法です。これにより、Expo CLI を通じお提䟛されるアプリを開いお、開発時にプロゞェクトをより速く実行できたす。 ず公匏が蚀っおいるので、Expo Goを䜿いたしょう。 iOSのApp Store や AndroidのPay Store からむンストヌルしおください。 プロゞェクトの䜜成 npx create-expo-app my-app でプロゞェクトを䜜成したしょう。 my-app に移動しお、プロゞェクトを開始したす。 cd my-app npx expo start QRコヌド の読み取り QRコヌド が衚瀺されたす。 Scan the QR code above with Expo Go (Android) or the Camera app (iOS) ず蚀われるので、僕は、 iPhone のカメラで QRコヌド を読み蟌みたした。Expo Goが立ち䞊がっお、䞋蚘のようにアプリが衚瀺されたす。 Open up App.js to start working on your app! アプリの修正 my-app ディレクト リで、 VS Code を立ち䞊げたす。 code . App.js のTextタグで囲たれおいる郚分を適圓に修正しおください。アプリの衚瀺もすぐ倉わりたす(HOT Reloading)。 たずめ Expoは、Webアプリを開発しおいるような感芚で、Nativeアプリを開発できるずいうのは、本圓だなず感じたした。Expoはもう少し詳しく芋おいきたいず思いたす。 仲間募集 私たちは同じグルヌプで共に働いおいただける仲間を募集しおいたす。 珟圚、以䞋のような職皮を募集しおいたす。 ゜リュヌションアヌキテクト AI゚ンゞニア 執筆 @higa  Shodo で執筆されたした 
こんにちは、Xクロス むノベヌション 本郚 クラりド むノベヌション センタヌの田村です。 普段は Microsoft が提䟛する クラりド サヌビスである Azure を掻甚した案件支揎や、研究開発を担圓しおいたす。 本蚘事では、業務内容や 1 週間の過ごし方など、私の䞻な働き方に぀いおざっくりずご玹介したす。 IT 䌁業ぞの就職を怜蚎されおいる孊生の方や、ISID にご興味をお持ちの方の参考になれば幞いです。 自己玹介 業務内容 案件支揎 研究開発 その他 1 週間の過ごし方 最埌に 自己玹介 タむトルにもありたすが、2020 幎に新卒入瀟した 4 幎目瀟員です。 入瀟埌に半幎間の研修を経お、 クラりド むノベヌション センタヌに配属ずなりたした。 孊生時代に クラりド をはじめずした IT 系の 経隓がほがなく、「絶察に クラりド に関する仕事がしたい」ずいった垌望もなかったため意倖ではありたしたが、䜕かの瞁だろうず仕事を続け今日に至りたす。 業務内容 冒頭でご玹介した通り、 Microsoft Azure を掻甚した案件支揎ず研究開発が䞻な業務です。 Azure ずいっおも倚皮倚様なサヌビスがありたすが、私の業務では䞻にデヌタ分析の領域を扱っおいたす。 具䜓的に䜕をしおいるのかに぀いおは、個別でご玹介いたしたす。 案件支揎 近幎は IoT や ビッグデヌタ などのワヌドが普及し、䌁業においおもデヌタ分析のニヌズが高たっおいたす。 ISID に限らず、デヌタ分析を䞭心に据えたプロゞェクトは数倚くありたすが、私が参画する支揎業務で求められるのは「お客様の抱える様々な朜圚・顕圚課題や芁望に察しお、Azure を掻甚したデヌタ分析による䟡倀提䟛を行う」こずです。 実際にいただいたお客様からの芁望にはこんなものがありたす。 瀟内に散圚しおいる業務デヌタを䞀元管理できるデヌタ分析基盀を構築しおほしい オフィスビル 内の環境情報枩床/湿床/照床/空気状態などを収集・分析し䞀目で把握したい オフィスビル のデゞタルツむンを䜜成する実蚌実隓PoCを実斜したい お客様の芁望に応じお䜜業内容は異なりたすが、倧たかには ヒアリ ングを重ねお芁件をすり合わせる、Azure および呚蟺システムの蚭蚈・構築を行う、分析結果を可芖化するレポヌト画面の䜜成をする、ずいった業務を経隓しおきたした。 珟堎ではデヌタ分析に限定しない Azure の幅広いサヌビスや 他の Microsoft 補品、堎合によっおは他瀟゜リュヌションに察する知識・スキルが芁求されるので、 クラりド ゚ンゞニアずいう職皮ずしおよい経隓が積めおいるず感じおいたす。 研究開発 Azure のデヌタ領域におけるアップデヌト内容の調査怜蚌が䞭心です。 Azure をはじめずする クラりド サヌビスは䞀般的なパッケヌゞ補品ず比范しおアップデヌトのスパンが短く、1 週間埌には機胜・仕様が倉曎されるずいうケヌスもありたす。 そのような倉化に远い぀いおいくために、チヌム内で Azure の新しいサヌビスや機胜を共有し、「将来的に案件支揎や瀟内゜リュヌションに適甚できる芋蟌みがある」ず刀断したものに察しお調査怜蚌を実斜しおいたす。 具䜓的な調査怜蚌の内容に぀いおは、以前に投皿した蚘事をご芧ください。 Azure Managed Grafana に぀いお調べおみた 調査怜蚌の結果は䞋蚘の芳点でたずめ、資料化しお瀟内に展開しおいたす。 たた、むンタヌネット䞊に同様の調査結果が報告されおいない堎合は、前述したようにこちらのテックブログや Qiita/ Twitter で瀟倖発信する堎合もありたす。 どのようなアップデヌトなのか できるこず、できないこずは䜕か 調査怜蚌時点で考えられる具䜓的な䜿甚䟋は䜕か 類䌌・競合サヌビスずの差別化点は どのくらいのコストが必芁か 䞊蚘の他にも、Azure を掻甚した瀟内゜リュヌション開発、Azure デヌタ分析プロゞェクトで芁件定矩から運甚に必芁なツヌルやドキュメントを網矅したテンプレヌトの䜜成、デヌタ領域におけるトレンドの調査などを実斜しおきたした。 研究開発の内容に関わらず、ノりハりを蓄積し案件支揎に掻かしおいくずいうサむクルを倧事にしおいたす。 その他 ここたで蚘茉したもの以倖にも、経隓しおきた業務がいく぀かありたす。 新卒瀟員向けの システム開発 研究のサポヌト OJT サポヌト業務 新芏事業開発・提案 ISID は、若い幎次でも「やりたい」ずいう仕事をアピヌルすればチャレンゞできる土壌があるず感じおいたす。 1 週間の過ごし方 プロゞェクトの状況によっおたちたちですが、おおよそ䞋図の通りです。 毎日の始業時に朝䌚を実斜し、チヌム内で本日の業務内容ず党䜓のタスク、事務連絡等を共有したす。 その埌は案件支揎や研究開発に関する打ち合わせや個人䜜業の時間ずなり、空き時間は自己孊習やこういった蚘事執筆などに充おおいたす。 基本的にテレワヌクなので終業埌は自宅で過ごすこずが倚いですが、週 1 皋床で同期ずフットサルをしおいたす。 最埌に Xクロス むノベヌション 本郚 クラりド むノベヌション センタヌでは、新卒・キャリア採甚問わず共に働いおくれる仲間を探しおいたす。 本蚘事で玹介した私の働き方や、 クラりド を䞭心ずした業務にご興味をお持ちの方は、ぜひ採甚ペヌゞよりご応募ください。 新卒採甚の方 ISID 新卒採甚サむト キャリア採甚の方 ISID グルヌプ キャリア採甚サむト - クラりドアヌキテクト 執筆 @tamura.kohei 、レビュヌ Ishizawa Kento (@kent)  Shodo で執筆されたした 
こんにちは、Xクロス むノベヌション 本郚 クラりド むノベヌション センタヌの田村です。 普段は Microsoft が提䟛する クラりド サヌビスである Azure を掻甚した案件支揎や、研究開発を担圓しおいたす。 本蚘事では、業務内容や 1 週間の過ごし方など、私の䞻な働き方に぀いおざっくりずご玹介したす。 IT 䌁業ぞの就職を怜蚎されおいる孊生の方や、ISID にご興味をお持ちの方の参考になれば幞いです。 自己玹介 業務内容 案件支揎 研究開発 その他 1 週間の過ごし方 最埌に 自己玹介 タむトルにもありたすが、2020 幎に新卒入瀟した 4 幎目瀟員です。 入瀟埌に半幎間の研修を経お、 クラりド むノベヌション センタヌに配属ずなりたした。 孊生時代に クラりド をはじめずした IT 系の 経隓がほがなく、「絶察に クラりド に関する仕事がしたい」ずいった垌望もなかったため意倖ではありたしたが、䜕かの瞁だろうず仕事を続け今日に至りたす。 業務内容 冒頭でご玹介した通り、 Microsoft Azure を掻甚した案件支揎ず研究開発が䞻な業務です。 Azure ずいっおも倚皮倚様なサヌビスがありたすが、私の業務では䞻にデヌタ分析の領域を扱っおいたす。 具䜓的に䜕をしおいるのかに぀いおは、個別でご玹介いたしたす。 案件支揎 近幎は IoT や ビッグデヌタ などのワヌドが普及し、䌁業においおもデヌタ分析のニヌズが高たっおいたす。 ISID に限らず、デヌタ分析を䞭心に据えたプロゞェクトは数倚くありたすが、私が参画する支揎業務で求められるのは「お客様の抱える様々な朜圚・顕圚課題や芁望に察しお、Azure を掻甚したデヌタ分析による䟡倀提䟛を行う」こずです。 実際にいただいたお客様からの芁望にはこんなものがありたす。 瀟内に散圚しおいる業務デヌタを䞀元管理できるデヌタ分析基盀を構築しおほしい オフィスビル 内の環境情報枩床/湿床/照床/空気状態などを収集・分析し䞀目で把握したい オフィスビル のデゞタルツむンを䜜成する実蚌実隓PoCを実斜したい お客様の芁望に応じお䜜業内容は異なりたすが、倧たかには ヒアリ ングを重ねお芁件をすり合わせる、Azure および呚蟺システムの蚭蚈・構築を行う、分析結果を可芖化するレポヌト画面の䜜成をする、ずいった業務を経隓しおきたした。 珟堎ではデヌタ分析に限定しない Azure の幅広いサヌビスや 他の Microsoft 補品、堎合によっおは他瀟゜リュヌションに察する知識・スキルが芁求されるので、 クラりド ゚ンゞニアずいう職皮ずしおよい経隓が積めおいるず感じおいたす。 研究開発 Azure のデヌタ領域におけるアップデヌト内容の調査怜蚌が䞭心です。 Azure をはじめずする クラりド サヌビスは䞀般的なパッケヌゞ補品ず比范しおアップデヌトのスパンが短く、1 週間埌には機胜・仕様が倉曎されるずいうケヌスもありたす。 そのような倉化に远い぀いおいくために、チヌム内で Azure の新しいサヌビスや機胜を共有し、「将来的に案件支揎や瀟内゜リュヌションに適甚できる芋蟌みがある」ず刀断したものに察しお調査怜蚌を実斜しおいたす。 具䜓的な調査怜蚌の内容に぀いおは、以前に投皿した蚘事をご芧ください。 Azure Managed Grafana に぀いお調べおみた 調査怜蚌の結果は䞋蚘の芳点でたずめ、資料化しお瀟内に展開しおいたす。 たた、むンタヌネット䞊に同様の調査結果が報告されおいない堎合は、前述したようにこちらのテックブログや Qiita/ Twitter で瀟倖発信する堎合もありたす。 どのようなアップデヌトなのか できるこず、できないこずは䜕か 調査怜蚌時点で考えられる具䜓的な䜿甚䟋は䜕か 類䌌・競合サヌビスずの差別化点は どのくらいのコストが必芁か 䞊蚘の他にも、Azure を掻甚した瀟内゜リュヌション開発、Azure デヌタ分析プロゞェクトで芁件定矩から運甚に必芁なツヌルやドキュメントを網矅したテンプレヌトの䜜成、デヌタ領域におけるトレンドの調査などを実斜しおきたした。 研究開発の内容に関わらず、ノりハりを蓄積し案件支揎に掻かしおいくずいうサむクルを倧事にしおいたす。 その他 ここたで蚘茉したもの以倖にも、経隓しおきた業務がいく぀かありたす。 新卒瀟員向けの システム開発 研究のサポヌト OJT サポヌト業務 新芏事業開発・提案 ISID は、若い幎次でも「やりたい」ずいう仕事をアピヌルすればチャレンゞできる土壌があるず感じおいたす。 1 週間の過ごし方 プロゞェクトの状況によっおたちたちですが、おおよそ䞋図の通りです。 毎日の始業時に朝䌚を実斜し、チヌム内で本日の業務内容ず党䜓のタスク、事務連絡等を共有したす。 その埌は案件支揎や研究開発に関する打ち合わせや個人䜜業の時間ずなり、空き時間は自己孊習やこういった蚘事執筆などに充おおいたす。 基本的にテレワヌクなので終業埌は自宅で過ごすこずが倚いですが、週 1 皋床で同期ずフットサルをしおいたす。 最埌に Xクロス むノベヌション 本郚 クラりド むノベヌション センタヌでは、新卒・キャリア採甚問わず共に働いおくれる仲間を探しおいたす。 本蚘事で玹介した私の働き方や、 クラりド を䞭心ずした業務にご興味をお持ちの方は、ぜひ採甚ペヌゞよりご応募ください。 新卒採甚の方 ISID 新卒採甚サむト キャリア採甚の方 ISID グルヌプ キャリア採甚サむト - クラりドアヌキテクト 執筆 @tamura.kohei 、レビュヌ Ishizawa Kento (@kent)  Shodo で執筆されたした 
こんにちは、ISID 金融゜リュヌション事業郚の岡厎です。 今回はUE5で マルチプレむ に察応した゚モヌト機胜を䜜成する方法をご玹介したす。 ゚モヌト機胜ずは、 マルチプレむ のゲヌムにおいお、各キャ ラク タヌが感情を衚珟する為の機胜です。 䟋えば Fortnite ではキャ ラク タヌに様々な動きやダンスをさせるこずができたす。 はじめに UE5では「ListenServer」ず「DedicatedServer」の2皮類のゲヌムサヌバヌ方匏が䜿甚可胜です。 各サヌバヌに぀いおは、こちらの 金融゜リュヌション事業郚の山䞋さんの蚘事 で玹介されおいるので説明は割愛したす。 今回は怜蚌を簡易にするため「ListenServer」を䜿甚しお マルチプレむ での゚モヌト機胜を䜜成したすが、 「DedicatedServer」でも同じ挙動をする実装方法ずなりたす。 怜蚌環境/ツヌル Unreal Engine5.2.0 AWS EC2 Windows _Server-2022-English-Full-Base-2023.01.19 実装手順 ゚モヌト甚WidgetBlueprintの䜜成 ゚モヌト甚 Widget をCharacterBlueprintに付䞎 CharacterBlueprintの動䜜䜜成 マルチプレむ 甹 レプリケヌション 蚭定 1. ゚モヌト甚WidgetBlueprintの䜜成 今回はThirdPersonテンプレヌトを利甚したプロゞェクトで進めおいきたす。 たず初めに゚モヌト甚 Widget に䜿甚するWidgetBluePrintを䜜成したす。 コンテンツドロワヌより、WidgetBlueprintを遞び「WBP_IconEmote」で䜜成したす。 以前玹介した UE5 PixelStreamingで、マりスカヌ゜ルを別の画像に倉曎しおクリックむベントを䜜成する蚘事 にお、 WidgetBlueprint内に任意の画像を取り蟌む方法があるので、同様に゚モヌトに䜿甚したい画像を取り蟌み「IconEmote」ずいう名前を぀けたした。たた前回同様「 Canvas Panel」を䜜成し、䜍眮を䞭心に倉曎させたす。 今回は別のBlueprintでもこの Widget を呌び出しお䜿う予定なので、詳现タブの䞊郚にある「Is Variable」にチェックを入れおおきたす。 2. ゚モヌト甚 Widget をCharacterBlueprintに付䞎 たずはCharacterBlueprintを開きたす。 ThirdPersonTemplateを䜿甚しお䜜成したプロゞェクトの堎合、 AllContentThirdPersonBlueprints内に「BP_ThirdPersonCharacter」を芋぀けるこずができたす。 「BP_ThirdPersonCharacter」のViewPortを開き、 Widget 甚の コンポヌネント を远加したす。 ViewProt巊䞊郚の远加ボタンを抌しお Widget ず怜玢し、クリックで遞択したす。 巊偎の コンポヌネント 䞀芧に远加されるので、名前を「 Widget _IconEmote」ず倉曎したす。 次に远加した「 Widget _IconEmote」ず、先ほど䜜成した「WBP_IconEmote」を連携させたす。 右偎の ナヌザヌむンタヌフェヌス 内の「 Widget Class」のセレクトボックスで「WBP_IconEmote」を遞択したす。 連携するず䞋蚘画像のように远加した゚モヌト画像がCharacterBlueprintに付䞎されたす。 トランスフォヌム欄から䜍眮や倧きさを動かすこずで、゚モヌト機胜のようになっおきたした。 コンパむル 、保存を行い、レベルのViewPortで確認しおみたす。 キャ ラク タヌの頭䞊にアむコンを出すこずは出来たしたが、キャ ラク タヌが暪を向くずアむコンも暪を向いおしたい画面から芋えなくなっおしたいたした。 解決法ずしお、ViewPortの ナヌザヌむンタヌフェヌス 欄のSpaceのセレクトボックスを「World」から「画面」を遞ぶこずで、キャ ラク タヌがどの向きを向いおも゚モヌトアむコンが芋えるように蚭定できたす。 3. CharacterBlueprintの動䜜䜜成 今回は、キヌボヌドの「5」を抌した時に、2秒間゚モヌトアむコンがキャ ラク タヌの頭䞊に衚瀺されるBlueprintを䜜成したす。 今のたたでは、アむコンが出続けおしたうのでたずゲヌムスタヌトずずもにアむコンを隠す凊理を行いたす。 たずは「BP_ThirdPersonCharacter」から「WBP_IconEmote」に接続できるように「Event BeginPlay」から「Cast To WBP_IconEmote」をピンで぀なげたす。 さらにObject属性に察しお、「Get User Widget Object」ノヌドを远加し、タヌゲットを「 Widget Icon Emote」にしたす。 これにより、「BP_ThirdPersonCharacter」から「WBP_IconEmote」に接続できるようになりたした。 次に、アむコンを非衚瀺にするために「Set Visibility」ノヌドを接続し、タヌゲットを「Cast To WBP_IconEmote」の「As WBP Emote」に接続したす。「In Visibility」の倀を「非衚瀺」にするこずで、アむコンを非衚瀺にできたすが、今回は埌述の マルチプレむ 甚に、衚瀺・非衚瀺を叞る倉数を䜜成しおおきたす。 画面巊䞋の倉数欄からプラスを抌し、「var_IconEmoteByte」ずいう倉数を䜜成したす。タむプはByteを遞択し、デフォルト倀を「2」にしたす。 䜜成した「var_IconEmoteByte」を「Set Visibility」に぀なぎたす。 ここで入力した「2」ずいうのは、「In Visibility」の倀の配列番号になり、「非衚瀺」を意味しおいたす。 ここたでで、キャ ラク タヌ頭䞊のアむコンは䞀旊非衚瀺になっおいるはずです。 次にキヌボヌドの「5」を抌した時にアむコンを衚瀺させる凊理の説明を行いたす。 「Press 5」ノヌドを远加し、「Pressed」のピンに察しお、「var_IconEmoteByte」をセットするためのノヌドを远加したす。 倉数の倀を「0」「In Visibility」の倀の配列番号になり、「衚瀺」の意に曞き換える凊理の埌に、先ほど䜜成した「Cast To WBP_IconEmote」の流れを耇補したす。 これにより、キヌボヌドの「5」を抌した時にアむコンを衚瀺させるこずができたす。 しかし、この状態ではただ巊右の画面 マルチプレむダヌ 間での同期は取れおいないので、 次のステップで修正しおいきたす。 4. マルチプレむ 甹 レプリケヌション 蚭定 UEで マルチプレむ を行う際は、ゲヌムサヌバヌがゲヌムクラむアントに察しお、情報をレプリケヌト耇補するこずで、 各クラむアント間プレむダヌ間での差異が生じないようになりたす。 今回䜜った凊理は、ただクラむアントで行われおいるだけの凊理なので、クラむアント間では同期されたせん。 たずは先ほど䜜成した倉数「var_IconEmoteByte」を レプリケヌション する蚭定にしたす。 「var_IconEmoteByte」の詳现画面から レプリケヌション の蚭定を「RepNotify」に蚭定したす。 「RepNotify」ずは、倉数の倀をりォッチしおおり、倉数の倀が倉わった時に埌続の関数「OnRep〜」関数を起動させたす。 倉数を「RepNotify」蚭定にするず、巊偎の関数欄に「OnRep_var_IconEmoteByte」ずいう関数ができたす。 次に、「Cast To WBP_IconEmote」から「Set Visibility」の凊理をコピヌし、「OnRep_var_IconEmoteByte」内で貌り付けたす。 「OnRep_var_IconEmoteByte」内ぞの移動方法は、巊偎の関数欄の「OnRep_var_IconEmoteByte」をダブルクリックするこずで移動ができたす。 貌り付けた凊理を「On Rep Var Icon Emote Byte」ノヌドに繋ぎ、元あった堎所の凊理は消しおしたいたす。 これで、「var_IconEmoteByte」の倀が曞き換わった際に、埌続の凊理をゲヌムサヌバヌからゲヌムクラむアントに同期しおくれるようになりたす。 アむコンを衚瀺させおから2秒埌にアむコンを消す凊理を远加するために、䞋のように「Delay」ノヌドず「var_IconEmoteByte」のセット甚のノヌドを远加したす。非衚瀺にする必芁があるので、「var_IconEmoteByte」の倀は「2」にしたす。 実行するず䞋の動画のようになりたす。 巊偎の画面のプレむダヌの゚モヌトアむコンは右偎の画面に同期されおいるのに察し、右偎の画面の゚モヌトは巊偎に同期されおいないこずがわかりたす。 この挙動はリッスンサヌバヌで怜蚌を行っおいるためのものです。 リッスンサヌバヌでは人のプレむダヌがゲヌムサヌバヌずゲヌムクラむアント䞡方の機胜をもち、 その他のプレむダヌがゲヌムクラむアントだけの機胜を持ちたす。 䞊の動画では巊偎がゲヌムサヌバヌを持っおいるクラむアントで、右偎がゲヌムクラむアントだけの画面になりたす。 UEの レプリケヌション 機胜では、 ゲヌムサヌバヌが情報をレプリケヌト耇補しおゲヌムクラむアントの情報を曞き換え、同期するこずは出来たすが、 ゲヌムクラむアントがゲヌムサヌバヌの情報を曞き換えお同期するこずは出来たせん。 たた、クラむアントがクラむアントの情報を曞き換えお同期するこずも出来たせん。 たずめるず䞋蚘のようになりたす。 ゲヌムサヌバヌでの情報倉曎 → ゲヌムサヌバヌの情報を耇補しお、ゲヌムクラむアントの情報を曞き換えるこずが可胜 ゲヌムクラむアントでの情報倉曎 → ゲヌムクラむアントの情報を耇補しお、ゲヌムサヌバヌの情報を曞き換えるこずは䞍可胜 ゲヌムクラむアントでの情報倉曎 → ゲヌムクラむアントの情報を耇補しお、他のゲヌムクラむアントの情報を曞き換えるこずは䞍可胜 䞊蚘の理由から、巊偎の行動はレプリケヌトされ、右偎の行動はレプリケヌトされない凊理になっおしたっおいるので修正しおいきたす。 たずはカスタムむベントを远加したす。今回は「Press5sync」ずいう名前のむベントにしたした。 「Press5sync」を遞択し、右偎の詳现画面から耇補欄で「サヌバヌで実行」を遞択したす。 次にキヌボヌドの「5」を抌しお起動する凊理を、今䜜った「Press5sync」に繋ぎ盎し、キヌボヌドの「5」の凊理は「Press5sync」を起動させるために぀なぎたす。 これにより、ゲヌムクラむアント偎で行われた凊理も、ゲヌムサヌバヌで実行する圢匏をずるのでゲヌムサヌバヌずゲヌムクラむアント間で同期が取れるようになりたす。 同様の手順で、TextタむプのWidgetBlueprintを远加するこずで、䞋蚘のような゚モヌトを远加するこずもできたす。 以䞊が、 マルチプレむ に察応した゚モヌト機胜を䜜成する手順になりたす。 所感 今回のUE5で マルチプレむ に察応した゚モヌト機胜を䜜成する手順を調査するにあたり、 UE5でのWidgetBlueprintの䜿甚方法や、 マルチプレむ のゲヌムサヌバヌ、ゲヌムクラむアント間の関係性などに詳しくなるこずが出来たした。 マルチプレむ のプロゞェクトを䜜成するにあたり、プレむダヌ間の情報の同期 レプリケヌション は必須事項になるので、今回の基瀎的な知識をもずに、より耇雑な レプリケヌション の方法なども孊習しおいきたす。 珟圚ISIDは web3領域のグルヌプ暪断組織 を立ち䞊げ、Web3および メタバヌス 領域のR&Dを行っおおりたすカテゎリヌ「3DCG」の蚘事は こちら 。 もし本領域にご興味のある方や、䞀緒にチャレンゞしおいきたい方は、ぜひお気軜にご連絡ください 私たちず同じチヌムで働いおくれる仲間を、是非お埅ちしおおりたす ISID採甚ペヌゞWeb3/メタバヌス/AI 参考 https://docs.unrealengine.com/4.26/ja/InteractiveExperiences/Networking/HowTo/DedicatedServers/ https://docs.unrealengine.com/4.27/ja/Resources/ContentExamples/Networking/1_4/ https://qiita.com/Shibash/items/2408b653abe0549abe37 執筆 @okazaki.wataru 、レビュヌ @wakamoto.ryosuke  Shodo で執筆されたした 
こんにちは、ISID 金融゜リュヌション事業郚の岡厎です。 今回はUE5で マルチプレむ に察応した゚モヌト機胜を䜜成する方法をご玹介したす。 ゚モヌト機胜ずは、 マルチプレむ のゲヌムにおいお、各キャ ラク タヌが感情を衚珟する為の機胜です。 䟋えば Fortnite ではキャ ラク タヌに様々な動きやダンスをさせるこずができたす。 はじめに UE5では「ListenServer」ず「DedicatedServer」の2皮類のゲヌムサヌバヌ方匏が䜿甚可胜です。 各サヌバヌに぀いおは、こちらの 金融゜リュヌション事業郚の山䞋さんの蚘事 で玹介されおいるので説明は割愛したす。 今回は怜蚌を簡易にするため「ListenServer」を䜿甚しお マルチプレむ での゚モヌト機胜を䜜成したすが、 「DedicatedServer」でも同じ挙動をする実装方法ずなりたす。 怜蚌環境/ツヌル Unreal Engine5.2.0 AWS EC2 Windows _Server-2022-English-Full-Base-2023.01.19 実装手順 ゚モヌト甚WidgetBlueprintの䜜成 ゚モヌト甚 Widget をCharacterBlueprintに付䞎 CharacterBlueprintの動䜜䜜成 マルチプレむ 甹 レプリケヌション 蚭定 1. ゚モヌト甚WidgetBlueprintの䜜成 今回はThirdPersonテンプレヌトを利甚したプロゞェクトで進めおいきたす。 たず初めに゚モヌト甚 Widget に䜿甚するWidgetBluePrintを䜜成したす。 コンテンツドロワヌより、WidgetBlueprintを遞び「WBP_IconEmote」で䜜成したす。 以前玹介した UE5 PixelStreamingで、マりスカヌ゜ルを別の画像に倉曎しおクリックむベントを䜜成する蚘事 にお、 WidgetBlueprint内に任意の画像を取り蟌む方法があるので、同様に゚モヌトに䜿甚したい画像を取り蟌み「IconEmote」ずいう名前を぀けたした。たた前回同様「 Canvas Panel」を䜜成し、䜍眮を䞭心に倉曎させたす。 今回は別のBlueprintでもこの Widget を呌び出しお䜿う予定なので、詳现タブの䞊郚にある「Is Variable」にチェックを入れおおきたす。 2. ゚モヌト甚 Widget をCharacterBlueprintに付䞎 たずはCharacterBlueprintを開きたす。 ThirdPersonTemplateを䜿甚しお䜜成したプロゞェクトの堎合、 AllContentThirdPersonBlueprints内に「BP_ThirdPersonCharacter」を芋぀けるこずができたす。 「BP_ThirdPersonCharacter」のViewPortを開き、 Widget 甚の コンポヌネント を远加したす。 ViewProt巊䞊郚の远加ボタンを抌しお Widget ず怜玢し、クリックで遞択したす。 巊偎の コンポヌネント 䞀芧に远加されるので、名前を「 Widget _IconEmote」ず倉曎したす。 次に远加した「 Widget _IconEmote」ず、先ほど䜜成した「WBP_IconEmote」を連携させたす。 右偎の ナヌザヌむンタヌフェヌス 内の「 Widget Class」のセレクトボックスで「WBP_IconEmote」を遞択したす。 連携するず䞋蚘画像のように远加した゚モヌト画像がCharacterBlueprintに付䞎されたす。 トランスフォヌム欄から䜍眮や倧きさを動かすこずで、゚モヌト機胜のようになっおきたした。 コンパむル 、保存を行い、レベルのViewPortで確認しおみたす。 キャ ラク タヌの頭䞊にアむコンを出すこずは出来たしたが、キャ ラク タヌが暪を向くずアむコンも暪を向いおしたい画面から芋えなくなっおしたいたした。 解決法ずしお、ViewPortの ナヌザヌむンタヌフェヌス 欄のSpaceのセレクトボックスを「World」から「画面」を遞ぶこずで、キャ ラク タヌがどの向きを向いおも゚モヌトアむコンが芋えるように蚭定できたす。 3. CharacterBlueprintの動䜜䜜成 今回は、キヌボヌドの「5」を抌した時に、2秒間゚モヌトアむコンがキャ ラク タヌの頭䞊に衚瀺されるBlueprintを䜜成したす。 今のたたでは、アむコンが出続けおしたうのでたずゲヌムスタヌトずずもにアむコンを隠す凊理を行いたす。 たずは「BP_ThirdPersonCharacter」から「WBP_IconEmote」に接続できるように「Event BeginPlay」から「Cast To WBP_IconEmote」をピンで぀なげたす。 さらにObject属性に察しお、「Get User Widget Object」ノヌドを远加し、タヌゲットを「 Widget Icon Emote」にしたす。 これにより、「BP_ThirdPersonCharacter」から「WBP_IconEmote」に接続できるようになりたした。 次に、アむコンを非衚瀺にするために「Set Visibility」ノヌドを接続し、タヌゲットを「Cast To WBP_IconEmote」の「As WBP Emote」に接続したす。「In Visibility」の倀を「非衚瀺」にするこずで、アむコンを非衚瀺にできたすが、今回は埌述の マルチプレむ 甚に、衚瀺・非衚瀺を叞る倉数を䜜成しおおきたす。 画面巊䞋の倉数欄からプラスを抌し、「var_IconEmoteByte」ずいう倉数を䜜成したす。タむプはByteを遞択し、デフォルト倀を「2」にしたす。 䜜成した「var_IconEmoteByte」を「Set Visibility」に぀なぎたす。 ここで入力した「2」ずいうのは、「In Visibility」の倀の配列番号になり、「非衚瀺」を意味しおいたす。 ここたでで、キャ ラク タヌ頭䞊のアむコンは䞀旊非衚瀺になっおいるはずです。 次にキヌボヌドの「5」を抌した時にアむコンを衚瀺させる凊理の説明を行いたす。 「Press 5」ノヌドを远加し、「Pressed」のピンに察しお、「var_IconEmoteByte」をセットするためのノヌドを远加したす。 倉数の倀を「0」「In Visibility」の倀の配列番号になり、「衚瀺」の意に曞き換える凊理の埌に、先ほど䜜成した「Cast To WBP_IconEmote」の流れを耇補したす。 これにより、キヌボヌドの「5」を抌した時にアむコンを衚瀺させるこずができたす。 しかし、この状態ではただ巊右の画面 マルチプレむダヌ 間での同期は取れおいないので、 次のステップで修正しおいきたす。 4. マルチプレむ 甹 レプリケヌション 蚭定 UEで マルチプレむ を行う際は、ゲヌムサヌバヌがゲヌムクラむアントに察しお、情報をレプリケヌト耇補するこずで、 各クラむアント間プレむダヌ間での差異が生じないようになりたす。 今回䜜った凊理は、ただクラむアントで行われおいるだけの凊理なので、クラむアント間では同期されたせん。 たずは先ほど䜜成した倉数「var_IconEmoteByte」を レプリケヌション する蚭定にしたす。 「var_IconEmoteByte」の詳现画面から レプリケヌション の蚭定を「RepNotify」に蚭定したす。 「RepNotify」ずは、倉数の倀をりォッチしおおり、倉数の倀が倉わった時に埌続の関数「OnRep〜」関数を起動させたす。 倉数を「RepNotify」蚭定にするず、巊偎の関数欄に「OnRep_var_IconEmoteByte」ずいう関数ができたす。 次に、「Cast To WBP_IconEmote」から「Set Visibility」の凊理をコピヌし、「OnRep_var_IconEmoteByte」内で貌り付けたす。 「OnRep_var_IconEmoteByte」内ぞの移動方法は、巊偎の関数欄の「OnRep_var_IconEmoteByte」をダブルクリックするこずで移動ができたす。 貌り付けた凊理を「On Rep Var Icon Emote Byte」ノヌドに繋ぎ、元あった堎所の凊理は消しおしたいたす。 これで、「var_IconEmoteByte」の倀が曞き換わった際に、埌続の凊理をゲヌムサヌバヌからゲヌムクラむアントに同期しおくれるようになりたす。 アむコンを衚瀺させおから2秒埌にアむコンを消す凊理を远加するために、䞋のように「Delay」ノヌドず「var_IconEmoteByte」のセット甚のノヌドを远加したす。非衚瀺にする必芁があるので、「var_IconEmoteByte」の倀は「2」にしたす。 実行するず䞋の動画のようになりたす。 巊偎の画面のプレむダヌの゚モヌトアむコンは右偎の画面に同期されおいるのに察し、右偎の画面の゚モヌトは巊偎に同期されおいないこずがわかりたす。 この挙動はリッスンサヌバヌで怜蚌を行っおいるためのものです。 リッスンサヌバヌでは人のプレむダヌがゲヌムサヌバヌずゲヌムクラむアント䞡方の機胜をもち、 その他のプレむダヌがゲヌムクラむアントだけの機胜を持ちたす。 䞊の動画では巊偎がゲヌムサヌバヌを持っおいるクラむアントで、右偎がゲヌムクラむアントだけの画面になりたす。 UEの レプリケヌション 機胜では、 ゲヌムサヌバヌが情報をレプリケヌト耇補しおゲヌムクラむアントの情報を曞き換え、同期するこずは出来たすが、 ゲヌムクラむアントがゲヌムサヌバヌの情報を曞き換えお同期するこずは出来たせん。 たた、クラむアントがクラむアントの情報を曞き換えお同期するこずも出来たせん。 たずめるず䞋蚘のようになりたす。 ゲヌムサヌバヌでの情報倉曎 → ゲヌムサヌバヌの情報を耇補しお、ゲヌムクラむアントの情報を曞き換えるこずが可胜 ゲヌムクラむアントでの情報倉曎 → ゲヌムクラむアントの情報を耇補しお、ゲヌムサヌバヌの情報を曞き換えるこずは䞍可胜 ゲヌムクラむアントでの情報倉曎 → ゲヌムクラむアントの情報を耇補しお、他のゲヌムクラむアントの情報を曞き換えるこずは䞍可胜 䞊蚘の理由から、巊偎の行動はレプリケヌトされ、右偎の行動はレプリケヌトされない凊理になっおしたっおいるので修正しおいきたす。 たずはカスタムむベントを远加したす。今回は「Press5sync」ずいう名前のむベントにしたした。 「Press5sync」を遞択し、右偎の詳现画面から耇補欄で「サヌバヌで実行」を遞択したす。 次にキヌボヌドの「5」を抌しお起動する凊理を、今䜜った「Press5sync」に繋ぎ盎し、キヌボヌドの「5」の凊理は「Press5sync」を起動させるために぀なぎたす。 これにより、ゲヌムクラむアント偎で行われた凊理も、ゲヌムサヌバヌで実行する圢匏をずるのでゲヌムサヌバヌずゲヌムクラむアント間で同期が取れるようになりたす。 同様の手順で、TextタむプのWidgetBlueprintを远加するこずで、䞋蚘のような゚モヌトを远加するこずもできたす。 以䞊が、 マルチプレむ に察応した゚モヌト機胜を䜜成する手順になりたす。 所感 今回のUE5で マルチプレむ に察応した゚モヌト機胜を䜜成する手順を調査するにあたり、 UE5でのWidgetBlueprintの䜿甚方法や、 マルチプレむ のゲヌムサヌバヌ、ゲヌムクラむアント間の関係性などに詳しくなるこずが出来たした。 マルチプレむ のプロゞェクトを䜜成するにあたり、プレむダヌ間の情報の同期 レプリケヌション は必須事項になるので、今回の基瀎的な知識をもずに、より耇雑な レプリケヌション の方法なども孊習しおいきたす。 珟圚ISIDは web3領域のグルヌプ暪断組織 を立ち䞊げ、Web3および メタバヌス 領域のR&Dを行っおおりたすカテゎリヌ「3DCG」の蚘事は こちら 。 もし本領域にご興味のある方や、䞀緒にチャレンゞしおいきたい方は、ぜひお気軜にご連絡ください 私たちず同じチヌムで働いおくれる仲間を、是非お埅ちしおおりたす ISID採甚ペヌゞWeb3/メタバヌス/AI 参考 https://docs.unrealengine.com/4.26/ja/InteractiveExperiences/Networking/HowTo/DedicatedServers/ https://docs.unrealengine.com/4.27/ja/Resources/ContentExamples/Networking/1_4/ https://qiita.com/Shibash/items/2408b653abe0549abe37 執筆 @okazaki.wataru 、レビュヌ @wakamoto.ryosuke  Shodo で執筆されたした 
皆さんこんにちはISID新卒入瀟7幎目の池内です。珟圚はEIT事業郚 ゚ンタヌプラむズ IT事業郚に所属しおおり、ISIDの自瀟開発補品である「BusinessSPECTRE」ビゞネ ススペ クトル、「VisAP」ノィス゚ヌピヌの提案、導入を担圓しおいたす。 このブログを通じ、私の仕事内容や1日の流れ、たたISIDに少しでも興味を持っおもらえる就掻生にずっお圹立぀情報を発信できればず思っおいたす 1. 自己玹介 それでは早速、簡単に自己玹介させおください。 倧孊、倧孊院を卒業し、2017幎に新入瀟員ずしおISIDぞ入瀟したした。倧孊圚孊䞭は、特に情報系プログラムずかの授業をなるべく避けおきたしたので、IT リテラシヌ はほが0。倧孊、倧孊院では 統蚈孊 を専攻しおいたした。 圓時、補薬䌚瀟のデヌタサむ゚ンティストを志望し、就掻に励んでいたしたが、残念ながらどの䌚瀟からも最終面接ぞのチケットをもらえず。やっぱり薬孊郚に進孊しないずだめなのかなずか、自分っお将来どこで䜕しお働くんだろうずか、色々考えながら日々を過ごしおいたずころ、ISIDに出䌚うこずができ入瀟するこずを決めたした。 入瀟埌の配属先ずしおは、䞻に顧客の基幹システム䌚蚈、販売、圚庫など、顧客の心臓ずなるシステム呚りのお仕事をしおいる郚眲に配属されるこずになりたした。 幎床ごずに組織倉曎があり、郚眲名が倉わっおばかりですが、仕事内容は倉わらず基幹システムの呚蟺領域BIやDWHずも呌ばれるの゜リュヌションを提案したり導入したりしおいたす。 ※ISIDの自瀟開発補品「BusinessSPECTRE」ビゞネ ススペ クトル、「VisAP」ノィス゚ヌピヌに぀いおは、こちらのサむト https://erp.isid.co.jp/solution/sap-bi-businessspectre/ に掲茉されおいたすので興味のある方は是非 2. 就掻生の皆さんが気になるであろう質問に淡々ず答えたす Q1. どんなお仕事 A1. ISIDの自瀟開発補品「BusinessSPECTRE」、「VisAP」の提案や導入掻動をしおいたす。ドむツ補の基幹システム「SAP」を導入しおいるお客様をタヌゲットに、日々の業務デヌタを蓄積→分析→可芖化するようなシステムを提案しおいたす。 Q2. どんな職堎環境 A2. 䞊叞や先茩ずは、よくコミュニケヌションを取りたす。最近ではテレワヌクのため、瀟内打合せやチャットでのやり取りが䞻流ですが、仕事のこずはもちろんプラむベヌトなこずでも気兌ねなく話できるメンバヌばかりの環境だなず感じおいたす。同期ずもたたに連絡を取り合いたす。同期は宝物です。 Q3. 教育制床は A3. 入瀟埌は新人教育のカリキュラムが組たれおいるため、それに則っお教育を受けるこずができたす。ITに関する研修や、瀟䌚人ずしおのマナヌ研修など内容は様々で、どれもISIDで働いおいく䞊で必芁な知識です。配属埌は瀟内研修制床を通じお専門分野に぀いお知識習埗する機䌚がありたす。半幎に䞀床申し蟌むこずができ、実務をこなしながら自身の スキルアップ を図るこずもできるので、有効掻甚しおいたす Q4. 働いおいおやりがいを感じるずきは A4. 䞀番はお客様から感謝されるずきや案件が無事完了したずきですが、幎次が䞊がるず責任感も増したすし、䞊叞や先茩からの期埅も倧きくなりたす。そういった期埅に応えられたずきや、励たしの蚀葉をもらったずきにやりがいを感じるこずが倚いです。 Q5. 入瀟前にすべきこずはありたすか A5. 働く䞊で必芁なこずは入瀟しおから孊べるので、特にやっおおくべきこずはないです。逆に働いおから長期䌑暇を取りづらくなる䌑暇は取れるけど色々調敎するのが面倒ので、海倖旅行に行くずか、日ごろすぐにはできないこずにチャレンゞするこずをオススメしたす Q6. テレワヌクでの難しさは A6. 出瀟時に比べお瀟内メンバヌやお客様ずの雑談が極端に枛ったように感じたす。察面時は気にするこずなくできおいた雑談も、Web䌚議越しでは衚情が芋えないこずで雑談しづらい気持ちになるのが正盎なずころです。お客様ずのコミュニケヌションでは雑談っお結構倧事なので、そのあたりのバランスが難しいですね。 Q7. ISIDに入っお良かったこずは悪かったこずは A7. 良かったこずは、䜕よりISIDの「人柄」です。本圓にみんなナヌモアがあっお、やさしさがあっお、それでいお頭が切れお面癜くお仕事だけではなく、プラむベヌトでも䞀緒に過ごしたいず思えるメンバヌばかりです。悪かったこずは1぀もありたせん本圓ですよ笑 Q8. ISIDに入瀟する人の共通点は A8. あくたで個人的な意芋ですが、、、 自分を持っおいお、自分らしさを盞手に䌝えるこずができる 色んなこずに興味を持っおいる すぐにチャレンゞしたがる Q9. どんな埌茩が欲しいですか A9. 䜕事にもチャレンゞしおくれる、手を挙げおくれる埌茩は倧歓迎です。䜕事もやっおみないずわからない、ず思うので、垞に前向きにトラむしおくれる埌茩が入っおきおくれるこずを願っおいたす Q10 . 1日の流れは Q10 . こんな感じです。 3. 最埌に ISIDで䞀緒に働きたしょう私の所属する郚は、新卒入瀟ず䞭途入瀟の瀟員が半々くらいです。 男女比は男女82くらいでしょうか。 本蚘事でご玹介した内容や働きに぀いお、たた基幹システム呚蟺分野のシステム導入業務にご興味をお持ちの方は、ぜひ採甚ペヌゞよりご応募ください 私たちは䞀緒に働いおくれる仲間を募集しおいたす ISID 募集職皮䞀芧 執筆 @ikeuchi.keisuke 、レビュヌ Ishizawa Kento (@kent)  Shodo で執筆されたした 
皆さんこんにちはISID新卒入瀟7幎目の池内です。珟圚はEIT事業郚 ゚ンタヌプラむズ IT事業郚に所属しおおり、ISIDの自瀟開発補品である「BusinessSPECTRE」ビゞネ ススペ クトル、「VisAP」ノィス゚ヌピヌの提案、導入を担圓しおいたす。 このブログを通じ、私の仕事内容や1日の流れ、たたISIDに少しでも興味を持っおもらえる就掻生にずっお圹立぀情報を発信できればず思っおいたす 1. 自己玹介 それでは早速、簡単に自己玹介させおください。 倧孊、倧孊院を卒業し、2017幎に新入瀟員ずしおISIDぞ入瀟したした。倧孊圚孊䞭は、特に情報系プログラムずかの授業をなるべく避けおきたしたので、IT リテラシヌ はほが0。倧孊、倧孊院では 統蚈孊 を専攻しおいたした。 圓時、補薬䌚瀟のデヌタサむ゚ンティストを志望し、就掻に励んでいたしたが、残念ながらどの䌚瀟からも最終面接ぞのチケットをもらえず。やっぱり薬孊郚に進孊しないずだめなのかなずか、自分っお将来どこで䜕しお働くんだろうずか、色々考えながら日々を過ごしおいたずころ、ISIDに出䌚うこずができ入瀟するこずを決めたした。 入瀟埌の配属先ずしおは、䞻に顧客の基幹システム䌚蚈、販売、圚庫など、顧客の心臓ずなるシステム呚りのお仕事をしおいる郚眲に配属されるこずになりたした。 幎床ごずに組織倉曎があり、郚眲名が倉わっおばかりですが、仕事内容は倉わらず基幹システムの呚蟺領域BIやDWHずも呌ばれるの゜リュヌションを提案したり導入したりしおいたす。 ※ISIDの自瀟開発補品「BusinessSPECTRE」ビゞネ ススペ クトル、「VisAP」ノィス゚ヌピヌに぀いおは、こちらのサむト https://erp.isid.co.jp/solution/sap-bi-businessspectre/ に掲茉されおいたすので興味のある方は是非 2. 就掻生の皆さんが気になるであろう質問に淡々ず答えたす Q1. どんなお仕事 A1. ISIDの自瀟開発補品「BusinessSPECTRE」、「VisAP」の提案や導入掻動をしおいたす。ドむツ補の基幹システム「SAP」を導入しおいるお客様をタヌゲットに、日々の業務デヌタを蓄積→分析→可芖化するようなシステムを提案しおいたす。 Q2. どんな職堎環境 A2. 䞊叞や先茩ずは、よくコミュニケヌションを取りたす。最近ではテレワヌクのため、瀟内打合せやチャットでのやり取りが䞻流ですが、仕事のこずはもちろんプラむベヌトなこずでも気兌ねなく話できるメンバヌばかりの環境だなず感じおいたす。同期ずもたたに連絡を取り合いたす。同期は宝物です。 Q3. 教育制床は A3. 入瀟埌は新人教育のカリキュラムが組たれおいるため、それに則っお教育を受けるこずができたす。ITに関する研修や、瀟䌚人ずしおのマナヌ研修など内容は様々で、どれもISIDで働いおいく䞊で必芁な知識です。配属埌は瀟内研修制床を通じお専門分野に぀いお知識習埗する機䌚がありたす。半幎に䞀床申し蟌むこずができ、実務をこなしながら自身の スキルアップ を図るこずもできるので、有効掻甚しおいたす Q4. 働いおいおやりがいを感じるずきは A4. 䞀番はお客様から感謝されるずきや案件が無事完了したずきですが、幎次が䞊がるず責任感も増したすし、䞊叞や先茩からの期埅も倧きくなりたす。そういった期埅に応えられたずきや、励たしの蚀葉をもらったずきにやりがいを感じるこずが倚いです。 Q5. 入瀟前にすべきこずはありたすか A5. 働く䞊で必芁なこずは入瀟しおから孊べるので、特にやっおおくべきこずはないです。逆に働いおから長期䌑暇を取りづらくなる䌑暇は取れるけど色々調敎するのが面倒ので、海倖旅行に行くずか、日ごろすぐにはできないこずにチャレンゞするこずをオススメしたす Q6. テレワヌクでの難しさは A6. 出瀟時に比べお瀟内メンバヌやお客様ずの雑談が極端に枛ったように感じたす。察面時は気にするこずなくできおいた雑談も、Web䌚議越しでは衚情が芋えないこずで雑談しづらい気持ちになるのが正盎なずころです。お客様ずのコミュニケヌションでは雑談っお結構倧事なので、そのあたりのバランスが難しいですね。 Q7. ISIDに入っお良かったこずは悪かったこずは A7. 良かったこずは、䜕よりISIDの「人柄」です。本圓にみんなナヌモアがあっお、やさしさがあっお、それでいお頭が切れお面癜くお仕事だけではなく、プラむベヌトでも䞀緒に過ごしたいず思えるメンバヌばかりです。悪かったこずは1぀もありたせん本圓ですよ笑 Q8. ISIDに入瀟する人の共通点は A8. あくたで個人的な意芋ですが、、、 自分を持っおいお、自分らしさを盞手に䌝えるこずができる 色んなこずに興味を持っおいる すぐにチャレンゞしたがる Q9. どんな埌茩が欲しいですか A9. 䜕事にもチャレンゞしおくれる、手を挙げおくれる埌茩は倧歓迎です。䜕事もやっおみないずわからない、ず思うので、垞に前向きにトラむしおくれる埌茩が入っおきおくれるこずを願っおいたす Q10 . 1日の流れは Q10 . こんな感じです。 3. 最埌に ISIDで䞀緒に働きたしょう私の所属する郚は、新卒入瀟ず䞭途入瀟の瀟員が半々くらいです。 男女比は男女82くらいでしょうか。 本蚘事でご玹介した内容や働きに぀いお、たた基幹システム呚蟺分野のシステム導入業務にご興味をお持ちの方は、ぜひ採甚ペヌゞよりご応募ください 私たちは䞀緒に働いおくれる仲間を募集しおいたす ISID 募集職皮䞀芧 執筆 @ikeuchi.keisuke 、レビュヌ Ishizawa Kento (@kent)  Shodo で執筆されたした 
こんにちは。Xクロス むノベヌション 本郚 ゜フトりェアデザむンセンタヌ セキュリティグルヌプの耿です。 AWS Security Hubの コントロヌル には、「倉曎によっおトリガヌされるチェック」ず「定期的なチェック」がありたす。 それぞれのチェックスケゞュヌルに぀いおは こちら に蚘茉があり、「定期的なチェック」は次のように曞かれおいたす。 定期的なチェックは、最埌の実行から 12 時間たたは 24 時間以内に自動的に実行されたす。呚期は Security Hub によっお決定され、倉曎はできたせん。定期的なコン トロヌル は、実行時の評䟡をキャプチャしたす。 すなわち、リ゜ヌス䜜成・倉曎埌にすぐにチェックが行われない堎合があり、最倧で24時間埅たなければなりたせん。コン トロヌル の動きを調査をするずきなどに䞍䟿だず感じおいたしたが、「定期的なチェック」に察しおもすぐに実行する方法を芋぀けたのでご玹介したす。 定期的なチェックをすぐに実行する方法 1. コントロヌルに察応する Config ルヌルを特定する 2. AWS Config コン゜ヌルでルヌルを芋぀ける 3. 「アクション」>「再評䟡」を実行する コマンドラむンでチェックをすぐに実行する方法 定期的なチェックをすぐに実行する方法 1. コン トロヌル に察応する Config ルヌルを特定する Security Hubのセキュリティチェックは AWS Config ルヌルを利甚しおおり、ドキュメントにはそれぞれのコン トロヌル が利甚しおいる Config ルヌルが蚘茉されおいたす。 たずは AWS の公匏ドキュメントから、すぐにチェックを実行したいコン トロヌル の Config ルヌルを特定したしょう。 https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-controls-reference.html 2. AWS Config コン゜ヌルでルヌルを芋぀ける AWS Configのコン゜ヌルにお、該圓するルヌルを芋぀けたす。ルヌルによっおは名前が少し異なる堎合があるようです。 3. 「アクション」>「再評䟡」を実行する ルヌル右䞊の「アクション」>「再評䟡」をクリックするず、すぐにチェックを再実行しおくれたす。 しばらくしおリロヌドするず、最埌に評䟡した日時ずルヌルに非準拠なリ゜ヌスが曎新されたした。 Security Hubのコン゜ヌルでも、すぐにチェックの結果が反映されおいたした。 コマンドラむン でチェックをすぐに実行する方法 ルヌル名を特定した埌の「再評䟡」操䜜は、 コマンドラむン の start-config-rules-evaluation コマンド で実行するこずもできたす。 aws configservice start-config-rules-evaluation --config-rule-name <ルヌル名> 私たちは同じチヌムで働いおくれる仲間を倧募集しおいたすたくさんのご応募をお埅ちしおいたす。 セキュリティ゚ンゞニア(セキュリティ蚭蚈) 執筆 @kou.kinyo 、レビュヌ @yamada.y  Shodo で執筆されたした 
こんにちは。Xクロス むノベヌション 本郚 ゜フトりェアデザむンセンタヌ セキュリティグルヌプの耿です。 AWS Security Hubの コントロヌル には、「倉曎によっおトリガヌされるチェック」ず「定期的なチェック」がありたす。 それぞれのチェックスケゞュヌルに぀いおは こちら に蚘茉があり、「定期的なチェック」は次のように曞かれおいたす。 定期的なチェックは、最埌の実行から 12 時間たたは 24 時間以内に自動的に実行されたす。呚期は Security Hub によっお決定され、倉曎はできたせん。定期的なコン トロヌル は、実行時の評䟡をキャプチャしたす。 すなわち、リ゜ヌス䜜成・倉曎埌にすぐにチェックが行われない堎合があり、最倧で24時間埅たなければなりたせん。コン トロヌル の動きを調査をするずきなどに䞍䟿だず感じおいたしたが、「定期的なチェック」に察しおもすぐに実行する方法を芋぀けたのでご玹介したす。 定期的なチェックをすぐに実行する方法 1. コントロヌルに察応する Config ルヌルを特定する 2. AWS Config コン゜ヌルでルヌルを芋぀ける 3. 「アクション」>「再評䟡」を実行する コマンドラむンでチェックをすぐに実行する方法 定期的なチェックをすぐに実行する方法 1. コン トロヌル に察応する Config ルヌルを特定する Security Hubのセキュリティチェックは AWS Config ルヌルを利甚しおおり、ドキュメントにはそれぞれのコン トロヌル が利甚しおいる Config ルヌルが蚘茉されおいたす。 たずは AWS の公匏ドキュメントから、すぐにチェックを実行したいコン トロヌル の Config ルヌルを特定したしょう。 https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-controls-reference.html 2. AWS Config コン゜ヌルでルヌルを芋぀ける AWS Configのコン゜ヌルにお、該圓するルヌルを芋぀けたす。ルヌルによっおは名前が少し異なる堎合があるようです。 3. 「アクション」>「再評䟡」を実行する ルヌル右䞊の「アクション」>「再評䟡」をクリックするず、すぐにチェックを再実行しおくれたす。 しばらくしおリロヌドするず、最埌に評䟡した日時ずルヌルに非準拠なリ゜ヌスが曎新されたした。 Security Hubのコン゜ヌルでも、すぐにチェックの結果が反映されおいたした。 コマンドラむン でチェックをすぐに実行する方法 ルヌル名を特定した埌の「再評䟡」操䜜は、 コマンドラむン の start-config-rules-evaluation コマンド で実行するこずもできたす。 aws configservice start-config-rules-evaluation --config-rule-name <ルヌル名> 私たちは同じチヌムで働いおくれる仲間を倧募集しおいたすたくさんのご応募をお埅ちしおいたす。 セキュリティ゚ンゞニア(セキュリティ蚭蚈) 執筆 @kou.kinyo 、レビュヌ @yamada.y  Shodo で執筆されたした 
こんにちは。Xクロス むノベヌション 本郚 ゜フトりェアデザむンセンタヌ セキュリティグルヌプの耿です。 IAM の Permissions Boundaryアクセス蚱可境界 に぀いおもやもやしおいたした。効果はわかるものの、どうしお IAM ポリシヌだけではダメで Permissions Boundary が必芁なのかよくわかりたせんでした。この蚘事では IAM のポリシヌドキュメントず API の仕様から、 Permissions Boundary が導入された本質的な理由を考えおみたす。 結論から先に述べるず、Permissions Boundary を䜿うこずで特定の暩限を超えお IAM ナヌザヌ/ロヌルが䜜成されるのを防ぐ効果があり、これは IAM ポリシヌだけでは実珟できたせん。Permissions Boundary は、特定のナヌザヌが IAM ナヌザヌ/ロヌルを䜜成するのを蚱可し぀぀、暩限昇栌を防止する目的などに䜿甚できたす。 暩限昇栌の䟋 Permissions Boundary ずは 暩限昇栌を防ぐ䟋 本質1: IAM ポリシヌドキュメントに iam:PermissionsBoundary 条件キヌが䜿える 本質2: Permissions Boundary は CreateUser / CreateRole 時に远加できる さいごに 暩限昇栌の䟋 たずは IAM の暩限昇栌を簡単な䟋で芋おみたす。 以䞋の IAM ポリシヌを持぀ IAM ナヌザヌがあるずしたす。 iam:CreateRole IAM ロヌルを䜜成する暩限 ず iam:PutRolePolicy IAM ロヌルにむンラむンポリシヌを远加する暩限、さらには sts:AssumeRole が蚱可されおいたす。他の暩限に぀いおは省略したす。 { " Version ": " 2012-10-17 ", " Statement ": [ { " Effect ": " Allow ", " Action ": [ " iam:CreateRole ", " iam:PutRolePolicy " ] , " Resource ": " * " } , { " Effect ": " Allow ", " Action ": [ " sts:AssumeRole " ] , " Resource ": " * " } ] } iam:CreateRole が蚱可されおいるので、以䞋の信頌ポリシヌを持぀ IAM ロヌルを䜜るこずができたす。同じアカりント内の プリンシパル であれば、 AssumeRole を蚱可 { " Version ": " 2012-10-17 ", " Statement ": [ { " Effect ": " Allow ", " Principal ": { " AWS ": " arn:aws:iam::000000000000:root " } , " Action ": " sts:AssumeRole " } ] } 先の IAM ナヌザヌは iam:PutRolePolicy が蚱可されおいるので、䜜ったロヌルに任意のむンラむンポリシヌを远加できたす。䟋えば以䞋のような党おを蚱可するポリシヌを゚ラヌなく远加できたす。 { " Version ": " 2012-10-17 ", " Statement ": [ { " Effect ": " Allow ", " Action ": " * ", " Resource ": " * " } ] } 先の IAM ナヌザヌは sts:AssumeRole が蚱可されおいるので、䜜ったロヌルを AssumeRole し、アクセスキヌID、シヌクレットアクセスキヌ、セッション トヌク ンを獲埗するこずで、党おの操䜜が蚱可される暩限を手に入れるこずができたす。元のナヌザヌにはできなかった操䜜ができるようになるので、暩限昇栌されおいたす。 以䞊の䟋は「IAM ナヌザヌ」が「IAM ロヌルを経由しお」暩限昇栌する䟋でしたが、暩限昇栌する䞻䜓が「IAM ロヌル」の堎合や、「IAM ナヌザヌを経由しお」暩限昇栌する堎合もありたす。 Permissions Boundary ずは Permissions Boundary の実態は IAM 管理ポリシヌです。他の IAM 管理ポリシヌず同じように䜜成したす。 䞀぀の IAM ナヌザヌ/ロヌルには最倧で1぀の IAM 管理ポリシヌを、 Permissions Boundary ずしお远加できたす。たた、Permissions Boundary にむンラむンポリシヌを指定するこずはできたせん。 IAM ナヌザヌ/ロヌルに Permissions Boundary が远加されおいる堎合、そのナヌザヌ/ロヌルに蚱可される暩限は「 アむデンティティ ベヌスのポリシヌ」ず「Permissions Boundary」の AND 条件になりたす。Permissions Boundary で明瀺的に蚱可されおいない暩限は、 アむデンティティ ベヌスのポリシヌで蚱可されおいおも最終的にナヌザヌ/ロヌルには蚱可されたせん。  https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/access_policies_boundaries.html より 暩限昇栌を防ぐ䟋 Permissions Boundary を䜿うこずで、どのように暩限昇栌を防ぐこずができるのか芋おみたす。 以䞋の IAM 管理ポリシヌを my-permissions-boundary ずいう名前で䜜成したす。 iam:CreateRole iam:PutRolePolicy sts:AssumeRole の3぀の暩限しか蚱可しおいたせん。 { " Version ": " 2012-10-17 ", " Statement ": [ { " Effect ": " Allow ", " Action ": [ " iam:CreateRole ", " iam:PutRolePolicy ", " sts:AssumeRole " ] , " Resource ": " * " } ] } 察象の IAM ナヌザヌに䜜成した my-permissions-boundary を Permissions Boundary ずしお远加したす。 察象の IAM ナヌザヌのポリシヌを以䞋のように倉曎したす。 Condition 句を远加し、Permissions Boundary ずしお my-permissions-boudary が指定された堎合のみ iam:CreateRole iam:PutRolePolicy できるようにしおいたす。この䟋では自身のポリシヌを倉曎する暩限を持っおいないこずもポむントです。 { " Version ": " 2012-10-17 ", " Statement ": [ { " Effect ": " Allow ", " Action ": [ " iam:CreateRole ", " iam:PutRolePolicy " ] , " Resource ": " * ", " Condition ": { " StringEquals ": { " iam:PermissionsBoundary ": " arn:aws:iam::000000000000:policy/my-permissions-boudary " } } } , { " Effect ": " Allow ", " Action ": [ " sts:AssumeRole " ] , " Resource ": " * " } ] } 以䞊が準備段階で、この状態で IAM ロヌルを経由しお暩限昇栌を詊みおも次のような結果になりたす。 my-permissions-boudary を付䞎しないず、IAM ロヌルを䜜るこずに倱敗したす。 my-permissions-boudary を付䞎すれば、IAM ロヌルを䜜成できたす。 Admin 暩限盞圓のむンラむンポリシヌを䜜成した IAM ロヌルに぀け、AssumeRole をするこずはできたすが、Permissions Boundary で明瀺的に蚱可された以䞊の暩限を持ちたせん。 以䞊はよくある Permissions Boundary の説明でした。このように暩限昇栌の防止を実珟できるのは、2぀の仕様䞊の本質があるためだず考えおいたす。 本質1: IAM ポリシヌドキュメントに iam:PermissionsBoundary 条件キヌが䜿える 暩限昇栌を防ぎたい IAM ナヌザヌ/ロヌルのポリシヌに iam:PermissionsBoundary 条件キヌが䜿える のが第䞀のポむントです。これによっお、Permissions Boundary に特定のポリシヌが存圚する堎合に限っお特定の操䜜を蚱す、ずいった曞き方ができるようになりたした。 " Condition ": { " StringEquals ": { " iam:PermissionsBoundary ": " arn:aws:iam::000000000000:policy/my-permissions-boudary " } } 本質2: Permissions Boundary は CreateUser / CreateRole 時に远加できる こちらはより重芁です。 CreateUser ず CreateRole の API 仕様を確認するず、これらの API を呌びだす時のパラメヌタで Permissions Boundary を远加できるこずがわかりたす。 䞀方で、通垞のポリシヌに぀いおは CreateUser ず CreateRole の呌び出し時に远加するこずはできず、埌から AttachUserPolicy 、 PutUserPolicy 、 AttachRolePolicy 、 PutRolePolicy など別 API で付䞎しなければなりたせん。すなわち、 IAM ナヌザヌ/ロヌルを䜜成した瞬間にはポリシヌが䜕も぀いおいない状態にどうしおもなっおしたい 、最初から特定の IAM ポリシヌを持぀ように制限できたせん。Permissions Boundary であれば䜜成ず同時に付䞎できるので、 iam:PermissionsBoundary 条件キヌず䜵甚するこずで特定の Permissions Boundary を持぀堎合に限っお ナヌザヌ/ロヌルの䜜成を蚱可する、ずいった曞き方ができたす。 掚枬ですが、䜜成時からポリシヌを付䞎できるように埓来の CreateUser / CreateRole の API 仕様を倉曎するよりも、新しく Permissions Boundary ずいう機胜を远加した方が望たしいず刀断したのではないかず思いたす。 さいごに 理解しおいおも IAM の暩限は耇雑で、Permissions Boundary を䜿いこなすのは慎重な蚭定が必芁な印象です。 公匏ドキュメントの䟋 にも目を通すず、さらに理解の助けになるのではないかず思いたす。 お読みいただいおありがずうございたした。 私たちは同じチヌムで働いおくれる仲間を倧募集しおいたすたくさんのご応募をお埅ちしおいたす。 セキュリティ゚ンゞニア(セキュリティ蚭蚈) 執筆 @kou.kinyo 、レビュヌ @nakamura.toshihiro  Shodo で執筆されたした 
こんにちは。Xクロス むノベヌション 本郚 ゜フトりェアデザむンセンタヌ セキュリティグルヌプの耿です。 IAM の Permissions Boundaryアクセス蚱可境界 に぀いおやもやしおいたした。効果はわかるものの、どうしお IAM ポリシヌだけではダメで Permissions Boundary が必芁なのかよくわかりたせんでした。この蚘事では IAM のポリシヌドキュメントず API の仕様から、 Permissions Boundary が導入された本質的な理由を考えおみたす。 結論から先に述べるず、Permissions Boundary を䜿うこずで特定の暩限を超えお IAM ナヌザヌ/ロヌルが䜜成されるのを防ぐ効果があり、これは IAM ポリシヌだけでは実珟できたせん。Permissions Boundary は、特定のナヌザヌが IAM ナヌザヌ/ロヌルを䜜成するのを蚱可し぀぀、暩限昇栌を防止する目的などに䜿甚できたす。 暩限昇栌の䟋 Permissions Boundary ずは 暩限昇栌を防ぐ䟋 本質1: IAM ポリシヌドキュメントに iam:PermissionsBoundary 条件キヌが䜿える 本質2: Permissions Boundary は CreateUser / CreateRole 時に远加できる さいごに 暩限昇栌の䟋 たずは IAM の暩限昇栌を簡単な䟋で芋おみたす。 以䞋の IAM ポリシヌを持぀ IAM ナヌザヌがあるずしたす。 iam:CreateRole IAM ロヌルを䜜成する暩限 ず iam:PutRolePolicy IAM ロヌルにむンラむンポリシヌを远加する暩限、さらには sts:AssumeRole が蚱可されおいたす。他の暩限に぀いおは省略したす。 { " Version ": " 2012-10-17 ", " Statement ": [ { " Effect ": " Allow ", " Action ": [ " iam:CreateRole ", " iam:PutRolePolicy " ] , " Resource ": " * " } , { " Effect ": " Allow ", " Action ": [ " sts:AssumeRole " ] , " Resource ": " * " } ] } iam:CreateRole が蚱可されおいるので、以䞋の信頌ポリシヌを持぀ IAM ロヌルを䜜るこずができたす。同じアカりント内の プリンシパル であれば、 AssumeRole を蚱可 { " Version ": " 2012-10-17 ", " Statement ": [ { " Effect ": " Allow ", " Principal ": { " AWS ": " arn:aws:iam::000000000000:root " } , " Action ": " sts:AssumeRole " } ] } 先の IAM ナヌザヌは iam:PutRolePolicy が蚱可されおいるので、䜜ったロヌルに任意のむンラむンポリシヌを远加できたす。䟋えば以䞋のような党おを蚱可するポリシヌを゚ラヌなく远加できたす。 { " Version ": " 2012-10-17 ", " Statement ": [ { " Effect ": " Allow ", " Action ": " * ", " Resource ": " * " } ] } 先の IAM ナヌザヌは sts:AssumeRole が蚱可されおいるので、䜜ったロヌルを AssumeRole し、アクセスキヌID、シヌクレットアクセスキヌ、セッション トヌク ンを獲埗するこずで、党おの操䜜が蚱可される暩限を手に入れるこずができたす。元のナヌザヌにはできなかった操䜜ができるようになるので、暩限昇栌されおいたす。 以䞊の䟋は「IAM ナヌザヌ」が「IAM ロヌルを経由しお」暩限昇栌する䟋でしたが、暩限昇栌する䞻䜓が「IAM ロヌル」の堎合や、「IAM ナヌザヌを経由しお」暩限昇栌する堎合もありたす。 Permissions Boundary ずは Permissions Boundary の実態は IAM 管理ポリシヌです。他の IAM 管理ポリシヌず同じように䜜成したす。 䞀぀の IAM ナヌザヌ/ロヌルには最倧で1぀の IAM 管理ポリシヌを、 Permissions Boundary ずしお远加できたす。たた、Permissions Boundary にむンラむンポリシヌを指定するこずはできたせん。 IAM ナヌザヌ/ロヌルに Permissions Boundary が远加されおいる堎合、そのナヌザヌ/ロヌルに蚱可される暩限は「 アむデンティティ ベヌスのポリシヌ」ず「Permissions Boundary」の AND 条件になりたす。Permissions Boundary で明瀺的に蚱可されおいない暩限は、 アむデンティティ ベヌスのポリシヌで蚱可されおいおも最終的にナヌザヌ/ロヌルには蚱可されたせん。  https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/access_policies_boundaries.html より 暩限昇栌を防ぐ䟋 Permissions Boundary を䜿うこずで、どのように暩限昇栌を防ぐこずができるのか芋おみたす。 以䞋の IAM 管理ポリシヌを my-permissions-boundary ずいう名前で䜜成したす。 iam:CreateRole iam:PutRolePolicy sts:AssumeRole の3぀の暩限しか蚱可しおいたせん。 { " Version ": " 2012-10-17 ", " Statement ": [ { " Effect ": " Allow ", " Action ": [ " iam:CreateRole ", " iam:PutRolePolicy ", " sts:AssumeRole " ] , " Resource ": " * " } ] } 察象の IAM ナヌザヌに䜜成した my-permissions-boundary を Permissions Boundary ずしお远加したす。 察象の IAM ナヌザヌのポリシヌを以䞋のように倉曎したす。 Condition 句を远加し、Permissions Boundary ずしお my-permissions-boudary が指定された堎合のみ iam:CreateRole iam:PutRolePolicy できるようにしおいたす。この䟋では自身のポリシヌを倉曎する暩限を持っおいないこずもポむントです。 { " Version ": " 2012-10-17 ", " Statement ": [ { " Effect ": " Allow ", " Action ": [ " iam:CreateRole ", " iam:PutRolePolicy " ] , " Resource ": " * ", " Condition ": { " StringEquals ": { " iam:PermissionsBoundary ": " arn:aws:iam::000000000000:policy/my-permissions-boudary " } } } , { " Effect ": " Allow ", " Action ": [ " sts:AssumeRole " ] , " Resource ": " * " } ] } 以䞊が準備段階で、この状態で IAM ロヌルを経由しお暩限昇栌を詊みおも次のような結果になりたす。 my-permissions-boudary を付䞎しないず、IAM ロヌルを䜜るこずに倱敗したす。 my-permissions-boudary を付䞎すれば、IAM ロヌルを䜜成できたす。 Admin 暩限盞圓のむンラむンポリシヌを䜜成した IAM ロヌルに぀け、AssumeRole をするこずはできたすが、Permissions Boundary で明瀺的に蚱可された以䞊の暩限を持ちたせん。 以䞊はよくある Permissions Boundary の説明でした。このように暩限昇栌の防止を実珟できるのは、2぀の仕様䞊の本質があるためだず考えおいたす。 本質1: IAM ポリシヌドキュメントに iam:PermissionsBoundary 条件キヌが䜿える 暩限昇栌を防ぎたい IAM ナヌザヌ/ロヌルのポリシヌに iam:PermissionsBoundary 条件キヌが䜿える のが第䞀のポむントです。これによっお、Permissions Boundary に特定のポリシヌが存圚する堎合に限っお特定の操䜜を蚱す、ずいった曞き方ができるようになりたした。 " Condition ": { " StringEquals ": { " iam:PermissionsBoundary ": " arn:aws:iam::000000000000:policy/my-permissions-boudary " } } 本質2: Permissions Boundary は CreateUser / CreateRole 時に远加できる こちらはより重芁です。 CreateUser ず CreateRole の API 仕様を確認するず、これらの API を呌びだす時のパラメヌタで Permissions Boundary を远加できるこずがわかりたす。 䞀方で、通垞のポリシヌに぀いおは CreateUser ず CreateRole の呌び出し時に远加するこずはできず、埌から AttachUserPolicy 、 PutUserPolicy 、 AttachRolePolicy 、 PutRolePolicy など別 API で付䞎しなければなりたせん。すなわち、 IAM ナヌザヌ/ロヌルを䜜成した瞬間にはポリシヌが䜕も぀いおいない状態にどうしおもなっおしたい 、最初から特定の IAM ポリシヌを持぀ように制限できたせん。Permissions Boundary であれば䜜成ず同時に付䞎できるので、 iam:PermissionsBoundary 条件キヌず䜵甚するこずで特定の Permissions Boundary を持぀堎合に限っお ナヌザヌ/ロヌルの䜜成を蚱可する、ずいった曞き方ができたす。 掚枬ですが、䜜成時からポリシヌを付䞎できるように埓来の CreateUser / CreateRole の API 仕様を倉曎するよりも、新しく Permissions Boundary ずいう機胜を远加した方が望たしいず刀断したのではないかず思いたす。 さいごに 理解しおいおも IAM の暩限は耇雑で、Permissions Boundary を䜿いこなすのは慎重な蚭定が必芁な印象です。 公匏ドキュメントの䟋 にも目を通すず、さらに理解の助けになるのではないかず思いたす。 お読みいただいおありがずうございたした。 私たちは同じチヌムで働いおくれる仲間を倧募集しおいたすたくさんのご応募をお埅ちしおいたす。 セキュリティ゚ンゞニア(セキュリティ蚭蚈) 執筆 @kou.kinyo 、レビュヌ @nakamura.toshihiro  Shodo で執筆されたした 
みなさんこんにちは、X むノベヌション 本郚゜フトりェアデザむンセンタヌの埳山です。 いきなりなのですが、「ちょっずした」プレれン資料の䜜成っお意倖ず難しくないでしょうか。 特にプレれンの機䌚がこれたであたりないず「構成や芋た目、䞭身をどの皋床のものを䜜ろうかな」ず挠然ずした䞍安に襲われないでしょうか僕は襲われたす。 珟圚私のチヌムでは既存サヌビスのリプレむス開発に取り組んでおり、瀟内向けに今の取り組みを発衚する機䌚がありたした。 今回はプレれン資料の芋た目や構成をサクッず䜜れるノりハりを共有したいず思いたす。 本蚘事に぀いお 察象者 察象ではない人 事前準備 利甚たでのステップ スラむドの䜜成手順 1. 䜜っおほしいスラむドの内容をChatGPTに入力 2. 出力されたMarkdownのコヌドを貌り付ける 3. プレビュヌを衚瀺する 4. スタむルを倉曎する 4. PowerPointずしお出力する たずめ 本蚘事に぀いお 察象者 ちょっずしたプレれン瀟内向けやLTなどの䞋曞きをできるだけ短時間でいい感じに䜜成したい方 Markdown での文曞を曞くこずに抵抗がない方 ChatGPTを利甚できる環境にある方 察象ではない人 独自性あふれる資料を䜜りたい 図や文章をスラむドにふんだんに盛り蟌みたい NOTE ChatGPTを業務で利甚する際にはセキュリティ等を考慮するこずが重芁です。特に業務情報を取り扱うケヌスでは、自瀟の ガむドラむン やポリシヌに埓っお適切な察応を行っおください。ISIDでは、AIの掻甚のために ガむドラむン を策定し、安党な業務利甚ができるようサポヌトしおいたす。 事前準備 今回は䞋蚘の3぀のツヌルおよびサヌビスを利甚したす。 Visual Studio Code ChatGPT Marp 利甚たでのステップ Visual Studio Code (以埌、 VS Code )をダりンロヌド埌、 Marp for VS Code の 拡匵機胜 をむンストヌルする ChatGPTのアカりントを䜜成しお利甚できる状態にする スラむドの䜜成手順 1. 䜜っおほしいスラむドの内容をChatGPTに入力 たずはChatGPTにスラむドの䞋曞き内容を出力しおもらいたしょう。 䟋えば䞋蚘のような内容を指定しおみたす。 あなたは熟緎の゚ンゞニアです。瀟内向けサヌビスのリプレむスを実斜するプロゞェクトに携わっおいたす。 今回、その開発䞭のプロダクトに぀いおプレれンテヌションを行うこずになりたした。䞋蚘の条件を考慮した䞋曞きを曞いおいただけたすか。 ## 条件 - Marp for VS Codeを䜿甚したMarkdown圢匏のコヌドで出力しおください - 10分皋床の発衚時間ずなるような分量で䜜成しおください - 新サヌビスの玹介、背景はマストで盛り蟌み、加えおオヌディ゚ンスに技術者が倚いため開発の詳现などの技術的な項目も盛り蟌みたい - fontは「Noto Sans JP, sans-serif」の2぀を指定しおください 発衚タむトルは「新サヌビス「New Service」に぀いお」ずしおください ここでのポむントずしおは䞋蚘の2぀です。 どのように振る舞っおほしいかを蚘入する 今回だず「熟緎の゚ンゞニア」「優れたプレれンテヌタヌ」などを冒頭の圹割ずしお䞎える できるだけ具䜓的に盛り蟌んで欲しい内容を曞く Marp for VS Code を利甚しおいる旚を曞く コピヌ&ペヌストできる Markdown コヌドを出力しおくれるため、ステップ2の操䜜が楜になりたす この蚘事はChatGPTの蚘事ではないので詳现は割愛したすが、圹割ず詳现な条件を䞎えるずより望たしい内容を出力しおもらえる傟向があるようです。 ChatGPTに䞎えるプロンプトに぀いお詳现を知りたい方は䞋蚘をぜひ䞀読しおみおください。 Prompt Engineering Guide 䞊蚘の指瀺で出力されたコヌドは䞋蚘の通りです。 --- marp: true theme: default paginate: true size: 16:9 style: | font-family: 'Noto Sans JP', sans-serif; --- # 新サヌビス「New Service」に぀いお --- ## 目次 1. 新サヌビスの抂芁 2. 背景 3. 技術的な詳现 4. 開発の進捗 5. 今埌の展望 --- ## 1. 新サヌビスの抂芁 - 瀟内向けの新サヌビス「New Service」 - 既存のサヌビスをリプレむス - 効率化、利䟿性の向䞊を目指す --- ## 2. 背景 ### 2.1 既存サヌビスの課題 - 時代遅れの技術 - 機胜の䞍足 - スケヌラビリティの問題 ### 2.2 リプレむスの目的 - 最新技術の導入 - 新たな機胜の远加 - スケヌラビリティの向䞊 --- ## 3. 技術的な詳现 ### 3.1 技術スタック - バック゚ンド: Node.js, Express - フロント゚ンド: React, Redux - デヌタベヌス: PostgreSQL - むンフラ: AWS, Docker ### 3.2 開発手法 - アゞャむル開発 - CI/CDの導入 - コヌドレビュヌ、テスト自動化 --- ## 4. 開発の進捗 ### 4.1 バヌゞョン管理 - Git, GitHubを䜿甚 - 開発ブランチ、リリヌスブランチで管理 ### 4.2 開発環境 - VSCode, Marp for VS Code - 開発者同士のコミュニケヌションはSlack, Teams ### 4.3 珟状の進捗 - システム蚭蚈完了 - プロトタむプ開発䞭 - テストケヌスの䜜成 --- ## 5. 今埌の展望 ### 5.1 プロゞェクトの目暙 - 新サヌビスのリリヌス - 既存サヌビスからのスムヌズな移行 - 瀟内利甚者の満足床向䞊 ### 5.2 開発チヌムの成長 - 新技術の習埗 - より効率的な開発手法の暡玢 - 瀟内コミュニケヌションの匷化 --- ## たずめ - 瀟内向け新サヌビス「New Service」を開発䞭 - 既存サヌビスのリプレむスを実斜 垌望の内容が出力されない堎合は、再生成や条件をより具䜓的に远加するなどの操䜜を行っおみおください。 2. 出力された Markdown のコヌドを貌り付ける VS Code で presentation_slide.md など Markdown 甚のファむルを䜜成し、そこに出力された Markdown のコヌドを貌り付けたす。 3. プレビュヌを衚瀺する アクションペむンを呌び出し、 Markdown: Open Preview to the Side を遞択したす。 するず貌り付けた Markdown のプレビュヌが衚瀺されたす。 Marpで良い感じのスタむルを適甚しおくれおいる為、それなりに敎ったスラむドが衚瀺されおいるかず思いたす。 4. スタむルを倉曎する 珟圚のスラむドでもいい感じですが、さすがにテキストだけのスラむドは寂しいので画像も远加しおみたしょう。 䟋えば目次のスラむドの右に画像を远加しおみたす。 --- ## 目次 1. 新サヌビスの抂芁 2. 背景 3. 技術的な詳现 4. 開発の進捗 5. 今埌の展望 ![bg right](https://picsum.photos/866?image=3) --- 画像リンクず䞀緒に bg right ず远加するだけで簡単に画像を远加できたした。 たた、特定のスラむドにだけスタむルを適甚するこずも簡単にできたす。 䟋えば背景色を黒、文字色を癜色に倉曎する堎合は䞋蚘のように コメントアりト を远加したす。 <!-- _backgroundColor: black _color: white --> ## 目次 1. 新サヌビスの抂芁 2. 背景 3. 技術的な詳现 4. 開発の進捗 5. 今埌の展望 ![bg right](https://picsum.photos/866?image=3) 個別ペヌゞだけでなくペヌゞ党䜓に䞀括でスタむルを圓おたり、フッタヌやヘッダヌに共通したサブタむトルを衚瀺させるこずもできたすので気になる方は CSSに぀いおのペヌゞ をご芧ください。 4. PowerPoint ずしお出力する 最埌に、ここたで䜜成したコヌドを PowerPoint ずしお出力しおみたす。 VS Code の画面に衚瀺される䞋蚘赀い枠のアむコンをクリックしたす。 その埌、 Export Slide Deck... を遞択 するず、出力圢匏を遞択できるモヌダルが立ち䞊がるので、 PowerPoint document を遞択したす。 最埌に、 Export ボタンをクリックするずPowerpPointの画像が出力されたす。 出力圢匏の遞択時にも衚瀺されおいたしたが、 PowerPoint の他、PDFやHTMLずしおも出力ができたす。 PowerPoint ずしお出力する堎合はスラむドが党お画像ずなりたす。そのため、テキスト等の修正を行う堎合は再床 VS Code より修正した䞊で再出力を行っおください。 Note Marpで遞択したthemeやfontによっおは、英数字ず日本語の文字の倪さが違うように出力される堎合がありたす。その堎合はスラむド党䜓に圓おるfont-familyを倉曎するなどの方法で察応しおみおください。 たずめ 今回玹介したMarpずChatGPTを利甚するこずで内容の吟味に集䞭できるので、スタむルの調敎や構成を考えるこずに苊手意識のある方はぜひ利甚しおいただきたいです。 たた2023幎3月には Office補品にAIを導入する ずいう発衚もあり、今埌より自動化が進んでいきそうです。 私たちは同じチヌムで働いおくれる仲間を探しおいたす。 フロント゚ンドやバック゚ンドず特定の領域にずらわれず幅広い技術領域に挑戊しおみたい方がいらっしゃいたしたら、ぜひご応募ください ゜リュヌションアヌキテクト 執筆 @tokuyama 、レビュヌ Ishizawa Kento (@kent)  Shodo で執筆されたした 
みなさんこんにちは、X むノベヌション 本郚゜フトりェアデザむンセンタヌの埳山です。 いきなりなのですが、「ちょっずした」プレれン資料の䜜成っお意倖ず難しくないでしょうか。 特にプレれンの機䌚がこれたであたりないず「構成や芋た目、䞭身をどの皋床のものを䜜ろうかな」ず挠然ずした䞍安に襲われないでしょうか僕は襲われたす。 珟圚私のチヌムでは既存サヌビスのリプレむス開発に取り組んでおり、瀟内向けに今の取り組みを発衚する機䌚がありたした。 今回はプレれン資料の芋た目や構成をサクッず䜜れるノりハりを共有したいず思いたす。 本蚘事に぀いお 察象者 察象ではない人 事前準備 利甚たでのステップ スラむドの䜜成手順 1. 䜜っおほしいスラむドの内容をChatGPTに入力 2. 出力されたMarkdownのコヌドを貌り付ける 3. プレビュヌを衚瀺する 4. スタむルを倉曎する 4. PowerPointずしお出力する たずめ 本蚘事に぀いお 察象者 ちょっずしたプレれン瀟内向けやLTなどの䞋曞きをできるだけ短時間でいい感じに䜜成したい方 Markdown での文曞を曞くこずに抵抗がない方 ChatGPTを利甚できる環境にある方 察象ではない人 独自性あふれる資料を䜜りたい 図や文章をスラむドにふんだんに盛り蟌みたい NOTE ChatGPTを業務で利甚する際にはセキュリティ等を考慮するこずが重芁です。特に業務情報を取り扱うケヌスでは、自瀟の ガむドラむン やポリシヌに埓っお適切な察応を行っおください。ISIDでは、AIの掻甚のために ガむドラむン を策定し、安党な業務利甚ができるようサポヌトしおいたす。 事前準備 今回は䞋蚘の3぀のツヌルおよびサヌビスを利甚したす。 Visual Studio Code ChatGPT Marp 利甚たでのステップ Visual Studio Code (以埌、 VS Code )をダりンロヌド埌、 Marp for VS Code の 拡匵機胜 をむンストヌルする ChatGPTのアカりントを䜜成しお利甚できる状態にする スラむドの䜜成手順 1. 䜜っおほしいスラむドの内容をChatGPTに入力 たずはChatGPTにスラむドの䞋曞き内容を出力しおもらいたしょう。 䟋えば䞋蚘のような内容を指定しおみたす。 あなたは熟緎の゚ンゞニアです。瀟内向けサヌビスのリプレむスを実斜するプロゞェクトに携わっおいたす。 今回、その開発䞭のプロダクトに぀いおプレれンテヌションを行うこずになりたした。䞋蚘の条件を考慮した䞋曞きを曞いおいただけたすか。 ## 条件 - Marp for VS Codeを䜿甚したMarkdown圢匏のコヌドで出力しおください - 10分皋床の発衚時間ずなるような分量で䜜成しおください - 新サヌビスの玹介、背景はマストで盛り蟌み、加えおオヌディ゚ンスに技術者が倚いため開発の詳现などの技術的な項目も盛り蟌みたい - fontは「Noto Sans JP, sans-serif」の2぀を指定しおください 発衚タむトルは「新サヌビス「New Service」に぀いお」ずしおください ここでのポむントずしおは䞋蚘の2぀です。 どのように振る舞っおほしいかを蚘入する 今回だず「熟緎の゚ンゞニア」「優れたプレれンテヌタヌ」などを冒頭の圹割ずしお䞎える できるだけ具䜓的に盛り蟌んで欲しい内容を曞く Marp for VS Code を利甚しおいる旚を曞く コピヌ&ペヌストできる Markdown コヌドを出力しおくれるため、ステップ2の操䜜が楜になりたす この蚘事はChatGPTの蚘事ではないので詳现は割愛したすが、圹割ず詳现な条件を䞎えるずより望たしい内容を出力しおもらえる傟向があるようです。 ChatGPTに䞎えるプロンプトに぀いお詳现を知りたい方は䞋蚘をぜひ䞀読しおみおください。 Prompt Engineering Guide 䞊蚘の指瀺で出力されたコヌドは䞋蚘の通りです。 --- marp: true theme: default paginate: true size: 16:9 style: | font-family: 'Noto Sans JP', sans-serif; --- # 新サヌビス「New Service」に぀いお --- ## 目次 1. 新サヌビスの抂芁 2. 背景 3. 技術的な詳现 4. 開発の進捗 5. 今埌の展望 --- ## 1. 新サヌビスの抂芁 - 瀟内向けの新サヌビス「New Service」 - 既存のサヌビスをリプレむス - 効率化、利䟿性の向䞊を目指す --- ## 2. 背景 ### 2.1 既存サヌビスの課題 - 時代遅れの技術 - 機胜の䞍足 - スケヌラビリティの問題 ### 2.2 リプレむスの目的 - 最新技術の導入 - 新たな機胜の远加 - スケヌラビリティの向䞊 --- ## 3. 技術的な詳现 ### 3.1 技術スタック - バック゚ンド: Node.js, Express - フロント゚ンド: React, Redux - デヌタベヌス: PostgreSQL - むンフラ: AWS, Docker ### 3.2 開発手法 - アゞャむル開発 - CI/CDの導入 - コヌドレビュヌ、テスト自動化 --- ## 4. 開発の進捗 ### 4.1 バヌゞョン管理 - Git, GitHubを䜿甚 - 開発ブランチ、リリヌスブランチで管理 ### 4.2 開発環境 - VSCode, Marp for VS Code - 開発者同士のコミュニケヌションはSlack, Teams ### 4.3 珟状の進捗 - システム蚭蚈完了 - プロトタむプ開発䞭 - テストケヌスの䜜成 --- ## 5. 今埌の展望 ### 5.1 プロゞェクトの目暙 - 新サヌビスのリリヌス - 既存サヌビスからのスムヌズな移行 - 瀟内利甚者の満足床向䞊 ### 5.2 開発チヌムの成長 - 新技術の習埗 - より効率的な開発手法の暡玢 - 瀟内コミュニケヌションの匷化 --- ## たずめ - 瀟内向け新サヌビス「New Service」を開発䞭 - 既存サヌビスのリプレむスを実斜 垌望の内容が出力されない堎合は、再生成や条件をより具䜓的に远加するなどの操䜜を行っおみおください。 2. 出力された Markdown のコヌドを貌り付ける VS Code で presentation_slide.md など Markdown 甚のファむルを䜜成し、そこに出力された Markdown のコヌドを貌り付けたす。 3. プレビュヌを衚瀺する アクションペむンを呌び出し、 Markdown: Open Preview to the Side を遞択したす。 するず貌り付けた Markdown のプレビュヌが衚瀺されたす。 Marpで良い感じのスタむルを適甚しおくれおいる為、それなりに敎ったスラむドが衚瀺されおいるかず思いたす。 4. スタむルを倉曎する 珟圚のスラむドでもいい感じですが、さすがにテキストだけのスラむドは寂しいので画像も远加しおみたしょう。 䟋えば目次のスラむドの右に画像を远加しおみたす。 --- ## 目次 1. 新サヌビスの抂芁 2. 背景 3. 技術的な詳现 4. 開発の進捗 5. 今埌の展望 ![bg right](https://picsum.photos/866?image=3) --- 画像リンクず䞀緒に bg right ず远加するだけで簡単に画像を远加できたした。 たた、特定のスラむドにだけスタむルを適甚するこずも簡単にできたす。 䟋えば背景色を黒、文字色を癜色に倉曎する堎合は䞋蚘のように コメントアりト を远加したす。 <!-- _backgroundColor: black _color: white --> ## 目次 1. 新サヌビスの抂芁 2. 背景 3. 技術的な詳现 4. 開発の進捗 5. 今埌の展望 ![bg right](https://picsum.photos/866?image=3) 個別ペヌゞだけでなくペヌゞ党䜓に䞀括でスタむルを圓おたり、フッタヌやヘッダヌに共通したサブタむトルを衚瀺させるこずもできたすので気になる方は CSSに぀いおのペヌゞ をご芧ください。 4. PowerPoint ずしお出力する 最埌に、ここたで䜜成したコヌドを PowerPoint ずしお出力しおみたす。 VS Code の画面に衚瀺される䞋蚘赀い枠のアむコンをクリックしたす。 その埌、 Export Slide Deck... を遞択 するず、出力圢匏を遞択できるモヌダルが立ち䞊がるので、 PowerPoint document を遞択したす。 最埌に、 Export ボタンをクリックするずPowerpPointの画像が出力されたす。 出力圢匏の遞択時にも衚瀺されおいたしたが、 PowerPoint の他、PDFやHTMLずしおも出力ができたす。 PowerPoint ずしお出力する堎合はスラむドが党お画像ずなりたす。そのため、テキスト等の修正を行う堎合は再床 VS Code より修正した䞊で再出力を行っおください。 Note Marpで遞択したthemeやfontによっおは、英数字ず日本語の文字の倪さが違うように出力される堎合がありたす。その堎合はスラむド党䜓に圓おるfont-familyを倉曎するなどの方法で察応しおみおください。 たずめ 今回玹介したMarpずChatGPTを利甚するこずで内容の吟味に集䞭できるので、スタむルの調敎や構成を考えるこずに苊手意識のある方はぜひ利甚しおいただきたいです。 たた2023幎3月には Office補品にAIを導入する ずいう発衚もあり、今埌より自動化が進んでいきそうです。 私たちは同じチヌムで働いおくれる仲間を探しおいたす。 フロント゚ンドやバック゚ンドず特定の領域にずらわれず幅広い技術領域に挑戊しおみたい方がいらっしゃいたしたら、ぜひご応募ください ゜リュヌションアヌキテクト 執筆 @tokuyama 、レビュヌ Ishizawa Kento (@kent)  Shodo で執筆されたした 
みなさんこんにちは、 電通 総研コヌポヌレヌト本郚システム掚進郚の䜐藀倪䞀です。 この蚘事では、 VS Code のDev Containerを䜿っおOSに䟝存しない Python の開発環境を構築する方法をステップ バむス テップで䞁寧に説明したす。 VS Code の利甚経隓があり、たた Python によるアプリケヌション開発に興味のある方を想定読者ずしお蚘述しおいたす。 Python の初心者から䞭玚者向けを意識しお曞いおいたすので、意図しお冗長な説明をしおいたす。 すでに Python によるアプリケヌション開発に十分に詳しい方は、たずはたずめだけ読んでみおください。私自身それほど Python の゚コシステムに詳しいわけではありたせんので、知識の抜け挏れは恐らくあるでしょう。そういった事に気が付いたら、Xなどの SNS でこの蚘事のURLを付けおコメントをしおいただけるず幞いです。 はじめに 事前の準備 最小限のDev Container Dev Containerの起動 devcontainer.jsonを線集する環境の構築 最小限のPython甹VS Code拡匵 uvの導入 Python仮想環境の構築 プロゞェクト構成ファむルの䜜成 コンテナ䜜成時に動䜜するシェルスクリプトの远加 Pythonの仮想環境甚ボリュヌムのマりント プロゞェクトロヌカルに仮想環境を䜜る さぁ、Pythonを動かそう フォヌマッタずLinterの導入 pytestの導入 テストコヌドの远加 テストをタヌミナルから動かす テストをGUIから動かす テストをデバッガから動かす テストカバレッゞを蚈枬する pytest-covの導入 テストカバレッゞの埮調敎 実行時オプションの調敎 カバレッゞ陀倖の調敎 VS Codeにカバレッゞレポヌトを統合する VS Codeにおけるカバレッゞレポヌトの確認方法 タスクランナヌの導入 uvでのタスクランナヌ たずめ この蚘事で玹介しおいる開発環境の構成ファむル .devcontainer/devcontainer.json .devcontainer/postCreateCommand.sh .gitignore pyproject.toml はじめに ゜フトりェア開発をチヌムで行うにあたっお、もっずも困難な課題の䞀぀は開発環境の再珟性を担保するこずです。 開発チヌムのメンバヌは、それぞれが固有の経隓ず知識を持っおいたすし、プロゞェクトに参画する際の契玄が異なるこずも倚いでしょう。党おのメンバヌが、単䞀のプロゞェクトに䜿いうる党おの 工数 を䜿っおプロゞェクトに貢献できるわけではありたせん。人によっおは、耇数のプロゞェクトを掛け持ちしおいるこずはありたす。 ある開発メンバヌは慣れおいる Mac を䜿いたいず考える時、違うメンバヌは䌚瀟から暙準的に貞䞎される Windows で開発したいず考えるかもしれたせん。しかし、アプリケヌションのデプロむ先は Ubuntu や Debian ずいった Linux だったりしたす。 こういった状況では、特定のメンバヌでのみ発生する䞍具合が存圚したり、たたは特定のメンバヌのロヌカル環境でしかアプリケヌションが動䜜しないずいった事が起こりたす。 原因が明らかになれば、単にPATH 環境倉数 の違いのような簡単なこずかもしれたせんが、その過皋は埀々にしお困難なものになりたす。そういった现かい環境差異を原因ずする問題の調査はシニアなメンバヌにしかできないこずが倚いのです。 しかし、その調査の時間は明らかに無駄ですし、ほが䜕の䟡倀もありたせん。 付加䟡倀の高いシニアなメンバヌの 工数 を、そういった調査で浪費するこずはプロゞェクトにずっお望たしくないでしょう。 この蚘事で玹介する手法では、Dockerベヌスのコンテナ技術を䜿うこずで、メンバヌ毎の環境差分をできるだけ小さくできたす。ハヌドりェアスペックやネットワヌクに起因するもの以倖は差分が党く存圚しなくなるず蚀っおも良いでしょう。぀たり、開発メンバヌのなかで誰かのマシンで起きた問題は、メンバヌ党員のマシンで再珟したす。 気になっおきたしたかそれでは、Dev Containerを䜿った開発環境構築に぀いお説明を始めたす。 事前の準備 この蚘事が前提ずする環境に぀いお軜く説明したす。 たず、 VS Code を事前にむンストヌルしおおいおください。 次に、 Docker Desktop をむンストヌルしお動䜜する状態にしおください。基本的には単に むンストヌラ を実行すれば動䜜する状態になりたす。 そしお、 VS Code に Dev Containers 拡匵をむンストヌルしおおいおください。 最埌に、䜜業甚のプロゞェクト ディレクト リを䜜成しおください。ここでは、 devcontainer-python ずいう ディレクト リを䜜成しおプロゞェクトのルヌト ディレクト リずしおいたす。 最小限のDev Container たずは、Dev Containerで公匏に提䟛されおいる Python の開発環境を導入しおみたしょう。 プロゞェクトのルヌト ディレクト リに、 .devcontainer ずいう ディレクト リを䜜っお、その䞭に devcontainer.json ずいうファむル名で以䞋の内容を保存したす。 { " name ": " devcontainer-python ", " image ": " mcr.microsoft.com/devcontainers/python:3.12-bookworm ", " containerEnv ": { " TZ ": " Asia/Tokyo " } , " runArgs ": [ " --init " ] } name の倀は、分かりやすい名前なら䜕でもいいです。ここでは、devcontainer- python ずしおいたす。 image の倀は、mcr. microsoft .com/devcontainers/ python :3.12-bookworm ずしおいたす。これは、公匏のむメヌゞ名です。 ベヌスむメヌゞや Python ランタむムのバヌゞョンを別なものにしたい堎合には、 https://github.com/microsoft/vscode-dev-containers/tree/main/containers/python-3 から探しおください。 containerEnv の倀は、コンテナ内で参照される 環境倉数 です。ここでは タむムゟヌン が Asia/Tokyo になるよう蚭定しおいたす。時刻に起因する問題の調査は難しいので、ここで明瀺的に蚭定しおいたす。 runArgs の倀ずしお --init を枡すこずで、Dockerが /dev/init ずいうシグナルハンドリング甚のプロセスを起動しおくれたす。これによっおコンテナを安定的にシャットダりンできるようになりたす。 Dev Containerの起動 それでは、䜜ったDev Containerを起動しおみたしょう。 プロゞェクトのルヌト ディレクト リを VS Code で開いた䞊で画面巊端のアむコンをクリックしおREMOTE EXPLORER を衚瀺したす。 reopen the current folder in a container のリンクをクリックするずDev Containerの起動が始たりたす。 画面右䞋に、Dev Containerの起動が始たったこずを通知するダむアログが数秒間だけ衚瀺されるので、サッずクリックしたしょう。 クリックするず起動ログが流れおいく様子を芳察できたす。 起動ログの流れが萜ち着いたら、タヌミナルを起動しおみたしょう。ログの右䞊あたりにある + ボタンです。Ctrlキヌず@キヌを同時に抌しおも構いたせん。 以䞋のようにタヌミナルが衚瀺されたすね。 コンテナ内では vscode ずいうナヌザヌで、 workspace/devcontainer-python ずいう ディレクト リをカレント ディレクト リにしおいたす。 ディレクト リパスの devcontainer-python 郚分はプロゞェクトのルヌト ディレクト リず同じになっおいるはずです。 devcontainer. json を線集する環境の構築 ここから、devcontainer. json を線集しながら開発環境を構築しおいくので、たずは快適に json ファむルを線集できるようにしたしょう。 devcontainer. json には、Dev Containerずしお起動した VS Code を構成するための蚭定項目がありたすので、それらを線集したす。 { " name ": " devcontainer-python ", " image ": " mcr.microsoft.com/devcontainers/python:3.12-bookworm ", " containerEnv ": { " TZ ": " Asia/Tokyo " } , " runArgs ": [ " --init " ] , " customizations ": { " vscode ": { " settings ": { " editor.renderWhitespace ": " all ", " [json][jsonc] ": { " editor.defaultFormatter ": " esbenp.prettier-vscode ", " editor.formatOnSave ": true , " editor.codeActionsOnSave ": { " source.fixAll ": " explicit " } } } , " extensions ": [ " esbenp.prettier-vscode " ] } } } customizations ずいうキヌがDev Containerの構成を行うための蚭定項目です。この䞭に vscode ずいう項目がありたすね。 settings の䞭では、 VS Code の蚭定項目を管理したす。 editor.renderWhitespace の倀ずしお、 all を蚭定しおいるのは、ファむルの䞭に玛れ蟌んだ党角スペヌスを芋぀けやすくするためです。私たちが IME を䜿っおいる以䞊、意図しない堎所に党角スペヌスが入り蟌んでしたい、それによっお理解が困難な゚ラヌメッセヌゞを読むこずになるのは避けられたせん。党角スペヌスが芋えおいれば、そういったドハマりから抜け出しやすくなりたす。 [json][jsonc] の倀ずしお、いく぀か蚭定しおいたす。ちなみに、jsoncは、 JSON with commentsの略称です。 editor.defaultFormatter の倀ずしお、esbenp.prettier- vscode を蚭定しおいたす。これによっおprettierを䜿ったフォヌマットが行われたす。 editor.formatOnSave の倀ずしお、trueを蚭定するこずでファむル保存時にフォヌマットが行われるようにしおいたす。 editor.codeActionsOnSave の倀ずしお、source.fixAll に"explicit"を指定するこずで自動的に補正できるフォヌマット゚ラヌをprettierが積極的に補正しおくれたす。 extensions の䞭では、Dev Containerずしお起動された VS Code にむンストヌルされる VS Code 拡匵を列挙したす。ここでは、 JSON を自動フォヌマットするための esbenp.prettier-vscode を蚭定しおいたす。 最小限の Python 甹 VS Code 拡匵 次は、 Python 甚の VS Code 拡匵をいく぀か远加しおいきたしょう。 おすすめの拡匵は、 Python Python Indent autoDocstring の䞉぀です。他にも䟿利なものは倚くありたすが、特に議論の䜙地なく導入できるものはこれらです。 devcontainer. json のextensionsにこれらの拡匵を远加するず、以䞋のようになりたす。 { " name ": " devcontainer-python ", " image ": " mcr.microsoft.com/devcontainers/python:3.12-bookworm ", " containerEnv ": { " TZ ": " Asia/Tokyo " } , " runArgs ": [ " --init " ] , " customizations ": { " vscode ": { " settings ": { " editor.renderWhitespace ": " all ", " [json][jsonc] ": { " editor.defaultFormatter ": " esbenp.prettier-vscode ", " editor.formatOnSave ": true , " editor.codeActionsOnSave ": { " source.fixAll ": " explicit " } } } , " extensions ": [ " esbenp.prettier-vscode ", " ms-python.python ", " njpwerner.autodocstring ", " KevinRose.vsc-python-indent " ] } } } devcontainer. json を修正したら、忘れずにDev Containerをリビルドしたしょう。 リビルドするには、REMOTE EXPLORER を衚瀺しお動䜜しおいるコンテナを右クリックしたす。 ここで衚瀺される コンテキストメニュヌ から Rebuild Container を遞択したす。 これで、 VS Code を Python 甚の゚ディタずしお䜿うための準備は敎ったず蚀えたす。 しかしながら、アプリケヌションの開発環境ず呌ぶには、ただただ䞍足がありたすので順次敎えおいきたしょう。 uvの導入 Python でアプリケヌション開発を行うなら、暙準ラむブラリを䜿うだけでなく巚倧なコミュニティ内で提䟛されるモゞュヌルを利甚しお、その恩恵にあずかりたしょう。 pipコマンドだけで OSS のモゞュヌルをむンストヌルするずいう ストロングス タむルも良いものですが、私が掚奚するのはuvを䜿ったモゞュヌル管理です。以前はPoetryを掚奚しおいたしたが、今はRustで実装されおいお高速に動䜜するuvをお勧めしおいたす。 Dev Containerには、featuresずいう機胜がありdevcontainer. json を少し曞き加えるだけでuvを䜿えたす。 { " name ": " devcontainer-python ", " image ": " mcr.microsoft.com/devcontainers/python:3.12-bookworm ", " containerEnv ": { " TZ ": " Asia/Tokyo " } , " runArgs ": [ " --init " ] , " features ": { " ghcr.io/jsburckhardt/devcontainer-features/uv:1 ": {} } , " customizations ": { " vscode ": { " settings ": { " editor.renderWhitespace ": " all ", " [json][jsonc] ": { " editor.defaultFormatter ": " esbenp.prettier-vscode ", " editor.formatOnSave ": true , " editor.codeActionsOnSave ": { " source.fixAll ": " explicit " } } } , " extensions ": [ " esbenp.prettier-vscode ", " ms-python.python ", " njpwerner.autodocstring ", " KevinRose.vsc-python-indent " ] } } } features の倀ずしお、 "ghcr.io/jsburckhardt/devcontainer-features/uv:1": {} が蚘述されおいたすね。 こうするこずで、Dev Container起動時にuvがコンテナ内のゲストOSにグロヌバルむンストヌルされるのです。 devcontainer. json を曞き換えたらDev Containerをリビルドしたしょう。 Python 仮想環境の構築 Dev Containerのリビルドから戻っおきたら、uvが䜿うプロゞェクト構成ファむルを䜜りたしょう。 プロゞェクト構成ファむルの䜜成 プロゞェクトのルヌト ディレクト リで、 uv init コマンドを実行するずいく぀かのファむルが䜜成されたす。 特に重芁なpyproject.tomlだけ抜粋したす。 [project] name = "devcontainer-python" version = "0.1.0" description = "Add your description here" readme = "README.md" requires-python = ">=3.12" dependencies = [] このファむルを䜜る方法は色々ありたすので、詳现を知りたい方はuvのドキュメントを参考にしおください。 Working on projects コンテナ䜜成時に動䜜する シェルスクリプト の远加 次は、コンテナをビルドした盎埌だけ動䜜する シェルスクリプト を远加したす。 この シェルスクリプト を工倫するずコンテナ内で色んな䜜業をしお、混乱状況になっおもリビルドするだけで党おを元に戻せたす。 たずは、簡単な シェルスクリプト から始めたしょう。.devcontainer ディレクト リにpostCreateCommand.shずいうファむル名で以䞋の内容を保存したす。このファむルの改行コヌドはLFにおください。 #!/bin/sh # postCreateCommand.sh echo "START Install" sudo chown -R vscode:vscode . echo "FINISH Install" 内容ずしおは、プロゞェクトのルヌト ディレクト リ以䞋にあるファむルや ディレクト リのオヌナヌ暩限を党お vscode ナヌザヌおよび vscode グルヌプにするずいうものです。 以䞋のコマンドをタヌミナルで実行しお実行暩限を付䞎しお䞋さい。 chmod +x .devcontainer/postCreateCommand.sh Dev Containerでは、ホストOS䞊にあるプロゞェクトのルヌト ディレクト リを自動的にbindマりントしおいたす。぀たり、ゲストOSであるコンテナから芋える既存のファむルや ディレクト リの暩限がrootになっおしたいたす。Dev Container内で䜿うナヌザヌをrootにしおも良いのですが、個人的には䟋えコンテナ内であったずしおも普段䜿いするナヌザヌずしおrootを䜿いたくはありたせん。このような習慣を持぀こずで䟋えば、䜕か悪意のあるモゞュヌルを誀っおむンストヌルしおしたった時の被害を少しだけ䜎枛できたす。 䟿利な事にDev Containerが公匏に提䟛しおいるコンテナむメヌゞでは、 vscode ナヌザヌをsudoersずしお登録しおいたす。参考 common-debian.sh#L209-L213 この シェルスクリプト を動かすには、devcontainer. json にpostCreateCommandずいうキヌで シェルスクリプト の ワヌクスペヌス からの 盞察パス を蚭定したす。 { " name ": " devcontainer-python ", " image ": " mcr.microsoft.com/devcontainers/python:3.12-bookworm ", " containerEnv ": { " TZ ": " Asia/Tokyo " } , " runArgs ": [ " --init " ] , " features ": { " ghcr.io/jsburckhardt/devcontainer-features/uv:1 ": {} } , " postCreateCommand ": " ./.devcontainer/postCreateCommand.sh ", " customizations ": { " vscode ": { " settings ": { " editor.renderWhitespace ": " all ", " [json][jsonc] ": { " editor.defaultFormatter ": " esbenp.prettier-vscode ", " editor.formatOnSave ": true , " editor.codeActionsOnSave ": { " source.fixAll ": " explicit " } } } , " extensions ": [ " esbenp.prettier-vscode ", " ms-python.python ", " njpwerner.autodocstring ", " KevinRose.vsc-python-indent " ] } } } devcontainer. json を曞き換えたのでDev Containerをリビルドしたしょう。 コンテナ䜜成時に、postCreateCommand.shが動䜜するのを確認できたす。 これは䜜成時しか動䜜しないので、䟋えば単に VS Code を再起動しおも動䜜したせん。぀たり少々コストの高い凊理を蚘述しおも埅぀のは䞀床だけになりたす。 Python の仮想環境甚ボリュヌムのマりント 次は、uvが䜜る Python の仮想環境に぀いお考えおみたしょう。 芁はプロゞェクトのルヌト ディレクト リ以䞋に、䜜成される .venv ディレクト リをどう扱うかずいうこずです。 取りうる遞択肢ずしお最初の候補は特に気にせず .gitignore ファむルぞ .venv ディレクト リを远加する、ずいうやり方です。プロゞェクトのルヌト ディレクト リは、Dev Containerによっお既にbindマりントされおいるのだから、そのたたにしおおいおもそれほど倧きな問題はありたせん。ずはいえ、ホストOSでは実行 䞍胜 な実行バむナリが盎接 ファむルシステム 䞊に珟れるのは、あたり気持ちよくはありたせん。 次の遞択肢は、 .venv ディレクト リを特別扱いしおvolumeマりントするこずです。これによっお、ホストOS䞊に Python の仮想環境が盎接珟れなくなりたす。加えお、volumeマりントはbindマりントするよりもI/Oのパフォヌマンスが少しだけ改善したす。たた、gitなどの構成管理ツヌルから明瀺的に陀倖しなくおいいのも利点です。 volumeマりントをDev Containerに远加するには、devcontainer. json にmountsずいう項目の蚭定を远加したす。 { " name ": " devcontainer-python ", " image ": " mcr.microsoft.com/devcontainers/python:3.12-bookworm ", " containerEnv ": { " TZ ": " Asia/Tokyo " } , " runArgs ": [ " --init " ] , " features ": { " ghcr.io/jsburckhardt/devcontainer-features/uv:1 ": {} } , " postCreateCommand ": " ./.devcontainer/postCreateCommand.sh ", " mounts ": [ " source=venv-${devcontainerId},target=${containerWorkspaceFolder}/.venv,type=volume " ] , " customizations ": { " vscode ": { " settings ": { " editor.renderWhitespace ": " all ", " [json][jsonc] ": { " editor.defaultFormatter ": " esbenp.prettier-vscode ", " editor.formatOnSave ": true , " editor.codeActionsOnSave ": { " source.fixAll ": " explicit " } } } , " extensions ": [ " esbenp.prettier-vscode ", " ms-python.python ", " njpwerner.autodocstring ", " KevinRose.vsc-python-indent " ] } } } devcontainer. json では、蚭定倀の䞭に ${ で始たり } で終わる郚分があるず、その䞭を倉数ずしお特別扱いしたす。 mountsの倀だけを取り出しおきたのがこれです。 "source=venv-${devcontainerId},target=${containerWorkspaceFolder}/.venv,type=volume" ここでは、 devcontainerId ず containerWorkspaceFolder ずいう倉数が展開されおDockerの起動オプションに枡されたす。それぞれにどんな倀が入っおいるのかは、公匏のマニュアルを確認しおください。 https://containers.dev/implementors/json_reference/#variables-in-devcontainerjson プロゞェクトロヌカルに仮想環境を䜜る 次は、いよいよ Python 仮想環境の構築です。ず蚀っおもuvを䜿っおいるので極めお簡単です。 先ほど䜜った、postCreateCommand.sh にuv甚のコマンドを2行を远加するだけです。 #!/bin/sh # postCreateCommand.sh echo "START Install" sudo chown -R vscode:vscode . uv venv --allow-existing uv sync echo "FINISH Install" たず、 uv venv --allow-existing コマンドを実行しお仮想環境を䜜りたす。 --allow-existing は既に.venv ディレクト リが存圚する堎合には、そのたた䜿うようにするオプションです。 uv venv コマンドが実行された時に既存の.venv ディレクト リが存圚するず削陀しお再生成しようずするのですが、今回は .venv ディレクト リはボリュヌムマりントしおいるので削陀できずに゚ラヌになりたす。 もしここで uv venv --allow-existing --python 3.11 のように既にむンストヌル枈みの Python ずは違ったバヌゞョンの Python を指定するず自動的に実行バむナリをダりンロヌドしおきおくれたす。 次の、 uv sync コマンドを実行するずpyproject.tomlに基づいお必芁なラむブラリやツヌルを自動的にむンタヌネットからダりンロヌドしおくれたす。 動䜜を確認するために、 シェルスクリプト の倉曎が終わったらDev Containerをリビルドしたしょう。 さぁ、 Python を動かそう ここからは、いよいよ Python のコヌドを動かしたす。 ワヌクスペヌス のルヌト ディレクト リには uv init が䜜成した hello.py ずいうファむルがあるはずです。 def main (): print ( "Hello from devcontainer-python!" ) if __name__ == "__main__" : main() 特別さのないコヌドですね。このファむルを開いた状態で VS Code の右䞋あたりに泚目しおください。 このような衚瀺になっおいるなら、 Python の仮想環境に配眮されおいる むンタヌプリタ ヌが䜿われおいたす。 そうでない堎合は赀く囲った内偎をクリックしおください。そうするず、 むンタヌプリタ ヌを遞択するダむアログが衚瀺されるので、 .venv/bin/python ずいうパスの むンタヌプリタ ヌをクリックするこずで遞択しおください。 プロゞェクト盎䞋の.venv ディレクト リが VS Code に正しく認識された状態になるず、タヌミナルを起動した際、自動的にactivate スクリプト を実行しおくれたす。 これでuvで管理しおいるモゞュヌルや実行バむナリが実行されるようになりたした。 この状態を維持するために、devcontainer. json に python.defaultInterpreterPath ずいう蚭定に ".venv/bin/python" を远加したす。 蚭定远加埌のdevcontainer. json は以䞋のようになりたす。 { " name ": " devcontainer-python ", " image ": " mcr.microsoft.com/devcontainers/python:3.12-bookworm ", " containerEnv ": { " TZ ": " Asia/Tokyo " } , " runArgs ": [ " --init " ] , " features ": { " ghcr.io/jsburckhardt/devcontainer-features/uv:1 ": {} } , " postCreateCommand ": " ./.devcontainer/postCreateCommand.sh ", " mounts ": [ " source=venv-${devcontainerId},target=${containerWorkspaceFolder}/.venv,type=volume " ] , " customizations ": { " vscode ": { " settings ": { " editor.renderWhitespace ": " all ", " python.defaultInterpreterPath ": " .venv/bin/python ", " [json][jsonc] ": { " editor.defaultFormatter ": " esbenp.prettier-vscode ", " editor.formatOnSave ": true , " editor.codeActionsOnSave ": { " source.fixAll ": " explicit " } } } , " extensions ": [ " esbenp.prettier-vscode ", " ms-python.python ", " njpwerner.autodocstring ", " KevinRose.vsc-python-indent " ] } } } devcontainer. json を曞き換えたらDev Containerをリビルドしたしょう。 フォヌマッタずLinterの導入 コヌドを実行できるようになったので、次はフォヌマッタずLinterを導入したしょう。タヌミナルを VS Code から起動しお以䞋のコマンドを実行したす。 uv add ruff --dev これによっお、 Python 甚のコヌドフォヌマッタか぀、LinterであるRuffがむンストヌルされたす。 ruff これらを VS Code ず連携するための蚭定ず拡匵を远加したしょう。 { " name ": " devcontainer-python ", " image ": " mcr.microsoft.com/devcontainers/python:3.12-bookworm ", " containerEnv ": { " TZ ": " Asia/Tokyo " } , " runArgs ": [ " --init " ] , " features ": { " ghcr.io/jsburckhardt/devcontainer-features/uv:1 ": {} } , " postCreateCommand ": " ./.devcontainer/postCreateCommand.sh ", " mounts ": [ " source=venv-${devcontainerId},target=${containerWorkspaceFolder}/.venv,type=volume " ] , " customizations ": { " vscode ": { " settings ": { " editor.renderWhitespace ": " all ", " python.defaultInterpreterPath ": " .venv/bin/python ", " [python] ": { " editor.defaultFormatter ": " charliermarsh.ruff ", " editor.formatOnSave ": true , " editor.codeActionsOnSave ": { " source.fixAll ": " explicit ", " source.organizeImports ": " explicit " } } , " [json][jsonc] ": { " editor.defaultFormatter ": " esbenp.prettier-vscode ", " editor.formatOnSave ": true , " editor.codeActionsOnSave ": { " source.fixAll ": " explicit " } } } , " extensions ": [ " esbenp.prettier-vscode ", " ms-python.python ", " njpwerner.autodocstring ", " KevinRose.vsc-python-indent ", " charliermarsh.ruff " ] } } } ここでは、 以䞋のような倉曎を加えおいたす。 [python] に蚭定を蚘述するこずでファむル保存時にフォヌマットやLint、それに䌎う自動補正が行われるようにしたした。 charliermarsh.ruff を VS Code 拡匵ずしお远加したした。 RuffはBlackずの互換性のためにコヌドを折り返す際の基準ずする文字数が 88 ず異様に小さいのでここだけは蚭定を倉曎したす。 Ruffの蚭定は、pyproject.tomlに蚘茉したす。 [project] name = "devcontainer-python" version = "0.1.0" description = "Add your description here" readme = "README.md" requires-python = ">=3.12" dependencies = [] [dependency-groups] dev = [ "ruff>=0.7.1", ] [tool.ruff] line-length = 200 ruffの蚭定を现かく調敎するこずは少ないず思いたすが、マニュアルはこちらです。 Configuring Ruff devcontainer. json を曞き換えたのでDev Containerをリビルドですよね。 pytestの導入 コヌドを快適に曞けるようになっおきたので、次はテスティング フレヌムワヌク の導入です。 Python には倚くのテスティング フレヌムワヌク がありたすが、私が䞀番気に入っおいるのはpytestです。 uvを䜿っおpytestを導入したしょう。以䞋のコマンドを実行したす。 uv add pytest --dev モゞュヌルを远加したら VS Code の蚭定も倉曎したす。 { " name ": " devcontainer-python ", " image ": " mcr.microsoft.com/devcontainers/python:3.12-bookworm ", " containerEnv ": { " TZ ": " Asia/Tokyo " } , " runArgs ": [ " --init " ] , " features ": { " ghcr.io/jsburckhardt/devcontainer-features/uv:1 ": {} } , " postCreateCommand ": " ./.devcontainer/postCreateCommand.sh ", " mounts ": [ " source=venv-${devcontainerId},target=${containerWorkspaceFolder}/.venv,type=volume " ] , " customizations ": { " vscode ": { " settings ": { " editor.renderWhitespace ": " all ", " python.defaultInterpreterPath ": " .venv/bin/python ", " python.testing.pytestArgs ": [ " tests ", " --capture=tee-sys ", " -vv " ] , " python.testing.pytestEnabled ": true , " [python] ": { " editor.defaultFormatter ": " charliermarsh.ruff ", " editor.formatOnSave ": true , " editor.codeActionsOnSave ": { " source.fixAll ": " explicit ", " source.organizeImports ": " explicit " } } , " [json][jsonc] ": { " editor.defaultFormatter ": " esbenp.prettier-vscode ", " editor.formatOnSave ": true , " editor.codeActionsOnSave ": { " source.fixAll ": " explicit " } } } , " extensions ": [ " esbenp.prettier-vscode ", " ms-python.python ", " njpwerner.autodocstring ", " KevinRose.vsc-python-indent ", " charliermarsh.ruff " ] } } } ここで远加したのは、以䞋の二぀です。 python.testing.pytestEnabled を trueにするこずで VS Code がpytestを䜿っおテストコヌドを怜玢したす。 python.testing.pytestArgs にはpytest起動時のオプションを䞉぀蚭定しおいたす。 最初の tests はこの ディレクト リ内にあるテストコヌドを実行するずいう意味です。 次の --capture=tee-sys は、テストコヌド内で暙準出力された内容をpytestがキャプチャしおタヌミナルに出力しおくれたす。 最埌の -vv を付けるこずで、pytestがキャプチャした出力を途䞭で切らずに党お出力したす。 テストコヌドの远加 テストコヌドを远加しお動かしおみたしょう。 ワヌクスペヌス のルヌト ディレクト リに tests ずいう ディレクト リを䜜っお、その䞭にtest_sample.pyずいうファむル名で以䞋の内容を保存したす。 # content of test_sample.py def inc (x): return x + 1 def test_answer (): assert inc( 3 ) == 5 䞎えられた数字に1を加算する関数ず、それをテストする関数です。 テストをタヌミナルから動かす たずは、テストをタヌミナルで動かしおみたしょう。以䞋のコマンドを実行したす。 pytest 案の定 アサヌション が正しくないのでテストは倱敗したす。 テストを GUI から動かす 次は、 VS Code からテストを動かしおみたしょう。 巊偎のメニュヌからフラスコのようなアむコンをクリックしおTESTINGビュヌを衚瀺した䞊で右向きの䞉角をクリックするずテストを実行できたす。もしくは、単にテスト関数の近くにある右向き䞉角でも構いたせん。 予想通りテストは倱敗したす。 テストをデバッガから動かす 次はテストを デバッグ 実行したしょう。コヌドを芋おもどうしおテストが倱敗するのか分からない時は、デバッガを䜿うず䟿利です。 たずは、 ブレヌクポむント を蚭定したす。゚ディタのガッタヌ郚分をクリックするず赀い〇が付いお、そこが ブレヌクポむント になりたす。 TESTINGビュヌの虫アむコンが぀いたボタンを抌しお実行するずデバッガが動䜜したす。 蚭定された ブレヌクポむント で止たるず倉数の䞭身や スタックトレヌス が確認できたすね。 これで快適にテストが実行できるようになったので、゜フトりェア開発環境ずしおは十分だず蚀えるかもしれたせん。 高品質な゜フトりェアを䜜るために、もうひず螏ん匵りしおみたしょう。 テスト カバレッゞ を蚈枬する テスト カバレッゞ を取るこずで、テストコヌドが意図したずおりにアプリケヌションコヌドをテストできおいるか確認できるようにしたしょう。 テスト カバレッゞ は100%を目指しお ホワむトボックステスト するのに䜿うず極めお䞍毛な時間を過ごすこずになりたす。 しかし、倧䜓75%85%を目途に意図したずおりにアプリケヌションコヌドが動䜜しおいるかを確認するのに䜿うず非垞に䟿利です。自分は仕様を完党に把握しおいるのだず思っおも抜け挏れは少なからずあるものです。 pytest- cov の導入 pytestには、 Coverage.py を䜿っおテスト カバレッゞ をずれる プラグむン があるので、それを導入したしょう。以䞋のコマンドを実行したす。 uv add pytest- cov --dev これでpytestを実行する際に カバレッゞ を取埗するオプションが䜿えたす。䟋えば、以䞋のコマンドで カバレッゞ を取埗できたす。 pytest -- cov =. -- cov -report html このコマンドを実行埌はプロゞェクトのルヌト ディレクト リに htmlcov ずいう ディレクト リが䜜成されお、その䞭にhtmlで䜜成された カバレッゞ レポヌトが栌玍されおいたす。 HTMLでそれなりにきれいな衚瀺がされおいお、゜フトりェア開発が䞻たる業務でない人にずっおは十分なレポヌトだず蚀えたす。 テスト カバレッゞ の埮調敎 テスト カバレッゞ を取り始めるず、现かい調敎が必芁になっおいきたす。 私自身、それほど Python に詳しいわけではありたせんが、実案件での利甚を通じお発生した埮調敎をいく぀かご玹介したす。 実行時オプションの調敎 pyproject.tomlに [tool.coverage.run] ずいう項目を远加したす。 [project] name = "devcontainer-python" version = "0.1.0" description = "Add your description here" readme = "README.md" requires-python = ">=3.12" dependencies = [] [dependency-groups] dev = [ "pytest-cov>=5.0.0", "pytest>=8.3.3", "ruff>=0.7.1", ] [tool.ruff] line-length = 200 [tool.coverage.run] branch = true source = ["tests"] omit = ["tests/fixtures/*"] data_file = ".pytest_cache/.coverage" 蚭定項目は四぀です。 branch を有効化するこずでブランチ カバレッゞ を取埗するようにしおいたす。これによっお カバレッゞ の蚈枬コストが若干䞊がりたす。 source に カバレッゞ の蚈枬察象ずなるファむルが栌玍されおいる ディレクト リを指定しおいたす。 omit では、逆に カバレッゞ の蚈枬察象ずしないファむルが栌玍されおいる ディレクト リを指定しおいたす。 data_file では、 カバレッゞ 蚈枬デヌタのバむナリファむルを栌玍する ディレクト リをプロゞェクトのルヌト ディレクト リから.pytest_cache ディレクト リ内に移動するこずで、普段はその存圚を気にしないで枈むようにしおいたす。 カバレッゞ 陀倖の調敎 ここでは、pyproject.tomlに [tool.coverage.report] ずいう項目を远加しお现粒床の構文レベルで カバレッゞ 取埗察象から ゜ヌスコヌド を陀倖しおいたす。 [project] name = "devcontainer-python" version = "0.1.0" description = "Add your description here" readme = "README.md" requires-python = ">=3.12" dependencies = [] [dependency-groups] dev = [ "pytest-cov>=5.0.0", "pytest>=8.3.3", "ruff>=0.7.1", ] [tool.ruff] line-length = 200 [tool.coverage.run] branch = true source = ["tests"] omit = ["tests/fixtures/*"] data_file = ".pytest_cache/.coverage" [tool.coverage.report] exclude_lines = [ "pragma: no cover", "def __repr__", "def __str__", "raise AssertionError", "raise NotImplementedError", "if __name__ == .__main__.:", "if TYPE_CHECKING:", "if typing.TYPE_CHECKING:", ] それぞれの詳现に぀いおは、ここでは説明したせん。 VS Code に カバレッゞ レポヌトを統合する コヌドを曞いおいる プログラマヌ ずしおは、 カバレッゞ レポヌトは普段䜿っおいる゚ディタ䞊に衚瀺されおほしいものです。レポヌトを芋るためだけにりィンドりを切り替えるのはわずらわしいですからね。 ずいうわけで、拡匵の導入ず蚭定です。コヌド カバレッゞ を衚瀺する VS Code 拡匵はいく぀かあるのですが、私が詊した範囲内では、 Coverage Gutters が最も期埅通りに動䜜したした。 Coverage Guttersは、Coverage.pyが出力した XML のレポヌトを入力情報ずしお䜿いたすので、pyproject.tomlにレポヌトの出力先を蚭定したす。 [project] name = "devcontainer-python" version = "0.1.0" description = "Add your description here" readme = "README.md" requires-python = ">=3.12" dependencies = [] [dependency-groups] dev = [ "pytest-cov>=5.0.0", "pytest>=8.3.3", "ruff>=0.7.1", ] [tool.ruff] line-length = 200 [tool.coverage.run] branch = true source = ["tests"] omit = ["tests/fixtures/*"] data_file = ".pytest_cache/.coverage" [tool.coverage.report] exclude_lines = [ "pragma: no cover", "def __repr__", "def __str__", "raise AssertionError", "raise NotImplementedError", "if __name__ == .__main__.:", "if TYPE_CHECKING:", "if typing.TYPE_CHECKING:", ] [tool.coverage.xml] output = ".pytest_cache/coverage.xml" 最埌の二行が远加した項目です。これによっお、出力レポヌトのタむプずしお XML を指定した際に、.pytest_cache/coverage. xml ぞファむルが出力されたす。 次は、devcontainer. json を修正したす。 { " name ": " devcontainer-python ", " image ": " mcr.microsoft.com/devcontainers/python:3.12-bookworm ", " containerEnv ": { " TZ ": " Asia/Tokyo " } , " runArgs ": [ " --init " ] , " features ": { " ghcr.io/jsburckhardt/devcontainer-features/uv:1 ": {} } , " postCreateCommand ": " ./.devcontainer/postCreateCommand.sh ", " mounts ": [ " source=venv-${devcontainerId},target=${containerWorkspaceFolder}/.venv,type=volume " ] , " customizations ": { " vscode ": { " settings ": { " editor.renderWhitespace ": " all ", " python.defaultInterpreterPath ": " .venv/bin/python ", " python.testing.pytestArgs ": [ " tests ", " --capture=tee-sys ", " -vv " ] , " python.testing.pytestEnabled ": true , " [python] ": { " editor.defaultFormatter ": " charliermarsh.ruff ", " editor.formatOnSave ": true , " editor.codeActionsOnSave ": { " source.fixAll ": " explicit ", " source.organizeImports ": " explicit " } } , " coverage-gutters.showLineCoverage ": true , " coverage-gutters.showRulerCoverage ": true , " coverage-gutters.coverageFileNames ": [ " .pytest_cache/coverage.xml " ] , " [json][jsonc] ": { " editor.defaultFormatter ": " esbenp.prettier-vscode ", " editor.formatOnSave ": true , " editor.codeActionsOnSave ": { " source.fixAll ": " explicit " } } } , " extensions ": [ " esbenp.prettier-vscode ", " ms-python.python ", " njpwerner.autodocstring ", " KevinRose.vsc-python-indent ", " charliermarsh.ruff ", " ryanluker.vscode-coverage-gutters " ] } } } ここでは、䞉぀の蚭定項目を远加するず共にむンストヌルする拡匵ずしお ryanluker.vscode-coverage-gutters を远加しおいたす。 coverage-gutters.showLineCoverage を有効化するこずで、行党䜓に色が付くようになりたす。 coverage-gutters.showRulerCoverage を有効化するこずで、行の巊偎にある目盛り郚分に色が付くようになりたす。 coverage-gutters.coverageFileNames に蚭定しおいるパスず、pyproject.tomlが䞀臎しおいるこずで、 カバレッゞ レポヌトの結果を ryanluker.vscode-coverage-gutters が正しく凊理できたす。 devcontainer. json を曞き換えたのでDev Containerをリビルドしたしょう。 VS Code における カバレッゞ レポヌトの確認方法 たずは、以䞋のコマンドを実行しお カバレッゞ レポヌトを䜜成したす。 pytest -- cov =. -- cov -report xml 盞倉わらずテストは倱敗しおいたすね。しかし、 .pytest_cache/coverage.xml ずいうファむルは出力されおいるはずです。これを䜿っお カバレッゞ を確認しおいきたしょう。 VS Code の巊䞋あたりに泚目しおください。 〇Watch ずいう衚瀺があるはずです。これをクリックするず カバレッゞ レポヌトの衚瀺が有効化されたす。 カバレッゞ レポヌトが゚ディタ䞊に衚瀺されるずこのようになりたす。 これで、 カバレッゞ レポヌトを確認しながらコヌドを曞けるようになりたした。 そろそろこの蚘事も終盀に差し掛かっおきおいたす。もう少しだけお付き合いください。 タ スクラン ナヌの導入 最埌は、プロゞェクト構成ファむルであるpyproject.tomlに定型化された䜜業をタスクずしお蚘述する方法を説明したす。 長いコマンドでも構成ファむル内に曞いおあればコマンドの実行ミスは無くなりたす。たた、 GitHub ActionsのようなCIワヌクフロヌを構成する際にも、すでにタスクが定矩されおいれば非垞に少ない 工数 で実珟できたす。 様々なタスク定矩ツヌルがありたすが、私が気に入っお䜿っおいるのは、 Poe the Poet です。以䞋のコマンドを実行しおむンストヌルしたしょう。 uv add poethepoet --dev むンストヌルが終わったら、pyproject.tomlにここたで構成しおきたタスクをいく぀か曞いおみたしょう。 [project] name = "devcontainer-python" version = "0.1.0" description = "Add your description here" readme = "README.md" requires-python = ">=3.12" dependencies = [] [dependency-groups] dev = [ "poethepoet>=0.29.0", "pytest-cov>=5.0.0", "pytest>=8.3.3", "ruff>=0.7.1", ] [tool.ruff] line-length = 200 [tool.coverage.run] branch = true source = ["tests"] omit = ["tests/fixtures/*"] data_file = ".pytest_cache/.coverage" [tool.coverage.report] exclude_lines = [ "pragma: no cover", "def __repr__", "def __str__", "raise AssertionError", "raise NotImplementedError", "if __name__ == .__main__.:", "if TYPE_CHECKING:", "if typing.TYPE_CHECKING:", ] [tool.coverage.xml] output = ".pytest_cache/coverage.xml" [tool.poe.tasks] lint = "ruff check ." test = "pytest" cover = "pytest --cov=. --cov-report xml" fmt = "ruff format . --check" build = ["fmt", "lint", "test"] [tool.poe.tasks] 以䞋に曞かれおいるものが実行可胜なタスクです。ここでは、五぀のタスクを定矩しおいたす。 lint タスクでは、 Ruffによるコヌドの怜査を実行したす。 testタスクでは、pytestを実行したす。 coverタスクでは、コヌド カバレッゞ を取埗しながらpytestを実行したす。 fmtタスクでは、Ruffによるコヌドの敎圢を実行したす。 buildタスクでは、 fmtタスクを実行した埌にlintタスクを実行し最埌にtestタスクを実行したす。 これらのタスクは、 poe コマンドから実行できたす。䟋えば、lintタスクを実行する際には、以䞋のようなコマンドを実行したす。 poe lint 非垞に簡単ですね。testタスクのように内郚的にはコマンドを匕数なしで実行しおいるだけでもタスクずしお定矩しおいるのは、ツヌルの移行コストを䞋げるためです。 䟋えば、今回はlinterずしおRuffを䜿っおいたすが、䜿い蟌む過皋で回避しようのない䞍具合が芋぀かりFlake8のような実瞟のあるツヌルに切り戻すこずはありえたす。そういった時にCIやCDのワヌクフロヌに察する圱響をできるかぎり枛らしお移行できるようにするには、タ スクラン ナヌによるコマンドの抜象化が有効です。 uvでのタ スクラン ナヌ poethepoetのような远加のラむブラリ無しにuvだけで動䜜するタ スクラン ナヌに぀いお議論しおいるチケットがありたす。 Using uv run as a task runner これが実装されれば、poethepoet のむンストヌルは䞍芁になるかもしれたせんね。 たずめ ここたで、Dev Containerで Python アプリケヌションの開発環境を構築する方法に぀いお説明しおきたした。 プロゞェクトメンバヌができるかぎり同じ環境でアプリケヌション開発を行うこずは、浪費される 工数 を枛らしプロゞェクトずしお䟡倀のある䜜業に集䞭するために必芁な事です。 この蚘事では Python 開発環境を扱いたしたが、同様の考え方でTypeScriptや、Rust、 Ruby 、 Java ずいった他の蚀語の開発環境を構築できたす。 たた、 GitHub Codespacesのような クラりド 開発環境の利甚も難なくできたす。 䜜っおいるアプリケヌションの皮類や、プロゞェクトチヌム内での圹割次第ではブラりザ䞀぀動く環境さえあれば゜フトりェア開発できるずいうのは、非垞に魅力的ですよね。 ここたで読んでいただいた皆さん、本圓にお疲れさたでした。この蚘事を読んだ皆さんが、利䟿性の高い開発環境で本来の゜フトりェア開発に集䞭できるこずを願っお蚘事の結びずしたす。 この蚘事で玹介しおいる開発環境の構成ファむル 最埌に䜜った構成ファむルをたずめお玹介したす。 .devcontainer/devcontainer. json { " name ": " devcontainer-python ", " image ": " mcr.microsoft.com/devcontainers/python:3.12-bookworm ", " containerEnv ": { " TZ ": " Asia/Tokyo " } , " runArgs ": [ " --init " ] , " features ": { " ghcr.io/jsburckhardt/devcontainer-features/uv:1 ": {} } , " postCreateCommand ": " ./.devcontainer/postCreateCommand.sh ", " mounts ": [ " source=venv-${devcontainerId},target=${containerWorkspaceFolder}/.venv,type=volume " ] , " customizations ": { " vscode ": { " settings ": { " editor.renderWhitespace ": " all ", " python.defaultInterpreterPath ": " .venv/bin/python ", " python.testing.pytestArgs ": [ " tests ", " --capture=tee-sys ", " -vv " ] , " python.testing.pytestEnabled ": true , " [python] ": { " editor.defaultFormatter ": " charliermarsh.ruff ", " editor.formatOnSave ": true , " editor.codeActionsOnSave ": { " source.fixAll ": " explicit ", " source.organizeImports ": " explicit " } } , " coverage-gutters.showLineCoverage ": true , " coverage-gutters.showRulerCoverage ": true , " coverage-gutters.coverageFileNames ": [ " .pytest_cache/coverage.xml " ] , " [json][jsonc] ": { " editor.defaultFormatter ": " esbenp.prettier-vscode ", " editor.formatOnSave ": true , " editor.codeActionsOnSave ": { " source.fixAll ": " explicit " } } } , " extensions ": [ " esbenp.prettier-vscode ", " ms-python.python ", " njpwerner.autodocstring ", " KevinRose.vsc-python-indent ", " charliermarsh.ruff ", " ryanluker.vscode-coverage-gutters " ] } } } .devcontainer/postCreateCommand.sh 改行コヌドはLFです。実行暩限の付䞎を忘れずに。 #!/bin/sh # postCreateCommand.sh echo "START Install" sudo chown -R vscode:vscode . uv venv --allow-existing uv sync echo "FINISH Install" .gitignore 改行コヌドはLFです。 # Python-generated files __pycache__/ *.py[oc] build/ dist/ wheels/ *.egg-info # Virtual environments .venv *_cache pyproject.toml [project] name = "devcontainer-python" version = "0.1.0" description = "Add your description here" readme = "README.md" requires-python = ">=3.12" dependencies = [] [dependency-groups] dev = [ "poethepoet>=0.29.0", "pytest-cov>=5.0.0", "pytest>=8.3.3", "ruff>=0.7.1", ] [tool.ruff] line-length = 200 [tool.coverage.run] branch = true source = ["tests"] omit = ["tests/fixtures/*"] data_file = ".pytest_cache/.coverage" [tool.coverage.report] exclude_lines = [ "pragma: no cover", "def __repr__", "def __str__", "raise AssertionError", "raise NotImplementedError", "if __name__ == .__main__.:", "if TYPE_CHECKING:", "if typing.TYPE_CHECKING:", ] [tool.coverage.xml] output = ".pytest_cache/coverage.xml" [tool.poe.tasks] lint = "ruff check ." test = "pytest" cover = "pytest --cov=. --cov-report xml" fmt = "ruff format . --check" build = ["fmt", "lint", "test"] 執筆 @sato.taichi 、レビュヌ @mizuno.kazuhiro  Shodo で執筆されたした 