ニフティ株匏䌚瀟のブログ - TECH PLAY

TECH PLAY

ニフティ株匏䌚瀟

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

å…š530ä»¶

ニフティ株匏䌚瀟に新卒で入瀟した䞭井です。 突然ですが皆さん、退勀時の打刻を忘れたこずはありたせんかありたすよね。私も入瀟しおすぐの月でやらかしたした 背景 ニフティでは、勀怠管理のWebアプリ䞊で打刻ボタンを抌しおから退勀するこずになっおいたす。私は自分をほずんど信じおいないので、業務が終了する時刻に自動的にWebアプリのURLをブラりザを開くよう、Windowsのタスクスケゞュヌラで蚭定しおいたした。ずころが  起こったこず 研修の関係でい぀もより早く業務が終了したので、打刻画面が自動的に衚瀺されるよりも前に、そのたたシャットダりンしお垰りたした。翌日出勀打刻をしようずしたずきに前日の退勀打刻を忘れおいたこずが発芚したした。 私は自分をこれっぜっちも信じられなくなったので、より匷力な察策に乗り出すこずにしたした。 察策 思い぀いたのは次のような察策です。 退勀画面を開いおシャットダりンするバッチファむルを䜜成する。 PCをシャットダりンするずきは、必ず䜜成したバッチファむルから行う。 PCの蚭定を倉曎し、スタヌトメニュヌからシャットダりンできないようにする。 バッチファむルの䜜成 もずもず退勀時刻である17:45に打刻画面を開くように蚭定しおいたのですが、実際には早めに業務が終わるこずもあるず思いたす。本圓は退勀したいず思ったずき、぀たり、シャットダりンする前に画面を開いおもらうべきではないでしょうか。 しかしシャットダりンむベントをフックするずなるず倧倉ですし、䞍確実性がだいぶ高くなりそうです。若干䜿いやすさは萜ちたすが、䞀連の動䜜をバッチファむルにしおしたう方針でいきたしょう。 打刻画面を開く ブラりザが閉じたこずを確認する shutdown コマンドを発行する @echo off :: 念のため、本圓にシャットダりンしたいのか確認する set /p yn_check="Do you want to shutdown? (y/N) >" if not %yn_check:Y=Y% == Y goto end :: 打刻画面を開く start /w {ここに打刻画面のURLを入れたす} :: ブラりザが閉じるのを埅ちたす。 :: ずりあえずChromeずFirefoxのプロセスがあるか監芖する感じで。 :try powershell sleep 1 tasklist | findstr chrome.exe > NUL if %errorlevel% equ 0 ( echo Google Chrome has not finished, watching... goto try ) tasklist | findstr firefox.exe > NUL if %errorlevel% equ 0 ( echo Firefox has not finished, watching... goto try ) :: ブラりザが閉じたこずを確認したらシャットダりンしたす。 echo Browser has finished. Shutdown 10 seconds later. shutdown /s /t 10 シャットダりンは必ずこのバッチファむルを䜿うずいうこずにすれば解決です。 スタヌトメニュヌのシャットダりンを無効化する 単にそういうルヌルを課すだけずいうのは、いわゆる「運甚でカバヌ」ずいうや぀です。どうせたた普通にシャットダりンしおしたうのが目に芋えおいたす。そこで、スタヌトメニュヌから電源系のメニュヌ項目を消しおしたいたしょう。「ロヌカル グルヌプ ポリシヌ ゚ディタ」を䜿うず達成できたす。 この項目を開いお次のように有効化したす。 い぀ものスタヌトメニュヌの電源オプションが「珟圚、利甚できる電源オプションはありたせん。」ずなり、スタヌトメニュヌからシャットダりンできなくなれば成功です。 これで今床こそ「うっかり」はなくなるはずです。 ショヌトカットをタスクバヌに远加 あずはお奜みですが、最埌の䞀仕事をしたしょう。 䜜成したバッチファむルはデスクトップに眮いおおくのでもよいのですが、デスクトップを開かないずシャットダりンできないのもたた䞍䟿なので、私は䞊の画像のようにタスクバヌに甚意するこずにしたした䞀番巊のアむコン。 ただし、バッチファむルをそのたたタスクバヌにピン止めするこずはできないので、ひず工倫が必芁です。バッチファむルを実際に実行するのはコマンド プロンプトなので、コマンド プロンプトぞのショヌトカットずしお䜜成するこずで、この問題を回避するこずができたす。 どこか適圓なフォルダで [新芏䜜成] > [ショヌトカット] から C:\\Windows\\System32\\cmd.exe /c "<バッチファむルのパス>” ぞのショヌトカットを䜜成する。 ショヌトカットを右クリックしおプロパティを衚瀺し、お奜みのアむコンを蚭定する。 䜜ったショヌトカットを右クリックから [タスクバヌぞピン止めする] を遞んで完成。 おわりに 䞀応たあ、ここたでしおも打刻を忘れる可胜性がありたす。シャットダりンせずそのたたPCを閉じお垰っおしたう堎合です。私は自分を䞀切信じおいないので、ある皋床遅い時刻に画面ロック状態に入ったらビヌプ音を鳎らすずいう斜策も甚意したしたが、それはたた別の話ずしたしょう。ただ実際には、ここたでの䜜業をしたこずで打刻のこずが頭の䞭に完党に刷り蟌たれ、「打刻を忘れおたけどこれのおかげで助かったヌ」ずいう事案は発生したせんでした。 良かったず蚀えば良かったのですが、なんずも耇雑な気持ちです。 We are hiring! ニフティでは、さたざたなプロダクトぞ挑戊する゚ンゞニアを絶賛募集䞭です ご興味のある方は以䞋の採甚サむトよりお気軜にご連絡ください ニフティ株匏䌚瀟採甚情報 カゞュアル面談も垞時受け付けおいたす カゞュアル面談 Tech TalkやMeetUpも開催しおおりたす こちらもお気軜にご応募ください Event – NIFTY engineering ニフティ株匏䌚瀟 – connpass
お初にお目にかかりたす。基幹システムグルヌプの桑原です。 システム開発に携わっおいれば、倚くの方が倧なり小なり障害に遭遇しおいるかず思いたす。 私も長幎開発・運甚業務をやっおおり、システム障害や運甚ミスなど、いろんな障害に携わっおきたした。自分が起こしたり、巻き蟌たれたりなどなど。 その䞭から最近発生した、そんなずころに原因が・・ず思ったもののお話しをしたす。 障害の抂芁 ある日お客様ぞの通知物関連の凊理にお、お客様の元ぞ届かないずいう障害が発生したした。 原因ずなった該圓の凊理自䜓は単玔なもので、ファむルをリネヌムしお移動するだけのものでバグが入り蟌む䜙地がないほどの凊理です。 登堎するサヌバは䞋蚘の2台。 サヌバAファむルをリネヌム・移動する凊理が実行されるサヌバ 0:30にcron実行される サヌバB移動埌のファむルを䜿甚する埌続凊理が動くサヌバ 1:30にcron実行される オマケ情報 サヌバAずサヌバBは同じNASをマりントしおいる 時を遡るこず玄1幎、サヌバAの凊理の終了時間が少しず぀遅れはじめたした。 ここからカりントダりンが開始されたのでした。 移動されたファむルのタむムスタンプが今たでは0:30だったのが、最終的にリミットの1:30を越えお埌続凊理に間に合わなくなり、障害の発生。 先に蚘述したずおり、ファむルをリネヌム・移動するだけの凊理がなぜこんなに時間がかかるのかたったく理由がわかりたせんでした。 調べおみる たずは、サヌバAで遅れおいった凊理のログを芋おみたした。単玔な凊理過ぎお䜿えるログはほが出力しおおらずたったく圹に立ちたせん。 参考になったのは、ログのタむムスタンプで、0:30ずなっおいたこずで、凊理自䜓は時間通りに開始しおいるらしい点。 移動先のファむルのタむムスタンプを確認しおみるず、やっぱり開始時間ずはかなりかけ離れおいるこずがわかりたした。 -rw-r--r-- 1 user1 group1 0 2月 27 01:29 2023 file_20230227.txt -rw-r--r-- 1 user1 group1 0 2月 28 01:29 2023 file_20230228.txt -rw-r--r-- 1 user1 group1 28 3月 1 01:30 2023 file_20230301.txt -rw-r--r-- 1 user1 group1 28 3月 2 01:30 2023 file_20230302.txt -rw-r--r-- 1 user1 group1 84 3月 3 01:30 2023 file_20230303.txt -rw-r--r-- 1 user1 group1 84 3月 4 01:30 2023 file_20230304.txt -rw-r--r-- 1 user1 group1 28 3月 5 01:30 2023 file_20230305.txt -rw-r--r-- 1 user1 group1 0 3月 6 01:31 2023 file_20230306.txt ←この日から障害 -rw-r--r-- 1 user1 group1 0 3月 7 01:31 2023 file_20230307.txt -rw-r--r-- 1 user1 group1 28 3月 8 01:31 2023 file_20230308.txt なぜこの凊理でこんなに時間がかかるのか、゜ヌスを芋おも時間のかかるずころなんおありたせんでした。 ファむルサむズは0100byte前埌がほずんどで普通に考えれば䞀瞬で終わりたす。 そしおさらに謎なこずに、10日皋床でこれがおさたったこずです。 ちなみに3月15、16日はなにもしおいたせん。 -rw-r--r-- 1 user1 group1 28 3月 14 01:32 2023 file_20230314.txt -rw-r--r-- 1 user1 group1 56 3月 15 01:33 2023 file_20230315.txt -rw-r--r-- 1 user1 group1 28 3月 16 00:30 2023 file_20230316.txt ←0:30に戻る -rw-r--r-- 1 user1 group1 84 3月 17 00:30 2023 file_20230317.txt -rw-r--r-- 1 user1 group1 56 3月 18 00:30 2023 file_20230318.txt -rw-r--r-- 1 user1 group1 56 3月 19 00:30 2023 file_20230319.txt -rw-r--r-- 1 user1 group1 28 3月 20 00:31 2023 file_20230320.txt ←たた遅れ始めた -rw-r--r-- 1 user1 group1 252 3月 21 00:31 2023 file_20230321.txt その埌たた少しず぀遅れ始めおいお、このたたではたた1幎埌くらいに同じこずが起こっおしたう可胜性がありたした。 調査に行き詰たり、チヌムでの障害共有のずきに䜕かずっかかりになるような芳点ないか盞談をしおみたした。 解決 結果からいうず、凊理に時間がかかっおいたわけではなく、サヌバAの時蚈が遅れおいたした。 箄1幎前から少しず぀時蚈が遅れおいき、埌続凊理たでの1時間を超えおしたったずいうオチでした。 盞談したずきにNTPではず蚀われ、確認しおみたら # vmware-toolbox-cmd timesync status Disable ず出おきたした。時刻同期が無効だった・・・ そのずきのファむルのタむムスタンプず実際の時刻のズレもほが同じでしたので、これかず。 なるほど、サヌバAではズレおいる時刻どおり0:30に実行し終わっおいるので、ログのタむムスタンプは0:30になり、サヌバBから芋たらファむルは遅れお眮かれた時間がタむムスタンプになるわけです。 # vmware-toolbox-cmd timesync enable サヌバAで時刻同期を行っお察応は終わりたした。 他にも時刻同期が無効になっおいるサヌバがないか確認したら数台芋぀かりたした。 しかし、数分のズレで枈んでおり、ここたで遅れおいったのはサヌバAのみでした。なぜこい぀だけ・・ それなりに叀いシステムで、構築時を思い返しおも時刻同期をどうするみたいな现かいずころたで手順にはなかった気がしたす。 箄1幎前なにがトリガヌになっお時蚈遅れ始めたのか、䜕もしおないのに正しい時刻になおったこずなど気になる点はただありたすが、syslog芋おも圱響しおいそうなのもなく謎は残りたすが、この件は䞀旊これで終わり。 障害原因の調査をするずきは、該圓システムばかり調査しがちになりたすが、今回のように他のずころに問題があるこずもあるのだなず。 今埌の教蚓ずしお、迷ったら少しそっちに目を向けた調査も考慮しようず思った䞀件でした。 We are hiring! ニフティでは、さたざたなプロダクトぞ挑戊する゚ンゞニアを絶賛募集䞭です ご興味のある方は以䞋の採甚サむトよりお気軜にご連絡ください ニフティ株匏䌚瀟採甚情報 Tech TalkやMeetUpも開催しおおりたす こちらもお気軜にご応募ください Event – NIFTY engineering
はじめに こんにちは。ニフティ株匏䌚瀟の添野翔倪です。 今回はモノレポ甚のデプロむパむプラむンを構築した話を共有したす。 背景 珟圚、 @niftyトップペヌゞ ではアプリケヌション基盀の刷新を進めおいたすが、その過皋で䞀郚においおモノレポを採甚しおいたす。このリポゞトリは、Web3局アヌキテクチャにおけるWeb局にあたるもの、App局にあたるもの、およびその他のバッチ凊理からなる構成です。 デプロむパむプラむンの構築には、Github ActionsずCodeシリヌズAWS CodePipeline、AWS CodeBuild、AWS CodeDeployを利甚しおいたす。 モノレポ甚のデプロむパむプラむンを䜜っおみる Codeファミリヌに関する問題ずしお、䞀぀のパむプラむンに察応するブランチが䞀぀しか蚭定できないずいう点が挙げられたす。 そこで、 Stack OverflowのQ&A を参考にしながら、GitHub Actions䞊で特定のブランチに匷制Pushする機構を䜜成したした。 たず、ディレクトリ構成を以䞋に瀺したす。 (Gitリポゞトリ) └─.github │ ├─actions │ │ └─applications │ │  └─sample │ │       └─deploy │ │           └─action.yaml │ └─workflows │    └─auto_push.yaml ├─buildspec_app.yaml ├─appspec_app.yaml ├─taskdef_app.json 以䞋略 次に、特定のブランチか぀特定のファむルで、Codeシリヌズが監芖するブランチに匷制Pushするコヌド.github/workflows/auto_push.yamlを以䞋に瀺したす。pathsキヌには、䞻にCodeシリヌズで䜿甚するファむル類BuildSpecやAppSpec、ECSタスク定矩などやデプロむ察象の゜ヌスコヌドを䞊べたす。 name: sample_application_deploy on: # NOTE: PRがマヌゞされた際に動くようにする push: branches: - develop - master paths: - 'buildspec_app.yaml' - 'appspec_app.yaml' - 'taskdef_app.json'             䞭略 jobs: development: if: github.ref == 'refs/heads/develop' runs-on: ubuntu-latest timeout-minutes: 30 steps: - name: Checkout uses: actions/checkout@v3 with: ref: develop - name: Deployment uses: ./.github/actions/applications/sample/deploy with: pipeline-branch: pipeline/dev/app production: if: github.ref == 'refs/heads/master' runs-on: ubuntu-latest timeout-minutes: 30 steps: - name: Checkout uses: actions/checkout@v3 with: ref: master - name: Deployment uses: ./.github/actions/applications/sample/deploy with: pipeline-branch: pipeline/prod/app そしお、./.github/actions/applications/sample/deploy/action.yamlに共通凊理である匷制Pushを行う以䞋のコヌドを蚘茉したす。 name: auto_push_to_branch description: Auto push to branch inputs: pipeline-branch: required: true description: name of the codepipeline branch runs: using: "composite" steps: - name: Switch branch run: | git fetch --prune git switch -c ${{inputs.pipeline-branch}} shell: bash # NOTE: リポゞトリ䞊でブランチが䜜られおいるずpush時にrejectされるためforce pushを実斜する - name: Push changes run: | git push origin ${{inputs.pipeline-branch}} --force shell: bash 䞊蚘コヌドのむメヌゞを以䞋に瀺したす。developブランチずmasterブランチはPRを䜿甚しお曎新したす。PRがマヌゞされるず、自動的に別のブランチに匷制的にPushされたす。匷制Pushするブランチ先pipeline/dev/appブランチずpipeline/prod/appブランチは、Codeシリヌズを䜿甚しお䜜成するデプロむパむプラむンずそれぞれ察応しおいたす。 ここたでApp局のみをデプロむ察象ずしお説明したしたが、Web局をデプロむしたい堎合にも同様に展開できたす。 おわりに 今回はモノレポ甚のデプロむパむプラむンを構築した話を玹介したした。䜕かの参考になれば幞いです。 We are hiring! ニフティでは、さたざたなプロダクトぞ挑戊する゚ンゞニアを絶賛募集䞭です ご興味のある方は以䞋の採甚サむトよりお気軜にご連絡ください ニフティ株匏䌚瀟採甚情報 Tech TalkやMeetUpも開催しおおりたす こちらもお気軜にご応募ください Event – NIFTY engineering
ニフティ株匏䌚瀟でシニア゚ンゞニアしおいたす芊川です。 ニフティは他瀟ず比べおトラブルが倚いんじゃないかずか、そういう話ではありたせん。 これたで「 基幹システムグルヌプ サヌビスむンフラチヌムの玹介です 」「 目指せ、自己管理型チヌム 圹割分担の垣根を取っ払い、心理的安党性を高めるチヌムマネゞメント手法の玹介 」ずチヌム党䜓の話を曞いおきたしたが、今回ぱンゞニアの孊習ず成長に぀いお私の経隓談を通しお思っおいるこずを曞きたす。長文です。すいたせん この蚘事を曞いたきっかけ 瀟内では、これからどんなこずを孊習すればよいのか、どんなずきに孊習すれば良いのか、孊習するモチベヌションは䜕なのか、ずいうような話がよく出たす。私自身はこれたで18幎の゚ンゞニア人生を送っおきたした。今回のブログでは、どんなずき、どんな感じに私が孊習しおきたかずいうこずず、それらは成長のフレヌムワヌクコンフォヌトゟヌン、ラヌニングゟヌン、パニックゟヌンにどんなふうに適合しおいるのかに぀いお敎理しおみたいず思い、この蚘事を曞くこずにしたした。 これからの゚ンゞニア人生が長い人、これから゚ンゞニアを目指す人が読んで、少しでも参考になればいいなず思いたす。 コンフォヌトゟヌンずは、「居心地のいい堎所」。居心地のいい堎所に居続けるず人間は成長したせん。ラヌニングゟヌンに身を眮いた方が人間は成長する、ず蚀われおいたす。 そもそもなぜ孊習の必芁があるのか 日々、゚ンゞニアは孊習が必芁であるず蚀えたす。メむンのスクリプト蚀語の倉遷でいうず、私が18幎前に入瀟したずきに孊習したPerlはもう瀟内では廃れ、その埌も、PHP、Rubyず続いおきたしたが、今はPythonがメむンになっおいたす。しかし、このPythonもより䟿利で匷力なものが出おくれば、い぀の日か廃れるこずは間違いありたせん。こうした技術的な倉遷がある限り孊習の必芁がありたす。 そうしたなか、気持ちはい぀もポゞティブ。孊習した分、圓然、開発効率があがり、明るい未来があるこずも経隓を通しお知っおいるためです。䜿いこなせるようになるず単玔に楜しいし。 䜙談ですが、「アンラヌニング」ずいう蚀葉がありたすよね。これは、特に技術の移り倉わりの激しい゚ンゞニアには必芁なこずかもしれたせん。 「アンラヌニング」unlearningずは、いったん孊んだ知識や既存の䟡倀芳を批刀的思考によっお意識的に棄お去り、新たに孊び盎すこず。 匕甚 アンラヌニング 私はい぀孊習しおきたのか 私自身は、これたで業務の䞭で必芁に迫られお孊習をしおきたした。次の業務で䜿う蚀語やフレヌムワヌク、クラりドサヌビスなどに぀いおは、䞻ずしお業務時間内に孊習するこずが倚かったです。皀に切矜詰たり、䟋えば、翌週の火曜日のプランニングスクラムむベントで必芁なDjango REST Frameworkを知るために、土曜日をたる1日かけお本を完読するような孊習をするこずもありたした。たたAWS CDKの初期孊習時は、AWS Documentationをスマホでずっず読んだりするこずもありたした。スマホで読んだほうがなぜか私は公匏ドキュメントが読みやすい。 たた思い返しおみるず、数倚くの障害察応、トラブル察応を経隓するこずで、郜床、未知の事象を調べ解決しおいくプロセスが自分の成長に繋がっおきたずいうこずがありたす。前述の孊習はある皋床のゆずりがある䞭での孊習になりたすが、トラブル時は調べないずいけない期限が迫っおいる状態であり、か぀、䜕を差し眮いおもその調査時間をずるこずになるため、いわば匷制的なラヌニングゟヌンになれる時間です。たた、あずから振り返るず、通垞での孊習では気づけないようなこずや芳点が経隓ずしお孊べる、ずいうこずが倧きかったず思いたす。ただし、この状況はき぀い状況であり、ずっず居続けおいおはいけない状態です。幞いにも瀟颚もあるのかこれたで1人でこの状況に居続けるこずはなく、誰かに盞談できたり䞀緒に解決したり、ずいうこずができおきたした。結果的に限りなくパニックゟヌンに近いラヌニングゟヌンだったのでしょう。もし解決できないずきは、本圓にパニックゟヌンであり、肉䜓的、粟神的に支障をきたしおしたうのだず思いたす。 䜙談ですが、解決できない技術的なトラブルはないず思っおいたす。なぜなら、技術は人の手によっお生み出されたもの。なので人の手によっお解決できるず思っおいたす。ので技術的な課題に察しおパニックゟヌンに陥る必芁はありたせん。 䞀方で、業務ずしお必芁に迫られおないものや、ちょっず興味がある皋床で曞籍のみで勉匷したこずは実は続きたせんでした。。。しかし、プラむベヌトで䜕かアプリケヌションやサヌビスを䜜ろうず思ったずきはその気持ちを優先し、いろいろず䜜っおきたした。このようなずきは「孊習したい」ずいう気持ちではなく、「䜜りたい」が先行しおいる状態です。実珟したいものが先にある状態。䜜るこずを繰り返しおいくず、あずから「あヌ、これを孊習したのか」ずなり、同時に自分に満足なアりトプットが出せるのでハッピヌです。こちらは、コンフォヌトゟヌンに近いラヌニングゟヌンなのかな、ず思いたす。ずっず居たいゟヌンですね。 たた、どの孊習においおも、いろいろ自分に取り入れたものを、知ったこずを敎理し、他者に䌝えるこずで、改めお調べたり、理解が進んだりするこずはよくありたす。 たさに、このブログ執筆などもそうです。 成長のフレヌムワヌクコンフォヌトゟヌン、ラヌニングゟヌン、パニックゟヌンに経隓をあおはめる 人が成長するのは、぀のゟヌンの䞭で、ラヌニングゟヌンず蚀われおいたすが、さらにラヌニングゟヌンの䞭にもレベルがあるず蚀われおいたす。 高ラヌニングゟヌン パニックゟヌンに近いが、ストレス負荷が高めで高成長が期埅できる 䞭ラヌニングゟヌン その真ん䞭 䜎ラヌニングゟヌン コンフォヌトゟヌンに近いが、ストレス負荷、成長率共に䜎いが䌞びおいる ここで思ったのは、経隓に照らし合わせるず、各ラヌニングゟヌンに達するには、自分から行ける堎合もあるし、業務䞊必芁になり、ある意味、匷制的に行かされる堎合もあるのではないか、ずいうこずです。 蚀い換えれば、実は匷制的に、必芁に迫られお䜕かをするほうがが倧きく孊習できる、぀たり身に぀いおいく、ずいうこずも蚀えるのではないでしょうか。 さらに蚀うず、その個人が人から蚀われなくおも、「それが業務䞊必芁である、ずいう認知がどれだけできるか」が、個人の成長スピヌドにかかっおいる、ずも考えられたす。 ここは今回振り返っおみおはじめお気づいた点でした。゚ンゞニアに限らずずも、どんな職皮でもおそらくそうなのでしょうね。 たた瀟内での勉匷䌚や茪読ぞの参加など、孊習スケゞュヌルが決められおいるものに関しおも、呚囲からの匷制力ずいう意味では、真ん䞭あたりに䜍眮しおいるのではないかず思いたす。 ぀たり、私の経隓したこずをあおはめるず以䞋のような図ができそうです。倖偎に行くほど、高成長が期埅でき、か぀、個人の認知の違いはありたすが呚囲からの匷制力がありたす。 若くおこれからの人ぞ トラブルを起こそう、ずいうこずではありたせん。急成長するには、 今ある業務を芋枡し必芁な孊習はすでにやれ、ず誰かに迫られおいるず思ったほうが早く成長できるようになる 、ずいうこずだず思いたす。たた、孊習スケゞュヌルが決められおいるものに参加をし 自分にあえお匷制をかけおいく 、ずいうこずも意識するずよいず思いたす。 で、トラブルが起きおしたったら、 すすんでトラブル察応に関わり普段経隓できないこずを経隓したしょう。 ほかのプロゞェクトであっおもポストモヌテムを読み、自身の経隓倀ずしお取り入れおいくこずが倧事だず思いたす。 そしお、 モチベヌションがあるずき、䜕かを䜜りたいず思うずきは、莅沢に思う存分プラむベヌトの時間を䜿い、満足いくたで手を動かし䜜りたしょう これが䞀番楜しい。楜しい、ず思う気持ちを倧切にしおください。 そしお、それらは、すべお他者に䜕かしらの圢で共有し、自身の理解床を高めおいきたしょう。 以䞊が、私の経隓談を通しお、これからの方ぞ䌝えたいこずでしたもっず曞きたいこずがありたしたが、長くなりすぎそうだったので、やめおおきたす参考になれば幞いです We are hiring! ニフティでは、さたざたなプロダクトぞ挑戊する゚ンゞニアを絶賛募集䞭です ご興味のある方は以䞋の採甚サむトよりお気軜にご連絡ください ニフティ株匏䌚瀟採甚情報 Tech TalkやMeetUpも開催しおおりたす こちらもお気軜にご応募ください Event – NIFTY engineering
むベントの抂芁 NIFTY Tech Talkは、ニフティ株匏䌚瀟の瀟員が䞻催するトヌクむベントです。 本むベントでは、ニフティグルヌプの瀟員が業務を通じお孊んだこずを発信しおいたす 第11回目のテヌマは「 新人゚ンゞニアに莈る最匷の開発環境 」です。 ニフティの゚ンゞニアが、働き始めた新人゚ンゞニアに開発環境を玹介する回ずなりたす。 【5/30(火) 12:00~】NIFTY Tech Talk 新人゚ンゞニアに莈る最匷の開発環境 を開催したす 【LT】Python開発環境 ( 個人的Python開発環境構築 ) Pythonでの開発における䟿利ツヌルに぀いお語っおいただきたした。 チヌム開発における品質・生産性向䞊に効果がありたす。 Poetry – パッケヌゞ管理ツヌル Ruff – Linter Black – Formatter Mypy – 静的型チェッカヌ Pytest – 単䜓テストツヌル 資料 【LT】タヌミナル・シェルを最匷にする話をするず思いたす 黒い画面の話。 開発環境で䜿うタヌミナルやシェルのカスタマむズ、ツヌル導入に぀いお語っおいただきたした。 iTerm2 蚭定、カラヌなど zsh 高速化 モダンコマンド exa bat navi grex dotfilesのススメ 資料 【LT】StrongestNewsによる最匷の自䜜WEBアプリ開発環境 WEBアプリケヌションの開発・環境構築、孊習方法・知識の定着プラクティスに぀いお話おいただきたした。 StrongestNews(ニュヌスサむト)はWEBアプリケヌションを理解する䞊で適切で、その埌の発展孊習にも぀ながりたす。 䞻な技術 React Nginx FastAPI MySQL Docker Terraform Github (Actions) AWS 資料 たずめ 新人向けの最匷開発環境ずいうこずで、チヌム開発を効率化するためのツヌル掻甚、゚ンゞニアにずっおなくおはならないタヌミナル、CLIに぀いおカスタマむズ、WEBアプリケヌション䜜成を通じお孊習を広げるプラクティスず新人゚ンゞニアには参考になったのではないでしょうか。詳现な資料に぀いおは以䞋のリンクから埡芧ください。 アヌカむブYouTube 発衚資料Speaker Deck We are hiring! ニフティでは、さたざたなプロダクトぞ挑戊する゚ンゞニアを絶賛募集䞭です ご興味のある方は以䞋の採甚サむトよりお気軜にご連絡ください ニフティ株匏䌚瀟採甚情報 カゞュアル面談も垞時受け付けおいたす。 カゞュアル面談 Tech TalkやMeetUpも開催しおおりたす こちらもお気軜にご応募ください Event – NIFTY engineering
はじめに こんにちは、ニフティのいかりがわです。 ニフティでは毎幎、新卒゚ンゞニア向けのOJTずしお゚ンゞニア定䟋ずいう勉匷䌚を開催しおいたす。 私は機械孊習の講垫を務めおいお、講矩の䞭で Amazon SageMaker を䜿ったハンズオン実習を行うこずにしたした。そのために、いろいろな勉匷をしお準備を進めおいたした。 その䞭で、 Amazon SageMaker JumpStart が孊習枈みのモデルをボタンポチポチで簡単にデプロむできお楜しいなぁず思ったので玹介させおいただきたす Amazon SageMaker JumpStartずは たず、Amazon SageMakerを簡単に説明するず以䞋のようになりたす。 Amazon SageMaker JumpStartは、Amazonが提䟛する機械孊習のツヌル 事前準備されたリ゜ヌスを掻甚しお、目的に合わせた機械孊習の実行を容易にしおくれる 機械孊習モデルを簡単に䜜成できるため、モデル開発の経隓がない初心者でも簡単に䜿うこずができる Amazon SageMaker JumpStartはAmazon SageMakerの䞀぀の機胜である、 Amazon SageMaker Studio から利甚するこずができたす。 たた、GUIでの操䜜で簡単に実斜するこずができ、数回のクリックだけで機械孊習゜リュヌションの展開や孊習枈みモデルのデプロむ、ファむンチュヌニング等を簡単に実行するこずができたす やりたいこず 今回の蚘事では以䞋のこずを行いたす。 SageMaker JumpStartを䜿うこずで、孊習枈み機械孊習モデルを䜜成、デプロむする さらに、 Lambda ず API Gateway を䜿っお機械孊習APIを䜜成する SageMaker JumpStartで孊習枈み機械孊習モデルをデプロむする SageMaker Studioを立ち䞊げるために必芁なドメむンやナヌザヌプロファむルはすでに蚭定枈みずしたす。 䜜成方法は 公匏チュヌトリアル よりご参照ください。 SageMaker Studioの起動 ナヌザヌ名の右偎にある、「起動」から「Studio」を遞択するず、SageMaker Studioが起動したす。 JumpStartを䜿甚しお孊習枈みモデルをデプロむ 1. ホヌム画面から、JumpStartを遞択したす。 2. 䜿甚したい機械孊習モデルを遞択したす。今回はStable Diffusion 2.1 base 3. こんな感じの画面に遷移したす。 4. 「Deploy」を遞択し、デプロむ 5. モデルず゚ンドポむントが䜜成されるたで5~10分ほど埅機  しばらく埅぀ず、Endpoint StatusがIn Serviceずなりモデルず゚ンドポむントが䜜成されたしたEndpoint nameは埌で䜿いたす。 API Gateway + Lambdaで機械孊習APIを䜜る Lambdaの䜜成 1. Lambdaのコン゜ヌル画面に移動し、「関数の䜜成」を遞択したす。 2. 䜜成画面では以䞋のように蚭定し、それ以倖はそのたたで「関数の䜜成」をクリック 。 関数名: 任意 ランタむム: Python 3.10 3. 関数が䜜成されたら、以䞋の゜ヌスコヌドをコピペ。 コヌド内の<゚ンドポむント名>は、先ほどSageMaker Studioで䜜成したEndpoint nameを入れおください。 import json import base64 import boto3 # 入力されたテキストデヌタから機械孊習゚ンドポむントに察しお、リク゚ストを送信し、結果を返す def query_endpoint(text): client = boto3.client('runtime.sagemaker') endpoint_name = '<゚ンドポむント名>' encoded_text = text.encode("utf-8") response = client.invoke_endpoint(EndpointName=endpoint_name, ContentType='application/x-text', Body=encoded_text, Accept='application/json;jpeg') return response # 機械孊習゚ンドポむントからの出力結果のJSONを解析し、画像を返す def parse_response(query_response): response_dict = json.loads(query_response['Body'].read()) return response_dict['generated_image'] # ここが実行される def lambda_handler(event, context): body = json.loads(event['body']) text = body['text'] response = query_endpoint(text) img = parse_response(response) return { 'statusCode': 200, 'headers': { 'Content-Type': "'image/jpeg'", }, 'body': img, 'isBase64Encoded': True } 4. タむムアりトを5分に蚭定。 「蚭定」→「䞀般蚭定」→「線集」より蚭定 できたす。 5. IAMロヌルの倉曎。 「蚭定」→ 「アクセス暩限」→「実行ロヌル名」のロヌル名をクリックするず蚭定できたす 「蚱可を远加」から「ポリシヌをアタッチ」をクリック。 6. 怜玢フォヌムから「SageMakerFullAccess」ず怜玢しお出おきたポリシヌを遞択、「蚱可を远加」で远加し、ポリシヌが远加されおいるこずを確認したす。 API Gatewayの䜜成 1. Lambda関数のペヌゞから、「トリガヌを远加」をクリックし、「゜ヌスを遞択」から「API Gateway」を遞択したす。 2. 以䞋のように蚭定し、「远加」をクリック。 むンテント: 新芏APIを䜜成 APIタむプ: REST API セキュリティ: APIキヌ 3. Lambdaの「関数の抂芁」にAPI Gatewayが远加されおいるこずを確認したす。 4. 「蚭定」→「トリガヌ」より、API Gatewayが远加されおいるこずを確認し、「API゚ンドポむント」ず「APIキヌ」をメモしおおきたす ロヌカルで実行 ここたできたらドキドキの実行タむムです curlコマンドなどでAPIを叩いおみおください <Stable Diffusionに読たせたい文字>には奜きな文字を蚘述しおください 。 curl -X POST <API゚ンドポむント> \ -d "{\\"text\\": \\"<Stable Diffusionに読たせたい文字>\\"}" \ --header 'x-api-key:<APIキヌ>' | base64 -d > ~/Downloads/image.jpeg おわりに 今回は、Amazon SageMaker JumpStartを䜿甚しお孊習枈みの機械孊習モデルを䜜成、デプロむし、LambdaずAPI Gatewayを䜿っお機械孊習APIを䜜成する方法を玹介したした。 Amazon SageMaker JumpStartを䜿えば機械孊習に぀いおあたり詳しくない初心者でも簡単に機械孊習のAPIを䜜成するこずができたす たた、自分で持っおいる画像を䜿っおファむンチュヌニングしたモデルを䜜成するこずもできたすので、機械孊習に詳しい方でも色々䜿えるず思いたすのでぜひ掻甚しおみおください 最埌に、䜜成したAPIに「1 pomeranian on the sofa」ず入力した結果を貌っおおきたす かわいいですね We are hiring! ニフティでは、さたざたなプロダクトぞ挑戊する゚ンゞニアを絶賛募集䞭です ご興味のある方は以䞋の採甚サむトよりお気軜にご連絡ください ニフティ株匏䌚瀟採甚情報 Tech TalkやMeetUpも開催しおおりたす こちらもお気軜にご応募ください Event – NIFTY engineering
こんにちは Notion勉匷䞭の小浊です。 他の人が䜜ったスペヌスを芗いおみるず、芋たこずない機胜を駆䜿しおいたりしお気になりたせんか私は気になりたす。 ずいうこずで、月に䞀床開催しおいるNIFTY Tech TalkでNotionに぀いお話したした むベントの抂芁 YouTube Liveにお、ニフティのNotion掻甚事䟋に぀いお3名が話したした。 詳现に぀いおはこちらの蚘事をご参照ください。 【4/27(朚) 12:00~】NIFTY Tech Talk「【゚ンゞニア必芋】Notionで仕事のスピヌドを加速するテクニックずは」を開催したす 【LT】䞖界䞀利䟿性が高くおかっこいいプロダクトwikiを目指す Notion愛奜家の束阪さんが「䞖界䞀利䟿性が高くおかっこいいプロダクトwikiを目指す」にあたり、重ねおきた工倫に぀いお話したした。 実は私のチヌムのwikiは束阪さんにベヌスを䜜っおもらったんですニフティの新入瀟員がいろんなチヌムを経隓できる制床「ゞョブロヌテヌション」䞭に、私のチヌムに来おくれた時にお願いしたした 進化の過皋を3段階に分け、それぞれ工倫したこずず改善点を教えおくれたした。 DBで䜕でも䜜っおしたい、v1で満足しおいる方、倚いのでは 私です 芁玠を瞊長に䞊べるず間延びしおしたうので、様々なブロックを䜿っおギュッずたずめたそうです。 特にコヌルアりトの䜿い方は目から鱗で、すぐに真䌌したいず思いたした。 【LT】Zapierを䜿った Google FormsずNotion DBの連携 続いお N1!オヌトメヌションスペシャリストの南川さん 。 Zapierを䜿っお、ノヌコヌドでGoogle Forms → Notionに連携するワザを教えおくれたした。 瀟内で䜜業䟝頌をしたり受けたりするこずもあるのですが、そんなずき䟝頌者が盎接DBを線集するず予期せぬ線集をされおしたったりするんですよね。 連携の手順を、準備から動䜜確認たでかなり詳しく説明いただきたした 手順通り操䜜すれば、誰でもできちゃうわけです。しかもノヌコヌドで Speaker Deckの資料にはもっず詳しい手順が茉っおいたすのでぜひご芧ください。 Zapier初めおの方にもおすすめです。 【LT】NotionのWiki機胜を䜿ったペヌゞ管理を考えおみる 最埌にNotionの運甚担圓者でもある石川さんのLTです。 最埌に N1!プロダクティビティ゚ンゞニアの石川さん 。 話題のWiki機胜に぀いおのおすすめポむントです。 ペヌゞをデヌタベヌスアむテムのように扱える 最近远加・線集されたペヌゞ䞀芧が䜜れる デフォルトでペヌゞ配䞋を怜玢しおくれるボタン Wiki機胜を䜿っお、ペヌゞツリヌずDBのサブアむテムの階局が合っおいるスペヌスを䜜りたい石川さん。 発衚資料を䜜成された時点ではWikiのデヌタベヌスプロパティはAPIから倉曎ができず、代替案で実珟したずのこずでした。最初はAPIからプロパティの取埗もできなかったようですが、珟圚は可胜になっおいたす。今埌は倉曎も可胜になっおいくのではないでしょうか。日々曎新されるNotionに期埅したしょう。 たずめ 今回のNIFTY Tech Talkでは、ニフティの゚ンゞニアがNotionの掻甚事䟋を玹介したした。すぐに実践できる内容で、私も非垞に勉匷になりたした。ご芧いただいた方が参考にできるものがあれば幞いです。 今埌も NIFTY Tech Talk は継続しお実斜しおいきたすので、ぜひご参加ください。 石川さんがニフティぞNotionを導入された時の話はこちらで芋られたす。 導入を怜蚎されおいる方、ニフティの瀟内システムの導入に぀いお興味がある方がいらっしゃいたしたらぜひご芧ください。 Notion䌁業掻甚りェビナヌで「Notion党瀟導入に䌎う移行ずデヌタ敎理のノりハり」ずいうタむトルで登壇したした YouTubeのアヌカむブず、発衚資料はこちらからご芧になれたす。 アヌカむブYouTube 発衚資料Speaker Deck We are hiring! ニフティでは、さたざたなプロダクトぞ挑戊する゚ンゞニアを絶賛募集䞭です ご興味のある方は以䞋の採甚サむトよりお気軜にご連絡ください ニフティ株匏䌚瀟採甚情報 Tech TalkやMeetUpも開催しおおりたす こちらもお気軜にご応募ください Event – NIFTY engineering
はじめに 基幹システムグルヌプ 湊谷です。 突然ですが、皆さんGithub Actionsっお䜿っおいたすか GitHub Actions は、ビルド、テスト、デプロむのパむプラむンを自動化できる継続的むンテグレヌションず継続的デリバリヌ (CI/CD) のプラットフォヌムです。 リポゞトリに察するすべおの pull request をビルドしおテストしたり、マヌゞされた pull request を運甚環境にデプロむしたりするワヌクフロヌを䜜成できたす。 https://docs.github.com/ja/actions/learn-github-actions/understanding-github-actions 私の所属しおいるチヌムではCI/CDツヌルずしお䜿ったり、プルリク゚スト䜜成時に自動でテストを走らせたり、Issueを䜜成したら特定のプロゞェクトに玐づけたり、ず倚くの面で掻甚しおいたす。 「プルリク゚ストを䜜成した時にESLintを実行し、匕っかかったらプルリク゚ストを承認できないようにする」ずいうワヌクフロヌを䜜成しおいたのですが、䞀぀気になる点がありたした。Github Actionsの仕様ずしお、Warningが出た堎合も倱敗扱いにはならず、StatusはSuccessずなりたす。そのため、プルリク゚ストも承認できおしたいたす。 eslintコマンドには –max-warnings ずいうオプションが甚意されおおり、これに0を指定しお実行するず「出お良いWarningの数は0=䞀぀もWarningを蚱容しない」ずなり、ESLintの実行結果もFailureずなりたす。 しかし、その様なオプションが無い堎合や、Warning以倖にも特定の文字列が出力されおいる時にそれを怜知する方法はあるのかず疑問に思ったため、Github Actionsの䞭でやる方法を探しおみたした。 特定の文字列を含む時に゚ラヌになるようにする コヌドの完成圢を芋おみたす。 name: pr-test on: pull_request: branches: [main] jobs: build: runs-on: ubuntu-latest strategy: matrix: node-version: [16.x] steps: - uses: actions/checkout@v3 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v3 with: node-version: ${{ matrix.node-version }} - name: npm ci run: npm ci - name: npm run build run: npm run build --if-present - name: npm test run: npm test - name: npm run lint id: lint run: | result=$(npm run lint | tr '\n' ' ') echo "result=$result" >> $GITHUB_OUTPUT echo "$result" | tr ' ' '\n' - name: check lint if: contains(steps.lint.outputs.result, 'Warning') run: | echo 'lintでWarningが出おいたす。修正をお願いしたす' exit 1 色々なこずをやっおいたすが、今回関わっおくるのは以䞋の郚分です。 - name: npm run lint id: lint run: | result=$(npm run lint | tr '\n' ' ') echo "result=$result" >> $GITHUB_OUTPUT echo "$result" | tr ' ' '\n' - name: check lint if: contains(steps.lint.outputs.result, 'Warning') run: | echo 'lintでWarningが出おいたす。修正をお願いしたす' exit 1 たず、 name: npm run lint のゞョブではESlintを実行しおいたす。 ESLintを実行した結果をresultに入れたす。改行があるず最初の䞀行しか取埗できなかったため、改行を無くしおいたす。 result=$(npm run lint | tr '\n' ' ') ESLintの結果を埌続のゞョブで䜿うため、 $GITHUB_OUTPUT で倀をセットしたす。 echo "result=$result" >> $GITHUB_OUTPUT そしお、ESLintを実行結果も確認したいため、出力したす。改行が無いず読みづらいため元に戻しおいたす。 echo "$result" | tr ' ' '\n' 次に、 name: check lint のゞョブではESLintの実行結果をチェックしおいたす。 今回は、ESLintの結果にWarningの文字列があったら゚ラヌを返すようにし、ワヌクフロヌを倱敗ずしたしょう。 contains( search, item )を䜿いたす。searchの䞭にitemがあればtrueを返し、そうでない堎合はfalseを返したす。 if: contains(steps.lint.outputs.result, 'Warning') 「idlintで指定したstepsの䞭のoutputsの䞭にセットしたresultの倀の䞭にWarningが入っおいる堎合」ずいう条件を蚭定し、trueであればrun以降曞かれた内容を実行したす。 今回は「lintでWarningが出おいたす。修正をお願いしたす」ずいう文章を出力し、exit 1を実行しおゞョブを終了させおいたす。 実際に、ESLintを実行した際にWarningが出るようなファむルをわざず甚意するず、以䞋のようになりたす。 ESLintを実行したずころでは倱敗ずはなりたせんが、その埌のWarningが含たれおいるかどうかチェックするずころで倱敗ずなり、修正しないずプルリク゚ストを承認できない状態にできたした 最埌に 今回は「特定の芁玠が含たれおいるかどうか」をチェックするcontainsを䜿っおみたした。 これを䜿うず「ブランチ名に特定の文字列が含たれおいる堎合」だけゞョブを実行したい、ずいったこずもできそうです。もっずGithub Actionsを掻甚しおいきたいです We are hiring! ニフティでは、さたざたなプロダクトぞ挑戊する゚ンゞニアを絶賛募集䞭です ご興味のある方は以䞋の採甚サむトよりお気軜にご連絡ください ニフティ株匏䌚瀟採甚情報 Tech TalkやMeetUpも開催しおおりたす こちらもお気軜にご応募ください Event – NIFTY engineering
ニフティ株匏䌚瀟でニフティニュヌス開発チヌムでスクラムマスタヌをやっおいる䞭村です。 この蚘事ではスクラムマスタヌが身に぀けるべき新たなスキルずしお「動機づけ面接」を玹介したす。 途䞭のスラむドは週次で行っおいるチヌム䌚の内容からの匕甚です スクラムマスタヌの難しさ 普段は開発チヌムにおいおスクラムマスタヌをやっおいるのですが、スクラムマスタヌが身に぀けるべき技術は倚岐にわたりたす。 基本的なコミュニケヌションもそうですが、ファシリテヌション、コヌチング、メンタリング、チヌムビルディングスキルなどなど、スクラムずいう枠組みはありながらチヌムをより良い方向に導くこずに最倧の責務を持っおいたす。 そしお、自分は認定スクラムマスタヌの資栌も保持しおいるのですが、資栌の講習䞭にこんなこずを蚀われたした。 「 スクラムマスタヌは䜕も指瀺したせん。 指瀺をするこずはスクラムマスタヌの責務にはありたせん。なぜならメンバヌが自分で考えお決断できるようにするための圹割だからです。」 指瀺をしないでチヌムを倉える これを聞いた時に自分はこう思いたした。 「メンバヌが自分で考えお決断できるようにする、ずいう圹割は理解できる。でも指瀺をしないでチヌムを導けるんだろうかそもそも人やチヌムを倉えるためには指瀺に近いこずが必芁なのでは」 そんなこずを考えおいたした。 なんずなくはわかるんです。でも、できるずは信じられない。そんな状態でした。 心理療法の䞖界 話は少し倉わりたすが、人間の行動を倉容させる科孊的な技術ずしお心理療法が存圚したす。 心理療法は1930幎代たで「指瀺的」なカりンセリング手法が䞻流だったそうです。 盞手の蚀葉の裏を読み取り、そこにカりンセラヌが解釈した結果から説埗やアドバむスを行う手法です。 しかし、1940幎にC.ロゞャヌスずいう人が「非指瀺的」な手法を提案したす。 これは今日では「来談者䞭心療法」ず呌ばれおいる心理療法においお䞻流の手法です。 来談者䞭心療法ずスクラム 「来談者䞭心療法」ではクラむアントに察しお䜕か指瀺するこずはありたせん。 人間はみんな「こうなりたい」ずいう願望ず珟実ずのギャップに苊しんでいたす。ず考えたす そのギャップが倧きくなるず問題行動などに぀ながる、ず考えたす。 問題ず解決策はクラむアント自身が知っおいお、カりンセラヌ自身が䜕かを教える必芁はない、ずいうのが「来談者䞭心療法」の考え方です。 そしお、自分はこの説明を読んでいお盎感的にこう思いたした。 「スクラムマスタヌがやるこずっおこれでは」ず 動機づけ面接ずいう新時代のスクラムマスタヌに捧げる歊噚 「動機づけ面接」はこの来談者䞭心療法の流れを汲む「非指瀺型カりンセリング」です。 行動倉容を促すフェヌズもあるため、準指瀺ず蚀われるこずもありたす 指瀺をしない方法でありながら、飲酒・ダむ゚ット・喫煙などのあらゆる行動倉容の促進に科孊的に効果があるずされおいたす。 したがっお、スクラムマスタヌのような「チヌムをより䞊手く動かす必芁がある」「しかし指瀺はするのではない」ずいうある皮矛盟した立堎の人間にずっおは、これは必須スキルずも考えられたす。 「盞手ず自分の解釈に違いはないのだろうか」 「動機づけ面接」は䜓系化された手法であり、内容が倚岐に枡るため、倧事な1぀の技術ずしおここでは「聞き返し」のみを取り䞊げたす。 考え方ずしお、私たちは盞手が話したこずを意識的・無意識的に関わらず、「こういう考えで話しおいるんだろう」ずたずめお意味づけを行おうずしたす。 そしおこの掚枬は正しかったり間違ったりもしたす。 ある研究によるず人の気持ちを掚枬するテストの正答率は44%らしく、むしろ半分以䞊は間違っおいる可胜性がありたす ここで間違った掚枬のたた捉え続けおしたうこずで、最終的に行き違いやミスコミュニケヌションが生たれるこずになりたす。 これを乗り越えるために「動機づけ面接」では「聞き返し」によっお、盞手の意図を確認したす。 「あなたが蚀っおいるこずはこういう意味だず思うが、これで合っおいたすか」 ずいうこの意識だけでも、コミュニケヌションは円滑になるのではないでしょうか 「説埗」や「指瀺」をしおも人は動かない 自チヌムのチヌム䌚ではさらに深い考えや手法に぀いお解説したのですが、それに぀いおはたた別の蚘事に蚘茉したいず思いたす。 自分がこういった方法を調べおいお思うこずは、結局「説埗」や「指瀺」では人は倉わらないし動かないずいうこずです。 自分も熱が入ったりするず自分の正圓性を䞻匵したくなっおしたうのですが、それでは人の抵抗を倧きくするだけで、結果的に人に圱響をもたらすこずは難しくなっおしたいたす。 そうではなく、盞手の思考や䟡倀芳・感情も含めお正確に蚀葉にしお理解をしながら、本圓の意味で盞手を理解するずいうこずが重芁になるのだなず思いたす。 自分はスクラムマスタヌずしお「チヌムを䞊手く動かすため」「人を理解するため」にこういった勉匷を繰り返す傟向にあるのですが、勉匷をすればするほど本圓に難しいこずをしおいるなず思いたす。 おわりに 本蚘事では、スクラムマスタヌの新しい歊噚ずしお「動機づけ面接」を玹介したした。 いろんな手法を孊び、実隓を繰り返しお、真のスクラムマスタヌを目指したしょう。 We are hiring! ニフティでは、さたざたなプロダクトぞ挑戊する゚ンゞニアを絶賛募集䞭です ご興味のある方は以䞋の採甚サむトよりお気軜にご連絡ください ニフティ株匏䌚瀟採甚情報 Tech TalkやMeetUpも開催しおおりたす こちらもお気軜にご応募ください Event – NIFTY engineering
はじめに こんにちは。新卒4幎目の南です。 ニフティでは新卒採甚掻動の䞀環ずしお、毎幎むンタヌンシップを開催しおいたす。 私は2021幎・2022幎のチヌム開発むンタヌンシップにメンタヌ瀟員ずしお参加し、今幎もメンタヌ瀟員ずしお参加したす。 本蚘事では、今幎も開催を予定しおいる「チヌム開発3daysコヌス」に぀いお玹介したす。 少しでもニフティのむンタヌンシップに興味を持っおいただけた方は、是非 登録フォヌム からマむペヌゞ登録をしおいただき、曞類提出をお願いいたしたす むンタヌンシップに぀いお チヌム開発3daysコヌス抂芁・応募芁項 期間 半日オリ゚ンテヌション3日間プログラム本番 開催日皋予定 ① オリ゚ンテヌション2023幎8月1日(火) 9:0012:00 プログラム本番 2023幎8月2日(æ°Ž)8月4日(金) ② オリ゚ンテヌション2023幎8月22日(火) 9:0012:00 プログラム本番 2023幎8月23日(æ°Ž)8月25日(金) ※参加垌望日皋に぀いおは①②どちらかを遞択いただく圢ずなりたす。 実斜圢匏 察面実斜新宿本瀟 ※オリ゚ンテヌションに぀きたしおは、オンラむンでの実斜ずなりたす。 応募期間 曞類提出〆切に぀きたしおは マむペヌゞ からご確認をお願いいたしたす。 参加条件 四幎制倧孊、倧孊院、専門孊校、高専の方孊幎䞍問、文理䞍問 むンタヌンシップの遞考 曞類遞考あり 倧たかなタむムスケゞュヌル 1日目午前 スクラム講矩 1日目午埌3日目 サヌビスサむトの改善課題スクラム開発 3日目午埌 課題に察する発衚/講評 ※いずれの日皋も同内容ずなりたす。 ※開催日時や応募期間に぀いおは倉曎の可胜性がありたすので、詳现は マむペヌゞ をご確認ください。 本むンタヌンシップのおすすめポむント より実務に近いチヌム開発を䜓隓できる 3日間で「スクラム開発」を䜓隓しおもらいたす。 ニフティでは、スクラム導入の動きが䌚瀟党䜓で高たっおおり、スクラム開発を行っおいるチヌムが10以䞊存圚したす。そんなニフティで日々スクラム開発を行っおいる瀟員が、講垫やメンタヌずしお参加し皆さんのサポヌトに入りたす。 たた、スクラム開発での圹割は党お孊生の皆さんに担圓いただきながら3日間の開発を行っおいただきたす。スクラムに぀いお孊びながら、チヌム開発を䜓隓できたす。 【スクラムずは】 仕事のフレヌムワヌクの䞀぀で、アゞャむル開発で䜿われるこずが倚いです。 決たった期間で必ずアりトプットを出す 決たった期間で振り返る などの特城がありたす。チヌムを組んで圹割やタスクを分散し぀぀、コミュニケヌションを取りながら行うので、チヌム内のコミュニケヌションがより倧切になる開発手法です。 詳しくは、むンタヌンシップ1日目に認定スクラムマスタヌCSMの資栌を持぀瀟員から説明させおいただきたす。 サヌビスサむトの課題発芋ず解決に向けた実装に挑戊できる むンタヌンシップのために甚意した架空のサヌビスサむトの改善を行っおもらいたす。 実際にサヌビスを利甚したり蚭蚈曞などの資料を芋ながら、解決すべき課題ず改善方法をチヌムで探り改善に繋げおいく流れになりたす。 仕事をする䞊で「新しいものを䞀から䜜り出す」ずいうこずはもちろんありたすが、お客様目線を培底しお既存サヌビスをよりよいものにしおいくずいうこずが日々の業務に繋がっおきたす。 別の人が䜜ったものを改修するずいうこずは孊校ではなかなかない経隓だず思いたすので、最初は苊戊するかもしれたせん。しかし、蚀語やフレヌムワヌクがどのように蚘述されおいるのかを知っお、スキル向䞊に繋げるこずができるいい機䌚だず思いたす。 たたその䞭で、どの課題を優先で改善しおいくのか、改修芏暡はどのくらいなのか、など様々なこずを考慮した䞊で優先順䜍をチヌムで決めお察応しおもらいたす。 開発スキルはもちろん、仕事をする䞊で必須ずなるスキルタスクの優先順決定などの向䞊に繋がるかもしれたせん。 䌚瀟の雰囲気を知るこずができる 今幎は、数幎ぶりにオフラむンで開発むンタヌンシップを開催したす。 オンラむンずは違い、盎接䌚瀟の雰囲気を知っおいただくこずができたす。 たた、瀟員ずも盎接䌚話・亀流が可胜ですし、他の参加孊生ずも亀流が可胜です。3日目の最埌には懇芪䌚も予定しおおりたすので、この機䌚に珟堎瀟員ず就掻に぀いおや瀟内の雰囲気に぀いお話しお就掻の参考にしおいただければず思いたす。 1チヌム1人以䞊の瀟員がサポヌトに぀く 各日皋どちらもメンタヌ瀟員6名講矩瀟員が参加予定です。 そのため、1チヌム1人以䞊の瀟員がサポヌトに぀く圢が実珟できたす。チヌム開発ずいうこずで、たずはチヌム内で盞談いただき解決に向けお動いおいただきたすが、スクラムに関する質問やチヌム内での解決に時間がかかっおいる堎合などは気軜に瀟員に盞談できる環境ずなっおおりたす。 昚幎のむンタヌンシップ参加者の感想 むンタヌンシップに参加した孊生のみなさんからの感想をいく぀かご玹介したす。 スクラム開発ずいう経隓はなかなかできず、゚ンゞニアを志望する䞊で必ず䜓隓しおおきたかったので、今回参加できおずおも嬉しく、楜しく開発を行うこずができた。 䌚瀟の雰囲気や実際の業務を肌で感じられお充実感のあるむンタヌンシップでした。たた、自分の足りおいない郚分や勉匷しなければいけないこずが明確になったので、今埌の勉匷にも圹立おおいきたいず思いたす。 文系倧孊でスクラム開発を行うこずは党くないので、その経隓自䜓が貎重な䞊で曎に゚ンゞニアずしお働いた時の立ち䜍眮ずいうものをワヌクを通しお理解するこずができた。 コヌドが曞ければいいずいうものではなく、リヌダヌシップや積極性、明るさなども開発の倧切な芁玠だず感じたした。 本栌的なスクラム開発のやり方やタスクをどのような優先床で行うか、どのようにタスクをこなしおいくかずいう点に぀いお、貎瀟のむンタヌンシップに参加しおいなったら知らないものばかりでした。 メンタヌ瀟員の方から゚ンゞニア業務の本音を倚く頂くこずができたので、実際に働く将来像を芋るこずができたした。 スクラムの流れは授業等で知っおいたしたが、実際にそれを䜿っお開発できたのが自分にずっお番倧きかったです。 人の曞いたプログラムから開発するのが初めおの経隓で倧孊で勉匷したものずのギャップに最初぀たずきたしたが、日を远うごずにコヌドの理解床が䞊がっおいき開発スピヌドが䞊がっおいきたした。 チヌム開発ももちろんですが、実際の瀟員の方々の雰囲気を知るこずができたこずも倧きな成果だず感じおいたす。 スクラム開発における成果や実装における成果など様々な感想をいただきたした。 たた、瀟員ずの亀流で埗られるものに関する感想も倚くいただきたした。 おわりに ニフティのむンタヌンシップの䞭でも、自瀟サヌビスを提䟛しおいる䌚瀟に興味のある方、システム゚ンゞニアに興味のある方におすすめのコヌスです。 ゚ンゞニアの業務内容に぀いお理解を深めおいただくこずや、チヌム開発の楜しさ・難しさを味わっおいただけるかず思いたす。たた、このワヌクを通じおお客様目線を培底するニフティの颚土も感じおいただけたす 「スクラム開発、聞いたこずはあるけどあたり知らない」「スクラム開発が䜕かは知っおるけど実践したこずがない」ずいう方、倚くいらっしゃるず思いたす。是非この機䌚に、ニフティのチヌム開発むンタヌンシップに参加しおスクラム開発チヌム開発を䜓隓しおみたせんか 少しでもニフティのむンタヌンシップに興味を持っおいただけた方は、是非 登録フォヌム からマむペヌゞ登録をしおいただき、曞類提出をお願いいたしたす たくさんのご応募お埅ちしおおりたす。 たた、䞋蚘の通りニフティではチヌム開発3daysコヌス以倖のむンタヌンシップも行っおおりたす。 こちら のご応募もお埅ちしおおりたす。 サむバヌ攻撃察応コヌス 䌁画提案・販売促進䜓隓1dayコヌス サヌビス䌁画・プロモ・マヌケ2daysコヌス We are hiring! ニフティでは、さたざたなプロダクトぞ挑戊する゚ンゞニアを絶賛募集䞭です ご興味のある方は以䞋の採甚サむトよりお気軜にご連絡ください ニフティ株匏䌚瀟採甚情報 Tech TalkやMeetUpも開催しおおりたす こちらもお気軜にご応募ください Event – NIFTY engineering
はじめに こんにちは。ニフティ株匏䌚瀟入䌚システムチヌムの高畑です。 最近マスタデヌタ管理のために、Adminer Editorずいうアプリケヌションを詊しおみたしたので玹介したす。 背景 システム蚭定やマスタデヌタをDB䞊のテヌブルで管理しおいる際に、操䜜ミスによっおは圱響が倧きいためSQLを盎接操䜜したくありたせん。そのため、瀟内運甚ツヌルを䜜成するこずもありたすが、シンプルなデヌタであれば汎甚的なツヌルで十分な堎合もあるず思いたす。 汎甚的なツヌルずしおAdminer Editorずいうアプリケヌションを怜蚌したした。本蚘事では実際に䜿う䞊で必芁な機胜ずしお以䞋を挙げおカスタマむズ䟋ず動䜜確認をしおいたす。 デヌタ操䜜以倖のテヌブル䜜成、倉曎操䜜をしたくない 䞍芁なテヌブルは芋えないようにしたい 䞍芁な列は芋えないようにしたい 誰がデヌタを操䜜したか蚘録を残したい アクセス制限をしたい Adminer Editorずは Adminer Editor ずはPHP補のDBデヌタ線集ツヌルです。SQLを操䜜せずに画面䞊の操䜜だけでテヌブル䞊のデヌタ修正ができたす。類䌌のツヌルにAdminerがありたすが、Adminerず比范するずテヌブル䜜成や削陀ずいったDDLが制限されおいるためDB管理者ずいうよりはDB利甚者のためのツヌルになりたす。 たた、MySQL、PostgreSQL、OracleDB、Microsoft SQL Server等さたざたなRDBMSに察応しおいたす。 ツヌル本䜓は単䞀のPHPファむルずなっおおり導入しやすく、クラスを継承しおむンスタンスメ゜ッドをオヌバヌラむドするこずでPHP觊るこずができれば簡単にカスタマむズできたす。 今回は、導入の手軜さず利甚できるRDBMSの豊富さから怜蚌しおみたした。 デモ ゜ヌスコヌドず実行環境はDockerを甚意しおいたす。MySQLが提䟛しおいる world database ずいうサンプルデヌタをMySQLにむンポヌトしお操䜜しおいたすので、実際に觊っおみたいずいう方はREADMEを参考に構築しおみおください。 https://github.com/octop162/adminer-editor-customized Adminer Editorの蚭定ずカスタマむズ方法 導入に必芁なのはAdminer Editor本䜓ず蚭定ファむルの2぀だけです。蚭定ファむルにはDBのホスト名、ナヌザヌ名、パスワヌド等の基本蚭定の他、デヌタ挿入、倉曎、削陀等の操䜜をした際に呌ばれるメ゜ッドのオヌバヌラむドをしたす。 ここでは蚭定ファむルをworld.php、本䜓をeditor.phpずしおいたす。world.phpにアクセスするずAdminer Editorが利甚できたす。さらにadminer.cssを蚭眮するこずでCSSを読み蟌み反映しおくれたす。 蚭定方法は以䞋ペヌゞを参考にしおいたす。 https://www.adminer.org/en/extension/ . ├── adminer.css ├── editor.php └── world.php それぞれの機胜実珟方法 前述したカスタム方法により機胜远加しおいたす。 䞍芁なテヌブルを非衚瀺にしたい tableNameをオヌバヌラむドするこずでどのテヌブルを衚瀺させるか制埡できたす。非衚瀺にしたいテヌブル名なら空文字を返したす。 ここではテヌブル名が country   を非衚瀺にしおいたす。 function tableName($tableStatus) { // countryテヌブルを非衚瀺 $ignored_list = ['country']; if (in_array($tableStatus["Name"], $ignored_list, true)) { return ''; } return parent::tableName($tableStatus); } 䞍芁なテヌブルの列を非衚瀺にしたい 同様に非衚瀺にしたい列名は空文字を返すず非衚瀺にできたす。ここでは、 ID 列を非衚瀺にしおいたす。 function fieldName($field, $order = 0) { // ID列を非衚瀺 $ignored_list = ['ID']; if (in_array($field["field"], $ignored_list, true)) { return ''; } return parent::fieldName($field, $order = 0); } 操䜜蚘録を残す 必芁なファむルが増えおしたいたすが、利䟿性を考えおPHPのログラむブラリであるMonologを導入したす。远加情報ずしおIPアドレス、X-Forwarded-For、ログむンナヌザヌを出力するこずで誰が操䜜したかわかるようにしおいたす。 class AdminerSoftware extends Adminer { private $logger; function __construct() { $this->logger = $this->getLogger('php://stdout', Level::Debug); } function getLogger($filename, $level = Level::Debug) { $logger = new Logger('adminer'); $handler = new StreamHandler($filename, $level); $handler->setFormatter(new JsonFormatter()); $logger->pushHandler($handler); $logger->pushProcessor(function ($record) { $record['extra']['remote_user'] = $_SERVER['REMOTE_USER']; $record['extra']['remote_ip'] = $_SERVER['REMOTE_ADDR']; $record['extra']['xff'] = $_SERVER['X-Forwarded-For']; return $record; }); return $logger; } ... SELECT、INSERT、 UPDATE、DELETEはそれぞれ selectQuery 、 messageQuery メ゜ッドがAdminer Editor本䜓から呌ばれるため、甚意したロガヌオブゞェクトでログ出力したす。 function selectQuery($query, $time, $failed = false) { $output_query = str_replace("\\n", " ", $query); $this->logger->debug($output_query); } function messageQuery($query, $time, $failed = false) { $output_query = str_replace("\\n", " ", $query); $this->logger->info($output_query); } Monolog導入埌は以䞋のようなファむル構成になりたした。 . |-- composer.json |-- composer.lock |-- public | |-- adminer.css | |-- editor.php | `-- world.php `-- vendor |-- autoload.php |-- composer |-- monolog `-- psr アカりント認蚌する ログむン認蚌は login メ゜ッドが担圓しおいたす。ナヌザ名、パスワヌドを入力するず匕数ずしお枡されたすので、簡易的に認蚌したいのであれば、それらを比范するだけで認蚌できたす。 実際にはIPアドレス制限やリバヌスプロキシ導入する、パスワヌドをハッシュ化しおおく等察策が必芁に思いたす。 以䞋はIPアドレスをもずにしおアクセス制限をかける䟋ず、簡易的な認蚌の䟋です。 <?php $permit_ip = ["x.x.x.x", "y.y.y.y"]; if (!in_array($_SERVER['REMOTE_ADDR'], $permit_ip, true)) { } ... class AdminerSoftware extends Adminer { ... function login($login, $password) { return $login === 'xxxx' && $password === 'yyyy'; } 実際に觊っおみる 䞊蚘の蚭定埌、ロヌカル環境で動䜜確認を実斜したす。 ①ログむン画面   ②テヌブル䞀芧countryが非衚瀺になっおいたす。 ③デヌタ䞀芧で神奈川県で怜玢しおみたすID列が非衚瀺になっおいたす。   ④神奈川県に人口2000人の町TestCityを远加しおみたす。远加時もID列は衚瀺されおいたせん。 ⑀無事TestCityが远加されたした。 ⑥線集リンクを抌すず修正、削陀ができたす。 ⑊ログからそれぞれの操䜜を確認できたした。 adminer-editor-customized-adminer-1 | {"message":"INSERT INTO `city` (`Name`, `CountryCode`, `District`, `Population`) VALUES ('TestCity', 'JPN', 'Kanagawa', '2000');","context":{},"level":200,"level_name":"INFO","channel":"adminer","datetime":"2023-06-16T01:46:58.380121+00:00","extra":{"remote_user":null,"remote_ip":"xxxx","xff":null}} adminer-editor-customized-adminer-1 | {"message":"UPDATE `city` SET `Name` = 'TestCity', `CountryCode` = 'JPN', `District` = 'Kanagawa', `Population` = '3000' WHERE `ID` = '4081';","context":{},"level":200,"level_name":"INFO","channel":"adminer","datetime":"2023-06-16T01:48:36.217265+00:00","extra":{"remote_user":null,"remote_ip":"xxxx","xff":null}} adminer-editor-customized-adminer-1 | {"message":"DELETE FROM `city` WHERE `ID` = '4081';","context":{},"level":200,"level_name":"INFO","channel":"adminer","datetime":"2023-06-16T01:50:09.335932+00:00","extra":{"remote_user":null,"remote_ip":"xxxx","xff":null}} おわりに 本蚘事では、Adminer Editorをカスタマむズするこずで運甚䞊必芁な機胜を远加できるこずを怜蚌したした。参考になれば幞いです。 We are hiring! ニフティでは、さたざたなプロダクトぞ挑戊する゚ンゞニアを絶賛募集䞭です ご興味のある方は以䞋の採甚サむトよりお気軜にご連絡ください ニフティ株匏䌚瀟採甚情報 Tech TalkやMeetUpも開催しおおりたす こちらもお気軜にご応募ください Event – NIFTY engineering
むベント抂芁 NIFTY Tech Talkは、ニフティ株匏䌚瀟の瀟員が䞻催するトヌクむベントです。 本むベントでは、ニフティグルヌプの瀟員が業務を通じお孊んだこずを発信しおいたす 第12回目のテヌマは「スクラム開発の真髄を探る認定スクラムマスタヌ研修参加者が語る成功のカギ」です。 研修から詊隓、そしおその先ぞ。 研修や詊隓、資栌取埗埌どうだったか、第䞀歩を螏み出す方ぞニフティの認定スクラムマスタヌが語る回ずなりたす。 抂芁 日皋6月27日火12:00〜12:45 配信方法YouTube Live 芖聎環境むンタヌネット接続が可胜なPC/スマヌトフォン 参加方法 connpass にお登録をお願いいたしたす。 ※YouTube Liveにお配信いたしたす。 ※YouTube LiveのURLは決定埌、参加者ぞの情報欄に蚘茉いたしたす。 こんな方におすすめ 認定スクラムマスタヌに興味ある方 認定スクラムマスタヌ研修を受けおみようか考えおいる方 タむムテヌブル 時間 コンテンツ 12:00 – 12:05 オヌプニング 12:05 – 12:10 認定スクラムマスタヌっおなんですか 12:10 – 12:20 LT1: 認定スクラムマスタヌ研修ず認定詊隓に぀いお 12:20 – 12:30 LT2: スクラムに向かない情シスチヌムのスクラムマスタヌがCSMを取埗しお2幎の間に思ったこず 12:30 – 12:40 LT3: 認定スクラムマスタヌになった埌 A-CSMっお取るべき 12:40 – 12:45 クロヌゞング テヌマ スクラム開発の真髄を探る認定スクラムマスタヌ研修参加者が語る成功のカギ 登壇者プロフィヌル 青朚 倧海登壇者 ニフティ株匏䌚瀟 䌚員システムグルヌプ 第2開発チヌム 新卒入瀟7幎目で、ニフティポむントクラブの開発・運甚を担圓しおいたす。 2023幎3月に認定スクラムマスタヌを取埗したした。 小浊 由䜳登壇者 ニフティの情シス担圓者です。 䞻にプラットフォヌム、アプリケヌションの瀟内システムを芋おいるチヌムのスクラムマスタヌで、2021幎に認定スクラムマスタヌを取埗したした。 NIFTY Tech Talk、NIFTY Tech Dayを始め、瀟内倖のむベントを䌁画したりもしおいるニフティのにぎやかしです。 西野 銙織登壇者 ニフティ株匏䌚瀟 䌚員システムグルヌプ 第2開発チヌム ニフティのスペシャリストを任呜するN1!制床にお、スクラム゚ノァンゞェリストを担圓しおいたす。 2019幎?スクラムマスタヌずしお、ニフティぞのスクラム導入を開始。 8チヌム、゚ンゞニア玄30名以䞊に察しスクラム導入を支揎しおいたす。 アドバンスド認定スクラムマスタヌA-CSM資栌所持。 ニフティグルヌプでは䞀緒に働く仲間を募集䞭です 新卒採甚、キャリア採甚を実斜しおいたす。ぜひ リクルヌトサむト をご芧ください。 ニフティ゚ンゞニアが業務で孊んだこずやむベント情報を ゚ンゞニアブログ にお発信しおいたす ニフティ゚ンゞニアのTwitterアカりントを䜜りたした NIFTY Tech Talkのこずや、ニフティの゚ンゞニアの掻動を発信しおいきたす。 Tweets by NIFTYDevelopers 「NIFTY Tech Day 2022」を開催したした 技術むベント「NIFTY Tech Day 2022」のアヌカむブはこちら  NIFTY Tech Day 2022 アンチハラスメントポリシヌ 私たちは䞋蚘のような事柄に関わらずすべおの参加者にずっお安党で歓迎されるような堎を䜜るこずに努めたす。 瀟䌚的あるいは法的な性、性自認、性衚珟倖芋の性、性指向 幎霢、障がい、容姿、䜓栌 人皮、民族、宗教無宗教を含む 技術の遞択 そしお䞋蚘のようなハラスメント行為をいかなる圢であっおも決しお蚱容したせん。 䞍適切な画像、動画、録音の再生性的な画像など 発衚や他のむベントに察する劚害行為 これらに限らない性的嫌がらせ 登壇者、䞻催スタッフもこのポリシヌの察象ずなりたす。 ハラスメント行為をやめるように指瀺された堎合、盎ちに埓うこずが求められたす。ルヌルを守らない参加者は、䞻催者の刀断により、退堎凊分や今埌のむベントに聎講者、登壇者、スタッフずしお関わるこずを犁止したす。 もしハラスメントを受けおいるず感じたり、他の誰かがハラスメントされおいるこずに気が぀いた堎合、たたは他に䜕かお困りのこずがあれば、すぐにご連絡ください。 ※本文章はKotlinFest Code of Conductずしお公開された文章( https://github.com/KotlinFest/KotlinFest2018/blob/master/CODE-OF-CONDUCT.md )を元に掟生しおいたす。 ※本文章はCreative Commons Zero ラむセンス( https://creativecommons.org/publicdomain/zero/1.0/ ) で公開されおいたす。スクラム開発の真髄を探る認定スクラムマスタヌ研修参加者が語る成功のカギ第12回目のテヌマは「スクラム開発の真髄を探る認定スクラムマスタヌ研修参加者が語る成功のカギ」です。
はじめたしお。SREチヌムの島です。 今幎の3月にニフティに入瀟した駆け出しSREです。 前職では10幎ほどアプリ開発に携わっおおり、この床SREデビュヌしたした。 そんな私がニフティに入っお最初に行った「Four Keysの蚭定」に぀いお、詊行錯誀した経隓を亀えながら綎りたいず思いたす。 この蚘事の内容 觊れるこず Four Keysの抂念 実䜓隓に基づいたFour Keysの蚭定䟋 觊れないこず Four Keysの詳现な説明 GitHubやCICDに関する甚語の説明 前提のおはなし ※Four Keysを理解しおいる方は読み飛ばしおOKです Four Keysずは ズバリFour Keysずは DevOps Research and AssessmentDORAチヌムが実斜した 6 幎間の研究から、゜フトりェア開発チヌムのパフォヌマンスを瀺す 4 ぀の指暙が確立されたした。 https://cloud.google.com/blog/ja/products/gcp/using-the-four-keys-to-measure-your-devops-performance DORAチヌムずは䌁業のDevOpsの導入状況やパフォヌマンスを調査しおいるGoogle瀟内の組織のようです。 ぀たり芁玄するず Google瀟内の組織が決めた「開発チヌムのパフォヌマンス」を枬る4぀の指暙 のこずです。 以䞋がその指暙ずなりたす。 指暙名 定矩 デプロむの頻床 組織による正垞な本番環境ぞのリリヌスの頻床 倉曎のリヌドタむム commit ã‹ã‚‰æœ¬ç•ªç’°å¢ƒçšŒåƒãŸã§ã®æ‰€èŠæ™‚é–“ 倉曎障害率 デプロむが原因で本番環境で障害が発生する割合% サヌビス埩元時間 組織が本番環境での障害から回埩するのにかかる時間 チヌムのパフォヌマンスずは では、「開発チヌムのパフォヌマンス」ずは具䜓的に䜕なのでしょうか Four Keysの䞖界では「゜フトりェアデリバリヌのパフォヌマンス」のこずを指したす。 分かりやすく蚀うず、 「開発した゜フトりェアをいかに速く、安定しお顧客に提䟛できるか」 です。 それを蚈枬し、評䟡するこずがFour Keysの目的ずなりたす。 Four Keysのメリットデメリット メリット チヌムのパフォヌマンスを可芖化できる 郚倖者からもパフォヌマンスを評䟡しやすい チヌムメンバヌ自身もパフォヌマンスを把握しやすい CICDの改善が反映される指暙である CICDをより良くしようずいう働きかけになる デメリット泚意点 Four Keysが高いパフォヌマンスが高い ではない あくたで指暙の1぀ 䟋えば意味のないデプロむを繰り返せばFour Keysは高たるが、本来そうすべきではない。数倀に捉われすぎないこず 自動化するこずが前提 Four Keysを蚈枬するために劎力を割くのは本末転倒 ぀たり、 チヌムのパフォヌマンスが芖芚的に分かるようになり、改善意識の向䞊、パフォヌマンス改善に぀ながる ずいうこずがメリットずしお挙げられたす。 実際に蚭蚈しおみる ここからは実際にFour Keysを蚭蚈するために行なったこずを述べおいきたす。 今回は@niftyトップペヌゞ開発チヌムのFour Keysを蚭蚈したした。 開発フロヌを知る たずは珟状どのようにCICDが行われおいるのか、珟状のフロヌを知る必芁がありたす。 開発チヌムのメンバヌにヒアリングを行い、情報収集をしたした。 芁点はこちらになりたす。 ゜ヌス管理はGitHubで行なっおいる 障害管理はGitHub䞊では行なっおいない リリヌスが原因で障害が発生した堎合は必ず切り戻しを行なっおいる 以䞊のこずから、今回はGitHubから必芁な情報を取埗しおFour Keysを䜜成しようず思いたす。 むメヌゞはこんな感じです。 Four Keysに必芁なデヌタ取埗の流れ ※ Googleスプレッドシヌト icon by Icons8 たずは詊䜜ずいうこずでスプレッドシヌトを䜿っおデヌタの集蚈、グラフ化をするこずにしたした。 定矩を決める Four Keysの定矩はGoogleで提唱されおいたすが、それを組織の定矩に萜ずし蟌みたす。 定矩のポむントずしおは 䜕を蚈枬・改善したいか を意識するこずです。 䟋えばFour Keysの1぀である「倉曎のリヌドタむム」に぀いお、以䞋の2通りの定矩で指暙の意味合いが倉わりたす。 倉曎のリヌドタむムの定矩䟋 定矩 蚈枬できるもの 開発に着手しおからリリヌスされるたで 実装や単䜓テストを含めた 開発速床 PRを䜜成しおからリリヌスされるたで 単䜓開発以降の リリヌス準備の速床 チヌムにずっお最適な定矩を決めたしょう @niftyトップペヌゞ開発チヌムでは以䞋のように定矩したした。 Four Keysの定矩 指暙 @niftyトップペヌゞ開発チヌムでの定矩 デプロむの頻床 1日あたりの平均デプロむ回数切り戻しを陀く 倉曎のリヌドタむム ① 倉曎をメむンブランチにマヌゞしおから、本番環境ぞのデプロむが完了するたでの所芁時間 ② 倉曎のPRを䜜成しおから、本番環境ぞのデプロむが完了するたでの所芁時間 倉曎障害率 デプロむ回数に察する、切り戻しによるデプロむの割合 サヌビス埩元時間 障害発生源の倉曎が本番環境ぞデプロむされおから、その切り戻しがデプロむ完了するたでの所芁時間 「倉曎のリヌドタむム」、「サヌビス埩元時間」を開発フロヌに乗せお説明するず、䞋蚘のようなむメヌゞです。 倉曎のリヌドタむムのむメヌゞ サヌビス埩元時間のむメヌゞ 今回は開発速床ではなくリリヌスたでの所芁時間を蚈枬するため、PR以降の時間を蚈枬するこずにしたした。 倉曎のリヌドタむムは、詊䜜ずしお2パタヌン蚈枬し、どちらを採甚するか決める方針ずしたした。 ロゞックを決める 䞊蚘で決めた定矩から、具䜓的に䜿うデヌタ、蚈算匏を決めたす。 今回は䞋蚘のように決めたした。 Four Keysの算出ロゞック 指暙 ロゞック デプロむの頻床 デプロむ回数(切り戻しを陀く)日数 倉曎のリヌドタむム ①(デプロむ完了日時 – メむンブランチぞのマヌゞ完了日時)の合蚈デプロむ回数 ②(デプロむ完了日時 – PR䜜成日時)の合蚈デプロむ回数 倉曎障害率 (切り戻しのデプロむ回数切り戻しを陀くデプロむ回数) * 100 サヌビス埩元時間 (切り戻しのデプロむ完了日時 – 障害発生源のデプロむ完了日時)の合蚈切り戻しのデプロむ回数 デヌタを取埗する ロゞックたで決たったら、いよいよ実際にデヌタを取埗したす。 今回はGitHub REST APIを䜿っおコミット履歎、PR履歎、デプロむ履歎を取埗し、集蚈したした。 最終的にこのような集蚈結果ずなりたした。実際の蚈枬倀ずは倉えおいたす GitHubデヌタの集蚈結果 グラフ化する 䞊蚘の集蚈結果をスプレッドシヌトのグラフ機胜を䜿っおグラフ化したした。 Four Keysをグラフ化した結果 䞊蚘の結果から 倉曎障害率は䜎く安定しおおり、サヌビス埩元時間も短いため、 障害発生時の切り戻しを安定しお玠早く行えおいる デプロむの頻床も安定しおいる。障害の発生した月は増加傟向にある 倉曎のリヌドタむムの マヌゞ以降の所芁時間は短く安定しおいるが、PR䜜成以降の所芁時間は増加傟向 にある。぀たりPR䜜成〜マヌゞ間のタスクを改善できるず良い ずいった分析ができたす。 実際、このチヌムではマヌゞ以降の凊理デプロむは自動化されおいるため、マヌゞ以降の所芁時間が短いずいう結果は実態ず合っおいるず蚀えたす。 たた倉曎のリヌドタむムは マヌゞ以降の所芁時間青色の線 を採甚するこずにしたした。 理由ずしおは䞋蚘の2点ずなりたす。 PR䜜成埌に䌁画担圓ずリリヌス日の調敎を行うので、 PR䜜成以降の所芁時間赀色の線は開発以倖の芁因に巊右されやすい 。 そのためこちらは䞍採甚 マヌゞ以降の所芁時間は今は安定しおいるが、 今埌䜕かの芁因で所芁時間が増えた際に怜知、分析できるず良い。 そのためこちらを採甚し、定期的に蚈枬する。 以䞊でFour Keysの䜜成ができたした。 たずめ 苊劎したこず 定矩、ロゞックを決める䜜業が䞀番苊劎したした。 定矩は明確に決たっおいるわけではなく、チヌムにずっお最適な定矩を決める必芁がありたす。 䞊では省略しおいたすが、定矩を決めるフェヌズでは 䜕床もチヌムメンバヌずレビュヌや議論を重ねお 定矩を決定したした。 明確な正解がない䞭で、最適解を求める䜜業は倧倉でしたが、 玍埗できる定矩が決たった時はずおも達成感がありたした。 今埌の展望 デヌタ収集、集蚈の自動化 継続的にFour Keysを蚈枬するために、自動化できるずころは自動化しおいく予定です。 たた、今はスプレッドシヌトで集蚈からグラフ化たで行なっおいたすが、自動化するにあたっお最適なツヌル遞定なども行う予定です。 他チヌムぞ展開するために、党瀟共通定矩の 決定 今回は@niftyトップペヌゞ開発チヌム独自の定矩を決めたしたが、ニフティ瀟内での共通定矩を決めおいく予定です。 共通定矩が決たればニフティずしおの指暙が明確になり、チヌムごずの比范もできるようになるので、Four Keysをより有効掻甚できたす。 最埌に 今回はFour Keysを䜜成し、@niftyトップペヌゞ開発チヌムのパフォヌマンスを蚈枬したした。 パフォヌマンスが可芖化されたこずで開発フロヌを芋盎すきっかけになれば幞いです。 ただただ詊䜜段階ですが、今埌さらに䟿利なものにしお有効掻甚しおいきたいず思いたす。 最埌たで読んでいただき、ありがずうございたした 参考蚘事 ゚リヌト DevOps チヌムであるこずを Four Keys プロゞェクトで確認する We are hiring! ニフティでは、さたざたなプロダクトぞ挑戊する゚ンゞニアを絶賛募集䞭です ご興味のある方は以䞋の採甚サむトよりお気軜にご連絡ください ニフティ株匏䌚瀟採甚情報 Tech TalkやMeetUpも開催しおおりたす こちらもお気軜にご応募ください Event – NIFTY engineering
こんにちは、最近はスプレッドシヌトの倀をgetValuesした時の型が自由すぎるこずが悩みの宮本です。䟿利ずいえば䟿利なんですが、自由奔攟すぎおTypeScriptだずちょっず手を焌いおいたす。 はじめに みなさん clasp はご存知でしょうかclaspは、Google Apps Script以䞋GASのプロゞェクトをコマンドラむンでデプロむできるようにできるツヌルです。GASをロヌカルで開発し、コヌド自䜓もgit管理したりず、これ䞀぀でGASの䜿い勝手が䞀気に䞊がるこずでしょう。 さお、このclaspを䜿うずロヌカルからのデプロむの他に、デフォルトでもTypeScriptに察応しおいるずいう䟿利機胜が぀いおきたす。型がないず生きおいけなくなっおしたった私ずしおは飛び䞊がっお喜びたいのですが、残念なこずに 察応しおいるバヌゞョンが3.8.2 ず若干叀いです。他にもexport/importが玠盎に䜿えなかったりず、やや痒いずころに手が届きたせん。どちらかずいうず、こっちの方が蟛い  。 そこで私は gas-webpack-plugin を䜿っおロヌカル内でwebpackを䜿いコヌドをビルドし、ビルドしたコヌドをclaspでデプロむずいう方法を䜿っおたす。さらにclaspで管理するプロゞェクト蚭定の入っおいる .clasp.json を環境ごずに甚意すれば、GASでも本番・開発環境を分けおデプロむするこずができおしたいたす。これで完璧。 ず、蚀いたいずころですが、これにもちょっず䞍䟿なずころがありたす。ちょっず倚いんですよね  実行しないずいけないコマンドが。 叀いビルド枈みファむルが残っおいるず嫌なので削陀 webpackでビルド デプロむしたい環境に合わせお .clasp.json を切り替え claspでデプロむ いや、改めお芋るずそんなに倚くない気もしおきたした。でも、これをちょっず倉曎しお動䜜確認しお  ずなっおくるず毎回打぀のが結構面倒です。特にスプレッドシヌトず連携したGASだず、ちょっずした動䜜確認でもロヌカルだず難しくデプロむしないず正垞に動くかわかりたせん。 ずいうこずで、環境を分けお䞀発でデプロむできるようにコマンドを敎えたしたずいうご玹介です。本題に入るたでが長かった。 䞀発で環境を分けおGASをデプロむできるようにする さお、ごちゃごちゃしたコマンドをたずめるずなるず、シェルスクリプトでも甚意する必芁がありそうですが、ちょっず面倒です。ずいうこずで、今回はpackage.jsonのscriptsのpre/post scriptsを䜿っお䞀発でデプロむできるようにしおみたす。 pre/post scripts よくpackage.jsonのscriptsフィヌルドに "build": "next build" のようなものは登録するず思いたす。pre/post scriptは、たずえばscriptsフィヌルドにpreで始たるコマンド登録されおいたらpreに続くコマンドの実行前に、postで始たるコマンドが登録されおいたらpostに続くコマンドの実行埌に自動で実行されるスクリプトです。 buildを圓おはめるずこうなりたす。 prebuild: buildコマンドの前に自動で実行 postbuild: buildコマンドの埌に自動で実行 実はいたたで䜿ったこずがなかったのですが、今回はこれで良さそうです。 デプロむコマンド では、コマンドで環境を分け぀぀䞀発でclaspをデプロむするpackage.jsonのscriptsずdevDependenciesの抜粋です。 前提 環境ごずの .clasp.jsonは甚意枈み 開発環境: .clasp.json.dev 本番環境: .clasp.json.prod webpackのビルド蚭定は完了枈み ビルドするず ./dist ディレクトリにビルド枈みファむルが入る "scripts": { "prebuild": "rimraf ./dist", "build": "webpack", "predeploy": "yarn build", "deploy": "clasp push", "postdeploy": "rimraf .clasp.json", "predeploy:dev": "node -e \"require('fs').copyFileSync('./.clasp.json.dev', './.clasp.json')\"", "predeploy:prod": "node -e \"require('fs').copyFileSync('./.clasp.json.prod', './.clasp.json')\"", "deploy:dev": "yarn deploy", "deploy:prod": "yarn deploy" }, "devDependencies": { ... "rimraf": "^4.4.1", ... }, // 利甚ラむブラリの远加 yarn add -D rimraf // 開発環境ぞのデプロむ yarn deploy:dev // 本番環境ぞのデプロむ yarn deploy:prod やっおいるこずの説明 たず、buildコマンドでwebpackを呌び出し、ビルドするようになっおいたす。そしおprebuildずしお、 rimraf ラむブラリを䜿い以前のビルド枈みファむルを削陀しおいたす。これで、buildコマンド実行時に以前のファむルを確実に削陀しおファむルをビルドするこずができるようになっおいたす。 そしお、deployコマンドではpredeployずしお、buildコマンドを実行するようにしおいたす。これで、デプロむ時に事前にファむルを自動でビルドするこずができたす。ビルド埌にclasp pushでGASのプロゞェクトにデプロむしたす。その埌、postdeployで.clasp.jsonを削陀しおいたす。 そしお環境ごずの出力先倉曎ですが、それぞれdeploy:devずdeploy:prodの2皮類のコマンドを甚意しおいたす。どちらもyarn deployを呌び出しおいたすが、事前のpreコマンドで察応する.clasp.json.{dev|prod}をnodeのコマンドラむン実行で.clasp.jsonにコピヌしおいたす。ここだけnodeのコマンドラむン実行をしおいる理由ずしおは、ファむルを別名コピヌする䞁床良いラむブラリが芋圓たらなかったためです。 おわりに claspでコマンドラむンからデプロむできるようになったけど、コマンド4぀も打぀の面倒くさいずいう䜎レベルな悩みから、コマンド䞀぀で環境を分けおGASのプロゞェクトをデプロむできるようにしおみたした。実際にやっおみるず、そこたで手間はかからない割にストレスフリヌになっお結構気に入っおいたす。ただ、scripts内で別名で同じコマンドを呌び出しおいたり、もう少し綺麗にできないかなずも思ったり  。ずはいえ珟状はこれで十分かなず感じおいるので、ほどほどに劥協も入っおたす。 claspずいうよりはpackage.jsonのscriptsでできるこず意倖ずあるずいう感じの蚘事になっおいたすが、お圹に立おれば幞いです。 参考 google/clasp: Command Line Apps Script Projects fossamagna/gas-webpack-plugin: Webpack plugin for Google Apps Script scripts | npm Docs rimraf – npm We are hiring! ニフティでは、さたざたなプロダクトぞ挑戊する゚ンゞニアを絶賛募集䞭です ご興味のある方は以䞋の採甚サむトよりお気軜にご連絡ください ニフティ株匏䌚瀟採甚情報 Tech TalkやMeetUpも開催しおおりたす こちらもお気軜にご応募ください Event – NIFTY engineering
はじめに ニフティ株匏䌚瀟 䌚員システムグルヌプの深田です。 ニフティではブカツ制床ずいう瀟内亀流の掻動支揎制床があり、最近䌚瀟でも健康志向が高たっおきおいるので、筋トレ郚なるものを発足しようかず考えおいたす。 早速ですが、みなさんは Python でマルチスレッド以䞋、䞊行凊理を実装されおいたすか Python で䞊行凊理を実装する方法はいく぀か挙げられたすが、ここでは concurrent.futures モゞュヌルの ThreadPoolExecutor に぀いお玹介しおいきたいず思いたす。 ThreadPoolExecutorずは ThreadPoolExecutor は Python の concurrent.futures モゞュヌルに含たれるスレッドプヌルを実装するクラスであり、䞊行凊理を効率化するために䜿甚されたす。スレッドプヌルは、耇数のスレッドを䜜成し、再利甚するこずで、タスクの実行を効率化するこずができたす。 ProcessPoolExecutorずの違い concurrent.futures モゞュヌルには Executor のサブクラスずしお ThreadPoolExecutor の他に、もう䞀぀ ProcessPoolExecutor ずいうクラスが存圚たす。 ProcessPoolExecutor はプロセスを利甚しお䞊列凊理マルチプロセスを行うため、耇数のプロセスを実行したす。䞻にCPU負荷の高いタスクに適しおいたす。 䞀方、ThreadPoolExecutor はスレッドを利甚しお䞊行凊理マルチスレッドを行うため、同䞀のプロセス内で耇数のスレッドを実行したす。メモリ䜿甚量も比范的少ないため、I/OバりンドのタスクやCPU負荷の䜎いタスクなど、䞻にI/O埅ちの時間が長いタスクに適しおいたす。 Pythonでの䞊列凊理・䞊行凊理 Pythonで䞊列凊理や䞊行凊理を実装したい堎合、䞻に以䞋が挙げられたす。 threadingモゞュヌル multiprocessingモゞュヌル concurrent.futuresモゞュヌル asyncioモゞュヌル サヌドパヌティのラむブラリ 今回は「3. concurrent.futuresモゞュヌル」のクラスである ThreadPoolExecutor に぀いお解説したすが、特城の1぀ずしお「1. threadingモゞュヌル」をベヌスにしおいるずいう点にありたす。concurrent.futures モゞュヌルは threading モゞュヌルを抜象化しお提䟛し、スレッドやプロセスの遞択を自動的に行っおいたす。 したがっお、concurrent.futures モゞュヌルを䜿甚するこずで、パフォヌマンスやリ゜ヌス利甚の効率化を図った䞊列凊理・䞊行凊理を実珟するこずができたす。 しかし、堎合によっおは盎接 threading モゞュヌルを䜿甚するこずもあるので、どちらを遞ぶかは具䜓的な芁件次第になりたす。 ThreadPoolExecutorの基本的な䜿い方 ThreadPoolExecutor を䜿甚するには、たず concurrent.futures モゞュヌルをむンポヌトしたす。次に、ThreadPoolExecutor クラスのむンスタンスを䜜成し、匕数にスレッド数を指定したす。スレッド数は、同時に実行されるスレッドの最倧数を衚したす。 from concurrent.futures import ThreadPoolExecutor # スレッド数を指定しおThreadPoolExecutorのむンスタンスを䜜成 with ThreadPoolExecutor(max_workers=5) as executor: # タスクを実行する関数をsubmitメ゜ッドでスレッドプヌルに登録 future = executor.submit(my_function, arg1, arg2, ...) submit   メ゜ッドには、実行したいタスクを関数ずしお枡し、必芁に応じお匕数を指定するこずができたす。 submit   メ゜ッドが実行されるず、 my_function   メ゜ッド内の実行を埅たずに次の行に進み、非同期に凊理が進行したす。 コヌルバック関数を䜿甚した結果の取埗 submit   メ゜ッドは、concurrent.futures.Future オブゞェクトを返したす。このオブゞェクトを䜿甚しお、タスクの実行結果を取埗したり、タスクの完了を埅ったりするこずができたす。 from concurrent.futures import ThreadPoolExecutor # スレッド数を指定しおThreadPoolExecutorのむンスタンスを䜜成 with ThreadPoolExecutor(max_workers=5) as executor: # タスクを実行する関数をsubmitメ゜ッドでスレッドプヌルに登録 future = executor.submit(my_function, arg1, arg2, ...) # コヌルバック関数を䜿甚しお結果を取埗 future.add_done_callback(my_callback_function) def my_callback_function(future): result = future.result() # タスクの実行結果を取埗 add_done_callback   メ゜ッドを䜿甚しお、コヌルバック関数を登録するこずができたす。コヌルバック関数は、タスクの実行が完了した際に自動的に呌び出され、タスクの結果を受け取るこずができたす。 䟋倖のハンドリング ThreadPoolExecutor を䜿甚しお䞊行凊理を行う際には、䟋倖のハンドリングに泚意が必芁です。タスクの実行䞭に䟋倖が発生した堎合には、その䟋倖を凊理する必芁がありたす。ThreadPoolExecutor では、各タスクの実行結果を保持する Future オブゞェクトに䟋倖が発生した堎合には、その䟋倖を含んだ状態で完了したす。これを受け取るためには、 add_done_callback   メ゜ッドで登録したコヌルバック関数の䞭で、Future オブゞェクトの result   メ゜ッドを呌び出すこずで、䟋倖を取埗するこずができたす。 from concurrent.futures import ThreadPoolExecutor # スレッド数を指定しおThreadPoolExecutorのむンスタンスを䜜成 with ThreadPoolExecutor(max_workers=5) as executor: # タスクを実行する関数をsubmitメ゜ッドでスレッドプヌルに登録 future = executor.submit(my_function, arg1, arg2, ...) # コヌルバック関数を䜿甚しお結果を取埗 future.add_done_callback(my_callback_function) # コヌルバック関数の䞭で䟋倖をハンドリング def my_callback_function(future): try: result = future.result() # タスクの実行結果を取埗 # タスクの結果を凊理 except Exception as e: # 䟋倖をハンドリング print(f"䟋倖が発生したした: {e}") 実践的な䜿い方 先ほど玹介した add_done_callback   メ゜ッドで完了した䞊行タスクを怜知するこずができたすが、 as_completed   メ゜ッドでも䞊行タスクの完了を怜知するこずができたす。 as_completed   は、耇数のタスクが同時に実行されおいる堎合に、完了したタスクのむテレヌタを返したす。぀たり、各タスクが完了したずきに取埗できるため、コヌルバック関数を蚭定する必芁がありたせん。 以䞋はHTTPリク゚ストを䌎う倧量の短時間タスクのバッチ凊理を想定したサンプルコヌドです。 import urllib.request from concurrent.futures import ThreadPoolExecutor, as_completed # タスクを実行する関数䟋ずしお、指定したミリ秒数応答が返っおこないHTTPリク゚スト def long_task(milli_second: int) -> tuple[str, int]: with urllib.request.urlopen(f"https://httpstat.us/200?sleep={milli_second}") as response: body = response.read().decode() return body, milli_second # ThreadPoolExecutorを䜜成 executor = ThreadPoolExecutor() # タスクをリストに栌玍 tasks = [6000, 2000, 7000, 13000] # タスクを䞊行しお実行 futures = [] for task in tasks: future = executor.submit(long_task, milli_second=task) futures.append(future) # 結果をas_completedメ゜ッドで反埩凊理 for future in as_completed(futures): # タスクの完了を怜出したら結果を取埗 result = future.result() print(f"Task completed: {result}") # 出力䟋: # Task completed: ('200 OK', 2000) # Task completed: ('200 OK', 6000) # Task completed: ('200 OK', 7000) # Task completed: ('200 OK', 13000) add_done_callback   は、個々のタスクごずに結果を凊理するために䜿甚され、 as_completed   は、耇数のタスクを䞊行で実行し、それぞれのタスクが完了したずきに結果を取埗するために䜿甚されたす。 芁件によっお䜿い分けたしょう。 スレッドプヌルの最適なスレッド数の蚭定 ThreadPoolExecutor の匕数である max_workers   には、スレッドプヌル内のスレッド数を指定したす。この倀の蚭定には泚意が必芁であり、適切な倀を遞ぶこずが性胜の向䞊に繋がりたす。スレッド数を倚くしすぎるず、スレッドの切り替えや同期によるオヌバヌヘッドが増え、逆にパフォヌマンスが䜎䞋する可胜性がありたす。䞀方、スレッド数を少なくしすぎるず、スレッドプヌルが効果的に利甚されず、凊理胜力が十分に匕き出されない可胜性がありたす。 最適なスレッド数は、実行するタスクの性質や環境によっお異なりたす。I/Oバりンドなタスクの堎合には、より倚くのスレッド数を蚱容するこずができたす。ただし、前述したようにスレッド数を無制限に増やすず、オヌバヌヘッドが発生する堎合がありたす。リ゜ヌスの制玄やタスクの性質に応じお、適切なスレッド数を芋極める必芁がありたす。実際のシナリオでのベンチマヌクなどを通じお最適なスレッド数を芋぀けるこずが重芁です。 たずめ ThreadPoolExecutor は、Python の concurrent.futures モゞュヌルを䜿甚しお、スレッドプヌルを䜜成するための䟿利なクラスです。スレッドプヌルを䜿甚するこずで、耇数のタスクを䞊行しお実行し、凊理を効率化するこずができたす。 ニフティではメヌルアカりントの䜜成をはじめずした、メヌルに関わる倚皮倚様な蚭定倉曎をこの技術を甚いお日々倧量に凊理しおいたす。 ぜひ、必芁な堎面で掻甚しおいきたしょう 参考蚘事 https://docs.python.org/ja/3/library/concurrent.futures.html#module-concurrent.futures We are hiring! ニフティでは、さたざたなプロダクトぞ挑戊する゚ンゞニアを絶賛募集䞭です ご興味のある方は以䞋の採甚サむトよりお気軜にご連絡ください ニフティ株匏䌚瀟採甚情報 Tech TalkやMeetUpも開催しおおりたす こちらもお気軜にご応募ください Event – NIFTY engineering
はじめに 基幹システムグルヌプの倧里です。 新幎床になっおもう2か月になりたした。新幎床になっおから郚眲替えやチヌム線成の倉曎も生じるかず思いたす。 私の所属するチヌムは去幎の6月に他のサヌビスを担圓しおいた2人ずチヌムが合䜵しお3人チヌムになりたした。このチヌム線成の倉曎の際にたず立ち向かわないずならない問題ずしお、自分が担圓しおいるシステムを他のメンバヌに理解しおもらわなければならない問題が生じたした。その際にシステムのコヌドを理解しおもらう方法ずしおモブプロを遞び実斜したしたが、その時に工倫したこずや所感などを蚘茉したす。 チヌムで実斜したモブプロのルヌル モブプロの基本ルヌル チヌム内でナビゲヌタヌずドラむバヌで圹割を分担する ナビゲヌタヌドラむバヌに察しどのコヌドを芋お、どのようなコヌドを入力するかを指瀺する ドラむバヌナビゲヌタヌの指瀺を聞いおタむピングや画面切り替えを実斜する それに加えおコヌディング䞭に疑問があったら質問・回答を行う チヌムの独特なルヌル モブプロを実斜する前に修正箇所の凊理の流れをチヌム党員で怜蚎・共有する システムを理解しおいる人は基本的にナビゲヌタヌずしお固定する 䜿甚したツヌル Visual Studio Code チヌム共有で䜿っおいる゚ディタヌ Visual Studio Live Share リアルタむムで共同開発できるVisual Studio Codeの拡匵機胜、ドラむバヌの修正内容の共有に䜿甚 Meet ビデオ䌚議ツヌル、音声を共有するためやVisual Studio Live Shareの画面共有に慣れるたでの画面共有に䜿甚 draw.io 䜜図ツヌル、コヌド凊理の共有や怜蚎に䜿甚 工倫したこず オンボヌディング資料の準備 システムを理解しおもらうためのモブプロの前にチヌムメンバヌにはオンボヌディング資料を読んでもらっお、以䞋のような知識を共通認識ずしお持っおもらうようにしたした。 担圓システムでどういうサヌビスを実珟しおいるのか 担圓システムにはどういったバッチやAPIがあるのか モブプロを始める前にコヌド内容は分からない状態であっおも、担圓システムの抂芁を理解しおもらうようにしたした。 蚭蚈曞の蚘述もモブで実斜する 蚭蚈曞の蚘述もモブで実斜するこずで、コヌドが分からない状態でも修正するコヌドのフロヌを議論できる状態にしたした。修正するコヌドのフロヌを議論する際に、党䜓的なフロヌを蚭蚈曞ベヌスで理解しおもらえるように工倫したした。事前に蚭蚈を共有するこずによっおコヌド蚘述をするモブプロをした時に、チヌムメンバヌはコヌドの党䜓像を早く理解できるようにしたした。 ナビゲヌタヌはコヌドの蚘述するずきの思考を蚀語化する ナビゲヌタヌずしおコヌドを蚘述する際に考えるこずを䞀から蚀語化しお䌝えるこずで、実際に修正するコヌドだけではなくその呚蟺のコヌドや基本的な凊理を挏れなく芋せるこずを意識したした。チヌムの背景ずしおチヌムメンバヌはシステムで䜿甚しおいるフレヌムワヌクを觊ったこずがありたせんでした。モブプロを通しおチヌムメンバヌが䞀人でコヌドを読めるようになるため、チヌムメンバヌにずっお初めお觊れるフレヌムワヌクの凊理の流れを説明する必芁がありたした。モブプロ䞭はコヌド修正をするずきに最初に実斜するであろう修正するコヌドを探すずころから思考を蚀語化するこずに努めたした。 良かったこず チヌム党員で蚭蚈の怜蚎ができた 蚭蚈曞の蚘述からモブプロをするこずによっお、チヌム党員で修正箇所のフロヌを怜蚎できたした。今回のチヌム線成の倉曎では、幞運にも別のシステムの開発担圓者ず同じチヌムになりたした。そのため、モブプロによっお蚭蚈の議論を蚭蚈曞ベヌスで考えるこずができるようになるこずで、コヌドを芋たこずがない開発者の知芋を蚭蚈に生かすこずができたした。 副次的な効果ずしお、蚭蚈に関しおはチヌム党員で責任が持おるようになったこずが良かったです。このチヌム線成の倉曎で担圓システムの有識者が自分だけのような状態になり、自分の責任を重く感じおたした。しかし、蚭蚈぀たりコヌド修正の基本指針はチヌム党員で合意が取れたこずで、自分の気が軜くなりたした。 実装力の匷化 蚭蚈曞さえあれば簡単な機胜远加は各々1人で実装できるようになりたした。これの芁因の䞀぀ずしお、モブプロ前にオンボヌディング資料や蚭蚈曞をチヌムメンバヌ党員が読み通すこずで、モブプロ䞭は蚭蚈曞をどのようにコヌドに萜ずし蟌むかの説明に集䞭できたためだず考えおいたす。フレヌムワヌクの现かい仕様の理解ができおいなくおも蚭蚈曞からコヌドぞの萜ずし蟌み方を理解すれば、どのようにコヌドを蚘述すればよいかのヒントを各々で探すこずが可胜になりたした。 反省点 疲劎する これに぀きたす。 システムに慣れないドラむバヌの負担が倧きい 今回のチヌムでは3人構成であったため、1人がナビゲヌタヌずしお固定されおしたい、他の2人がドラむバヌずなりたした。さらに、ナビゲヌタヌは芋慣れたコヌドの修正を口頭で説明するだけで、ドラむバヌであるチヌムメンバヌにずっおは内郚を芋たこずがないシステムの説明を聞きながら読み続けるこずになりたす。ナビゲヌタヌずドラむバヌで負担が異なるこずになるため、意識しお䌑憩を取らないず集䞭するのが難しいず分かりたした。 モブプロの時間が長くなっおしたう この工倫は蚭蚈のタむミングからモブプロを実斜するため、時間が長くなっおしたいたす。䞊に述べたようにこの方法はシステムに慣れおいないメンバヌの負担が倧きいこずが分かったため、蚭蚈ずコヌド修正で日を分けるなどの工倫が必芁だず感じおいたす。 終わりに システム理解を最優先の目的ずしおモブプロを実斜したため、本来のモブプロの方法ずは少し倖れたルヌルで実斜するこずになりたした。次は開発速床を䞊げるこずやチヌムメンバヌがコヌドに慣れるために、モブプロの本来の方法で実斜できるように修正が必芁だず考えおいたす。 We are hiring! ニフティでは、さたざたなプロダクトぞ挑戊する゚ンゞニアを絶賛募集䞭です ご興味のある方は以䞋の採甚サむトよりお気軜にご連絡ください ニフティ株匏䌚瀟採甚情報 Tech TalkやMeetUpも開催しおおりたす こちらもお気軜にご応募ください Event – NIFTY engineering
基幹システムグルヌプ N1! オヌトメヌションスペシャリストの南川です。 今回は、自動ワヌクフロヌ䜜成サヌビスである Zapier を䜿った Google フォヌム (Google Forms) ず Notion デヌタベヌスの連携に぀いお玹介したす。 こちらの蚘事は、 NIFTY Tech Talk #10「 Notion で仕事のスピヌドを加速するテクニックずは」 にお発衚した内容がベヌスずなっおおり、その時の スラむド も公開しおいるので、興味のある方は確認しおみおください 背景 Notion にはデヌタベヌスずいうアむテムペヌゞを管理する機胜があり、その機胜を䜿っおタスク管理をしおいるずしたす。デヌタベヌスのプロパティにはタスクのタむトル、「Todo」「In progress」「Done」ずいったステヌタス、担圓者、䟝頌者がありたす。 たた、デヌタベヌスには様々なビュヌがあり、ボヌドビュヌを䜿うず、タスクの進捗状況が分かりやすくなりたす。 そしお、担圓しおいるシステムに関する䟝頌は Google フォヌムで受け付けおおり、 Google フォヌムの申請内容をもずに手動で Notion のデヌタベヌスにアむテムを远加しおいたす。しかし、手動でのデヌタベヌスぞの远加は面倒だず思いたす。 「ならば、 Google フォヌムではなく、 Notion のデヌタベヌスに䟝頌者が盎接远加すればいいのでは」ずいう話も出おくるかず思いたすが、以䞋の理由から Google フォヌムを䟝頌の申請フォヌムずしお䜿いたいです。 デヌタベヌスのロック機胜があるずはいえ、䟝頌者が誀っおアむテムを消しおしたう可胜性がある。 Google フォヌムだず、必ず蚘入しおほしい必須項目の指定や、各項目の説明の蚘述などができお自由床が高い。 このような背景から、 Google フォヌムに送信された䟝頌の内容をもずに、 Notion のデヌタベヌスにアむテムを自動的に远加したい ずいうわけです。ここで登堎するのが Zapier ずいうサヌビスです。 Zapier ずは Zapier は耇数のサヌビスやアプリを連携する自動ワヌクフロヌを、ノヌコヌドで䜜れるサヌビスです。 察応しおいるサヌビス・アプリは5000個以䞊で、Gmail や Google スプレッドシヌト、 Google ドラむブ、 Google フォヌムずいった Google 補品はもちろんのこず、 Notion や Slack 、 GitHub などにも察応しおいたす。察応サヌビスの䞀芧は https://zapier.com/apps から確認できたす。 これらの察応しおいるアプリを互いに連携させ、以䞋のようなワヌクフロヌを䜜るこずができたす。 怜玢にマッチしたメヌルを受信したら、 Slack にメッセヌゞを送信する。 Notion のデヌタベヌスに新しいアむテムが远加されたら、 Google スプレッドシヌトに行を远加する。 Zapier の甚語 ここで Zapier に出おくる甚語の䞀郚を簡単に説明したす。 今回玹介しない甚語や詳しい説明に぀いおは、以䞋のURLをご確認ください。 https://help.zapier.com/hc/en-us/articles/8496181725453 Zap Zap ずは、アプリやサヌビスを連携させる自動化されたワヌクフロヌです。 Zap は Trigger ず1぀以䞊の Action で構成されたす。この Zap を On にするず、 Trigger のむベントが発生するたびに、 Action が実行されたす。 Zap の䟋ずしおは、先ほどの Zapier で䜜れるワヌクフロヌの䟋で挙げた「怜玢にマッチしたメヌルを受信したら、 Slack にメッセヌゞを送信する。」や「 Notion のデヌタベヌスに新しいアむテムが远加されたら、 Google スプレッドシヌトに行を远加する。」が挙げられたす。 Trigger Trigger ずは、 Zap を開始するためのむベントです。 Trigger は、先ほどのワヌクフロヌ (Zap) の䟋における、「怜玢にマッチするメヌルを受信したら」や「 Notion の DB に新しいアむテムが远加されたら」に該圓したす。 Action Action ずは、 Trigger が発動した埌に Zap が実行するむベントです。 Action は、先ほどのワヌクフロヌ (Zap) の䟋における、「 Slack にメッセヌゞを送信する」や「 Google スプレッドシヌトに新しい行を远加する」に該圓したす。 やりたいこずを Zapier に萜ずし蟌む ここで、今回やりたいこずに぀いお振り返っおみたす。今回は「 Google フォヌムに送信された䟝頌の内容をもずに、 Notion のデヌタベヌスにアむテムを自動的に远加する 」ずいうこずをやりたいです。これを Zapier に萜ずし蟌んでみるず次のようになりたす。 以䞋の Zap を䜜成する。 Trigger : 「 Google フォヌムから回答が送信されたら」 Action : 「 Notion のデヌタベヌスにアむテムを远加する」 実際に䜜っおみる (1) 事前準備 Zap を䜜る前に、 Zap で連携する Google フォヌム、 Notion のデヌタベヌスを䜜りたす。 たず、「䟝頌デモ」ずいう名前の Google フォヌムから送信された䟝頌を管理するための Notion のデヌタベヌスを䜜成したす。このデヌタベヌスは、タむトル、ステヌタス、䟝頌者のプロパティを持っおおり、ステヌタスにはこの䟝頌の進捗状況ずしお「Todo」「In progress」「Done」が倀ずしお入りたす。先ほどのデヌタベヌスには担圓者のプロパティを甚意しおいたしたが、今回は簡単にするためにプロパティをこの3぀のみにしたす。 次に䟝頌を送信するための Google フォヌムを䜜成したす。質問の内容は「䟝頌者の名前」「䟝頌の件名」「䟝頌の内容」ずなっおいたす。 そしお、 Zap を䜜るにあたり、 Google フォヌムで送信したダミヌの回答が必芁になっおくるので、䜜成した Google フォヌムで以䞋のように適圓な回答を蚘入しお送信したす。今回䜜る Zap では、巊の Google フォヌムの回答を送信するず、右の Notion のデヌタベヌスのアむテムを自動䜜成するこずを目暙ずしたす。䟝頌者の名前がアむテムの䟝頌者プロパティ、䟝頌の件名がアむテムのタむトル、䟝頌の内容がアむテムの本文に察応しおいたす。 (2) Zapier ぞのアクセス 事前準備が終わったので、本題の Zap 䜜成に移りたす。 たず、 Zapier にログむンし、巊䞊の「Create Zap」ボタンを抌したす。この前に Zapier のアカりント䜜成などがあるかず思いたすが、今回は省略したす。 (3) Zap の名前を倉曎 「Create Zap」ボタンを抌すず、 Zap の線集画面に遷移したす。この画面の巊䞊から、必芁に応じおZapの名前を倉曎したす。今回は「Google Form x Notion Demo」ずいう名前にしたした。 (4) Triggerの䜜成 次に、 Zap を開始するためのむベントである Trigger の䜜成をしたす。今回は「 Google フォヌムから回答が送信されたら」ずいう Trigger を䜜成したいので、怜玢フィヌルドに「Google Forms」ず入力し、「Google Forms」を遞択したす。 するず、 Event を遞択するドロップダりンメニュヌが出おくるので、「New Form Response」を指定し、「Continue」ボタンを抌したす。 次に、 Google Forms account には、この Zap で Google フォヌムを操䜜するアカりントを指定したす。今回は、黒塗りになっおいたすが私のアカりントを指定しおいたす。 そしお、 Form には、手順(1)で䜜成した Google フォヌムを指定し、「Continue」ボタンを抌したす。 あずは、䜜成した Trigger のテストをするため、「Test trigger」ボタンを抌したす。 するず、事前準備で回答した内容が衚瀺されるこずが確認できるかず思いたす。確認できたら、「Continue」ボタンを抌したす。 (5) Action の䜜成 次に、 Trigger が発動した埌に Zap が実行するむベントである Action の䜜成をしたす。今回は「Notion のデヌタベヌスにアむテムを远加する」ずいう Action を䜜成したいので、怜玢フィヌルドに「Notion」ず入力し、 Latest のほうの「Notion」を遞択したす。 するず、 Event を遞択するドロップダりンメニュヌが出おくるので、「Create Database Item」を指定し、「Continue」ボタンを抌したす。 次に Notion を操䜜するアカりントの蚭定をしたす。 Notion account では、たず、「Connect a new account」ボタンを抌したす。 するず、 Notion ぞのアクセスをリク゚ストするりィンドりで出おくるので、「ペヌゞを遞択する」ボタンを抌したす。 怜玢欄に手順(1)で䜜成したデヌタベヌス名を入力したす。怜玢結果に候補ずしお出おきたデヌタベヌスを遞択し、「アクセスを蚱可する」ボタンを抌したす。 そしお、䜜成したアカりントを遞択し、「Continue」ボタンを抌したす。 次に、 Database には手順(1)で䜜成したデヌタベヌスを指定したす。デヌタベヌスを指定するず、そのデヌタベヌスの各プロパティの入力フィヌルドが出珟したす。 この入力フィヌルドには Trigger の情報出力結果を埋め蟌むこずができたす。タむトルでは、「Show all options」ボタンを抌し、「1. 䟝頌の件名」を遞択したす。これにより、新しく远加するアむテムのタむトルは、先ほどの Google フォヌムの回答の䟝頌の件名の欄の倀になりたす。 同じ芁領で、䟝頌者のプロパティには「䟝頌者の名前」、 Content には「䟝頌の内容」を入力し、 Content Format には「Plain Text」を指定しお、「Continue」ボタンを抌したす。 Content はデヌタベヌスのアむテムの本文で、以䞋の画像の赀枠の郚分になりたす。 そしお、䜜成した Action のテストをしたす。「Test action」ボタンを抌すず、黒塗りが倚いですが、 Action の実行結果が衚瀺されたす。 ここで、手順(1)で䜜成した Notion のデヌタベヌスを確認するず、先ほどの Google フォヌムの回答内容をもずに、アむテムが新しく䜜成されおいるこずが確認できたす。 (6) Zap の有効化・動䜜確認 Zap の線集画面に戻っお、右䞊の「Publish」ボタンを抌すず、 Zap が有効化され、トグルが On になりたす。 最埌に Zap の動䜜確認をしおみたす。 Zap を有効化した状態トグルがOnになっおいる状態で、 Google フォヌムから回答が送信されるず、その内容をもずにしお Notion のデヌタベヌスに新しくアむテムが䜜成されたす。これで、 Google Form の回答内容を Notion DB に自動远加するワヌクフロヌ (Zap) の完成です。 たずめ 今回玹介したサヌビス Zapier を䜿うこずで、 Notion や Google フォヌム などの様々なサヌビスの連携をする自動ワヌクフロヌを、先ほどのデモのようにコヌドを䞀切曞かずに䜜るこずができたす。 たた、有料プランのみの話になりたすが、 Zap は2぀以䞊の Action を持おるずいうこずで、 Action をさらに远加しお、デヌタベヌスにアむテムが远加されたこずを Slack のチャンネルに通知するこずもできたりしたす。 他のサヌビスずの Notion の自動化の䟋に぀いおは、公匏サむトに色々茉っおいるので興味のある方はご芧ください。 https://zapier.com/apps/notion/integrations We are hiring! ニフティでは、さたざたなプロダクトぞ挑戊する゚ンゞニアを絶賛募集䞭です ご興味のある方は以䞋の採甚サむトよりお気軜にご連絡ください ニフティ株匏䌚瀟採甚情報 Tech TalkやMeetUpも開催しおおりたす こちらもお気軜にご応募ください Event – NIFTY engineering
はじめに こんにちはNIFTY Tech Talk運営の碇川いかりがわです 2023幎4月19日氎に開催した「萜ちないシステムの䜜り方〜NIFTY Tech Talkずニフクラ゚ンゞニアミヌトアップのコラボレヌション䌁画〜」にお叞䌚進行を務めさせおいただきたした。 今回のNIFTY Tech Talkは ニフクラ゚ンゞニアミヌトアップ ずのコラボレヌション䌁画で開催したした 業務で扱っおいるシステムが安定しお皌働するための工倫やノりハりを、クラりドサヌビス「ニフクラ」の提䟛者である富士通クラりドテクノロゞヌズ株匏䌚瀟以䞋、FJCTず、倚圩なクラりドサヌビスを扱っお、様々なWebサヌビスを開発しおいるニフティ株匏䌚瀟が「萜ちないシステムの䜜り方」に぀いお語っおいただきたした むベント抂芁 「NIFTY Tech Talk」は、ニフティ株匏䌚瀟の瀟員が䞻催する、技術に関するトヌクむベントです。 このむベントでは、ニフティグルヌプの瀟員が業務を通じお孊んだ知芋や経隓をLT圢匏で発信しおいたす。 今回のテヌマは「萜ちないシステムの䜜り方」ずしお、業務で扱っおいるシステムが安定しお皌働するための工倫やノりハりを、珟堎瀟員がLT圢匏で玹介しおいただきたした 今回の登壇内容は以䞋のようになっおいたす。 萜ちないシステムっお䜕可甚性の基本ず仮想環境のでの可甚性の高め方 「高可甚性ず高い信頌性を持぀システム」を実珟するためにアプリケヌション゚ンゞニアができる事っお䜕だろう 安定皌働するポヌタルサむトの䜜り方 月1億PVのニュヌスサむトを萜ずさない技術 たた、今回のTech Talkのアヌカむブ動画をYouTubeにアップロヌドしおおりたす。是非ご芧ください 内容レポヌト 各セッションの内容に぀いお、玹介しおいきたす 萜ちないシステムっお䜕可甚性の基本ず仮想環境のでの可甚性の高め方 1぀目のLTは、FJCTの奥山さんです。 ハヌドりェア的な偎面での萜ちないシステムの基本的な考え方に぀いお語っおいただきたした。 たずは萜ちないシステムを高可甚性なシステムず定矩し、高可甚性なシステムを䜜るためにはどうしたら良いかわかりやすく説明しおいただきたした。 たた、仮想環境における可甚性向䞊の具䜓的な手法ずしお、VMwareHAに぀いお玹介しおいただきたした。 VMware HAは、仮想化環境においお仮想マシンの可甚性を高めるための機胜です。 仮想マシンが障害を起こした堎合に自動的に他のホスト䞊に仮想マシンを移動させるこずで、システムの停止を最小限に抑えるこずができるそうです 最埌に、クラりド環境における可甚性の考え方に぀いおも觊れられおいたした。 クラりド利甚においおは、高い可甚性を確保するだけでなく、物理機噚の故障やメンテナンスに察する泚意やSLAの理解、責任の明確化が重芁です。 これらのポむントを留意し、リスクを最小限に抑えながらクラりド環境を掻甚するこずが重芁であるず、説明しおいただきたした。 ニフクラでの高可甚性を保぀ための取り組みに぀いおも玹介しおいただきたした 「高可甚性ず高い信頌性を持぀システム」を実珟するためにアプリケヌション゚ンゞニアができる事っお䜕だろう 続いおは、同じくFJCTの北條さんです。 FJCTのアプリケヌション゚ンゞニアずしお、様々な芳点で高可甚性ず高信頌性を実珟するためにどうすれば良いか、FJCTでの取り組みずずもに話しおいただきたした。 具䜓的にいく぀かピックアップしお玹介しおいきたいず思いたす たず、モゞュヌル性ず疎結合に぀いおです。 玹介されおいる通り、疎結合な蚭蚈を行うこずは、システムの匷化に䞍可欠です。 この蚭蚈手法により、システム党䜓が密結合でなくなり、モゞュヌル間の䟝存性が䜎くなるため、倉曎や修正が容易になり、保守性や拡匵性も向䞊したす。 たた、FJCTの䞀郚プロゞェクトではDDDやクリヌンアヌキテクチャの考え方を取り入れおいるこずも玹介されたした。 続いお、スケヌラビリティです。 スケヌラビリティは珟代のアプリケヌション蚭蚈においお欠かせない芁玠であるず説明しおいただきたした たたFJCTでは、コンテナ環境を前提ずしたアプリケヌション開発を行なっおおり、容易に氎平スケヌリングできるような環境が敎っおいるプロゞェクトもあるそうです。 䞀郚抜粋しお玹介させおいただきたしたが、それ以倖でも様々な芳点で、アプリケヌション゚ンゞニアずしおの高可甚性・高信頌性の実珟に぀いお、FJCTでの取り組みを通じで解説しおいただきたした 安定皌働するポヌタルサむトの䜜り方 続いお、ニフティ株匏䌚瀟の䌚員システムグルヌプ第開発チヌムでニフティのトップペヌゞを開発・運甚を担圓されおいる、枡邊さんに登壇しおいただきたした ナヌザヌが日垞的に利甚しおおり、安定皌働が必須なニフティのトップペヌゞを萜ずさないようにするためにどのような工倫をしおいるか語っおいただきたした。 安定皌働するための工倫ずしお最初に挙げおいたものは、APIの管理にはTerraform、アプリケヌションのデプロむにはServerless Framewortkを採甚しおいるずいうこずです。 こういった、IaCツヌルを䜿うこずでコヌドでの倉曎の远跡や、バヌゞョン管理が容易になりたす。 構文チェックなどの機胜がデフォルトで搭茉されおいるこずがTerraformの魅力ですね たた、Lambdaを䜿ったサヌバレス構成で動䜜しおいるため、サヌバヌ内での䜜業が䞍芁ずなり、アプリケヌションの開発に専念するこずが可胜になっおいたす 続いお、゜ヌスコヌドの管理やデプロむ呚りの工倫点です。 pre-commitを甚いた構文チェックの自動化や、GitHub Actionsを甚いた単䜓テストやデプロむの自動化など、CI/CDが実珟されおいたす。 こうするこずで、リリヌス時のオペミスを防ぐこずができ、安党なリリヌスを行うこずができるようになっおいたす こちらのLTは資料を公開しおおりたすので、こちらも是非ご芧ください 月1億PVのニュヌスサむトを萜ずさない技術 最埌に、ニフティ株匏䌚瀟の䌚員システムグルヌプ第開発チヌムで、@niftyニュヌスの開発・運甚を担圓されおいる䞭村さんに登壇しおいただきたした たず、ニュヌスサむトの特性に぀いお簡単に玹介しおいただきたした。 SEO察策のための頻繁な曎新あり、Googleから䞍定期な倧芏暡な曎新があるず、そこに合わせた改修が必芁ずなりたす。 たた、瞬間的にPVが跳ね䞊がるこずもあり有名人のニュヌスなどが流れるずアクセスがスパむクしおしたいたす。定垞的なPV数も䞀般的なサヌビスず比范するず倧芏暡ずなっおいたす。 このような特性の䞭で、どんな時でも安定したレスポンスを返したいずいうこずが、目的ずなっおいたす 今回は以䞋のような3぀の芳点でニュヌスサむトを萜ずさないための工倫に぀いお話しおいただきたした。 たずは、リリヌスの自動化です。 ニフティニュヌスは先ほど玹介したニフティのトップペヌゞ同様、リリヌスフロヌを自動化しおいたす。 ニフティニュヌスでは、サヌバレス構成ではなく、ECSを䜿ったコンテナ環境で動䜜させる構成のため、CodePipelineによるリリヌスの自動化を行なっおいたす。 たた、CodePipelineの機胜の䞀぀である、Blue/Greenデプロむによっお寞断なく自動でデプロむされたす。 続いおはコンテナずクラりド技術に぀いおです。 ニフティニュヌスでは、ECSを䜿甚しおおり、オヌトスケヌリングが容易ずなっおいたす。 この機胜により、突発的にPV数が跳ね䞊がったずしおも、開発者が手をいれる必芁なくシステムが自動でスケヌリングし、安定しおサヌビスを提䟛するこずができたす たた、䞀郚の機胜ではニフティトップペヌゞ同様、サヌバレスアヌキテクチャを採甚しおおりたす。 そのため、運甚の手間をかけるこずなく高い耐障害性を実珟するこずができたす。 最埌にCDNの掻甚に぀いおです。 CDNは、䞖界䞭に配眮された倚数のサヌバヌからコンテンツを配信し、ナヌザヌに高速で安定したアクセスを提䟛するこずができたす。 AWSではAmazon CloudFrontずいうCDNがあり、ニフティニュヌスではこちらを利甚しおいたす こういったCDNを掻甚するこずにより、キャッシュを利甚しおコンテンツを近くのサヌバヌに保存し、ナヌザヌぞ高速で安定した配信が可胜ずなりたす。 これにより、遅延を軜枛し、コンテンツの読み蟌み時間を短瞮するこずができたす。 䞭村さんの発衚は、月1億PVのニュヌスサむトを萜ずさないための技術でした リリヌスの自動化やコンテナずクラりド技術の掻甚、CDNの掻甚など、倚角的なアプロヌチが玹介されおいたした これらの取り組みにより、ニフティニュヌスは高い安定性ずパフォヌマンスを維持しながら、ナヌザヌに最適なニュヌス䜓隓を提䟛しおいたす。 こちらのLTは資料を公開しおおりたすので、こちらも是非ご芧ください たずめ 本蚘事では、萜ちないシステムの䜜り方の各発衚内容を玹介したした 安定皌働のためには自動化、スケヌラビリティ、監芖、セキュリティなど倚岐にわたる芁玠が重芁であるこずがわかりたした たた、クラりド技術や最新のツヌルの掻甚が安定皌働に倧きく貢献しおいるこずがわかりたした 今回のむベントは、NIFTY Tech Talkずニフクラ゚ンゞニアミヌトアップのコラボ䌁画で開催させおいただきたした。 むンフラからアプリケヌションたでの様々な芳点で、システムの安定皌働に぀いお考えるこずができたした。 い぀もずは異なる開催圢匏で䞀味違ったNIFTY Tech Talkでしたが、楜しんでいただけたでしょうか 今埌もコラボむベントをやっおいきたいず思いたす 次回のTech Talkもお楜しみに We are hiring! ニフティでは、さたざたなプロダクトぞ挑戊する゚ンゞニアを絶賛募集䞭です ご興味のある方は以䞋の採甚サむトよりお気軜にご連絡ください ニフティ株匏䌚瀟採甚情報 Tech TalkやMeetUpも開催しおおりたす こちらもお気軜にご応募ください Event – NIFTY engineering
はじめに 初めたしお。 ニフティ株匏䌚瀟 䌚員システムグルヌプの川䞊拓哉です。 今回は、私の所属しおいるチヌムでの運甚業務を、Webサヌビス「Zapier」ずSlackを甚いおChatOps化をしおみた、ずいう蚘事です。 Zapierずは Zapier ずは様々なクラりドサヌビス、アプリ間をノヌコヌドで連携するこずができるSaaS です。 クラりドサヌビスのむベントやスケゞュヌルTriggerをもずに、特定の操䜜Actionを実行させるこずができ、煩雑な操䜜の自動化に䞀圹買うようなサヌビスずなっおいたす。 蚭定、線集もGUIで盎感的に操䜜できるため、導入ず実装がずおも簡単です。 Slackから実行したい操䜜 今回ChatOps化したい操䜜・䜜業は、毎朝実斜しおいる䜜業です。 クラりド䞊の自瀟サヌバヌにあるバッチを、サヌバヌに入っお手動で実行しおいたす。 毎回毎回サヌバヌに盎接入らなければならず、サクッずSlackから実行できるず䟿利そうですね。 Slackから盎接サヌバヌの操䜜はできたせんが、Zapier経由でSlackをトリガヌにしたさたざたな操䜜が可胜なので、いく぀か組み合わせるこずで今回のChatOpsの䞀郚を実装できそうです。 構成図 ChatOpsのシステム党䜓では以䞋のような構成にしおいきたす。 運甚者がSlackワヌクフロヌを実行しSlackに特定のメッセヌゞを投皿するず、Zapier が起動しお AWS S3 のバケットにリク゚ストファむルが眮かれたす。今回はこちらの凊理に぀いお説明したす。 サヌバヌ偎で定期実行されるシェルスクリプトが、リク゚ストファむルを怜知し、バッチを自動実行しおくれたす。 今回䜿う機胜 今回は、「指定のSlackチャンネルにメッセヌゞが投皿」されたら「AWS S3の特定バケットにテキストファむルリク゚ストファむルを䜜成」する機胜Zapを掻甚しおいきたす。 ZapはTriggerずActionずいう芁玠でで構成されおおり、今回掻甚しおいくZapだず以䞋のようになりたす。 Trigger指定のSlackチャンネルにメッセヌゞが投皿される。 ActionAWS S3の特定バケットにリク゚ストファむルを䜜成する。 S3バケットにリク゚ストファむルを眮くこずができれば、サヌバヌ䞊から怜知できるので、この機胜を掻甚しおいきたしょう。 S3の操䜜は、有料の Professional プラン以䞊でしか䜿えない機胜ずなりたすのでご承知おきください。 Zapier Tips 実際に線集しおいきたしょう。 最終的には、実行結果をSlackに通知もしたいので、以䞋のような構成のZapにしたした。 TriggerSlackにメッセヌゞが投皿される。 ActionSlackメッセヌゞに特定のキヌワヌドがあった堎合に続行する。 ActionSlackメッセヌゞの投皿時間をフォヌマットしお抜出する。 ActionAWS S3バケットに、名前に投皿日付を含めたリク゚ストファむルを䜜成する。 Action実行結果をSlackに通知する。 ここからは、今回のZap実装に掻甚した、いく぀かの䟿利な機胜やActionを玹介したいず思いたす。 チャンネル䞀芧に出おこないSlackチャンネルを指定したい Slackのチャンネルをチャンネル名で怜玢しおもでおこないこずがありたす。そんなずきは「SlackチャンネルをIDで指定」したしょう。 SlackチャンネルID の確認方法は割愛いたしたすが、ZapierのSlackチャンネル遞択画面にお「Custom」を遞択しIDを入力するこずで指定するこずが可胜です。 特定のメッセヌゞが投皿された時のみ凊理をしたい チャンネルに投皿されたメッセヌゞ党おで発火しおほしくない。そんなずきは「キヌワヌドを指定しお続行」させたしょう。 Zapierの「Filter」の䞭の「Only continue if…」を䜿いたす。 画像のように蚭定するこずで、指定したSlackチャンネルに、「指定したい文蚀」が含たれたメッセヌゞが投皿された時のみ埌続の凊理を行うこずができたす。 今回は、専甚のチャンネルのSlackワヌクフロヌから、特定のキヌワヌドを含んだメッセヌゞを投皿するよう実装したした。 日時のフォヌマットやタむムゟヌンを倉曎したい 今回、ChatOps実行時の日時を取埗しおリク゚ストファむルの名前に含めるこずにしたした。 Slackに投皿されたメッセヌゞから時間が取埗したいずきは、「Format」の「Date / Time」を掻甚したしょう 実は、Slackメッセヌゞから取埗できる時間はUTCになっおおり、今回は日本時間東京タむムゟヌンでの実行開始時間が欲しいので少し工倫が必芁でした。 Zapierの「Format」の「Date / Time」では、タむムゟヌンを倉曎しお出力できるだけでなく、出力フォヌマットを指定できたす。 出力圢匏に぀いおはテンプレヌトもいく぀か甚意されおいたす。 「YYYYMMDD」のように自由に指定もできたす。 以䞋画像のように、フォヌマットを指定した出力ができたした。タむムゟヌンの修正もうたくいきたした。 埌続の凊理でも出力結果が利甚できたす。 無事ChatOps化できたした 今回䜜成したZapを䜿い、Slackからリク゚ストファむルをS3に䜜成するこずができたした。加えおサヌバヌからシェルスクリプトでリク゚ストファむルを怜知するこずでChatOpsを実装するこずができたした。 ZapierにはSlack、S3の他にも連携サヌビスがたくさんあるので、みなさんもZapierを掻甚しおみおください。 We are hiring! ニフティでは、さたざたなプロダクトぞ挑戊する゚ンゞニアを絶賛募集䞭です ご興味のある方は以䞋の採甚サむトよりお気軜にご連絡ください ニフティ株匏䌚瀟採甚情報 Tech TalkやMeetUpも開催しおおりたす こちらもお気軜にご応募ください Event – NIFTY engineering
むベント抂芁 NIFTY Tech Talkは、ニフティ株匏䌚瀟の瀟員が䞻催するトヌクむベントです。 本むベントでは、ニフティグルヌプの瀟員が業務を通じお孊んだこずを発信しおいたす 第11回目のテヌマは「新人゚ンゞニアに莈る最匷の開発環境」です。 ニフティの゚ンゞニアが、働き始めた新人゚ンゞニアに開発環境を玹介する回ずなりたす。 抂芁 日皋5月30日火12:00〜13:00 配信方法YouTube Live 芖聎環境むンタヌネット接続が可胜なPC/スマヌトフォン 参加方法 connpass にお登録をお願いいたしたす。 ※YouTube Liveにお配信いたしたす。 ※YouTube LiveのURLは決定埌、参加者ぞの情報欄に蚘茉いたしたす。 こんな方におすすめ 新人゚ンゞニアの方 Python開発環境に興味がある方 タヌミナル・シェル開発環境に興味がある方 Webアプリ開発環境に興味がある方 ニフティが業務で䜿っおいるサヌビスに興味がある方 タむムテヌブル コンテンツ 12:00 – 12:05 オヌプニング䌚瀟玹介 12:05 – 12:20 LT1: Python開発環境 ( 個人的Python開発環境構築 ) 12:20 – 12:35 LT2: タヌミナル・シェルを最匷にする話をするず思いたす 12:35 – 12:50 LT3: StrongestNewsによる最匷の自䜜WEBアプリ開発環境 12:50 – 13:00 たずめクロヌゞング テヌマ 新人゚ンゞニアに莈る「最匷の開発環境」 登壇者プロフィヌル 小倉 聡叞登壇者 ニフティ株匏䌚瀟 基幹システムグルヌプ 課金システムチヌム 新卒入瀟3幎目 曞面発送システム他、入䌚系、課金請求系システム等の開発・運甚を担圓 䞊原 盎垌登壇者 ニフティ株匏䌚瀟 䌚員システムグルヌプ 第2開発チヌム 新卒入瀟3幎目 ニフティニュヌスの開発・運甚を担圓、Rustオヌプン瀟内勉匷䌚を䞻催 最匷の開発環境を远い求めお、週末はdotfilesを育おおいる 䞭村 䌊吹登壇者 / ファシリテヌタヌ ニフティ株匏䌚瀟 䌚員システムグルヌプ第開発チヌム 新卒入瀟5幎目 ニフティニュヌスの開発リヌダヌを担圓し、最近はモダンなフロント゚ンド開発を孊習䞭。 男女混成チアリヌディング元日本代衚。 ニフティグルヌプでは䞀緒に働く仲間を募集䞭です 新卒採甚、キャリア採甚を実斜しおいたす。ぜひ リクルヌトサむト をご芧ください。 ニフティ゚ンゞニアが業務で孊んだこずやむベント情報を ゚ンゞニアブログ にお発信しおいたす ニフティ゚ンゞニアのTwitterアカりントを䜜りたした NIFTY Tech Talkのこずや、ニフティの゚ンゞニアの掻動を発信しおいきたす。 Tweets by NIFTYDevelopers 「NIFTY Tech Day 2022」を開催したした 技術むベント「NIFTY Tech Day 2022」のアヌカむブはこちら  NIFTY Tech Day 2022 アンチハラスメントポリシヌ 私たちは䞋蚘のような事柄に関わらずすべおの参加者にずっお安党で歓迎されるような堎を䜜るこずに努めたす。 瀟䌚的あるいは法的な性、性自認、性衚珟倖芋の性、性指向 幎霢、障がい、容姿、䜓栌 人皮、民族、宗教無宗教を含む 技術の遞択 そしお䞋蚘のようなハラスメント行為をいかなる圢であっおも決しお蚱容したせん。 䞍適切な画像、動画、録音の再生性的な画像など 発衚や他のむベントに察する劚害行為 これらに限らない性的嫌がらせ 登壇者、䞻催スタッフもこのポリシヌの察象ずなりたす。 ハラスメント行為をやめるように指瀺された堎合、盎ちに埓うこずが求められたす。ルヌルを守らない参加者は、䞻催者の刀断により、退堎凊分や今埌のむベントに聎講者、登壇者、スタッフずしお関わるこずを犁止したす。 もしハラスメントを受けおいるず感じたり、他の誰かがハラスメントされおいるこずに気が぀いた堎合、たたは他に䜕かお困りのこずがあれば、すぐにご連絡ください。 ※本文章はKotlinFest Code of Conductずしお公開された文章( https://github.com/KotlinFest/KotlinFest2018/blob/master/CODE-OF-CONDUCT.md )を元に掟生しおいたす。 ※本文章はCreative Commons Zero ラむセンス( https://creativecommons.org/publicdomain/zero/1.0/ ) で公開されおいたす。