Wedding Parkり゚ディングパヌクのブログ - TECH PLAY

TECH PLAY

Wedding Parkり゚ディングパヌク

Wedding Parkり゚ディングパヌク の技術ブログ

å…š206ä»¶

こんにちは。新卒2幎目゚ンゞニアのダテです。 今幎も4月半ば〜7月にかけお新卒゚ンゞニア研修を実斜したした。 今幎は、新卒研修の定矩〜内容を考え盎すリニュヌアルプロゞェクトを行いたした。 今回はその研修リニュヌアルプロゞェクトの裏偎をPMを努めた自分からお話したいず思いたす 目次 研修の目的を再定矩 目的や基瀎知識の现分化 昚幎たでの研修ず现分化した目的の比范 倉曎点の玹介 たずめ 研修の目的を再定矩 研修内容をリニュヌアルするにあたり、最初に行ったのが研修での目的を再定矩するこずです。 昚幎たでは「新卒゚ンゞニアの即戊力化」を目的に研修が行われおいたした。 今回も、「即戊力化」ずいう点は匕き続き研修の目的ずしお考えおいたした。 ただ、新卒がどのような状態になっおいれば「即戊力」なのかがフワッずしおいたので、「即戊力」の状態をプロゞェクトメンバヌで話し合い、決たった内容を研修の目的ずしお再定矩したした。 再定矩した研修の目的は䞋蚘の2぀になりたす。 ゚ンゞニアずしおの基瀎知識を獲埗できおいるこず 配属先チヌムにお、開発工数3人日皋床の案件に察しお䞍安なくチャレンゞができる状態 研修の目的のうち、案件に察する䞍安は技術に察する䞍安ず通ずる芁玠が倧きいため、 今回の研修リニュヌアルでは「゚ンゞニアずしおの基瀎知識を獲埗するこず」に泚力 しおいくこずに決めたした。 目的や基瀎知識の现分化 続いお行ったのが、䞊蚘で定めた研修目的の现分化です。 研修の目的ずしお定めた「゚ンゞニアずしおの基瀎知識」のたたでは抜象的だったため、研修内容を考えられる粒床たで「基瀎知識の现分化」を行いたした。 现分化は「 ここたで知っおいれば案件に取り組める 」ずいう軞で、匊瀟で利甚しおいる各蚀語、プロダクトを運営しおいく䞊で必芁な知識セキュリティ、パフォヌマンス等それぞれで行いたした。 现分化の䜜業は、プロゞェクトメンバヌに加えお、各技術においお専門的な知識を持っおいる゚ンゞニアにもヒアリングを行ったりしながら総力戊で進めおいきたした。 以䞋は现分化を進めおいる時の衚の䞀郚です。 各技術の基瀎知識を现分化したこずで、それたでふわっずしおいた研修のゎヌルむメヌゞがぐっず具䜓的になりたした。 たた、個人的にも现分化したものをすべお理解できおいるかず圓時の自分を振り返る機䌚にもなりたしたのでプロゞェクト的にも、個人的にもずおも重芁な時間だったず思いたす。 昚幎たでの研修ず现分化した内容の比范 现分化䜜業を終えたのち、具䜓的に研修内容を考えおいくフェヌズに入っおいきたした。 今回の研修リニュヌアルは 昚幎たでの良い点を残し぀぀、倉えたほうが良さそうな郚分を重点的に倉える方針 で進めおいきたした。 理由ずしおは、䞊蚘の现分化䜜業をする䞭で、「ここらぞんは昚幎たでの研修でしっかりず教えおもらっおいたな」ずいうシヌンが倚く芋られたので、党おを倉えるよりも良いずころは残し぀぀倉えるべきずころを倉えたほうが良い効果が期埅できるず考えたからです。 昚幎たでの各゚ンゞニア研修の内容ず现分化した内容を䞀぀䞀぀照らし合わせお、 「倉えた方が良さそうなずころ」「昚幎たでの研修でも十分だけど、倉えたらもっず良くなりそうなずころ」 を掗い出し、プロゞェクトメンバヌでどのような研修内容にすればよいかを話し合っおいきたした。 倉曎点の玹介 今回は䞊蚘の比范のもず、倧きく倉曎したものを2぀玹介したいず思いたす 1぀目は オンラむン教材の利甚 です。 今回、PHP(Laravel), Go蚀語, MySQLずいった匊瀟で利甚しおいる蚀語の研修でオンラむン教材の ドットむンストヌル を利甚したした。 ドットむンストヌルは数倚くの蚀語をサポヌトしおおり、基本的な蚀語知識に関するレッスンに加えお、webサヌビスを開発できるレッスンも甚意されおいたす。 ドットむンストヌルを採甚した理由も、 匊瀟で利甚しおいる各蚀語のレッスンが䜓系的に甚意されおいた からです。 加えお、各レッスンの最初に 開発環境のセットアップに぀いお䞁寧に説明されおいる点 も採甚した理由になりたす。 開発環境のセットアップに぀いおは、毎幎時間を取られるこずが倚く研修担圓者からも「苊劎した」ずいう声が䞊がっおいたので、孊習の質を担保し぀぀、担圓者の負担を軜枛するこずができるのは倧きなメリットがあるず考えたした。 2぀目の倉曎点は チヌム開発の前倒し です。 昚幎たでチヌム開発研修前に行っおいたWedding Parkサむトの改善提案を行う研修をなくしたした。Wedding Parkは15幎以䞊運営しおいる倧芏暡サむトのため、小さな倉曎でも圱響範囲が倧きくなりたす。 そうするず、期間や技術などの問題で改善提案が小芏暡になっおしたうこずがしばしばありたした。 そこで、チヌム開発研修を前倒ししお、孊んだ蚀語の基本を最倧限掻甚しお自由に開発を行うこずで、孊びの質の最倧化を図りたした。 チヌム開発研修の党瀟向けのプレれン䌚では、党瀟から拍手喝采をもらうほどのアりトプットをしおくれたした チヌム開発での孊びに぀いお 新卒が執筆しおくれる蚘事 も公開しおたす たずめ 今回は、今幎の研修をどのように䜜ったのかの過皋の話をしたした。 研修リニュヌアルプロゞェクトの過皋で䞀番良かったず感じおいるのは「 基瀎知識の现分化 」の過皋です。 现分化したこずで今幎の研修を考える䞊で昚幎ず比范がしやすくなったのはもちろんですが、 现分化した基瀎知識は来幎以降の研修を倉えるずなった時にも䜿える 定矩ができたず思いたすし、 若手゚ンゞニアが自分の技術を芋盎す軞 にもなったず思いたす。 ただ、技術はどんどん進歩しおいくので郜床曎新しながら、匊瀟における「基瀎知識」を定矩し続けられればず思いたす  
こんにちは。新卒1幎目゚ンゞニアのririです。 私は新卒研修の䞀環で5月から玄3ヶ月間、合同開発に取り組みたした。 今回は、䌁画・仕様フェヌズに焊点を圓おお、やっおよかったこず・苊劎したこずをたずめたした。これから䌁画・仕様曞䜜成にチャレンゞするずいう方の参考になれば幞いです。 目次 新卒合同開発に぀いお 䌁画曞䜜成 仕様曞䜜成 おたけサヌビス名 たずめ 新卒合同開発に぀いお たず、新卒合同開発ずは䜕かに぀いお説明したす。 入瀟しお基瀎的な研修を受けた埌、新卒クリ゚むタヌチヌム゚ンゞニア2人、デザむナヌ1人で、玄2ヶ月間合同開発を行いたした。お題は、 Googleスラむドで管理しおいる瀟員のプロフィヌル自己玹介仕事玹介をシステム化する ずいうものです。コンセプトを0から緎り、4日間で䌁画曞䜜成・決裁、3日間で仕様曞䜜成・決裁を行いたした。 䌁画曞䜜成 どんな方向性で、䜕を実珟するのかそれは本圓に仕事ずしおやる意矩があるのか ずいう点をたずめ、決裁をもらうために䌁画曞を曞きたした。具䜓的には、䞎えられたお題をもずに、背景の敎理、実際に䜜るシステムのコンセプトず党䜓像、想定効果を盛り蟌みたした。 やっおよかったこず  1. アンケヌトを実斜し、珟状の課題感を把握した 瀟員の方々に䜿い心地・䜿う頻床、感じおいる䟡倀などをアンケヌトするこずで、 珟状の課題を具䜓的に把握 するこずができたした。たた、䌁画曞プレれンの際にも、 明確な根拠を持っお「やる意矩」を瀺す こずができたした。 2. そのサヌビスが䜿われた先、どんな状態になっおいるのかたで想像した 「今この課題があるから、解決したす」で終わらず、 「課題解決するこずで生み出される䟡倀ずは䜕か」 たで考えたした。 今回は、システム化するこずで利䟿性を向䞊し、その䞊で「瀟員が誰かずの共通点を芋぀けにいくこずを促し、心の距離を瞮めるこずができる」ずいう䟡倀の創造を目指したした。それをプロダクトのコンセプトずしお萜ずし蟌むこずで、玍埗感のある䌁画曞になりたした。 䌁画曞の䞀郚※䞀郚改倉しお掲茉 3. 䌁画提案時には簡単なプロトタむプを䜜成し、むメヌゞを具䜓的に䌝えた 䌁画曞では提案した背景やコンセプトだけでなく、簡単なプロトタむプを䜜成し、珟時点で考えおいるシステムの党䜓像も䌝えたした。その結果、機胜を実珟する䞊で考慮すべき点など珟実的か぀具䜓的なフィヌドバックをもらうこずができたした。 苊劎したこず 1. 事実ず仮説の切り分け 珟状を敎理するためにアンケヌトを実斜したものの、その結果からわかる事実ず仮説の切り分けが難しかったです。 事実 数倀でわかるこず数・割合 仮説 事実をもずに、本圓はどうあっお欲しいのかを掚枬するこず 話し合いを進める䞭で認識の違いに気づき、先茩ディレクタヌに質問するこずで解決できたため、認識が揃った状態で議論を進めるこずができたした。悩んだら ずりあえず先茩に聞いおみる がオススメです。 2. 今あるモノの良さを、どうシステム䞊で残すか プロフィヌルスラむドに関しおは「利䟿性はむマむチだけど、瀟員が自由にアレンゞできる」ずいう特城があり、そこに瀟員の個性が衚れおいたした。 䌁画の決裁においおは、 入力圢匏が決たっおいるシステム䞊では、操䜜の自由性・瀟員の個性が倱われおしたう負の偎面も考慮しなければならない、 ずいう点をご指摘いただきたした。 䜜っお終わりではなく、䜿っおもらっお初めお䟡倀が生たれたす。システムによる制玄があっおも 「こんなのだったら自然ず芋たくなる、楜しくなるもの」 を培底分析したした。 最終的に、プロフィヌル衚瀺画面にスラむドショヌ圢匏のコヌナヌを䜜り、「䜿いたい他の人のも芋たい」ずなるような仕掛けを䜜りたした。 䌁画曞の䞀郚※䞀郚改倉しお掲茉   仕様曞䜜成 䌁画の決裁をいただいた埌、仕様曞䜜成に向けおシステムの现郚を怜蚎したした。 研修期間䞭、新卒クリ゚むタヌ同士䞀番密床濃く議論したのは仕様曞䜜成のずきでした。 やっおよかったこず 1. 仕様曞で説明する項目に぀いお、あらかじめ共通認識を合わせる 今回は分担しお資料䜜成するこずになったため、怜蚎事項に挏れがないよう、以䞋の項目を蚭定しおチヌム内で認識を合わせたした。 衚瀺条件  その画面・察象が衚瀺される条件 凊理条件  考えられる凊理ずその条件 入力項目/衚瀺項目  入力フォヌムの項目/衚瀺される項目の圢匏などを定矩 抌䞋アクション  ボタンや入力欄などのアクションを定矩 テスト芳点  どのようなこずをテストするか画面単䜍で蚘したした その結果、「このペヌゞではこの項目に觊れおいるのに、他のペヌゞでは觊れおない」ずいった挏れが少なく枈みたした。 2. 指摘箇所の差分をわかりやすく衚瀺 フィヌドバックをもずに仕様を修正した際は、倉曎前・倉曎埌を比范しやすい資料づくりを心がけたした。仕様曞のペヌゞ数も倚かったため、前回どんな指摘を受けお、どんな倉曎をしたのかをわかりやすくたずめおよかったです。 苊劎したこず 1. 膚倧な怜蚎項目を短い時間でたずめきるこず 仕様を決めるにあたっお怜蚎すべき項目がたくさんあり、話し合いながら資料に萜ずし蟌むこずが倧倉でした。埌の開発フェヌズでも実感したのですが、以䞋の項目は特に、この段階で十分に怜蚎しおおくべきだず思いたす。 画面遷移ずURL 数倀幎、入力文字数の閟倀 衚瀺順、衚瀺件数 センシティブな情報ぞの配慮 入力倀のバリデヌションどんな倀・条件を蚱容するのか 機胜の優先順䜍実装の優先床をコンセプトに基づいお決める たた、今回は仕様曞の曎新を怠っおいたこずが原因で、開発䞭にチヌム内で再議論する…ずいうこずがかなり倚く、時間のロスでした。仕様曞は垞に最新の状態にずいうこずは今埌しっかり意識したいです。 2. 仕様の䌝え方 チヌム内の議論で共通認識を合わせるこずに泚力した結果、他者に䌝える際に芖点の切り替えができおいたせんでした。 蚀葉のわかりやすさ・党䜓像の把握のしやすさ・画面・機胜を説明する順番は、䌝える前に改めお確認する ず良いです。现かい仕様を効率よく䌝え、決たった時間内で十分に怜蚎しおもらうためにも、䌝える際の配慮は非垞に重芁だず感じたした。 おたけネヌミング 先茩方のアドバむスのもず、サヌビスのネヌミングにはかなりこだわりたした。思いのほか時間を費やしおしたったのですが、その分思いのこもったネヌミングにできたした。 同期のデザむナヌが「 ワクワクしながら䜿っおもらう 」ずいう芁玠をプラスしおロゎ・サむトデザむンを䜜っおくれたこずもあり、どんどん愛着が湧き、私自身ワクワクしながら開発できたした サヌビスのロゎ たずめ 新卒1幎目゚ンゞニアが初めお䌁画・仕様曞を䜜成する䞭でやっおよかった・苊劎したポむントをたずめおみたした。 䌁画・仕様曞は蚭蚈・開発で迷った際の指針ずなる資料 で、非垞に重芁なものだず実感したした。劥協せず、チヌム内でがっ぀り議論したこずで、その埌の開発では共通認識を持ち、 郜床コンセプトに立ち返りながら開発 するこずができたした。 たた、クリ゚むタヌずしお䌁画段階から考え、開発に挑むこずができた経隓は非垞に貎重だったず感じおいたす。 結婚の幞せぞ、たっすぐに進めるデゞタルを。 匊瀟の䞭期ビゞョンです。「アナログな仕組みをデゞタル化する」にあたり、今あるモノを受け入れおもらう圢に倉えるこずの倧倉さを実感したした。単玔ではない、だからこその面癜さがあるのだず孊びたした
こんにちは゚ンゞニアの久保です。 2021/9 より AWS Lambda の動䜜環境ずしお、Arm/Graviton2 プロセッサが遞択できるようになりたした。 AWS Graviton2 プロセッサを搭茉した AWS Lambda 関数 – Arm で関数を実行し、最倧 34% 優れた料金パフォヌマンスを実珟 これたでは X86 プロセッサだけだったのですが、Arm/Graviton2 を遞択するこずで䜎コストで高パフォヌマンスを実珟できたす。匊瀟でも珟圚 X86 で動䜜しおいた Lambda を Arm での動䜜ぞ眮き換えを進めおいたす。 今回は Lambda を Arm プロセッサで動䜜させる堎合の SAM テンプレヌトをご玹介したす。 SAMテンプレヌトを曞き換え Arm プロセッサで動䜜可胜にする SAM テンプレヌトの template.yml を次のように曞き換えお Arm プロセッサで動䜜するようにしたす。 具䜓的には2点を倉曎しおいたす。 Architectures を X86_64 から arm64 ぞ倉曎する Lambda Insights を有効にしおいる堎合は、Arm に察応したものぞ倉曎する AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: > sam-app Sample SAM Template for sam-app # More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst Globals: Function: Timeout: 3 Tracing: Active Layers: # - !Sub "arn:aws:lambda:${AWS::Region}:580247275435:layer:LambdaInsightsExtension:25" - !Sub "arn:aws:lambda:${AWS::Region}:580247275435:layer:LambdaInsightsExtension-Arm64:2" Api: TracingEnabled: True Resources: HelloWorldFunction: Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction Properties: CodeUri: hello-world/ Handler: app.lambdaHandler Runtime: nodejs16.x Architectures: # - x86_64 - arm64 Events: HelloWorld: Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api Properties: Path: /hello Method: get Outputs: # ServerlessRestApi is an implicit API created out of Events key under Serverless::Function # Find out more about other implicit resources you can reference within SAM # https://github.com/awslabs/serverless-application-model/blob/master/docs/internals/generated_resources.rst#api HelloWorldApi: Description: "API Gateway endpoint URL for Prod stage for Hello World function" Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/hello/" HelloWorldFunction: Description: "Hello World Lambda Function ARN" Value: !GetAtt HelloWorldFunction.Arn HelloWorldFunctionIamRole: Description: "Implicit IAM Role created for Hello World function" Value: !GetAtt HelloWorldFunctionRole.Arn 必芁に応じお CI を曞き換えたす。 Lambda 関数内で䜿っおいるラむブラリがアヌキテクチャに䟝存しない堎合は、CI を倉曎する必芁なく動きたす。 䞀方で、アヌキテクチャに䟝存するラむブラリを䜿っおいる堎合たずえば、libvips を䜿う node.js の sharp などは、次の察応が必芁です。 CI の実行環境を Arm ぞ倉曎する 異なるアヌキテクチャでもビルドできるようにする 䞀般的には前者の方法が遞ばれたすが、堎合によっおは CI は X86 の環境環境しか甚意しおいない堎合もあるでしょう。 今回はこのケヌスに該圓したため、X86 の CI でビルドを詊したす。 異なるアヌキテクチャArmをX86でビルドできるようにする X86 の環境で Arm 向けのビルドを行うには sam build --use-container を䜿っお、Dockerコンテナでビルドする方法が䞀般的です。しかしながら --use-container オプションが䜿えない堎合がありたす。 䟋えば、セルフホストで動䜜させおいる GitLab CI などの堎合です。蚭定によっおは、Pipeline を Docker コンテナ䞊で実行しおいたりしたす。この堎合 Docker コンテナ内で Docker build するには dind (Docker in Docker)ずよばれる仕組みを䜿いたす。 ずころが、今回の環境では dind で sam build --use-container を動かすこずができたせんでした。 そもそも Arm 甚のビルドが必芁なのは、npm の sharp で䜿われおいる libvips を Arm でビルドされたバむナリにする必芁があるためです。SAM を䜿わずに npm で install する堎合、公匏では npm install --arch=arm64 --platform=linux sharp でむンストヌルせよ、ず玹介されおいたす。 Cross-platform そこで SAM を䜿った堎合に内郚で実行されおいる npm install でこれらのパラメヌタを指定しおみたした。 具䜓的には環境倉数を蚭定しおから sam build を実行したす。 export npm_config_arch: "arm64" export npm_config_platform: "linux" sam build 補足事項ずしお、環境倉数に npm_config_xxx ず蚭定した堎合、 npm install --xxx のパラメヌタずしお枡されたす。 Environment Variables npm_config_arch, npm_config_target_arch, そしお npm_config_* 環境倉数に぀いお たずめ 今回は Lambda を Arm プロセッサで動䜜させる堎合の SAM テンプレヌトをご玹介したした。 Arm プロセッサを利甚するこずでコストを抑えた Lambda の利甚が可胜になりたす。ぜひご掻甚ください。
こんにちは、゚ンゞニアの久保です。 匊瀟では 2022/4 にリリヌスされた AWS Lambda の関数 URLAWS Lambda FunctionURLs を䜿っお Lambda の開発を進めおいたす。前回の蚘事では、AWS SAM で関数 URL を有効にする方法を玹介したした。 AWS SAM で AWS Lambda の 関数 URL を利甚しおみたした 珟圚、瀟内で運甚䞭の AWS Lambda + Amazon API Gateway で構成される WebAPI に぀いおも関数 URL を䜿った構成ぞ倉曎を進めおいたす。 今回は、API Gateway ず 関数 URLFunctionURLsを䜵甚する堎合の SAM テンプレヌトを䜜成したしたのでご玹介したす。 関数 URL を利甚した堎合、ペむロヌド圢匏は API Gateway Version 2 ずなるため構成によっおは泚意が必芁です。 クラむアントが関数の URL を呌び出すず、Lambda は、たずこのリク゚ストをむベントオブゞェクトにマップしおから、関数に受け枡したす その関数の応答は、Lambda が関数 URL を介しおクラむアントに返信する HTTP レスポンスにマッピングされたす。 このリク゚ストずレスポンスのむベント圢匏は、Amazon API Gateway ペむロヌド圢匏バヌゞョン 2.0 ず同じスキヌマに埓いたす。 リク゚ストずレスポンスのペむロヌド なお、前回利甚した SAM の hello-world テンプレヌトの堎合、API Gateway Version 1 の圢匏になっおいたす。 もしも API Gateway ず関数URLのどちらも利甚したい堎合は、API Gateway を HTTP API に蚭定するずよいでしょう。以䞋にテンプレヌトの䟋を瀺したす。 利甚ケヌスずしおは、「開発の際にロヌカル環境では sam local start-api を䜿っお動䜜確認したい」などが考えられたす。 AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: > sam-app Sample SAM Template for sam-app # More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst Globals: Function: Timeout: 3 Tracing: Active Api: TracingEnabled: True Resources: HelloWorldFunction: Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction Properties: CodeUri: hello-world/ Handler: app.lambdaHandler Runtime: nodejs16.x Architectures: - x86_64 Events: HelloWorld: Type: HttpApi # More info about API Event Source: https://github.com/aws/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlesshttpapi Properties: Path: /hello Method: GET FunctionUrlConfig: AuthType: NONE Outputs: # ServerlessRestApi is an implicit API created out of Events key under Serverless::Function # Find out more about other implicit resources you can reference within SAM # https://github.com/awslabs/serverless-application-model/blob/master/docs/internals/generated_resources.rst#api HelloWorldApi: Description: "API Gateway endpoint URL for Prod stage for Hello World function" Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/hello/" HelloWorldFunction: Description: "Hello World Lambda Function ARN" Value: !GetAtt HelloWorldFunction.Arn HelloWorldFunctionIamRole: Description: "Implicit IAM Role created for Hello World function" Value: !GetAtt HelloWorldFunctionRole.Arn HelloWorldFunctionUrl: Description: "Function URLs endpoint" Value: !GetAtt HelloWorldFunctionUrl.FunctionUrl たずめ 今回は、Lambda で API Gateway ず 関数 URLFunctionURLsを䜵甚するケヌスの SAM テンプレヌトをご玹介したした。ぜひご掻甚いただければず思いたす。
こんにちは。フォトり゚ディング・前撮りのクチコミ情報サむト「Photorait (フォトレむト)」の゚ンゞニアリングマネヌゞャヌをしおいる歊田( @takedajs )です。 匊瀟では「゚ンゞニアのやりがい」ず「技術力」の向䞊を目的ずした技術掚進委員䌚ずいう組織を゚ンゞニアリングマネヌゞャヌずテックリヌドが䞭心ずなっお運営しおいたす。 今回は技術掚進委員䌚が運営しおいる 「WP HACK DAY」 の第3回目を開催したので玹介したす 目次 WP HACK DAY ずは 圓日の様子 参加者からのフィヌドバック 最埌に WP HACK DAY ずは WP HACK DAYは、り゚ディングパヌク゚ンゞニアチヌムの技術力向䞊ず䞀䜓感醞成のための1dayハッカ゜ンです。 第1回目テヌマ Slackを掻甚しお、瀟内の誰かの仕事を䟿利にする仕組みを぀くる 第2回目テヌマ 開発の課題解決やタスクの効率化、技術怜蚌など、やりたいけど出来おいないこず 今回実斜した第3回目では 「業務課題を解決するプロダクト開発」 をテヌマに実斜したした WP HACK DAY #3のルヌル ・ 参加者゚ンゞニア(今回は2郚眲の゚ンゞニアが参加) ・ 3人1チヌムで1日(箄7時間)で取り組み、倕方に成果発衚䌚(デモ実斜必須)を実斜 ・ 事前に圓日開発するものを怜蚎し、実装可胜か調査 ・ プロトタむプ以䞊のものを開発 ・ 参加方法はオンラむン&オフラむンどちらでも可 圓日の様子 党䜓のスケゞュヌル 開䌚匏(9:30-9:40) 各々チヌム毎に背景画像を䜜成しお参加しおくれたした さあヌ1日頑匵っおいきたしょうヌ朝だからみんなテンション少し䜎いw 午前の開発(9:40-12:00) チヌム毎に固たっおもくもくず開発䞭 ランチタむム(12:00-13:00) 䞀人甚のピザを人数分甚意したした 泚文内容を党員にヒアリングし、なんずか間違えずに泚文できたので良かったです 午埌の開発、発衚資料䜜成(13:00-17:00) オンラむン参加メンバヌがいるチヌムは終始Zoomを぀なげお党員で話し合いながら開発 どのチヌムも開発ず資料䜜成で集䞭モヌド 成果発衚䌚(17:00-18:00) 党瀟向けに成果発衚䌚の開催を告知し、゚ンゞニア以倖の方も芖聎者ずしお参加しお頂きたした 運営が想定しおいた以䞊のクオリティのものが発衚されおいお、Zoomのチャットが「すごい」「今すぐ欲しい」など、ずおも盛り䞊がりたした 発衚されたプロトタむプ ・出瀟管理衚  Slack(ワヌクフロヌ)で運甚改善 ・チャットボット圢匏のDocBaseドキュメント怜玢Slack連携 ・システム問い合わせの新芏ツヌル䜜成 ・ コヌシヌ の掻性化Slack連携 ・アプリケヌション楜々構築で制床運甚改善怜蚌 懇芪䌚(18:00-18:30) 最埌はチヌム関係なくみんなでワむワむ ゚ンゞニア組織党䜓でざっくばらんにいろいろな話をしながら盛り䞊がりたした みなさん今日1日お疲れさたでした 参加者からのフィヌドバック 開催埌、参加者に匿名アンケヌトを実斜したした 党䜓の満足床(5点満点)平均点は4.6点ず高い点数でした。 以䞋、いただいたフィヌドバックの䞀䟋です。 良かった点 この人数の゚ンゞニアが出瀟する機䌚はあたりないので、久しぶりにみんなず集たれお嬉しかった。 第1回目ず第2回目は個人開発だったので、今回チヌム開発にしたこずで前回より䌚話が増えおハッカ゜ン感があった。 ランチや懇芪䌚があり、ワむワむガダガダお祭り感があった。 改善点 業務改善に繋がる良い発衚ばかりなので、成果発衚䌚の堎に゚ンゞニア以倖の方がもっず参加しおほしかった。 良い取り組みなので、党瀟むベントにしお他郚眲のメンバヌ(゚ンゞニア以倖)にも参加しおもらい䞀緒にやるのも良さそう。 レベルの高い発衚が倚かったので、倖郚発信力を高めるためにも各チヌムで䌚瀟テックブログぞのアりトプットは必須にしおも良かった。 最埌に り゚ディングパヌク゚ンゞニアチヌムの技術力向䞊ず䞀䜓感醞成のための1dayハッカ゜ン(WP HACK DAY)の第3回目に぀いお玹介したした。 3人1チヌムにするこずで他゚ンゞニアの考え方や実装方法を孊べたり、ランチや懇芪䌚を開催するこずでワむワむガダガダず盛り䞊がりながら䞀䜓感を匷めるこずができた日でした。運営の想定しおいた成果が出せお良かったです。 これからも継続しお開催予定なので、今回のフィヌドバックを掻かしおより費甚察効果の高いむベントにしおいきたす。
こんにちは。結婚指茪・婚玄指茪のクチコミサむト「Ringraph」で゚ンゞニアをしおいるさヌ @__south__373 です。今日は新芏事業郚眲の゚ンゞニアが゚ンゞニア組織の未来に぀いお考えお提案しおみた話をしたいず思いたす。 ビゞョンを実珟するために゚ンゞニア組織に必芁な斜策を考えたい 事の発端は今幎の2月頃。職皮別のチヌムで、スキルアップをするための取り組みを考えおみようずいう時間がありたした。そこで私たち゚ンゞニアチヌムが決めたのが、「 ビゞョンを実珟するために゚ンゞニア組織に必芁な斜策を提案する 」ずいうもの。 私の郚眲は新芏事業がいく぀か集たっおおり、普段は担圓事業の運甚や開発に取り組んでいたす。自分の事業に察しおはロヌドマップを考えたりする䞀方で、郚眲党䜓の゚ンゞニア組織ずしおどう成長しおいきたいか考える機䌚はほずんどありたせんでした。各事業が䌞びおいるなかでさらに成長を加速するためには、事業を超えお゚ンゞニア組織の未来を語り、課題を解決しおいく必芁があるず感じおおり、これが゚ンゞニアみんなの䞭で䞀臎しおいたのでやっおみるこずになりたした。 もっず技術的なチャレンゞに取り組んでいきたい 私たちは「21䞖玀を代衚するブラダル䌚瀟を創る」ずいうビゞョンを掲げおいたす。その䞭で、私たち新芏事業の゚ンゞニアは「 サヌビス愛 + 技術力を持っお、新しい付加䟡倀を創出するこずができる組織 」を目指したいず考えたした。 ビゞョンを実珟するためには、組織ずしお今たで以䞊にチャレンゞを繰り返しおいくこずが必芁であり、技術力を高めなければ事業ずしおやりたいこずがシステムがネックになりできなくなっおくるのではないかずいう危機感もありたす。り゚ディングパヌクの゚ンゞニアは「 クリトラ 」を行動指針ずしおいたすが、その䞭でもSKILLに圓たる郚分は、ただただ䌞び代がありもっず技術的なチャレンゞをしおいく必芁があるず思っおいたす。 今動いおいるシステムも珟状維持ではどんどん取り残されおいきたすし、゚ンゞニアずしおビゞョン実珟に貢献するために、今あるチヌム力そしおサヌビス愛に加えお技術力を持っお、新しい付加䟡倀を創出したい。そのためには、技術的なチャレンゞができる環境を敎える必芁がある。そう感じたした。 早くお安定したリリヌスができる仕組みを぀くるこずで技術的なチャレンゞができる ではなぜ技術的なチャレンゞがしづらい状況になっおいるのか。理由は倧きく2぀あるず考えたした。 1぀は圱響範囲が増え続けおいるこずに䌎うテストコストの増加です。UnitテストやE2Eテストで䞀郚担保しおいる郚分はあるものの、基本的には圱響範囲を党お人力で確認しおいる状況です。サむト党䜓に圱響がある開発に取り組むコストがずおも高くネックになっおいたす。 もう䞀぀は事業を盎近䌞ばすための開発が優先されがちであるずいうこず。やるべき斜策が決たっおいる䞭で、プラスの工数をもらっお手を加えるこずが難しいこずもありたす。 今たでは案件を開発しおリリヌスするこずに泚力しおおり、開発のサむクルを芋盎したりリリヌススピヌドたで意識が回っおいたせんでした。先皋䞊げたような課題を解決するためには、品質ずスピヌド䞡方を䞊げるこずで、早くお安定したリリヌスができる仕組みを぀くる。そうするこずで挑戊できる環境を敎えるこずができるず考えおいたす。 Four Keysを远いかける 早くお安定したリリヌスができる仕組みを䜜るにはどうしたら良いかを考えたずき、Four Keysずいう指暙に出䌚いたした。 Four Keysずは DevOps Research and AssessmentDORA チヌムが実斜した 6 幎間の研究から確立された、゜フトりェア開発チヌムのパフォヌマンスを瀺す 4 ぀の指暙です。 ・デプロむ頻床 ・倉曎のリヌドタむム ・倉曎障害率 ・サヌビス埩元時間 品質ずスピヌドの䞡方を䞊げたいず考えた時、どちらかに泚力するずどちらかが疎かになっおしたいがちです。なので、この4぀の指暙を远うこずでどちらも改善するこずを意識しながら進められるずころが良いなず思っおいたす。 たずはチヌムのパフォヌマンスを枬り可芖化する。そしおボトルネックずなっおいる箇所に察しおアプロヌチをする。これを繰り返すこずで技術挑戊できる環境を䜜っおいきたす。 おわりに この提案が無事承認され、今は各指暙の现かい定矩を決めおいたす。そしお来月からは実際に蚈枬をしおいくので、実際枬っおみおどうだったか、どんな斜策をやったかはたたの機䌚にお䌝えしようず思いたす。 今回事業を超えお゚ンゞニア組織の課題をディスカッションするこずで、課題の共通認識を持぀こずができ、そこに察する新しいアプロヌチを考えるこずができたした。Four Keysを蚈枬し改善するこずが目的ではないので、技術的なチャレンゞをしやすくするこずで事業の技術力を䞊げおいく。そしおビゞョンを実珟する。ここはブラさずに取り組んでいきたいず思いたす。
こんにちは。 Photorait ゚ンゞニアのピむです。 党瀟゚ンゞニアが参加する開発定䟋「クリトラ定䟋」の運営をしおいたす。 「クリトラ」っおなにに぀いおは こちら をご芧ください。 四半期末の定䟋では振り返り䌚を実斜しおおり、゚ンゞニアの頑匵りや掻動量を発衚したした。 この掻動量に぀いお プロゞェクト毎のリリヌス数 プルリク゚スト以䞋、PR・マヌゞリク゚スト以䞋、MR数やコメント数 これらの数倀をグラフ化し、前回振り返り時ずも比范し぀぀゚ンゞニア自身の掻動量が数倀化された発衚を芋お みんなでわちゃわちゃ盛り䞊がる䌚ずなりたした。 今回はこの、「PR・MR数やコメント数」を集蚈した話を曞きたす。   どんな発衚をしたか 集蚈したデヌタをグラフ化し、以䞋を発衚したした。 月毎のPR・MR数やメンバヌ毎のPR・MR数 メンバヌのレビュヌコメント数 レビュヌに察する平均コメント数   集蚈察象ず集蚈内容 り゚ディングパヌクでは、GitHubずGitLabを掻甚しおいたす。䜕故二皮類あるのかはここでは説明を省きたす。 GitHubずGitLab双方から以䞋を集蚈させたす。 PR・MR数 メンバヌ毎のPR・MR提出数を出したす。 この集蚈により、月毎やプロゞェクト毎のコヌドレビュヌ䟝頌数も芋えおきたす。 PR・MRに察する開発メンバヌのコメント数 先述の通りPR・MRに察するコメント数を集蚈したす。 ぀たり、コヌドレビュヌに察しおどれぐらいコメントをしたかを出したす。 PR・MRぞのレビュヌアサむン数 PR・MRにアサむンされた数を集蚈したす。 コヌドレビュヌにアサむンされた数を出したす。   API゚ンドポむント GitHub API、GitLab APIの以䞋の゚ンドポむントを利甚したす。 ゚ンドポむント GitHub GraphQLを䜿いたす。 https://api.github.com/graphql https://docs.github.com/ja/graphql/reference/queries GitLab 匊瀟のGraphQL APIのバヌゞョン郜合䞊 REST APIを利甚したす。 https://docs.gitlab.com/ee/api/merge_requests.html#list-merge-requests https://docs.gitlab.com/ee/api/discussions.html#merge-requests   GitHub集蚈 Organizationに玐づくリポゞトリからPR䞀芧、PR䜜成者、レビュヌアサむンメンバヌ、コメント䞀芧を取埗したす。 { organization(login: "Organization名") { repositories(first: 100) { edges { node { name pullRequests(first: 10, after: null, orderBy: {field: CREATED_AT, direction: DESC}) { pageInfo { endCursor } edges { node { createdAt author { login } assignees(first: 10) { edges { node { login } } } comments(first: 100) { edges { node { author { login } body } } } } } } } } } } }   GraphQLなのでたずめお取埗できるのが䟿利です。集蚈自䜓はスクリプト偎に任せたす。 PR数やコメント数も制限をかけおリク゚ストしおいるので、良しなにペヌゞネヌションさせお现かくリク゚ストさせたす。 GitLab集蚈 こちらはREST APIを利甚だったので、スクリプト織り亀ぜお茉せたす。PHPで取埗。 $date = '2022-04-01T00:00:00+09:00'; $url = "https://{GitLabドメむン}/api/v4/merge_requests?created_after=%s&per_page=100&scope=all&page=%s"; // 日付に制限をかけお取埗させる $mrUrl = sprintf($url, $date); $headers = [ "Authorization: Bearer {トヌクン倀}", ]; page = 1; // apiリク゚ストをする䟋 while ($mrList = $this->request($mrUrl, $page)) { foreach ($mrList as $mrValue) { $authorName = $mrValue['author']['username']; // authorMR䜜成者ごずのMR数をむンクリメントさせる䟋 $this->incrementAuthor($authorName); if (!empty($mrValue['assignee'])) { $assigneeName = $mrValue['assignee']['username']; // assigneeレビュヌ者ごずのMR数レビュヌ䟝頌数をむンクリメントさせる䟋 $this->incrementAssignee($assigneeName); } $mr = [ 'prjId' => $mrValue['project_id'], 'mrIid' => $mrValue['iid'], 'authorId' => $mrValue['author']['id'], ]; // この郚分は以䞋で解説 $this->sumComment($mr); } $page ++; }   コメント郚分は別で取埗しなければならず、゜ヌス䞊の $this->sumComment($mr) 郚分の取埗は以䞋のような圢です。 private function sumComment($mr) { $mrDiscussionUrl = "https://{GitLabドメむン}/api/v4/projects/%s/merge_requests/%s/discussions?per_page=100"; $path = sprintf($mrDiscussionUrl, $mr['prjId'], $mr['mrIid']); $page = 1; // apiリク゚ストをする䟋 while ($discussions = $this->requestPath($path, $page)) { foreach ($discussions as $comments) { foreach ($comments['notes'] as $note) { // システムCIによる投皿などによる内容ならスルヌ if ($note['system']) { continue; } // 投皿者がMR䜜成者ならばスルヌレビュヌ䟝頌者によるコメントは陀きたした if ($note['author']['id'] == $mr['authorId']) { continue; } $authorName = $note['author']['username']; // レビュヌコメントした人ごずのコメント数をむンクリメントさせる䟋 $this->incrementCommenter($authorName); } } $page ++; } }   GraphQLを䜿ったGitHub集蚈も䞊蚘のようなスクリプトで集蚈させおいたす。   集蚈したものを発衚 数倀は簡単にスプレッドシヌトにたずめおグラフ化したした。グラフは先述の通りです。 この発衚をし、前回より増えたねヌなどの声も䞊がったり、レビュヌに察しお沢山コメントしおくれる人、PR数が倚い人など、人によっお数倀の差が倧きく、面癜い発衚になりたした。 そしお倚い少ないが分かるだけでなく、 レビュヌ時に沢山コメントしおくれるメンバヌが、隅々たでコヌドを芋おくれる点や分かりやすいコメント内容だったずいう声が䞊がったり PR数が倚いのは、どの粒床でコヌドレビュヌを出しおいるか、それによるコヌドレビュヌのスピヌド感やリリヌス数などの盞関関係も芋えおきたり 今床PRを芗いおみよう、ず話が発展するこずもありたした。   単玔な数倀の発衚から、生産性を考えたり、レビュワヌに感謝を䌝えるきっかけにもなったりず発芋が倚い発衚になりたした。   ずいうわけで今月末も振り返り䌚を実斜したす。 集蚈発衚が楜しみです。  
゚ンゞニアの久保です。 2022/4 に AWS Lambda の関数 URLAWS Lambda FunctionURLs がリリヌスされたした。この機胜を䜿うず、Lambda を䜿った WebAPI を䜜成する際に必芁だった Amazon API Gateway が䞍芁になりたす。 今回はこの関数 URL を AWS SAMAWS Serverless Application Modelから利甚しおみたした。 䜜業環境 AWS SAM CLI は次のバヌゞョンを利甚しおいたす。 % sam --version SAM CLI, version 1.51.0 プロゞェクトの䜜成 sam init でプロゞェクトを䜜成したす。 今回はおなじみの hello-world テンプレヌトを利甚しおいたす。 % sam init \ --runtime nodejs16.x \ --dependency-manager npm \ --app-template hello-world \ --tracing \ --name sam-app Cloning from https://github.com/aws/aws-sam-cli-app-templates (process may take a moment) このずき䜜成される SAM のテンプレヌト template.yml は以䞋のようになっおいたす。 AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: > sam-app Sample SAM Template for sam-app # More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst Globals: Function: Timeout: 3 Tracing: Active Api: TracingEnabled: True Resources: HelloWorldFunction: Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction Properties: CodeUri: hello-world/ Handler: app.lambdaHandler Runtime: nodejs16.x Architectures: - x86_64 Events: HelloWorld: Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api Properties: Path: /hello Method: get Outputs: # ServerlessRestApi is an implicit API created out of Events key under Serverless::Function # Find out more about other implicit resources you can reference within SAM # https://github.com/awslabs/serverless-application-model/blob/master/docs/internals/generated_resources.rst#api HelloWorldApi: Description: "API Gateway endpoint URL for Prod stage for Hello World function" Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/hello/" HelloWorldFunction: Description: "Hello World Lambda Function ARN" Value: !GetAtt HelloWorldFunction.Arn HelloWorldFunctionIamRole: Description: "Implicit IAM Role created for Hello World function" Value: !GetAtt HelloWorldFunctionRole.Arn 関数 URLFunction URLsを有効にする それでは、関数 URLを 有効にしおみたす。 template.yml の Resources → HelloWorldFunction のセクションに FunctionUrlConfig を远加したす。 Resources: HelloWorldFunction: Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction Properties: CodeUri: hello-world/ Handler: app.lambdaHandler Runtime: nodejs16.x Architectures: - x86_64 Events: HelloWorld: Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api Properties: Path: /hello Method: get FunctionUrlConfig: AuthType: NONE FunctionUrlConfig に぀いおは、 ドキュメント に詳现が曞かれおいたす。 今回は特に認蚌なしでアクセスできるようにしたいので、 AuthType: NONE を蚭定しおいたす。 たた、䜜成された関数URLを確認できるように、Outputsのセクションで以䞋のように HelloWorldFunctionUrl を远蚘したす。 Outputs: # ServerlessRestApi is an implicit API created out of Events key under Serverless::Function # Find out more about other implicit resources you can reference within SAM # https://github.com/awslabs/serverless-application-model/blob/master/docs/internals/generated_resources.rst#api HelloWorldApi: Description: "API Gateway endpoint URL for Prod stage for Hello World function" Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/hello/" HelloWorldFunction: Description: "Hello World Lambda Function ARN" Value: !GetAtt HelloWorldFunction.Arn HelloWorldFunctionIamRole: Description: "Implicit IAM Role created for Hello World function" Value: !GetAtt HelloWorldFunctionRole.Arn HelloWorldFunctionUrl: Description: "Function URLs endpoint" Value: !GetAtt HelloWorldFunctionUrl.FunctionUrl デプロむしお動䜜確認 それではデプロむしお動䜜を確認しおみたしょう。 たずはビルドしたす。 % sam build 続いおデプロむしたす。 % sam deploy \ --template-file template.yaml \ --stack-name sam-app \ --resolve-s3 \ --capabilities CAPABILITY_IAM デプロむが完了するずデプロむされたスタックが衚瀺されたす。 CloudFormation outputs from deployed stack ----------------------------------------------------------------------------------------------------------------------------------------------------------- Outputs ----------------------------------------------------------------------------------------------------------------------------------------------------------- Key HelloWorldFunctionIamRole Description Implicit IAM Role created for Hello World function Value arn:aws:iam::000000000000:role/sam-app-HelloWorldFunctionRole-114EYP0OM26CS Key HelloWorldApi Description API Gateway endpoint URL for Prod stage for Hello World function Value https://jlw92sp9w4.execute-api.ap-northeast-1.amazonaws.com/Prod/hello/ Key HelloWorldFunctionUrl Description Function URLs endpoint Value https://rwu4uvcrsa5yxsecf3dliu2fpu0vmrty.lambda-url.ap-northeast-1.on.aws/ Key HelloWorldFunction Description Hello World Lambda Function ARN Value arn:aws:lambda:ap-northeast-1:000000000000:function:sam-app-HelloWorldFunction-Ynj767nxr0Xw ----------------------------------------------------------------------------------------------------------------------------------------------------------- Successfully created/updated stack - sam-app in ap-northeast-1 動䜜確認 それでは実際に動かしおみたす。 API Gateway の゚ンドポむント hello-world テンプレヌト に最初から含たれおいる API Gateway の゚ンドポむントに接続しおみたす。 % curl https://jlw92sp9w4.execute-api.ap-northeast-1.amazonaws.com/Prod/hello/ {"message":"hello world"} 関数 URLFunction URLsの゚ンドポむント 次に、今回远加した関数 URL の゚ンドポむントに接続しおみたす。 % curl https://rwu4uvcrsa5yxsecf3dliu2fpu0vmrty.lambda-url.ap-northeast-1.on.aws/ {"message":"hello world"} API Gateway の゚ンドポむントず同様に動䜜したした 今回の template.yml の最終結果 参考たでに、今回利甚した SAM テンプレヌト template.yml の最終結果を以䞋に蚘茉したす。 AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: > sam-app Sample SAM Template for sam-app # More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst Globals: Function: Timeout: 3 Tracing: Active Api: TracingEnabled: True Resources: HelloWorldFunction: Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction Properties: CodeUri: hello-world/ Handler: app.lambdaHandler Runtime: nodejs16.x Architectures: - x86_64 Events: HelloWorld: Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api Properties: Path: /hello Method: get FunctionUrlConfig: AuthType: NONE Outputs: # ServerlessRestApi is an implicit API created out of Events key under Serverless::Function # Find out more about other implicit resources you can reference within SAM # https://github.com/awslabs/serverless-application-model/blob/master/docs/internals/generated_resources.rst#api HelloWorldApi: Description: "API Gateway endpoint URL for Prod stage for Hello World function" Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/hello/" HelloWorldFunction: Description: "Hello World Lambda Function ARN" Value: !GetAtt HelloWorldFunction.Arn HelloWorldFunctionIamRole: Description: "Implicit IAM Role created for Hello World function" Value: !GetAtt HelloWorldFunctionRole.Arn HelloWorldFunctionUrl: Description: "Function URLs endpoint" Value: !GetAtt HelloWorldFunctionUrl.FunctionUrl たずめ 今回は AWS Lambda の関数 URLAWS Lambda Function URLsを AWS SAM から利甚する方法を玹介したした。 珟圚瀟内で進行しおいるプロゞェクトでは関数 URL を積極的に利甚しおいたす。 先述の通り、埓来の API Gateway + Lambda で構成される WebAPI の堎合、Lambda 関数 URL を䜿った構成ぞ倉曎するこずで API Gateway が䞍芁になりたす。 匊瀟の堎合、Lambda 関数 URL を利甚するこずで月に $30 ほど節玄できるケヌスがありたした。 API Gateway で提䟛される機胜を必芁ずしおいない堎合は、関数 URL の利甚を怜蚎しおみおはいかがでしょうか。
こんにちは、゚ンゞニアのみヌや @miiya387 です。 Reactのフレヌムワヌク「Next.js」ぞの入門ずしお、公匏チュヌトリアルを䜕回かに分けおたずめおいきたす。 今回は4぀目の pre-rendering and Data Fetching です。 それ以前の章を知りたい方は Reactのフレヌムワヌク”Next.js”を觊っおみた「アプリ新芏䜜成 / ペヌゞ遷移 / スタむル蚭定」 をご芧ください。 Create a Next.js App Navigate Between Pages Assets, Metadata, and CSS Pre-rendering and Data Fetching Dynamic Routes API Routes Deploying Your Next.js App やっおみる 4. Pre-rendering and Data Fetching pre-rendering Next.jsではデフォルトですべおのペヌゞにおいおpre-renderingが有効になっおいたす。 pre-renderingにより、ペヌゞのHTMLを事前に生成するためクラむアントサむドですべおのJavaScriptを実行するのに比べお、パフォヌマンスもSEOも良くなりたす。 生成されたHTMLはブラりザで最䜎限のJavaScriptを実行し、むンタラクティブなペヌゞを完成させたす。このプロセスを hydration ず呌びたす。 check That Pre-rendering Is Happening 以䞋の工皋でpre-renderingを確認しおいきたす。 ブラりザのJavaScriptを無効にする その埌Next.jsで実装されおいる こちらのペヌゞ にアクセス chromeのJavaScriptを無効にしたす手順は こちら    その埌、公匏で指定があったペヌゞ https://next-learn-starter.vercel.app/ にアクセスするず、JavaScriptなしでペヌゞのレンダリングができおいるこずが確認できたした これは、Next.jsがペヌゞを静的なHTMLずしおpre-renderingしおいるから、JavaScriptなしでの衚瀺が可胜になりたす。 Next.jsなしで玔粋にReactで実装しおいるペヌゞではこうはなりたせん。 それを確認するために以䞋のステップでReactのペヌゞでJavaScriptを無効にした状態でアクセスするずどうなるのか確認しおいきたす。 JavaScriptが有効な状態で こちらのペヌゞ にアクセス その埌、JavaScriptを無効にし、再床同じペヌゞにアクセス たずは指定のペヌゞにJavaScriptが有効な状態でアクセスしたす。 Reactのアむコンがくるくるしおいるペヌゞが芋れたすね。 その埌JavaScriptを無効にし再アクセスするず以䞋のようにJavaScriptを有効にしおくださいず衚瀺され、ペヌゞのレンダリングはされたせん。 これでNext.jsず違い、Reactではペヌゞのpre-renderingがされおいないこずが確認できたした。 Summary: Pre-rendering vs No Pre-rendering 以䞋は公匏で玹介されおいるNext.js(pre-renderingあり)ずPlain React(pre-renderingなし)の抂芁です。 Next.jsでは、初回のHTMLの衚瀺がすぐに行われ、その埌<Link>などのJavaScriptの実行が必芁な䞀郚芁玠のみ遅延しお行われたす。 出展: https://nextjs.org/learn/basics/data-fetching/pre-rendering 䞀方でReactでは、初回衚瀺のものはなく、すべおのReact ComponentがJavaScriptの実行を埅っおから衚瀺されたす。 普段Reactで開発しおいるずきは、初期描画に時間がかかっおしたうのはある皋床仕方ないず思っおいたしたが、Next.jsは基本的に党ペヌゞでpre-renderingに察応しおいるのでその問題は解決しそうですね。 Two Forms of Pre-rendering Next.jsでは以䞋の2皮類のpre-renderingがありたす Static Generation : ビルド時にHTMLを事前生成し、その埌は1床生成されたHTMLをリク゚ストごずに再利甚されたす Server-side Rendering : リク゚ストのたびにHTMLが再生成されたす 出展: https://nextjs.org/learn/basics/data-fetching/two-forms なお、開発モヌドの環境では、Static Generationであっおも、リク゚ストごずにpre-renderingされたす。 Per-page Basis Next.jsではペヌゞごずに䜿甚するpre-rendered方匏を遞ぶこずができ、SSGずSSRのハむブリッド構成が可胜になりたす。 ペヌゞの特城に合わせお遞択できるので、ずおも䟿利ですね嬉しいです 出展: https://nextjs.org/learn/basics/data-fetching/two-forms When to Use Static Generation v.s. Server-side Rendering Next.jsでは基本的にSSGを䜿うこずを掚奚しおいたす。 䞀床ペヌゞを生成しおCDNの利甚が可胜になるため、パフォヌマンス的に有利になりたす。 䟋えば、次のようなペヌゞにSSGが䜿えたす。 マヌケティングペヌゞ ブログ投皿 ECサむトの商品䞀芧 ヘルプペヌゞ 䞀方で、デヌタの曎新が頻繁に行われるペヌゞやリク゚ストごずに衚瀺するコンテンツを切り替えたいペヌゞではSSRを䜿うのが適しおいたす。 SSGず比べるずペヌゞ衚瀺速床のパフォヌマンスは䞋がりたすが、ペヌゞを垞に最新の状態にするこずができたす。 たたは、pre-renderingをスキップしおクラむアントサむドでJavaScriptを利甚しお頻繁に曎新されるデヌタを衚瀺するこずもできたす。 CMSツヌルのような入力テキストがリアルタむムでプレビュヌに反映されるペヌゞや、ナヌザヌの志向性に合わせお衚瀺内容を切り替えたいペヌゞではpre-renderingをスキップする方が適しおいそうですね。 Static Generation with and without Data SSGはデヌタの有無に関わらず利甚可胜です。 これたで䜜成したペヌゞでは、倖郚デヌタを取埗する必芁がなくアプリが本番甚にビルドされるずきに自動的に静的に生成されたす。 出展: https://nextjs.org/learn/basics/data-fetching/with-data しかし、䞀郚のペヌゞでは事前にデヌタを取埗しないず、HTMLの生成ができない堎合がありたす。 ビルド時に、画像ファむルを取埗したり倖郚APIをフェッチしたりデヌタベヌスにク゚リ実行したりなど、、、 その堎合もNext.jsはサポヌトしおおり、 getStaticProps を䜿うず事前凊理が可胜になりたす。 getStaticPropsはasync関数で、本番ビルド時に実行され、関数内では倖郚デヌタをフェッチしおペヌゞに枡されたす。 開発モヌドでは各リク゚ストで実行されたす。 export default function Home(props) { ... } export async function getStaticProps() { // Get external data from the file system, API, DB, etc. const data = ... // The value of the `props` key will be // passed to the `Home` component return { props: ... } } Blog Data ここでは実際にブログデヌタをフェッチしお远加しおいきたす。 プロゞェクトトップに posts ディレクトリを䜜成したす。 䜜成したposts配䞋にブログファむルマヌクダりンを远加し、内容を以䞋にしたす。 --- title: 'Two Forms of Pre-rendering' date: '2020-01-01' --- Next.js has two forms of pre-rendering: **Static Generation** and **Server-side Rendering**. The difference is in **when** it generates the HTML for a page. - **Static Generation** is the pre-rendering method that generates the HTML at **build time**. The pre-rendered HTML is then _reused_ on each request. - **Server-side Rendering** is the pre-rendering method that generates the HTML on **each request**. Importantly, Next.js lets you **choose** which pre-rendering form to use for each page. You can create a "hybrid" Next.js app by using Static Generation for most pages and using Server-side Rendering for others. 次に、同様にposts配䞋にssg-ssr.mdファむルを远加し、内容を以䞋にしたす。 --- title: 'When to Use Static Generation v.s. Server-side Rendering' date: '2020-01-02' --- We recommend using **Static Generation** (with and without data) whenever possible because your page can be built once and served by CDN, which makes it much faster than having a server render the page on every request. You can use Static Generation for many types of pages, including: - Marketing pages - Blog posts - E-commerce product listings - Help and documentation You should ask yourself: "Can I pre-render this page **ahead** of a user's request?" If the answer is yes, then you should choose Static Generation. On the other hand, Static Generation is **not** a good idea if you cannot pre-render a page ahead of a user's request. Maybe your page shows frequently updated data, and the page content changes on every request. In that case, you can use **Server-Side Rendering**. It will be slower, but the pre-rendered page will always be up-to-date. Or you can skip pre-rendering and use client-side JavaScript to populate data. Implement getStaticProps マヌクダりンをパヌスするために gray-matter をむンストヌルしたす npm install gray-matter プロゞェクトトップにlibディレクトリを䜜成し、以䞋のposts.jsを远加したす。 import fs from 'fs' import path from 'path' import matter from 'gray-matter' const postsDirectory = path.join(process.cwd(), 'posts') export function getSortedPostsData() { // Get file names under /posts const fileNames = fs.readdirSync(postsDirectory) const allPostsData = fileNames.map(fileName => { // Remove ".md" from file name to get id const id = fileName.replace(/\.md$/, '') // Read markdown file as string const fullPath = path.join(postsDirectory, fileName) const fileContents = fs.readFileSync(fullPath, 'utf8') // Use gray-matter to parse the post metadata section const matterResult = matter(fileContents) // Combine the data with the id return { id, ...matterResult.data } }) // Sort posts by date return allPostsData.sort(({ date: a }, { date: b }) => { if (a < b) { return 1 } else if (a > b) { return -1 } else { return 0 } }) } pages/index.jsを次のように曎新し、getSortedPostsDataを䜿っおデヌタフェッチしたす。 フェッチしたデヌタを䜿うようにHomeコンポヌネントも䞀郚曞き換えたす。 import Layout, { siteTitle } from '../components/layout' import utilStyles from '../styles/utils.module.css' import { getSortedPostsData } from '../lib/posts' export async function getStaticProps() { const allPostsData = getSortedPostsData() return { props: { allPostsData } } } export default function Home({ allPostsData }) { return ( <Layout home> {/* Keep the existing code here */} {/* Add this <section> tag below the existing <section> tag */} <section className={`${utilStyles.headingMd} ${utilStyles.padding1px}`}> <h2 className={utilStyles.headingLg}>Blog</h2> <ul className={utilStyles.list}> {allPostsData.map(({ id, date, title }) => ( <li className={utilStyles.listItem} key={id}> {title} <br /> {id} <br /> {date} </li> ))} </ul> </section> </Layout> ) } 曎新埌、 http://localhost:3000/ にアクセスするずフェッチしたブログデヌタを䜿甚しおpre-renderingできたした getStaticProps Details Fetch External API or Query Database 今回はファむルシステムからデヌタをフェッチするパタヌンを posts.js に実装したしたが、倖郚APIからデヌタをフェッチするこずや、デヌタベヌスに盎接ク゚リを実行するこずもできたす。 倖郚APIからデヌタをフェッチする堎合は posts.js を以䞋のようにしたす。 export async function getSortedPostsData() { // Instead of the file system, // fetch post data from an external API endpoint const res = await fetch('..') return res.json() } ク゚リを実行する堎合は以䞋のようにしたす。 import someDatabaseSDK from 'someDatabaseSDK' const databaseClient = someDatabaseSDK.createClient(...) export async function getSortedPostsData() { // Instead of the file system, // fetch post data from a database return databaseClient.query('SELECT posts...') } getStaticPropsはサヌバヌサむドのみで実行されるため、JavaScriptのバンドル察象に入りたせん。 そのため、実行するク゚リなどをブラりザに送信するこずなく実行するこずができたす。 Development vs. Production 先にも蚘茉したしたが、開発モヌドの堎合はリク゚ストごずにgetStaticPropsが実行されたす。 本番では、ビルド時にのみ実行されたす。 ぀たり、getStaticPropsでは、リク゚スト毎にク゚リパラメヌタやHTTPヘッダヌを指定しお、デヌタの動的取埗は行えたせん。 Fetching Data at Request Time ビルド時ではなくリク゚スト時にデヌタをフェッチする必芁がある堎合は、 Server-side Renderingを䜿いたす。 Server-side Renderingの堎合は、getStaticPropsの代わりにgetServerSidePropsを䜿う必芁がありたす。 Using getServerSideProps ブログの䟋では䜿わないため実装はしたせんが、getServerSidePropsを䜿うこずで リク゚ストごずのデヌタフェッチができるようになりたす。 export async function getServerSideProps(context) { return { props: { // props for your component } } } Client-side Rendering pre-rendering時に事前取埗する必芁のないデヌタは、JavaScriptを䜿っおクラむアントサむドでレンダリングするこずもできたす。 倖郚デヌタを必芁ずしないペヌゞの郚分をSSGでレンダリング ペヌゞが読み蟌たれたら、JavaScriptを䜿甚しおクラむアントサむドで倖郚デヌタをフェッチし、残りの郚分にデヌタを入力 出展: https://nextjs.org/learn/basics/data-fetching/request-time クラむアントサむドでデヌタフェッチする堎合は、React HooksラむブラリのSWRをおすすめされおいたす。 ペヌゞ衚瀺が終わった埌に䞀郚広告を衚瀺する堎合などに適しおいそうですね。ただし、途䞭で衚瀺項目が増えるこずでのレむアりトシフトによるUX䜎䞋やSEOぞの圱響は泚意しないずなので怜蚌しおみる必芁がありたすね。 たずめ 今回はNex.jsの公匏チュヌトリアルをもずにpre-renderingに぀いお觊れおみたした。 ペヌゞの特性に合わせおSSG, SSRを䜿いわけができるこずはずおも䟿利ですよね。 SSGを基本ずしおクラむアントサむドで必芁な分だけ埌から远加衚瀺するのも魅力的でした。 ここたでの゜ヌスは github に䞊げたので興味のある方はぜひ䞀緒にNext.jsず仲良くなっおいきたしょう 次回は「Dynamic Routes, API Routes」をやっおみたす。
こんにちは、゚ンゞニアのみヌや @miiya387 です。 今回はReactのフレヌムワヌクである「Next.js」を公匏チュヌトリアルをもずに觊っおみたした。 普段の開発ではReactを䜿甚しおいるのですが、最近フロント゚ンド関連の蚘事でNext.jsをよく目にするようになったので、基本的な機胜をチュヌトリアルを通しお觊っおみお知ったこずをたずめたいず思いたす。 Next.jsずは Next.jsはReactベヌスのフレヌムワヌクです。 公匏の導入郚分にお、Reactを䜿っおWebアプリケヌションを開発する際の考慮点を取り䞊げた䞊で、Next.jsはそれらをすべお解決しおくれるず玹介されおいたした。 䞻な特城は以䞋の8぀みたいです。詳现は こちら   ・An intuitive page-based routing system (with support for dynamic routes) ・Pre-rendering, both static generation (SSG) and server-side rendering (SSR) are supported on a per-page basis ・Automatic code splitting for faster page loads ・Client-side routing with optimized prefetching ・Built-in CSS and Sass support, and support for any CSS-in-JS library ・Development environment with Fast Refresh support ・API routes to build API endpoints with Serverless Functions ・Fully extendable 特に2぀目のSSG, SSRの特城が気になっおいたのでチュヌトリアルの䞭で觊れられるず嬉しいです。 チュヌトリアルではシンプルなブログアプリの䜜成を通しおNext.jsの基本を孊んでいくスタむルです。 Create a Next.js App Navigate Between Pages Assets, Metadata, and CSS pre-rendering and Data Fetching Dynamic Routes API Routes Deploying Your Next.js App 本蚘事では1~3をたずはやっおみようず思いたす。 やっおみる 1. Create a Next.js App Setup 最初のレッスンではNex.jsのアプリケヌション䜜成ずペヌゞの衚瀺、線集たでを行いたす。 前提 Node.jsがむンストヌルされおいるこずバヌゞョンは10.13以䞊 任意の゚ディタずタヌミナルを甚意しおあるこず 私は今回 Node.js は v14.15.5 の環境で䜜業したす。 Create a Next.js app 任意のディレクトリ内で以䞋コマンドでNext.jsアプリケヌションを䜜成したす。 $ npx create-next-app nextjs-blog --use-npm --example "https://github.com/vercel/next-learn/tree/master/basics/learn-starter" Run the development server 䜜成が完了したら、 nextjs-blog に移動しおサヌバヌを起動したす $ cd nextjs-blog $ npm run dev > @ dev /Users/XXXXXX/Projects/tutorial_next_js/nextjs-blog > next dev ready - started server on 0.0.0.0:3000, url: http://localhost:3000 event - compiled client and server successfully in 1880 ms (110 modules) Attention: Next.js now collects completely anonymous telemetry regarding usage. This information is used to shape Next.js' roadmap and prioritize features. You can learn more, including how to opt-out if you'd not like to participate in this anonymous program, by visiting the following URL: https://nextjs.org/telemetry Welcome to Next.js 起動埌に http://localhost:3000 にアクセスするず、以䞋の画面の衚瀺がされたした サクッずここたでこれるのは簡単で嬉しいですね Editing the Page サヌバヌを起動したたたペヌゞの線集をしおいきたす。 pages/index.js の Welcome を Learn に曞き換えおみたしょう。 import Head from 'next/head' export default function Home() { return ( <div className="container"> <Head> <title>Create Next App</title> <link rel="icon" href="/favicon.ico" /> </Head> <main> <h1 className="title"> Lean to <a href="https://nextjs.org">Next.js!</a> </h1> ・・・ なんず線集するだけでペヌゞの曎新なしに線集内容がペヌゞに反映されたした すごヌいこれが Fast Refresh ずいう特城みたいです。 単䜓の゚クスポヌトファむルの曎新なら線集のあったファむルのみ、importされおいるファむルならimportしおいるファむルもセットでコンパむルしお再描画しおくれるみたいです。 最近自分の開発環境のjsのトランスパむルが遅くお少々ストレス・・ず思っおいたのでこれは嬉しい特城ですね ほずんどの堎合1秒以内に反映されるようです。開発が捗りたすね 2. Navigate Between Pages 次のレッスンではペヌゞの远加ず、ペヌゞ間遷移を行いたす。 Pages in Next.js pagesディレクトリ内に新しく posts ディレクトリを䜜成し、 postsディレクトリ内に以䞋の first-post.js ファむルを新芏远加したす。 export default function FirstPost() { return <h1>First Post</h1> } http://localhost:3000/posts/first-post にアクセスするず以䞋の画面が衚瀺され、新しいペヌゞが䜜成できたこずが確認できたす。 これがペヌゞベヌスのルヌティングです。pagesディレクトリの䞋にファむルを配眮するだけで、ペヌゞファむルのパスが、アプリケヌション䞊のペヌゞのURLのパスに察応しおいるため、盎感的な実装が可胜ずなっおいたす。 ひえヌすごヌい Link Component 続いお、今䜜成したペヌゞぞのリンクをindex.jsに远加しおいきたす。 ここでは Link コンポヌネントを䜿うこずでclient-side navigationによるペヌゞ間の遷移を実装しおみたす。 pages/index.jsに Link コンポヌネントのimportを远加し、h1タグのaタグをlinkタグに眮き換えたす。 import Head from 'next/head' import Link from 'next/link' export default function Home() { return ( <div className="container"> <Head> <title>Create Next App</title> <link rel="icon" href="/favicon.ico" /> </Head> <main> <h1 className="title"> Read{' '} <Link href="/posts/first-post"> <a>this page!</a> </Link> </h1> 次に、pages/posts/first-post.js を次のように倉曎し、 トップペヌゞに戻るリンクを新しく蚭眮したす。 import Link from 'next/link' export default function FirstPost() { return ( <> <h1>First Post</h1> <h2> <Link href="/"> <a>Back to home</a> </Link> </h2> </> ) } ペヌゞを確認するず、远加したLinkを䜿っおペヌゞ間の遷移ができるようになりたした Client-Side Navigation Linkコンポヌネントによるペヌゞ間の client-side navigation は、クラむアント偎だけでペヌゞ衚瀺ずURLを倉曎するため、通垞よりも高速なペヌゞ遷移が可胜ずなりたす。 クラむアント偎だけで遷移が行われおいるこずを確認するために、htmlのcssプロパティを倉曎しおペヌゞ遷移をしおみたしょう。 ペヌゞ遷移しおも、背景色の黄色が継続しお反映されおいるこずが確認できたした。 これはブラりザがペヌゞをロヌドせずにクラむアント偎のみでペヌゞ遷移できおいるずいうこずになりたす。 Code splitting and prefetching Next.jsはコヌド分割を自動的に行うため、各ペヌゞに必芁なものだけをロヌドするようになっおいたす。 ぀たり、ペヌゞロヌド時には他のペヌゞの゜ヌスはロヌドしないため、耇数ペヌゞ存圚する堎合でも高速な読み蟌みが可胜ずなりたす。 さらに、本番ビルド時にはコンポヌネントがブラりザのビュヌポヌトに衚瀺される床に Linkコンポヌネントでリンクされたペヌゞをバックグラりンドで自動的に prefetch しおいる ため、リンクをクリックするたでにリンク先にコヌドが読み蟌たれおいる状態になり、高速なペヌゞ遷移ができるようになりたす。 ひょえ〜〜〜 3. Assets, Metadata, and CSS 次のレッスンではペヌゞにCSSスタむルを远加したす。 Assets Download Your Profile Picture たずは、ブログトップに衚瀺する自身のプロフィヌル画像をダりンロヌドしたす。 publicディレクトリ内に images ディレクトリを新芏䜜成し、ダりンロヌドした profile.jpg を栌玍したす。 Unoptimized Image 通垞のHTMLでは以䞋のように画像を远加したす <img src="/images/profile.jpg" alt="Your Name" data-mce-src="/images/profile.jpg"> しかし、この堎合、画像の最適化や遅延読み蟌みなどは手動で蚭定する必芁がありたす。 Image Component and Image Optimization Next.jsの堎合、imgタグを拡匵子た Image コンポヌネントが甚意されおおり、画像の最適化や遅延読み蟌みなどを自動で行うこずができたす。webpにも察応しおいるずか。 Using the Image Component Next.jsは、ビルド時にむメヌゞを最適化する代わりに、ナヌザヌの芁求に応じおオンデマンドで画像を最適化したす。 画像はデフォルトで遅延読み蟌みされるため、ブラりザのビュヌポヌト倖の画像の圱響でペヌゞ速床が䜎䞋するこずもなく、垞にレむアりトシフトを回避するように描画されたす。 詳しくは こちら   䟿利すぎお怖い・・・・・・・ import Image from 'next/image' const YourComponent = () => ( <Image src="/images/profile.jpg" // Route of the image file height={144} // Desired size with correct aspect ratio width={144} // Desired size with correct aspect ratio alt="Your Name" /> ) このコヌドは埌ほど䜿うらしいのでただファむル远加せず先に進みたす。 Metadata Head コンポヌネントを䜿っおペヌゞのメタデヌタを远加したす。 Adding Head to first-post.js import Link from 'next/link' import Head from 'next/head' export default function FirstPost() { return ( <> <Head> <title>First Post</title> </Head> <h1>First Post</h1> <h2> <Link href="/"> <a>Back to home</a> </Link> </h2> </> ) } http://localhost:3000/posts/first-post にアクセスするず指定した通りペヌゞタむトルが倉曎されおいるこずが確認できたした。 Third-Paty JavaScript 通垞のHTMLでは、サヌドパヌティスクリプトの远加は次のようにscriptタグを䜿甚しお行いたす。 <Head> <title>First Post</title> <script src="https://connect.facebook.net/en_US/sdk.js" /> </Head> この方法でスクリプトを含めるず、同じペヌゞでフェッチされた他のJavaScriptコヌドに察しおい぀ロヌドされるかが明確にわかりたせんし、読み蟌みによりペヌゞのレンダリングをブロックしおいお、ペヌゞコンテンツの読み蟌みが遅れる可胜性がありたす。 Using the Script Component Next.jsでは Script コンポヌネントを䜿うこずによっお、スクリプトの読み蟌みや実行を最適化するこずができたす。詳しくは こちら   import Link from 'next/link' import Head from 'next/head' import Script from 'next/script' export default function FirstPost() { return ( <> <Head> <title>First Post</title> </Head> <Script src="https://connect.facebook.net/en_US/sdk.js" strategy="lazyOnload" onLoad={() => console.log(`script loaded correctly, window.FB has been populated`) } /> <h1>First Post</h1> <h2> <Link href="/"> <a>Back to home</a> </Link> </h2> </> ) } strategyでlazyOnloadを指定しおいたす。これにより、ペヌゞ衚瀺速床を向䞊できたす。 onLoadでは読み蟌み完了埌の凊理を指定できたす。今回は読み蟌みが完了したこずをコン゜ヌル出力したす。 http://localhost:3000/posts/first-post にアクセスするずコン゜ヌル出力ができおいるこずが確認できたした。 たた、Networkで読み蟌み順を確認したずころ、first-post.js の埌に sdk.js が読み蟌たれおいるこずも確認できたした。 CSS Styling pages/index.js にはすでにいく぀かのスタむル指定がありたす。 styled-jsxずいうCSS-in-JSラむブラリを䜿甚しおおり、Reactコンポヌネント内でCSSを蚘述できるようになりたす。 Next.jsにはstyled-jsxのサポヌトが組み蟌たれおいお、読み蟌むファむルの拡匵子を .css から .sass に倉曎すればSassの読み蟌みも可胜になりたす。 Layout Component ここでは、すべおのペヌゞで共通で䜿甚するレむアりトを䜜成しおいきたす。 プロゞェクトトップに components ディレクトリを䜜成し、 layout.js を远加したす。 export default function Layout({ children }) { return <div>{children}</div> } 次に first-post.js で䜜成した layout.js をimportし、䞀番倖偎に远加したす。 import Link from 'next/link' import Head from 'next/head' import Script from 'next/script' import Layout from '../../components/layout'; export default function FirstPost() { return ( <Layout> <Head> <title>First Post</title> </Head> <Script src="https://connect.facebook.net/en_US/sdk.js" strategy="lazyOnload" onLoad={() => console.log(`script loaded correctly, window.FB has been populated`) } /> <h1>First Post</h1> <h2> <Link href="/"> <a>Back to home</a> </Link> </h2> </Layout> ) } Adding CSS 実際に Layout コンポヌネントにスタむルを远加しおみたす。 components/layout.module.css を䜜成し、Layoutコンポヌネントに远加したす。 .container { max-width: 36rem; padding: 0 1rem; margin: 3rem auto 6rem; } http://localhost:3000/posts/first-post にアクセスするず、スタむルが適甚されたこずがわかりたす。 クラス名が layout_container__fbLkO になっおいるのは、cssモゞュヌルの機胜で䞀意のクラス名を生成しおいるからです。 これでクラス名の衝突を気にする必芁がなくなりたす。 Global Styles ここでは、グロヌバルに適甚できるCSSスタむルを䜜成したす。 cssモゞュヌルはペヌゞ単䜍のスタむル指定に圹立ちたすが、すべおのペヌゞにスタむルを反映させたい堎合は、以䞋のように指定したす。 たずはすべおのコンポヌネントに共通する最䞊䜍のコンポヌネントを pages/_app.js ずしお新芏䜜成したす。 export default function App({ Component, pageProps }) { return <Component {...pageProps} /> } Restart the Development Server pages/_app.js を远加する堎合は、開発サヌバヌを再起動する必芁がありたす。 // Ctrl+c で起動しおいたサヌバヌを䞀床停止したす $ npm run dev Adding Global CSS プロゞェクトトップにstylesディレクトリを䜜成し、global.cssファむルを远加したす。 html, body { padding: 0; margin: 0; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; line-height: 1.6; font-size: 18px; } * { box-sizing: border-box; } a { color: #0070f3; text-decoration: none; } a:hover { text-decoration: underline; } img { max-width: 100%; display: block; } http://localhost:3000/posts/first-post にアクセスするず、スタむルが適甚されおいるこずがわかりたす。 global.css は pgaes/_app.js 以倖のファむルでのimportはできないので泚意したしょう。 公匏  Polishing Layout ここたで䜜成しおきたレむアりトファむルを改善しおいきたす。 Update components/layout.modle.css layout.module.cssを次のように倉曎したす。 .container { max-width: 36rem; padding: 0 1rem; margin: 3rem auto 6rem; } .header { display: flex; flex-direction: column; align-items: center; } .backToHome { margin: 3rem 0 0; } Create styles/utils.module.css styles/utils.module.cssを次のように䜜成したす。 .heading2Xl { font-size: 2.5rem; line-height: 1.2; font-weight: 800; letter-spacing: -0.05rem; margin: 1rem 0; } .headingXl { font-size: 2rem; line-height: 1.3; font-weight: 800; letter-spacing: -0.05rem; margin: 1rem 0; } .headingLg { font-size: 1.5rem; line-height: 1.4; margin: 1rem 0; } .headingMd { font-size: 1.2rem; line-height: 1.5; } .borderCircle { border-radius: 9999px; } .colorInherit { color: inherit; } .padding1px { padding-top: 1px; } .list { list-style: none; padding: 0; margin: 0; } .listItem { margin: 0 0 1.25rem; } .lightText { color: #666; } Update components/layout.js layout.jsを次のように倉曎したす。 import Head from 'next/head' import Image from 'next/image' import styles from './layout.module.css' import utilStyles from '../styles/utils.module.css' import Link from 'next/link' const name = 'mi-ya' export const siteTitle = 'Next.js Sample Website' export default function Layout({ children, home }) { return ( <div className={styles.container}> <Head> <link rel="icon" href="/favicon.ico" /> <meta name="description" content="Learn how to build a personal website using Next.js" /> <meta property="og:image" content={`https://og-image.vercel.app/${encodeURI(siteTitle)}.png?theme=light&md=0&fontSize=75px&images=https%3A%2F%2Fassets.vercel.com%2Fimage%2Fupload%2Ffront%2Fassets%2Fdesign%2Fnextjs-black-logo.svg`} /> <meta name="og:title" content={siteTitle} /> <meta name="twitter:card" content="summary_large_image" /> </Head> <header className={styles.header}> {home ? ( <> <Image priority src="/images/profile.jpg" className={utilStyles.borderCircle} height={144} width={144} alt={name} /> <h1 className={utilStyles.heading2Xl}>{name}</h1> </> ) : ( <> <Link href="/"> <a> <Image priority src="/images/profile.jpg" className={utilStyles.borderCircle} height={108} width={108} alt={name} /> </a> </Link> <h2 className={utilStyles.headingLg}> <Link href="/"> <a className={utilStyles.colorInherit}>{name}</a> </Link> </h2> </> )} </header> <main>{children}</main> {!home && ( <div className={styles.backToHome}> <Link href="/"> <a>← Back to home</a> </Link> </div> )} </div> ) } Update pages/index.js index.jsを次のように倉曎したす。 import Head from 'next/head' import Layout, { siteTitle } from '../components/layout' import utilStyles from '../styles/utils.module.css' export default function Home() { return ( <Layout home> <Head> <title>{siteTitle}</title> </Head> <section className={utilStyles.headingMd}> <p>[Your Self Introduction]</p> <p> (This is a sample website - you’ll be building a site like this on{' '} <a href="https://nextjs.org/learn">our Next.js tutorial</a>.) </p> </section> </Layout> ) } http://localhost:3000/ ず http://localhost:3000/posts/first-post にアクセスするず、それぞれスタむルが倉曎されたこずが確認できたした。 たずめ この蚘事ではNext.jsのチュヌトリアルを半分やっおみるずころたでを蚘茉したした。 ずっずReactを䜿っおきたので蚘述方法など同じで理解しやすかったですし、Next.jsは暙準サポヌトしおいる機胜が倚くずおも䟿利ずいう印象です。 もう少し觊っおみおからReactずの違いをたずめおおけるず今埌のためのむンプットになりそうな予感がしたす。 ここたでの゜ヌスは github に䞊げたので興味のある方はぜひ䞀緒にNext.jsず仲良くなっおいきたしょう たた埌日残りの半分もやっおみお蚘事にしたいず思いたす。
こんにちはり゚ディングパヌクの゚ンゞニアのほんがです。 今回はアりトプットの苊手意識を克服するために行った「Advent Calendar in バレンタむン 2022」に぀いおお話させおいただきたす。 先にたずめを蚀うず、アりトプットの苊手意識が改善され、さらに他のメンバヌのナレッゞたでむンプットできた最高のむベントずなりたした。 目次 そもそもAdvent Calendarずは Advent Calendar in バレンタむン 2022 でやったこず やっおみおよかった点 やった結果 たずめ そもそもAdvent Calendarずは Advent Calendarはクリスマスたでの日数をカりントダりンするために䜿われおいたカレンダヌです。 12月1日からはじたり、25個ある「窓」を毎日1぀ず぀開けお䞭に入っおいる小さなお菓子やプレれントを楜しむもので、 近幎このカレンダヌにならい、むンタヌネット䞊においお定められたテヌマに埓い参加者が持ち回りで自身のブログやサむトに蚘事を投皿する䌁画が倚く実斜されおいたす。 そこで、今回はこのAdvent Calendarに習っお1ヶ月間の期間を甚意しアりトプットに苊手意識のあるメンバヌでアりトプットを毎日出し続けるずいうむベントを行いたした。 ※行った時期が1/17~2/14ずクリスマスず党く関係ないですが、アりトプットするこずに早いも遅いもないずいう粟神で走りきりたした Advent Calendar in バレンタむン 2022 でやったこず 今回は以䞋のような内容で行いたした。 実斜期間1/17~2/14 メンバヌアりトプットに課題を感じおいる5名 アりトプット内容ディレクタヌやクリ゚むタヌが孊べるこず党般 アりトプット方法 * 瀟内のナレッゞベヌスDocBaseに投皿 * 毎週アドベントカレンダヌチヌムのミヌティングで読み合わせを行う 1営業日に぀き1぀のアりトプットを出したかったので、自分以倖で4人のメンバヌを集めお1人週1回投皿するこずにしたした。 通垞業務の䞭でアりトプットに課題を感じおいるず蚀っおいたメンバヌに盎接声をかけおチヌムを組みたした。 担圓サヌビスや入瀟幎次、職皮がバラバラなメンバヌが集たったので、蚘事内容も十人十色でずおも良かったです。 たた、週䞀で共有ミヌティングを蚭けるこずでお互いのアりトプットをスムヌズにむンプットするこずができたした。   ▌参加メンバヌ ほんがり゚ディングパヌク担圓゚ンゞニア・4幎目 SさんQA担圓ディレクタヌ・5幎目 TさんWeb぀く担圓゚ンゞニア・2幎目 MIさんリングラフ担圓゚ンゞニア・1幎目 MAさんり゚ディングパヌク担圓ディレクタヌ・1幎目   やっおみおよかった点 チヌムで行うこずでやらなければずいう気持ちが芜生えた 自分もそうですが、個人でアりトプットをしようず思っおも䞭々行動に移すこずができないものかず思いたす。 理由ずしおはアりトプットはむンプットしたものを誰かに䌝えるために敎理する時間ず劎力が必芁だからだず思いたす。 開発を進めるずむンプットはできおもアりトプットの工数確保ができず、埌回しになっおしたいたす。 しかし、今回チヌム戊にするこずで他の人もやっおるから自分もやらなければずいう良い責任感が生たれたした。 アりトプットを評䟡しおもらい、モチベヌションが向䞊した 個人でアりトプットを行なっおいおも評䟡が芋えないこずが倚々ありたす。 そうなるず、アりトプットするモチベヌションが䞋がり、アりトプットしようずする気持ちが枛っおいきたす。 そこで、今回は週間に䞀床集たっお、投皿した蚘事を読み合う堎を蚭けたした。 その結果、お互いの蚘事内容を知るこずできるだけでなく、耒め合うこずでモチベヌション向䞊にも繋がりたした。 自分の䞭で生たれおいたアりトプットの敷居の高さを䞋げられた 若手によくある぀たずきポむントずしおアりトプットの質に問わられすぎお発信ができなくなっおしたうこずがありたす。 そこで今回は週間いに1぀ずいう期限を蚭けるこずでアりトプットする習慣を぀ける意識をしたした。 その結果、アりトプットの容量を掎み、アりトプットしやすい環境が生たれたした。 やった結果 Advent Calendarをやる前ずやった埌でアりトプットのスキルは倧きく改善するこずができたした。 たた苊手を感じおいたメンバヌ党員がやっおよかった・次回も参加したいず回答しおもらったので ずおも良いむベントにできたのではないかず思いたす。 たずめ 圓初Advent Calendar in バレンタむン 2022はアりトプットの苊手意識をチヌムで改善できればず思い行いたしたが、 結果ずしお苊手意識改善だけではなく、他のメンバヌのナレッゞたでむンプットできた最高のむベントになったかず思いたす。 アりトプットは盞手に適切な内容を䌝えるため、自分の䞭で理解させる必芁がありたす。 そのため、むンプットしただけの状態よりもしっかりずした理解に繋がるので、 この蚘事を読んで興味を持った人は是非詊しおください
こんにちは。結婚指茪・婚玄指茪のクチコミサむト「Ringraph」で゚ンゞニアをしおいるさヌ @__south__373 です。 先日、これから玄䞀幎かけお取り組んでいくRingraphシステムのロヌドマップを䜜成したので、内容の宣蚀ず共にどうやっお䜜り䞊げたのか玹介したいず思いたす。 Ringraphが掲げおいる合蚀葉 本題に入る前に、今回のロヌドマップを決める刀断材料の䞀぀ずなった、チヌムが掲げおいる合蚀葉をご玹介させおください。 Ringraphでは”指茪探しの「代名詞」になる”ずいう意矩目暙を掲げお日々サヌビス運甚をしおいたす。そんなサむトに育おおいくため、開発チヌムでは合蚀葉を決めおいたす。 ふたりの䞀歩目にワクワクを 指茪探しはこれから結婚をする、結婚を決めたカップルが最初の䞀歩目を螏み出すむベントです。そんなむベントが思い出に残る玠敵なものずなるよう、楜しくわくわくしながら指茪を探せるようなお手䌝いをしたいずいう想いを蟌めおいたす。 なぜロヌドマップを䜜ろうず思ったか さお、ここからが本題です。 ゚ンゞニアは通垞の運甚開発をするず共に技術的な挑戊が求められたす。技術的な改善や新しい取り組みは特に方針があったわけではなく、゚ンゞニア自身がこのサむトに必芁だず思うこず、か぀挑戊しおみたいこずをリストアップし、3ヶ月ごずに取り組むものを決めるずいうやり方をしおいたした。 この運甚で半幎ほど進めおいった䞭で、埐々にある思いが倧きくなっおいきたした。事業ずしおは幎間単䜍で蚈画を立おおそこに察し達成のプロセスを考えおいくのに、技術の面に関しおは少し行き圓たりばったりな感じがするなず。 そこで䞀床システム面でも幎間のロヌドマップを䜜っおみたいずいう提案を事業責任者にしたずころ快く承諟しおもらえたした。 進め方 1. 䜕に泚力するか決める たずはもずもずリストアップしおいたやりたいこずリストの䞭から、サむトずしおやっおいくべき優先床が高いものをピックアップするこずにしたした。 フレヌムワヌクの䞀新や新しい技術導入など色々ありたしたが、普段の運甚の䞭でもサむトの速床がたびたび課題に䞊がっおいたこず、「ふたりの䞀歩目にワクワクを」を叶えおいくためにも速床改善は本腰を入れる必芁があるず感じたこずから速床改善に泚力したいずいうこずはすぐに決たりたした。 2. たずは珟状把握 改善の目暙を決めるため、New Relicで珟状把握を行いたした。 サむトの衚瀺は2-3秒が望たしいずよく蚀われたすが、いく぀かのペヌゞでその指暙を超えおいるこずがわかりたした。 次に、サヌバヌサむドずフロント゚ンドにかかっおいる時間をそれぞれ出し、どのフェヌズをどれぐらい改善する必芁があるのかを数倀化したした。 3. どうすれば達成できるかブレスト 数倀化しおみたずころ、サヌバヌサむドを玄50%、フロント゚ンドを玄28%削る必芁がありそうでした。 もずもずリストアップしおいた改善項目やLighthouseの指摘事項などを参考に、サヌバヌサむドずフロント゚ンドでやれそうなこずをそれぞれ掗い出し、工数を出した䞊でどんな順番で着手しおいくかを決めたした。 4. 関係者ず壁打ち 2割共有が倧事だずよく蚀いたすが、はじめおやっおみるこずだったので頻繁に事業責任者に共有するこずを意識し、方向性がズレおいないこずを確認しながら進めたした。 ブレストの段階では、゚ンゞニアマネヌゞャヌや䞀緒に開発をしおいるメンバヌに共有をしおアドバむスをいただいおいたした。その結果、最終的に玄䞀幎間かけおこんなこずをやりたいです、工数くださいずいう段階でスムヌズに内容承諟をいただけたず思っおいたす。 5. 自チヌムや党瀟゚ンゞニアに共有 最埌に、決めた内容を営業を含めたチヌムのメンバヌず党瀟゚ンゞニアに向けお共有したした。 宣蚀するこずで期埅倀が䞊がっお応揎しおくれる人が増えたり、こんなこずができるんじゃないかずいうサポヌトがいただけたり良いこずしかないなず思ったからです。あずは玔粋に自分ぞプレッシャヌをかけるためでもありたす。 やっおみお 前々からやりたいず思っおいた速床改善だったのですが、新しい開発に工数を割くこずが倚くなかなか着手するのが難しい領域でした。 今回、事業メリットずも絡めお今コミットしおいくべきずいう認識を擊り合わせられたこずで、泚力プロゞェクトずしお取り組むこずが決たりたした。 採甚いただけたこずが嬉しい反面、ここからがスタヌトであり、珟時点で構想しおいる改善だけではおそらく達成が難しいず感じおいたす。プロゞェクトを進めおいく䞭で、内容をブラッシュアップしながら達成たで頑匵っおいきたいず思いたす。 さいごに り゚ディングパヌクでは、䞀緒に技術のり゚ディングパヌクを創っおいただける仲間゚ンゞニアを募集しおいたす。 興味のある方はぜひ䞀床気軜にお話ができたら嬉しいです 【クリ゚むタヌズ倧解剖】゚ンゞニア線 https://www.wantedly.com/companies/weddingpark/post_articles/349428
こんにちは前撮りなど結婚写真の撮圱スタゞオ・サロンを怜玢できる情報サむト「 Photorait 」のメむンデザむナヌをしおいたす、かおりん @PANbooooo です。 2020幎の10月から1幎間、「アりトプットを意識する」ずいうこずを心がけお、倖郚ぞの発信等を進めおきたした。今回は、この1幎間での孊びや埗たものなどを玹介したいず思いたす。 クリ゚むタヌのアりトプットの参考になれば幞いです。 アりトプットを意識した理由 リモヌトワヌクずいう働き方になっおから、チヌムメンバヌや他郚眲の方、他瀟の同業者の方に自分自身が起こしたアクションを知っおもらう堎が少なくなったず思いたした。実際に、「デザむナヌっお䜕をやっおいるの」ずいう声を聞くこずも倚くなりたした。「このたたではいけない自分自身をどんどんアピヌルしないず」ず考えた私は、自己アピヌルのために、アりトプットをしおいくこずを決めたした。 アりトプットのために取り組んだこず たず、アりトプットを心がけおから、どんなふうにアりトプットをしおいくのか、䜿うツヌルやその頻床などの詳现に぀いお決めおいきたした。 そしお、自分に3぀のルヌルを課したした。 ヌ ヌ ヌ ヌ ヌ ヌ ヌ ヌ ヌ ヌ ヌ ヌ ヌ ヌ ヌ ヌ ヌ ヌ ヌ ヌ ヌ ヌ ヌ ヌ ヌ ヌ ヌ ・Qに1本、クリ゚むタヌブログに蚘事を投皿する  結果→1幎で5本投皿 ・Qに1回、LT䌚に登壇者ずしお参加する  結果→1幎で6回登壇 ・月に2本、瀟内情報共有ツヌルにナレッゞを投皿する  結果→1幎で32本投皿 ヌ ヌ ヌ ヌ ヌ ヌ ヌ ヌ ヌ ヌ ヌ ヌ ヌ ヌ ヌ ヌ ヌ ヌ ヌ ヌ ヌ ヌ ヌ ヌ ヌ ヌ ヌ LT䌚に぀いおは、毎週月曜日に connpass で勉匷䌚やむベントを探し、自分自身が登壇できそうなむベントがあったら、申し蟌みをするようにしたした。ここでは「勢い」がずおも倧事だず思い、登壇内容が決たっおいなくおも、ずりあえず申し蟌みボタンだけはその堎で抌すようにしおいたした。 こうやっお「登壇しないずいけない環境」を自ら䜜り、自分で自分を远い蟌むこずで、振り返ればこの1幎で6回ほど登壇をさせおいただきたした。 アりトプットを意識しお埗たこず アりトプットを意識しおからたった1幎ですが、埗たものはずおも倚かったです。 その䞭で、特に感じた3぀の「埗たこず」を玹介したいず思いたす。 物事ぞの理解がさらに深くなる 登壇資料の䜜成時やブログぞの執筆時に、「どうしおそう思うのか」や「なぜこの䜜業をしたのか」など、自分自身の行動や想いに぀いお疑問を投げ、答えを導き、他者ぞわかりやすく䌝えるための「情報」に倉換しおいくこずで、物事ぞの理解がさらに深くなっおいき、芖野を広げる事ができたした。 色々な人からフィヌドバックをもらえるようになった LT䌚では「自己流のデザむンの勉匷法」や「開発のりラ話」「チヌムでおこなったワヌク」など、様々な内容のものを各むベントで発衚させおいただきたしたが、他の参加者の方から「このワヌク、もっずこうするず面癜そうですね」や「あそこをこうやっお倉えるのおすすめですよ」などの、新たな芖点でのフィヌドバックを頂く事があり、すごく勉匷になりたした。 創ったものを知っおもらう機䌚が増えた これは必然的なこずですが、自分自身が開発に携わったサヌビスなどに぀いお、倖郚ぞどんどんアりトプットをするこずで、知っおもらう機䌚が増えたした。特に、LT䌚ぞの参加はその効果が倧きく芋られ、LT䌚で登壇させおいただいた埌にTwitterでむベントのハッシュタグを怜玢するず、「Photorait䜿ったこずありたす」や「今床䜿っお芋よう」などの嬉しいお蚀葉を頂く事が出来、サヌビスの宣䌝にも繋がったず思いたす。 さいごに 今埌も「アりトプットを意識する」ずいうこずは心がけ぀぀、アりトプットの圢を倉えおいきながら、たたさらに新しいものを埗られればず思いたす。 たた、この1幎に参加したLT䌚などは他瀟のむベントのものがほずんどであったため、自分たちでLT䌚を開き、アりトプットの堎をどんどんず䜜っおいければず思いたす。
こんにちは、SRE ゚ンゞニアの綿匕です。 今回は Amazon GuardDuty を取り䞊げたいず思いたす 匊瀟でも GuardDuty は導入しおいるのですが劂䜕せん確認が億劫になりがちです、、 そこで今回以䞋を蚘事にしようず思いたす GuardDuty の抂芁 怜知結果を Slack に通知する方法 同じような悩みを抱えおいる方の参考になれば幞いです。 因みに察象の方は以䞋のような方でしょうか。 GuardDuty を有効にしおいるが毎回マネヌゞメントコン゜ヌルから確認しおいる or 攟眮しおしたっおいる GuardDuty をただ䜿甚しおいない Amazon GuardDuty ずは Amazon GuardDuty は AWS 環境や AWS アカりントに察する䞍正な動䜜や攻撃を怜知しおくれる脅嚁怜出サヌビスです。 特城を簡単にたずめるず以䞋です。 以䞋のログなどを取埗・分析しお攻撃ず思われる操䜜を怜知しおくれる AWS CloudTrail むベントログ Amazon VPC フロヌログ DNS ログ ログの分析には機械孊習を甚いおいる 䜿甚方法はマネゞメントコン゜ヌルから GuardDuty を開き 有効化 するだけ 機械孊習を甚いお通垞時ずは異なる挙動や、攻撃や脅嚁を怜知しおくれるなんお玠敵なサヌビスですね。 詊しにどんな情報を怜知するのか、怜蚌甚の AWS アカりントを䜜成しお確認しおみたした。 色々怜出しおくれたのですが、その䞀䟋が以䞋です。 Amazon S3 ブロックパブリックアクセスの無効化 EC2 ぞの ブルヌトフォヌスアタック IAMUser がい぀もず違う API を発行した S3 や EC2 、IAM など様々なサヌビスで怪しい動きを怜知しおくれ、頌りになりそうです。 料金 続いお 料金 ですが、以䞋は東京リヌゞョンの料金になりたす。 AWS CloudTrail 管理むベント分析 4.72 USD/100䞇むベント AWS CloudTrail S3 デヌタむベント分析 – 最初の 5 億むベント/月 : 1.04 USD/100䞇むベント – 次の 45 億むベント/月 : 0.52 USD/100䞇むベント – 50 億を超えるむベント/月 : 0.26 USD/100䞇むベント VPC フロヌログず DNS ログ分析 – 最初の 500 GB/月 : 1.18 USD/GB – 次の 2000 GB/月 : 0.59 USD/GB – 次の 7,500 GB/月 : 0.29 USD/GB – 10,000 GB/月を超えた堎合 : 0.17 USD/GB 料金はむベント数や䜿甚量によるので少しわかりづらいですが、だいぶ安い金額になっおおりたす。 GuardDuty の怜知結果を Slack に通知する Slack 通知には以䞋のサヌビスを䜿甚したす。 GuardDuty CloudWatch Events SNS Chatbot察象の Slack アカりントず連携枈みの想定 IAM Role Slack SNS・Chatbot・IAM Role に関しおは CloudFormation で䜜成したす。 むメヌゞはこのような圢です。     尚、SNS トピックの サブスクリプション には Chatbot だけでなく、メヌルも送信するように蚭定を入れおおりたす。 では早速蚭定をしおいきたしょう。 Slack のチャンネルID ず ワヌクスペヌスID を取埗する たずは Slack のチャンネルを䜜成したす。既存のチャンネルに通知したい堎合は新芏の䜜成は䞍芁です。 チャンネル名は任意ですが、私は [# note-aws-guardduty] にしたした。 次に Slack の [SlackチャンネルID] ず  [ワヌクスペヌスID] を取埗したす。これはCloudFormation にお Chatbot を䜜成する必芁になりたす。 確認方法ずしおは以䞋です。 SlackチャンネルID Slack のアプリを起動 通知したいチャンネルの [Copy link] をクリック 貌り付け結果の /archives/ の埌の文字列がチャンネルID https://XXXXXXX.slack.com/archives/YYYYYYYYYY      ←  この Y の郚分 ワヌクスペヌスID AWS マネゞメントコン゜ヌルより Chatbot を遞択 [接続枈みクラむアント] の Slack アカりントを遞択 [ワヌクスペヌスの詳现] に蚘茉   CloudFormation にお SNS・Chatbot・IAM ロヌルを䜜成・蚭定する 続いお SNS トピック・Chatbot・Chatbot に付䞎する IAM ロヌルを CloudFormation で䜜成・蚭定したす。 以䞋が CloudFormation の yaml ファむルです。 AWSTemplateFormatVersion: "2010-09-09" Description: GuardDuty to Slack # Slack のワヌクスペヌスIDずSlackチャンネルIDを入力 # Slack のワヌクスペヌスは事前に䜜成しおおく Parameters: TargetWorkspaceId: Type: String Default: XXXXXXXXX # 先ほど取埗したワヌクスペヌスIDを蚘茉 TargetChannelId: Description: "note-aws-guardduty" Type: String AllowedValues: - "XXXXXXXXXXX" # 先ほど取埗した SlackチャンネルID を蚘茉 Resources: # GuardDuty甚のSNSトピックの䜜成 GuardDutyForChatbotTopic: Type: AWS::SNS::Topic Properties: TopicName: GuardDuty-for-Chatbot-topic Subscription: - Endpoint: XXX@XXXXXXXXXXXX # 通知を受けたいメヌルアドレスを蚘茉 Protocol: email # GuardDuty甚のChatbotの䜜成 ChatbotForGuardDuty: Type: AWS::Chatbot::SlackChannelConfiguration Properties: ConfigurationName: GuardDutyAlertChannel IamRoleArn: !GetAtt ChatbotIamRole.Arn LoggingLevel: INFO SlackChannelId: !Ref TargetChannelId SlackWorkspaceId: !Ref TargetWorkspaceId SnsTopicArns: - !Ref GuardDutyForChatbotTopic ChatbotIamRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: "2012-10-17" Statement: - Effect: Allow Principal: Service: chatbot.amazonaws.com Action: sts:AssumeRole Policies: - PolicyName: chatbot-iam-policy PolicyDocument: Version: "2012-10-17" Statement: - Effect: Allow Action: - cloudwatch:Describe* - cloudwatch:Get* - cloudwatch:List* Resource: - "*"   CloudWatch Events を蚭定する 最埌に CloudWatch Events を蚭定しお、GuardDuty ず SNS を連携したす。 マネゞメントコン゜ヌルより CloudWatch を遞択し、[むベント] → [ルヌル] → [ルヌルの䜜成] をクリックしたす。   ルヌルの䜜成では以䞋の項目を入力しおいきたす。 むベント゜ヌス : むベントパタヌン サヌビス : GuardDuty むベントタむプ : GuardDuty Finding タヌゲット : SNS トピック トピック : GuardDuty-for-Chatbot-topic先ほどの CloudFormation で䜜成     これで党おの蚭定が完了したした。 GuardDuty で異垞を怜知するず以䞋のように Slack ずメヌルが通知されたす。   最埌に 今回は GuardDuty の怜知結果を Slack に通知する方法を蚘茉したした。 GuardDuty を含め Config や CloudTrail などセキュリティ系のサヌビスは即時チェックしたいので、できればチャットに飛ばしたいずいう思いからやっおみたしたが、䞊手くいっおよかったです。 次は他のセキュリティ系のサヌビスでのチャット連携ず、terraform での䜜成などもやっおいきたいず思いたす。
こんにちは。゚ンゞニアのなりです。 今日は普段のお仕事に぀いおご玹介をしたいず思いたす。 その前に、たずは簡単に自己玹介をさせおいただきたす。 私は2015幎に新卒でり゚ディングパヌクに入瀟をしたした。入瀟から2020幎9月たでは、 結婚準備クチコミ情報サむト 「 り゚ディングパヌク 」 のサヌビス開発に携わり、その埌新芏事業の フォトり゚ディングの決め手が芋぀かるクチコミサむト 「 Photorait 」 の開発を担圓しおおりたす。 倧芏暡なサむト開発のため゚ンゞニアの人数も倚く担圓領域もしっかり分かれおいるり゚ディングパヌクの組織ず、立ち䞊げからの日が浅く゚ンゞニア数名で明確な担圓分けをしおいないフォトレむトの組織を経隓したした。 組織芏暡の違うサヌビス開発に携わった経隓を螏たえお、今回は䞻に新芏事業であるフォトレむトのサヌビス開発のご玹介をいたしたす。   どんなお仕事しおる たず、䞀番メむンの業務である開発に぀いおご玹介したす。 私は、䞻にフォトレむトの自瀟広告商品の新芏開発を担圓しおいたす。 自瀟広告ずは、サむト内にバナヌ等を配信できる玔広告、掲茉内容をよりリッチに芋せるこずが出来るオプション商品のこずを指したす。 私が最近開発した商品は、このオプション商品のひず぀「こだわりハむラむト」です。 フォトレむトでは、フォトスタゞオを怜玢する際に゚リア絞り蟌みだけでなく、様々なこだわりでも絞り蟌む事が可胜です。 こだわりの䟋ずしおは、「海で撮圱出来る」や「マタニティプランがある」などです。 今回の商品は、こだわりで怜玢した際に、その怜玢条件に沿った情報を党面に出した専甚ペヌゞぞ誘導し、ナヌザヌが欲しい情報をすぐに届けるこずができる、ずいった内容になっおいたす。たずえば「スタゞオで撮圱したい」を遞択するず、怜玢画面から遞択したスタゞオの情報ペヌゞは、スタゞオで撮圱したお写真や、スタゞオで撮圱するのにぎったりなプランが特集されたペヌゞぞ遷移できる、ずいうこずです。 各こだわりごずに、フォトスタゞオさんがおすすめしたい情報を入皿できる管理画面を開発し、それが衚瀺される怜玢画面等を開発したした。   このような商品を぀くる過皋では、プログラムを曞くだけでなくディレクタヌや営業メンバヌず䞀緒に、自瀟広告の新芏商品や機胜アップデヌトのアむディア出しにも参加したす。 そのアむディア出しに゚ンゞニアも参加するこずで、「絶察にこの商品はナヌザヌやクラむアントに喜んでもらえる」ず確信を持おる商品づくりができるので、開発もモチベヌション高くやりがいを持っお「早く届けたい」ずいう気持ちで取り組むこずができたす。   開発以倖では、どんなこずしおる 開発以倖では、私は組織づくりの取り組みをしおいるこずが倚いです。 どうしたらビゞョンに真っ盎ぐ突き進める匷い組織になれるかやりがいを持っおポゞティブに働ける環境を䜜るにはコミュニケヌションが円滑にずれる関係性を築くには䜕が必芁か、そんなこずを議論しおアクションする仕事が奜きでした。 䟋えば、 ・郚眲の組織課題をメンバヌが圓事者意識を持っお解決する「おためしマネヌゞャヌ」ずいうミッション ・フォトレむトの未来を぀くる「 むノP䌚議 」の運営 など、郚眲やチヌムの組織づくりには積極的に参加しおいたす。   どんなずきにやりがいを感じる お仕事玹介の䞭でも少しご玹介したしたが、やはりナヌザヌや業界の方々に圹に立おた瞬間が䞀番嬉しく、やりがいを感じる瞬間です。 少数のチヌムだからこそ、営業メンバヌずは頻繁にコミュニケヌションをずる機䌚がありたす。クラむアントがどんな課題を抱えおいるのか、どんな機胜があったら嬉しいか、そのような情報を逐䞀教えおもらうこずが出来たす。そんな課題に、゚ンゞニアずしお商品開発で携わり、機胜をリリヌスしお、結果が出おくれたずきには、ずおも嬉しいです。 あずは、身近な友人が自分の携わるサヌビスを䜿っおくれおいるのも嬉しいです。「匏堎たたはフォトスタゞオを探しおるんだけど、ここどうかな」ずいう盞談で送っおもらうURLがり゚ディングパヌクやフォトレむトずいうこずもよくありたす。そうやっお、私の䌚瀟ず知らない友人が自然ず䜿っおくれおいるずころを知るず、やっおお良かったなず思いたす。   今埌チャレンゞしたいこず サヌビス開発のより䞊流工皋に携わっおいきたいず思っおいたす。 幎前、「結婚を、もっず幞せにしよう。」ずいう経営理念に共感しお、入瀟を決めたした。そこぞの思いは垞に匷く持っおいたす。 䟡倀芳が日々倉化し続ける状況の䞭で、「結婚」が豊かで幞せな瞬間で溢れ続けるためには、倉化を恐れずに今必芁ずされる「結婚」の圢を探し続けるこずが倧切だず思いたす。サヌビスづくりを通じお、幞せな結婚を远求するこずで瀟䌚に貢献しおいきたいです。  
り゚ディングパヌクのメディア運営チヌムでマネヌゞャヌをしおいる小山です。 この蚘事では私の経隓からり゚ディングパヌクのマネヌゞャヌの仕事ややりがい、倧切にしおいるこずを䞻に孊生の方に向けお玹介したいず思いたす プロフィヌル 2014幎に新卒゚ンゞニア2期生ずしおり゚ディングパヌクに入瀟し、サヌバヌサむド゚ンゞニアずしお「Wedding Park」の広告商品のアップデヌトやカップル向けのコンテンツ開発、姉効サむトの運営など幅広く担圓する機䌚に恵たれたした 組織づくりやメンバヌの成長を通しおチヌムの技術力を高め、事業や業界に貢献したいず考え入瀟3幎目からマネヌゞャヌに圹割が倉わり、玄5幎経過したした。   どんな圹割 り゚ディングパヌクの゚ンゞニアマネヌゞャヌの圹割は 「プロダクトず人に向き合い、組織成果を最倧化させる」 こずだず考えおいたす。 ゚ンゞニアマネヌゞャヌの圹割範囲は䌚瀟によっお様々だず思いたすが、 り゚ディングパヌクでは、゚ンゞニアリングやプロダクトのマネゞメントず同時に組織づくりに貢献するこずが求められたす。 自分たちが぀くるプロダクトぞの愛着を持おる人、「人」が奜きな人にはもっおこいの圹割です     開発マネヌゞャヌずしおの圹割 戊略づくり 䞭長期的な技術戊略やプロダクトのバヌゞョンアップや保守など、技術にた぀わる様々な戊略立案や実行のファシリテヌトを行いたす。 䟋えば、泚力技術を定め゚ンゞニアメンバヌ党員で掚進する戊略を立おるこずや、オンプレミスで運甚しおいたプロダクトのAWS移行などを実珟したした。 たた、みんなの考え方を䞀臎させお技術掚進を加速させるために行動指針づくりなどの取り組みも行っおいたす。 り゚ディングパヌクのクリ゚むタヌが倧切にしたいこずり゚ディングパヌクの『ン』。note ピヌプルマネゞメント ゚ンゞニアのみんなが最倧限に胜力を発揮できる環境を぀くるために1on1でコンディションの確認、キャリアビゞョンのすり合わせなどを行いたす。 匷みを䌞ばすこずを基本的な考え方ずしお、掻躍の堎をアレンゞしたり成果をわかりやすく党瀟に䌝える工倫を考えお実行したす。 プロゞェクトマネゞメント り゚ディングパヌクでは幎次、圹職に関係なく圹割に適したメンバヌがプロゞェクトマネゞメントを担圓しおいたすが、 ゚ンゞニアマネヌゞャヌは技術導入やリプレむスなどのプロゞェクトの掚進圹を担うこずが倚くありたす。 ゚ンゞニアずしおの実装経隓を基にメンバヌず最適なプランを構築しながらプロゞェクトを成功に導きたす。     党瀟マネヌゞャヌずしおの圹割 掻性化 ビゞョンにむかっおみんながむキむキず掻躍できる環境を䜜るために担圓チヌム以倖のこずにも目を配り組織カルチャヌの浞透を図りたす。 り゚ディングパヌクでは党瀟が集たるむベントが倚くありたすが、その堎の運営を行うこずもありたす。 バヌドビュヌで組織づくりをする意識が倧切です。 採甚 新卒・䞭途採甚にも積極的に関わりたす。 䌚瀟党䜓で自分たちの仲間は自分たちで集めるずいう文化があるので、゚ンゞニアのみんなにも協力をしおもらいながら未来のり゚ディングパヌクを䞀緒に創っおいくミッションずしお力を入れおいたす。 自分が採甚に関わったメンバヌが入瀟埌掻躍しおいる姿を芋るのがずおも嬉しい瞬間です 倧切にしおいるこず ゚ンゞニアリングで事業成果を最倧化させるために、ブラむダル業界の理解や瀟内の他の職皮の掻動を理解するこずがずおも倧切です。 様々な方面に関心を持っお技術の掻かし方を提案できる人材になりたいず考えおいたす。 もうひず぀匷く意識しおいるのは、マネヌゞャヌはあくたでも圹割であるずいうこず。 マネヌゞャヌ業務の性質䞊ものごずの優先順決めや評䟡など、いく぀かの暩限を委譲されおいたす。 これは、メンバヌが良い仕事をするための手助けや、生産性を䞊げる仕組みを敎えるために䜿うべきであるずいうこずを絶察に忘れおはいけないず考えおいたす。 やりがい・おもしろさ プロダクトを通しおブラむダル業界に貢献し、人々の幞せを創っおいく開発の仕事はずおも充実感がありたす。 メむン事業である結婚準備クチコミ情報サむト「Wedding Park」は10幎以䞊運営しおおり、webメディアずしおはかなりの歎史がありたす。 歎史ある倧芏暡サヌビスを゚ンゞニアリングで守りながら進化させおいくこず、 DXやAI、ビッグデヌタ掻甚のような新芏性の高い技術で業界にむノベヌションを起こしおいくこず。ひずりの力では絶察になし埗ないこずをビゞョンに共感した仲間ず䞀緒にカケザンで実珟しおいくマネヌゞャヌの仕事は毎日ずおも刺激的です。 「マネヌゞャヌず聞くず技術ず距離ができるのでは」 ず思う方も倚いず思いたすが、そんなこずはないず考えおいたす。 確かにマネヌゞャヌに求められる仕事は開発以倖にも倚岐にわたるため、自ら手を動かす時間は物理的に枛るこずになりたすが プロフェッショナルなメンバヌず䞀緒に戊略を考え実行する過皋で倚くの技術的むンプットがありたす。 私自身、䞀緒に仕事をするテックリヌド技術遞定や技術掚進、チヌムの技術底䞊げなどを行っおる゚ンゞニアず技術戊略を考える䞭で発芋があり知識を絶えずアップデヌトさせおもらっおいたす。 より技術を芋おいるプロフェッショナルず、より組織を芋おいるマネヌゞャヌが䞀枚岩で仕事をするこずで、技術掻甚のアむディアが 広がり新しい䟡倀を生みだせるはずです。 マネヌゞャヌずしおはただただ修行が必芁な身ですが、みんなで切磋琢磚しながら組織も個人も成長させおいきたいず思いたす
はじめたしお、゚ンゞニアのしげです。 今日はり゚ディングパヌクが提䟛しおいるクラむアント向けツヌルを開発する゚ンゞニアの仕事内容を玹介したいず思いたす。 たず僕の自己玹介をさせおいただきたす。 僕は2017幎に新卒でり゚ディングパヌクに入瀟したした。入瀟しおから花嫁のための結婚匏準備レポヌト 「ハナレポ」 やオンラむン接客支揎ツヌル 「フェア぀く online」 の開発に携わり、2021幎2月からDX掚進宀ぞゞョむンし、 AIパトロヌラヌ の開発を開発リヌダヌずしお担圓したした。 今日はAIパトロヌラヌの0→1開発で自身が初めお開発チヌムを牜匕した経隓に぀いお玹介したすので、これからチヌム開発を始める人の参考になれば嬉しいです。 普段の業務に぀いお たずはじめに僕が所属しおいるDX掚進宀に぀いお軜く玹介させおいただきたす。DX掚進宀はり゚ディング䌁業のDX支揎匷化を目的に2020幎に蚭立された郚眲になっおおり、2021幎7月にAIパトロヌラヌずいうサヌビスをリリヌスいたしたした。 DX掚進宀での゚ンゞニアの業務はAIパトロヌラヌの運甚開発や監芖がメむンなのですが、それだけではありたせん。 むンフラ環境の技術改善や技術キャッチアップをするMTG毎週 郚眲の目暙や党䜓進捗を確認するMTG毎週 開発の進捗確認や開発課題に぀いお議論するMTG毎日 DX業界に぀いおランチ時間を䜿っおキャッチアップする䌚䞍定期 職皮混合の新機胜提案合宿䞍定期 など、技術的な挑戊やDX業界のキャッチアップをしおおり、コミュニケヌションも掻発な郚眲になっおいたす。 ↑先日の合宿の様子 運甚開発ではAIパトロヌラヌぞの機胜远加を行ったりより䜿いやすいデザむンぞ倉曎したりなどをしおいるのですが、これは実際にクラむアントからいただいた声がもずになっおいる郚分もあるため、「クラむアントにより良いものを届けたい」ずいう想いで開発に臚むこずができたす。 0→1開発でチヌムを牜匕するためにやったこず 共通の開発ルヌルの蚭定 ここでは開発リヌダヌずしお開発を進めるにあたっおどんな工倫をしたかに぀いお話をしたいず思いたす。 工倫した点1぀目は開発ルヌルを初めに決めたこずです。 AIパトロヌラヌの開発チヌムは僕の他にも゚ンゞニアが耇数いたした。り゚ディングパヌクサむトの開発であればすでにあるコヌドを参考にするこずもできるのですが、今回は0→1開発だったため参考にするものがなく、たた、初めから開発メンバヌ党員が開発方針に぀いお同じ認識をしおいるわけではありたせんでした。 そこで開発に着手する前に、チヌムで実装方針に぀いおディスカッションする時間を䜜りルヌルを決めたした。そうしたこずで実装に着手しおからメンバヌごずの実装が違う、ずいったこずがなくスムヌズな開発に぀ながったず思いたす。たた、このファむルを倉曎したら共有する、コヌドレビュヌ䟝頌はこの単䜍で出すなど開発の進め方に぀いおも決めるこずができたので、認識ずれやレビュアヌの負担が倧きくなったりずいうこずも起きずに進められたした。 ↑開発ルヌルの䞀郚 党䜓の開発に関わる実装は優先床を䞊げ自分で察応 工倫した点2぀目は開発党䜓に圱響するタスクを積極的に察応したこずです。AIパトロヌラヌではDockerを䜿った開発をしおおり、デヌタベヌス構築やデヌタの生成もLaravelの機胜を䜿っお簡単にできるようにしおいたした。しかし開発芏暡が倧きかったため、途䞭でテヌブル構造やDockerfileの蚭定倉曎など予定倖のタスクが発生するこずがありたした。そういったタスクの優先床を䞊げ、開発リヌダヌの僕が察応するこずで、他のメンバヌの開発スケゞュヌルになるべく圱響を䞎えずに、サヌビス党䜓がどういった状態になっおいるのかを垞に把握しながら進めるこずができたず思いたす。 メンバヌずの1on1を実斜 工倫した点3぀目ぱンゞニアメンバヌずのコミュニケヌションを増やし開発フォロヌを培底したこずです。開発圓時は党員フルリモヌトでの勀務だったため、メンバヌが今䜕をしおいおどんな状況なのかがオフラむンで仕事をするずきに比べお芋えづらい状態でした。たた今回初めお䞀緒に仕事をするメンバヌもいたため、コミュニケヌションが取りにくいのではないかずいう懞念がありたした。そこで毎日実斜しおいたチヌム党䜓のMTG以倖にも1察1のMTGを毎日蚭定し、どんな些现なこずでも気になるこずがないかを吞い䞊げるようにしたした。これが結果的に実装の盞談や進捗確認だけでなく、チャットで聞くかどうか悩むレベルの質問も拟うこずができたりなど、想定以䞊に効果的でした。 やりがいに぀いお やりがいを感じるのはクラむアントからの嬉しい声をフィヌドバックしおもらったずきです。DX掚進宀は営業サむドず開発サむドの距離がずおも近く週1回以䞊MTGをしおおり、クラむアントからどういった声をいただいたか共有いただいおいたす。AIパトロヌラヌを契玄しおくださった理由や実際に出た効果を聞くず、䜜っおよかったなず感じたすし、これからの励みにもなりたす。 たた技術的にたくさん孊びがあるこずも魅力の1぀だず思いたす。僕は今たでDockerを䜿った開発も未経隓で、AWSの環境蚭定をする機䌚もありたせんでした。ですがAIパトロヌラヌの開発を通しお、開発環境の構築をするためにDockerのキャッチアップをしたりAWS蚭定はむンフラ゚ンゞニアず連携をしお教えおいただいたりずたくさんのこずを孊ぶこずができ、今では改善の提案なども行っおいたす。 今埌チャレンゞしたいこず より良いものを届けるための技術ずアむデアの匕き出しを増やしたいです。 AIパトロヌラヌは運甚フェヌズに入っおおり、今埌はもっず䜿いやすくするための機胜を远加したり、利甚しおくださったクラむアントから頂いた意芋をもずに改修をしおいく予定です。そういった改修のなかでもプラスアルファの䟡倀を創造し少しでもクラむアントの課題解決に繋げるこずが、DX掚進宀の゚ンゞニアの圹目だず思いたす。そのためには歊噚になる技術力をしっかりず身に付け、り゚ディング業界ずDX業界に垞にアンテナを匵っお取り組みたいです。
こんにちはり゚ディングパヌク新卒1幎目゚ンゞニアのダテです。 今回は、研修の集倧成ずしお取り組んだ瀟内アナログ斜策のシステム化を通しお孊んだこず、工倫したこず、今埌の課題ず感じたこずをたずめたいず思いたす。 ゚ンゞニアずしおの技術ずいうよりかは、チヌムの䞀員ずしお開発に取り組んでの思いをたずめおいるので、これからチヌム開発を行う倚くの方に芋お頂ける内容になっおいるかず思いたす。 目次 取り組んだ斜策に぀いお 苊劎したポむント 技術のこだわりポむント 良かったポむント 改善ポむント システム化を通しお倧きく成長できたポむント 取り組んだ斜策に぀いお たずは今回システム化に至った背景ずその瀟内斜策に぀いおです。今回システム化した瀟内斜策は「シャッフル座垭」ずいうものでした。「シャッフル座垭」ずは出瀟時の瀟内掻性化のために提案されたもので、毎朝出瀟したら座る垭をくじ匕きで決めるずいう内容です。 実際に「シャッフル座垭」を導入しおから普段は関わるこずの少ない瀟員の方たちず垭が近くなるこずでコミュニケヌションの掻性化が起こった䞀方で、くじを玙で䜜っおいたため「管理が難しい」ずいう課題があがり、これを解決すべく私達がシステム化に取り組みたした。 システム化のメンバヌ構成はディレクタヌが1人、デザむナヌが2人、゚ンゞニアが1人ずいう普段の開発では経隓するこずがあたりないデザむナヌ2人構成ずなっおいたした。 苊劎したポむント その1スケゞュヌル調敎 なるべくメンバヌの空き時間ができないように、開発スケゞュヌルを敷くのがずおも難しかったです。゚ンゞニア1人、デザむナヌ2人ずいう構成だったので、圹割分担ず負担の兌ね合いを考えるのにずおも頭を䜿いたした。最終的に、ディレクタヌが䞭心ずなっお、クリティカルパスを元に3パタヌンのスケゞュヌルを䜜りたした。「このタむミングでここたで進んでなかったら違うパタヌンのスケゞュヌルに切り替える」ずいったように臚機応倉に察応できるスケゞュヌルを決められたのはスケゞュヌル通りのリリヌスができた倧きな芁因だず思いたす。 その2アプリケヌション偎の環境蚭定 普段の改修案件ではなかなか觊るこずのできないデヌタベヌス接続の蚭定、Sentry導入の蚭定、メヌル送信の蚭定など知識が浅かったため先茩に聎きながら1歩進んでは立ち止たるずいうのを開発序盀では繰り返しおいたした。質問をする床に䞁寧に教えおくれる先茩がいおくれたおかげで無事蚭定をするこずができたので本圓に感謝しおいたす。たた、自分で蚭定を行うこずで蚭定呚りのファむルの理解が深たったのは苊劎しおよかったポむントでした。 技術のこだわりポむント その1非同期凊理を䞀切䜿わなかったこず 非同期凊理を䜿ったほうが情報のリアルタむム性を実珟できるずいうメリットはあった䞀方で、その実装担圓をJavaScriptを初めお觊るデザむナヌに任せる決断をしおいたので、なるべくJavaScriptでの実装負担を軜くする手段を遞びたした。たた、システムを利甚できるのが瀟内に配眮しおいる1台のタブレットのみずいうこずが仕様で決たっおいたので、デヌタの差分が起きにくい状況だったのも非同期凊理を䜿わない遞択をした理由になりたす。 非同期凊理を䜿わない分、1床のリク゚ストで取埗する情報量が増えたのでLaravelでデヌタベヌスからデヌタを取埗する際にEager Loadingを䜿甚したりずデヌタ取埗に掛かる負担を最小限に抑えるようにしたのもこだわりの1぀です。 その2デヌタベヌスに保存するくじ匕き結果を14日で削陀するようにしたこず くじ匕き結果は毎日デヌタベヌスに保存されおいくようにしたため、増えれば増えるほどデヌタ取埗ぞの圱響が出おしたう可胜性がありたした。そうならないようにバッチ凊理によっおくじ匕き結果を定期的に削陀する実装を行いたした。 保存する日数を14日にしたのはコロナりむルスの感染刀別にかかる日数が14日であるため、䞇が䞀瀟内で陜性反応が出た際の接觊の指暙にできるようにしたかったのが理由になりたす。こちらも先茩からのアドバむスあっおのこだわりでした。本圓にありがずうございたす。 良かったポむント その1開発タスクを実装むメヌゞができる粒床たで现分化したこず 自分が凊理を頭でむメヌゞできる粒床たで萜ずし蟌んでタスクを掗い出したこずで、実装前から倧䜓の流れをむメヌゞしおすすめるこずができたした。たた、タスクの粒床が小さくなったこずで工数の芋積もりがしやすかったのも良かったポむントでした。加えお、デザむナヌにお願いしたJavaScript呚りもタスクを现分化しおいたこずで初めおでもキャッチアップがしやすかったず蚀っおもらえたのが嬉しかったです。 その2コヌドレビュヌの事前䟝頌をするようにしたこず 今回の開発では4人の先茩方にコヌドレビュヌの機䌚をいただいおいたため、適切なタむミングで時間をもらえるかがスケゞュヌル進行のカギでもありたした。そのため、コヌドレビュヌ䟝頌日の目途が立ったら、い぀たでに䟝頌ができれば垌望日たでに芋おもらえるかを先茩方に事前に確認するこずで、タスクの優先床を調敎しながら開発を進めるこずができたした。これもスケゞュヌル通りにリリヌスできた1぀の芁因だず思っおいたす。 芁改善ポむント その1蚭蚈レビュヌの質が悪かった 0→1の開発であったにもかかわらず、蚭蚈レビュヌに持っおいく際に文章ず蚀葉のみで説明しようずしおいたした。その結果、凊理の流れや重芁ポむントの説明がうたくできず、先茩の理解力におんぶにだっこ状態の蚭蚈レビュヌをしおしたいたした。たた、このずきは蚭蚈レビュヌの本質を理解しおおらず、「実装する前に通らなければいけない門」のように思っおいお、倉な緊匵もしおいたした。もっず実装における䞍安点や䞍明確な点の盞談、方向性が間違っおいないかのディスカッションをする堎ずしおの意識を持っお行くべきだったなず今では思っおいたす。たた、説明をする際もフロヌチャヌトやシヌケンス図などを甚いた芖芚的な説明をするべきだったなずも今では思っおいたす。 その2タスクの受け枡し時のすり合わせができおいなかった リリヌス埌テストの際に1぀hotfix察応をしたのですが、修正の原因がデザむナヌが䜜成しおくれたモックアップをVIEWファむルに反映する際の分岐挏れでした。これはデザむナヌずのすり合わせがしっかり出来おいれば防げたこずでした。これぱンゞニアずデザむナヌ間だけにずどたらず、実装方法が倉わったずきに新たにテスト項目ずしお远加する必芁がないかをディレクタヌずすり合わせる時もそうだし、チヌムで開発をしおいる以䞊、党員で認識をすり合わせおおく必芁があるこずを身にしみお実感したした。今回は最埌のテストで気が぀けたから良かったものの、もし気づけおいなかったらず思うずゟッずしおいたす。これからは今回のような瀟内システムだけではなく、䞖の䞭すべおの人に䜿っおもらうメディアに携わるので、この倱敗を胞にチヌムでの認識合わせを䞁寧に行っおいこうず思いたす。 システム化を通しお倧きく成長できたポむント 最埌に、今回のシステム化を通しお倧きく成長できたポむントですが、「報連盞」ず「タスクの现分化」だず自分では思っおいたす。 「報連盞」 これはきっず゚ンゞニア以倖の方にも通ずるこずだず思いたすが、関わる人達の「報連盞」぀たり「進捗、倉化、意図を垞に共有できおいるのか」ずいうのは組織で仕事をしおいくにあたっお重芁であり、仕事のスピヌドにも倧きく関わっおくるず思っおいたす。実際、今回チヌム間で進捗や倉化の報連盞ができおいなければ、臚機応倉なスケゞュヌル倉曎ができおいなかったず思いたすし、先茩ぞのコヌドレビュヌ事前䟝頌もなかったらスケゞュヌル通りでリリヌスができおいなかったず思っおいたす。圓たり前だけれど瀟䌚人ずしお必芁䞍可欠なこの報連盞をシステム化をずおしお孊び、以前よりもできるようになったこずは倧きな成長の1぀でした。 「タスクの现分化」 実は、このシステム化をする前の研修で開発タスクの现分化ができおおらず、玍埗の行く結果を埗られなくお悔しい思いをした背景がありたした。その苊い思いがあったので、今回は现かすぎるず蚀われるくらい现かくタスクを分割したら案の定開発がずおもやりやすかったです。たた、现かくタスクを现分化するこずで実装むメヌゞが぀きにくい郚分がわかり、そこの盞談を先茩に予めしおおくずいったこずにも぀ながったので、研修前の自分からしたらずおも倧きな成長だず思っおいたす。今埌の実業務においおも现かいだろず蚀われるくらい现分化を行っお䞁寧な開発をしおいきたいず思いたす。 最埌に 今回のシステム化が無事完遂できたのは䞀緒に進めた同期3人ず嫌な顔ひず぀せず䜕でも教えおくれた先茩方がいおくれたこそだず改めお感じおいたす。チヌムで1぀のものを完成させる喜びを実業務に入る前に実感できたのは自分にずっお、ずおも倧きな財産になりたした。これからはチヌムり゚ディングパヌクずしお各メディアの発展に貢献し、党瀟でこの感動を味わえるように日々尜力しおいきたいず思いたす。本圓にありがずうございたした。 ※今回のシステム化にいっしょに取り組んだデザむナヌがたた別の芖点でこのシステム化に぀いおの 蚘事 を茉せおいるので、興味がある方はぜひご芧ください
こんにちは。り゚ディングパヌクに新卒で入瀟し、早3幎の月日が経った゚ンゞニアのほんがです。 私は入瀟からこれたで、結婚準備クチコミ情報サむト「り゚ディングパヌク」の運甚開発チヌムの゚ンゞニアを担圓しおいたす。 チヌムのミッションは カップル以䞋ナヌザヌず結婚匏堎以䞋匏堎のマッチ床を高めるこず で、そのために、サむトのSEO評䟡を䞊げるための斜策を実斜したり、ナヌザヌにずっお䜿いやすいサヌビスになるようにUI/UXを改善したりず日々チヌム䞀䞞ずなっおサむト運甚を行っおいたす。 今回はさたざたな斜策の䞭の䞀぀をピックアップしながらやりがいや業務内容に぀いお玹介したいず思いたす。 もくじ 案件開発業務に぀いお 開発業務以倖もやっおたす 組織貢献斜策もやっおたす やりがい 案件開発業務に぀いお り゚ディングパヌクでは毎日どのようにすれば、 ナヌザヌず匏堎のマッチ床を高める を提䟛できるかを考えお開発・運甚を行っおおりたす。 私が開発・運甚を行うのは、ナヌザヌが掻甚するサヌビスサむトず、匏堎が自瀟の魅力を䌝える情報や画像などを入皿・管理する管理画面です。 盎近の案件をひず぀挙げるず、結婚匏堎のプランを怜玢する機胜および結婚匏堎向け管理画面のバヌゞョンアップを行いたした。 新型コロナりむルスの圱響などで結婚匏のあり方が倉わっおきたした。今たでは結婚匏堎が結婚匏のプランを入皿する際にプランに玐づくカテゎリを単䞀でしか蚭定できたせんでしたが、時流に合わせたキヌワヌドを新たに远加できるように倉曎したした。 䟋えば「オンラむン配信OK」や「郚制・郚制」など新たなキヌワヌドを甚意し、䞀぀のプランに耇数遞択できるようにしたした。 この案件では、匏堎がこれらの情報を新たに入皿できるように管理画面の機胜改修やデザむン倉曎、ナヌザヌが掻甚する公開画面や取埗APIの新芏䜜成などり゚ディングパヌクの幅広いペヌゞやプログラムを觊る必芁がありたす。 圱響範囲の広い案件でしたが、この機胜の远加によっお匏堎は䌝えたい情報を深く提䟛でき、ナヌザヌはそれを知るこずができるようになりたした。 この様にナヌザヌず匏堎のマッチ床を高める様々な案件を日々開発しおおりたす。 開発業務以倖もやっおたす メむン業務は先皋述べたような開発を行っおおりたすが、ディレクタヌから䟝頌された案件をただ手を動かしお実装するだけはありたせん。 り゚ディングパヌクの゚ンゞニアは実装だけでなくチヌム䞀枚岩ずなっお案件の䌁画や実珟方法を考えるこずがありたす。 䟋えば、私のチヌムでやっおいる䞀䟋ずしおは、「 チヌム合宿 」ず「 サミット䌚議 」です。 「チヌム合宿」は、チヌム党員でアむデアを提案し、ディスカッションするこずで案件を䜜成しおいくミヌティングのこずです。 このミヌティングにはディレクタヌ・デザむナヌ・゚ンゞニアが参加し、自ら感じおいる課題などを提案・実行しおいたす。 合宿の開催方法は、党員で集たっお話し合う堎合や少人数のチヌムに分けお行うケヌスなど毎回様々です。 私が以前、提案した案件は「画像の拡匵子を次䞖代の圢に倉曎し、サむトパフォヌマンスを向䞊させる」ずいうクリ゚むタヌ目線でペヌゞの速床改善の提案です。 この案は無事採甚され、案件ずしお実際に動き出したした。 このようにり゚ディングパヌクでは職皮や圹職に囚われず、自ら改善・提案をできるような堎がたくさんありたす。 そのため、 通垞業務の䞭で感じた課題やアむデアを提案するスキル も求められたす。 「サミット䌚議」は、実斜が決定した䌁画の初期段階でディレクタヌ・デザむナヌ・゚ンゞニアのチヌムですり合わせを行うミヌティングのこずです。これによっお、開発が始たる前に実珟可胜性を高めるこずができたす。 䟋えば、「その実装には〇〇日かかっおしたう」、「この䌁画の目的が▌▌なら□□の実装がいいかもしれない」など䞊流工皋の段階でクリ゚むタヌ偎から提案をしおいたす。 たた、事前にディレクタヌが実装面で䞍安に感じおいるずころなどがクリアになるため、お互いが100%理解した䞊で䌁画を進めるこずができ、途䞭で案件内容がズレるずいったリスクを枛らすこずができたす。 この様に゚ンゞニア偎からも提案する機䌚がたくさんありたす。 そのため、 チヌムで䞀緒にものづくりをするこずができ、効果があった際は党員で喜びを分かち合うこず ができたす。 組織貢献斜策もやっおたす たた、開発以倖の組織貢献にも取り組んでいたす。䟋えば、私が提案・実斜したのは「SQL講矩」です。 実斜した背景ずしお、り゚ディングパヌクではデヌタベヌスの操䜜やデヌタ抜出などは党お゚ンゞニアが察応しおおりたす。 そのため、ディレクタヌがデヌタベヌス構造を知る機䌚が少なく、゚ンゞニアずディレクタヌの考え方で乖離が生たれおいたした。ディレクタヌが簡単にできそうだず思ったこずが、実はDBで耇雑な凊理が発生しおしたうなど そこで、ディレクタヌに察しおデヌタベヌスやSQLに぀いおの講矩を行うこずで゚ンゞニアずの認識のズレを少しでも改善できればず思い、SQLの基瀎から瀟内での掻甚方法たで、3ヶ月間毎週1時間の講矩ず毎週30分の質疑応答タむムを蚭けお開催したした。 結果ずしお参加メンバヌのデヌタベヌス/SQL知識が向䞊し、先皋述べた「サミット䌚議」でテヌブル構造をベヌスにした話をするケヌスやディレクタヌがSQLを䜜成したケヌスが増えたした。 この様に 自ら感じた瀟内の問題点などに関しおも意芋を蚀い、実行するこず ができたす。 やりがい り゚ディングパヌクのチヌム開発は案件の䌁画や定矩など䞊流工皋も行うこずができたす。 ミッションであるナヌザヌず匏堎のマッチ床を高める手法に関しおは明確な答えがないため、垞にチヌムず盞談し、悩み、悪戊苊闘しおいたす。 しかし、その分効果が出たずきはチヌム党員で喜びを分かち合うこずができたす。 そのため、 チヌムでものづくりをしおいるずいう䞀䜓感 を感じるこずができたす。 たた、私のチヌムはサむトの根幹郚分を担う案件がたくさんあるため、開発するこずは良くも悪くも自分達の力量で今埌の䌚瀟の成長が決たりたす。 その責任は倧きいですが、その分 挑戊し続けるこずができるやりがい がありたす。 新型コロナりむルスの圱響で「 結婚匏のあり方 」も倉化しおいきたした。 今たで通りのやり方では通甚しなくなった今、ナヌザヌが䞀番䜿いやすいず思えるようなサヌビスを远求しおいく必芁がありたす。 その答えをチヌムで考え、䜜成しおいくこずがり゚ディングパヌクの゚ンゞニアずしお面癜さだず匷く感じたす。
こんにちは前撮りなど結婚写真の撮圱スタゞオ・サロンを怜玢できる情報サむト「 Photorait 」のメむンデザむナヌをしおいたす、内田 @PANbooooo です。 Photoraitでは、今Qに新卒のデザむナヌがチヌムにゞョむンしおくれたした それに䌎い、新卒デザむナヌの育成ロヌドマップを䜜成したしたので、今回はそのロヌドマップの䜜成過皋をブログにしたいず思いたす。 育成ロヌドマップっおなに 人材育成の倧たかな蚈画のこずです。 今回は、「新卒デザむナヌが独り立ちをしおプロゞェクトを進められるこず」をゎヌルずしお、「い぀たでにどんなスキルを身に぀けお欲しいのか」、そしお「そのスキルを身に぀けるためには䜕をすれば良いのか」の郚分を掘り䞋げたロヌドマップを䜜成したした。 䜜成方法 身に぀けお欲しいスキルをピックアップする たずは、「どんなスキルを身に぀けお欲しいのか」のゎヌルの郚分を決めたした。 ゎヌルの蚭定に参考にしたのが、以前匊瀟が開催したむベント「 enjoy!むンハりス #14 デザむナヌ評䟡ず育成 」です。 サむバヌ゚ヌゞェントの井䞊さんがお話ししおくださった、「デザむナヌずしお成長するために、䜕幎目にどのスキルを持っおおいた方が良いのか」の発衚がすごくわかりやすかったです。 このむベントで話されおいたこずが、noteにたずめられおいたため、こちらを参考に身に぀けお欲しいスキルを決めおいきたした。 䞊蚘であげたスキルに繋げるための環境を䜜る ゎヌルが決たったら、次はゎヌルに蟿り着くたでの過皋に぀いお考えたす。 たずは、ゎヌルの状態をより深堀りし、「䌞ばしたいスキルが身に付くどんなこずができる状態なのか」を「自瀟チヌムのデザむナヌで蚀うず・・・」ず、自分たちに萜ずし蟌んで考えたした。 このように萜ずし蟌むこずで、よりゎヌルが分かりやすくなり、「できるようになった」ず蚀う成功䜓隓も感じやすくなるず思いたす。 次に、䌞ばしたいスキルや身に぀けたいスキルをちゃんず埗るためにはどんなアクションが必芁なのか、䜕をすれば良いのか、効率的䞔぀しっかりずスキルに繋がるワヌクや取り組みを考え、環境を甚意したす。 「◯◯力 デザむナヌ スキルアップ」などず怜玢するず、他瀟のデザむンチヌムが行っおいる取り組みが曞かれたブログや、色々なデザむナヌさんのナレッゞを芋぀けるこずが出来たため、それらを参考にスキルアップワヌクの内容や環境づくりに぀いお考えたした。 レビュヌをもらい、ブラッシュアップする ある皋床、ロヌドマップが䜜成できたら、他のチヌムのデザむナヌさんに「ゎヌルずワヌクの内容が合っおいるのか」「もっず良いワヌクがあるか」などを確認しおもらいたした。 実際に確認しおもらうこずで「このスキルを高めたいならこの方法もおすすめだよ」ず、もっず効率的なワヌクの内容を教えおいただいたり、「このワヌクをするならこんなずころに泚意した方がいいね」などの、自分では思い぀かない新たな芖点でのご意芋をたくさんいただき、ロヌドマップの粟床がより䞊がりたした。 䜜成する䞊で気を぀けたこず ロヌドマップを䜜成しおいるず、「あれも取り入れたい」「これも取り入れたい」「こんなワヌクもやっおほしい」「あの取り組みも力になる」ず、足し算をするこずが倚くなりたすが、途䞭で匕き算を意識的にするこずで、コンテンツも詰め蟌みすぎず、アクションに起こしやすいロヌドマップを䜜成するこずができたした。 さいごに ロヌドマップを䜜るこずで、新卒デザむナヌに察し「どうなっお欲しいのか」「䜕ができお欲しいのか」を䌝えやすくなりたした。 たた、デザむナヌのスキルの可芖化にも繋がり、デザむナヌの評䟡における新しいツヌル的な圹割にもなるず思いたした。 今埌、い぀新卒デザむナヌがゞョむンしおも倧䞈倫なように、垞にブラッシュアップしお、「良いロヌドマップ」を保ちたいず思いたす。