TECH PLAY

ニフティ株匏䌚瀟

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

å…š517ä»¶

みなさんこんにちは、ニフティ株匏䌚瀟新卒 1 幎目の䞭井です。突然ですが皆さん、業務の新しいバッチ凊理を Rust で曞いおみようず思ったこずはありたせんかありたすよね。私も入瀟しお半幎の 9 月に達成したしたわヌい 実は元々ニフティ瀟内で Rust が䜿われおいたわけではありたせん。それなのになぜ入瀟しおこんなにすぐ Rust を導入するこずができたのかずいうず、他にも Rust を導入しようず䌁んでいる先茩がすでに オヌプン瀟内 Rust 勉匷䌚 を開いおくださっおいたからなんです。そこで孊んだ知識も掻かしお、今回はぜひ Rust を曞きたいず䞻匵しお曞かせおいただきたした 以前は 退勀を倱敗しお察策を緎ったり しおいたしたが、今回は今颚な技術を䜿っおみたずいうお話です。やらかしおばかりでもないのです。 Rust ずは Rust ずいう名前だけは聞いたこずがある方もいらっしゃるのではないでしょうか。自分も数々の ストリヌマヌがギャンブルに興じおいる動画 を芋たこずがありたす。いえ、そちらではなくお、プログラミング蚀語の Rust です。 公匏サむトが https://www.rust-lang.org/ にあるのですが、簡単にいうず、「速い」「安党な」そしお「䜿いやすい」蚀語です。蚀語の習埗がちょ〜〜っずだけ難しいずいう話もありたすが、゚コシステムずしおは本圓に完成床が高いです。 Cargo ずいうパッケヌゞマネヌゞャヌ兌ビルダヌの存圚 Rust Analyzer ずいう随䞀の゚ディタ支揎機胜 Rust の良さは無限に語れおしたうのですが、本題ではないので、ずりあえず最匷の蚀語があるずいうこずだけ芚えおください。 お題: 画像を S3 から S3 ぞ移動させる Lambda を぀くれ ニフティには AWS の緎習甚アカりントを甚意しお月 100 ドルたで䜿わせおくれる実匟挔習堎ずいう制床がありたす。ずいうこずで、Rust でどうやっお Lambda を曞いおいくのか、小さいアプリケヌションを䜿っお実際にデプロむしおみたしょう。 …埅っおください、たしかにこれだけだずただの暇を持お䜙した人の遊びみたいな感じですが、この Lambda 郚分で画像を加工しおみたり、文章を芁玄しおみたり、いろいろ倢がひろがるじゃないですか Cargo Lambda ず Terraform を組み合わせる 䜜るものは決たったずしお、問題はデプロむ方法です。 Lambda を zip ファむルに固めお terraform apply する、ずいう方法なら比范的簡単です。ただ自動化が倧倉ですし、そもそも毎回 Terraform を実行するのは怖いです。䜕かのタむミングでむンフラを壊しそうで 。 かずいっお、䞖の䞭には SAM ずか Serverless Framework ずかいうものもあるずは聞きたすが、難しそうなので䜕も理解しおいたせん。 今回は Cargo Lambda を採甚したす。これは Cargo ずいう Rust のパッケヌゞマネヌゞャヌを拡匵しお、Lambda 甚のコマンドを倚数増やしおくれるツヌルです。 https://www.cargo-lambda.info/ これを䜿うず、デプロむたでの流れはこんな感じ。簡単なので私でも䜿えたす。 cargo lambda new でプロゞェクトを䜜成 cargo lambda build で Lambda 甚のバむナリをビルド cargo lambda deploy で AWS 䞊にデプロむ 本圓に Lambda 単䜓がただ動けばよいだけならこれだけで OK です。最䜎限の IAM ロヌルを含め、党おをデプロむしおくれたす。 ただし今回は、むンフラ偎は Terraform で管理した䞊で、うたく Cargo Lambda ず組み合わせるこずにしたした。ずいうのも、どうせ S3 が必芁になるし、たた S3 ぞのアクセス暩など IAM ロヌル自䜓の調敎もあるからです。すなわち . Terraform で S3 や IAM ロヌル、ダミヌの仮の Lambda たで䜜成しおしたう Cargo Lambda でホンモノの Lambda を䞊曞きする これで、Lambda を含めたむンフラ党䜓を Terraform で管理し぀぀、日垞的な Lambda のデプロむには Terraform を利甚しない圢にできたす。 …ちなみに私は AWS 初心者なので、他にもっずいい方法がある気がしおいたす。よければ教えおください。やっぱり SAM 勉匷したほうが良いですか 実際に぀くっおみる 䜕はずもあれ、実際に䜜っおみたしょう。ちなみに完成品はこちらにおいおおきたす。 https://github.com/statiolake/aws-terraform-rust Terraform のメむンファむルを曞く たずはお決たりのや぀です。AWS を䜿いたいので aws プロバむダを指定したす。 provider "aws" { region = "ap-northeast-1" shared_credentials_files = ["~/.aws/credentials"] profile = "{your-aws-profile}" default_tags { tags = { managed_by = "terraform" } } } main.tf S3 のバケットやむベントずの連携を甚意する 次に S3 関連の蚭定を曞いおしたいたす。今回は入力・出力甚に 2 ぀のバケットを甚意したす。たた、Put むベントで Lambda を呌び出すように蚭定したす。 {your-prefix-} には、他の人ずぶ぀からなさそうな、自分だけの奜きな文字列を入れおください。S3 の名前は党䞖界で重耇しない必芁があるらしいので、私が䜜った S3 バケットず衝突しお゚ラヌになっおしたいたす。 # 入力偎 resource "aws_s3_bucket" "input" { # 名前は適圓なプレフィックスを付けるなど、必ず倉曎するこず bucket = "{your-prefix-}example-aws-terraform-rust-input" } # 出力偎 resource "aws_s3_bucket" "output" { # 名前は適圓なプレフィックスを付けるなど、必ず倉曎するこず bucket = "{your-prefix-}example-aws-terraform-rust-output" } # 入力偎の S3 の Put むベントで Lambda を呌び出す resource "aws_s3_bucket_notification" "put_notification" { bucket = aws_s3_bucket.input.id lambda_function { lambda_function_arn = aws_lambda_function.lambda.arn events = ["s3:ObjectCreated:Put"] } } resource "aws_lambda_permission" "allow_s3_invoke" { statement_id = "AllowS3Invoke" action = "lambda:InvokeFunction" function_name = aws_lambda_function.lambda.function_name principal = "s3.amazonaws.com" source_arn = aws_s3_bucket.input.arn } s3.tf ダミヌの Lambda を Terraform で䜜成する さお、ここからがトリックの 1 ぀目、ダミヌの Lambda の䜜成です。 埌で本物の Lambda をデプロむするこずになるので、いろいろなオプションは本物の Lambda が動く基準に合わせお䜜りたす。 runtime : provided.al2 handler : bootstrap たた、埌で Cargo Lambda によりコヌド郚分を䞊曞きするわけですが、それを埌でたたダミヌに曞き戻されおしたっおは困りたす。これを避けるため、 source_code_hash を ignore_changes に指定しお、その差分を無芖しおもらうようにしたす。 resource "aws_lambda_function" "lambda" { function_name = "example-aws-terraform-rust" handler = "bootstrap" role = aws_iam_role.lambda_role.arn runtime = "provided.al2" filename = data.archive_file.lambda.output_path source_code_hash = data.archive_file.lambda.output_base64sha256 environment { variables = { AWS_OUTPUT_BUCKET_NAME = aws_s3_bucket.output.bucket } } lifecycle { ignore_changes = [source_code_hash] } } # ここではダミヌを指定する data "archive_file" "lambda" { type = "zip" source_dir = "dummy_lambda" output_path = "archive/dummy_lambda.zip" } lambda.tf そしお、Terraform ではダミヌの Lambda をデプロむしたす。 環境に provided.al2 ず bootstrap を指定しおいるので、その環境で動くようにダミヌの方から合わせおあげる必芁がありたす。芁するにダミヌには Python ずかは䜿えないわけですが、たあダミヌなので䞭身はなんでも倧䞈倫です。シェルスクリプトで bootstrap ずいうファむルを䜜っお、簡単に゚ラヌ終了するようにしおおきたした。 #!/bin/sh echo "WARNING: This is not an actual lambda!" echo "This is a placeholder during terraform setup." echo "Please replace this lambda to the actual function by cargo-lambda." exit 1 むンフラをデプロむする terraform apply をしお、AWS 環境を確認するず… S3 バケットありたす。 ダミヌの Lambda もありたす。いい感じです この時点でむベントのセットアップなども完了しおいるので、バケットにファむルを入れるず CloudWatch Logs に゚ラヌが流れるはずです。 うたく動いおいそうですね cargo lambda new で Lambda を䜜成 次はお埅ちかね、Rust での Lambda の䜜成です。前述の通り、Cargo Lambda ずいうツヌルを䜿いたす。 このツヌル、むンストヌル方法がしっかり敎備しおあっお、簡単に䜿い始めるこずができたす。 ※ 情報が叀くなっおいる可胜性もあるので、 公匏サむト も合わせおご確認ください。 macOS / Linux をお䜿いの方であれば、homebrew から簡単に入りたす。 brew tap cargo-lambda/cargo-lambda brew install cargo-lambda Windows の方は scoop から入れられるらしいですね。 scoop bucket add cargo-lambda <https://github.com/cargo-lambda/scoop-cargo-lambda> scoop install cargo-lambda/cargo-lambda PC 環境を汚したくない方に向けおは Docker むメヌゞも提䟛されおいたすので、 公匏サむト を確認しおみおください。 むンストヌルが終われば、次は早速プロゞェクトを䜜成しおいきたしょう。 今回は actual_lambda ずいう名前でプロゞェクトを䜜っおいきたす。おもむろに cargo lambda new actual_lambda ずしおみおください。するず… $ cargo lambda new actual_lambda > Is this function an HTTP function? No > AWS Event type that this function receives s3::S3Event 画面䞊のいろいろず質問に答えるだけでプロゞェクトが完成、最䜎限のボむラヌプレヌトも党郚曞いおくれおいたす。なんず䟿利な。 ここから先は、もう普通の Rust プログラミングです。 Rust プロゞェクトに AWS SDK を远加する 今回は、Lambda 内から S3 にアクセスしたいんでした。プロゞェクトに AWS SDK を远加したす。ちなみに Rust の AWS SDK はサヌビスごずに分離されおいたす。 䜿いたいサヌビスを探し、必芁なラむブラリを远加しおください。 https://awslabs.github.io/aws-sdk-rust/ 今回は S3 なので、タヌミナルにこんな感じで打ち蟌めば完了です。 cargo add aws-config cargo add aws-sdk-s3 䜕気なく aws-config も远加しおいたすが、これは蚭定の読み蟌みのためのラむブラリで、どのサヌビスを䜿うにしおも必芁なものっぜいです。 本䜓を Rust で曞く こんどこそ凊理を線集しお、実際に S3 から S3 ぞ画像が移動するようにしおみたしょう。Rust は src/main.rs ファむルからスタヌトなので、このファむルを曞き換えおいくこずになりたす。 S3 から S3 ぞ移動させるサンプルコヌドを䞋に掲茉したす。 あっ、コピペしたくなりたすよね。わかりたす。党然コピペでもいいんですけど 。 ただ、もう少しだけ時間があるなら、せっかくなので手で写経しおみたせんか。Rust の最匷支揎機胜、Rust Analyzer をぜひ䜿っおみおください。補完から型ヒントたで、ずおも気持ち良く曞けるんです。 VSCode をお䜿いの方なら、Rust Analyzer は拡匵機胜から簡単にむンストヌルできたす。 use std::env; use aws_config::load_from_env; use aws_lambda_events::event::s3::S3Event; use aws_sdk_s3::Client; use lambda_runtime::{run, service_fn, Error, LambdaEvent}; /// This is the main body for the function. /// Write your code inside it. /// There are some code example in the following URLs: /// - <https://github.com/awslabs/aws-lambda-rust-runtime/tree/main/examples> /// - <https://github.com/aws-samples/serverless-rust-demo/> async fn function_handler(event: LambdaEvent<S3Event>) -> Result<(), Error> { let LambdaEvent { payload, .. } = event; for record in payload.records { let bucket = record.s3.bucket.name.unwrap(); let key = record.s3.object.key.unwrap(); let config = load_from_env().await; let client = Client::new(&config); let output_bucket_name = env::var("AWS_OUTPUT_BUCKET_NAME") .expect("failed to get output bucket name from env var"); let object = client.get_object().bucket(&bucket).key(&key).send().await?; client .put_object() .bucket(&output_bucket_name) .key(&key) .body(object.body) .send() .await?; client .delete_object() .bucket(&bucket) .key(&key) .send() .await?; } Ok(()) } #[tokio::main] async fn main() -> Result<(), Error> { tracing_subscriber::fmt() .with_max_level(tracing::Level::INFO) // disable printing the name of the module in every log line. .with_target(false) // disabling time is handy because CloudWatch will add the ingestion time. .without_time() .init(); run(service_fn(function_handler)).await } actual_lambda/src/main.rs 入力偎 S3 からオブゞェクトを取埗しお、出力偎 S3 に曞き蟌んで、入力偎 S3 のオブゞェクトを削陀する、ずいうコヌドになっおいたす。 Cargo Lambda でビルドする 出来䞊がったら、次はビルドをしたしょう。 cargo lambda build --release --target x86_64-unknown-linux-gnu --target では、Lambda のタむプを指定したす。 x86_64-unknown-linux-gnu : いわゆる普通の Lambda です。 aarch64-unknown-linux-gnu : ちょっず安い ARM (Graviton) タむプの Lambda です。 こんなスむッチ䞀぀切り替えるだけでいい感じにネむティブバむナリが䜜れる、これも Rust のいいずころだず思っおいたす。 Cargo Lambda でデプロむする ビルドがうたくいけば、デプロむです。 cargo lambda deploy --profile {your-aws-profile} --binary-name actual_lambda example-aws-terraform-rust 最埌の匕数 example-aws-terraform-rust は Lambda の名前です。忘れないでくださいねこれを忘れおしたうず党く新しく actual_lambda ずいう名前の Lambda が生成されおしたいたす。そうするず IAM ロヌルなども自動で䜜成されおしたっおゎミが増えるのでご泚意を… (n 敗)。 ちなみにサンプルリポゞトリの方には Docker を䜿うバヌゞョンのコマンドを Makefile に曞いおあるので、参考になるかもしれたせん。 さお、デプロむが完了したらもう動くようになっおいるはずです お楜しみの動䜜確認 入力甚の S3 バケットに適圓なファむルをアップロヌドするず…. 出力甚の S3 バケットに出力されたしたわヌい。 たずめ 今回は AWS 䞊に Terraform でむンフラを䜜成し、その䞭の Lambda を Rust で実装しおいきたした。 Terraform ではダミヌの Lambda を䜜成し、Cargo Lambda を䜿っおデプロむするこずで、むンフラずコヌドのデプロむを分離するこずに成功したした。たた、Rust 偎のほずんどの䜜業は Cargo や Cargo Lambda が面倒を芋おくれるこずも玹介したした。 どうでしょう。Rust で Lambda ず聞くず難しそうな印象もあったかもしれたせんが、思ったより簡単そうだなず思っおもらえたら幞いです。 ぜひ䞀床 Rust で曞いおみおください。そしお Rust を広めおいきたしょう We are hiring! ニフティでは、さたざたなプロダクトぞ挑戊する゚ンゞニアを絶賛募集䞭です ご興味のある方は以䞋の採甚サむトよりお気軜にご連絡ください ニフティ株匏䌚瀟採甚情報 カゞュアル面談も垞時受け付けおいたす カゞュアル面談 Tech TalkやMeetUpも開催しおおりたす こちらもお気軜にご応募ください Event – NIFTY engineering ニフティ株匏䌚瀟 – connpass
ニフティ株匏䌚瀟では、2023幎9月29日(金)に開催される「SRE NEXT 2023 IN TOKYO」にGOLDスポンサヌずしお協賛いたしたす。 たた、ブヌスを出展いたしたすので、ご来堎をお埅ちしおおりたす。 SRE NEXT 2023 IN TOKYO SRE NEXT 2023 IN TOKYO むベント抂芁 開催日2023幎9月29日 (金) 10:00 〜 18:00 (懇芪䌚 19:00 – 21:00) オフラむン䌚堎: 九段䌚通テラス オンラむン䌚堎: YouTube ※詳现は公匏サむトをご芧ください https://sre-next.dev/2023/ 前回(SRE NEXT 2022)ではスポンサヌセッションに参加したした 圓瀟、浅芋( @rubihiko ) の発衚資料はこちらです。 ブヌスに぀いお ニフティブヌスでは、珟堎の゚ンゞニアがロヌテヌションしお垞駐しおおりたす。 是非お越しください We are hiring! ニフティでは、 さたざたなプロダクトぞ挑戊する ゚ンゞニアを絶賛募集䞭です ご興味のある方は以䞋の採甚サむトより お気軜にご連絡ください ニフティ株匏䌚瀟採甚情報 Tech TalkやMeetUpも開催しおおりたす こちらもお気軜にご応募ください Event – NIFTY engineering connpassでニフティグルヌプに 参加いただくず むベントの お知らせが届きたす connpassで ニフティグルヌプに参加する
N1!のPorductivity Engineerずしお生産性向䞊に関わる掻動をしおいる石川です。 ニフティでは2023幎6月からPoCずしおGitHub Copilot for Businessを限定的に導入しおいたしたが、2023幎9月に正匏導入するこずになりたした。珟圚では垌望する方は誰でも利甚するこずができたす。 本日はGitHub Copilotの利甚状況ず効果に぀いお話したいず思いたす。 GitHub Copilotの利甚状況 Acceptance Rates 蚀語別 利甚者ぞのアンケヌト結果 工数削枛効果 改善されたこずず倉わらなかったこず 生産性は向䞊したか実感ベヌス 費甚察効果に぀いお 最埌に 宣䌝 GitHub Copilotの利甚状況 Acceptance Rates 20人ほどでPoCを行っおいたずきのCopilotの提案採甚率ずなりたす。 導入初期は奜奇心からか採甚率は50%を超えおたしたが時間が経っお30%前埌に集玄したした。Copilot利甚者の 提案採甚率は玄30% なので近い倀にはなっおいたすね。 利甚者がただ少ないのず人や蚀語差の圱響が倧きく採甚率が乱高䞋しおたすが、利甚者がもっず増えおきたらたた倉わっおくるかず思いたす。 蚀語別 倧抵のプログラミング蚀語では30%超えおたすね。Javaに関しおは60%超えおいるので、GitHubのブログにあった通りなので本圓に粟床がいいのだず思いたす。 蚘述内容が短文だったり自由床の高い蚀語ほど採甚率が䜎い傟向にあるように芋えたす。 こちらもただ母数が少なく䜿う人の採甚スタむルに率は倧きく䟝存するので、もっず普及するずどう倉化するか远っおいきたいず思いたす。 利甚者ぞのアンケヌト結果 PoC時に取ったアンケヌトの結果も䞀郚共有いたしたす。 工数削枛効果 アンケヌトで取った以䞋の質問を散垃図にしたものがこちらになりたす。 1日あたりCopilotの効果でどのくらい時間が節玄できたか 10分未満, 20分, 30分, 1時間, 2時間, 3時間, 4時間以䞊 1日の仕事の䞭でコヌディングに費やす時間 20%未満,40%,60%,80%以䞊 集蚈するず平均しお 1日38分 工数削枛できおいお、コヌディングに費やす時間が 23.73% 枛ったず実感しおいるずいう結果ずなりたした。 GitHub Copilot を䜿甚するずタスクを 55% 早く完了できる らしいので、それに比べるずただただですが十分効果は出おいるず思いたす。 改善されたこずず倉わらなかったこず Copilot利甚前埌での倉化を聞いた結果がこちらになりたす。 䞻にコヌディング速床ずそれに䌎うタスク完了たでの速床に倧きく圱響を䞎えおいたすね。 曞くのがめんどうな型定矩やテストたわりで掻躍しおいお粟神面でもよい効果が出おいるようです。 郜床ドキュメントを調べたりする機䌚が枛るこずで集䞭力が高たる効果もあるかず思ったのですが、そこに぀いおは倉わらないずいう結果ずなりたした。 生産性は向䞊したか実感ベヌス 8割以䞊 が生産性向䞊を実感しおいる。 費甚察効果に぀いお GitHub Copilot for Business は $19/user/month ず決しお安くはないですが、コヌディングに費やす時間23%枛ずいう効果は出おいるため、䞋振れたずしおもある皋床の時間コヌディングしおいるのであれば十分元は取れるものだず思いたす。 ただ今回の結果が䞀時的なものである可胜性もあるため、効果に぀いおは他の芁玠ずの盞関も芋぀぀継続しお蚈枬しおいく぀もりです。 最埌に PoC開始時点では詊すだけ詊しおみるかずいうスタンスでしたが、実際に䜿っおみるずプログラミング䜓隓がガラッず倉わりたした。ちょうどいいずころにちょうどいいものを提案しおくれる䜓隓、悩んでいるず合っおいるかは眮いおおいお候補を出しおくれるずいう䜓隓はずおも心地よいものでした。 ChatGPTで十分ず考えおいる方も䞀床GitHub Copilotを觊っおみるこずをおすすめしたす。 公匏がCodespacesでCopilotを䜓隓できる環境を甚意しおくれおいるので無料で觊れたす。 Take GitHub Copilot on a test-flight. – GitHub Resources GitHub Copilot ChatもPublic betaになりたしたし、Copilotは利掻甚できる䜙地は倚く残されおいお、ただただ生産性を䞊げおくれるのではないかず考えおいたす。 宣䌝 来週 9月26日(火) 12:00〜13:00にYouTube LiveにおGitHub CopilotをテヌマにしたLTを行いたす。こちらでは今回曞いおいない利甚者芖点の話もありたす。 興味がある方がいたしたら以䞋のconnpassにご登録をお願いいたしたす。 GitHub Copilotの導入や掻甚 – connpass We are hiring! ニフティでは、さたざたなプロダクトぞ挑戊する゚ンゞニアを絶賛募集䞭です ご興味のある方は以䞋の採甚サむトよりお気軜にご連絡ください ニフティ株匏䌚瀟採甚情報 カゞュアル面談も受け付けおいたす カゞュアル面談 Tech TalkやMeetUpも開催しおおりたす こちらもお気軜にご応募ください Event – NIFTY engineering ニフティ株匏䌚瀟 – connpass
こんにちは。䌚員システムグルヌプの枡邊です。 皆さんはGitHubのリリヌスノヌトを䜿っおいたすか リリヌスノヌトはGitHubリポゞトリでプロダクトのリリヌスを管理し、ナヌザヌに新しいバヌゞョンや倉曎点を提䟛するための機胜です。 私が所属するチヌムではスクラムを採甚しおおり、现かいリリヌスが1スプリントで倚く行わるので、このリリヌスノヌトをスプリントで行ったリリヌスの実瞟ずしお掻甚しおいたす。 ただし、私たちは耇数のリポゞトリにたたがった開発を行っおおり、各リポゞトリごずに手動でリリヌスノヌトを䜜成するのは非垞に時間がかかる䜜業でした。そこで、リリヌスノヌトの自動化を怜蚎し、以䞋のような条件を付け加えお実装を行いたした。 2週間で行われるスプリントの最終日に今回のスプリントで行ったリリヌス内容がリリヌスノヌトに公開される どのスプリントかをわかりやすくするために、リリヌスノヌトのタグずタむトルにスプリント名sprint1,sprint2を぀ける 前提 今回は Release Drafter ずいうGitHub Actionsのワヌクフロヌを䜿っお実装しおいきたす。 簡単にRelease Drafterの説明をしたす。 Release DrafterはPRを出したタむミングで倉曎したファむルの皮類を怜出しお、自動的にラベルを付䞎したす。 そのラベルをもずにmasterにpushなどの特定のトリガヌを基準にリリヌスノヌトのドラフトを自動で䜜成するワヌクフロヌです。 加えお、GitHub公匏が提䟛しおいる github-script ずいうGitHub Actionを䜿うこずで、ワヌクフロヌ内でJavaScriptを実行し、ワヌクフロヌをカスタマむズしおいたす。 実装 configファむル䜜成 .github/release-drafter.yml ずいうファむルを䜜成したす。 これはconfigファむルになっおいお、リリヌスノヌトに蚘茉する内容の制埡やPR時に付䞎するラベルの条件を蚭定するこずができたす。 ラベルを付䞎する条件は、ディレクトリや特定の拡匵子を指定するこずが可胜です。 categories: - title: ' Release' labels: - 'release' - title: ' Features' labels: - 'feature' - 'enhancement' - title: ' Bug Fixes' labels: - 'fix' - 'bugfix' - 'bug' - title: ' Maintenance' label: 'chore' - title: ' Refactoring' label: 'refactor' - title: ' Documentation' label: 'documentation' - title: ' Dependency update' label: 'dependencies' change-template: '- $TITLE @$AUTHOR (#$NUMBER)' change-title-escapes: '\<*_&' # You can add # and @ to disable mentions, and add ` to disable code blocks. template: | $CHANGES autolabeler: - label: feature branch: - '/^feat(ure)?[/-].+/' - label: bug branch: - '/^fix[/-].+/' - label: chore branch: - '/^chore[/-].+/' - label: refactor branch: - '/(refactor|refactoring)[/-].+/' - label: documentation branch: - '/doc(umentation)[/-].+/' files: - '*.md' - label: release branch: - '/release[/-].+/' - label: enhancement branch: - '/(enhancement|improve)[/-].+/' - label: nextjs files: - 'src/**/*' - 'package.json' - label: github files: - '.github/**/*' 実行ワヌクフロヌ䜜成 次に.github/workflow/release-drafter.yml ずいうワヌクフロヌを䜜成したす。 name: Release Drafter on: schedule: - cron: '0 8 * * 2' #JST 17:00 on Tuesday pull_request: types: [opened, reopened, synchronize] jobs: update_release_draft: runs-on: ubuntu-latest timeout-minutes: 15 steps: - name: checkout uses: actions/checkout@v3 - name: Get latest release tag id: get_tag uses: actions/github-script@v6 with: github-token: ${{ secrets.GITHUB_TOKEN }} script: | const repo = context.repo; const { data } = await github.rest.repos.getLatestRelease({ owner: repo.owner, repo: repo.repo, }); let tag = data.tag_name; console.log(data) const regex = /sprint(\d+)/; const match = tag.match(regex); if (match) { const sprintNumber = parseInt(match[1]); tag = sprintNumber + 1; } return tag; - name: Check release date id: check_date uses: actions/github-script@v6 with: github-token: ${{ secrets.GITHUB_TOKEN }} script: | const repo = context.repo; const { data } = await github.rest.repos.getLatestRelease({ owner: repo.owner, repo: repo.repo, }); const releaseDate = new Date(data.published_at); const currentDate = new Date(); const diffTime = Math.abs(currentDate - releaseDate); const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24)); return diffDays >= 10; # リリヌス日から10日以䞊経過しおいる堎合はリリヌスを䜜成する - name: create release if: ${{ steps.check_date.outputs.result == 'true' }} uses: release-drafter/release-drafter@v5 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: publish: true name: 'sprint${{ steps.get_tag.outputs.result }}' tag: 'sprint${{ steps.get_tag.outputs.result }}' # リリヌス日から2週間以䞊前の堎合はリリヌスを䜜成しない - name: add label if: ${{ steps.check_date.outputs.result == 'false' }} uses: release-drafter/release-drafter@v5 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: disable-releaser: true 凊理内容に぀いお簡単に説明したす。 スケゞュヌルおよびプルリク゚ストトリガヌの蚭定 on セクションで、このワヌクフロヌが2぀のトリガヌで起動するように蚭定されおいたす。 schedule トリガヌは、毎週火曜日のJST 17:00UTC 8:00に蚭定されおいたす。 pull_request トリガヌは、プルリク゚ストが開かれた、再オヌプンされた、たたは同期された堎合に発生したす。 最新リリヌスタグの取埗 get_tag ステップは、github-scriptを䜿甚しお最新のリリヌスノヌトのタグを取埗したす。 タグ名は sprintX の圢匏で、X は珟圚のスプリント番号です。 取埗したタグを次のスプリントのタグに曎新したす。 リリヌス日のチェック check_date ステップは、最新のリリヌスノヌトの公開日ず珟圚の日付を比范しお、その間の日数を蚈算したす。 日数が10日以䞊経過しおいる堎合、埌続のリリヌスノヌトを䜜成するための if 条件が満たされたす。 リリヌスノヌトを䜜成した日付を基準に動くため、2週間スプリントなので14日ず蚭定するず1日でもリリヌスノヌト䜜成がずれるず正しく動かないので、䜙裕を持っお10日ず蚭定しおいたす。 リリヌスノヌトの䜜成 create release ステップは、 release-drafter アクションを䜿甚しお、日数が10日以䞊経過しおいる堎合はリリヌスノヌトを䜜成し、公開したす。 タグずリリヌスノヌト名は、前のステップで取埗した次のスプリント番号を䜿甚したす。 ラベルの远加 add label ステップは、日数が10日未満の堎合に実行され、最新のリリヌスノヌトを自動で䜜成するこずを制埡したす。 リリヌスノヌトの䜜成タむミングを倉曎する堎合 scheduleのcronを実行したい日付に倉曎 GitHub ActionsのタむムゟヌンはUTCなので、日本時間に合わせるため9時間プラスしたす。 check_date ステップの diffDays >= 10 を倉曎 1週間のスプリントならcronだけでいいので、 check_date ず add label ステップを削陀したす。 動䜜確認 今回は火曜日の1700に実行するようにcronを蚭定しおいたす。 GItHubずslackを連携しおいるので、17時頃に実行者が github-actions[bot] でリリヌスノヌトずタグが自動的に䜜成されたした。 たずめ 今回はRelase Drafterをチヌムの開発手法に合わせおカスタマむズしたした。 github-scriptを組み合わせるこずによっお、JavaScriptでGitHub APIが叩けるようになり、求めおいた動䜜を実珟するこずができたした。 ニフティでは、 さたざたなプロダクトぞ挑戊する ゚ンゞニアを絶賛募集䞭です ご興味のある方は以䞋の採甚サむトより お気軜にご連絡ください ニフティ株匏䌚瀟採甚情報 Tech TalkやMeetUpも開催しおおりたす こちらもお気軜にご応募ください Event – NIFTY engineering connpassでニフティグルヌプに 参加いただくず むベントの お知らせが届きたす connpassで ニフティグルヌプに参加する
始めに こんにちは、ニフティ新卒1幎目の高田ず村山です。 珟圚はゞョブロヌテヌション期間䞭で、いろいろな郚眲を回っおいたす。 珟圚は、情報システムチヌムに配属されおおり、瀟内向けシステムの開発や運甚を行っおいたす。その業務の䞀環ずしお䟿利ツヌルを人で䜜成したので、それに぀いお話しおいきたいず思いたすSlackBotを䜜っおAWSにデプロむしたい人はぜひ読んでみおください 背景 ニフティでは出勀時に勀務堎所ず仕事内容をSlackに投皿し、Slackのステヌタスも勀務地に応じたものに倉えるずいうルヌルがありたす。たた、退勀時にもSlackぞの報告が必芁です。これは、リモヌトワヌクによるハむブリッドな働き方により、瀟員党員がオフィスにいるわけではないので、どこで働いおいるか、今日のタスクはどうなっおいるかなどを共有する必芁があるためです。 埓来は、すべお手動で行わなければならなかったため、他の出勀時のタスクず合わせお行わなければならず、忘れがちだったり、䜜業の負担になっおいたりしたした。 そこで、我々新人はそんな状況を打砎すべく、先に挙げたSlackぞの投皿・ステヌタス倉曎を自動化するシステムである、「出退勀楜楜くん」の制䜜に取り組みたした。 出退勀楜楜くんずは 出退勀楜楜くんずは、以䞋のように、Slackの出退勀報告甚チャンネルに報告甚スレッドが毎日自動的に投皿され、 メッセヌゞ内にあるボタンを抌すだけでSlackぞの出勀報告やSlackのステヌタス倉曎が行われるずいうシステムです。 これにより、先に挙げた報告やステヌタス倉曎をボタン䞀぀で完了できるため、楜に出退勀時のタスクをこなすこずができたす。 たた、瀟内で䜿甚されおいるスケゞュヌル管理システムのIDずPWを事前に登録しおおくこずで、 報告内容に圓日の業務内容を自動的に含めるこずができたす。 システム構成 アヌキテクチャ 本システムは、察象がニフティの瀟員数癟人皋床&日に䞀人圓たり回利甚されるこずを想定した比范的小芏暡なツヌルです。ですので構成は、呌び出しが少ない堎合に䜎コストで運甚できるサヌバレスずし、AWS Lambda䞊にデプロむを行いたした。詳现なアヌキテクチャは以䞋の通りです↓ デプロむにはServerless Frameworkを甚いたした。蚭定ファむルは以䞋の通りです(䞀郚省略)↓ service: attendance-slack frameworkVersion: '3' provider: name: aws runtime: python3.10 region: ap-northeast-1 iam: role: statements: - Effect: Allow Action: - lambda:InvokeFunction - lambda:InvokeAsync Resource: "*" - Effect: Allow # ParameterStore関連 Action: - ssm:PutParameter - ssm:GetParameter Resource: "*" - Effect: Allow Action: - kms:Decrypt Resource: "*" - Effect: Allow # DynamoDB関連 Action: - dynamodb:UpdateItem - dynamodb:GetItem - dynamodb:DeleteItem Resource: "*" environment: TZ: Asia/Tokyo SERVERLESS_STAGE: ${opt:stage, 'dev'} package: patterns: - "!**" - "function/**" functions: app: # メむン関数 handler: function.slack_bolt_function.lambda_handler name: attendance-slack-${sls:stage} url: true maximumEventAge: 21600 maximumRetryAttempts: 0 post_attendance_message: # 出勀報告甚メッセヌゞ投皿関数 handler: function.post_attendance_message.lambda_handler name: attendance-slack-post-attendance-message-${sls:stage} maximumEventAge: 21600 maximumRetryAttempts: 0 events: - schedule: cron(0 22 ? * 1-5 *) # 平日朝7時(JST)に実行 post_leaving_message: # 退勀報告甚メッセヌゞ投皿関数 handler: function.post_leaving_message.lambda_handler name: attendance-slack-post-leaving-message-${sls:stage} maximumEventAge: 21600 maximumRetryAttempts: 0 events: - schedule: cron(50 2 ? * 2-6 *) # 平日朝11時50分(JST)に実行 manage_channels: # チャンネル管理甚関数 handler: function.manage_channels.lambda_handler name: manage-channels-${sls:stage} url: true maximumEventAge: 21600 maximumRetryAttempts: 0 # 倖郚パッケヌゞをLambda䞊で動かすプラグむン plugins: - serverless-python-requirements custom: pythonRequirements: zip: true slim: true useDownloadCache: false useStaticCache: false # DynamoDBのむンスタンス䜜成 resources: Resources: ondemanddb: Type: 'AWS::DynamoDB::Table' Properties: TableName: user AttributeDefinitions: - AttributeName: slack_id AttributeType: S KeySchema: - AttributeName: slack_id KeyType: HASH # オンデマンドキャパシティモヌド BillingMode: PAY_PER_REQUEST Bolt for Pythonによるアプリ制䜜 出退勀楜楜くんはSlackの公匏ラむブラリである Bolt for Python を䜿っお䜜られおいたす。これによっおナヌザからのアクション(スラッシュコマンドやボタンクリックなど)ず凊理の玐づけを非垞に簡単に実装できたす。 メッセヌゞ等アプリ内コンポヌネントの成圢には Block Kit Builder を䜿甚しおいたす。たずえば↑のメッセヌゞブロックのうち、ワンクリック版は以䞋のような゜ヌスでできおいたす。 blocks = [ { "type": "section", "text": { "type": "mrkdwn", "text": ":syukkin: *おはようございたす*:syukkin:\nボタンを抌しお出勀報告したしょう", }, }, {"type": "divider"}, {"type": "section", "text": {"type": "mrkdwn", "text": "*ワンクリック版*"}}, { "type": "actions", "block_id": "place_oneclick_block", "elements": [ { "type": "button", "text": {"type": "plain_text", "emoji": true, "text": "新宿17F"}, "value": "新宿17F", "action_id": "button_17f", }, { "type": "button", "text": {"type": "plain_text", "emoji": true, "text": "新宿18F"}, "value": "新宿18F", "action_id": "button_18f", }, { "type": "button", "text": {"type": "plain_text", "emoji": true, "text": "圚宅"}, "value": "圚宅", "action_id": "button_home", }, { "type": "button", "text": {"type": "plain_text", "emoji": true, "text": "暪浜"}, "value": "暪浜", "action_id": "button_yokohama", }, { "type": "button", "text": {"type": "plain_text", "emoji": true, "text": "その他"}, "value": "その他", "action_id": "button_others", }, ], }, {"type": "divider"}, # 詳现版も同様に... ] これをSlackの chat.postMessage APIにblocksずしお枡しおAPIを叩くこずで指定のチャンネルに送りたす。ボタンのアクションは以䞋のようにblock_idずaction_idを指定しお受取り、倀はaction[“value”]で受け取りたす。たた、bodyにリク゚スト情報が䞀通り入っおいたす。 def attendance_oneclick_button_clicked( action: dict, body: dict, client: WebClient ) -> None: # ナヌザid取埗 user_id = body["user"]["id"] schedule = "some schedule" # ここでスケゞュヌル管理ツヌルから予定をずっおくる schedule = "\n--やるこず--\n" + schedule msg = f"{body['user']['username']}が勀務を開始したした。\n堎所: " + action["value"] + schedule # 出勀報告メッセヌゞ投皿 client.chat_postMessage( channel=body["channel"]["id"], text=msg, thread_ts=body["message"]["ts"], username="出退勀楜楜くん", ) # ステヌタス倉曎 place = action["value"] if place == "新宿17F": status_text = "オフィスワヌク䞭 17F" status_emoji = ":17f:" elif place == "新宿18F": status_text = "オフィスワヌク䞭 18F" status_emoji = ":18f:" elif place == "圚宅": status_text = "リモヌトワヌク䞭" status_emoji = ":working-from-home:" elif place == "暪浜": status_text = "オフィスワヌク䞭 暪浜" status_emoji = ":yokohama:" else: status_text = None status_emoji = None # 勀務堎所が「その他」のずき以倖は倉曎する if status_text and status_emoji: user_id = body["user"]["id"] client.users_profile_set( token=ps.get_parameter("SLACK_USER_TOKEN"), user=user_id, profile={ "status_text": status_text, "status_emoji": status_emoji, "status_expiration": 0, }, ) # Lazy Listener蚭定 app.action({"block_id": "place_oneclick_block", "action_id": re.compile("button_.+")})( ack=just_ack, lazy=[attendance_oneclick_button_clicked] ) Boltで構築したSlackアプリをLambda䞊で動かす堎合はLazy Listenerの蚭定が必芁です。これに぀いおは先茩が すでに蚘事を曞いおいるので芋おみおください 。なお、 users.profile.set APIを甚いお他人のステヌタス倉曎を行う堎合、その人の メンバヌ皮別 より䞊䜍のメンバヌが発行したナヌザトヌクンが必芁です。今回はプラむマリヌオヌナヌ暩限で払い出しおもらっおいたす。 䜿っおみおくれた人の感想 ニフティではSlackに個人の分報チャンネルを䜜成しお぀ぶやきを発信する文化がありたす。そこに投皿されおいた感想の䞀郚をご玹介したす。 奜評ですね 工倫した点 AWSにデプロむするにあたり、比范的安い構成を採甚 芏暡を考慮した完党サヌバレス構成 瀟内ツヌルであり、ナヌザが倚くお数癟人皋床なので、サヌバは立おずにリク゚ストベヌスのLambda+DynamoDB構成にしたした。 シヌクレットの管理をParameter Storeで行う ロヌテヌション機胜を芁さないこずなどから、Secrets ManagerでなくParameter Storeを䜿うこずでコストを抑えたした。 API GatewayでなくLambda Function URLsを利甚 HTTP゚ンドポむントずしおLambda Function URLsを盎接利甚するようにし、認蚌等はSlack SDKに任せおいたす。 開発効率を䞊げるためにIaCを組んだ 本プロゞェクトでは、AWSを採甚しおいるため、コン゜ヌルを䜿甚した手動でのデプロむには時間や工数がかかりたす。 そのため、䞊蚘のようにServerless Frameworkを䜿甚しお、デプロむできるようにしたした。たた、Serverless FrameworkはTerraform等ず比べお簡単に蚭定を曞けるので、新人゚ンゞニアがIaCを始めるきっかけずしおは、ずおも良いのではないでしょうか。 苊劎した点 AWS, SlackAPI初心者人での蚭蚈・開発 私たちはどちらもAWSやSlackAPIを甚いた開発の経隓がなかったため、仕様の怜蚎には時間がかかりたした。 AWSでいえば、DBの遞択や蚭蚈、シヌクレットの管理方法、その他必芁なサヌビスの取捚遞択などに苊劎したした。わからない点は瀟内分報チャンネルでがやいおいるず先茩方が教えおくれたり、あずはChatGPTに盞談したりしお決めおいきたした。GPT4は最匷でした。 䜙談ですが、匊瀟では䞊蚘のようにSlackでい぀でも質問可胜なAIが圚䞭しおいたす。詳现は こちら  たたSlackAPIでは、Tokenの暩限、Tier(1分圓たりの呌び出し可胜回数)やむンタラクションの実装方法(ショヌトカットやスラッシュコマンドなど)の怜蚎に悩たされたした。 ゞョブロヌテによる開発期間の制玄 9月䞋旬には他の郚眲ぞ移るため、開発はもちろん、䌁画や仕様の決定、諞々の調敎などを含めお3か月で開発しなくおはなりたせんでした。たた先述の通り私たちには技術を調べる時間も必芁だったため、うたくこずを進めおいくのが倧倉でしたが、先茩に頌ったり、IaCによる効率化などにより䜕ずか乗り切りたした。 たずめ 今回は出退勀時のタスクを自動化するSlackアプリを䜜成したした。 今回、ふたりずもAWSやBoltを䜿甚した開発は初めおでしたが、3か月ずいう短い期間の䞭でひず぀圢にできたのでよかったです。先ほど玹介した感想を含め、チヌムの方々がみんな楜になったず蚀っおくれおうれしかったです。 もしみなさんにも、こういったSlackでの毎日のタスクがあるなら、私たちのように自動化を考えおみおはいかがでしょうか。 We are hiring! ニフティでは、さたざたなプロダクトぞ挑戊する゚ンゞニアを絶賛募集䞭です ご興味のある方は以䞋の採甚サむトよりお気軜にご連絡ください ニフティ株匏䌚瀟採甚情報 カゞュアル面談も受け付けおいたす カゞュアル面談 Tech TalkやMeetUpも開催しおおりたす こちらもお気軜にご応募ください Event – NIFTY engineering ニフティ株匏䌚瀟 – connpass
はじめに 基幹システムグルヌプの湊谷です。 普段は䞻にニフティのお客様の情報を管理するシステムの開発・運甚を行っおいたす。 「◯◯の情報を取埗するにはどのAPIを利甚すれば良いか」ずいったシステム目線のもの、「◯◯ずいった属性を持぀お客様にメヌルを送りたいため、IDリストを抜出しおほしい」ずいった䌁画・営業目線のもの、日々様々な問い合わせが来たす。 今幎でこのシステムに携わり始めお4幎目になりたすが、ただただ把握しきれおいないこずも倚く、問い合わせを察応する時は郜床調べるこずが欠かせたせん。 その䞭でも、「過去の類䌌の問い合わせを芋぀け出し、その時の調査内容・回答から今回の回答のヒントを埗る」こずが倚いです。 しかし、問い合わせはSlackチャンネルで受け付けおいるのですが、数倚い問い合わせの䞭怜玢しお必芁な情報を探し出すのは倧倉・・・ しかも、調査段階で右埀巊埀しおる・・・ どこかにナレッゞずしおちゃんずたずめおおきたいでも手動でやりたくない  ずいうこずで今回は、「Slackチャンネルで問い合わせが投皿されるず、Notion DBに新芏ペヌゞを䜜成し、その䜜成されたペヌゞがSlackチャンネルに投皿される」こずを実珟したす。 ちなみに、過去に Slack ワヌクフロヌ+Boltで䟝頌・受付の調敎をスッキリさせよう ずいう蚘事も曞いおいるので、よろしければご芧ください。 Slack BoltずZapierを䜿っおNotionず連携させる やるこずは倧きく分けお以䞋の五぀です。 Slack Bolt for Javascriptを䜿っおbotを䜜成する 問い合わせを受け付けるSlackワヌクフロヌを䜜成する Notionにデヌタベヌスを甚意する ZapierでNotion デヌタベヌスに新芏ペヌゞを䜜成し、Slackに通知するワヌクフロヌを䜜成する botの実装を行う それでは䞀぀ず぀芋おいきたす。 Slack Bolt for Javascriptを䜿っおbotを䜜成する 早速䞊蚘の過去の蚘事ず同様になりたすが、たず最初に、Boltを䜿甚しお、チャンネルに投皿されたメッセヌゞを受け取り応答するbotを甚意しおおきたす。 Slackアプリの構築の仕方に぀いおは、 slack apiのドキュメント や Bolt 入門ガむド に詳现があるため省略したす。 問い合わせを受け付けるSlackワヌクフロヌを䜜成する 私たちのシステムでは、問い合わせを受け぀けるチャンネル(以䞋、 QAチャンネル )ず、システム担圓者が調査・やり取りを行うチャンネル(以䞋、 内郚甚チャンネル )の二぀を甚意し、QAチャンネルにSlackワヌクフロヌを䜜成しお問い合わせを受け付けおいたす。 ※今回は、2023幎6月に提䟛開始された 新バヌゞョンのSlack ワヌクフロヌ ではなく、レガシヌ版のワヌクフロヌを甚いお䜜成したした。 たずはワヌクフロヌを開始したチャンネル=QAチャンネルに、問い合わせの内容をそのたた投皿したす。 今回の実装ずは関係ありたせんが、QAチャンネルに投皿されたメッセヌゞのスレッドに、以䞋の様な返信を行い、システム担圓者が確実に気付けるようにしおいたす。 次に、内郚甚チャンネルにも投皿を行いたす。 基本的には問い合わせを受け付けたチャンネルに投皿した内容ず同じものを投皿したすが、倧切なのは䞀番䞋の郚分です。 先ほど䜜成したSlack botぞのメンションず、「Notion DBにコピヌしおください」ずいう文蚀を䞀緒に投皿しおいたす。 埌ほどbotの実装を行う際に、「アプリにメンションが飛んだ時、曎に特定の文字を含んでいる」堎合をトリガヌずする実装を行うため、忘れずに぀けおおきたす。 Notionにデヌタベヌスを甚意する Notionに問い合わせをたずめるペヌゞを䜜成したす。 デヌタベヌスを遞択しおペヌゞを新芏䜜成したす。 䜿いやすいようにプロパティを線集したしょう。今回は「進捗」「Slackスレッド」「担圓者」の䞉぀のプロパティを持たせおいたす。 ZapierでNotion デヌタベヌスに新芏ペヌゞを䜜成し、Slackに通知するワヌクフロヌを䜜成する Zapierずは、耇数のアプリやサヌビスを連携しおワヌクフロヌを䜜成するこずができるサヌビスです。 今回は「NotionDBにペヌゞを䜜成し、そのペヌゞをSlackに通知する」ワヌクフロヌを䜜成したす。 ※Notionにペヌゞを䜜成しSlackに通知させる、ずいった耇数のステップを組み合わせたワヌクフロヌの䜜成や、今回トリガヌに䜿っおいるものは有料プランのみ可胜です。 たず、「䜕をきっかけにしお䜜成したワヌクフロヌを発火させるか」ずなるトリガヌを遞択したす。 「Webhooks by Zapier」を遞び、Eventは「Catch Hook」を遞択したす。 「Trigger」は特に指定せず次に進みたす。 「Test」に進むず「Your webhook URL」が衚瀺されたす。 このURLを呌び出すず叩くず、珟圚䜜成しおいるワヌクフロヌを発火させるこずができたす。 パラメヌタに、「Notion DBに䜜成するペヌゞのタむトル(title)・本文(detail)」ず、「投皿するSlackのスレッド(ts)」の情報を持たせたす。指定する倀はここでは適圓で問題ありたせん。 https://hooks.zapier.com/hooks/catch/XXXXXXX/XXXXXX/?title=test&detail=korehatestdesu&ts=hogehoge このURLを䞀床ブラりザで叩いおみたしょう。 “status”: “success” ずなればOKです。 次にNotion DBにペヌゞを䜜成したす。Add a stepでNotionを遞択し、Eventには「Create Database Item」を指定したす。 Accountでは䜿甚する自身のアカりントを連携させたす。 連携させる際に、先ほど䜜成したペヌゞを指定しおおきたす。 Actionで、䜜成するNotion DBのペヌゞの蚭定をしおいきたす。 Database  䜜成したペヌゞを指定 名前  ペヌゞのタむトル。パラメヌタに指定したtitleを遞択 slackスレッド  <内郚甚チャンネルのURL>+/p+パラメヌタに指定したtsを遞択 Content  ペヌゞの本文。お奜みの文章ず、パラメヌタに指定したdetailを遞択 Content Format  マヌクダりン匏で曞く堎合にはMarkdownを遞択 これでテストをするず、先ほど䜜成したNotionペヌゞに新しくペヌゞが远加されおいるこずを確認できたした。 最埌に、Slackに通知をする蚭定をしたす。 Zapierで蚭定を行う前に、Notionのペヌゞを通知させたいチャンネルに適圓に投皿したす。 今回は架空の問い合わせを投皿しおみたした。 リンクをコピヌし、URLからメッセヌゞのをタむムスタンプを確認したす。 https://hoge.slack.com/archives/XXXXXXX/p1234567890123456 URLの䞀番最埌、pの埌の16桁の数字で、右から6぀目ず7぀目の間にピリオドを打ったものがタむムスタンプです。 1234567890.123456 Add a stepでSlackを遞択し、Eventには「Send Channel Message」を指定したす。 Accountでは䜿甚する自身のアカりントを連携させたす。 Actionで、Slackにメッセヌゞを送る際の蚭定をしおいきたす。他の項目はお奜みで蚭定したしょう。 Channel 内郚甚チャンネルを遞択 Message Text お奜みの文章ず䜜成したペヌゞのURLを遞択 Thread パラメヌタに指定したtsを遞択 これでテストするず、Slackに䜜成されたNotionのペヌゞ付きで投皿がされたした これでZapierのワヌクフロヌは完成なので、Publishしおおきたす。 Slack botの実装を行う やっおいるこずは、「slackアプリに察しおメンションが飛ばされた時、特定の文章を含んでいたら、ZapierのURLを叩く」です。 アプリの起動郚分などは省略しおいたす。 // Slackに投皿された文章の䞭から問い合わせの本文を抜出する const getElementsBetween = ( array: Array<string>, startFlag: string, endFlag: string, ): string[] => { let outputArray: Array<string> = []; let startCollecting = false; for (let i = 0; i < array.length; i++) { // startFlgが芋぀かったら、startCollectingをtrueにする // startFlgの芁玠は配列に入れないためcontinue if (array[i] === startFlag) { startCollecting = true; continue; } // endFlgが芋぀かったら、startCollectingをfalseにする if (array[i] === endFlag) { startCollecting = false; } // startFlgずendFlgの間の芁玠を配列に入れる if (startCollecting) { outputArray.push(array[i]); } } return outputArray; }; // Zapier URLを呌び出す const createQaDb = (title: string, detail: string, ts: string) => { const uri = `https://hooks.zapier.com/hooks/catch/XXXXXX/XXXXXX/?title=${title}&detail=${detail}&ts=${ts}`; const encoded = encodeURI(uri); return fetch(encoded) .then((res) => { console.log('問い合わせDB䜜成'); }) .catch((error) => { console.error(`問い合わせDB䜜成倱敗${error}`); }); }; // botの凊理 // アプリにメンションが飛んだ時に実行 app.event('app_mention', async ({ body }) => {  // もし投皿の䞭に「Notion DBにコピヌしおください」ずいう文蚀が含たれおいたら if (body['event']['text'].includes('Notion DBにコピヌしおください')) {   // bodyのメッセヌゞから必芁な情報を取埗 const text = body['event']['text']; const textArray = text.split('\n'); const title = textArray[3]; const detailArray = getElementsBetween( textArray, '■問い合わせ詳现', '■い぀たでに回答が必芁ですか', ); const detail = detailArray.join('\n');   // 本文、タむトル、タむムスタンプ情報を持たせおZapier URLを呌び出す createQaDb(title, detail, body['event']['ts']); } }); これで チャンネルに問い合わせが投皿されるず 内郚甚チャンネルに内容が転送され その情報を基にNotion DBに新しくペヌゞが䜜成され そのペヌゞが内郚甚チャンネルのスレッドに通知される ようになりたした 最埌に 以前の蚘事に匕き続き 、Slackワヌクフロヌ+Boltを䜿っお䜜成したbotアプリを組み合わせた掻甚䟋を玹介したした。 今回はZapierを掻甚するこずで、SlackだけではなくNotionずの連携も簡単に行うこずができたした。 SlackワヌクフロヌもZapierも、完党にノヌコヌドで様々な䜜業を自動化させるこずが可胜です。 特にSlackワヌクフロヌは 2023幎6月に新バヌゞョンの提䟛が開始されたそうです。 ただ新バヌゞョンの方は觊れおいないため、䜕か業務に掻甚できないか暡玢しおいきたいず思いたす。 We are hiring! ニフティでは、さたざたなプロダクトぞ挑戊する゚ンゞニアを絶賛募集䞭です ご興味のある方は以䞋の採甚サむトよりお気軜にご連絡ください ニフティ株匏䌚瀟採甚情報 カゞュアル面談も受け付けおいたす カゞュアル面談 Tech TalkやMeetUpも開催しおおりたす こちらもお気軜にご応募ください Event – NIFTY engineering ニフティ株匏䌚瀟 – connpass
基幹システムグルヌプ N1! オヌトメヌションスペシャリストの南川です。 今回は、 Docker むメヌゞがビルドできるか定期的にチェックし、倱敗したら Slack に通知する GitHub Actions のワヌクフロヌを玹介したす。 背景 Docker のベヌスむメヌゞの OS や䜿甚しおいるパッケヌゞのバヌゞョンアップにより、䜕もしおいないのに Docker むメヌゞのビルドが倱敗するようになるこずがあるかず思いたす。たた、ビルドに倱敗した堎合、その原因が機胜远加や修正によるものなのか、自分の環境によるものなのか分からないずいった問題もありたす。 こうした背景から、以䞋のような GitHub Actions のワヌクフロヌを䜜成するこずにしたした。 定期的 (平日 8:30) に Docker むメヌゞのビルドが成功するかチェックする。 ビルドに倱敗したら Slack のチャンネルにアラヌトを通知する。 もし、 Slack チャンネルにアラヌトが通知されおいたら、担圓者はワヌクフロヌの実行ログを確認し、 GitHub で Issue を䜜成しお察応したす。 このワヌクフロヌにより、ベヌスむメヌゞやパッケヌゞの曎新による Docker むメヌゞのビルド倱敗の怜知が迅速化されるほか、ビルド倱敗の原因の調査にも圹立぀こずが期埅されたす。 手順 前提ずしお、今回は Docker Compose を䜿っおいるリポゞトリに察しお実装しおいきたす。 (1) Slack Incoming Webhook を䜜成 以䞋のペヌゞを参考に Slack Incoming Webhook を䜜成したす。 https://api.slack.com/messaging/webhooks 䜜成したら Webhook URL ( https://hooks.slack.com/services/T.../B.../... ) をメモしたす。 (2) Webhook URL をリポゞトリシヌクレットに远加 GitHub のリポゞトリのペヌゞを開きたす。 リポゞトリのメニュヌから「 Settings 」を遞択したす。 巊メニュヌから「 Secrets and variables > Actions 」を遞択したす。 「 New repository secret 」ボタンを抌す。 以䞋のように入力し、「 Add secret 」ボタンを抌す。 Name : ALERT_SLACK_WEBHOOK_URL Secret : 手順 (1) でメモした Webhook URL 参考 : https://docs.github.com/ja/actions/security-guides/encrypted-secrets#creating-encrypted-secrets-for-a-repository (3) GitHub Actions ワヌクフロヌファむルを䜜成 ブランチを切り、 .github/workflows/ 配䞋に以䞋のファむル ( check_docker_build.yml ) を䜜成したす。 name: check docker build on: schedule: - cron: '30 23 * * 0,1,2,3,4' workflow_dispatch: jobs: check_build: runs-on: ubuntu-latest steps: - name: checkout uses: actions/checkout@v3 - name: define run url run: echo "ACTION_URL=https://github.com/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}" >> $GITHUB_ENV - name: docker-compose build run: docker-compose build - name: slack notification if: ${{ failure() }} uses: slackapi/slack-github-action@v1.24.0 with: payload: | { "text": ":github: Dockerむメヌゞのビルド倱敗 :docker:\n倱敗の原因を調査し、必芁に応じおhotfixのIssueを䜜成し、察応しおください。", "blocks": [ { "type": "section", "text": { "type": "mrkdwn", "text": ":github: Dockerむメヌゞのビルド倱敗 :docker:" } }, { "type": "section", "text": { "type": "mrkdwn", "text": "倱敗の原因を調査し、必芁に応じおhotfixのIssueを䜜成し、察応しおください。" } }, { "type": "section", "text": { "type": "mrkdwn", "text": "${{ env.ACTION_URL }}" } } ] } env: SLACK_WEBHOOK_URL: ${{ secrets.ALERT_SLACK_WEBHOOK_URL }} SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK この時のディレクトリ構成 (関係のあるファむルのみ) は以䞋のようになりたす。 |-- .github | `-- workflows | `-- check_docker_build.yml |-- Dockerfile `-- docker-compose.yml 解説 name: check docker build リポゞトリの Actions タブで衚瀺されるワヌクフロヌ名を指定しおいたす。 https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#name ここで指定した名前は、 Actions タブの実行履歎で衚瀺されたす。 on: schedule: - cron: '30 23 * * 0,1,2,3,4' workflow_dispatch: このワヌクフロヌを実行するトリガヌ (条件) をここで指定しおいたす。 schedule https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#schedule cron 匏で指定した日時に実行するようにする。 UTC で指定する必芁があるので泚意。 (䟋) 月曜日 (曜日 = 1) 8:30 を指定する堎合は、 UTC に倉換するず、日曜日 (曜日 = 0) 23:30 になるので、「 30 23 * * 0 」ずなりたす。 今回は平日 (月曜~金曜) の 8:30 に実行するようにしおいたす。 workflow_dispatch https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#workflow_dispatch ワヌクフロヌを手動で実行できるようにしたす。 https://docs.github.com/en/actions/using-workflows/manually-running-a-workflow 今回はワヌクフロヌの動䜜確認のために䜿いたす。 - name: checkout uses: actions/checkout@v3 リポゞトリにチェックアりトし、ワヌクフロヌでアクセスできるようにしたす。 https://github.com/marketplace/actions/checkout - name: define run url run: echo "ACTION_URL=https://github.com/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}" >> $GITHUB_ENV 環境倉数 ACTION_URL を定矩し、環境ファむル $GITHUB_ENV に曞き蟌みたす。 ワヌクフロヌの実行結果のURLを環境倉数 ACTION_URL の倀ずしお定矩しおいたす。 ${GITHUB_REPOSITORY} , ${GITHUB_RUN_ID} はそれぞれ GitHub が蚭定枈みの既定の環境倉数。 ${GITHUB_REPOSITORY} : 所有者およびリポゞトリ名。 ${GITHUB_RUN_ID} : リポゞトリ内の各ワヌクフロヌの実行に割り振られたナニヌクな番号。 https://docs.github.com/ja/actions/learn-github-actions/variables#default-environment-variables $GITHUB_ENV はワヌクフロヌコマンドから倉数を蚭定するファむルぞのランナヌ䞊のパス。 https://docs.github.com/ja/actions/learn-github-actions/variables#default-environment-variables これによっお、埌続のステップで環境倉数 ACTION_URL の倀を䜿うこずができたす。 https://docs.github.com/ja/actions/using-workflows/workflow-commands-for-github-actions#environment-files - name: docker-compose build run: docker-compose build Docker むメヌゞをビルドするコマンド。 必芁に応じお 「–build-arg」 でオプションを指定したす。 - name: slack notification if: ${{ failure() }} 前のステップ Docker むメヌゞのビルドが倱敗した堎合に、このステップを実行Slackにメッセヌゞを投皿するようにしたす。 https://docs.github.com/ja/actions/learn-github-actions/expressions#failure uses: slackapi/slack-github-action@v1.24.0 with: payload: | { "text": ":github: Dockerむメヌゞのビルド倱敗 :docker:\\n倱敗の原因を調査し、必芁に応じおhotfixのIssueを䜜成し、察応しおください。", "blocks": [ ... { "type": "section", "text": { "type": "mrkdwn", "text": "${{ env.ACTION_URL }}" } } ] } env: SLACK_WEBHOOK_URL: ${{ secrets.ALERT_SLACK_WEBHOOK_URL }} SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK Slack Incoming Webhook を甚いお、メッセヌゞを Slack チャンネルに投皿したす。 https://github.com/marketplace/actions/slack-send payload には Slack チャンネルに投皿するメッセヌゞを蚘茉したす。 text https://api.slack.com/methods/chat.postMessage#arg_text blocks が指定されおいない堎合、チャンネルに投皿されるメッセヌゞ。 blocks が指定されおいる堎合、 Slack で通知されるずきのメッセヌゞ。 block https://api.slack.com/methods/chat.postMessage#arg_blocks JSON で蚘述された構造化されたメッセヌゞ。 詳しくはこちらを参照しおください。 https://api.slack.com/messaging/composing/layouts 先ほど定矩した環境倉数 ACTION_URL の倀を䜿っおいたす。 「 "text": "${{ env.ACTION_URL }}" 」 https://docs.github.com/ja/actions/learn-github-actions/variables#using-contexts-to-access-variable-values https://docs.github.com/ja/actions/learn-github-actions/contexts#env-context 環境倉数 SLACK_WEBHOOK_URL に、手順(2)で蚭定したリポゞトリシヌクレットの倀を指定しおいたす。 https://docs.github.com/ja/actions/security-guides/encrypted-secrets#using-encrypted-secrets-in-a-workflow (4) 動䜜確認 ビルドを倱敗するように Dockerfile を曞き換えおコミットし、 push したす。 リポゞトリの「Settings」タブを遞択したす。 Default branch をこのワヌクフロヌを開発しおいるブランチに切り替えたす。 リポゞトリの 「Actions」 タブを遞択したす。 巊メニュヌから 「check docker build」 を遞択したす。 参考 : https://docs.github.com/en/actions/using-workflows/manually-running-a-workflow#running-a-workflow 「Run workflow」 のプルダりンを開き、珟圚開発しおいるブランチを指定しお、緑色の 「Run workflow」 ボタンを抌したす しばらくするず、チャンネルにビルド倱敗のメッセヌゞが投皿されたす。 Botのアむコンがお気に入りです。 https://www.irasutoya.com/2016/11/blog-post_684.html 平日の8:30頃にビルド倱敗通知に投皿されれば OK。 ビルド倱敗するようにしたコミットを revert したす。 平日の8:30頃にビルド倱敗通知に投皿されなければ OK。 Actionsタブから実行されおいるDockerむメヌゞのビルド成功しおいるこずを確認したす。 土日の8:30頃にワヌクフロヌが実行されおいなければOK。 Actionsタブから実行されおいないこずを確認したす。 おわりに 今回は、GitHub Actions で定期的に Docker むメヌゞをビルドできるかチェックし、ビルドできない堎合は Slack にメッセヌゞを投皿するワヌクフロヌに぀いお説明したした。 Docker むメヌゞのビルドチェック以倖にも色々応甚できるので、是非掻甚しおみおください。 We are hiring! ニフティでは、さたざたなプロダクトぞ挑戊する゚ンゞニアを絶賛募集䞭です ご興味のある方は以䞋の採甚サむトよりお気軜にご連絡ください ニフティ株匏䌚瀟採甚情報 カゞュアル面談も受け付けおいたす カゞュアル面談 Tech TalkやMeetUpも開催しおおりたす こちらもお気軜にご応募ください Event – NIFTY engineering ニフティ株匏䌚瀟 – connpass
はじめに こんにちは。ニフティ株匏䌚瀟の宮氞です。4月に新卒で入瀟したした。珟圚はむンフラシステムグルヌプ ISPオペレヌションサブチヌムに所属しおいたす。 7月9日に電気通信䞻任技術者詊隓䌝送亀換を受隓し、合栌したした。受隓者が少ないためかネットに䜓隓談を茉せおいる人も少なく、今埌受ける人の圹に立぀かもしれたせんので、自分の経隓をお話ししたす。 電気通信䞻任技術者ずは そもそも「電気通信䞻任技術者」ずは䜕でしょうか。 電気通信䞻任技術者は、電気通信ネットワヌクの工事、維持及び運甚の監督責任者です。 電気通信事業者は、その事業甚電気通信蚭備を、総務省什で定める技術基準に適合するよう、自䞻的に維持するために、電気通信䞻任技術者を遞任し、電気通信蚭備の工事、維持及び運甚の監督にあたらなければなりたせん。  日本デヌタ通信協䌚HP より匕甚 電気通信䞻任技術者は、原則ずしお「電気通信䞻任技術者資栌者蚌」を持っおいる人から遞任したす。この「電気通信䞻任技術者資栌者蚌」を埗るための詊隓が「電気通信䞻任技術者詊隓」です。 電気通信䞻任技術者詊隓には 䌝送亀換䞻任技術者詊隓 線路䞻任技術者詊隓 の2皮類あり、「䌝送亀換䞻任技術者詊隓」を受隓したした。 なお、䞀定芏暡以䞊の電気通信事業者は有資栌者を配眮する必芁があり、圓瀟も該圓したす。 詊隓内容 詊隓科目は以䞋の3科目です。3科目それぞれ6割以䞊で合栌です。 電気通信システム 20問 80分 電磁気孊や電気工孊の問題や、電気通信の基瀎問題が問われたす。 高校物理や笊号理論、TCP/IPなど通信の基本が絡むため比范的理解しやすかったです。 䌝送亀換蚭備及び蚭備管理 倧問9問 150分 䌝送亀換蚭備の抂芁や運甚に加え、セキュリティや゜フトりェア管理に぀いお問われたす。 実務の経隓が無いず聞いたこずが無い甚語が倚く、苊戊したした。 法芏 倧問5問 80分 電気通信事業法をはじめずする関連法芏に぀いお問われたす。 いわゆる理論的な話ではなく暗蚘が物を蚀うため、苊戊したした。 科目合栌制床もあるので、2科目合栌しお次回の詊隓で1科目合栌する …ずいう方法もありたす。 なお、「工事担任者」などの資栌を持っおいるず䞀郚科目で免陀がありたす。私は該圓する資栌を持っおいなかったので、3科目受隓したした。 勉匷方法 基本的には過去問呚回です。詊隓では過去問ず同じor非垞に䌌た問題が倚く出題されるので、「芋たこずがある問題を可胜な限り倚く䜜り、絶察に萜ずさない」ずいう戊法で挑みたした。6割合栌なので、この戊法で合栌できるず信じたした。 勉匷をするにあたり色々なテキストを買いたくなりたすが、あれこれ買うず高く぀くので、「自分はこれを完ぺきにするんだ」ずいうものを決めお買いたした。どんな勉匷でも反埩孊習が倧事なので、決めたものをひたすら繰り返したす。 詊隓はすべお遞択マヌク匏です。「以䞋から正しいものを遞びなさい」ずいう問題がある際は、他の遞択肢がなぜ間違っおいるのか、どこを盎せば正しくなるのかを説明できるようにするこずを心掛けたした。 総勉匷時間は玄60時間でした。うち䌝送亀換蚭備及び蚭備管理に玄30時間かけおいるので苊戊したこずが分かりたす   詊隓圓日 詊隓は日曜日の午前から始たりたす。幎に2回しかない詊隓なので、寝坊するず次のチャンスは半幎埌になっおしたいたす。受隓料も2䞇円匱するのでもったいない 受隓䌚堎に向かう際は若い人や女性の方もたくさんいたのですが、ほずんどが同じ堎所で行っおいる英怜の受隓䌚堎に吞い蟌たれおいきたした。 電気通信䞻任技術者詊隓の䌚堎には200人ほどがおり、ほずんどが4050代の男性に芋えたした。䌑日のおじ様たちがラフな栌奜で来おいるのが倧半でした。おそらく自分が䌚堎内で䞀番若かったです。 各科目の詊隓時間は長いですが倧半の方が途䞭退出したす。お昌ご飯の時間も十分にあるので、時間が䜙りがちでした。空いた時間に最埌の぀めこみができるように、勉匷道具を持っおいくのがおすすめです。 腕時蚈を持ち蟌みする際、 アナログ匏時蚈液晶衚瀺のあるものは認めない ずいう独特なルヌルがあるので泚意です。日付衚瀺だけ液晶衚瀺ずいった時蚈も犁止です。隣の垭の人が監督員に泚意されおいたした。たた、腕時蚈は倖しお机に眮くよう指瀺されたす。自立しないタむプの腕時蚈だず厳しいかもしれたせん。 ティッシュはカバンにしたい、䜿うずきに監督員を呌ぶように指瀺されたした。毎日ティッシュが欠かせない私ずしおはこれが䞀番倧倉でした。詊隓時間䞭に䜕床監督員を呌んだこずか   問題冊子は持ち垰るように蚀われたす。自己採点のために自分の回答を問題冊子にメモしおおくず良いです。 結果発衚 詊隓の数日埌に正答がwebで公開されたす。結果発衚が埅ちきれず自己採点したした。3科目ずも7~8割で合栌点に達しおいそうで䞀安心です。ずはいえ結果発衚たでは安心できたせん。 詊隓から3週間埌に結果発衚がありたす。web䞊で合吊を確認したす。 無事に合栌したした。勉匷した成果が出およかったです。 これで珟状の瀟内で最幎少の合栌者になれたした。 資栌者蚌申請 ただ安心できたせん。詊隓に合栌した人は申請しお「電気通信䞻任技術者資栌者蚌」の亀付を受けなければいけたせん。管蜄の総合通信局ぞ申請曞を提出したす。 顔写真、収入印玙、䜏民祚の写し等を甚意したす。この資栌者蚌、運転免蚱蚌などず異なり 有効期限が無い ので残念な写真は䜿わない方が良いです。䞀生残念な写真の資栌者蚌ず共に過ごすこずになりたす。 申請から玄1か月で資栌者蚌が届きたした。これで堂々ず有資栌者ず名乗るこずができたす。 資栌手圓 先述の通り有資栌者が瀟内で必芁であるため、資栌を取るず補助が䌚瀟から出たす。初任絊に+で補助が出るのは倧きいです。 おわりに 入瀟しおすぐの環境に慣れない䞭でしたが、受隓し合栌するこずができおよかったです。 電気通信䞻任技術者に興味があるかたは是非受隓しおみおください。 We are hiring! ニフティでは、さたざたなプロダクトぞ挑戊する゚ンゞニアを絶賛募集䞭です ご興味のある方は以䞋の採甚サむトよりお気軜にご連絡ください ニフティ株匏䌚瀟採甚情報 Tech TalkやMeetUpも開催しおおりたす こちらもお気軜にご応募ください Event – NIFTY engineering ニフティ株匏䌚瀟 – connpass カゞュアル面談も受け付けおいたす ニフティ株匏䌚瀟 – Meety
むベント抂芁 NIFTY Tech Talkは、ニフティ株匏䌚瀟の瀟員が䞻催するトヌクむベントです。 本むベントでは、ニフティグルヌプの瀟員が業務を通じお孊んだこずを発信しおいたす TechTalk#14は「GitHub Copilotの導入や掻甚」です。 どれほどのものを開発業務にもたらしおくれるのか、その䟿利さずは。 䜿っおみたいけどなにが出来るのかよくわからないなどなど気になる方は是非ご芖聎ください 抂芁 日皋9月26日火12:00〜13:00 配信方法YouTube Live 芖聎環境むンタヌネット接続が可胜なPC/スマヌトフォン 参加方法 connpass にお登録をお願いいたしたす。 YouTube Liveにお配信いたしたす。 ※YouTube LiveのURLは決定埌、参加者ぞの情報欄に蚘茉いたしたす。 こんな方におすすめ GitHub Copilotに興味がある方 導入を怜蚎しおいる方 タむムテヌブル 時間 コンテンツ 12:00 – 12:10 オヌプニング䌚瀟玹介 12:10 – 12:25 LT1: GitHub Copilotの導入ず開発生産性ぞの効果 12:25 – 12:40 LT2: クリヌンアヌキテクチャずTDDの䞭でCopilotを䜿っおみた 12:40 – 12:55 LT3: Copilotを䜿っお爆速コヌディングする 12:55 – 13:00 たずめクロヌゞング テヌマ GitHub Copilotの導入や掻甚 登壇者プロフィヌル 石川 貎之登壇者  ニフティ株匏䌚瀟 䌚員システムグルヌプ 第開発チヌム AWS/GCPの組織管理、Notion/GitHub等のSaaS管理、自瀟Webサヌビス基盀の担圓をしおいたす。 たけろいど登壇者 ニフティ株匏䌚瀟 䌚員システムグルヌプ 第開発チヌム Copilotを䜿っお開発を行うWEBアプリケヌション゚ンゞニアです。 普段はPythonやSvelteのコヌディング支揎をしおもらっおいたす。 いかりがわ登壇者 ニフティ株匏䌚瀟 䌚員システムグルヌプ 第開発チヌム 新卒3幎目。ニフティのポヌタルサむトの開発運甚を担圓しおいたす。 普段はNext.jsやGoをCopilotさんず䞀緒に曞いおたす。 ニフティグルヌプでは䞀緒に働く仲間を募集䞭です 新卒採甚、キャリア採甚を実斜しおいたす。ぜひ リクルヌトサむト をご芧ください。 ニフティ゚ンゞニアが業務で孊んだこずやむベント情報を ゚ンゞニアブログ にお発信しおいたす ニフティ゚ンゞニアのTwitterアカりントを䜜りたした NIFTY Tech Talkのこずや、ニフティの゚ンゞニアの掻動を発信しおいきたす。 Tweets by NIFTYDevelopers アンチハラスメントポリシヌ 私たちは䞋蚘のような事柄に関わらずすべおの参加者にずっお安党で歓迎されるような堎を䜜るこずに努めたす。 瀟䌚的あるいは法的な性、性自認、性衚珟倖芋の性、性指向 幎霢、障がい、容姿、䜓栌 人皮、民族、宗教無宗教を含む 技術の遞択 そしお䞋蚘のようなハラスメント行為をいかなる圢であっおも決しお蚱容したせん。 䞍適切な画像、動画、録音の再生性的な画像など 発衚や他のむベントに察する劚害行為 これらに限らない性的嫌がらせ 登壇者、䞻催スタッフもこのポリシヌの察象ずなりたす。 ハラスメント行為をやめるように指瀺された堎合、盎ちに埓うこずが求められたす。ルヌルを守らない参加者は、䞻催者の刀断により、退堎凊分や今埌のむベントに聎講者、登壇者、スタッフずしお関わるこずを犁止したす。 もしハラスメントを受けおいるず感じたり、他の誰かがハラスメントされおいるこずに気が぀いた堎合、たたは他に䜕かお困りのこずがあれば、すぐにご連絡ください。 ※本文章は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/ ) で公開されおいたす。
はじめに こんにちは。䌚員システムグルヌプの䞊原です。 8月末に瀟内でISUCONを開催・運営したので、レポヌティングしおいこうず思っおいたす。 ISUCONずは ISUCON ( Iikanjini Speed Up Contest) は、限られたリ゜ヌス・時間の䞭でWebサヌビスをどれだけ高速にできたかを競うコンテストです。 ISUCONで参加者は動䜜が遅いWebアプリケヌションを䞎えられ、アプリケヌションを高速化しおいくために蚭定を最適化したり、コヌドを改善したりする必芁がありたす。 チヌム間でスコアを競い合いながら、高速化しおいけるずころがISUCONの醍醐味です。 ISUCONを通じお、モニタリングやデヌタベヌスのチュヌニングなどのスキルを向䞊させるこずができたす。 ちなみに、優勝するず賞金100䞇円をゲットできたす (※「ISUCON」は、LINE株匏䌚瀟の商暙たたは登録商暙です。 https://isucon.net ) 今回のむベント 本家ISUCONず同じく、webアプリケヌションをどれくらいチュヌニングできるかチヌムで競っおいくぜ ず行きたかったのですが、パフォヌマンスチュヌニングっお䜕ずいう人も倚い状況でいきなり競技圢匏で行うのは負担が倧きいず思われたので、座孊ずハンズオン圢匏を組み合わせたワヌクショップを行いたした。 たた、より倚くの゚ンゞニアに参加しおもらうため、デフォルトで゚ンゞニア党員を参加察象ずし、欠垭者は個別に連絡しおもらうオプトアりト圢匏を取るこずにしたした。 そのおかげからか94名の瀟内の゚ンゞニアの皆さんに参加いただくこずができたした タむムスケゞュヌル 以䞋のように前半1時間は座孊、埌半3時間はハンズオン圢匏ずし、講垫ず䞀緒にパフォヌマンスチュヌニングを孊べるようにしたした。 座孊(1時間) 高速なWebサヌビスの意矩 チュヌニングの基瀎 モニタリングの基瀎 ハンズオン(3時間) ワヌクロヌドの分析&ボトルネックの発芋 WEBサヌバのログからレむテンシを調べる スロヌク゚リを探す デヌタベヌスのチュヌニング SQLの実行蚈画の分析 N+1問題の解決 Webサヌバのチュヌニング なお、内容は以䞋の曞籍を参考にさせおいただきたした。著者の方々に感謝申し䞊げたす。 達人が教えるWebパフォヌマンスチュヌニング 〜ISUCONから孊ぶ高速化の実践 座孊 高速なwebサヌビスずは䜕かハンズオンをやる䞊であらかじめ知っおおくべき解説をやっおいきたした。 (内容玹介は省略 ) ハンズオン 題材 今回䜿甚する題材はpixiv株匏䌚瀟の瀟内ISUCONで䜿甚されたprivate-isuを䜿甚したした。 https://github.com/catatsuy/private-isu このアプリケヌションはisucogramずいう仮想の写真共有SNSで、写真投皿機胜やコメント機胜など簡単な機胜が実装されおいたす。 今回は、参加者党員にアプリケヌションサヌバヌ1台ずベンチマヌクサヌバヌ1台を提䟛したした。 本家ISUCONでは序盀はチュヌニングをいきなり行うのではなく、必芁なツヌルの導入・蚭定などを行う必芁がありたすが、時間が限られおいるこずもありサヌバヌ蚭定、ツヌル導入、サヌバヌ立ち䞊げなど必芁な準備は運営偎で党お行いたした。 ずいうこずで、参加者がサヌバヌにsshできればすぐにパフォヌマンスチュヌニングを楜しめる状態にしたした。 たた、sshでサヌバヌ接続がうたくできないこずも芋越しお、AWSのセッションマネヌゞャヌ経由でサヌバヌにログむンできるよう蚭定を仕蟌んだり、蚀語が障壁ずならないように、瀟内でもっずも読み曞きできる人間の倚い python に実装を倉曎したりしたした。 その際以䞋のレポゞトリを参考にしたした。䜜者の方には感謝申し䞊げたす。 https://github.com/methane/pixiv-isucon2016-python 負荷詊隓を行う 早速、ベンチマヌクを走らせ負荷詊隓を行っおいきたす。アプリケヌションに残ったログにalpコマンドやpt-query-digestコマンドを噛たせお、ボトルネックをどのように芋぀けおいくか䜓隓しおもらいたした。 この段階ではただ0点です。 初めおのチュヌニング htopでCPUコアが䞀぀しか䜿われおいないこずがわかったので、蚭定を倉曎しおCPUコアをフルで䜿えるようにしたした。 1000点くらいたで䌞びたした。 デヌタベヌスチュヌニング pt-query-digestでスロヌク゚リを特定、EXPLAINで実行蚈画を分析したのち、適切なむンデックスを貌っおいっおもらいたした。これだけでもスコアは15000点くらいたで䌞びたす。 スコアがいきなり1䞇点台に到達したので驚いた人もいたようです。 ほかにもN+1問題の解消などにも取り組んでもらいたした。 リバヌスプロキシ デヌタベヌスに画像が保存されおいる問題があるため、アプリケヌションコヌドずリバヌスプロキシの蚭定をいじっお、ファむルから画像を参照するような修正を行いたした。 たた、gzip配信やブラりザキャッシュなどにも取り組み、最終的には7䞇点くらいになりたした。 ボトルネックに集䞭しお消化するこずは倧事 パフォヌマンスチュヌニングはボトルネックに集䞭しお解消しなければならないず蚀われたす。 むンデックスを消すだけで、スコアは䞀気に1000点台たで䞋がるため、ボトルネックを解消するこずの倧切さを認識できたのではないかなず思いたす。 感想 むベント䞭、slackチャンネルも盛り䞊がりわいわいずした雰囲気でできたので良かったです。 参加者からのアンケヌトの結果、ほずんどの方から奜意的な感想をいただくこずができたした。 理由ずしおは、パフォヌマンスチュヌニングの結果がスコアずしお数字に出おくるのが良かったようです。 具䜓的な数倀ずしおスコア改善が芋られるのは面癜かった。 ク゚リチュヌニングでどれくらい性胜差が出るのか実感できお面癜かった。 䞀方で4時間ずいう短い時間に内容を詰め蟌んでしたったため、内容に぀いおいけないずいう方もいたようです。 業務に圱響がないように短い時間内に収めるのはなかなか難しいですが、1日目は座孊、2日目はハンズオンなど日皋を分けお行うのもいいのかなず思いたした。 ただ運営ずしおは、半幎間準備を行いオプトアりト圢匏で実斜したため絶察に倱敗できない ずいうプレッシャヌがあったのですが、参加者から孊びが倚かったずいう声が倚く、苊劎が報われお良かったです。 最埌に 今回はワヌクショップ圢匏で行いたしたが、次回は本家ISUCONず同じくチヌム競技でやっおいきたいず思っおいたす。 本家ISUCONの方には今回の運営メンバヌでチヌムを組み挑んでいきたいず思いたすので、ISUCONに参加される方はよろしくお願いいたしたす We are hiring! ニフティでは、さたざたなプロダクトぞ挑戊する゚ンゞニアを絶賛募集䞭です ご興味のある方は以䞋の採甚サむトよりお気軜にご連絡ください ニフティ株匏䌚瀟採甚情報 カゞュアル面談も受け付けおいたす カゞュアル面談 Tech TalkやMeetUpも開催しおおりたす こちらもお気軜にご応募ください Event – NIFTY engineering ニフティ株匏䌚瀟 – connpass
前回の蚘事で、ニフティでSREずしお働く瀟員に、ニフティでのSREの取り組みず、仕事を進めるにあたっおの工倫点などをむンタビュヌを行いたした。 今回はむンタビュヌの埌線をお届けしたす。前線はこちらの蚘事をご芧ください。 【むンタビュヌ】ニフティのSREに聞くむンタヌネット黎明期から安心・安党を䜓珟しおきたニフティが2023幎に取り組んでいるSREずは【SRE前線】 入瀟5幎目のネットワヌク゚ンゞニアがSREに。 Kさんは自ら垌望しおSREチヌムに入ったそうですが、垌望理由はなんですか。 Kさん SRE、DevOpsに魅力を感じお垌望したした。 具䜓的にどんなこずをやっおいるんですか。 Kさん 最近は開発チヌムの生産性を可芖化しようずしおいたす。GitHubのログを抜出しお、それをLooker Studioを䜿っおグラフにしおビゞュアラむズするこずで、週次の生産性を蚈ろうずしおいたす。生産性が䜎い堎合にできるアクションを今怜蚎しおいたす。 SREチヌム内でのコミュニケヌションに぀いお。 チヌムで動く䞊で倧事にしおいるこずは䜕ですか。 Kさん ニフティはハむブリッドワヌクなので、日によっおオフィスにいるメンバヌが違いたす。出瀟しおいるメンバヌは出来るだけ顔を合わせお䌚話できるようにしおいたす。 Sさん やっぱりコミュニケヌションは倧事ですよね。 Aさん そうですね。チヌムの䜓制はスクラムなので、スクラムチヌムのアクティビティデむリヌスクラムやスクラムむベント、レビュヌなどを通しおメンバヌず密にコミュニケヌションを取り合っおいたす。それず、斜策に察しおしっかりずリリヌスを行うこずを意識しお進めおいたす。 リモヌトワヌクだず盎接顔を合わせない日もありたすが、コミュニケヌションが取りづらかったりするこずがありたすか。 Aさん 自分はこの䌚瀟に勀めお長いのであたり感じないですね。Sさんは入瀟しお1幎経っおないですがどうでしょう。瀟員の顔がわからないずかはありたすか。 Sさん 私は入瀟したばかりなので、顔がわからない人は倚いですね笑。ただ、前職はフルリモヌトだったのでコミュニケヌションが取りづらいずは感じたせんでした。ただ、出瀟の機䌚があるこずで顔を合わせお雑談や䌚話できるのはずおもいいなず思いたす。 SREチヌムのワヌクラむフバランスずは。 䌑みはずれおいたすか。 Aさん 有絊䌑暇は自由にずれおいお、旅行など長めの䌑暇もずるこずもできたす。 Aさん アフタヌヌンティヌに出かけたり、ディズニヌにいったり近堎の枩泉に旅行に出かけたりしおいたす。今幎は行動制限もなくなったので、旅行に行きたいですね。 Kさん ラむブに行ったり、芳劇したりしおいたす。宝塚、劇団四季など歌っお螊る系が奜きです。あずは映画を芳たりしお過ごしおいたす。 Sさん 子䟛がいるので、䌑みの日は子䟛ず遊ぶこずが趣味になっおいたす。最近倖を歩けるようになったのでお散歩したり、子䟛ず䞀緒にあそべる斜蚭などに出かけたりしおいたす。 Aさん お子さんはそろそろディズニヌデビュヌできそうですか。 Sさん ただ早いです笑。 ニフティのSREが求める゚ンゞニアずは。 これからどんな゚ンゞニアの方ず䞀緒に仕事がしたいですか。 Aさん いろんな人ずコミュニケヌションをずっお、自発的に提案ができる゚ンゞニアを望んでいたす。色々なチヌムに察しお提案や技術支揎を行うのでそういったコミュニケヌションが埗意な方ず䞀緒に働けるず嬉しいです。 Kさん 文化を浞透させる立ち䜍眮なので、Aさんず同じく、コミュニケヌションをずっお盞手の同意を埗お進められるような方がいいですね。 Aさん Sさんず私は瀟䌚人歎ずしおは同じくらいですよね。チヌムの䞭でKさんは幎次が若いので、幎が近い人に来おほしいなどありたすか。 Kさん そんなこずはないです。そういうこずを気にする䌚瀟ではないので。 Sさん SREはいろんなサヌビスに暪断しお関わっおいくので、コミュニケヌションスキルはもちろん、むンフラだったりクラりド知識やプログラミングのスキルなど、幅広いスキルを持っおいる持ちたいず思っおいる方に来おほしいです。特にこのスキルずいうものはないのですが、様々なスキルの䞭でも自分の埗意なスキル、尖ったスキルを持っおいお、そのスキルも他のスキルも䞊げおいきたいずいう意欲がある方があっおいるかなず思いたす。 今回はニフティのSREチヌムのむンタビュヌの様子をお届けしたした。ニフティでは、SREを絶賛募集䞭です ご興味のある方は以䞋の採甚サむトよりお気軜にご連絡ください ニフティ株匏䌚瀟採甚情報 Tech TalkやMeetUpも開催しおおりたす こちらもお気軜にご応募ください Event – NIFTY engineering connpassでニフティグルヌプに 参加いただくず むベントの お知らせが届きたす connpassで ニフティグルヌプに参加する
ニフティで掚進䞭の「SRE」ずは。 簡単に自己玹介をお願いしたす Aさん ニフティでSREを掚進したいず考え、2020幎にSREチヌムを立ち䞊げおリヌダヌをやっおいたす。SRE関連業務のほかに、Webサヌビスの開発ず運甚や、サヌバヌをAWSぞマむグレヌションなども行っおいたす。 Kさん SREチヌムに入っおちょうど1幎経った5幎目瀟員です。2022幎9月たではネットワヌク゚ンゞニアずしお瀟内のネットワヌクの刷新などを担圓しおいたした。その時の知識を生かしおNIFTY Tech Day、NIFTY Tech Talkなど、YouTubeの配信を䌎うむベントのお手䌝いをやったりもし぀぀SREを掚進しおいたす。 Sさん 2023幎3月に入瀟したばかりのキャリア瀟員です。ニフティぞ入瀟する前はSRE業務ではなく、お客様に向けたWebサヌビスの開発を行っおいたのでフィヌドバックや反応が芋えづらい環境でしたが、今は瀟内メンバヌがお客様のような立堎で、自身が䜜ったものに察しお喜んでくれたり、良い反応を埗られるので新鮮で楜しいです。 SRE、ニフティのSREに぀いお教えおください。 Aさん SREでは信頌性も重芁な機胜の䞀郚だず捉えたす。具䜓的な仕組みに比べるず機胜ずしお捉えられないず思いたすが、5回に1回買い物が倱敗したり、10回に1回違うものが届いちゃうショッピングサむトを䜿いたすか、ずいうこずですよね。必ず賌入出来お、必ず正しいものが届くずいうこず。それが信頌性です。 Sさん 前職ではSREずいうポゞションがなく、ニフティに来お初めおSREを知ったのですが、ニフティはサヌビスの品質を高めようずする動きが掻発だずいうこずが分かっお、それはずおもいい文化だず思いたした。開発に比べるずないがしろにされがちですが、システムを安定しお皌働させる、障害を少なくするこずは開発ず同じくらい重芁です。その重芁性を䌚瀟党䜓で認識できるように掻動しおいきたいです。 Aさん SREのアプロヌチを党瀟に広めおいきたいず思っおいたすが、十分に浞透しおいるずはいえないのでアプロヌチの方法を色々ず暡玢しおいたす。勉匷䌚やワヌクショップを開いおみたり、瀟員にたず興味を持っおもらう取り組みを行っおいたす。たた、サヌビス品質を向䞊させるこずを目的ずした郚門暪断的なプロゞェクトが立ち䞊がっおいるのですが、そのプロゞェクトにSREチヌムが関䞎するこずで認知を広げおいっおいたす。 チヌムずチヌムを぀なぐのは、これたでに培った技術力ず柔軟なコミュニケヌション力。 他のチヌムに入り蟌んで進めるずおっしゃいたしたが、具䜓的にどのように進めおいるんですか。 Kさん 自分たちからSREを提案しに行きたす Aさん そのチヌムの䞀員ずなるような感じでやっおいたす。タスクを敎理するずきにSREのタスクを組み蟌んでやっおもらうような感じです。このスプリントではこの機胜を修正する、ずいうタスクがあるず思いたすが、SREのためのタスクも1぀は組み蟌んでもらう。機胜開発が8割だずしたら2割くらいはSREのためのアプロヌチのタスクを入れおもらっおいたす。 SREを提案されたチヌムの反応はどんな感じですか。 Aさん 普段の業務に远加になるので、やりたいず思っおもできないこずもありたすね。目指しおいるのは党員がやっおいる状態ですが、できそうなチヌムからお話をしおいたす。業務の倚寡などをみお優先順を決めおいたす。 スクラムチヌムであれば、プロダクトオヌナヌは䌁画の瀟員が倚いず思うのですが、䌁画の瀟員にSREを理解しおもらうためにどんなアプロヌチを行っおいたすか。 Aさん 䌁画ぞのアプロヌチはただ十分にできおおらず、今埌どんどんやっおいきたいですね。䌁画の郚門長などに必芁性の説明などもしたいず思っおいたす。 最終的に目指しおいるのは、䌁画も開発も信頌性を担保し぀぀自分のサヌビスの成長を刀断できる状態です。極端に蚀うず、品質が悪ければ新機胜のリリヌスよりも品質を高めるこずを優先するような刀断を遞択肢に入れおいきたいです。 Kさん 僕も同じ意芋です。 Aさん 組織がアゞャむル組織になっおいるか、DevOpsを経営局たでもが理解しながら進んでいる状態をゎヌルに描いおいたす。 埌線に続きたす 今回はニフティのSREチヌムのむンタビュヌの様子をお届けしたした。続きは埌線の蚘事をご芧ください。 【むンタビュヌ】ニフティのSREはどんな人【SRE埌線】 ニフティでは、 さたざたなプロダクトぞ挑戊する ゚ンゞニアを絶賛募集䞭です ご興味のある方は以䞋の採甚サむトより お気軜にご連絡ください ニフティ株匏䌚瀟採甚情報 Tech TalkやMeetUpも開催しおおりたす こちらもお気軜にご応募ください Event – NIFTY engineering connpassでニフティグルヌプに 参加いただくず むベントの お知らせが届きたす connpassで ニフティグルヌプに参加する
はじめに ニフティ株匏䌚瀟の癜岩です。ニフティに新卒入瀟しお玄5ヶ月が経過したした。 今秋の情報凊理安党確保支揎士詊隓を受隓するこずにしたした。本蚘事では、詊隓制床の簡単な解説ず、受隓するに至った経緯ず合栌に向けた勉匷法を蚘茉したす。 情報凊理安党確保支揎士詊隓ずは IPA独立行政法人 情報凊理掚進機構が実斜する情報凊理技術者詊隓の1぀で、情報セキュリティスペシャリスト詊隓の埌継です。 午前Ⅰ詊隓 詊隓時間9:30〜10:20 50分 出題圢匏四肢択䞀 出題数30問 抂芁午前Ⅰ詊隓は党おのスペシャリスト詊隓に共通で、応甚情報技術者詊隓の午前問題が出題されたす。 午前Ⅱ詊隓 詊隓時間10:50〜11:30 40分 出題圢匏四肢択䞀 出題数25問 抂芁情報セキュリティやコンピュヌタネットワヌクに関する問題が重点的に出題されたす。 午埌詊隓 詊隓時間12:30〜15:00 150分 出題圢匏蚘述匏 出題数党4題から2題を遞択 抂芁情報セキュリティに関する10ペヌゞ皋床の文章を読み、蚭問に回答したす。什和4幎以前は午埌Ⅰず午埌Ⅱに分かれおいたしたが、什和5幎以降から纏められたした。 合栌率15〜20% 合栌基準党おの詊隓区分で60%以䞊 登録制床に぀いお 情報凊理安党確保支揎士は、匁護士や公認䌚蚈士などず同列の「士業」にあたりたす。詊隓合栌埌、所定の手続きに埓っお登録するこずで情報凊理安党確保支揎士を名乗れるようになりたす。 たた、少々ややこしいですが「情報凊理安党確保支揎士詊隓」は 囜家詊隓 の名称、「情報凊理安党確保支揎士」は 囜家資栌 の名称です。 情報凊理技術者詊隓 詊隓区分䞀芧IPAより匕甚 情報凊理安党確保支揎士に登録した堎合、資栌維持のためには定期講習の受講が必須で、その費甚が高額です。初回登録時の費甚が玄2䞇円、1幎に1回の講習が2䞇円、3幎に1回の講習が8䞇円、合蚈するず3幎間で玄14䞇円の費甚が発生したす。 この金額を䜕の抵抗もなしに支払える財力は今の私にはないので、すぐには登録しない予定です。今埌のキャリアで必芁になったずきに登録を怜蚎したいです。 実は、情報凊理安党確保支揎士には登録期限がありたせん。詊隓合栌から20幎埌、30幎埌でも登録可胜ずなっおいたす。 たた、未登録であっおも、詊隓合栌の実瞟は履歎曞などに蚘茉するこずができたす。 ただし、支揎士でない状態未登録たたは期限切れで支揎士を名乗るず法に觊れるので泚意が必芁です。 参考 情報凊理安党確保支揎士 よくあるご質問IPA 受隓理由 情報セキュリティに関する知芋を深めたい 私は情報系孊郚出身ですが、情報セキュリティはほずんど孊習したせんでした。実務経隓もただないので、正盎なずころ合栌できる自信は党くないです。 しかしながら、情報セキュリティはそれなりに興味のある分野であり、今埌の業務に掻かせる可胜性もあるず思い、受隓を決めたした。 午前Ⅰ詊隓の免陀ができた 什和4幎床春期の応甚情報技術者詊隓を受隓し、無事に合栌できたので午前Ⅰ詊隓の免陀が可胜でした。 瀟内の支揎制床が充実しおいた ニフティには キャリアアップ支揎制床 がありたす。情報凊理安党確保支揎士詊隓も資栌取埗支揎制床の察象なので、合栌時に報奚金が支絊されたす。たた、曞籍賌入費甚補助制床を利甚しお参考曞の賌入ができたす。 合栌に向けた勉匷法 過去問を解いおいくうちに、問題の特城や圢匏は、難易床は違うものの応甚情報技術者詊隓ずあたり倉わらないように感じたした。そのため、圓時ず同じ勉匷法を取っおいたす。 今回は無関係ですが、スペシャリスト詊隓の䞭には論述が出題される区分もありたす。その堎合は勉匷法も倉わっおくるず思いたす。 過去問をたくさん解く 党おの情報凊理技術者詊隓においおマストです。最䜎でも過去5幎分は浚っおおきたいです。 午埌詊隓では、䜓系的な知識のほかに、10ペヌゞ皋床の長文を理解する読解力や回答を蚀語化する力も必芁なので、過去問を解いお身に぀ける必芁がありたす。 応甚情報技術者詊隓でも蚘述問題には苊劎したしたが、過去問を繰り返し解くうちにコツを掎みたした。スペシャリスト詊隓は問題文が非垞に長いので䞀題䞀題が重いですが、過去問を通しお慣れおいきたいです。 参考曞 先述の曞籍賌入費甚補助制床を利甚しお網矅系の参考曞を1冊賌入したした。詊隓日たでに䞀通り読んでおく予定です。 情報セキュリティに関するニュヌスや時事ネタを知っおおく 時事問題が出題される堎合があるので、抂芁を知っおおくだけでも有利になるず思いたす。 最近では、什和4幎床の詊隓で、Apache Log4jのれロデむ脆匱性であるLog4ShellCVE-2021-45105が題材ずなっおいたす。 詊隓圓日の準備をしおおく これは詊隓勉匷ではありたせんが非垞に重芁です。 圓日たでにやるべきこずずしお、起床時刻ず電車の時刻を集合時刻から逆算する、詊隓圓日の持参物をたずめる、詊隓䌚堎ぞのアクセス方法を調べる、昌食をどうするか決めるなどが挙げられたす。 「乗る電車を間違えた」「詊隓䌚堎に到着しおから受隓祚がないこずに気付いた」など、詊隓を受けられないずいう事態だけは絶察に避けなければいけたせん。 今埌に぀いお 詊隓たであず1ヶ月皋床ですが、珟状では午埌詊隓はただただこれからの段階です。午前詊隓は既に仕䞊がっおいるので、午埌詊隓の察策をどれだけできるかによっお合吊が決たりたす。 もし今回の詊隓で合栌できた堎合、次はネットワヌクスペシャリスト詊隓に挑戊したいず考えおいたす。セキュリティずネットワヌクは関わりが深く、共通する内容が倚いので今回の詊隓勉匷も掻きおきたす。こちらは1幎に1床の開催で、合栌率が13〜15%皋床なのでさらに厳しい詊隓です。 䞍合栌だった堎合は、合栌に至らなかった原因をよく考えた䞊で、半幎埌に再挑戊したいです。 We are hiring! ニフティでは、さたざたなプロダクトぞ挑戊する゚ンゞニアを絶賛募集䞭です ご興味のある方は以䞋の採甚サむトよりお気軜にご連絡ください ニフティ株匏䌚瀟採甚情報 Tech TalkやMeetUpも開催しおおりたす こちらもお気軜にご応募ください Event – NIFTY engineering ニフティ株匏䌚瀟 – connpass カゞュアル面談も受け付けおいたす ニフティ株匏䌚瀟 – Meety
はじめに こんにちは、䌚員システムグルヌプの䞊原です。 本蚘事ではサヌビスアカりントを䜿ったGoogle Apps Script(GAS)ずGoogle Cloud BigQueryの連携方法を玹介しおいきたす。 やりたいこず 今回、BigQueryを叩いおずっおきたデヌタをスプレッドシヌトにたずめる凊理を行う、GASスクリプトを改修しおいきたす。 GASでBigQueryサヌビスを䜿甚するず簡単にBigQueryを叩けたすが、その際に実行ナヌザヌの暩限が䜿甚されるため、もしもそのナヌザヌが退職した時にスクリプトを実行できなくなっお困りたす。これは特にむンストヌラブルトリガヌで定期実行蚭定しおいるようなスクリプトで問題になりたす (参考: https://note.com/0375/n/n3929ccfca5fc )。 この問題の解決策ずしお、GCPからサヌビスアカりント(アプリケヌション向けのナヌザヌ)を払い出し、GASにその認蚌情報を䜿甚させたす。 これによりサヌビスアカりントで実行されるようになるので、属人化を排陀するこずができたす。 ずいうこずで、GCPから払い出したサヌビスアカりントを䜿っおGASからBigQueryを叩けるようにしおいきたす。 やり方 [GCP] サヌビスアカりントを远加する GCPのIAMず管理でサヌビスアカりントを開きたす サヌビスアカりントの䜜成をクリックし、名前や説明を入力したす。 䜜成しお続行をクリックしたす ロヌルを適甚したす 以䞋のロヌルがあればいいです BigQueryゞョブナヌザヌ(roles/bigquery.jobUser) BigQueryデヌタ閲芧者(roles/bigquery.dataViewer) 完了をクリックしたす [GCP] サヌビスアカりントの認蚌情報を払い出す 再びGCPのIAMず管理でサヌビスアカりントを開き、䜜成されたサヌビスアカりントをクリックしたす キヌタブに切り替え、鍵を远加をクリックし新しい鍵を䜜成をクリックしたす キヌのタむプずしおjsonを遞び䜜成をクリックしたす このタむミングでjsonが勝手にダりンロヌドされるはずです。䞭身を確認するず秘密鍵の内容を芋るこずができたす。 { "type": "service_account", "project_id": "gcp_example_id", "private_key_id": "12345678", "private_key": "-----BEGIN PRIVATE KEY-----\n秘密鍵の䞭身\n-----END PRIVATE KEY-----\n", "client_email": "daily-gas-bigquery@gcp_example_id.iam.gserviceaccount.com", "client_id": "12345678", "auth_uri": "https://accounts.google.com/o/oauth2/auth", "token_uri": "https://oauth2.googleapis.com/token", "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/daily-gas-bigquery%40gcp_example_id.iam.gserviceaccount.com", "universe_domain": "googleapis.com" } この認蚌情報は再発行できない(䜜り盎す必芁がある)か぀GASの蚭定で䜿うので倧切に保管しおおきたしょう。 [GAS] OAuth甚のラむブラリを远加する GASでEditorの画面からLibrariesをクリックしたす。OAuth甚のラむブラリを远加したす。 Librariesをクリックし、Script IDを入力したす。 ScriptIDは以䞋のGitHubレポゞトリに曞いおありたす。2023/09/08珟圚は1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDFです。 https://github.com/googleworkspace/apps-script-oauth2 Lookupをクリック埌Addをクリックしたす。 VersionやIdentifierはそのたたでokです。 [GAS] jsonに曞いおある暩限情報をScript Propertiesに蚭定する Project Settingsに移動しScript Propertiesに倉数を远加したす。 BIGQUERY_CLIENT_EMAILADDRESS サヌビスアカりントのメヌルアドレスダりンロヌドしたjsonのclient_emailに曞いおありたす BIGQUERY_CLIENT_PRIVATEKEY サヌビスアカりントの秘密鍵ダりンロヌドしたjsonのprivate_keyに曞いおありたす [GAS] BigQueryを叩くための関数を远加する editorに戻りbigquery.gsを䜜成したす。 bigquery.gsに以䞋を貌り付け、gcp_example_idの箇所を自分のプロゞェクトIDに盎しおください。 function get_bigquery_service() { // https://github.com/googleworkspace/apps-script-oauth2/issues/122#issuecomment-507436277 // BIGQUERY_CLIENT_PRIVATEKEYの\nが\\nずなっお改行がうたく反映されないため、\\nを\nにreplaceしたす const PRIVATE_KEY = PropertiesService.getScriptProperties().getProperty("BIGQUERY_CLIENT_PRIVATEKEY").replace(/\\n/g, '\n'); return OAuth2.createService("bigquery") .setTokenUrl("https://accounts.google.com/o/oauth2/token") .setPrivateKey(PRIVATE_KEY) .setIssuer(PropertiesService.getScriptProperties().getProperty("BIGQUERY_CLIENT_EMAILADDRESS")) .setPropertyStore(PropertiesService.getScriptProperties()) .setScope("https://www.googleapis.com/auth/bigquery"); } function create_request_option(method, payload) { const service = get_bigquery_service(); if (service.hasAccess()) { return { "method": method, "muteHttpExceptions": true, "contentType": "application/json", "payload": JSON.stringify(payload), "headers": { Authorization: "Bearer " + service.getAccessToken() } }; } else { Logger.log(service.getLastError()); } } function create_query(query) { // https://cloud.google.com/bigquery/docs/reference/rest/v2/jobs/query // TODO: gcp_example_idを曞き盎しおください const url = "https://bigquery.googleapis.com/bigquery/v2/projects/{gcp_example_id}/queries" const payload = { query: query, useLegacySql: false }; const fetch_options = create_request_option("POST", payload) const response = UrlFetchApp.fetch(url, fetch_options) const response_json = JSON.parse(response) Logger.log(response_json) return response_json } function get_query_results(jobId, pageToken) { // https://cloud.google.com/bigquery/docs/reference/rest/v2/jobs/getQueryResults // TODO: gcp_example_idを曞き盎しおください。 let url = `https://bigquery.googleapis.com/bigquery/v2/projects/{gcp_example_id}/queries/${jobId}` if (pageToken != null) { url = `${url}?pageToken=${pageToken}` } const payload = {} const fetch_options = create_request_option("POST") const response = UrlFetchApp(url, fetch_options) const response_json = JSON.parse(response) Logger.log(response_json) return response_json } [GAS] コヌドの修正 BigQueryサヌビスにアクセスする箇所で新芏に䜜成した関数を呌び出すよう眮き換えたす。 BigQueryサヌビスから垰っおくる倀ずレスポンスは同じはずなので、他に修正は必芁ないはずです // BigQueryサヌビスを䜿った堎合の曞き方 // var queryResults = BigQuery.Jobs.query(request, "example-id"); var queryResults = create_query(queryToBigQuery); // BigQueryサヌビスを䜿った堎合の曞き方 //queryResults = BigQuery.Jobs.getQueryResults('example-id', jobId, { // pageToken: queryResults.pageToken //}); queryResults = get_query_results(jobId, queryResults.pageToken); 兞型的には以䞋のようなコヌドになるはずです // BigQueryぞのク゚リを曞く const querytobigquery = "select * from ~~~~"; // BigQueryにリク゚ストを送る var queryresults = create_query(querytobigquery); var jobid = queryresults.jobreference.jobid; // ク゚リが完了するたで埅たないず゚ラヌになる可胜性があるので完了を埅぀ var sleeptimems = 500; while (!queryresults.jobcomplete) { utilities.sleep(sleeptimems); sleeptimems *= 2; queryresults = get_query_results(jobid, null); } // ク゚リの結果からすべおのレコヌドを取埗する var rows = queryresults.rows; while (queryresults.pagetoken) { queryresults = get_query_results(jobid, queryresults.pagetoken); rows = rows.concat(queryresults.rows); } // rowsを凊理しおスプシに入れる (もしあれば)ServicesからBigQueryを削陀したす [GAS] 実行しおみよう 実行しおみる これで自分のアカりントではなくサヌビスアカりントの暩限でBigQueryが叩かれるようになりたす どういった暩限で叩かれおいるかはGCPのログを確認しおみおください これでうたく動くはずですが、うたく動かない箇所があれば、以䞋を確認しおみおください サヌビスアカりントが䜜成されおいるかどうか、足りないロヌルがないか GASに蚭定した認蚌情報が正しいかどうか 最埌に 以䞊、BigQueryをGASからサヌビスアカりントで叩く方法をたずめおみたした。 ネット䞊にある情報を参考にしおも動かなくお困っおいたのですが、この蚘事通りにすれば動くはず…ずいうのをたずめおみたので、もしお圹に立おれば幞いです。 We are hiring! ニフティでは、さたざたなプロダクトぞ挑戊する゚ンゞニアを絶賛募集䞭です ご興味のある方は以䞋の採甚サむトよりお気軜にご連絡ください ニフティ株匏䌚瀟採甚情報 カゞュアル面談も受け付けおいたす カゞュアル面談 Tech TalkやMeetUpも開催しおおりたす こちらもお気軜にご応募ください Event – NIFTY engineering ニフティ株匏䌚瀟 – connpass
むベント抂芁 NIFTY Tech Talkは、ニフティ株匏䌚瀟の瀟員が䞻催するトヌクむベントです。 本むベントでは、ニフティグルヌプの瀟員が業務を通じお孊んだこずを発信しおいたす 第12回目は「スクラム開発の真髄を探る認定スクラムマスタヌ研修参加者が語る成功のカギ」です。 ニフティの認定スクラムマスタヌの䞭から3名が語る回ずなりたす。 【6/27(火) 12:00~】スクラム開発の真髄を探る認定スクラムマスタヌ研修参加者が語る成功のカギを開催したす 【むントロダクション】認定スクラムマスタヌっおなんですか 発衚に入る前に、たずは認定スクラムマスタヌに぀いお説明いただきたした。 資料 【LT1】認定スクラムマスタヌ研修の抂芁ず認定詊隓に぀いお 認定スクラムマスタヌになっおただ間もないずころで、研修や詊隓を受けお思ったこず、感想など。 これから認定スクラムマスタヌを目指す方にずっお参考になる内容かず思いたす。 資料 【LT2】スクラムに向かない情シスチヌムの スクラムマスタヌが CSMを取埗しお2幎の間に思ったこず 講垫からも困難ず認定されたものに果敢に挑み、成果を出した猛者のお話し。 スクラム運営の参考になるこず間違いなし。 資料 【LT3】認定スクラムマスタヌになった埌、A-CSMっお取るべき 認定スクラムマスタヌの次のステップ、アドバンスド認定スクラムマスタヌに興味のある方、取埗を迷っおいる方にずくにみお欲しいず思いたす。 さらに先を目指す方必芋の内容ずなっおおりたす。 資料 たずめ 認定スクラムマスタヌになっおただ間もない方や、スクラムにあたり向いおいない業務に圓おはめおやっおいる方、アドバンスドを持っおる熟緎者たで幅広いお話しが聞けたした。 たた、発衚埌に長めの雑談タむムがありたした。各発衚での質問ず違い、発衚者党員から回答したりなどなど本線に劣らずためになる時間になったのではないかず思っおおりたす。 アヌカむブYouTube 発衚資料Speaker Deck We are hiring! ニフティでは、さたざたなプロダクトぞ挑戊する゚ンゞニアを絶賛募集䞭です ご興味のある方は以䞋の採甚サむトよりお気軜にご連絡ください ニフティ株匏䌚瀟採甚情報 カゞュアル面談も受け付けおいたす カゞュアル面談 Tech TalkやMeetUpも開催しおおりたす こちらもお気軜にご応募ください Event – NIFTY engineering ニフティ株匏䌚瀟 – connpass
ニフティ株匏䌚瀟新卒3幎目のRyommです。 ニフティ株匏䌚瀟ずニフティラむフスタむル株匏䌚瀟の合同で、毎週火曜日に CheesySwift / CheesyKotlin ずいう名前でアプリの勉匷䌚を䞻催しおいたす。 今回は、CheesyKotlinで2回にわたった Compose Animation の勉匷䌚の総仕䞊げずしお行なった  Compose Animation 100本勝負  ã‚’特別に公開したす ぜひ、Compose Animationの腕詊しにチャレンゞしおみおください。 ↓Compose Animation 100本勝負 ↓ https://notion.engineering.nifty.co.jp/posts/cheesykotlin-compose-animation/ We are hiring! ニフティでは、さたざたなプロダクトぞ挑戊する゚ンゞニアを絶賛募集䞭です ご興味のある方は以䞋の採甚サむトよりお気軜にご連絡ください ニフティ株匏䌚瀟採甚情報 カゞュアル面談も受け付けおいたす カゞュアル面談 Tech TalkやMeetUpも開催しおおりたす こちらもお気軜にご応募ください Event – NIFTY engineering ニフティ株匏䌚瀟 – connpass
はじめに こんにちは、IWSです。 少し前になりたすが、5月に瀟内で行われたLT倧䌚に登壇させおいただきたした。 実はこのLTにはVRで参加させおいただいたのですが、せっかくなので、今回はこのVRでLTをしたずきのこずに぀いお曞いおいこうかなず思いたす。 VR で LTっお こんなのです う〜ん、これはあたりにもかわいいですね   バヌチャルな空間でスラむドぱらぱらめくっおLTに登壇できたら絶察かわいくおたのしいよな〜ず思ったので䜜りたした。せっかく買ったのにほこり被り気味なVR機材を䜿っおあげたかったずいうのもありたすが   環境 Unityを䜿っお䜜っおいきたす。VRChatやClusterにも発衚ができるワヌルドはあるのでそれを䜿えば簡単なのですが、せっかくなので自分で䜜っお遊んでみたいず思いたす。 ちなみに環境は以䞋のずおりです。 Windows10 Home Unity : 2019.4.40f1 SteamVR Plugin Final IK HMDVive Cosmos 機胜 VRの郚分の基本的な機胜はSteamVR Pluginを䜿っお䜜っおいたす。 VRでの移動システムなどが入っおいるのでぶっちゃけこれを䜿えば簡単なVRのなにかはすぐ䜜れたりしたす。すごい。 なので、これをベヌスにし぀぀LTに必芁そうな機胜を远加しお行けばよさそうですね。 やっおみたしょう。 移動 せっかくのVRなのに棒立ちずいうのは寂しいので移動は必須でしょう。 SteamVR Pluginを䜿えばテレポヌトによる移動なんかは簡単に実装ができたす。ただ、そのたたでは1人称芖点向けの䞡手だけのモデルになっおおりこれだずかわいくありたせんし、別芖点から芋おも䜕をしおいるのか分かりづらいです。ですので、こちらで甚意したかわいいモデルずテレポヌトを組み合わせおみたしょう。 テレポヌト甚のオブゞェクトやスクリプトを読み蟌んでモデルず組み合わせお   できたしたテレポヌト移動です   あられもない姿になっおたすね 珟圚地からテレポヌト先たでモデルが䞀歩で移動しようずしおるみたいです。 本圓はVRChatのテレポヌトのような、移動先に向かっおモデルが移動→自分の芖点をモデルの䜍眮たでテレポヌトさせる。みたいなこずをしたかったのですがうたくいっおたせん  。 Unityド初心者には少し難しかったみたいです   今は代わりにコントロヌラヌのスティックでずこずこ歩くようにしおおきたしょう。 スラむド LTなので圓然スラむドなりの資料をどう衚瀺しお送るかを考える必芁がありたすね。 たず思い぀くのはボタンを抌すずスラむドが切り替わるタむプでしょうか、これでもいいですがVRなのに普通のプレれンずあたり倉わらないものになっおしたうのは぀たらないですね  。なにか面癜い芁玠を入れたいずころです。   ず、考えおできたのがこちらです。 豪快にめくりたす。 ここは玙芝居圢匏にしおみたした。むンパクト抜矀で動きを取り入れるこずもできる個人的にお気に入りの郚分です。めくったスラむドがゎミずしお右埌ろに溜たっおいたすがこれはこれで味があるのでいいなず思っおいたす。 かわいいずすべお蚱される。 カメラ Unityの映像をどうやっお共有配信するかも考える必芁がありたすね。 UnityCaputureずいうのを䜿えばUnity内のカメラの映像を仮想カメラずしお取れそうなのでこれを䜿っおいきたしょう。Unity内で配信甚カメラを配眮しおスクリプトを蚭定したす。 映像を取るこずができるようになったらあずはOBSなどで受け取れば配信や画面共有なども簡単にできたすね。 ぀いでに、実際の映像が芋れるず自分の動きも取りやすくなるのでUnity内で自分の䜍眮から芋えるように映像を衚瀺しおおきたしょう。 正面にディスプレむを眮いお先皋の映像を出すようにしおみたした。これで動きの確認や今どのスラむドが芋えおいるかもミラヌになっおるけどわかりやすくなったず思いたす。 タむマヌ 移動やスラむドの機胜ができお最䜎限LTはできるようになりたした。ここからはオマケ䟿利機胜を䜜っおいきたす。 瀟内LTでは5~7分の登壇時間がありたすが、HMDを被った状態だず今䜕分経ったのかずいうのが分かりたせん。なので、バヌチャル空間の䞭にタむマヌを出しおみたしょう。 確認モニタヌの䞊にタむマヌを、手元にスタヌト/ストップのボタンを眮いおみたした。 青がタむマヌスタヌト/ストップ、赀がタむマヌリセットになっおいたす。 しっかり動きはするのですが、ちょっず觊れただけで止たったりリセットされたりしおしたう繊现肌になっおしたったのは内緒です  。 コメント LT䞭はSLackが実況チャンネルずしお動いおいるのですが、HMDを被っおいるずSlackが芋れず反応が党くわからないのが少し寂しく感じたした。 なんずか反応を芋れるようにしたいな〜ず思ったのでコメント欄を䜜っおみたした。     はい、にせコメント欄です。 Slackの実況チャンネルからコメントを持っおくるのは色々あっお難しかったため、流れおいるのは自分で甚意したテンション爆アゲコメントです。LT䞭に芖界に入るず「ふふっ  」ずなるので䜜っおよかったですね。 い぀か本物のコメント欄に進化するずきがくるかも   党䜓 色々䜜っおみたしたが党䜓はこのような感じになっおいたす。 スラむドの巊偎を基本立ち䜍眮ずしおいたす。正面にはタむマヌのボタンが、向かい偎にはカメラやタむマヌ、コメント欄などが眮いおあるずいった感じですね。 そしお床には  おもちゃが散らかっおたす。ずきおり投げお遊んだり  。 䜿っおみおどうだったか VRを䜿ったLTをいたたで2回やったのですが、どちらもずおも楜しかったです。芋おいる人からも奜評でした。 オンラむンだず難しい身振り手振りもVRであればできたすし、そもそもこんなにかわいい姿でLTができるのに楜しくないわけがないですね 今はただスラむドをめくるぐらいしかVR特有の動きがありたせんが、他にもサヌビスアむコンをならべお動かしおリアルタむムで構成図を倉えお説明するみたいな事もできたら面癜そうですし、いろいろな可胜性がありそうです。 最埌に ずいうわけでVRでLTをしたずきのお話をさせおいただきたした。コヌド実装なんかの話はできたせんでしたが、この蚘事でVR LTに興味を持っおいただけたら幞いです。 ちなみにこのVRLTの今埌ですが、実は「HaritoraX ワむダレス」ずいうフルトラッキング機材を賌入したした。なので、次回たたLTをするずきはフルトラッキングで動けるようにした状態でやりたいですねフルトラッキングで動くのも楜しみです クレゞット LT、およびブログの執筆においおこちらのモデルを䜿わせおいただきたした。 オリゞナル3Dモデル「ミヌシェ」 – ポンデロニりム研究所 オリゞナル3Dモデル「桔梗」 – ポンデロニりム研究所 We are hiring! ニフティでは、さたざたなプロダクトぞ挑戊する゚ンゞニアを絶賛募集䞭です ご興味のある方は以䞋の採甚サむトよりお気軜にご連絡ください ニフティ株匏䌚瀟採甚情報 カゞュアル面談も受け付けおいたす カゞュアル面談 Tech TalkやMeetUpも開催しおおりたす こちらもお気軜にご応募ください Event – NIFTY engineering ニフティ株匏䌚瀟 – connpass
はじめに こんにちは。新卒4幎目の倧里です。 7/11に行われたレバレゞヌズ x ココナラ x ニフティ 合同フロント゚ンド勉匷䌚に参加したしたので感想を曞きたす。倖郚の勉匷䌚に初めおの参加ず発衚だったため、勉匷䌚に参加したこずがない方、発衚したこずがない方の参考になれば幞いです。 レバレゞヌズ x ココナラ x ニフティ 合同フロント゚ンド勉匷䌚ずは この勉匷䌚は名前の通りレバレゞヌズ株匏䌚瀟様、株匏䌚瀟ココナラ様、ニフティ株匏䌚瀟の瀟員がフロント゚ンド開発に぀いお自由なテヌマでLTをするオンラむンの勉匷䌚でした。詳现は connpass を参照しおください。 なぜ勉匷䌚に参加&発衚しようず思ったか 瀟倖の゚ンゞニアの勉匷䌚の雰囲気を぀かみたかった 独孊で本を読むなどをしおデザむンを少し勉匷しおきたのですが、独孊以倖の勉匷方法ずしお瀟倖の勉匷䌚に参加するこずの効果や意矩を知りたくお参加したした。同僚から瀟倖の勉匷䌚に参加した話を聞いおみお面癜そうず思ったのですが、どの点がどう面癜そうかが自分で腑に萜ちおおらず実際に䜓隓しおみお違いを感じ取ろうず思いたした。 この勉匷䌚に参加したのは、他の勉匷䌚よりも気楜に参加できるように感じたためです。䌁画者が瀟内の勉匷䌚ず同じように気楜に発衚ができる雰囲気になるよう工倫しおくださりたした。おかげさたで気分転換初めお瀟倖勉匷䌚に参加や発衚するずきにハヌドルが高くないように感じ、この勉匷䌚に参加したした。 通垞業務ずは別の業務を䞊行で実行したかった 圓時、事業案件や運甚などの通垞業務がうたくいかないこずが倚くモチベヌションが䞋がっおおりたしたが、通垞業務ずは別の業務をしおみるこずでモチベヌションが䞊がる可胜性があるず仮説を立おたした。通垞業務のみを遂行しおいた堎合、通垞業務がうたくいかなかった時にマむナスの気持ちになるこずが倚く、このたたの状態が続くずモチベヌションの䜎䞋になりうるず考えたした。しかし、別の業務も行った堎合にプラスのこずが起きおいればモチベヌションが安定する可胜性があるず思いたした。この仮説が成立するのであれば、今埌の業務でモチベヌションを保おるように、通垞業務ずは別の業務を遂行するこずを意識しおいきたいずいう意図がありたした。 参加した感想 良かったこず 他䌁業の実際の業務で、どのように技術を䜿っおいるかを知るこずができた 独孊ず瀟倖の勉匷䌚の違いを倧きく感じられた点でした。担圓業務ではバック゚ンドの業務が䞭心で、少しフロント゚ンド偎でデザむンの修正をする皋床でした。勉匷䌚ではフロント゚ンドのパフォヌマンスの改善など、業務で觊れたこずのない分野で他瀟がどれだけ工倫をしおきたかを知るこずができたした。デザむンのみを独孊しおいた時よりも、フロント゚ンドに察する芖野が広がったように思いたす。 事業案件や運甚などの通垞業務ずは別軞の業務をしお気分転換になった 勉匷䌚の準備の際は自分の責任で自分の奜きなように発衚内容を考えられるこずや締め切りに远われおいるずきなど、孊生の時の文化祭の前準備や研究のデモの準備に近い状況があったため楜しかったです。通垞業務の䞭でプレれンテヌションをする機䌚はあたりないため、普段はあたり䜿わないけれど瀟䌚人ずしお必芁なスキルに぀いお考えるきっかけになりたした。通垞業務をする䞊であたり意識できおいなかったため、新鮮な気持ちになりたした。 瀟倖勉匷䌚の雰囲気が分かっお安心した 勉匷䌚の準備をする時間はどういった発衚をすればよいか分からず䞍安な気持ちもありたした。しかし、勉匷䌚で発衚したり他の人の発衚を聞いおみたりするこずで瀟倖の勉匷䌚の雰囲気が少し分かった気がしたす。そのため勉匷䌚の雰囲気を知らなかった今回の発衚準備の䞍安よりは、今埌の発衚を準備するずきの䞍安は軜くなるず思いたした。 他䌁業の゚ンゞニアの話すこずが想定したよりも楜しかった 就掻時代に様々な䌁業で働いおいる方ずお話したしたが、自分が働きだしおから他の䌁業の方ずお話をするず解像床が高くなるこずを実感できたした。フロント゚ンドの勉匷䌚でしたが、各䌁業のプロゞェクトの進め方や䜿甚する蚀語の遞定方法など、各䌁業の業務の進め方をお䌺いするこずができお楜しかったです。瀟内で働いおいお知るこずができなかった他䌁業の働き方を知るこずができたため、自分のキャリアを芋぀め盎すきっかけにもなりたした。 反省点 勉匷䌚の準備を蚈画的にできず䜓力的にき぀かった 理想は業務時間内に勉匷䌚の準備の時間を取っお通垞業務ず進められるこずでしたが、蚈画性がなく残業時間を䜿っお勉匷䌚の準備をしおしたいたした。残業しお勉匷䌚の準備をするのは䜓力的に厳しかったため、通垞業務ずのバランスのずり方が今埌重芁になっおくるず思いたした。 たずめ 初めお瀟倖の勉匷䌚に参加しおみたしたが、他瀟の業務や開発で気を付けおいるこずを知れたこずが新卒からニフティに入っおきた身ずしお、ずおも新鮮でした。想定しおいた瀟倖勉匷䌚のメリットより倚くのメリットがあるこずが実感できおよかったです。 We are hiring! ニフティでは、さたざたなプロダクトぞ挑戊する゚ンゞニアを絶賛募集䞭です ご興味のある方は以䞋の採甚サむトよりお気軜にご連絡ください ニフティ株匏䌚瀟採甚情報 カゞュアル面談も受け付けおいたす カゞュアル面談 Tech TalkやMeetUpも開催しおおりたす こちらもお気軜にご応募ください Event – NIFTY engineering ニフティ株匏䌚瀟 – connpass
はじめに こんにちは。䌚員システムグルヌプの枡邊です。 Google Analyticsのナニバヌサル アナリティクスUAが2023幎7月1日をもっおサポヌト終了した圱響で、Googleアナリティクス4GA4ぞの移行ずUAず連携しおいたBIツヌルの倉曎が必芁になりたした。 移行埌のBIツヌルずしお採甚したLooker StudioずGA4の連携方法ず、期間別にナニヌクナヌザヌUUを出しおいるずきに発生したハマりポむントをたずめたした。 やりたいこず GA4に蓄積しおいるUU数を期間別月、週、日に分けおグラフで芋れるようにしたい 準備 Looker Studioでレポヌトを䜜成する デヌタに接続でGoogle アナリティクスを遞択 Googleアカりントに連携されおいるGAのアカりントが衚瀺されるので、期間別に分けたい情報を持っおいるアカりントを遞択する これで準備完了です。 グラフで芋れるようにする 月別 グラフを远加 を抌し、瞊棒グラフを遞択する 䜜成したグラフを遞択し、蚭定を以䞋のように倉曎する 蚭定 ディメンション 月 指暙 アクティブ ナヌザヌ数 䞊び替え 月 デフォルトの日付範囲 カスタム今幎 週別 ハマりポむント デフォルトの蚭定では集蚈察象の週の最倧倀を取るようになっおいるため、週単䜍の集蚈はGA4の倀ず合臎したせん。 実際には週の終わりの倀を取るのが正しいので、週の集蚈期間を週の終わりである日曜日に指定するフィルタヌを远加するこずで察応したした。 䞋の画像のようにフィルタヌを蚭定しないず差が生じるこずがわかりたす。 蚭定 ディメンション ISO幎のISO週 週 ずいうディメンションでも同じ倀になるが、1幎における䜕呚目ずいう衚瀺になるので分かりづらい 指暙 7日間のアクティブ ナヌザヌ数 䞊び替え ISO幎のISO週 フィルタヌ 䞀臎条件→曜日→次に等しい→1 週の終わりである日曜日1 日別 蚭定 ディメンション 日付 指暙 1日のアクティブ ナヌザヌ 䞊び替え 日付 デフォルトの日付範囲 カスタム今幎 これで期間別のグラフは完成です。 たずめ GA4は具䜓的な集蚈方法が公開されおいないので、GA4に衚瀺されおいる倀がどの項目を芋おいるかを探り圓おるのに時間がかかりたした。 GA4ずLooker Studioを連携するず GA4で持っおいる现かいデヌタ を芋るこずができるので、分析の幅が広がりたすが、倚機胜なので慣れるたでには時間がかかるず思いたした。 We are hiring! ニフティでは、さたざたなプロダクトぞ挑戊する゚ンゞニアを絶賛募集䞭です ご興味のある方は以䞋の採甚サむトよりお気軜にご連絡ください ニフティ株匏䌚瀟採甚情報 Tech TalkやMeetUpも開催しおおりたす こちらもお気軜にご応募ください Event – NIFTY engineering
はじめに むンフラシステムグルヌプ ISPオペレヌションサブチヌムの藀川です。 ニフティが皆様の目に觊れる際にISP(Internet Service Provider)ず呌ばれる機䌚も枛っおきお少し寂しいずころもありたすが、本業は回線提䟛であるず䞻匵したす。 総務省のレポヌト “ https://www.soumu.go.jp/main_content/000861552.pdf ” でもあるずおり、むンタヌネットのトラフィックは幎々増え続け、それはむンタヌネットで出来るこずが幎々広がっおきた軌跡ですね。 私が所属するISPオペレヌションの業務はそんなむンタヌネット回線が日々快適に䜿えるよう関係各方面ず調敎を続ける仕事です。 高トラフィックむベントずは 回線運甚で頭を悩たすのはリアル䞖界やむンタヌネット界隈で発生するむベントがきっかけで発生する䞀時的な高トラフィックです。 たずえば台颚・地震などの灜害が発生したずきの情報収集や安吊確認、たずえばスポヌツの䞖界倧䌚やボクシングのタむトル戊など優秀な日本人遞手が掻躍する詊合、たずえば参加者が倚い芇暩ゲヌムの倧芏暡アップデヌト、たずえば皆さんがお䜿いのパ゜コンのOS定䟋アップデヌトなどにあたるず䞀斉に通信をしたすので党䜓の通信量は膚倧な倉化ずなりたす。 みなさたもむンタヌネットを䜿っおいお「今日は重いな」ずか、「秒でも早くダりンロヌド終わらせお新しいゲヌムを始めたいのになかなかDL出来ない」など、日によっお回線が遅いこずを感じたこずは無いでしょうかそういったこずを私たちは高トラフィックむベントず呌んでいたす。 これに備えるために囜内では総務省の音頭でCONECTずいう協議䌚掻動 “ https://www.soumu.go.jp/menu_seisaku/ictseisaku/conect/index.html ” があったり、匊瀟でもナヌザヌサポヌト・サヌビス䌁画・回線運甚の各チヌムで情報のキャッチアップず事前の察策怜蚎を進めおいたす。 ゲヌムのアップデヌトを予枬する 高トラフィックむベントの察応に忙殺させられる䞭で、ふず過去の履歎を振り返るずアップデヌトには芏則性があるように感じたした。 埓来、定期的に高トラフィックが発生しおしたう察象ずしお有名なOSのアップデヌトは提䟛元が幎間スケゞュヌルを予告しおくださるので助かっおいたすが、ゲヌムのアップデヌトは気づいたら提䟛が始たっおいお圓日になっお慌おお察応する認識でした。 そういうこずで、圱響が倧きいゲヌムをいく぀かピックアップしお日時を確認するず、だいたいか月呚期でメゞャヌアップデヌトず呌ばれる倧容量ファむルのダりンロヌドがあり、その合間に繰り返しマむナヌアップデヌトがありたした。 詳现に芋おみたしょう、、、、 ゲヌムの堎合 ずあるゲヌムのバヌゞョン番号を時系列にしたのが図です。すごく䞀盎線ですね。時々ある段差も気になりたす。すべおのファむルサむズを蚘録できおいればよかったのですが、盎近数件のみです。党䜓の角床が䞀定ず蚀うこずは、メゞャヌアップデヌトは䞀定間隔で実斜されおいるこずになりたす。 グラフで確認するのは良くないようですので、諊めお衚で確認したす。 このように俯瞰するずか月おきにメゞャヌアップデヌトがあり、その間はばら぀きがあるものの、平均週間おきにマむナヌアップデヌトを提䟛しおいるようです。たた、マむナヌアップデヌトは火曜、メゞャヌアップデヌトは週末が倚い様でした。 前埌のファむルサむズから想像するず、ばら぀きの原因はスケゞュヌル遅延でしょうか。お疲れさたです。 こちらのゲヌムのマむナヌアップデヌトはファむルサむズが小さい事が倚く安心ですが、メゞャヌアップデヌトは数GBのサむズがありたす。そのうえ、このゲヌムはお子様から倧人たで幅広い幎霢局に愛されおいおトラフィックむンパクトが倧きいです。こういう時こそ快適に利甚しお頂きたいから非垞に頑匵りがいがありたす。 ゲヌムの堎合 たた違うゲヌムを確認したす。 ずあるメゞャヌタむトルのアップデヌト日時ずなりたすが、幎回のメゞャヌアップデヌトに加え、マむナヌアップデヌトが定期的にありたす。日付はバラバラに芋えたすが、右欄を芋るず週間隔で氎曜日にリリヌスしおいるこずがわかりたす。 このゲヌムはファむルサむズが毎回10GB前埌ず倧きいから倧倉です。 おわりに このように、䞖の䞭で倧勢の方に愛されるOSやゲヌムは、ある皋床各瀟のポリシヌに埓っお提䟛されおいるこずがわかっおきたした。 少し前にサスティナブルず蚀う蚀葉が流行っおおりたしたが、持続的にリリヌスをしおナヌザヌの期埅を裏切らず、サヌビスを維持する実瞟には脱垜する限りです。きっずこのような開発を実行するためにアゞャむル開発ずいうものが重芖されおいるのでしょう。 䜿う人のニヌズが無ければ必芁ずされない通信むンフラですのでアップデヌトで必芁ずされるのは本望ですが、提䟛偎にはサむズ軜枛を、ナヌザヌの方々には混雑しおいない時間垯にダりンロヌドしお頂くず、䞭の私たちがちょっずだけ幞せになれたす。 We are hiring! ニフティでは、さたざたなプロダクトぞ挑戊する゚ンゞニアを絶賛募集䞭です ご興味のある方は以䞋の採甚サむトよりお気軜にご連絡ください ニフティ株匏䌚瀟採甚情報 Tech TalkやMeetUpも開催しおおりたす こちらもお気軜にご応募ください Event – NIFTY engineering ニフティ株匏䌚瀟 – connpass カゞュアル面談も受け付けおいたす ニフティ株匏䌚瀟 – Meety