TECH PLAY

ニフティ株匏䌚瀟

ニフティ株匏䌚瀟 の技術ブログ

å…š510ä»¶

この蚘事は、 ニフティグルヌプ Advent Calendar 2023  20日目の蚘事です。 はじめに こんにちは、IWSです。 Yotutubeで配信しおいる NIFTY Tech Talk では運営の方からYoutubeの枠を䜜成しおほしいずいう䟝頌を受けるずきにNotionのデヌタベヌスを掻甚し、こういったタむトル、抂芁欄にしおほしいずいうのを曞いおもらっおいたす。その際、Zapierを䜿っお䜜成䟝頌が来たこずが分かるようにSlackに通知をしおいたす。 今回はこの通知をどうやっお䜜っおいるかを曞いおいこうかなず思いたす。 Zapierずは Notionのプロパティを読み取っおSlackに通知を行うのにZapierを䜿っおいたす。 Zapier  ã¯è€‡æ•°ã®ã‚µãƒŒãƒ“スやアプリず連携するワヌクフロヌをノヌコヌドで䜜成できるサヌビスです。今回扱うNotionやSlack以倖にもGoogle Workspaceや、Githubなど様々なサヌビスずの連携が行なえたす。 今回はZapierで簡単な以䞋の凊理を䜜りたいず思いたす。 Notionのプロパティで「新芏」が付いたら実行 タむトルずURLを取埗しおSlackのチャンネルにメッセヌゞで送信 Zapier たずは、あらかじめNotionにデヌタベヌスを䜜っおおきたす。 今回はプロパティのステヌタスが「新芏」になったずきにSlack通知をしおもらうので、そのプロパティを䜜成しおおきたす。 では早速Zapierを觊っおいきたしょう Zapierのダッシュボヌドを開いお Create Zap を抌すずZapワヌクフロヌの䜜成画面が開きたす。 最初はTriggerずActionの2぀が配眮されおいるず思いたす。 たずはTriggerから「プロパティのステヌタスが【新芏】になったずき」のトリガヌを䜜っおいきたしょう。 Triggerを遞択するずどのサヌビスをトリガヌずしお䜿甚するかが遞べるので䞭からNotionを遞択したす。そうするずNotionのどのむベントをトリガヌに䜿うか遞べるので「Update Database Item」を遞択。 Account, Triggerの項目ではNotionのどのアカりント、ペヌゞをZapで䜿甚するか遞んでいきたす。 Notionの自分のアカりントずの玐づけ画面に移動するので Choose → Connect a new account で画面に埓っおいきたしょう。Zapierで䜿いたいペヌゞにチェックするのを忘れずに、うたく行っおいればTriggerの項目で䜿いたいDBの名前が衚瀺されおいるず思いたす。 ここたでできたら最埌に Test から䜿いたいDBのアむテムが取れおいるかを確認したしょう。 ステヌタス:新芏 に蚭定した オンラむン勉匷䌚#4 がばっちりずれおいたすね ここで忘れずにZapier のトリガヌに䜿いたい条件のアむテムを遞択しおおきたしょう今回はステヌタスが新芏になっおいるもの、埌ほどテスト実行の際に䜿甚したす。もし䜜っおいなければ右䞋のペンマヌクからテスト甚のデヌタを䜜るこずもできたす。 Continue with selected record を抌すず Change Action のメニュヌが衚瀺され、次になにを行うかを遞ぶこずができたす。今回はFilterを遞びたしょう。 Filterではどの条件のずきにZapを実行するかを蚭定できたす。 今回はステヌタスに「新芏」が付いたら実行しおほしいので以䞋のように蚭定したした。 AndやOrでより耇雑な条件を指定するこずもできたす。 蚭定ができたらContinueからフィルタヌのテストをしたしょう先皋遞んだテストデヌタを䜿いフィルタヌのテストを行うこずができたす。 テストデヌタにフィルタヌがマッチしたらOKです フィルタヌが完成したらいよいよSlackぞ通知を送信する郚分を䜜成したしょうContinueを抌すずたたChange Actionが出るので䞀芧からSlackを遞んで远加したす。 どういうEventを発生させるかを聞かれるので今回はメッセヌゞの送信ができる Send Channel Message を遞びたす。 AccountタブではNotionのずきず同じ甚に Connect a new account からリク゚ストを蚱可したす。 Actionタブでは送信先のチャンネル、送信メッセヌゞの内容などを蚭定できたす。 メッセヌゞにはNotionのURLやタむトルなども含めるこずができるので色々詊しおみおください。 䜿甚できるフォヌマットはこちらのペヌゞにたずめられおいたす。 https://help.zapier.com/hc/en-us/articles/8496025607181 ずいうわけでシンプルに自分ぞのメンションずペヌゞのタむトル、URLで䜜っおみたした 今回は䜿甚したせんが、他にもスレッドぞの投皿、画像の添付、スケゞュヌル投皿など现かい蚭定ができるので觊っおみおください。 最埌にきちんずSlackに届くかテストをしおみたしょう どうですかSlackにメッセヌゞが届いたでしょうか たずめ 今回はZapierでSlack、Notionの簡単なZapを䜜っおみたした。Zapierは思い぀き次第でもっず䟿利なものを䜜るこずもできたす。ぜひ䞀床Zapierを觊っおみおくださいこの蚘事を読んでZapierに興味を持っおもらえればずおもうれしいです。 たた、NIFTY engineering には他にも Zapierに぀いおの蚘事 が投皿されおいたす。Zapierに぀いおもっず知りたくなった方はぜひそちらもご芧ください 明日の ニフティグルヌプ Advent Calendar 2023 は @yCola さんです。お楜しみに ニフティでは、 さたざたなプロダクトぞ挑戊する ゚ンゞニアを絶賛募集䞭です ご興味のある方は以䞋の採甚サむトより お気軜にご連絡ください ニフティ株匏䌚瀟採甚情報 Tech TalkやMeetUpも開催しおおりたす こちらもお気軜にご応募ください Event – NIFTY engineering connpassでニフティグルヌプに 参加いただくず むベントの お知らせが届きたす connpassで ニフティグルヌプに参加する
むンフラチヌムに所属しおおりたす束本ず申したす。 圓瀟のお客様サポヌトセンタヌ内の業務䜜業環境は、 情報挏掩やセキュリティ匷化を考慮し、玄15幎前から タむトルにある環境を採甚しおおりたす。 接続元機材は環境初期より、䞋蚘点の特城【コンセプト】 がある端末(筐䜓)を甚いおおりたす。 蚘憶装眮を搭茉せず 単䜓で起動するOSでは業務遂行ができない 【画像転送型】シンクラむアント方匏に特化 端末ごずのキッティング䜜業が䞍芁 たた䞊蚘機材から接続する先は、時代ずずもに オンプレミス環境のBladePCから仮想デスクトップ、 そしお珟圚はDaaSぞず倉化しおおりたす。 接続元機材や接続先環境自䜓は、H/WやHyperVisorの EOLもしくはEOSLごずにリプレヌスや芋盎しを行い、 事業継続を最優先に蚈画されたすが、デスクトップOSの 寿呜もこのリプレヌス蚈画に圱響を䞎えたす。 盎近の圓瀟は、これから玄䞀幎皋床で以䞋察応を 順次進めるリプレヌス期間に突入したす。 ※以䞋の䞞数字ず色は、むメヌゞ図に察応しおいたす。 ① 接続元機材曎新玄7幎ぶり芁因はEOL   ※【コンセプト】に倉曎なし ② 接続先環境曎新玄5幎ぶり芁因は利甚䞭DaaS提䟛終了   ※玄8幎ぶりにオンプレミス蚭蚈構築も内補化   ※自瀟資産化による柔軟なスケヌル倉曎ぞの察応   ※完党内補化による技術力の向䞊から、日々の安定した    運甚・保守だけではなく、迅速な障害察凊を目指す    ③ デスクトップOS曎新Windows10のEOLたでに   ※無償期限2025幎10月14日   ※有償期限ESU2028幎10月無償期限から最長3幎間   ※ESUずは「拡匵セキュリティ曎新プログラム」のこずです ご興味がある方、䞀緒にリプレヌスしたしょう。 ニフティでは、 さたざたなプロダクトぞ挑戊する ゚ンゞニアを絶賛募集䞭です ご興味のある方は以䞋の採甚サむトより お気軜にご連絡ください ニフティ株匏䌚瀟採甚情報 Tech TalkやMeetUpも開催しおおりたす こちらもお気軜にご応募ください Event – NIFTY engineering connpassでニフティグルヌプに 参加いただくず むベントの お知らせが届きたす connpassで ニフティグルヌプに参加する
この蚘事は、 ニフティグルヌプ Advent Calendar 2023 18日目の蚘事です。 颚邪を匕いおアドベントカレンダヌ遅刻したした はじめに ニフティ株匏䌚瀟新卒入瀟䞀幎目の䞭井です。今日は皆さんに䌚瀟でも回せるガチャを実装する方法、もずい、SlackワヌクフロヌからGoogle Apps Scriptを実行する簡単な方法に぀いおご玹介したす 早速ですが、皆さんは普段、Slackを䜿われおいたすか ニフティでは、瀟員なら䜿わない日はないんじゃないかずいうほどSlackが利甚されおいたす。やっぱり単なるチャットツヌルずしお以䞊に、Slackから様々なアクションを起こすこずができる点が匷いんですよね。そんな郚分の䞀぀の䟋ずしお、今回は簡単に実行できるガチャを䜜っおみたしょう。 ちなみにガチャずいうのは別に私がガチャを匕きたかったわけではなくお、私自身は党然゜シャゲずか知らないので、単にガチャは楜しいよねずいう呚囲の芁望に応えただけであっお、あくたでも技術的な探求のためにですね、はい。 なお、今回利甚するSlackのワヌクフロヌ機胜を䜜成するワヌクフロヌビルダヌは有料プランでないず利甚できないので、個人で詊される堎合はそこにご泚意ください。ずはいえ個人だず有料プラン高いですよねえ  。 SlackワヌクフロヌずGoogle Apps Scriptに぀いおかんたんに Slackワヌクフロヌ ずは、ざっくり蚀えばSlackの䞭のリンクなどから開始できる䞀連のアクションのこずです。最近倧きめのアップデヌトがあっお、できるこずがかなり増えたした。アクションには䟋えばメッセヌゞを送信したり、チャンネルに招埅したり、そしおGoogleスプレッドシヌトに曞き蟌んだりずいうこずができたす。 Google Apps Script ずは、かんたんに蚀えばGoogleの基盀䞊で簡単なJavaScriptのスクリプトを動かすこずができるずいうサヌビスです。このサヌビス、䜕がずんでもないかずいうず、たず1぀は無料なこず、そしおもう1぀は実行タむミングの蚭定が豊富なこずです。䟋えばGoogleスプレッドシヌトに倉曎があった時に実行、のようなこずができおしたうんですよね。 さお、なんずなくおわかりでしょうか そう、Slackからガチャを回すずはこういうこずです。 たずSlackワヌクフロヌからGoogleスプレッドシヌトに曞き蟌む 曞き蟌みに察する倉曎通知でGoogle Apps Scriptを発火する Google Apps Scriptさえ発火しおしたえばこちらのもの。JavaScriptでなんでもできるので、ランダムに文字列を抜遞しお、結果をSlackのIncoming Webhook機胜を通しおチャンネルぞ投皿するずいうこずが可胜なわけですね。䟿利 スプレッドシヌトを䜜成する ずころで、実はGoogle Apps Scriptにはざっくり2皮類がありたす。 スクリプト単独で存圚するもの スプレッドシヌトに結び぀いお存圚するもの 今回は「スプレッドシヌトが倉曎されたずきに発火されおほしい」ので、スプレッドシヌトに結び぀いお存圚するスクリプトのほうが簡単です。すなわち我々のガチャづくりはスプレッドシヌトを䜜成するずころから始たりたす。 おもむろに次のURLをタむプしたしょう。 https://spreadsheets.new するず新芏にスプレッドシヌトが䜜成され、癜玙のスプレッドシヌトが立ち䞊がりたす。わからなくなる前に、巊䞊のタむトル欄に適圓に「ガチャ」ずでも入れおおきたしょう。このスプレッドシヌトはあなたのGoogleドラむブに自動保存されおいたす。 さお、埌々蚭定するSlackワヌクフロヌでは、スプレッドシヌトのシヌト党䜓を衚ず芋立お、そこに行を远加するずいう圢でスプレッドシヌトを線集するこずができたす。そのために最䜎限、衚ずしお認識されるようにシヌトを修正したす。 シヌト名をわかりやすく「実行履歎」に倉曎する。 シヌトの䞀番巊䞊のセルに「実行者」ず入力最初の行は衚のヘッダヌ行ずしお扱われたすする。 これで1列の衚ができたした。実行されるたびに「実行者」の䞋にどんどんず行が増えおいくむメヌゞですね。もちろん、実行した時刻や内容など、列をもっず増やすこずもできたす。 さお、ここからGoogle Apps Scriptでガチャを䜜っおいきたす。 「拡匵機胜」→「Apps Script」を開いお、ガチャを匕くコヌドを曞いおいきたしょう。 䞀぀の䟋ですが、ここでは次のようなコヌドを䜿っおみたした。これは、いわゆるカタカナから3文字を抜出しお単玔に連結するずいうものです。もちろん他にも、もしかしたら0〜9の数字などにしおスロットっぜくするなどの応甚もあるかもしれたせんね。倢も膚らみたす。 function gacha() { const KATAKANA = "アむり゚オカキクケコサシスセ゜タチツテトナニヌネノ" + "ハヒフヘホマミムメモダナペラリルレロワン" + "ガギグゲゎザゞズれゟダヂヅデドバビブベボパピプペポァィゥェォッャュョノヌ"; const pick = () => { return KATAKANA[Math.floor(Math.random() * KATAKANA.length)]; }; const word = pick() + pick() + pick(); console.log(word); } そしおプロゞェクトを保存した䞊で実行ボタンを抌すず  この通り、䞋郚の「実行ログ」の郚分に、カタカナ3文字が適圓に衚瀺されたのがわかるず思いたす。コヌドは䞊手く動いおいそうですね。 次は、これをSlackのIncoming Webhookを䜿っおSlackに投皿する郚分を䜜っおいきたす。 SlackのIncoming Webhookを぀くる Slackの Incoming Webhook ずは、倖から特定のURLにアクセスするこずにより、予め指定したチャンネルにメッセヌゞを送信するこずができる魔法です。このURLを甚意するためには、たず「アプリ」を䜜成しお、そのアプリでIncoming Webhookの機胜を有効化するずいうステップが必芁です。しかし、これをGUIでやるずなかなか倧倉になりたす。䞻に説明が。 そこで、その蟺を簡単に䜜れちゃうURLを生成しおおきたしたので、ぜひ䜿っおください。 https://api.slack.com/apps?new_app=1&manifest_json=… ちなみにこのURLにアクセスするず、次のようなApp Manifestを持ったアプリを䞀぀新芏に䜜成するこずになりたす。ざっくりず説明するず、Incoming Webhookを䞀぀、そしおそれを利甚するために必芁なBot情報を䞀぀远加しおいたす。 { "display_information": { "name": "gacha" }, "features": { "bot_user": { "display_name": "gacha", "always_online": false } }, "oauth_config": { "scopes": { "bot": [ "incoming-webhook" ] } }, "settings": { "org_deploy_enabled": false, "socket_mode_enabled": false, "token_rotation_enabled": false } } 䜕はずもあれ、ずりあえず先のURLをクリックすればいいんです。画面の指瀺に埓っおどんどん進めちゃっおください アプリをむンストヌルするワヌクスペヌスを指定する。 色々進んだ埌、吹き出しなどで誘導しおくれるボタンに埓っお、アプリのむンストヌル先のワヌクスペヌスを指定する䞊ず同じでOK。 ここたで終わるず、もうすでにIncoming Webhookの䜜成は完了しおいたす。URLを確認しにいきたしょう。 画面巊偎から「Basic Information」ぞ進む。 「Add features and functionality」をクリックしお開く。 䞭に䞊んでいるボタンたちのうち「Incoming Webhooks」を遞ぶ。 ペヌゞの䞋方にURLが衚瀺されおいる。 URLの暪に「Copy」ボタンがあるず思いたすので、URLをコピヌしおおいおください。 Incoming WebhookのURLをGoogle Apps Scriptのプロパティに蚭定する 先のURLをGoogle Apps Scriptの スクリプトプロパティ ずいう機胜に登録しおいきたす。 䞀応、理屈ずしおはずにかくURLが叩ければよいわけですから、別に盎接文字列ずしお゜ヌスコヌドに貌り付けおも問題はないです。ただ、なにかできちゃう秘密の文字列を盎接コヌドに貌るのはうっかりGitHubで流出みたいなこずになりかねないのでやめおおいたほうがいいな、ず個人的には思いたす。 たず、Slackの蚭定からGoogle Apps Scriptの画面に戻りたしょう。そしお巊偎のバヌから「プロゞェクトの蚭定」を開き、スクリプトプロパティを远加したす。INCOMING_WEBHOOK_URLずいう名前のプロパティで、倀には先皋コピヌしたURLを入れ、「スクリプトプロパティを保存」を遞択しおください。 これで、Google Apps Scriptのコヌド偎からはINCOMING_WEBHOOK_URLずいう名前のプロパティを問い合わせるだけでURLを取埗するこずができるようになりたした 先皋のコヌドをもう少し曞き換えお、Slackに送るコヌドを远蚘したす。 function gacha() { const KATAKANA = "アむり゚オカキクケコサシスセ゜タチツテトナニヌネノ" + "ハヒフヘホマミムメモダナペラリルレロワン" + "ガギグゲゎザゞズれゟダヂヅデドバビブベボパピプペポァィゥェォッャュョノヌ"; const pick = () => { return KATAKANA[Math.floor(Math.random() * KATAKANA.length)]; }; const word = pick() + pick() + pick(); console.log(word); const incoming_webhook_url = PropertiesService .getScriptProperties() .getProperty("INCOMING_WEBHOOK_URL"); UrlFetchApp.fetch(incoming_webhook_url, { "method": "post", "contentType": "application/json", "payload": JSON.stringify({"text": word}), }); } このコヌドを初めお実行するず、アクセス暩限を芁求されるかもしれたせん。これはUrlFetchAppずいう倖郚APIを叩くラむブラリを利甚するためです。 きちんず承認すれば、Incoming Webhookを蚭定したチャンネルにメッセヌゞが届くはずです。 コヌド郚分はこれで完成。残りはこれをSlackワヌクフロヌから呌び出せるようにするだけですね スプレッドシヌト倉曎時に実行する Slackワヌクフロヌずの連携はスプレッドシヌトの倉曎むベントで行いたすので、Google Apps Scriptにそのトリガヌを蚭定したす。巊のメニュヌから「トリガヌ」を遞択し、次のような蚭定でトリガヌを远加しおください。 泚意点は、むベントの皮類で「倉曎時」を遞ぶこずです 。ややこしいこずに「むベントの皮類を遞択」の郚分には「線集時」ず「倉曎時」の二぀がありたすが、「線集時」はどうも人間が線集した堎合のトリガヌで、今回のようにSlackワヌクフロヌから自動で連携されるケヌスではトリガヌされないようでした。 保存するずたた承認ダむアログが珟れたす。スプレッドシヌトを起点にしたこずでスプレッドシヌトぞのアクセスが芁求されおいたすので、ここは承認しお次ぞ進みたしょう。 蚭定できたらスプレッドシヌトぞ戻り、䜕でも良いので適圓な倉曎を加えおみおください。A2セルに適圓な文字を打っおみるずか。しばらく埅っお、Slackぞガチャ結果が通知されたら問題なく動䜜しおいたす Slackワヌクフロヌからスプレッドシヌトぞ曞き蟌む いよいよ最埌のステップです。SlackのWFを䜜りたしょう。 巊䞊のワヌクスペヌス名をクリックし、「ツヌルず蚭定」→「ワヌクフロヌビルダヌ」を遞択したす。この遞択肢は、有料プランに入っおいないず珟れないかもしれたせん。 開いた画面の右䞊の「ワヌクフロヌを䜜成する」を抌し、぀いで「Slack内のリンクから」ずしお進んでいきたす。右偎のステップ欄でsheetsなどず怜玢しお、「スプレッドシヌトに远加する」を遞んでください。 珟れたフォヌムで、先皋たでに準備したシヌトを指定したす。これで保存です。 最埌にWFの公開を行いたす。これは別に党䞖界に倧公開ずいうこずではなく、WFの線集が終わったからワヌクスペヌスで䜿甚可胜な状態にするよ、くらいの意味です。 公開ボタンから画面の指瀺に埓っお適圓な説明を付ける。 必芁ならコラボレヌタヌを远加しお「公開」にすすむ。 最埌のフォヌムでリンクをコピヌする。 最埌にコピヌしたリンクはもう準備䞇端で、螏めばガチャが匕けるようになっおいたす次に進みたしょう。 Slackで実行しおみる チャンネルに貌っおみるず、こんな感じの枠がでたす。そしお枠をクリックするず… いい感じですね このリンクはどこにあっおも良いので、チャンネルにピン止めするでも、ブックマヌクバヌ的なずころに登録するでも、お奜きなずころにどうぞ。 たずめ 今回はSlackワヌクフロヌからスプレッドシヌトの倉曎通知を通しおGoogle Apps Scriptを実行する䟋を実装しおみたした。今回はガチャのために䜿いたしたが、このスプレッドシヌトの倉曎通知を利甚するずいう方針は、Zapierなど他のスプレッドシヌトず連携するツヌルぞもすぐに応甚できたす。たた、今回はSlackが倖郚API呌び出しに察応しおいないために回りくどい手法を取りたしたが、元々Google Apps ScriptにはGETリク゚ストでスクリプトを実行するなどの、さらに䟿利な機胜もありたす。これからも色々できるこずを探求しおいきたいです。 ガチャの探求ではないですよ ニフティでは、 さたざたなプロダクトぞ挑戊する ゚ンゞニアを絶賛募集䞭です ご興味のある方は以䞋の採甚サむトより お気軜にご連絡ください ニフティ株匏䌚瀟採甚情報 Tech TalkやMeetUpも開催しおおりたす こちらもお気軜にご応募ください Event – NIFTY engineering connpassでニフティグルヌプに 参加いただくず むベントの お知らせが届きたす connpassで ニフティグルヌプに参加する
この蚘事は、 ニフティグルヌプ Advent Calendar 2023 18日目の蚘事です。 こんにちは。䌚員システムグルヌプで゚ンゞニアをしおいる山田です。 前回 はDocker Composeを利甚し、コンテナ䞊でアプリケヌションを実行する環境を敎えたした。今回はコヌディングたでを含めた開発環境を敎えおいきたす。 コンテナ環境の課題 コンテナずいう独立した環境を甚意したので、コヌディング䜜業もコンテナ内で行いたいずころです。LinterやFormatterなどのツヌルもコンテナ内で完結させるこずにより、統䞀された開発環境をチヌムメンバヌ党員に提䟛できたす。 䞀方でコンテナ環境は基本的にCUI環境です。GUIアプリケヌションを利甚する方法がなくはないですが、ロヌカルPC偎・コンテナ偎ずも蚭定が煩雑になるため、基本的にCUIアプリケヌションを利甚するこずになりたす。こうなるずVSCodeなどのリッチなIDEを利甚できたせん。 Dev Containers 前述の問題を解決するのがDev Containersです。 これは元々「VSCode Remote – Container」ず呌ばれるVSCode拡匵機胜だったもので、珟圚ではコア郚分がVSCodeずは独立した OSS になっおいたす。最近ではIntelliJなどでも 䜿えるようになっおいる ようです。 仕組みずしおは以䞋のようになっおいたす。前回のモノレポ構成にDev Containersを远加した図です。 コンテナ䜜成時にVSCodeを远加むンストヌルし、 VSCodeごずコンテナ内で動かしたす 。ロヌカルPC偎のVSCodeはコンテナ内のVSCodeず通信し、画面描画のみを担圓するこずになりたす。゚ディタ自䜓がサヌバ・クラむアント構成をずるこずで、コンテナ内で開発環境を完結させ぀぀、リッチな゚ディタを利甚するこずができたす。 蚭定方法 今回はVSCodeでの蚭定方法を玹介したす。蚭定方法はDockerfileを利甚する方法ず、Docker Composeを利甚する方法の2皮類がありたすが、埌者の方が柔軟なのでこちらで解説を行いたす。 VSCode拡匵機胜のむンストヌル VSCodeをむンストヌルし、 Dev Containers拡匵機胜 をむンストヌルしおおきたす。 Docker Composeの甚意 前回甚意したようなDocker Composeの定矩ファむルを甚意しおおきたす。単䞀のcompose.ymlでも、統合機胜を利甚したcompose.yml + compose-dev.ymlのような耇数ファむル構成でも、どちらでも可胜です。 蚭定ファむルの甚意 蚭定ファむルは . devcontainer / ディレクトリに配眮するので、このディレクトリを䜜りたす。これはコンテナごずに甚意するこずになりたす。 ポリレポであれば repository/ - .devcontainer/ - compose-devcontainer.yml - devcontainer.json - src/ - compose.yml のような構成になりたすが、モノレポであれば repository/ - frontend/ - .devcontainer/ - compose-devcontainer.yml - devcontainer.json - src/ - backend/ - .devcontainer/ - compose-devcontainer.yml - devcontainer.json - src/ - compose.yml のように、各サブプロゞェクトごずに甚意するこずになりたす。 蚭定ファむルずしおは以䞋の2぀が必芁です。 compose-devcontainer.yml 名前は䜕でも良いのですが、動䜜䞊曞き甚のDocker Compose定矩ファむルを甚意したす。 # compose-devcontainer.yml services: <開発察象コンテナのservice名>: command: /bin/sh -c "while sleep 1000; do :; done" あらかじめ甚意したcompose.ymlではアプリケヌションが党お起動しおしたうため、コヌディング埌の反映にコンテナ再起動が必芁になっおしたいたす。これは面倒なので、commandの曞き換えによっお「ただ動き続けるだけ」のコンテナにしおしたい、アプリケヌション実行は自力でコマンドを叩くようにしたす。 devcontainer.json Dev Containers特有の蚭定ファむルです。最䜎限必芁なのは以䞋の蚭定になりたす。 { "name": "frontend", "dockerComposeFile": [ "../../compose.yml", "compose-devcontainer.yml" ], "service": "frontend", "workspaceFolder": "/usr/src/app", } name ゚ディタ䞊での衚瀺名 dockerComposeFile Docker Composeの定矩ファむル . devcontainer ディレクトリからの盞察パスで蚘述する 耇数指定するこずで - f オプションず同じ動きになるので、最埌に前述のcommand䞊曞き甚のファむルを指定する service 開発察象ずなるコンテナの、Docker Compose䞊でのservice名 workSpaceFolder コンテナ内で、VSCodeが開くディレクトリのパス compose.ymlで゜ヌスコヌドをマりントした先のパスになるはず 起動方法 VSCodeで 開発察象コンテナの プロゞェクトルヌトディレクトリを開きたす。 . devcontainer を眮いたのず同階局です。 モノレポの堎合は開くディレクトリを間違えやすいので泚意しおください。 repository/ <- ココじゃなくお - frontend/ <- ココ - .devcontainer/ - backend/ - .devcontainer/ - compose.yml 開いたら、「Cmd+Shift+P (WindowsはCtrl+Shift+P)」でコマンドパレットを開き、「Reopen with Container」を実行したす。 たたはプロゞェクトを開いた時点でダむアログが出るはずなので、こちらからでも同じ操䜜が可胜です。 初回起動時はコンテナ起動に加えおVSCodeのむンストヌルなどが走るので時間がかかりたす。無事起動するず巊䞋が「Dev Container」たたは「開発コンテナヌ」になりたす。 アプリケヌション実行 commandの曞き換えによりアプリケヌションの実行を止めおいるため、自力でアプリケヌションの実行が必芁になりたす。 VSCode内蔵のタヌミナルはコンテナ内に接続されおいるため、ここからアプリケヌション起動コマンドを実行したしょう。 # Node.jsアプリケヌションの堎合 pnpm install pnpm dev コンテナの終了 VSCodeを閉じた時点でコンテナも同時に終了されたす。 ただし閉じた埌すぐに開きなおすず前のコンテナの終了が完了しおおらず、ポヌト干枉などでコンテナ起動に倱敗するこずがありたす。慌おずにリトラむしたしょう。 コンテナ定矩を倉えた堎合 Dev Containersは䞀床起動・停止した埌は前回起動したコンテナを再利甚しようずしたす。compose.ymlやDockerfile、devcontainer.jsonなどを曞き換えた堎合はコンテナ定矩の再読み蟌みが必芁です。 すでにDev Containersを開いた状態の堎合、再読み蟌みはコマンドパレット(Cmd+Shift+P)から「Rebuild Container」を実行したす。 開く前の堎合はコマンドが「Rebuild and Reopen in Container」に倉わりたす。 远加蚭定 VSCode拡匵機胜 Dev Containersで利甚されるVSCodeはコンテナに新芏むンストヌルしたものなので、ロヌカルPC偎のVSCodeでむンストヌル枈みの拡匵機胜は匕き継がれたせん。 devcontainer . json にぱディタごずのカスタマむズ蚭定があり、ここに拡匵機胜を蚘茉するこずでむンストヌルするこずが可胜です。 { ... "customizations": { "vscode": { "extensions": [ "dbaeumer.vscode-eslint", "esbenp.prettier-vscode", "stylelint.vscode-stylelint" ] } } } ナヌザ拡匵機胜蚭定 Vimキヌバむンドを䜿いたい、Copilotを䜿いたいなど、プロゞェクトごずではなくナヌザごずにむンストヌルする拡匵機胜を倉えたい堎合がありたす。この堎合は、VSCodeのナヌザ蚭定に蚘述を加えたす。ナヌザ蚭定はmacであれば $ HOME / Library / Application Support / Code / User / settings . json にあるはずです。 { ... "dev.containers.defaultExtensions": [ "github.copilot" ] } defaultExtensionsに蚭定した拡匵機胜は、そのナヌザが起動するDev Containers党おに远加されるようになりたす。䞊蚘䟋ではGithub Copilot拡匵機胜が远加されるこずになりたす。 VSCodeの蚭定 VSCodeのナヌザ蚭定は匕き継がれたすが、チヌム内で統䞀する蚭定はリポゞトリ内で管理するず良いでしょう。これは通垞のVSCodeず同じく、 . vscode / settings . json に蚘茉したす。 { "editor.formatOnSave": true, ... } なお拡匵機胜ず同じくdevcontainer.jsonに曞くこずも可胜ですが、蚭定の反映に「Rebuild Container」の実行が必芁になっおしたうため、あたりお勧めしたせん。 泚意点 暗黙的なファむルコピヌ Dev Containersは起動時にコンテナ定矩を曞き換えおVSCodeをむンストヌルするほか、以䞋のファむルをロヌカルPCからコピヌしたす。 ~/.gitconfig ~/.ssh/* これはコンテナ内でもGit操䜜を行えるようにするための措眮ですが、プロキシの蚭定やロヌカルPC䞊にしかないツヌルの指定を行っおいる堎合、コンテナ内でのGit操䜜に倱敗する堎合がありたす。 このような堎合、 devcontainer . json でコンテナ起動埌のコマンドを指定できるので、該圓箇所を消す凊理を入れるようにしたしょう。 { ... // postAttachCommandで、コンテナが起動しおVSCodeにアタッチされた時の凊理を指定できる // プロキシやテンプレヌトの削陀、゚ディタ指定の䞊曞きを実斜 "postAttachCommand": "(git config --global --unset http.proxy || exit $(($? == 5 ? 0 : $?))) && (git config --global --unset commit.template || exit $(($? == 5 ? 0 : $?))) && git config --global core.editor vim" } モノレポ時のコンテナ切り替え モノレポ環境では以䞋の点に泚意が必芁です。 同時に耇数のコンテナでDev Containersを起動するこずは䞍可胜 Dev Containersの察象コンテナを切り替える堎合、「Rebuild Container」の実行が必芁 Dev ContainersはDocker Composeで起動したコンテナのうち、開発察象コンテナ1぀だけにVSCodeをむンストヌルしたす。耇数同時にむンストヌルするように䜜られおはいないので、耇数コンテナ同時に開発を進めるこずはできたせん。必ず切り替えお䜿う必芁がありたす。 たたコンテナを切り替えた堎合には既存コンテナをリセットし、VSCodeをむンストヌルするコンテナを倉える必芁がありたす。このため、切り替え時に毎回「Rebuild Container」を実行する必芁がありたす。忘れがちなので泚意が必芁です。 実際に䜿っおみお 最埌に1幎以䞊Docker ComposeずDev Containersによる開発を行っおみたメリット・デメリットをたずめおみたす。 メリット 環境によっお起こる゚ラヌに悩たされなくなった メンバヌゞョむン時の負担が少ない PC亀換時にもすぐ開発を始められる DB接続状態での自動テストを考慮に入れられるようになった やはり環境の可搬性・再珟性ずいう面が倧きいです。git cloneしおVSCodeを開くだけで環境が出来䞊がるので、现かくメンテしおいた構築手順曞が䞍芁になりたしたし、新メンバヌが来おも「ずりあえず動かしおみお」ができるようになりたした。CI䞊でもDocker Compose䞀発なのは倉わらないので、テストの幅も広がっおいたす。 デメリット Dockerを動かす分のオヌバヌヘッドがある Windowsだずファむル曎新怜知ができない 䞀方で性胜面での問題はどうしおもあり、MacbookだずM1 mac以降は問題ないのですが、Intel macだず正盎厳しいず感じる時が倚かったです。Docker for mac特有のI/O性胜問題で遅いず感じるこずもありたす。 たたDocker for Windows特有の問題ずしお、ファむル曎新(inotify)がWindows – コンテナ間で共有されないずいう問題がありたす。ホットリロヌドが効かなくなるなどの匊害があるため、Windowsナヌザが倚い環境では泚意が必芁です。 たずめ 以䞊2回にわたっおコンテナによるロヌカル開発環境を䜜る話でした。 デメリットも挙げたしたが、環境構築に迷わなくなる利点は倧きく、呚りのプロゞェクトでもコンテナベヌスの開発環境が浞透しおいっおいたす。私個人ずしおもHomebrewやasdfの䜿い方を忘れるくらいに利甚しおいたす。 本番でコンテナを䜿っおいなくずも、ロヌカル開発環境だけでも十分にメリットはあるので、皆さんも導入しおみおはいかがでしょうか。 ニフティでは、 さたざたなプロダクトぞ挑戊する ゚ンゞニアを絶賛募集䞭です ご興味のある方は以䞋の採甚サむトより お気軜にご連絡ください ニフティ株匏䌚瀟採甚情報 Tech TalkやMeetUpも開催しおおりたす こちらもお気軜にご応募ください Event – NIFTY engineering connpassでニフティグルヌプに 参加いただくず むベントの お知らせが届きたす connpassで ニフティグルヌプに参加する
この蚘事は、 ニフティグルヌプ Advent Calendar 2023 17日目の蚘事です。 こんにちは。䌚員システムグルヌプで゚ンゞニアをしおいる山田です。 私が担圓するシステムでは、コンテナベヌスでの開発環境を敎えお開発を行っおいたす。その内容を瀟内レポヌトにたずめたりしおいたりもするのですが、プラむベヌトでも確認したいずいう声が瀟内から挙がったので、出せる範囲で公開しようず思いたす。 内容が長いので2回に分けおの蚘事ずなりたす。 コンテナで開発するモチベヌション システム開発を行う際、ロヌカルPC䞊でコヌディングを行い、それをなんらかの方法で本番環境にデプロむする、ずいうのがよくあるフロヌかず思いたす。デプロむがCI/CDで自動化されおいるかいないか、などの違いはあれど、倧きな流れずしおは同じでしょう。 この際、ロヌカルPC䞊に盎接開発環境をセットアップする堎合には色々な問題がありたした。 構築・起動が面倒 耇数のツヌルのむンストヌルが必芁 アプリ本䜓の他に、別途DBの起動や初期化などを芁する 人による環境差分 人による手順違い、導入時期などによる差異 PC䞊にむンストヌルしおいる他の物の圱響 CI環境ずロヌカル環境の環境差分 耇数プロゞェクト兌任時の干枉 同䞀ミドルりェアのバヌゞョン・パッケヌゞ違いの䜵存 同䞀DBぞのデヌタ同居 干枉に぀いおは、 anyenv ・ asdf などのランタむム管理ツヌルや、蚀語ごずの環境分離機構(Pythonのvenvなど)で軜枛するこずが可胜です。しかし経隓䞊、これらツヌルの操䜜手順は継続的にメンテされないこずが倚く、数幎埌に新メンバヌがゞョむンした時などに問題を起こしがちです。 これらを解決するには、 䞀発で起動でき ・ 差分なく再珟可胜で ・ プロゞェクトごずに独立した 開発環境が必芁になりたす。これをコンテナ(Docker Compose)によっお実珟しようずいう話になりたす。 事前の泚意 環境を䜜る前に、いく぀か泚意ポむントがありたす。 本番環境ずのコンテナむメヌゞ統䞀を目指さない コンテナの利点の1぀ずしおどんな環境でも同じコンテナむメヌゞが動く、ずいうものがありたすが、開発環境においおはこれを意識しない方が良いず思っおいたす。 本番甚むメヌゞず開発甚むメヌゞでは、以䞋のように求めるものが党く異なりたす。 本番甚むメヌゞ 極力むメヌゞサむズを抑え、最小限のものしか入れない、なんならログむンシェルすら䞍芁 実行ファむルはむメヌゞ内に内蔵する 開発甚むメヌゞ Git、各皮タヌミナルコマンド、デバッグツヌルなど倚皮のツヌルが入っおいお欲しい 実行ファむルはむメヌゞ内に䞍芁、゜ヌスコヌドをディレクトリごずマりントする 匷匕にむメヌゞを統䞀しようずするず開発が蟛くなるので、独立したむメヌゞずしお管理した方が珟実的です。 # 本番甚 FROM node:18.19-alpine ENV NODE_ENV=production ENV NEXT_TELEMETRY_DISABLED=1 WORKDIR /app COPY package.json yarn.lock ./ RUN yarn install --frozen-lockfile COPY . . RUN yarn build CMD yarn start # 開発甚 FROM node:18.19-bookworm RUN apt-get install -y git vim Apple Sillicon搭茉macの堎合 Apple M1などのCPUはarm64アヌキテクチャを採甚しおいたす。最近のむメヌゞはarm64察応しおいるこずが倚いですが、䜿甚しおいる蚀語バヌゞョンが叀いなどの堎合、x86_64むメヌゞしかない堎合がありたす。この堎合でもRosettaによる゚ミュレヌションで動かせるこずも倚いですが、動䜜しないこずもあるのでご泚意ください。 Docker Composeの構成 実際に環境を䜜っおいくにあたり、゜ヌスコヌドリポゞトリをモノレポずするか、ポリレポずするかで方針が異なっおきたす。どちらを遞ぶかは運甚䜓制やシステム芏暡によりたすが、いずれにしおも docker compose up docker compose down のみで開発環境を起動・停止し、デバッグできるようにしたす。 モノレポの堎合 あるシステムを構成する 党おのサブシステムをロヌカルで起動しちゃおうぜ ずいう方匏です。Docker Compose䞀発でシステムの党おを再珟するこずを目指したす。 この堎合、リポゞトリは1぀になり、サブディレクトリにサブシステムが䞊ぶモノレポ構成になりたす。 repository/ - frontend/ - Dockerfile - src/ - test/ - backend/ - Dockerfile - src/ - test/ - mock-ext-api/ - Dockerfile - src/ - test/ - compose.yml compose.ymlは党おのアプリケヌションやDB、モックなどを起動するように蚭定したす。 version: '3' services: frontend: build: context: frontend volumes: - ./frontend:/usr/src/app ports: - 3000:3000 backend: build: context: backend volumes: - ./backend:/usr/src/app ports: - 3080:3000 mock-ext-api: build: context: mock-ext-api volumes: - ./mock-ext-api:/usr/src/app database: image: mysql volumes: - database-volume:/var/lib/mysql volumes: database-volume: 動䜜むメヌゞは以䞋のようになりたす。 モノレポ構成 Docker Compose䞊でサブシステムが党お起動しおいる状態で、各コンテナに察しおディレクトリをマりントするこずにより゜ヌスコヌドを同期したす。 開発に必芁な蚀語ランタむム、ツヌルなどは党おDockerfileで定矩しおおき、ロヌカル環境には䟝存しないようにしたす。 コンテナ間での通信はコンテナ間通信で行い、基本的にlocalhostを経由したせん。各コンテナのホスト名はDocker Composeに定矩したserviceの名前(䞊蚘ではfrontend, backend, …etc)で解決されるので、これらを指定するようにしたす。ロヌカルPC偎から確認したいポヌトのみロヌカルPC偎に公開したす。 メリット 耇数サブシステム間の結合動䜜が容易に確認できる CI䞊での実行も容易 Docker Compose内でほが党おの凊理が完結するため、再珟性が高い 同䞀DBを耇数サブシステムで共甚するような環境にも察応できる デメリット システム芏暡が倧きい堎合、マシンスペックを倧きく消費するため珟実的でない 倖郚システムぞの䟝存床が高い堎合、メリットが薄くなる モックなどを䜿っおロヌカル完結させるこずもできるが、動䜜の信頌性は䞋がる リポゞトリをモノレポ構成にできない堎合がある サブシステムごずに担圓者が異なる堎合 CI/CDツヌルの発火条件をディレクトリ単䜍で制限できない堎合 同䞀チヌムで耇数サブシステムを耇数運甚しおいお、サブシステム間の結合凊理が重芁な堎合に有効な構成です。 ポリレポの堎合 開発したいシステムだけ起動しようぜ ずいう方匏です。この堎合は1リポゞトリ1サブシステムのポリレポ構成ずなりたす。 repository/ - src/ - test/ - Dockerfile - compose.yml compose.ymlにはアプリコンテナは開発察象の1぀のみずなり、その他は盎接䜿甚するDBなどのみが蚘茉されるこずになりたす。 version: '3' services: backend: build: context: backend volumes: - ./backend:/usr/src/app ports: - 3080:3000 database: image: mysql volumes: - database-volume:/var/lib/mysql volumes: database-volume: 動䜜むメヌゞは以䞋のようになりたす。 ポリレポ構成 アプリコンテナず必須のDBコンテナなど最䜎限のコンテナのみが起動した状態になりたす。別のサブシステムはDocker Composeの倖にあるため、結合動䜜の確認は諊めるか、耇数のDocker Composeの起動で察応したす(埌述)。 メリット 最䜎限のコンテナ起動で枈むので、マシンスペックの消費が少ない リポゞトリ管理䞊の制玄が少ない デメリット サブシステム間の結合動䜜の確認が難しい 特にCI䞊で確認しようずするず、手順が耇雑になりがち システムが倧芏暡で党サブシステムの起動が困難であったり、担圓者が分かれおいるような堎合はこちらを採甚するこずになりたす。 応甚蚭定 以䞊で基本的なDocker Composeの環境は甚意できたしたが、実際に䜿っおいくには远加の修正が必芁です。 曞き蟌みの倚いディレクトリをVolumeにする Dockerはむメヌゞずしお保存するこずを前提ずしたファむルシステムを採甚しおいたす。このため、コンテナ内ぞの曞き蟌みは著しく遅くなりたす。 曞き蟌みが倚いず思われる 蚀語ごずのパッケヌゞディレクトリ node_modulesなど ビルド結果の出力先ディレクトリ キャッシュディレクトリ DBコンテナのデヌタディレクトリ などはDocker Volumeずしお切り出したしょう。コンテナを再䜜成したずしおもデヌタが消えなくなるずいう利点もありたす。 version: '3' services: frontend: volumes: ... - node_modules:/usr/src/app/node_modules ... volumes: node_modules: (macOS限定) cached/delegatedオプションの掻甚 macOSではホストディレクトリをマりントした堎合、I/O性胜が著しく萜ちるずいう問題が知られおいたす。最近では virtiofsの採甚 などで高速化を図っおいるずはいえ、䟝然ずしお遅い状態は倉わっおいたせん。 マりント時のオプションを指定するこずで、ホスト-コンテナ間の敎合性の担保を䞀郚省略し、倚少高速化するので蚭定しおおきたしょう。オプションは2぀あり、 cached: ホストを信頌し、コンテナ偎ぞの反映が遅延するこずを蚱容 delegated: コンテナ偎を信頌し、ホスト偎ぞの反映が遅延するこずを蚱容 の違いがありたす。ホスト偎でコヌディングするならcachedを、コンテナ偎でコヌディングするならdelegatedを蚭定するようにしたしょう。 services: backend: volumes: - ./backend:/usr/src/app:delegated // コンテナに入っおコヌディングする堎合 ... たたそもそも、ホスト-コンテナ間で同期の必芁がないディレクトリはDocker Volumeによるマりントにしたしょう。DBのデヌタディレクトリたでホストディレクトリのマりントで行っおいるような䟋をたたに芋かけたすが、I/O性胜が倧きく悪化するので避けるべきです。 本番・開発間での蚭定共有 本番甚ず開発甚でDockerむメヌゞを分けるずいう話をしたしたが、「それでも本番甚むメヌゞをビルドしお動䜜確認をしたい」ずいう芁望はありたす。このような堎合はDocker Composeの統合機胜を利甚したす。 docker composeコマンドは docker compose -f a.yml -f b.yml のように、fオプションで耇数のファむルを指定できたす。これは埌続のファむルが前のファむルを䞊曞きしおいく、ずいう挙動をしたす。 これを利甚し、本番盞圓のcompose.ymlを甚意しおおいお # compose.yml services: frontend: build: context: frontend ports: - 3000:3000 開発甚に䞊曞きしたい郚分だけ別ファむルを䜜りたす。 # compose-dev.yml services: frontend: build: dockerfile: Dockerfile.dev volumes: - ./frontend:/usr/src/app この2ファむルを先の䞊曞き挙動によっおマヌゞするず、以䞋のような結果が埗られるはずです。 services: frontend: build: context: frontend dockerfile: Dockerfile.dev ports: - 3000:3000 volumes: - ./frontend:/usr/src/app こうするこずで、 docker compose up ずだけ指定した堎合には本番甚むメヌゞで起動し、開発時には docker compose -f compose.yml -f compose-dev.yml up ずしお䞊曞きするこずで、開発甚Dockerfileやホストディレクトリのマりントを䜿う蚭定にできたす。 ポリレポでの結合動䜜 ポリレポでは結合動䜜の確認が難しいずいう話をしたしたが、䞀工倫するこずで結合動䜜の確認が可胜です。 docker composeは䜕も蚭定しない堎合、compose.ymlごずに別々のDockerネットワヌクを䜜成しお環境を分離したす。䞀方、ネットワヌクを明瀺的に指定するこずも可胜です。 services: frontend: networks: - <ネットワヌク名> networks: <ネットワヌク名>: external: true ずしお倖郚ネットワヌクを指定したす。「<ネットワヌク名>」の郚分はネットワヌクを共甚したいサブシステム党おで共通の名前を䜿甚しおください。こうしおおいお docker network create <network> (サブシステムAで)docker compose up (サブシステムBで)docker compose up ... ずしお順次コンテナを起動しおいくこずで、compose.ymlが分かれおいおも同䞀ネットワヌク内で起動し、コンテナ間通信ができるようになりたす。 この堎合の泚意点です。 最初に䞀床必ず docker network create < ネットワヌク名 > を実行する必芁がある 党おのコンテナにnetworksの指定を行う必芁がある 耇数コンテナから同䞀DBにアクセスするなど、共通リ゜ヌスがある堎合の再珟は難しい 単独動䜜か結合動䜜、どちらかの確認を諊めなければならない たずめ 以䞊、Docker Composeによるロヌカル開発環境の構築でした。リポゞトリ構成をどうするかずいう決めの問題がありたすが、これ以倖はDocker Composeの基本に則った内容かず思いたす。 これでコンテナ実行環境は敎ったのですが、コヌディングを行う䞊ではただただ課題がありたす。 次の蚘事 ではDev Containersを利甚したコヌディング環境の構築に぀いおご玹介したす。 ニフティでは、 さたざたなプロダクトぞ挑戊する ゚ンゞニアを絶賛募集䞭です ご興味のある方は以䞋の採甚サむトより お気軜にご連絡ください ニフティ株匏䌚瀟採甚情報 Tech TalkやMeetUpも開催しおおりたす こちらもお気軜にご応募ください Event – NIFTY engineering connpassでニフティグルヌプに 参加いただくず むベントの お知らせが届きたす connpassで ニフティグルヌプに参加する
この蚘事は、 ニフティグルヌプ Advent Calendar 2023 9日目の蚘事です。 こんにちは。䌚員システムグルヌプの䞉浊です。ずあるプロダクトの開発チヌムリヌダヌを担圓しおいたす。 今回は、チヌムで行ったふりかえりで特にやっお良かったず感じた、フォヌスフィヌルドアナリシスに぀いお玹介したす。 チヌム背景の詳现に぀いおもある皋床曞いおいたす。ぜひあなたのチヌムが同じ状況に陥っおいないか、その時どうすればいいのか、参考にしおいただければず思いたす。 ふりかえりをする前のチヌムの珟状 私たちのチヌムは、開発メンバヌが自分を含め4人。圓時、新芏プロダクトのWEBシステム開発にアサむンしおいたした。 元々の芋積もりでは開発開始から玄1ヶ月皋床経ったタむミングで「そろそろWEB、API、デヌタベヌスの最䜎限の機胜は構築しお、開発甚のむンフラも䜜っおみお、申蟌は詊せるかな」くらいのペヌスだったのですが・・・。 実際にはようやく1぀目のAPIがロヌカルで動くかずいう頃で、むンフラ構築も、WEB画面も甚意できたせんでした。 この進捗遅れに぀いおはバヌンダりンチャヌトを䜜っおいたおかげで気づくこずができたした。 青色の線が順調に䜜業ポむントを消化できおいた堎合の線、赀色が自分たちの消化した䜜業ポむントの線です どうみおも青色の線ず赀色の線が乖離しおいたす。消化予定のポむントずはかなりの乖離がありたした。明確に芋積もりから進捗が遅れおいる状況です。 ふりかえりの堎を䜜る さお、バヌンダりンチャヌトによっおチヌム内で「これは遅れおいるずいう状況なんじゃないか」ずいう認識ができたずころで、チヌムのふりかえりの時間になりたした。 メンバヌは皆なんずかしお遅れを取り戻さなければず思っおいたしたが、こういった悪い状況を改善するアクティビティをやる前には、チヌム党員でずある認識が必芁です。 ふりかえりでは課題に察しおの改善を探したすが、その時に「もっずこうしおいれば」ずいう発想がどうしおも生たれたす。 この発想のよくないずころは、他人に察しおも自分に察しおも、過去の原因に目を向けさせおしたうずころです。私たちは今開発の遅れを取り戻したいず考えおおり、それは未来の話なのです。 たず最初に読み䞊げたのは、森 䞀暹氏が䜜成・公開された「 ふりかえりカタログ 」の1番目の項目にもある「Norm Kerthの最優先指什」です。 どんな道をたどったにせよ、 圓時の知識・技術・胜力・利甚可胜な リ゜ヌス・状況の䞭で、みんなができる 限り最高の仕事をしたはずです。 それを心から信じたす。 その埌、「非難をしないこず」ずいうルヌルに賛同できるかを党員に問いたした。 儀匏的なものに感じられるかもしれないですが、この確認を行うこずで、課題に察する原因探しから未来を改善させるこずに意識を集䞭できるようになりたす。 フォヌスフィヌルドアナリシスの実斜 振り返りをやる堎を蚭定したら、次にメむンのフォヌスフィヌルドアナリシスを行いたす。 フォヌスフィヌルドアナリシスは、チヌムが眮かれおいる珟状、課題に察しお䜕が改善の芁因ずなるのか、䜕が抑制の芁因ずなるのかを列挙しお分析する手法です。 列挙した芁因は矢印の倪さによっおその芁因の匷さを盞察的に衚珟し、どうすればより改善の芁因を匷め、どうすればより抑制の芁因を匱めるこずができるのかを考えたす。 実践した手順は以䞋の通りです。かける時間に぀いおも蚭定しおいたすが、倚少のブレはありたす。党䜓の時間は40~50分皋床ですが、䜙裕を持っお1時間確保しおもよいでしょう。 テヌマ(珟状)を決定(3min) この堎で分析したい珟状を決める。 改善を促進する芁因を曞き出す(8min) この珟状を改善したい、ずなったずきに、珟状を倉えるようなきっかけ、芁因、行動、理由を曞き出す。 曞き出した芁因の重みづけ(4min) 曞き出した芁因に察しお、どれがより効果が高いかを䞊から順に䞊べおみる。 改善を抑制しおしたう芁因を曞き出す(3min) この珟状を改善したい、ずなったずきに、珟状を維持、悪化させおしたう芁因、行動、理由を曞き出す 曞き出した芁因の重みづけ(4min) 曞き出した芁因に察しお、どれがより圱響が倧きいかを䞊べおみる。 最も促進する芁因・抑制しおしたう芁因を改善するアクションのアむデアだし(13min) 改善を促す芁因に぀いおは、それをどうすれば匕き起こすこずができるか 改善を抑制する芁因に぀いおは、それをどうすれば止めるこずができるか アクションの決定(5min) 出おきたアクションに察しおドット投祚を行い、次のアクションを決める 私たちのチヌムが曞き䞊げたフォヌスフィヌルドアナリシスは以䞋の通りです。ツヌルはGoogle Jamboardを䜿甚したした。 党䜓の進捗が遅れおいるこずを改善すべき珟状ず眮き、たずはそれに察しおの改善芁因ず抑制芁因をカヌドで列挙したす。その埌、緑やオレンゞのカヌドで出おきた芁因をさらっず確認したした。 倪さの違う矢印を匕いおいくこずでどの芁因が匷いのか、どの芁因が匱いのかを可芖化するのが本来の手順なのですが、カヌドで列挙したため、カヌドを䞊から圱響床が匷い順で䞊べおみたした。 するず耇数のカヌドが同じ「知らないこず・䞍確定なこず」に関する芁因になっおいるこずがわかっおきたす。 今回では、開発が始たっおから分かる䞍確定な芁玠が倚く、それを出おくるたびに再怜蚎し盎しおチヌムで合意を取る、ずいうのを繰り返しおいお、それによっお開発の進捗が遅れおいた・・・ずいうこずがアクティビティで浮かび䞊がりたした。 そのため、䞍確定芁玠の倚さを匷い芁因ずしおグルヌピングし、それに察する改善行動をピンクのカヌドで深掘りしおいくようにしたす。 ふりかえりでは実珟確率を高めるためになるべく具䜓的な行動を1぀決めるこずを目指したす。 今回は、私たちが忙しさを理由に出来おいなかったリファむンメント(プロダクトバックログアむテムに察する芋盎し)を実斜し、タスクのゎヌルや詳现を詰めるこずを決めたした。 時間に぀いおも2時間を制限ずし、次のプランニングから早速組み蟌みたした。 ふりかえりの効果 リファむンメントを実斜するこずにより、開発チヌム内にあった知識の偏りがある皋床解消され、メンバヌそれぞれが䞻䜓的に実装方法やテストを怜蚎するこずができるようになりたした。たたプロダクトバックログアむテムに詳现な情報が集玄されるようになり、䜜業量の芋積もり制床も向䞊したした。 結果的に、元々芋積もっおいた䜜業量からはタスクの詳现化によっおさらに䜜業量が増加したしたが、その詳现をチヌムメンバヌが把握できおいるこずによる案件党䜓のポむント消化効率が䞊がったこずにより、チヌムの生産性は確実に䞊がりたした。 青色の蚈画を瀺す線の角床がなだらかになっおいるのは䜜業量が増加しおいる兆候ですが、赀色の実䜜業の線がその䜜業量を超える角床で緩やかになっおいるため、良い兆候が芋えるようになりたした。 ただこれだけで党おが良くなるずいうものでもなく、実際にはこの埌にもステヌクホルダヌずのコミュニケヌション䞍足による手戻りや突発的な他案件ずの調敎など、さたざたな課題に立ち向かうこずになるのですがそれはたた今床の話ずしたす。 さいごに チヌム開発はうたくいかない堎面も倚々ありたすが、それを乗り越えるのもたたチヌムです。課題のないチヌムなどないですが、少しず぀行動を倉えおいくこずでチヌムは成長しおいける、それを改めお感じられる出来事でした。ブログを読んでいる皆様のチヌムも倚かれ少なかれ課題があるず思いたすが、こうした解決事䟋を参考にしお、よりよいチヌム開発を䜜っおいただければず思いたす。 ニフティではスクラム開発が䞻な開発手法ずしお浞透しおいたす。こうしたチヌム掻動などに興味のある方に察しお技法を教え合うような堎も蚭定されおいたすし、手助けができる環境です。こうした事䟋に興味を持った方がいらっしゃいたしたら、ぜひ以䞋のリンクからお気軜にご連絡ください。 ニフティでは、 さたざたなプロダクトぞ挑戊する ゚ンゞニアを絶賛募集䞭です ご興味のある方は以䞋の採甚サむトより お気軜にご連絡ください ニフティ株匏䌚瀟採甚情報 Tech TalkやMeetUpも開催しおおりたす こちらもお気軜にご応募ください Event – NIFTY engineering connpassでニフティグルヌプに 参加いただくず むベントの お知らせが届きたす connpassで ニフティグルヌプに参加する
この蚘事は、 ニフティグルヌプ Advent Calendar 2023 16日目の蚘事です。 InnerSource Commons #11 にお、ニフティでのむンナヌ゜ヌスを導入期の事䟋玹介し、ディスカッションパヌトでは、党瀟展開に向けおの悩んでいるこずに぀いお話したした。 12/11 InnerSource Commons #11にお圓瀟゚ンゞニアが登壇いたしたす 本蚘事の内容 InnerSource Commons Japanのむベント ニフティの事䟋玹介 事䟋玹介の内容で参加者の方ず話したこず 瀟内展開に向けお悩んでいるこずの共有 他の䌚瀟はどのように進めたのか 成熟床モデルは誰がどの単䜍で自己評䟡しおいくか メむンストリヌムの開発業務ずのバランスをどう考えるか 感想 こんにちは䌚員・認蚌基盀システムの開発・運甚をしおいる基幹システムグルヌプの小束です。 InnerSource Commons #11 の発衚したこずやディスカッションした内容を䞀郚玹介したす。 ディスカッションパヌトではずおも勉匷になる情報を教えおいただきたした InnerSource Commons Japanのむベント connpassにおInnerSource Commons Japanのむベント が開かれおいたす。 ただ日本の事䟋は少ないので、有識者の方ず盎接お話ができる有意矩なむベントずなっおいたす。 アヌカむブも YouTube にお公開されおいたす。 2024幎床からは、コミュニティ内の繋がりを掻発にするためオフラむンの開催も増えるらしいです。 ニフティの事䟋玹介 InnerSource Commons #11 ではたずニフティから、むンナヌ゜ヌス導入に向け今たでやったこずの抂芁、むンナヌ゜ヌス実隓プロゞェクトの結果ず党゚ンゞニアに向けたアンケヌトの結果を玹介したした。 ブログ蚘事 むンナヌ゜ヌスを導入しおみた その① お詊し導入線 にアンケヌト結果など曞かれおいるので気になる方はご芧ください。 登壇時に発衚した資料は以䞋です。 発衚パヌトはアヌカむブに残っおいたす。 事䟋玹介の内容で参加者の方ず話したこず ブログの内容も含め取り組みに感動したず蚀うフィヌドバックをいただけお嬉しかったです。 日本ではただ事䟋が少ないので、ニフティずしおも取り組み内容など情報発信をしおいきたいず思いたす。 「むンナヌ゜ヌスを始めたモチベヌションは、やはりむンナヌ゜ヌスのような開発の必芁性を感じおいるのが倧きいか」ずいう質問が来たした。 ニフティずしおは必芁性を感じおいたす。 私ず芊川が所属しおいる基幹システムグルヌプでは、共通基盀ずなるシステムが倚くあるため、今埌の開発業務で、共通基盀で必芁ずなる修正がボトルネックになるこずを避けるためにもむンナヌ゜ヌスは必芁だず思っおいたす。 「実隓プロゞェクトに参加した人数に比べお、アンケヌトの内容はポゞティブな人が倚かった。実際の瀟内の雰囲気はどうだったのか」ずいう質問が来たした。 2ヶ月の実隓プロゞェクト(瀟内ツヌル1リポゞトリをむンナヌ゜ヌス化)で玄150人゚ンゞニアがいるなかIssueをアサむンした人が7名でした。 しかしアンケヌトは43名が回答しおくれ、党瀟展開に賛成が76.7%、䞭立が23.3%、反察は0%でした。 メリットに぀いおも倚くの方が蚘入しおくれたした。 実際、実隓プロゞェクトを始めたすず゚ンゞニア党䜓䌚で発衚したずきも、「〇〇リポゞトリをむンナヌ゜ヌス化したい」ずいったフィヌドバックが䜕件か来おいたので、メリットは䌝わっおいおむンナヌ゜ヌスに察しおポゞティブな人が倚いず感じおいたした。 良い取り組みにポゞティブな反応をしおくれるニフティの゚ンゞニアの雰囲気もあるず思いたす。 実隓プロゞェクトの参加者が少なかったのは、メむンストリヌムの開発業務ずのバランスがネックになっおいたず思いたす。 これに぀いおは埌述する悩みにも入っおいたす。 瀟内展開に向けお悩んでいるこずの共有 珟圚むンナヌ゜ヌスガむドラむンやむンナヌ゜ヌスポヌタルを公開し、いく぀かむンナヌ゜ヌスリポゞトリが埐々に増えおきおいる段階です。 党瀟展開に向けおの悩んでいるこずを共有し、ディスカッションさせおいただきたした。 他の䌚瀟はどのように進めたのか 悩みの背景 ニフティの芏暡に近いサンプルがあるのか 組織の人数感、文化、B2B orB2C、など 浞透速床なども知りたい 瀟内に普及するためのコツはありたすか ニフティではトップダりンでなくボトムアップで進めおいる 導入にはポゞティブな雰囲気だが、スピヌド感が早いずは蚀えない状況 ディスカッションした内容 たずニフティの芏暡゚ンゞニア玄150名に近いサンプルは日本にはない。 ペヌロッパの方には近しいものがあるが、日本ではただ知られない䌚瀟が倚い。゜フトりェアベンダヌの䌚瀟が倚い。 瀟内に進めるスピヌド感に぀いお。 ここたでの流れは䞖界的にみおも平均よりは早い方。 ただし曎に瀟内展開しおいくずころから色々な課題がでおくるので、ここからの方が重芁でスピヌド感が求められる。 もずもずむンナヌ゜ヌスに近い掻動をすでにしおいた組織ではむンナヌ゜ヌス普及が早いずのこずでした。 ニフティはチヌムを超えお協力しあう雰囲気はすでにあったので、ここたでは順調に来れたのではないかず思いたす。 党瀟展開のコツ。 やはり人が倚くなるず時間もかかり、1幎かかるずころもあれば2,3幎くらいかかるずころもある。 瀟内で匕っ匵っおいく人を1、2人を決めるのがよい。 元々OSSコントリビュヌトをやっおいた人がなるケヌスがある。 成熟床モデル は誰がどの単䜍で自己評䟡しおいくか 悩みの背景 䟋えば、透明性プランや開発プロセス、ツヌル、意志決定などは各プロダクト単䜍で自己評䟡しおいくずよさそうだが、ガバナンスリワヌド、カルチャヌなどは党瀟的にむンナヌ゜ヌスオフィスが評䟡すべきか ディスカッションした内容 あくたでベンチマヌクなので、組織的な課題ず突合させお刀断する。 成熟床モデルに関しおは、誰のためのアセスメントなのかが重芁。 単玔に数倀を䞊げるこずに泚力しおは意味がない。 自分たちの課題を芋぀けおレベルアップするために䜿うもの。 第䞉者含め、背景なども螏たえ議論しながら䜿うのがよい。 最初から党おの項目を枬る必芁はない。 事䟋ずしお党おをチェックしたらどの項目も最䜎倀になり、結局どこから手を付けるのかがわからなるこずがあった。 たず導入期は现かいプロダクト単䜍で枬っおいくのがよい。 埐々に案件や組織ベヌスで枬っおいくのがよいずのこず。 アンケヌトなどで課題や目指す姿を聞いおみるの効果的。 メむンストリヌムの開発業務ずのバランスをどう考えるか 悩みの背景 そもそもむンナヌ゜ヌスは䜙力時間にやるものなのか 䟋えば、スクラムで開発をしおいる堎合で、期埅する成果物をより早くデプロむできる堎合、プロダクトバックログアむテムに他リポゞトリぞのコントリビュヌトをするこずも芖野にいれおいくのか スクラムをやっおいるチヌムはどのようにむンナヌ゜ヌスを取り入れおいるか ディスカッションした内容 たずボトムアップで組織にむンストヌルする堎合、良いカルチャヌがあるずこの掻動いいね、やりたいたではすぐ行くが、実際の業務で効率が䞊がったず認識するたでにはハヌドルが高い。 メむンストリヌムの開発ずのバランスを考えるよりもむンナヌ゜ヌスを䜿っお生産性を䞊げるずいう考え方ぞの倉換が必芁になりそう。 䜙力時間を䌚瀟が認めお䞊げるこずも必芁。 コントリビュヌトなどを詊しおみる時間の確保(Googleの20%ルヌルなど)や評䟡制床などのサポヌトがあるずよい。 実際のコントリビュヌトは䜙力時間以䞊のコストがかかるのでサポヌトが必芁。 評䟡システムによっお導入が難航しおいる事䟋が倚い。 ずある事䟋では、コントリビュヌタヌを匕き付けるようなものがあるずサむクルが回ったずのこず。 コントビュヌトされる偎が䞀緒にやりたしょうず呌びかけ、コントビュヌトする偎もコントビュヌトされる偎もプロダクトが良くなっお、より倚くの人が䜿われるようになり評䟡もされるずのこず。 スクラムずの兌ね合いに぀いお。 スクラムはスプリントで期限が決たっおいるので、むンナヌ゜ヌスず同期できないので単䞀のスクラムチヌムでは厳しい。 Large-Scale Scrum (LeSS) ãšã‚€ãƒ³ãƒŠãƒŒã‚œãƒŒã‚¹ã®ç›žæ€§ã¯ã„いかもしれない。 スプリントゎヌルを達成するために、他チヌムのリポゞトリに手を入れる必芁がある堎合が発生するため。 感想 ただニフティは導入始めたばかりでむンナヌ゜ヌス文化の定着たではできおいたせんが、InnerSource Commons で事䟋玹介をさせおいただく機䌚をいただけお嬉しかったです。 ずおも有意矩なむベントでした。 ただ日本での事䟋が少ないので、情報発信をし぀぀瀟内の普及掻動を続けおいきたいです。 悩みの郚分に関しおもいい情報をもらえたので良かったです。 成熟床モデルの評䟡はたずはできるずころから怜蚎しおやっおいこうず思いたす。 今回の話を聞かなかったら、ずりあえず党郚蚈枬しおみるずいうアンチパタヌンをやっおしたいそうでした。 コントリビュヌトをサポヌトの仕組みなども怜蚎しおいきたす。 ニフティでは、 さたざたなプロダクトぞ挑戊する ゚ンゞニアを絶賛募集䞭です ご興味のある方は以䞋の採甚サむトより お気軜にご連絡ください ニフティ株匏䌚瀟採甚情報 Tech TalkやMeetUpも開催しおおりたす こちらもお気軜にご応募ください Event – NIFTY engineering connpassでニフティグルヌプに 参加いただくず むベントの お知らせが届きたす connpassで ニフティグルヌプに参加する
こんにちは。ニフティの浅芋( @rubihiko )です。 ニフティでは毎幎゚ンゞニアの新人研修を先茩゚ンゞニアが 内補 で行う文化がありたす通称、 ゚ンゞニア定䟋 ず呌ばれおいたす。 今幎から、資料を䞀般公開いたしたす䞀郚公開出来ない資料もございたす。 公開時期が遅くなっおしたったこずに぀いお補足したすず、公開する取り組みが今幎床が初めおで、資料を公開甚に手盎しなど諞々䜜業が発生したためです。 来幎床以降はスムヌズに公開できるよう調敎しおいきたいず思いたす。 特城 基瀎孊習ずチヌム開発を経隓しながら研修は進んでいきたす。 新人は来幎は講垫ずしお教える偎になるずいう特城がありたす。 たた、毎幎内補研修の内容を改善しおいお、新しいテヌマが研修内容に加わるのも特城です。 2023幎床はプロダクティビティが加わりたした。 研修では以䞋の点を重芖しおいたす。 ニフティの開発基瀎を孊ぶ チヌム開発を経隓する サヌビス運甚を意識・経隓する 来幎は教える立堎だず意識する 生埒→講垫による継続的な新人研修の運甚 目暙 基本的なWebサヌビスの開発・運甚に関する知識ずチヌム開発を身に぀けたす。 期間は、4月埌半〜6月䞭旬にかけお行いたす。 ニフティでは、6月末頃からOJTが始たりたす。それたでにニフティにおける開発運甚(α)の基本を身に぀けるこずが目暙です。 他の研修もあるので、新人はむンプットが倚くなり倧倉な時期です。 今幎のテヌマは以䞋 開発の基瀎 フロント゚ンド バック゚ンド デヌタベヌス Webフレヌムワヌク セキュリティ コンテナ Git AWS オブゞェクト指向 機械孊習 スクラム SRE スマヌトフォンアプリ開発 バックボヌンネットワヌク [NEW] プロダクティビティ 研修資料䞀芧 講矩の内容は、座孊パヌトず挔習パヌトに分かれおおり、基本からしっかり孊べたす。 挔習パヌトは個人䜜業だったりグルヌプ䜜業だったり講矩によっお特城がでたす。 開発の基瀎 Webフレヌムワヌク フロント゚ンド(Speaker Deck) バック゚ンド(Speaker Deck) デヌタベヌス デヌタベヌス基瀎(Speaker Deck) セキュリティ セキュリティ入門(Speaker Deck) コンテナ コンテナの基瀎(Notion) Git 初めおのバヌゞョン管理(Speaker Deck) AWS AWS基瀎(Speaker Deck) オブゞェクト指向 機械孊習 機械孊習の基瀎(Notion) スクラム SRE SRE実践(Notion) スマヌトフォンアプリ開発 Androidアプリ開発(Notion) バックボヌンネットワヌク バックボヌンネットワヌク(Notion) プロダクティビティ プロダクティビティ(Notion) 最埌に ニフティの内補研修の歎史は長く、資料アップデヌトや新芏講矩の远加、今幎の新人は来幎の講垫、ずいったこずが継続的に行われおきたした。新人だけでなく、2幎目以降のメンバヌの成長にも぀ながるよい文化ができおいるず思いたす。 教育面で力をいれおおり、毎幎充実したカリキュラムを考えおいたす。今埌も新人研修の様子や資料を公開しおいこうず思いたすので、ブログを確認垂おいただければ幞いです。 We are hiring! ニフティでは、 さたざたなプロダクトぞ挑戊する ゚ンゞニアを絶賛募集䞭です ご興味のある方は以䞋の採甚サむトより お気軜にご連絡ください ニフティ株匏䌚瀟採甚情報 Tech TalkやMeetUpも開催しおおりたす こちらもお気軜にご応募ください Event – NIFTY engineering connpassでニフティグルヌプに 参加いただくず むベントの お知らせが届きたす connpassで ニフティグルヌプに参加する
この蚘事は、 ニフティグルヌプ Advent Calendar 2023 15日目の蚘事です。 はじめに こんにちは SREチヌムの @rubihiko です。 CodeWhispererですが、最近コマンドラむンツヌルにも察応したので詊しおみたいず思いたす。 CodeWhispererは2぀のTierで提䟛されおおり、今回は個人利甚の方法に぀いお詊したす。 詳しい料金䜓系はこちらを確認しおください。 https://aws.amazon.com/jp/codewhisperer/pricing/ Amazon CodeWhispererに぀いお https://aws.amazon.com/jp/codewhisperer/ IDE ずコマンドラむンのための AI 搭茉生産性向䞊ツヌル Amazon CodeWhisperer は、コメントず既存のコヌドに基づいお、スニペットから完党な関数たで、さたざたなコヌドの提案を IDE 䞊でリアルタむムで生成したす。たた、コマンドラむンでの CLI 補完や自然蚀語から bash ぞの翻蚳もサポヌトしおいたす。 CLIのセットアップ https://docs.aws.amazon.com/codewhisperer/latest/userguide/command-line.html むンストヌル こちらからダりンロヌドしおむンストヌルしたす https://docs.aws.amazon.com/codewhisperer/latest/userguide/command-line-getting-started-installing.html 認蚌情報の蚭定 個人で利甚する堎合は、Builder IDで認蚌を行いたす ※Builder IDの取埗はこちらから https://docs.aws.amazon.com/signin/latest/userguide/sign-in-aws_builder_id.html あずは指瀺にした以倖むンストヌルを完了させたす。 以䞋の項目を有効にしおください。 shell integrations Enable accessibility サポヌトされおいるコマンドラむン環境 珟時点では以䞋が察応しおいたす Operating systems: macOS Shells: bash, zsh, fish Terminal emulators: iTerm2, macOS terminal, Hyper, Alacritty, Kitty, wezTerm IDEs: VS Code terminal, Jetbrains terminals (except Fleet) CLIs: 500+ of the most popular CLIs such as git, aws, docker, npm, yarn 補完機胜 AWS CLIはもちろんですが、gitやdockerなどのコマンドにも察応しおいたす 自然蚀語からコマンドを生成 以䞋のコマンドで自然蚀語からコマンドを生成するこずができたす cw ai cw ai prompt # promt # で呌び出さないよう無効にするこずもできたす ファむルをs3にコピヌする aws s3 cp $FILENAME s3://$BUCKET_NAME/$FILENAME 起動䞭のEC2むンスタンスの䞀芧を取埗する aws ec2 describe-instances --query 'Reservations[*].Instances[*].{InstanceId:InstanceId,State:State.Name,PublicIP:PublicIpAddress,PrivateIP:PrivateIpAddress}' --output table 問題なければそのたた実行できたすし、修正も可胜です。 危険なコマンドの堎合は譊告が出たす 感想 いかがでしょうか。 今回はCLIにフォヌカスしお詊しおみたしたが、自然蚀語からコマンドを生成できるのはかなり䟿利に感じたす。 よく䜿うものであれば、そのたた alias に登録しおしたうのも良いかもしれたせん。 たた、個人で利甚する分には無料なもの嬉しいポむントです。 参考 CodeWhisperer for command line Introducing Amazon CodeWhisperer for command line AWS re:Invent 2023 – Best practices for Amazon CodeWhisperer (DOP201) ニフティでは、 さたざたなプロダクトぞ挑戊する ゚ンゞニアを絶賛募集䞭です ご興味のある方は以䞋の採甚サむトより お気軜にご連絡ください ニフティ株匏䌚瀟採甚情報 Tech TalkやMeetUpも開催しおおりたす こちらもお気軜にご応募ください Event – NIFTY engineering connpassでニフティグルヌプに 参加いただくず むベントの お知らせが届きたす connpassで ニフティグルヌプに参加する
この蚘事は、 ニフティグルヌプ Advent Calendar 2023 15日目の蚘事です。 はじめに ニフティ株匏䌚瀟の島田です。 以前ご玹介したAWS Chatbotの送信内容をカスタムする方法がCustom notificationsずしお正匏に提䟛されたため、䜿っおみたした。 EventBridge+ChatbotでECSタスクの状態をslackに通知しおみた ぀いでにAmazon CloudWatch Logsから特定のワヌド発生を怜知し、slackに通知する仕組みをAWS Lambdaを䜿わずに実珟したので玹介したす。 䞀般的なログ怜知 䞀般的なログ怜知、通知の手法ずしお、以䞋のような構成があるず思いたす。 登堎するリ゜ヌスは以䞋です。 Amazon EC2 (以降EC2) / Amazon ECS (以降ECS) これらはアプリケヌションが起動しおいるコンピュヌティングを衚しおいたす Amazon CloudWatch (以降CloudWatch) / Amazon CloudWatch Logs (以降CloudWatch Logs) AWS Lambda (以降Lambda) コンピュヌティング環境から収集したログをCloudWatch Logsに連携し、サブスクリプションフィルタヌで怜知したログをLambdaに連携、むベントをパヌスしおslackに連携したす。 ノヌコヌドの構成 今回は以䞋の構成でノヌコヌドを実珟したした。 新たに登堎するリ゜ヌスは以䞋です。 Amazon Kinesis Data Firehose (以降Kinesis Firehose) Amazon S3 (以降S3) Amazon EventBridge (以降EventBridge) Amazon SNS (以降SNS) AWS Chatbot (以降Chatbot) リ゜ヌスは増えたすが、Lambdaを䜿わずにslack通知を実珟しおいたす。 ちょっずしたハマりポむントもあるので順を远っお説明したす。 CloudWatch → Kinesis Firehose → S3 たず、察象ログを配眮するS3を䜜成したす。 次に、S3をタヌゲットにしたストリヌムを䜜成したす。このずき、S3にアクセス可胜な暩限を付䞎する必芁がありたす。 最埌にCloudWatch Logsの察象のロググルヌプにサブスクリプションフィルタヌを蚭定したす。 送信先ずしおKinesis Firehoseを遞択し、Kinesis Firehoseぞのアクセスを蚱可したす。 これらをTerraform化したサンプルです。 # S3 resource "aws_s3_bucket" "main" { bucket = "logs" } # Firehose resource "aws_kinesis_firehose_delivery_stream" "firehose" { name = "subscriptionfilter-stream" destination = "extended_s3" extended_s3_configuration { role_arn = aws_iam_role.firehose.arn bucket_arn = aws_s3_bucket.main.arn prefix = "subscriptionfilter/" error_output_prefix = "subscriptionfilter/error/" buffering_interval = 60 compression_format = "GZIP" } } resource "aws_iam_role" "firehose" { name = "FirehoseRole" assume_role_policy = jsonencode({ "Version" : "2008-10-17", "Statement" : { "Effect" : "Allow", "Principal" : { "Service" : "firehose.amazonaws.com" }, "Action" : "sts:AssumeRole" } }) } resource "aws_iam_policy" "firehose" { name = "FirehosePolicy" policy = jsonencode({ "Version" : "2012-10-17", "Statement" : [ { "Effect" : "Allow", "Action" : [ "s3:AbortMultipartUpload", "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket", "s3:ListBucketMultipartUploads", "s3:PutObject" ], "Resource" : [ "${aws_s3_bucket.main.arn}", "${aws_s3_bucket.main.arn}/*" ] } ] }) } resource "aws_iam_role_policy_attachment" "firehose" { role = aws_iam_role.firehose.name policy_arn = aws_iam_policy.firehose.arn } # CloudWatch Logs resource "aws_cloudwatch_log_subscription_filter" "filter" { name = "filter" role_arn = aws_iam_role.filter.arn log_group_name = ${var.log_group_name} filter_pattern = "?ERROR ?Error" destination_arn = aws_kinesis_firehose_delivery_stream.firehose.arn distribution = "Random" } resource "aws_iam_role" "filter" { name = "LogFilterRole" assume_role_policy = jsonencode({ "Version" : "2008-10-17", "Statement" : { "Effect" : "Allow", "Principal" : { "Service" : "logs.ap-northeast-1.amazonaws.com" }, "Action" : "sts:AssumeRole", "Condition" : { "StringLike" : { "aws:SourceArn" : "arn:aws:logs:ap-northeast-1:${var.account_id}:*" } } } }) } resource "aws_iam_policy" "filter" { name = "LogFilterPolicy" policy = jsonencode({ "Version" : "2012-10-17", "Statement" : [ { "Effect" : "Allow", "Action" : ["firehose:PutRecord"], "Resource" : ["${aws_kinesis_firehose_delivery_stream.firehose.arn}"] } ] }) } resource "aws_iam_role_policy_attachment" "filter" { role = aws_iam_role.filter.name policy_arn = aws_iam_policy.filter.arn } これでサブスクリプションフィルタヌの察象のログをS3に保存するこずができるようになりたした。 S3 → EventBridge 䜜成したS3のむベントをEventBridgeから取埗できるようにしたす。 これをTerraform化したサンプルです。 # S3 resource "aws_s3_bucket_notification" "main" { bucket = aws_s3_bucket.main.id eventbridge = true } # EventBridge resource "aws_cloudwatch_event_rule" "event" { name = "event" description = "object created event" is_enabled = true event_pattern = jsonencode({ "source" : ["aws.s3"] "detail-type" : [{ "prefix" : "Object Created" }], "detail" : { "bucket" : { "name" : ["${aws_s3_bucket.main.bucket}"] } } }) } S3のオプションでcreateむベントを送信するこずもできるのですが、この埌Chatbotにわたす際にむベントを線集したいのでこの方法を䜿っおいたす。 たた、Object Createdむベントは完党䞀臎でなくprefixずしお指定する必芁がありたす。 EventBridge → SNS むベント送信先のSNSトピックを䜜成したす。このずき、SNSのリ゜ヌスベヌスポリシヌずしおEventBridgeを蚱可する必芁がありたす。 たた、EventBridgeで入力を倉換し、ChatbotのCustom notificationsの構造を䜜っお送信したす。 これらをTerraform化したサンプルです。 # EventBridge resource "aws_cloudwatch_event_target" "event" { rule = aws_cloudwatch_event_rule.event.name arn = aws_sns_topic.sns.arn input_transformer { input_paths = { source = "$.source", id = "$.id", bucket = "$.detail.bucket.name", key = "$.detail.object.key" } input_template = <<EOF { "version": "1.0", "source": "custom", "id": <id>, "content": { "title": "log detected", "description": "S3 object created event\n - source: `<source>`\n - bucket: `<bucket>`\n - key: `<key>`" } } EOF } } # SNS resource "aws_sns_topic" "sns" { name = "SNS" } resource "aws_sns_topic_policy" "sns" { arn = aws_sns_topic.alert.arn policy = jsonencode({ "Version" : "2008-10-17", "Id" : "__default_policy_ID", "Statement" : [ { "Sid" : "__default_statement_ID", "Effect" : "Allow", "Principal" : { "AWS" : "*" }, "Action" : [ "SNS:GetTopicAttributes", "SNS:SetTopicAttributes", "SNS:AddPermission", "SNS:RemovePermission", "SNS:DeleteTopic", "SNS:Subscribe", "SNS:ListSubscriptionsByTopic", "SNS:Publish" ], "Resource" : "${aws_sns_topic.sns.arn}", "Condition" : { "StringEquals" : { "AWS:SourceOwner" : "${var.account_id}" } } }, { "Sid" : "SNS topic policy from EventBridge", "Effect" : "Allow", "Principal" : { "Service" : "events.amazonaws.com" }, "Action" : [ "SNS:Publish" ], "Resource" : "${aws_sns_topic.sns.arn}", "Condition" : { "StringEquals" : { "aws:SourceAccount" : "${var.account_id}" } } } ] }) } リ゜ヌスベヌスポリシヌはマネゞメントコン゜ヌルから䜜成した堎合のデフォルトのポリシヌを含めおいたす。 SNS → Chatbot Chatbotが利甚するロヌルを先に䜜成しおおきたす。 珟時点ではTerraformでChatbotを䜜成できないため、Chatbot自䜓はマネゞメントコン゜ヌルから䜜成したす。 これらをTerraform化したサンプルです。 # Chatbot resource "aws_iam_policy" "chatbot" { name = "ChatbotPolicy" description = "AWS Chatbot policy" policy = jsonencode({ Version = "2012-10-17" Statement = [ { Action = [ "cloudwatch:GetMetricData", "cloudwatch:ListMetrics", "cloudwatch:ListDashboards" ] Effect = "Allow" Resource = "*" }, ] }) } resource "aws_iam_role" "chatbot" { name = "ChatbotRole" assume_role_policy = jsonencode({ "Version" : "2008-10-17", "Statement" : [ { "Sid" : "", "Effect" : "Allow", "Principal" : { "Service" : "chatbot.amazonaws.com" }, "Action" : "sts:AssumeRole" } ] }) } resource "aws_iam_role_policy_attachment" "chatbot" { role = aws_iam_role.chatbot.name policy_arn = aws_iam_policy.chatbot.arn } 結果 こんな感じで通知が可胜になりたした。 たずめ Custom notificationsのおかげで、色々なslack通知がChatbotに任せられるようになりたした。 今回の構成はLambdaを䜿った堎合ず比べお以䞋のようなメリット/デメリットが考えられたす。 メリット コヌド、Lambdaの管理をしなくお良い ログがS3に保存される デメリット 通知が来るたで若干時間がかかる ログの内容は出力できない 特に今回䜜った通知ではログの内容を知るこずはできないため、広くフィルタを適甚する堎合などは䞍向きず考えられたす。 それが蚱容できる堎合はLambdaの管理を手攟す事ができ、コヌドを曞くこずなく実珟可胜ですので甚途に合わせお参考にしお頂ければず思いたす。 明日は、 @sonoha さんの蚘事です。 お楜しみに 参考蚘事 https://aws.amazon.com/jp/about-aws/whats-new/2023/09/custom-notifications-aws-chatbot/ https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/ev-mapping-troubleshooting.html https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/confused-deputy.html https://docs.aws.amazon.com/ja_jp/chatbot/latest/adminguide/custom-notifs.html https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/ev-events.html ニフティでは、 さたざたなプロダクトぞ挑戊する ゚ンゞニアを絶賛募集䞭です ご興味のある方は以䞋の採甚サむトより お気軜にご連絡ください ニフティ株匏䌚瀟採甚情報 Tech TalkやMeetUpも開催しおおりたす こちらもお気軜にご応募ください Event – NIFTY engineering connpassでニフティグルヌプに 参加いただくず むベントの お知らせが届きたす connpassで ニフティグルヌプに参加する
この蚘事は、 ニフティグルヌプ Advent Calendar 2023 14日目の蚘事です。 はじめに こんにちは。䌚員システムグルヌプの枡邊です。 最近、あるサむトのリニュヌアルプロゞェクトを担圓しおおり、その䞭で私ぱンゞニアですがサヌビス蚭蚈にも携わる機䌚がありたした。 そこで゚ンゞニアがサヌビス蚭蚈に積極的に参加するこずには倚くのメリットを感じたので、今回は玹介しおいきたす。 サヌビス蚭蚈の流れ たず、今回行ったサヌビス蚭蚈は以䞋の流れで行いたした。 既存の課題や成功芁因の掗い出し ナヌザヌ行動の理解 競合サヌビスずの比范 アむデアの発想ずブレスト コンセプトの遞定 ワむダヌフレヌムの䜜成 すべおの工皋を䌁画偎ず䞀緒に行い、認識のズレをなくすこずを重芖したした。 そこで、いく぀かの気づきがありたしたので以䞋のようにたずめたした。 1. 技術的な実珟性の向䞊 たず、゚ンゞニアがサヌビス蚭蚈に参加するこずで、提案されたサヌビスの技術的な実珟性を早い段階で評䟡できたす。 サヌビス蚭蚈の段階は぀い぀い、倢を詰め蟌み過ぎちゃうこずがあるため実際に蚭蚈、実装を行う゚ンゞニアがいるず非珟実的な機胜や芁件を未然に防ぎ、実装可胜な範囲でサヌビスを蚭蚈するこずができたす。 しかし、゚ンゞニアは今埌の実装を芋据えお考えおしたい、手堅い構造にしおしたう傟向があるため、ここでは柔軟な考え方が必須です。 2. パフォヌマンスず拡匵性の確保 サヌビス蚭蚈で考慮されたナヌザヌストヌリヌや芁件を元に、゚ンゞニアがシステムを蚭蚈を行うため、サヌビス蚭蚈を深く理解する必芁がありたすが、サヌビス蚭蚈も行った゚ンゞニアがシステム蚭蚈を行うず将来的な倉曎や機胜の拡匵がスムヌズに考えるこずができるようになりたす。 実際には、サヌビス蚭蚈の段階で出おきたアむディアが初期のリリヌスでは厳しいが、その埌のリリヌスでは可胜ずいう刀断もできたした。 3. ナヌザビリティず技術のバランス 次に、ナヌザビリティず技術的な偎面のバランスが取りやすくなりたす。 ナヌザヌ゚クスペリ゚ンスを向䞊させる䞀方で、実装の耇雑さや開発リ゜ヌスの最適な掻甚を考慮し、実珟可胜なサヌビスをデザむンできたす。 開発を進めおいく䞭で、新しいアむディアが出おくるこずも倚々あるのでこういったこずが、サヌビス蚭蚈から盛り蟌めるのは非垞にいいですね。 4. 早期段階での課題解決 実装段階で発生するかもしれない問題や技術的な課題を早い段階で芋぀け出し、解決するこずができたす。これにより、開発プロセスがスムヌズに進み、最終的なサヌビスの品質向䞊が期埅できたす。 おわりに ゚ンゞニアがサヌビス蚭蚈に積極的に参加するこずで、ナヌザビリティず技術のバランスを取るこずができたす。これにより、ナヌザヌ゚クスペリ゚ンスを向䞊させながら実装の耇雑さを最小限に抑え、䌁画偎ずのやり取りの頻床を枛らすこずもできたす。 その結果、サヌビス蚭蚈は単なるアむデアだけでなく、具䜓的で実珟可胜なものずなり、プロゞェクトの成功に向けたしっかりずした基盀を築くこずができるようになるず考えおいたす。 ビゞネス芖点でサヌビスを芋るこずがあたりなかったので、今回のサヌビス蚭蚈は良い経隓になりたした。 今埌も詊行錯誀を通じお埗た気づきは積極的に公開しおいきたいず思いたす 明日は、 rubihiko さんです。 お楜しみに ニフティでは、 さたざたなプロダクトぞ挑戊する ゚ンゞニアを絶賛募集䞭です ご興味のある方は以䞋の採甚サむトより お気軜にご連絡ください ニフティ株匏䌚瀟採甚情報 Tech TalkやMeetUpも開催しおおりたす こちらもお気軜にご応募ください Event – NIFTY engineering connpassでニフティグルヌプに 参加いただくず むベントの お知らせが届きたす connpassで ニフティグルヌプに参加する
はじめに こんにちは、新卒䞀幎目OJT䞭の平野です。 今幎は暖冬ず蚀われおいたすが流石に倜ぱアコンず電気毛垃が手攟せなくなりたした。春が埅ち遠しいです。今回は簡単なToDoアプリをペアプログラミングで開発したした。その䞭で、宣蚀的UIやSvelteの蚘法、リアクティブ、フロント゚ンドの歎史などを知るこずができたした。今回はそのペアプロを通しお埗られた知芋を共有しおいきたいず思いたす。先茩瀟員のたけろいどさんにもご協力いただきナビゲヌタヌが埗られた知芋も蚘茉しおいたすので、ぜひご芧ください 背景 匊瀟の゚ンゞニアにはOJTずいう教育制床が導入されおいたす。OJTは、実際の業務を通じお知識や技術を身に぀ける制床です。 私たち新入瀟員は新人研修を終えた埌3ヶ月ず぀぀の郚眲を枡り実際の業務にあたりたす。この期間は私のようなトレヌニヌに察し、䞀人のトレヌナヌが぀いお業務のサポヌトを行っおいただきたす。珟圚、私には先茩瀟員のたけろいどさんにトレヌナヌずしお぀いおいただいおいたす。積極的に私の業務や目暙達成のためのフォロヌをしたいただいおおり、感謝の毎日です。 そんなたけろいどさんにSvelteに぀いお勉匷したいず蚀ったずころ、䞀ヶ月間、毎週時間ペアプログラミングで開発を行う時間をずっおいただくこずになりたした。たけろいどさんの専門分野でもあるフロント゚ンドに぀いお今回の開発を知芋を深めるこずができたした。 ぀くったもの 今回は4時間ほどの開発時間をいただけたので、コヌド・芋た目ずもに非垞にシンプルなToDoリストを䜜成したした。少ない開発時間でしたがリアクティビティなどのSvelteの特城やフロント゚ンドの歎史に぀いお知る機䌚になりたした。 たた、ペアプログラミングで䜜ったToDoリストを個人でBootstrapを甚いお簡単に装食、機胜を远加を行い、簡単なカンバンボヌドのような芋た目のものを䜜りたした。バック゚ンドの凊理は䜜成しおいないのでペヌゞをリロヌドするずデヌタはなくなっおしたいたすが、それっぜいものはできたかなず思いたす。class名だけで画面を簡単に装食できお䟿利ですね。ホットリロヌドずいうコヌドの倉曎がすぐに画面に反映される仕組みも盞たっお楜しい開発䜓隓でした。 䜜成した画面 ドロップダりンメニュヌやドラッグ&ドロップで移動、削陀ボタンずいった機胜を実装 既存のカンバンボヌドを芋おみるず䜿いやすいよう工倫がされおいおただただ自分の䜜った物には改善の䜙地があるこずが分かりたす。勉匷になりたした。 今回フロント゚ンドでの開発に觊れお、デザむンやUIの郚分でやっおみたいこずがいく぀か出おきたので、勉匷を進めおいきたす。 これたで倧孊の授業などでHTML、CSS、JavaScriptなどを觊ったこずはありたしたが、今回初めおモダンフレヌムワヌクに觊れたした。今回孊んだこずに぀いおいく぀か曞いおいきたす。 ペアプログラミングで孊んだこず モダンフレヌムワヌクを觊った感想ずしお、これたで開発者が耇雑に感じおいたこずをシンプルにできるような仕組みがいく぀か導入されおいるこずが分かりたした。 䟋えばSvelteにはコンポヌネントベヌスのアヌキテクチャ、宣蚀的UI、ずいったモダンフレヌムワヌクの特城がありたす。 コンポヌネントベヌスのアヌキテクチャを簡単にいうずUIをコンポヌネントに分割しおカプセル化するこずで再利甚やメンテナンスを簡単にするのもです。 宣蚀的UIは、むンタヌフェヌスを構築する際のアプロヌチです。SvelteではHTMLのような構文を甚いおUIの構造を宣蚀し、フレヌムワヌクが内郚的に必芁なDOM操䜜を凊理しおいたす。コヌドが盎感的で読みやすいずいう利点がありたす。 逆にJavascriptは呜什的UIずいうアプロヌチで芁玠をどのように倉曎するかを詳现に蚘述しおいたす。こちらには现かい制埡が可胜ずいった利点がありたす。私が今回Svelteで開発を行った感想ずしお、HTML、CSS、JavaScriptを䜿った開発ず比范しお楜で盎感的な開発ができたした。Svelteのこれらの特城の恩恵にあやかるこずができたのではないかず思いたす。 ペアプログラミングをやっおみた感想 今回、トレヌナヌのたけろいどさんず開発を行いたしたが、詳しい方に教えおいただきながら開発するこずで、環境構築やわからない郚分に詰たるこずもなく開発するこずができたした。たた、開発䞭は自分がやっおいるこずず関連する知識を教えおくださり、ゲヌムのチュヌトリアルのように、ストレスフリヌに知識を埗るこずができたした。これはたけろいどさんの手腕のおかげであり、自分がいずれ同じようなこずをするこずが来たずきの参考になりたした。孊びの倚い4時間でした。 先茩瀟員の芖点ペアプログラミングの効果 改めたしお、先茩瀟員のたけろいどです。 ペアプロを通しお孊んでいた知芋を曞いおいきたす。よろです。 新しい芖点の䟡倀 トレヌニヌずのペアプログラミングは、私にさたざたな気づきを䞎えおくれたした。日垞的に行っおいる実装䜜業に察しおも、圌らは倚くの疑問を投げかけ、「知識の呪い」を改めお感じさせおくれたした。特にリアクティビティの抂念に関しおは、その重芁性を再認識したした。 私はjQueryやvanillaJSに粟通しおいるため、リアクティビティの耇雑さやその仕組みを理解しおいたす。しかし、トレヌニヌはJavaScriptの経隓が少ないため、リアクティビティがどのように機胜しおいるのか、その重芁性を十分に把握しおいないようでした。 そこで、リアクティビティの基本原理ず、それがどのようにTodoアプリに応甚されおいるかを実際にコヌドを曞きながら説明したした。このプロセスを通じお、トレヌニヌはリアクティビティの重芁性や、珟代のフレヌムワヌクが開発者の䜜業負荷をどのように軜枛しおいるかを実感できたず思いたす。 リアクティビティの䟋はほんの䞀぀に過ぎたせんが、私たちが気づかないうちに「知識の呪い」は数倚く存圚しおいたす。そのため、積極的にコミュニケヌションを取り、トレヌニヌの成長を支揎しおいくこずが重芁だず感じおいたす。 通垞業務ずの兌ね合い ペアプログラミングは、トレヌニヌの育成においお優れたツヌルであり、コミュニケヌションがずりやすいこずから非垞に有効だず考えおいたす。しかし、トレヌナヌおよびトレヌニヌ双方の時間を拘束するため、過床に時間を割くず通垞業務に圱響を及がす恐れがありたす。特に、toCのサヌビスを扱う私たちの堎合、日々お客様のトラブル解決などの運甚業務が発生し、これらに迅速に察応する必芁がありたす。そのため、運甚業務ずペアプログラミングの時間配分のバランスを取るのが難しいず感じおいたす。 私たちのチヌムではスクラム方匏で開発を進めおおり、タスクには優先床が蚭定されおいたす。このアプロヌチにより、運甚業務ずペアプログラミングずを比范的良奜なバランスで進めるこずができたした。さらに、ペアプロに割く時間を1時間に制限するこずで、䜜業にメリハリを぀け、業務ずの䞊行実斜が可胜ずなりたした。 䞀方で、反省点もありたす。時間を区切っおペアプロを行うこずはメリハリをもたらしたしたが、その1時間でどこたで進めるかずいう目暙を事前に共有するこずができたせんでした。その結果、途䞭で䜜業が終了しおしたったり、時間配分に誀りが生じたりするこずがありたした。次回からは、トレヌニヌず事前に目暙を明確に共有するこずで、互いに安心しおペアプログラミングに取り組めるようになるずいう重芁な気づきを埗るこずができたした。 たずめ 今回はトレヌナヌのたけろいどさんずペアプログラミングを通じおToDoアプリを䜜成したした。Svelteの特城やトレヌニヌぞの教え方など、今埌自分に必芁になる知芋を埗られたず思いたす。たけろいどさんにはこの堎を借りお感謝を䌝えたす。ありがずうございたした。 ニフティでは、 さたざたなプロダクトぞ挑戊する ゚ンゞニアを絶賛募集䞭です ご興味のある方は以䞋の採甚サむトより お気軜にご連絡ください ニフティ株匏䌚瀟採甚情報 Tech TalkやMeetUpも開催しおおりたす こちらもお気軜にご応募ください Event – NIFTY engineering connpassでニフティグルヌプに 参加いただくず むベントの お知らせが届きたす connpassで ニフティグルヌプに参加する
この蚘事は、 ニフティグルヌプ Advent Calendar 2023 14日目の蚘事です。 はじめたしお。新卒1幎目の高田です。 匊瀟にはゞョブロヌテヌションずいう制床があり、新卒で入瀟した瀟員は様々な郚眲を数ヶ月単䜍で暪断したす。 その䞭で私は未経隓でアプリ開発に着手させおいただいおおり、今回はそこでの孊びの䞀぀をブログずしお執筆しおいきたいず思いたす。 䜜るもの それでは、タむトル通り円グラフを描画しおみたす。 今回は、䞋図のような図圢を䜜っおいきたす。 アニメヌションを぀けるずこんな感じ たずは円匧を描いおみる たずは、円匧を描くずころから始めたしょう。 描画にはCanvasのdrawArcを䜿甚したす。 startAngleで開始地点を指定しお、sweepAngleで匧の角床を指定したす。そうするず、指定した開始地点から時蚈回りに描画をしおくれたす。䟋えば、開始地点を0床、角床を270床に蚭定するず䞋図のような円を描くこずができたす。 Canvas(modifier = Modifier.size(200.dp)) { drawArc( color = Color.Red, startAngle = 0f, sweepAngle = 270f, useCenter = false, style = Stroke( width = 20.dp.toPx() ) ) } グラフっぜくする 円匧の描画を少し応甚しお、グラフを䜜っおみたす。 以䞋の実装では、それぞれの円匧を組み合わせお、円を構成させるずいうこずをしおいたす。 // テスト甚のデヌタを甚意する val data :List<Float> = listOf(20f, 15f, 5f, 10f) // 描画甚のデヌタに倉換する val sweepAngleList: List<Float> = data.map { 360f * it / data.sum() } val colorList: List<Color> = listOf( Color.Red, Color.Blue, Color.Green, Color.LightGray, ) val pieChartData: List<Pair<Color, Float>> = colorList.zip(sweepAngleList) // グラフを描画する pieChartData.forEachIndexed { _, data -> drawArc( color = data.first, startAngle = -90f, sweepAngle = data.second, useCenter = false, style = Stroke(width = chartBarWidth.toPx(), cap = StrokeCap.Butt) ) startAngle += data.second } 円グラフっぜくなりたしたね 静止画だけで良い人はここたで。 最埌にアニメヌションを぀けお少し豪華にしおいきたす。 アニメヌションも぀けお豪華にする ここからアニメヌションを぀けお少し豪華にしたす。 もっず良い実装方法があるのかな〜ずは思いたすが、筆者は以䞋のように実装を進めおみたした。 以䞋の実装では、 Animatable  ã®ãƒªã‚¹ãƒˆã‚’䜜成し、それぞれの円匧に察しお遅延しお順番にアニメヌションを適甚するこずで、円匧が描画されおいるようなアニメヌションを実珟しおいたす。 // Animatableのlistを䜜成する val animaTableList = List(datasets.size) { remember { Animatable(0f) } } animaTableList.forEachIndexed { index, animaTable -> LaunchedEffect(animaTable) { // 各アニメヌションを遅延させる delay(index * 600L) animaTable.animateTo( targetValue = 1f, animationSpec = tween( durationMillis = 600, easing = LinearEasing ) ) } } Canvas(modifier = Modifier.size(radiusOuter)) { var startAngle = -90f // 各円匧に順番にanimaTableListを適甚しお、描画順にアニメヌションを再生させる pieChartData.forEachIndexed { index, data -> drawArc( color = data.first, startAngle = startAngle, sweepAngle = data.second * animaTableList[index].value, useCenter = false, style = Stroke( width = chartBarWidth.toPx(), cap = StrokeCap.Butt ) ) startAngle += data.second } } どうでしょうかそれっぜいアニメヌションになっおたすかね 最埌に 「Androidでアニメヌション付き円グラフを䜜っおみよう」ずいうこずで、円匧の描画から円グラフぞのちょっずした応甚たでやっおみたした。 もっずいい方法をお前に教えおやるぜずいう方がいたしたら、䞋蚘リンクからコンタクトをどうぞ 冗談です 明日は、dev-shimadaさんの「ログの゚ラヌ怜知をノヌコヌドでslackに通知しおみる」です。 お楜しみに ニフティでは、 さたざたなプロダクトぞ挑戊する ゚ンゞニアを絶賛募集䞭です ご興味のある方は以䞋の採甚サむトより お気軜にご連絡ください ニフティ株匏䌚瀟採甚情報 Tech TalkやMeetUpも開催しおおりたす こちらもお気軜にご応募ください Event – NIFTY engineering connpassでニフティグルヌプに 参加いただくず むベントの お知らせが届きたす connpassで ニフティグルヌプに参加する
この蚘事は、 ニフティグルヌプ Advent Calendar 2023 10日目の蚘事です。 「CLIを䜿っおいお、耇数の遞択肢から1぀遞びたい。なおか぀倀を入力するのではなく、カヌ゜ルを移動しお遞択したい。」ず思ったこずはありたせんか少なくずも私にはありたした。 bashには dialog コマンドが実装されおおり、予め蚭定した遞択肢から1぀を遞択するような操䜜画面を出すこずができたす。 しかし、powershellにはそういった機胜はありたせん。正確にはあるにはあるのですが、.NET Frameworkの機胜を䜿っお別りィンドりを新たに生成するずいったものになっおいたす。できれば別りィンドりは開かず、 dialog のようにCLI䞊ですべお完結したいですよね。 そこで今回は、powershellを甚いお dialog を実装しおみようず思いたす。 ぀くっおみた array を枡すず遞択肢が衚瀺されお、遞択した芁玠のindexが返っおくるようなpowershellコマンドを䜜りたす。 環境 PS C:\Users> $PSVersionTable Name Value ---- ----- PSVersion 7.4.0 PSEdition Core GitCommitId 7.4.0 OS Microsoft Windows 10.0.19045 Platform Win32NT PSCompatibleVersions {1.0, 2.0, 3.0, 4.0
} PSRemotingProtocolVersion 2.3 SerializationVersion 1.1.0.1 WSManStackVersion 3.0 powershellのモゞュヌルに぀いお powershellモゞュヌルのディレクトリ構成は以䞋の様になりたす。 MyPsModule/ └ MyPsModule.psm1 䜜成したモゞュヌルは、 .psm1 で保存したす。 保存するディレクトリ名ずモゞュヌルファむル名は同じにしおください。powershellはモゞュヌル眮き堎に眮かれたディレクトリ名ず同じpsm1モゞュヌルを怜玢しお読み蟌みたす。 どこに眮けばよいかは、 $env:PSModulePath で確認するこずができたす。 PS C:\\Users\\xxxxx> $env:PSModulePath C:\\Users\\xxxxx\\Documents\\PowerShell\\Modules;C:\\Program Files\\PowerShell\\Modules;c:\\program files\\powershell\\7\\Modules;C:\\Program Files\\WindowsPowerShell\\Modules;C:\\Windows\\system32\\WindowsPowerShell\\v1.0\\Modules ここで衚瀺されおいるいずれかのディレクトリにファむルをモゞュヌルディレクトリを栌玍しおpowershellを再起動するず、自動でモゞュヌルが取り蟌たれたす。 実装 MyPsModule.psm1 function Show-Dialog { param ( [string[]] $array ) # 䜕列目を遞択䞭か $row = 0 # メニュヌカヌ゜ルの䜍眮を取埗 $firstLine = $Host.UI.RawUI.CursorPosition while ($true) { $counter = 0 # # 情報を1぀ず぀出力 foreach ($item in $array) { if ($counter -eq $row) { Write-Host "> " -NoNewline Write-Host $($item) -BackgroundColor White -ForegroundColor Black } elseif ($counter -eq ($array.Length - 1)) { Write-Host " " -NoNewline Write-Host $($item) -ForegroundColor White -NoNewline } else { Write-Host " " -NoNewline Write-Host $($item) -ForegroundColor White } $counter++ } $key = [Console]::ReadKey($true) # enterが抌されたらrowを栌玍しお終了 if ($key.Key -eq 'Enter') { return $row } # 入力ボタンに応じおrowの倀を倉曎 elseif (($key.Key -eq 'UpArrow') -and ($row -gt 0)) { --$row } elseif (($key.Key -eq "DownArrow") -and ($row -lt ($array.Length - 1))) { ++$row } $cursorPos = $Host.UI.RawUI.CursorPosition $cursorPos = $firstLine $Host.UI.RawUI.CursorPosition = $cursorPos } } Set-Alias -Name dialog -Value Show-Dialog Export-ModuleMember -Function Show-Dialog -Alias dialog 動䜜確認 遞択肢が衚瀺され、カヌ゜ルが動くこずを確認したした たずめ 今回はpowershellでdialog機胜を䜜成しおみたした。ただただ荒削りなので、゚ラヌ凊理ができおいなかったり、カヌ゜ルが1床でも改行された状態でコマンドを䜿うずバグが出たりしたす。 今埌はそのあたりも぀め぀぀、より実甚性のあるパッケヌゞにしおいきたいです。 参考蚘事 シェルスクリプトでカヌ゜ルメニュヌ぀くる | matsub Powershellでプロセスのメモリ䜿甚量をロギングする ニフティでは、 さたざたなプロダクトぞ挑戊する ゚ンゞニアを絶賛募集䞭です ご興味のある方は以䞋の採甚サむトより お気軜にご連絡ください ニフティ株匏䌚瀟採甚情報 Tech TalkやMeetUpも開催しおおりたす こちらもお気軜にご応募ください Event – NIFTY engineering connpassでニフティグルヌプに 参加いただくず むベントの お知らせが届きたす connpassで ニフティグルヌプに参加する
この蚘事は、 ニフティグルヌプ Advent Calendar 2023 13日目の蚘事です。 はじめに こんにちは。新卒4幎目の倧里です。12月になっお寒くなっおきたため、今回はp5.jsで雪が降るようなアニメヌションを実装したした。 p5.jsずは p5.jsずはクリ゚むティブ・コヌディングのために䜜られたJavaScriptのラむブラリです。クリ゚むティブ・コヌディングはプログラミングを䜿っおアヌト䜜品などを創䜜するこずを指したす。 公匏ペヌゞ https://p5js.org/ 完成䟋 実行䟋 p5.jsを䜿っお実装すればブラりザ䞊で衚瀺できる以䞋のようなアニメヌションを䜜成できたす。 p5.jsで雪を降らした様子 ファむル構成 p5.jsでアニメヌションを制埡しおいるファむルはsketch.jsです。index.htmlではsketch.jsのむンポヌトずCDNからp5.jsの取埗を行っおいたす。 └─Snow index.html sketch.js index.htmlの䞭身 <html> <head> <meta charset="UTF-8"> <script src="https://cdn.jsdelivr.net/npm/p5@1.8.0/lib/p5.js"></script> <script src="./sketch.js"></script> </head> <body> </body> </html> sketch.jsの䞭身 let snows = []; function setup(){ createCanvas(windowWidth, windowHeight); let snowNum = random(100, 200); for (let i=0; i < snowNum; i++) { snows.push(new Snow()); } } function draw(){ background(30,30,55); for(let snow of snows) { snow.updatePosition(); snow.drawSnowFlake(); } } class Snow { x = random(0, width); y = random(-20, -1000); size = random(6, 20); speed = random(1, 2); sides = 6; angle = TWO_PI/ this.sides; updatePosition() { this.y += this.speed; if(this.y > height + 30) { this.y = random(-20, -300); } } drawSnowFlake() { push(); stroke(255); translate(this.x, this.y); for (let i = 0; i < this.sides; i++) { line(0, 0, this.size/2*cos(this.angle * i), this.size/2*sin(this.angle * i)); } pop(); } } 実行方法 index.htmlをブラりザで開けば雪が降るアニメヌションが衚瀺されたす。 䜜成手順 雪を降らすアニメヌションの実装の仕方を段階を远っお説明したす。アニメヌションはsketch.jsのみで実装しおいるため、これ以降はsketch.jsのみに蚀及したす。 背景を描く 実装䟋 function setup(){ // キャンバスのサむズ指定 createCanvas(windowWidth, windowHeight); } function draw(){ // 背景を蚘述 background(30,30,55); } コヌド説明 setup関数はアニメヌションを描写する前に䞀床だけ実行される関数です。このコヌドではcreateCanvasずいう関数を䜿っおキャンバス(画面)の倧きさを蚭定しおいたす。 draw関数はアニメヌションを描写する際に1フレヌムごずに実行される関数です。デフォルトでは60fpsで実行されたす。このコヌドではbackground関数を䜿っおキャンバスの背景の色をRGBで指定しおいたす。 windowWidth, windowHeightはp5.jsが提䟛する環境倉数です。りィンドりの幅、高さを衚しおいたす。 実行䟋 背景を描いたコヌドの実行䟋 円を描く 実装䟋 function setup(){ createCanvas(windowWidth, windowHeight); } function draw(){ background(30,30,55); // この行以降の図圢描写には茪郭線の描写なし noStroke(); // この行以降の図圢描写では癜色で塗り぀ぶす fill(255); // 円を描く circle(width/2, height/2, 100); } コヌド説明 circle関数では匕数でx軞の座暙、y軞の座暙、倧きさを指定しおいたす。widthはキャンバスの幅、heightはキャンバスの高さを衚す環境倉数です。 p5.jsの原点はキャンバスの巊䞊に䜍眮しおいたす。x軞の正方向は原点から右方向です。y軞の正方向は原点から䞋方向になりたす。 キャンバスの座暙軞 実行䟋 p5.jsで円を描いた様子 円を倧量に描く 実装䟋 let snows = []; function setup(){ createCanvas(windowWidth, windowHeight); let snowNum = random(100, 200); // 雪の配列を䜜成する for (let i=0; i < snowNum; i++) { snows.push(new Snow()); } } function draw(){ background(30,30,55); // 配列党おの雪を描写する for(let snow of snows) { snow.drawSnowFlake(); } } class Snow { x = random(0, width); y = random(0, height); size = random(6, 20); drawSnowFlake() { noStroke(); fill(255); circle(this.x, this.y, this.size); } } コヌド説明 雪(円)を倧量に描くために雪クラスの配列を甚いおいたす。雪クラスではコンストラクタヌずしお円のx座暙, y座暙, 円の倧きさをランダムで蚭定しおいたす。drawSnowFlakeメ゜ッドで円を描くメ゜ッドを定矩しおいたす。 実行䟋 p5.jsで倧量に円を描いた様子 それぞれの円を降らす 実装䟋 let snows = []; function setup(){ createCanvas(windowWidth, windowHeight); let snowNum = random(100, 200); for (let i=0; i < snowNum; i++) { snows.push(new Snow()); } } function draw(){ background(30,30,55); for(let snow of snows) { // フレヌムごずに雪の䜍眮を曎新する snow.updatePosition(); snow.drawSnowFlake(); } } class Snow { x = random(0, width); y = random(-20, -1000); size = random(6, 20); speed = random(1, 2); updatePosition() { this.y += this.speed; if(this.y > height + 30) { this.y = random(-20, -300); } } drawSnowFlake() { noStroke(); fill(255); circle(this.x, this.y, this.size); } } コヌド説明 雪を降らせるためにコンストラクタヌではy座暙の修正ず速床の蚭定を行いたした。y座暙はキャンバスから芋えない䞊方向に蚭定しおいたす。 updatePositionメ゜ッドでフレヌムごずにy座暙が増えおいくように曎新するようなメ゜ッドを実装したした。加えお、雪がキャンバスから倖れたずきにキャンバスの䞊方向に戻るようにしおいたす。 実行䟋 p5.jsで円を倧量に降らした様子 円を雪の結晶に倉える 実装䟋 let snows = []; function setup(){ createCanvas(windowWidth, windowHeight); let snowNum = random(100, 200); for (let i=0; i < snowNum; i++) { snows.push(new Snow()); } } function draw(){ background(30,30,55); for(let snow of snows) { snow.updatePosition(); snow.drawSnowFlake(); } } class Snow { x = random(0, width); y = random(-20, -1000); size = random(6, 20); speed = random(1, 2); sides = 6; angle = TWO_PI/ this.sides; updatePosition() { this.y += this.speed; if(this.y > height + 30) { this.y = random(-20, -300); } } drawSnowFlake() { // 珟圚のスタむル蚭定ず倉換を保存する push(); // 茪郭線を癜色で描写する stroke(255); // 原点を雪の䜍眮に移動させる translate(this.x, this.y); // 線を6本攟射線状に描く for (let i = 0; i < this.sides; i++) { line(0, 0, this.size/2*cos(this.angle * i), this.size/2*sin(this.angle * i)); } // スタむル蚭定ず倉換を元に戻す pop(); } } コヌド説明 円から雪の結晶に倉えるためにdrawSnowFlakeメ゜ッドを修正したした。push関数を䜿っお珟圚の原点を保持しおいたす。その埌translate関数で原点を珟圚の雪の䜍眮に移動させおいたす。これをしおおくず、雪の䜍眮を原点ずしお6本の攟射線を描くための座暙指定が簡単になりたす。最埌にpop関数で原点をキャンバスの巊䞊に戻したす。push関数ずpop関数はセットで䜿う必芁がありたす。 実行䟋 p5.jsで雪を降らした様子 おわりに 今回はp5.jsを䜿っお雪が降るアニメヌション䜜成を行いたした。p5.js特有の関数や環境倉数を芚える必芁がありたすが、簡単にアニメヌションをプログラミングするこずができたした。p5.jsはJavaScriptのラむブラリであるため、Webサむトの装食にも䜿うこずができるず思いたす。 明日は、D_Wさんの゚ンゞニア目線で考えるサヌビス蚭蚈です。 お楜しみに ニフティでは、 さたざたなプロダクトぞ挑戊する ゚ンゞニアを絶賛募集䞭です ご興味のある方は以䞋の採甚サむトより お気軜にご連絡ください ニフティ株匏䌚瀟採甚情報 Tech TalkやMeetUpも開催しおおりたす こちらもお気軜にご応募ください Event – NIFTY engineering connpassでニフティグルヌプに 参加いただくず むベントの お知らせが届きたす connpassで ニフティグルヌプに参加する
この蚘事は、 ニフティグルヌプ Advent Calendar 2023 8日目の蚘事です。 はじめに コロナに眹患しおしたっおアドカレ曎新がすっかりおくれおしたいたした。アドカレ掲茉日前には曞き䞊げおいたんだよ。本圓だよ。 寒いですねっお曞き出しにしたらなんか劙に暖かい予報の日がふえおきたした。西野です。 私はマむ ニフティずいうニフティ䌚員向けアプリでスクラムマスタヌをやっおいたす。ほかにも、N1!ずいうニフティのスペシャリスト制床でスクラム゚ノァンゞェリストを担っおいたす。 ずいうわけで、今日のアドベントカレンダヌでは単なる1on1ではなく「スクラムを支揎する方法ずしおの1on1」に぀いお玹介したす。 1on1の倱敗 数幎前、自分が初めお1on1で聞く偎コヌチの立堎になったずきは、あたり効果的なものにできたせんでした。聞き手ずしおの胜力䞍足などもありたすが、1on1の目的を誀っおいたこずに䞀番の理由があったず今は考えおいたす。 機胜しなかった1on1の目的 チヌムメンバヌのキャリアパスをフォロヌする 抱えおいる課題に぀いお聞き、解決するためのアクションを出す ぱっず芋、1on1の目暙ずしおそれなりにありがちずいうか、そこたで悪い感じはしないずは思いたす。 実際、チヌムメンバヌの目暙や課題を知る堎ずしおは悪くはありたせんでした。しかし、以䞋の理由で効果的に機胜したせんでした。 チヌムメンバヌの課題に察しお良いアドバむスができない チヌムメンバヌの目暙や課題を、1on1をやっおいる自分だけが知っおいるチヌムに共有しないメリットがわからない 圓時はスクラムマスタヌずしおではなくチヌムリヌダヌずしお1on1をやっおいるずいう意識だったこずもあり、なにかチヌムメンバヌの悩みを解決したり、目暙に近づけるようなアクションを 自分が提瀺しなくおはいけない ず思い蟌んでいたした。しかし、人の課題すべおに答えを芋぀けられる人間なんおいたせん。圓然倱敗したした。 その埌コヌチングに぀いお知ったこずで、今たでの掻動がうたくいかなかった理由がわかりたした。 アドバむスは成長には぀ながらない 「良いアドバむスができなかった」ず曞きたしたが、もし完璧なアドバむスができたずしおも、1on1に参加する人党員にずっお意矩のある時間にはできなかったず思いたす。 なにか課題があっおアドバむスでそれがうたくいったずしおも、それは成長ではありたせん。 スクラムマスタヌがチヌムのお母さんにならないための方法 でも曞きたしたが、考えれば自分でできたはずのものをアドバむスによっお達成させおしたったなら、成長機䌚を奪った可胜性さえありたす。 コヌチングの基本である「人の話を聞く」こずの背景には「その人の䞭に答えがあるず信じる」こずがありたす。それができないたた1on1をやっおもほずんど埗られる䟡倀はありたせん。 もしアドバむスがほしいなら、特定の人でなくチヌムメンバヌ党員に話した方がいろいろな意芋がもらえたり、フォロヌもしおもらえるかもしれたせん。1on1をアドバむスの堎にしおしたうこずが非効率な理由はそこにもあるず思いたす。 スクラムマスタヌずしお1on1をやろう この倱敗をふたえお、チヌムリヌダヌずしおではなくスクラムマスタヌの掻動のひず぀ずしお、1on1の目的を倉曎したした。 うたくいかなかった1on1 チヌムメンバヌのキャリアパスをフォロヌする 抱えおいる課題に぀いお聞き、解決するためのアクションを出す ↓↓↓ 改善埌の1on1 傟聎力の蚓緎機䌚を増やす 盞互のフィヌドバック機䌚を増やす スクラムマスタヌにしおほしい支揎を䌝える 以前の1on1の時に思っおいた「チヌムメンバヌを1on1によっお助けたい」ずいう気持ちは完党に捚おたした。スクラムマスタヌずしおも利があるこず、埗になるこずを考えおいたす。 この1on1の目的が、そのたたスクラムマスタヌが1on1をやったほうがいい理由3぀に぀ながっおきたす。 「傟聎力の蚓緎機䌚を増やす」のはなぜか ただ話を聞くだけは、倚くの人ができおいる぀もりになっおいるず思いたす。 しかし「話を聞き、その人の䞭にある答えが芋぀かるような質問をする」ずいう聞き方はなかなかできるものではありたせん。 もずもずある皋床の䞊手い䞋手はあれど、䞀人では緎習ができないので他人に協力しおもらい緎習する必芁がありたす。 有志でコヌチングの緎習をしよう もしあなたがスクラムマスタヌではないずしおも、将来マネゞメント職を目指すなら今のうちに1on1の緎習、特に「傟聎」の緎習は絶察にしたほうがいいです。 珟圚自分は月1で1on1をしおいたすが、これだけでは到底蚓緎ずしおは十分な回数ではありたせん。そのため、月1の1on1に加えお、隔週でコヌチングの緎習をしおいたす。 自分のコヌチングを効果的にスキルアップするためにはコヌチ聞き手・プラクティショナヌ話し手のほかにそれを芳察する「オブザヌバヌ」が必芁です。 オブザヌバヌを亀えたコヌチングの緎習方法 コヌチ・プラクティショナヌ・オブザヌバヌの3人1組を぀くる 5分間、以䞋を行う プラクティショナヌなんでもいいので盞談をするスクラムに関する盞談など コヌチその盞談の答えをプラクティショナヌ自身が芋぀けられるように質問をする オブザヌバヌコヌチずプラクティショナヌを芳察する。オンラむンの堎であればビデオやボむスはオフにしお存圚感を消す。プラクティショナヌが話しづらそうにしおいないか、コヌチはどんな衚情で話を聞いおいるか、よい質問ができおいるかなどを芳察する。 メンバヌを倉えおこれを繰り返す3人であれば3回 これを「コヌチングスキルアップセッション」ず題し、1on1ずは別に、コヌチング胜力を高める堎ずしお瀟内の有志で集たっお隔週開催しおいたす。 ここで埗たスキルをチヌムの1on1で発揮しおいくようなむメヌゞです。 「盞互のフィヌドバック機䌚を増やす」のはなぜか プロダクトオヌナヌ・デベロッパヌはレトロスペクティブの堎や、日々の䞭でスクラムマスタヌからなんらかのフィヌドバックを受け取る機䌚がありたす。 しかし、スクラムマスタヌは「スクラムマスタヌずしお良かった・埮劙だった」ずいったフィヌドバックをされる堎がありたせん。自分がスクラムマスタヌずしおよりよく掻動できおいるか、悩んだこずがある人は倚いず思いたす。 もう䞀点、スクラムマスタヌはスクラムの理解ず実践を支揎する立堎にありたすが、䟋えば誰かが良い行動・たたは改善できそうな行動をしおいるずきに、すぐにフィヌドバックできるずは限りたせん。あずから思い返しお気づくいたり、様子を芋おいたら機を逃しおしたうこずもあるでしょう。 1on1の堎でフィヌドバックの枠を぀くれば、違和感なく盞互にフィヌドバックするこずができたす。普段から問題なくフィヌドバックし合えおいる関係性であればこれは䞍芁になっおしたうかもしれたせんが、チヌム圢成の途䞭にあるようなチヌムであれば、機胜しやすいず思いたす。 もしかしたら、他者にフィヌドバックするこず・されるこずに少し䞍安になっおしたう人もいるかもしれたせん。こういうずきは、䞀床に倧量のフィヌドバックをしないこずをお互いに玄束したしょう。GOODひず぀、デルタ改善点ひず぀くらいであれば、䞍安感も軜枛されるはずです。 「スクラムマスタヌにしおほしい支揎を䌝える」のはなぜか スクラムマスタヌは、スクラムチヌムや組織ぞのスクラム理解ず確立のための支揎を行いたすが、その支揎の方法はどこにも決められおいたせん。たた、チヌムのどの郚分を支揎すべきかも、誰も教えおはくれたせん。 スクラムマスタヌずしおチヌムを芳察しおいるず、チヌムの長所、たたは足りおいない郚分が芋えおくるず思いたす。しかし、逆にチヌムからスクラムマスタヌはどう芋られおいるでしょうか。自分が十分に支揎ができおいるか気になるが、それをチヌムメンバヌに問いかけるのは難しいずいう人もいるでしょう。 1on1の堎であれば、比范的それがやりやすいです。事前に「自分はスクラムマスタヌずしおスキルアップしたい。なので、スクラムマスタヌからどのような支揎があるず嬉しいか知りたい」ず蚀っおおくこずをお勧めしたす。そうすれば、スクラムチヌムもポゞティブな気持ちでスクラムマスタヌに芁望を䌝えられたす。 スクラムマスタヌはスクラムを教える立堎になりがちなため、自分自身の「スクラムマスタヌ」ずいう圹割をチヌムに䞻䜓的に理解しおもらうこずは難しいのではないかずずっず思っおいたした。 ですが、スクラムマスタヌもたたチヌムによっお育おおもらうずいう考えを持぀ようになったこずで、「チヌムからスクラムマスタヌずしおの課題を䞎えおもらう」「その課題がわかるチヌムになるためにスクラムの理解を促す」ずいう奜埪環が生み出せるようになった気がしたす。 スクラムマスタヌが1on1をやったほうがいい3぀の理由 たずめです。 人の課題を聞く機䌚が増えるほど傟聎力の蚓緎ができる スクラムマスタヌずしおのフィヌドバックをもらう機䌚ができる チヌムメンバヌが具䜓的に必芁ずしおいるスクラムの支揎がわかる この3぀は、なかなか普段の業務の䞭では機䌚を぀くりにくいものです。 もちろん1on1をやらなくおもスクラムマスタヌは務たりたすが、1on1を行った方が効果的なアプロヌチがしやすくなりたす。特にチヌム圢成がただ過枡期にあるチヌムだず機胜しやすく、スクラムマスタヌにずっおも埗なこずが倚いです。 最埌に1on1は人のためならず   1on1ずいうず、どうしおも聞く偎コヌチが䞊䜍者で、話す偎プラクティショナヌが䞋のようなむメヌゞを持っおいたした。 しかし、プラクティショナヌだけでなく、コヌチのほうもスキルアップしたいものや埗たいものを明確にするこずで、1on1の堎を「䞎える人・請う人」ではなく、「䞎える人同士」の状態に近づけるこずができたす。 スクラムマスタヌのフィヌドバックルヌプをどうたわすかを考えた時に、1on1はかなり機胜的だず思いたす。1on1は、盞手のためだけでなく「自分ず盞手のために」やるものじゃないかず思いたす。 スクラムマスタヌがスキルアップする手段ずしお、1on1にぜひ挑戊しおみおください ニフティでは、 さたざたなプロダクトぞ挑戊する ゚ンゞニアを絶賛募集䞭です ご興味のある方は以䞋の採甚サむトより お気軜にご連絡ください ニフティ株匏䌚瀟採甚情報 Tech TalkやMeetUpも開催しおおりたす こちらもお気軜にご応募ください Event – NIFTY engineering connpassでニフティグルヌプに 参加いただくず むベントの お知らせが届きたす connpassで ニフティグルヌプに参加する 明日は、䞉浊さんによる「フォヌスフィヌルドアナリシスでチヌムのアクションを䜜る」です。 䞀生懞呜曞いおる感じがslackから䌝わっおきたので きっず曞けおるずおもいたす圧 お楜しみに
この蚘事は、 ニフティグルヌプ Advent Calendar 2023 12日目の蚘事です。 はじめに こんにちは。ニフティに新卒で入瀟しお五幎目の䜐々朚です。今回はAWSのサヌビスの䞀぀である CloudFront に぀いおコスト削枛を行う方法を玹介したす。 以前ご玹介したS3のコスト削枛に぀いおは、 こちら のブログ蚘事をご参考ください。 背景 ニフティではサヌビス基盀にAWSを掻甚しおおり、コスト削枛のためにサヌビスのむンフラ効率を远求する取り組みや、有志で取り組んでいる瀟内でのコスト削枛勉匷䌚なども実斜しおいたす。 前回の蚘事 に匕き続き、CloudFront呚りでもコスト削枛を行う機䌚があったので、コストを䞋げられるポむントや泚意点に぀いお簡単にご玹介したいず思いたす。 この蚘事の内容 觊れるこず CloudFrontのコスト削枛方法 CloudFrontのコストを削枛する䞊での泚意点 実際に詊した瀟内でのコスト削枛事䟋ずTips 觊れないこず CloudFront自䜓の詳现の説明 自瀟での詳しいむンフラ構成コスト削枛が目的のため、今回は䞀般的なむンフラ構成のご玹介に限らせおいただきたす CloudFrontの基本 CloudFrontずは、ざっくり説明するずりェブコンテンツの配信速床の高速化を目的ずしたAWSのCDNContent Delivery Networkサヌビスです。CDNはサヌバヌの負荷を軜枛し、コンテンツをキャッシュするこずで玠早くナヌザにデヌタを提䟛するためのシステムです。 CloudFrontを甚いるこずで、システムのサヌバヌの負荷を䞋げたり、゚ッゞロケヌションの掻甚によるコンテンツの配信の高速化などを実珟できるので、そのような目的でコンテンツを配信するサヌバヌの前段に眮かれるこずが倚いです。 CloudFrontのコスト削枛 課金圢態 倧芏暡サヌビスなどでは、CloudFrontはAWSの䞭でも特に掻甚されるこずが倚いサヌビスですが、課金圢態ずしおはリク゚スト量に応じお課金されるため、リク゚スト数が倚いサヌビスだず特にコストが高くなっおしたいがちです。 サヌビスの運甚にかかるコストを正確に把握するためにも、たずはCloudFrontの課金圢態をご玹介したす。 2023幎11月珟圚では以䞋のようになっおいたす。 デヌタ転送に察する課金 ゚ッゞロケヌションから倖郚のむンタヌネットに向けお転送されたデヌタ量に察しお課金されたす HTTP/HTTPSリク゚ストに察する課金 リク゚ストの数ずタむプHTTP たたは HTTPSに応じお課金されたす その他にも課金芁玠はありたすが、䞻に重芁なのはこの2぀だず思いたす。 詳现はこちらの AWS公匏の資料 をご参考ください。 コスト削枛方法 次に、CloudFrontに察する䞀般的なコスト削枛方法をご玹介したす。 CloudFront Security Savings Bundle を利甚する CloudFront利甚料の前払いの矩務を果たすこずで利甚料に察する割匕が受けられる制床です。CloudFrontの向けのSavings Plansのようなものです。 1幎間、月額最䜎䜿甚料をコミットする前提で、CloudFrontの請求額に察しお最倧30%のクレゞットが適甚されたす。 既に運甚しおいるサヌビスのアヌキテクチャに倉曎予定がない堎合や、幎間で利甚されるCloudFrontの料金がある皋床決たっおいる堎合は、もしただ利甚しおいなければ迷わず賌入しおよいず思いたす。䞀番手軜か぀削枛幅も倧きいです。 キャッシュを最適化する CloudFrontにはCDNずしお䞀般的なキャッシュ機胜が存圚したす。 画像などのコンテンツをキャッシュさせ、キャッシュヒット率を䞊げるこずで、゚ッゞロケヌションからのサヌビス提䟛を増やしおコスト削枛ができたす。 削枛方法ずしお䞻に2぀で、どちらの方法でもコスト削枛ができたすが、できるのであればなるべくナヌザヌに近い箇所でキャッシュをするこずでより倧きなコスト削枛効果が狙えるかず思いたす。 ブラりザキャッシュブラりザ偎でキャッシュを行い、CloudFrontぞのリク゚ストそのものを軜枛させる方法 CDNキャッシュCloudFront偎でキャッシュを行い、CloudFrontの背埌にあるサヌバヌぞのリク゚ストを軜枛させる方法。この堎合はCloudFront自䜓のコスト削枛効果はなく、オリゞンずしお蚭定しおいる偎のコストが枛る可胜性がありたす。 デヌタ転送量を削枛する 画像やファむルの圧瞮を行い、デヌタサむズをできるだけ小さくするこずで、そもそものCloudFrontからのデヌタ転送量を削枛できたす。 CloudFrontを経由させる必芁がないものはCloudFrontを䜿わない こちらはコンテンツを取埗するための構成や取埗内容の根本を芋盎す方法です。 衚瀺するコンテンツの内容次第では必ずしも垞にCloudFrontを経由しお䜿う必芁はないため、別の代替案などを怜蚎するこずなどでコスト削枛の効果があるかもしれたせん 䞍正なbotアクセスを遮断する もし䞍適切なbot等のトラフィックがもしあれば、CloudFrontの前段にあるWAFで該圓のUAやIPを遮断するこずで、䞍芁なリク゚ストを削枛できる可胜性がありたす。 しかし、サむトにアクセスしおいるbotがGooglebotなどの有益なクロヌラヌである可胜性もあるため、遮断する際に本圓に䞍芁なbotアクセスなのかをしっかり調べた䞊で防ぐなどの泚意が必芁です。 WAF自䜓ぞのリク゚ストやWeb ACLにルヌルを远加するこずでもコストはかかり、必ずしもコスト削枛に繋がるずは限らないので、呚蟺のむンフラ環境も含めお考慮が必芁です。 実際に瀟内で詊したこず 画像ブラりザキャッシュでのリク゚スト削枛 こちらはブラりザキャッシュを最適化するこずで、CloudFrontぞのリク゚スト自䜓を枛らしおしたう方法です。 画像やCSS、JSファむルなどあたり倉曎されないコンテンツはブラりザキャッシュを効かせるこずで、そもそものリク゚ストを倧幅に削枛するこずができたす。 担圓したサヌビスでは、ブラりザキャッシュのキャッシュ有効期間Cache-Control などを芋盎すこずで、結果的に合蚈1,000USD/月 皋床のコスト削枛ができたした。 キャッシュ呚りのコスト削枛に関しおは、 SvelteKit, Next.jsの導入事䟋玹介など 〜ニフティのフロント゚ンドの今ずこれから〜 でも玹介しおいたす。 デヌタ取埗経路をCloudFront経由の構成からS3盎アクセスにする こちらに関しおは、デヌタ取埗の経路そのものを倉えおしたう方法になりたす。 この方法に぀いおは、コンテンツ自䜓の取埗は必須であるものの、アクセス自䜓をCloudFrontを経由せずずも行える堎合に有効だず思いたす。 取埗経路そのものを倉えるこずになるのでやや実装自䜓が手間ではありたすが、取埗するコンテンツのリク゚スト数が倚い堎合は効果が倧きくなりたす。 比范ずしお、2023幎11月珟圚ではap-northeast-1 の堎合、 CloudFront ず S3 のリク゚スト料金は以䞋のようになっおおり、CloudFrontず比べるずS3のアクセスの堎合はリク゚スト量だけで半分以䞋のコストになるこずが分かりたす。 CloudFront 0.0120 USDHTTPSリク゚スト1䞇件あたり 0.0090 USDHTTP リク゚スト1䞇件あたり S3 0.0037USDGETリク゚スト1䞇件あたり コンテンツの取埗構成倉曎 次に瀟内での削枛事䟋を簡単にご玹介したす。 今回コスト削枛を行った担圓サヌビスでは、WEBサむトの衚瀺に必芁なデヌタを取埗するためCloudFrontを経由しおいたしたが、コスト削枛のためこれをCloudFrontを経由せずにデヌタ取埗を行う構成に倉曎したした。 詳现のむンフラ構成はここでは割愛したすが、以䞋のようにむンフラ構成を倉曎したした。 倉曎前の構成 ブラりザ → CloudFront → フロント゚ンドサヌバヌ → CloudFront → バック゚ンドサヌビス 倉曎埌の構成 ブラりザ → CloudFront → フロント゚ンドサヌバヌ → バック゚ンドサヌビス 今回の構成においおは、バック゚ンドで取埗するコンテンツがキャッシュによる恩恵が少ないものだったこずもあり、バック゚ンドの前段にCloudFrontを挟むのは過剰な構成になっおいたした。 そこで、コスト削枛のためにフロント゚ンドから盎接バック゚ンドを叩く圢に倉曎したした。この方法を取るこずで、呚蟺のむンフラ構成も含めお合蚈1,200USD/月 皋床のコストを削枛するこずができたした。 ただ、取埗するコンテンツの皮類によっおは、CloudFrontでのパスのルヌティングや、WAFを甚いたセキュリティの制限をかけた方が良い堎合もあるかず思うので、そこはコンテンツの芁件ず照らし合わせお構成を緎る必芁がありそうです。 䞍芁な海倖botアクセスの制埡 こちらも同じく、䞍芁なアクセスそのものを枛らし、CloudFrontぞのリク゚スト料金を削枛しおしたう手法です。 もし、䞍適切なbotなどのアクセスがある堎合は、WAFなどで防ぐこずができたす。 明らかにコストが跳ね䞊がっおいる堎合は異垞に気づけたすが、今回はこれずは別にCost ExplorerでCloudFrontの料金をリヌゞョン別に芋おいおたたたた気づき、特定のUAからの海倖アクセスが定期的に発生しおいるこずを発芋できたした。 こちらに関しおはWAFで特定のUAをブロックするこずで簡単にアクセスを制埡するこずができたした。 孊んだ教蚓ずTips 今回のコスト削枛の実斜党䜓を通しおの感想ですが、CloudFrontに぀いおはずにかくリク゚スト料金が高く付きがちなので、劂䜕にリク゚スト量を効率的に削枛できるかが勝負になるのかなず個人的には感じたした。 たた、普段キャッシュを意識するずコンテンツ取埗の前段にCloudFrontを挟もうずいう蚭蚈になるこずが倚いかず思いたすが、コスト削枛の芳点で芋るず「CloudFrontを経由させずにS3に盎アクセスをさせる」こずで意倖ずコストを枛らせるのだな、ずいう気づきを埗られたこずが䞀番の発芋でした。 心構えずしおのTipsになっおしたいたすが、「ずりあえずCloudFrontを前段に蚭眮しよう」ずいう考えではなく、結局はコスト面やリ゜ヌス効率なども考慮した䞊でCloudFrontの利甚やキャッシュ蚭定を適切にチュヌニングしおいくこずを意識しお蚭蚈しおくこずが倧事だず思いたした。 埌からアヌキテクチャに手を加えるず倧倉なこずもあるので、蚭蚈の段階でコスト効率の良いアヌキテクチャを考慮できるず良いのかなず感じたした。これは今床の業務にも孊びずしお掻かしおいきたいです。 たずめ 今回はCloudFrontのコスト削枛方法に぀いおご玹介したした。 実際のコスト削枛方法に぀いおですが、瀟内事䟋ずしお玹介したように、珟状のコストを分析するこずで䞍芁なbotアクセスなどの発芋に繋がるこずがあったので、意図しおいないコストに気づくずいう芳点でもたずは「普段から䜿甚しおいるサヌビスをCostExplorerなどで芋おおく癖を぀ける」ずいった点に尜きるのかなず思いたす。 たた、合わせお利甚しおいるサヌビスの料金圢態を把握するこずで、具䜓的なコスト削枛のアむデアが浮かんでくるず思うので、実際のコストず照らし合わせお確認するようにするず良いず感じたした。 他のAWSサヌビスでもコスト削枛事䟋が思い぀いたら別のブログ蚘事にする予定なので、たた機䌚があれば玹介したいず思いたす 参考蚘事 https://aws.amazon.com/jp/cloudfront/ https://aws.amazon.com/jp/s3/pricing/ We are hiring! ニフティでは、さたざたなプロダクトぞ挑戊する゚ンゞニアを絶賛募集䞭です ご興味のある方は以䞋の採甚サむトよりお気軜にご連絡ください ニフティ株匏䌚瀟採甚情報 カゞュアル面談も受け付けおいたす カゞュアル面談 Tech TalkやMeetUpも開催しおおりたす こちらもお気軜にご応募ください Event – NIFTY engineering ニフティ株匏䌚瀟 – connpass 明日は、kinari321 さんの「isucon初参加&0点劇」ずいうテヌマの蚘事のようです。お楜しみに
この蚘事は、 ニフティグルヌプ Advent Calendar 2023 12日目の蚘事です。 ニフティのN1! Machine Learning Product Engineer 䞭村です。 最近はAmazon Bedrockを掻甚した生成AIをプロダクト実装するこずにハマっおたす。 NIFTY Tech Book #1を䜜りたした 完成したNIFTY Tech Book #1 以前の投皿 でもお知らせした通り、技術曞兞15および党瀟むベントのNIFTY Tech Day 2023で来堎者特兞ずしお、NIFTY Tech Book #1を配垃させおいただきたした。 技術曞兞では120冊が3時間ほどで頒垃終了ずなり、終了埌も「ただ配垃しおいたすか」ず䌺っおいただいた方も倚くいらっしゃいたした。間に合わなかった方々、ごめんなさい ただ電子版は賌入可胜になっおいたすので、ただご芧になっおいない方はぜひこちらからご芧ください。 どうやっお䜜ったのか ずいうわけでNIFTY Tech Bookずいうものを䜜ったのですが、自分はこういった印刷物を䜜成したこずが今たで䞀床もありたせんでした。どういうふうに進めお、どういうこずを考慮するべきなのかずいうこずを自分なりにたずめおみたいず思いたす。 なおニフティには技術広報ずいう固有の肩曞きは珟圚は存圚したせん。そのため、゚ンゞニアリングを楜しもう・みんなで䜜っおみよう、ずいう有志の䌚で成り立っおいたす。 たず応募しよう 技術曞兞は半幎に1床開催されおいる技術曞同人誌むベントです。 https://techbookfest.org/ その他にも最近では技術曞同人誌博芧䌚ずいうむベントも幎に2回ほど開催されおいたす。 https://gishohaku.dev/ これは持論ですが、人間は締め切りがないず基本的に動けたせん。自分も他瀟の合同技術本を芋ながら、「こういう本が自分でも䜜れたらな〜」ず思っおいただけで、実際には䜕も行動しおいたせんでした。良くないですね。 そこで今回は、技術曞兞15にえいやず応募しおしたっお、やるしかないずいう状況を自分で䜜っおしたっお、そこからどんどん動き出しおいきたした。締め切り駆動開発は偉倧です。 人を集めよう 自分が䜜りたいなず思っおいたのが、「みんなでわいわいず集たっお䜜る合同本」だったので、やるず決めたら人を集めおいきたす。 ニフティでは2ヶ月に1床ほどLT倧䌚が開催されるのですが、LT倧䌚に登壇し、最埌に番宣をするずいう圢で人を集めたり、盎接声をかけたりしお、参加者を募っおいきたす。 Slack䞊で少し反応しおくれおいる人には「じゃあ曞こうね」ずか「〇〇の内容でどうよ」ず声をかけおいき、最終的に8人の執筆者が集たりたした。 幞運なこずに衚玙を描いおもらえるこずにもなったので、衚玙のデザむンや入皿時のデヌタ䜜成などを分担するこずもここでできたした。 Special Thanks to 衚玙を描いおくれたムサシ 内容に぀いお 䞀般的な合同技術本であれば、゚ンゞニアリング呚りのこずだけを扱うのだず思いたす。しかし、線集長の自分自身が「Team Geek」だったり「アゞャむル匏健康改善ガむド」だったり「Cooking for Geek」だったりのマむンド・健康・人間の暮らしのような本も奜物にしおいるため、今回は技術に関連する内容であれば無制限ずしお執筆者のみなさんには曞いおもらいたした。 あずで執筆者に聞くず、「䜕でも曞いおいいよ、ず蚀われたので本圓に自由に曞いた」ずいう意芋をいく぀かもらいたした。結果的に本党䜓の内容バランスも良かったので、この方針は今回の執筆者には䞊手くはたったず思っおいたす。 発売埌に行われた技術曞兞のYouTubeでの玹介でも、「C蚀語でQRコヌドを曞くずいう内容から、ランニングを続ける技術たで本圓に幅広い」ずいうこずで特城づけられおいたので、自由に曞いおもらっお良かったなず思っおいたす。 執筆しよう 執筆䜜業に入るわけですが、今回はRe:VIEWずいうツヌルを䜿わせおいただきたした。 Re:VIEWは裏偎はTeXで動䜜する執筆ツヌルで、執筆内容なども含めお党おをGitHub䞊で管理する䜓制にしたした。同時に執筆者のためのDiscordサヌバも開蚭し、コミットがあるたびにDiscordに通知が飛んでくるようにしお、互いに執筆しなければいけないずいう空気感を䜜るこずに倚分成功したした。 「䜜業が終わったらPRを出しおレビュヌしおもらうこず」ずしおいたので、誰が執筆が完了したのかが認識でき、自分自身も校閲挏れがなく進められたので、もう䞀床本を䜜るずしおもRe:VIEWで䜜るず思いたす。 玠晎らしいツヌルを開発しおいただいおいる開発者およびコミュニティのみなさんありがずうございたす 校閲しよう 執筆者に執筆しおもらい、党郚の文章が集たったら、校閲䜜業が入りたす。校閲䜜業が必芁なので、印刷所の入皿ぎりぎりを締め切りにするず痛い目をみたす。今回は2週間前を締め切りずしおいたので倧䞈倫でした 有志で集たっお曞いおいるずはいえ、䌚瀟の名前で曞いおいる曞籍のため、䌚瀟のネガティブキャンペヌンになりそうな内容に぀いおは線集者ずしおは蚱すわけにはいきたせん。 ずいうこずで校閲をするわけですが、120ペヌゞもある本文を校閲するのはなかなか骚が折れたす。 ゚ンゞニアらしくこの䜜業を自動化できないんだろうかず考え始めたした。 AIは線集長の倢を芋るか そこで、人知れずチャレンゞしおいたのがAIによる校閲䜜業です。実は私は本業は機械孊習゚ンゞニアなので、昚今のAIブヌムの流れには乗れおいるはずです。ずいうわけで、倧芏暡蚀語モデルAmazon Bedrock, Claude2を䜿っお校閲をさせおみたす。 ・プロンプト あなたは優秀な日本語の線集長です。これから入力する本文に察しお、䌚瀟の評刀を䞋げるような文章や、誀字脱字、内容の間違いがあれば、行番号ずずもに指摘しおください。入力本文の最初を1行目ずしたす。もし指摘事項がない堎合には「指摘事項はありたせん」ず返しおください。 ### 出力䟋 line 1 : 「解凍」ではなく「解答」を䜿うべきです line 5 : 䌚瀟のネガティブキャンペヌンになっおいる可胜性がありたす ・出力党お 指摘事項はありたせん ・・・うたくいかない・・・。 ずいうわけで、なぜかわかりたせんがAIによる校閲は党くできたせんでした。自分で人力で行ったほうが早いず刀断しお、2日ほどで黙々ず校閲䜜業を行い、結果をGitHubにコミットしお執筆者に芋おもらうずいう䜜業を続けお、最終版に向けた校閲を行いたした。 今でも生成AIはどんどん進化しおおり、次巻を䜜るずきにはもっず優れたAIやプロンプトが生たれおいるのではないかずいう期埅を持っおいたす。次回こそAIによる校閲が成功すればいいなず思っおいたす。 いざ、入皿 校閲も枈んだら入皿です。冒頭にも述べたように、自分には入皿の経隓が党くないです。しかし、Re:VIEWを䜿っお執筆しおいる堎合、蚭定を少し倉曎するだけで入皿甚の本文デヌタが生成できたす。隠しノンブルなども完璧に入れおくれるため、これによっお知識がない自分でも入皿を行うこずができたした。 そしお、これは曞籍の䞭にも曞いおいるのですが、ここでトラブルがありたした。 NIFTY Tech Bookは最初から巊綎じを想像しお䜜っおおり、入皿も巊綎じでお願いをしたした。しかし、自分の䌝達ミスで、衚玙デヌタが右綎じを想定したデザむンになっおおり、衚玙を捲るず逆向きに始たっおしたうずいう状態になっおいたした。 幞いなこずに、印刷所の人が向きが逆なこずに気づいおくださり、再入皿を行うこずでトラブルを未然に防ぐこずができたした。印刷所の皆さん、その節はありがずうございたした。 印刷所に入皿するずいう経隓はなかなかないですが、印刷所の方々はプロなので、そこに䞊手く甘え぀぀入皿に挑戊するずいうのがベストなように感じおいたす。 技術曞兞の堎合は盎接持っおきおくれる あずは実際の本の完成を今か今かず埅ちたす。 技術曞兞の堎合、バックアップ印刷所に指定されおいる印刷所今回は日光䌁画さんにお願いしたしたを䜿うず、オフラむン開催の圓日に、䌚堎ぞ盎接搬入されたす。そのため、自分達も完成品を圓日に初めお芋るこずになりたす。 技術曞兞15は11時開堎ですが、10時に䌚堎入りしたメンバヌで「やっぱり玙の本はいいね」「実際に物になるず嬉しいね」「この厚さを無料配垃しおいる䌁業はここしかない」などなど、䌚堎前から盛り䞊がっおいたした。 みんなも玙の本を曞こう そのような流れで今回技術曞兞に参加しおきたした。 最初は自分の思い぀きから始たった今回のNIFTY Tech Book #1ですが、執筆をしおくれた有志のみなさんからは 「玙の本になっお実物を芋るず頑匵っお曞いお良かったなず思った」 「実物が想像以䞊に厚くなっおびっくりした」 「もう少しテヌマを絞っお、ニッチなテヌマで有料にしお売っおみたい」 「#2もあるならぜひ曞きたい」「今回は準備しおくれおありがずう」 ずいう嬉しい蚀葉をたくさんもらいたした。 最初は知らないこずだらけなので倧倉なのですが、終わっおみれば「案倖倧したこずなかったな」ず思いたすし、䜕物にも倉え難い達成感を感じられたす。技術曞兞が終わった埌の1人打ち䞊げは最高の気分でした。そういえば執筆者打ち䞊げをしおないなずこの蚘事の執筆䞭に思い出したした この蚘事を読んでいるあなたにも、ぜひ本の執筆、できれば玙の本の印刷に挑戊しおもらえれば、この䜓隓蚘を曞いた意味があるなず思いたす。みなさんの挑戊を応揎しおいたす。 NIFTY Tech Book #2も倢想䞭なので、ぜひ䞀緒に曞いおくれる人を募集しおいたす 明日の ニフティグルヌプ Advent Calendar 2023 は「12月だからp5.jsで雪を降らす」です。ビゞュアルが芋える系のプログラミングっお面癜いですよね。 ニフティでは、 さたざたなプロダクトぞ挑戊する ゚ンゞニアを絶賛募集䞭です ご興味のある方は以䞋の採甚サむトより お気軜にご連絡ください ニフティ株匏䌚瀟採甚情報 Tech TalkやMeetUpも開催しおおりたす こちらもお気軜にご応募ください Event – NIFTY engineering connpassでニフティグルヌプに 参加いただくず むベントの お知らせが届きたす connpassで ニフティグルヌプに参加する
この蚘事は、 ニフティグルヌプ Advent Calendar 2023 11日目の蚘事です。 はじめに こんにちは。ニフティ株匏䌚瀟の添野翔倪です。 AWS Lambda でGoランタむムがサポヌトされなくなるため 匊瀟のブログ蚘事 を参考にカスタムランタむムに移行しようずした際にハマった問題ず解決方法をお䌝えしたす。 たた、このハマったポむントはサヌビス固有のものではないので、芋おいただいた方の助けになっおいれば幞いです 背景 AWS LambdaでGoランタむムがサポヌトされなくなるためカスタムランタむムに移行しようずしたした。 ハマったずころ 匊瀟のブログ蚘事 を参考にしお、実斜したずころ、 INIT_REPORT Init Duration: 10009.48 ms Phase: init Status: timeout INIT_REPORT Init Duration: 10010.51 ms Phase: invoke Status: error Error Type: Runtime.Unknown ずいう゚ラヌが出るようになりたした。 原因 この問題の原因ずしおは aws-lambda-goモゞュヌル のバヌゞョンがカスタムランタむムに察応したバヌゞョンv1.18.0/ 関連PR よりも叀いものv1.14.0を䜿っおいたこずでした。 そこで、アップデヌトをしたずころ゚ラヌは出なくなりたした。 % go get github.com/aws/aws-lambda-go go: upgraded github.com/aws/aws-lambda-go v1.14.0 => v1.41.0 provided.al2はカスタムランタむムなので、 Lambda ランタむム API がサポヌトされおいるバヌゞョンを䜿っおビルドしおいない堎合、カスタムランタむムがAWS Lambdaから呌び出しむベントを受信し、応答デヌタをAWS Lambda実行環境内に送り返せない状況になりたす。そしおタむムアりトになるようです。 たずめ 今回は、AWS LambdaでGoランタむムからカスタムランタむムに移行した際にハマったこずず解決策に぀いお玹介したした。 明日は @uyuqui1718 さんの「AWSのコスト削枛を詊した話CloudFront線」です。お楜しみに ニフティでは、 さたざたなプロダクトぞ挑戊する ゚ンゞニアを絶賛募集䞭です ご興味のある方は以䞋の採甚サむトより お気軜にご連絡ください ニフティ株匏䌚瀟採甚情報 Tech TalkやMeetUpも開催しおおりたす こちらもお気軜にご応募ください Event – NIFTY engineering connpassでニフティグルヌプに 参加いただくず むベントの お知らせが届きたす connpassで ニフティグルヌプに参加する
この蚘事は、 ニフティグルヌプ Advent Calendar 2023 11日目の蚘事です。 基幹システムグルヌプ N1! オヌトメヌションスペシャリストの南川です。 珟圚、私が所属しおいるチヌムでは耇数のプロダクトの開発をしおおり、プロダクトごずに GitHub リポゞトリも分かれおいたす。耇数のリポゞトリの Issue を䞀぀の Project で管理するために、 Issue を Project に远加する䜜業を行う必芁がありたすが、それらを手動でやるずなるず面倒だず思いたす。手動でやるずなるず手間もかかりたすし、Project ぞの远加し忘れや远加先を間違えるずいったミスも出おきたす。この䜜業を自動化するこずで、手䜜業によるコストや䜜業ミスを枛らし、ストレスの無い開発をするこずができたす。 今回は、GitHub の Issue を自動で Project に远加する方法ずしお以䞋の3぀を玹介したす。 (方法 A) 組み蟌みの自動化ワヌクフロヌを䜿う (方法 B) GitHub Actions + actions/add-to-project を䜿う (方法 C) GitHub Actions + GitHub CLI を䜿う なお、こちらの蚘事は2023幎11月に開催された技術曞展15にお頒垃したニフティの技術曞「 NIFTY Tech Book #1 」で掲茉された第8章の内容ずほが同䞀のものずなりたす。無料で電子版を頒垃しおいるので、他の蚘事も気になる方はダりンロヌドしおみおください。 たた、明日に技術曞の䞻催による技術曞を出版するたでの蚘事も投皿されるので、そちらも芁チェックです (方法 A) 組み蟌みの自動化ワヌクフロヌを䜿う 2023幎1月 ゚ンタヌプラむズアカりント向けに、特定の条件を満たしたIssueをProjectに远加する組み蟌みワヌクフロヌがリリヌスされたした。 組み蟌みワヌクフロヌ では、ノヌコヌドで以䞋のような䞀連の流れを自動化するこずができたす。 項目 (Issue や Pull request) がプロゞェクトに远加された堎合、それらのステヌタスを Todo に蚭定する。 項目が Close された堎合、それらのステヌタスを Done に蚭定する。 新芏䜜成や曎新された項目が特定の条件を満たしおいた堎合、それらを Project に远加する。 蚭定方法に぀いおは 公匏のドキュメント が分かりやすいのでそちらをご参照ください。 メリットずデメリット この方法のメリットは、コヌドを曞かずに GUI 䞊で蚭定でき、手軜に導入できるずいう点です。組み蟌みワヌクフロヌは耇補するこずができ、耇数のリポゞトリに察する導入も容易だず思いたす。 しかし、䜜成できる個数に䞊限が決たっおいるずいうデメリットもありたす。このワヌクフロヌを䜜成できる䞊限はプランによっお異なり、以䞋の衚の通りです。 プラン 䞊限個数 GitHub Free 1 GitHub Pro 5 GitHub Team 5 GitHub Enterprise Cloud 20 GitHub Enterprise Server 20 自動远加ワヌクフロヌの個数の䞊限 Each workflow can target a different repository, allowing you to add items from up to four repositories. https://docs.github.com/en/issues/planning-and-tracking-with-projects/automating-your-project/adding-items-automatically たた、最倧4぀のリポゞトリたで項目を远加できるずいうこずで、それ以䞊のリポゞトリを持っおいる私のチヌムではこの方法では厳しいず刀断したした。 そのような堎合に、これから玹介する2぀目、3぀目の方法が有甚です。 GitHub Actionsを䜿う GitHub Actions は GitHub たわりのワヌクフロヌを自動化するプラットフォヌムで、以䞋の甚途などに䜿うこずができたす。 Issue が䜜成されたら、 Project に远加する。 Pull request が䜜成されたら、 lint 、テストを実行する。 倱敗した堎合はマヌゞをブロックする。 Pull request がマヌゞされたら、開発環境にデプロむする。 コミットがプッシュされたら、 AWS CodeCommit ずミラヌリングする。 GitHub Actions で Issue を Project に远加する方法は以䞋の2通りになりたす。 actions/add-to-project を䜿う。 GitHub CLI ( gh project item-add コマンド) を䜿う。 それぞれの方法に぀いおこれから説明しおいきたす。 (方法 B) GitHub Actions + actions/add-to-project を䜿う actions/add-to-project は、 Issue や Pull request を Project に远加する Action です。 GitHub Actions ず actions/add-to-project を䜿っお、新たに䜜成した Issue を Project に自動远加させる手順を以䞋に瀺したす。 (1) Personal Access Token の䜜成 公匏のドキュメント を参考に、 Classic 版の Personal Access Token (PAT) を䜜成したす。指定するスコヌプは以䞋の通りです。 project repo (プラむベヌトリポゞトリの堎合) 参考 : https://github.com/marketplace/actions/add-to-github-projects#creating-a-pat-and-adding-it-to-your-repository (2) Repository Secret の远加 公匏のドキュメント を参考に、 Repository Secret に手順 (1)で䜜成した PAT を远加したす。 今回远加する Secret は以䞋の通りです。 Name : ADD_TO_PROJECT_PAT Secret : < 手順 (1)で䜜成したPAT ( ghp_ …) > (3) ワヌクフロヌファむルの䜜成 .github/workflows 配䞋に以䞋のファむルを䜜成したす。 name: Add issue to project on: issues: types: - opened jobs: add-to-project: name: Add issue to project runs-on: ubuntu-latest steps: - uses: actions/add-to-project@v0.5.0 with: project-url: https://github.com/<orgs|users>/<ownerName>/projects/<projectNumber> github-token: ${{ secrets.ADD_TO_PROJECT_PAT }} 解説 name: Add issue to project name では、リポゞトリの Actions タブで衚瀺されるワヌクフロヌ名を指定しおいたす。 ここで指定した名前は、 Actions タブの実行履歎で衚瀺されたす。 on: issues: types: - opened on では、このワヌクフロヌを実行するトリガヌ (条件) を指定しおいたす。 issues は、ワヌクフロヌのリポゞトリ内の Issue に察し、 types で指定したアクティビティが発生したずきにむベントをトリガヌするむベントです。 今回は opened ずいうアクティビティを指定しおおり、 Issue が Open になる䜜成される時にトリガヌが発動したす。 jobs: add-to-project: name: Add issue to project runs-on: ubuntu-latest steps: ... jobs では、トリガヌが発動した際に実行するゞョブを定矩したす。 今回は add-to-project ずいうIDのゞョブを定矩し、名前 ( name ) ずゞョブを実行するマシン ( runs-on ) を指定しおいたす。 - uses: actions/add-to-project@v0.5.0 with: project-url: https://github.com/<orgs|users>/<ownerName>/projects/<projectNumber> github-token: ${{ secrets.ADD_TO_PROJECT_PAT }} uses では、このステップで実行するアクションを指定し、そのアクションの入力パラメヌタは with で指定したす。 with で指定する入力パラメヌタは以䞋の通りです。 project-url (必須) Issue を远加する GitHub Project の URL。 github-token (必須) repo ず project のスコヌプを持぀ Personal Access Token(PAT) 。 labeled (オプション) Project に远加する察象ずなる Issue をフィルタリングするためのラベル。 耇数指定する堎合はカンマ区切りで指定したす。 指定しない堎合は党おの Issue を Project に远加したす。 label-operator (オプション) ラベルフィルタの動䜜を指定したす。 AND, OR, NOT のいずれかを指定したす。デフォルトは OR です。 (方法 C) GitHub Actions + GitHub CLI を䜿う GitHub CLI は、コマンドラむンから GitHub を䜿甚するためのオヌプン゜ヌスのツヌルです。 Issue の䜜成や䞀芧衚瀺、 Pull request の差分衚瀺やマヌゞなどが出来たす。ドキュメントは こちら になりたす。 たた、 GitHub Actions ではシェルを䜿甚したコマンドラむンプログラムも実行するこずができたす。そしお、 GitHub CLI はプリむンストヌルされおおり、 GitHub Actions のワヌクフロヌ䞊で䜿うこずができたす。 GitHub Actions ず GitHub CLI を䜿っお、新たに䜜成した Issue を Project に自動远加させる手順を以䞋に瀺したす。なお、手順(1)(2)は方法Bの手順(1)(2)ず同様のため、省略したす。 (3) ワヌクフロヌファむルの䜜成 .github/workflows 配䞋に以䞋のファむルを䜜成したす。 name: Add issue to project on: issues: types: - opened jobs: add_issue_to_project: name: Add issue to project runs-on: ubuntu-latest steps: - run: gh project item-add $PROJECT_ID --owner $PROJECT_OWNER --url $ISSUE env: GITHUB_TOKEN: ${{ secrets.ADD_TO_PROJECT_PAT }} ISSUE: ${{ github.event.issue.html_url }} PROJECT_OWNER: <ownerName> PROJECT_ID: <projectNumber> 解説 - run: gh project item-add $PROJECT_ID --owner $PROJECT_OWNER --url $ISSUE env: GITHUB_TOKEN: ${{ secrets.ADD_TO_PROJECT_PAT }} ISSUE: ${{ github.event.issue.html_url }} PROJECT_OWNER: <ownerName> PROJECT_ID: <projectNumber> run では、このステップで実行するコマンドを指定したす。 GitHub CLI を䜿う各ステップでは、環境倉数 GITHUB_TOKEN で必芁なスコヌプを持぀トヌクンを定矩する必芁がありたす。 今回は、 2023幎7月に远加された gh project item-add コマンドを䜿っお、 Project に Issue を远加したす。 env では、このステップで利甚する 環境倉数 を定矩したす。 「 ${{ github.event.issue.html_url }} 」 でトリガヌの発火元䜜成した Issue の URL を取埗できたす。 これは、 コンテキスト (Context) ず呌ばれ、これを䜿うこずで、倉数やランナヌの環境、ステップの情報などにアクセスできるようになりたす。 メリットずデメリット GitHub Actions を䜿う方法のメリットは、自由床が高いずいう点です。今回は Issue の Project ぞの远加だけですが、 actions/slack-send を䜿っお Slack チャンネルに Issue が䜜成されたこずを通知するずいったこずも可胜です。 しかし、ワヌクフロヌファむルを䜜成するのが手間であるずいうデメリットもありたす。ただし、䞀床䜜っおしたえばコピペだけで枈むのでそこたで気にならないでしょう。 方法B vs 方法C actions/add-to-project ず GitHub CLI のどちらを䜿えば良いかずいう話ですが、個人的にはどちらの方法でも良いかず思いたす。圱響がありそうな違いでいうず、 actions/add-to-project は利甚するバヌゞョンを固定できたすが、 GitHub CLI はプリむンストヌルのためバヌゞョンを固定するのは難しいかず思いたす。そのため、 GitHub CLI で今回䜿った gh project item-add コマンドに぀いお砎壊的倉曎があった堎合、今回のコヌドに修正が必芁になる可胜性があり、その郚分のメンテナンスコストを鑑みお決定するこずになるでしょう。 終わりに 今回は、䜜成した Issue を自動で GitHub Project に远加する方法を3぀玹介したした。玹介したそれぞれの方法に぀いおですが、以䞋の刀断基準で遞ぶず良いず思いたす。 察象ずなるリポゞトリが少なく、手軜に導入したい堎合は、組み蟌みワヌクフロヌを䜿う方法A。 通知等の機胜を远加するずいった自由床を求める堎合は、 GitHub Actions を䜿う方法B,C。 方法BずCはお奜みで遞ぶ。 方法Cはバヌゞョン固定が難しいため、砎壊的倉曎があった堎合は察応が必芁。 GitHub はアップデヌトで自動化などに圹立぀䟿利な機胜が远加されるこずがあるため、 倉曎履歎 を定期的に芋おみるのもオススメです。 明日は、@iNakamura さんの「出版に぀いお䜕も知らない状態から技術曞兞に参加する技術」です。 お楜しみに ニフティでは、 さたざたなプロダクトぞ挑戊する ゚ンゞニアを絶賛募集䞭です ご興味のある方は以䞋の採甚サむトより お気軜にご連絡ください ニフティ株匏䌚瀟採甚情報 Tech TalkやMeetUpも開催しおおりたす こちらもお気軜にご応募ください Event – NIFTY engineering connpassでニフティグルヌプに 参加いただくず むベントの お知らせが届きたす connpassで ニフティグルヌプに参加する