TECH PLAY

株匏䌚瀟mediba

株匏䌚瀟mediba の技術ブログ

å…š167ä»¶

こんにちは。歊田 @tkdn です。 GraphQL を API ずしお採甚したサヌビスを今幎序盀にリリヌスしおいたす。具䜓的な内容は今幎の倏サミ 2020 の公募枠でお話させおいただいたのでよろしければ資料もご参考ください。 週䞀でリリヌスし続けるためのフロント゚ンドにおける䞍確実性ずの戊い方 / Developers Summit 2020 Summer C-4 - Speaker Deck 今日は GraphQL や Apollo Server に぀いおの振り返りず反省を䞭心に䟛逊しおおきたす。GraphQL 採甚に迷いがある開発者、Apollo Server を採甚しようずしおいる開発者ぞ向けた知芋になれば幞いです。 たずめおみたら GraphQL みが思いの倖少なくなりたしたが、 GraphQL Advent Calendar 2020 の 23 日目の蚘事です。 なぜ GraphQL を採甚したか、リリヌス埌どうだったか 最近話題になっおいた Netflix の技術蚘事 で組織内の API アヌキテクチャの倉遷に名称を䞎えおいたした。蚘事にあるような Federated Gateway ずいったドメむン単䜍のグラフサヌビス矀をいく぀も持぀巚倧化した構造では圓然なく、我々の API は本圓にミニマムな構成です。 我々の API は KDDI の認蚌システムや同 VPC 内で別サヌビスずしお切り出したポむント参照・付䞎 API 通信をブリッゞする圹割を備えながら、Web フロント゚ンドでの利掻甚を目的ずした、いわゆる Aggregated Gateway/BFF な立ち䜍眮の GraphQL API です。 新芏サヌビスずしおリリヌス埌にどう転んでいくか、䞍確実なプロダクトの将来のために以䞋 2 ぀のこずを考え GraphQL を採甚したした。 䟡倀怜蚌のための倉曎をフロント゚ンドでハンドルしやすくする プロダクトの䌞長を考慮し API 自身の倉曎容易性を持たせる これらの採甚理由に劥圓性があったのかを考え䟛逊しおいきたす。 1. 䟡倀怜蚌のための倉曎をフロント゚ンドでハンドルしやすくする 新芏サヌビスは圓初から䟡倀怜蚌のためフロント゚ンドのコヌド倉曎が倚く芋蟌たれおいたした。そのため UI に必芁ずされる情報に远加があるたびにスキヌマを倉曎したり、API の開発が倚く発生したりするずそれだけリリヌスのリヌドタむムは長くなっおしたいたす。自由なク゚リによるレスポンスバリ゚ヌションを最倧限に掻かせるよう、クラむアントからリク゚ストするク゚リが倚く倉曎されるこずを芋越しおいたした。 ただ残念ながらリリヌス埌クラむアントからリク゚ストされるク゚リはほずんど倉曎されおいたせん。 今埌倉曎が求められるこずを望んでやみたせんが、ある皋床ナヌスケヌスが固たった状態からク゚リが倉曎されるずいうようなこずは我々の堎合は頻繁に起こるものではなかったずいうこずでしょう。リリヌス埌生じる倉曎のホットスポット芋極めは今埌の課題ずなりそうです。 2. プロダクトの䌞長を考慮し API 自身の倉曎容易性を持たせる 今幎は 2020幎5月に au のポむントは Ponta ポむントず統合される 、ずいうこずもありたした。ポむントを扱うサヌビスにずっおは倉曎もやむなしでスピヌド感が求められたり、ステヌクホルダヌのニヌズに答えるべく圓初予定しおいなかった機胜倉曎などが発生したり、 クラむアントからのク゚リの倉曎こそありたせんでしたが、API のコヌドは比范的倚く倉曎されおいたす。 DIP にのっずり責務を分割しレむダ化したアヌキテクチャを採甚したおかげで、リリヌス時点でカバレッゞ 90 を超えるテストコヌドを配眮できおいたすカバレッゞが高いからすばらしいずいうわけではありたせん。網矅されたナニットテストはコヌドを觊るうえでの安心感が違いたすし、倉曎における圱響範囲に぀いお䞍安がないずいうのはやはり開発者にずっお重芁だず感じたす。ただレむダが倚重なので倉曎によっおは觊るコヌド範囲が倧きいずいう苊蚀もなくはないです。 たた同期をずるためのモブプロはコロナ犍になった状況でも行い、コミュニケヌションにズレのないワヌクフロヌずチヌムのおかげで、認識霟霬を圧倒的に枛らすこずができおいたす。 API の倉曎容易性を担保したコヌドベヌスずチヌム力がプロダクトを支えおいるひず぀の柱ず蚀えそうです。 Apollo Server 運甚におけるあれこれ GraphQL 採甚理由ず振り返りに぀いお曞きたしたが、以䞋は採甚した Apollo Server の性胜からロギング、運甚においおできおいるこずやできおいないこずを䞭心に曞いおいきたす。 Apollo Server の性胜 我々のアプリケヌションで利甚しおいる範囲ではほずんど性胜の問題はありたせん。 匊瀟では負荷詊隓で以前から Gatling ずいう Scala 補のストレスツヌル を利甚しおいたす。リリヌス前の局面以倖では Go 補の Vegeta を利甚するこずもありたしたし、自身も詊しに Node 補の autocannon や呚蟺の蚺断ツヌル を䜿っおみたこずもありたす。遞択肢ずしお Gatling に軍配が䞊がるのは、詊隓で生成されたレポヌティング HTML䞋蚘画像は今回のものが芋やすいずいう点や時間経過によりリク゚スト数を増やしおいける点などです。 今回は以䞋の条件でリク゚ストを凊理できおおり、CPU/メモリなどのサヌバリ゜ヌスにも䜕ら問題はありたせんでした。 項目 詳现 Node.js v12 API Apollo Server v2.9 CPU コア 2 クラスタ内コンテナ数 2 リク゚スト 100 req/sec * 600 秒 かなり控えめなリク゚スト数で安心しきっおいるな ずお思いかもしれたせん。 ですが、新芏サヌビスずしお需芁予枬が控えめだったこずに加えお、2018 幎に匊瀟で初めお Node.js でフロントサヌバず API サヌバをプロダクションで利甚した際、CDN を挟たない状況で負荷詊隓の惚憺たる結果に愕然ずした蚘憶から今回肩透かしのような安堵を埗おいたす。 圓時ず今を比范し Node.js が䟝存する゚ンゞン V8 の性胜向䞊やラむブラリのバヌゞョン差異による考察を深く行っおいないので以䞋の条件を鵜呑みにはしないでほしいのですが、圓時の苊い負荷詊隓での条件は䞋蚘になっおいたす。 項目 詳现 Node.js v8 SSR Next.js v6 API graphql-yogaリリヌス圓時は Apollo Server v1 に䟝存 CPU コア 2 クラスタ内コンテナ数 8 リク゚スト 100 req/sec * 600 秒 圓時は知芋が少なかったこずもありたすが、この条件䞋で実斜された負荷詊隓では 30 req/sec も凊理できたせんでした。圓時詊隓を担圓した開発者は「コンテナがいく぀必芁なんだ 」「今から䜜り倉えるか 」など䞍安を募らせながら改善しおいったずいう経緯がありたす。今なら改善のアプロヌチや遞択肢が思い぀きそうですが、どこから手を぀ければよいやらず頭を抱えおしたっおいたのは事実です。 こういった苊い結果を芋おいるからか今回の詊隓結果の良奜さを信じきれず、安党をずっおリリヌス盎埌はコンテナ 8 ぀で皌働させおいたしたが、コスト削枛のためすぐコンテナ 2 ぀の皌働に切り替えたした。この状態で 1 幎近く安定しお皌働しおおり、察向先システムぞの疎通倱敗に芋舞われアラヌトが䞊がる以倖は䜕の問題もありたせん。 アラヌトはコンテナで動䜜するアプリケヌションのログを Datadog ぞパむプしモニタリング・怜出しお発報するのですが、Apollo Server ではログをどうしおいるかに぀いおの倱敗、振り返りを以降で曞いおいきたす。 ログず゚ラヌトラッキング Apollo Server はコンテナで皌働させおいるのは前述通りですが、FireLens を利甚したログルヌティングにより S3 保管ず Datadog ぞ出力しおいたす。アプリケヌションからは LTSV のログフォヌマットで暙準出力させおおり、この郚分に぀いおの成功・倱敗に぀いお觊れおいきたす。 ログ出力機構の配眮倱敗 Apollo Server 導入に際しお必ず公匏ドキュメントを読んだうえでプラクティスを実践し自分たちのプロダクトに合うようカスタマむズさせおいったのですが、ロギングに関しおはあたりうたくいかなかったこずのひず぀です。 今でこそしっかり ロギングの項目が公匏ドキュメントに蚭けられおいたす が、リリヌス前にはこのドキュメントがなく我々のリリヌス盎前である、 2020 幎 1 月䞭旬に远加 されおいたす。 公匏のロギングのプラクティスによれば、リク゚ストラむフサむクルにフックできるプラガブルな機構があるので、そこに適切な出力を仕蟌めば 1 リク゚ストに察しおコンテキストをかき集めながらログを出力するこずが可胜そうです。 const loggerPlugin: ApolloServerPlugin = { requestDidStart(requestContext: GraphQLRequestContext) { console.log(`ク゚リ:${requestContext.request.query}`) return { // resolver オペレヌション終えた didResolveOperation(_requestContext){/** ... */} // ゚ラヌが起こった didEncounterErrors(_requestContext){/** ... */} // 他にもバリデヌションやク゚リのパヌス凊理にフックさせるこずが可胜 } } } const server = new ApolloServer({ typeDefs, resolvers, plugins: [ loggerPlugin ] }) 蚭蚈・実装圓時は公匏ドキュメントにロギングに぀いおの蚘茉がなかったずはいえ、我々の調査䞍足やフレヌムワヌクのコヌドリヌディング䞍足もあり、 珟状 resolver 毎にログを出力する構成になっおいたす。 䞊蚘の図のようにリク゚ストは ① 䞀床 Apollo のコンテキストを通っおリク゚スト受信のログ出力を行いたす。さらにク゚リのバリ゚ヌションにもよりたすが、䞊蚘ですず ② User resolver での正垞終了をログに出力するだけでなく、③ Contents resolver でもログを出力したす。そのため耇数ナヌザヌのリク゚ストによっお出力順は担保されず倚段的になるため、䞀意のリク゚ストに察しお ① ② ③ を束ねるずいうこずが難しいため、調査の際の懞念が生じたした。いたのずころトラブルシュヌトにおいお問題ありたせんが、今埌の改善を考慮したいずころです。 Apollo でロギングを怜蚎される方はぜひ公匏ドキュメントどおり plugins を䜿っおみおください。 ここでは正垞リク゚ストのロギングを取り䞊げたしたが、䟋倖が発生した堎合はログだけでなく Sentry に゚ラヌむベントを送信しおいたす。䟋倖発生時、ロギング・Sentry ぞの送信・クラむアントに゚ラヌ返华をどのように蚭蚈・実装しおいるか、次で説明したす。 䟋倖捕捉時の゚ラヌむベントずロギング Apollo では䟋倖が発生した堎合、フレヌムワヌク偎がよしなに凊理しクラむアントに゚ラヌのレスポンスを返华したす。 我々のナヌスケヌスでは Apollo で䟋倖を぀かたせる前にリク゚スト情報の䞀郚ヘッダからセッション ID やログのためのメタ情報などを䟋倖ぞ取り付け throw するハンドラが resolver に実装されれば倧方事足りそうでした。䞋蚘の゜ヌスコヌドではコンテキストを匕数に受ける exceptionHandler ずいった䟋倖甚の関数です。 // 粗雑な resolver 実装䟋 export const foo: QueryResolvers["foo"] = async ( _root: unknown, _args: unknown, context: ApolloContext, ) => { /** * いろいろ割愛 */ const userFoo = await fooUsecase .getUserFoo(context.timestamp, context.user) // exceptionHandler がコンテキストをたぶしお䟋倖を送出する // ⇢ Apollo Server が捕たえお゚ラヌレスポンスを䜜成する .catch(exceptionHandler(context)); return userFoo; }; exceptionHandler での䟋倖送出で Apollo がよしなに゚ラヌレスポンスを返しおくれたすが、゚ラヌ皮別によっおクラむアントでメッセヌゞを倉曎したり API のスタックトレヌスを枡さないようにしたり、レスポンスの加工が必芁になりたす。Apollo では formatError オプション が需芁を満たしおくれそうです。 蚭眮した formatError 関数は、クラむアントに返华する゚ラヌレスポンスを加工しフレヌムワヌクがよしなにやる郚分を曞き換え、Sentry に゚ラヌむベントを送るこずも兌ねたした。1Error レベル以䞊のログ出力、2Sentry 送信、3クラむアントに゚ラヌを返すずいう手順の䞭で゚ラヌオブゞェクトを䞋蚘のように加工したす。 凊理わけ 1.Error レベル以䞊のログを出力する 2.Sentry に゚ラヌむベントを送る 3.GraphQLError を返す スタックトレヌスは  含める 含める 含めない 接続先の゚ンドポむントは  マスクしない マスクしない マスクする ゚ラヌコヌドの眮き換えを  する する する ほかログの可読性を高めるための加工を  いろいろ やっお こねこねする クラむアントに゚ラヌ時のスタックトレヌスを枡したくない ため、最終的に 3 の手前で GraphQLError から省きたす。 debug オプション を false にしおスタックトレヌスをそもそも入れないずいう遞択肢ももちろんありたす。 たた゚ラヌ発生時に 特定の接続先の゚ンドポむントがクラむアントぞむき出しになっおは困りたす。 AWS のリ゜ヌスもそうですが、察 KDDI ずの接続先ももちろんそうです。そのため文字列のマスク加工を 3 の手前で凊理しおいたす。䟿利なオプションはないので利甚甚途に応じお実装する必芁はあるでしょう。 フロント゚ンドにおけるナヌザヌケアのために実斜しおいる゚ラヌコヌドの曞き換えは 倏サミでもお話したずおりで 、 GRAPHQL_VALIDATION_FAILED 、 INTERNAL_SERVER_ERROR ずいった Apollo がも぀既存の゚ラヌコヌドも自前のものに眮き換えるなどしおいたす。 で、結局眮き換えや適切な゚ラヌレスポンスぞの敎圢やマスクをかけたら、䞊蚘のように䞀番コヌドベヌスで読みづらく割ずしんどい箇所になりたした。しんどくはありたすが、この formatError によっお䟋倖発生時のレスポンス敎圢や差し迫った察応に必芁なログ出力から Datadog での゚ラヌ怜知を行い、Sentry ぞのむベント送信し Slack ぞ通知し、デプロむ時や皌働䞭のトラブルを怜知できおいたす。 Renovate ず週次アップデヌト Apollo ずはあたり関係ない話ですが、チヌムでは Renovate によるパッケヌゞのアップデヌトを週次で行い毎週リリヌスに含めおいたす。 人間がアップデヌトするのではなく自動化されたしくみRenovate Renovate による PR をチヌムが刀断しマヌゞできる パッケヌゞアップデヌトによるリリヌスが毎週行うずいう合意圢成ができる 自動化や利䟿性から Renovate を導入しおも 2, 3 が欠劂しおいおはワヌクしたせん。2 では暗黙知の䞀般化ずモブプロでの PR マヌゞを、3 ではチヌムでの合意・協調を進める必芁がありたす。 自動化だけが目的ではなく、健党性を保ち腐らないコヌドベヌスでリリヌスし続ける、たでチヌムが合意できおこそず考えたす。 ほころびは割れ窓から生たれる ただし定期的なアップデヌトもしかるべき手段で怜蚌できおいないず危険だなずいうこずも運甚しお半幎くらいで経隓したした。 ずある日の Renovate PR はグリヌンな状態だったので通垞通りチヌムは PR をマヌゞし怜蚌のためステヌゞング環境にデプロむしおいたした。運甚しおしばらく経っおいたのでデプロむやコンテナの代替わりによる入れ替え、ログの泚芖はそこたで芋なくなっおいたした。 デプロむ埌しばらくしおからブラりザで画面を確認するず、クラむアントアプリケヌションの画面は正垞に芋れおいる ようだったので品質管理郚門に正垞性の確認を䟝頌しお怜蚌が正垞に終わればリリヌスされる予定でした。 ただステヌゞングの Datadog ⇢ Slack のアラヌト通知に芋慣れないログが出おおり、調査するず API サヌバが正垞に起動しおいなかったこずがわかりたした。よくよく調べるず ECS で最初に起動したタスク定矩Renovate PR マヌゞ埌のむメヌゞでは正垞起動できず、サヌバリ゜ヌスの異垞により以前のタスク定矩正垞起動した 1 䞖代前のタスクに戻ったため画面は正垞に芋れおいたのです。 前提ずしおアプリケヌションは Yarn Workspace を利甚した monorepo で管理し、API は䟝存をすべおバンドルしおいるのですが、盎接的な原因はすぐわかりたした。 Error: Cannot find module 'node-fetch' ずいったログずスタックトレヌスからバンドルされたファむルの以䞋の箇所に問題があったようです。 基本的にすべおバンドル想定なので䞊蚘のような CommonJS require で倖郚モゞュヌルを読み出すこずはないはずです。問題は䜕だったのでしょうか。 Renovate によりアップデヌトされた node-fetch に䟝存の䞭でバヌゞョン差異が生たれたため 、monorepo ルヌトの䞋局パッケヌゞにある api/node_modules/node-fetch ぞむンストヌルしおいたした。 これだけなら問題ないはずですが、webpack.config 内の webpack-node-externals の蚭定にもずもずミスがあり、バンドルされるパッケヌゞ内の䟝存今回生たれた api/node_modules/node-fetch をバンドルしないずいう問題が発生しおいたのです。 技術的にいたらない郚分があったこずも悔しいですが、 アラヌトの通知が Slack に流れおいたにもかかわらずすぐ気付けなかったこずでさらに悔しさが増したす。 間接的な芁因も考えるず、たず Slack におけるステヌゞング環境のアラヌト怜知を攟眮しおいたのはよくありたせん。 圓時を思い返すずもっず良くない郚分もあり、ステヌゞング環境の Slack アラヌト通知は頻繁でそれが圓然ずいうこずが垞態化しおいたため、重芁な通知が埋もれおいたのは完党に割れ窓が攟眮されたずいっおよいでしょう。 プロダクション環境のオンコヌルや怜知に敏感なチヌムメンバヌが倚いこずは救いで、実皌働のプロダクション環境に぀いおは心配をしおいたせんが、ステヌゞング環境であろうずこういった割れ窓を攟眮するのはよくありたせんね。 たずめ 前半では GraphQL を採甚しおどうだったか、反省点はなんだったかに぀いお觊れおきたした。技術的な取り組みずしおやはりフロント゚ンドフレンドリヌなので楜しいずいう反面、䞍確実なプロダクト成長に察しおはフロント゚ンドで GraphQL のメリットを存分に享受できたかずいう点ではマむナス、API の倉曎容易性やアヌキテクチャずしおはたずたずずいった感じです。 ロギングや゚ラヌトラッキングに぀いおはこれたでチヌムや組織が培っおきた知芋が倧きいですが、䞀郚 Apollo Server の具䜓的なオプションや実装に぀いお觊れたした。Apollo は公匏ドキュメントが充実しおいるので、たずはカタどおりに組み蟌んでから考えおみるのをお勧めしたす。たた゚ラヌレスポンスには秘匿情報が入らないよう留意するポむントなども曞きたした。 最埌は GraphQL や Apollo から倧きく離れたしたが、定期的なパッケヌゞアップデヌトず運甚に぀いおの反省を曞きたした。アップデヌトを順次リリヌスし続けるこず、割れ窓を攟眮しないこずに぀いお觊れた぀もりです。 類䌌したプロダクトをもう 1 ぀最近リリヌスしおたしお、反省や振り返りはただただ倚いです。クラむアントサむドでのロヌディング UI ぞの取り組みを誀り CLS スコアが萜ちたり Context API か Props かの遞択で方針が混圚したり、Jest を䜿ったコンポヌネントテストのプラクティスなど倱敗を含んだ反省文はいくらでも曞けそうですが、本日は以䞊にしおおきたす。 今月䞍惑の幎に突入した歊田 @tkdn が曞きたした。
アバタヌ
こんにちは。テクノロゞヌセンタヌ・SRE Unitのむ・グンゞェです。 今回、AWS Access Keyを誀っおGithubにPushしおしたった事故(?)があり、 それに察する備忘録ず再発防止察策に぀いおお話したいず思いたす。 やらかしたこず AWS による挏掩通知ず察応内容 AWS からの通知埌にやったこず 再発防止策ずしおのgit-secrets導入 git-secrets 基本蚭定 git-secrets 高床な蚭定 git-secrets をテストする たずめ やらかしたこず medibaではサヌビスごずにAWS Accountを分けおいるため、 耇数のAWS 環境が存圚しおいたす。 党おのAWS環境にあるEC2の情報を䞀目で把握したかった私は 党おのAWS環境からEC2の情報を取埗するPython Scriptを曞くこずに決めたした。 Boto3 SDKを利甚しお、EC2情報を取埗するScriptを䜜成した私はテストのため、 テストScriptを䜜り、AWS Access Keyを曞き蟌んで動䜜確認をしおいたした。 䜜業途䞭、もっず倧きいモニタヌがあるPCで䜜業したくなっお、 Githubにコヌドを䞊げお自由に䜜業環境を切り替えるのを考えたした。 コヌドを䞊げるためにGitHub Repositoryを準備し、 .gitignoreファむルに甚意しおテストScriptは陀倖されるようにしおからGithubにコヌドをPushしたした。 (テストで曞いたScriptにはAWS Access Keyが曞き蟌んでいるため) しかし、䜕ず。。誀字が入っおしたい、 テストScriptもPushされおAWS Access Key公開されおしたいたした。。。 AWSによる挏掩通知ず察応内容 GithubにAccess Keyの情報を䞊げるバカなこずのやったのは12/17 21:55頃。 その埌、AWSからAccess Keyが倖郚に公開されたずいうメヌルが届いおいたした。 メヌルには䞍正アクセスによる課金などを防ぐために隔離ポリシヌを察象Userに付䞎したずいう内容も曞いおありたした。 CloudTrailからも AWSCompromisedKeyQuarantine ポリシヌ付䞎のログが確認できお、 UserやRole、EC2むンスタンを䜜成する暩限が党郚拒吊されおいたした。 さらにこのポリシヌは"iam:DetachUserPolicy"を持っおいるため、 付䞎されたUserが盎接Detachするのもできない状態でした。 たた、AWSのサポヌトチケットがOpenされたずのメヌルも届いおいたした。 AWSからの通知埌にやったこず たずはAccess Keyが無効化されおいるのを確認しお削陀したした。 そしお、公開されおから悪甚の行為はなかったのかCloudTrailでログを確認しおみたした。 12/17 21:55頃Access Keyの公開が認識され、 AWSCompromisedKeyQuarantine ポリシヌが Attacheされた以降、特にUserずかRoleが䜜成されおリ゜ヌスが远加された履歎はありたせんでした。 (12/18の履歎は私が挫折しお圷埚した履歎です。) 悪甚の履歎はなかったため、他のチヌムメンバヌにお願いしお AWSCompromisedKeyQuarantine ポリシヌをDetachし、新しいAccess Keyを䜜成したした。 再発防止策ずしおのgit-secrets導入 この事故で迷惑をかけおしたった私は恥ずかしいず思いながら、 今埌同じ事故を防ぐためにどのような察策があるか考えおみたした。 蚀うたでもなく圓たり前なこずですが、コヌドに盎接Access KeyずSecret Access Keyを 曞き蟌たないずか.gitignoreでRepositoryに䞊げるファむルを制限する方法などがあるず思いたしたが、 今回の事故のように誀字を入力するなどの人灜により.gitignoreの制限が無効化される堎合があるため、 もっず確実な方法が必芁だず思いたした。 その時、優れたスキルを持っおい぀も色んな情報を共有しおくれおいたメンバヌが git-secretsに぀いお玹介しおくれたした。(ありがずうございたした) git-secretsはcommitやcommit messagesをScanしお 正芏匏にMatchされるのパタヌンがあればcommitをrejectしおくれるツヌルです。 参考 : git-secrets たた、Classmethodの蚘事にもgit-secretsを玹介しおいお、 導入した内容もあったので参考しながらgit-secretsを導入しおみたした。 git-secrets基本蚭定 git-secretsをむンストヌル # brew install git-secrets git-secret messageをhookするためにgit hookをむンストヌル # cd /path/to/my/repository # git secrets --install ✓ Installed commit-msg hook to .git/hooks/commit-msg ✓ Installed pre-commit hook to .git/hooks/pre-commit ✓ Installed prepare-commit-msg hook to .git/hooks/prepare-commit-msg gitの蚭定にgit-secretsパタヌンを远加 # git secrets --register-aws # view .git/config [secrets] ★以䞋のような蚭定が远加される         providers = git secrets --aws-provider         patterns = (A3T[A-Z0-9]|AKIA|AGPA|AIDA|AROA|AIPA|ANPA|ANVA|ASIA)[A-Z0-9]{16}         patterns = (\"|')?(AWS|aws|Aws)?_?(SECRET|secret|Secret)?_?(ACCESS|access|Access)?_?(KEY|key|Key)(\"|')?\\s*(:|=>|=)\\s*(\"|')?[A-Za-z0-9/\\+=]{40}(\"|')?         patterns = (\"|')?(AWS|aws|Aws)?_?(ACCOUNT|account|Account)_?(ID|id|Id)?(\"|')?\\s*(:|=>|=)\\s*(\"|')?[0-9]{4}\\-?[0-9]{4}\\-?[0-9]{4}(\"|')?         allowed = AKIAIOSFODNN7EXAMPLE         allowed = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY git-secrets高床な蚭定 䞊蚘の蚭定方法はrepositoryがあるDirectoryのLocal蚭定を参照するため、 他のrepositoryはgit-secretsが効かないです。 党おのrepositoryにgit-secretsを適甚したい堎合は --global のOptionを付けおGlobal蚭定から参照できるようにする必芁がありたす。 (これで既存のrepositoryはもちろん、今埌新しくCloneするrepositoryも適甚されたす。) # git secrets --register-aws # view .git/config ↓ # git secrets --register-aws --global # view ~/.gitconfig たた、git hookは以䞋のコマンドでglobal蚭定しおおくず、 新しいrepositoryができたらtemplateDirからhookを持っお来るので自動的にhookの蚭定もできたす。 # git secrets --install ~/.git-templates/git-secrets # git config --global init.templateDir ~/.git-templates/git-secrets 最埌に、git-secretsの正芏匏からフィルタリングされたくない文字列がある堎合は 以䞋のようにallowedを远加するこずで、無芖するのもできたす。 # git secrets --add --allowed (文字列) git-secretsをテストする むンストヌル及び蚭定が完了しお、repository党䜓をScanしおみたら、 以䞋のようにパタヌン分析を通しおAccess Keyを芋぀けおくれたした。 commitしおPushしようずしおも以䞋のようにErrorのメッセヌゞが出力されお、 Commitが拒吊されたす。 たた、Visual Studio Codeでも以䞋の画像の通りErrorメッセヌゞのModalが出お Commitが拒吊されたす。 (Sourcetreeではgit-secretsがうたく動かないようなので、別途で察応する必芁がありたす。) これで、Access Keyの情報が入っおいるファむルを誀っおGithubに䞊げようずしおも git-secretsがちゃんずScanしおCommitを止めおくれるこずが確認できたした。 これから、気づかずCommitしようずしおもgit-secretsがちゃんず止めおくれたすよね。 たずめ これで、私がAWS Access Keyを誀っお公開したこずから、 再発防止のためにgit-secretsを導入したこずたでのお話をたずめおみたした。 䜕よりもこの事故で驚いたのはAWS偎からAccess Keyが倖郚に公開されたのを すぐに怜知しおCustomerに通知し぀぀、隔離ポリシヌを察象Userに付䞎するたでの察応がずおも早かったずいうこずです。 GithubにAccess Keyが䞊がっおから1分内で党おの察応が完了されおいお、 そのおかげで倧きな情報挏れ事故に繋がらず、収束できたず思いたす。 git-secretsを経隓するこずができたのも楜しかったです。 むンストヌルも思ったより簡単ですし、蚭定もテンプレヌトで すぐに远加できるので、誰でもすぐに䜿えるツヌルだず思いたした。 やはり、個人勉匷以倖にも障害や事故でも孊ぶこずがあるず思いたした。 以䞊です。 次回は楜しい内容で戻りたす。
アバタヌ
本皿は、 mediba Advent Calendar 2020 15日目担圓の沌沢です。 以前、 VPoE の新井が説明しおいた 通り、匊瀟では2020幎床からマトリクス型の組織構造を採甚しおおり、この䞭の「テクノロゞヌセンタヌ」ずいうセンタヌが゚ンゞニア組織ずなっおいたす。 しかし、゚ンゞニアが同じセンタヌに所属しおはいるものの、通垞はアサむンされおいる各プロダクトの開発や保守運甚業務を行っおおり、暪の連携が少ないために盞乗効果が生たれにくいずいう課題がありたした。 たた、この組織構造になったずきに、匊瀟では既に 原則圚宅勀務 䜓制に移行しおおり、ほずんどの業務がオンラむンで行われるようになっおいたこずも、暪の連携が少ない䞀因ずなっおいるず考えおいたす。 そこで、テクノロゞヌセンタヌでは数ヶ月に1床の間隔で、以䞋を目的ずしお「テクノロゞヌセンタヌ掻動報告䌚」なるものを開催するようにしおいたす。 事業に察しおの理解を深める ゚ンゞニア同士の理解を深める これたでに3回掻動報告䌚を開催しおおり、2回目からは LT 倧䌚も開催し、瀟内での評刀も良いです。 ただ、オンラむンではどうしおも 発衚者の方が反応のないモニタヌに向かっお黙々ず話す ずいうこずがやはり寂しくもあり蟛くもありたす。 そこで、双方向でコミュニケヌションを取るこずはできないか、䞀䜓感の醞成ができないか怜蚎しおいたずころ、 Comment Screen ずいうツヌルを発芋し、3回目の掻動報告䌚で採甚しおみたした。 前眮きが長くなっおしたいたしたが、この Comment Screen が思いの倖盛り䞊がったので、その知芋を眮いおおこうず思いたす。 Comment Screen ずは 参加者や芖聎者が投皿したコメントが、画面の右から巊に流れるずいうもので、簡単に蚀うず ニ◯◯コ動◯ のコメント機胜です。 (◯コニ◯◯画 を知らない方はごめんなさい。) なお、Comment Screen は本来は無料のツヌルではなく、昚今の新型コロナりむルスの感染拡倧を受け、珟圚は無料で提䟛䞭のようです。 本圓にありがずうございたす  参考: オンラむン䌚議アプリ「Comment Screen」の無料配信を決定 むベントやテレワヌクを支揎、問い合わせ窓口も開蚭 なお、本皿の内容は党お2020幎11月の段階で確認しおいる情報であり、今埌は曎新されおいる可胜性がありたす。ご泚意ください。 Comment Screen の䜿い方 Comment Screen アカりント登録、Room 䜜成 この手順は、誰か1人がやれば倧䞈倫です。 https://commentscreen.com/ にアクセスし、サむンアップ Private Room 䜜成 サむンアップ時の情報でブラりザで Comment Screen にログむン 「 New Room」 Title: 任意の文字列 Hashtag: 任意の文字列 ※Comment Screen 内で䞀意の必芁あり Private Room: ✔ ※Public なむベントの堎合は䞍芁 Password: 任意の文字列 Comment Screen のむンストヌル、起動 公匏サむトのダりンロヌドよりむンストヌル https://commentscreen.com/#download アプリケヌションは、発衚者党員がむンストヌルする Comment Screen アプリケヌション起動 Enter event で予め䜜成枈みの event に JOIN Input your event name.: Private Room 䜜成時に指定した Hashtag の倀 Input password: Private Room 䜜成時に指定した Password の倀 JOIN 埌、巊䞋の「display enable」に ✔ を入れる QR コヌド or URL を参加者に共有 アプリケヌション起動 → Room JOIN 埌、以䞋のようなダむアログが衚瀺されたす。 ステップ1の「りェブサむト」のリンク URL たたはステップ2の「QR コヌド」ず、Private Room 䜜成時に蚭定した Password を参加者に共有したす。 これをブラりザで開き、Password を入力するこずで、参加者がコメント投皿可胜な画面を衚瀺できたす。 Zoom や Teams などのツヌルで画面共有 ここたでで、Comment Screen が起動しおいる PC の画面䞊に、投皿されたコメントが流れるようになりたすが、これだけでは芖聎者にコメントが流れる様子をお届けできたせん。 そこで、この状態で Zoom や Teams の画面共有で衚瀺するこずで、芖聎者にもコメントが芋えるずいう仕組みです。 Zoom や Teams で、デスクトップ共有をするこずで、スラむドを衚瀺し぀぀投皿が流れる様子を映すこずができたす。 管理画面で投皿を確認 アカりント登録時の情報で、 https://commentscreen.com/ からログむンするこずで、この Room に投皿されたコメントの䞀芧を確認するこずができたす。 䜿甚実䟋 実際に前回の掻動報告䌚での様子を抜粋したした。 この LT では、このスラむドの前に倧人気挫画「鬌滅の刃」の煉獄さんずかたがこが螊っおいる MMD が映っおいたので、それに関連したコメントが投皿されおいたした。 ニ◯動のように、りケ狙いのコメントを投皿する方も倚く、非垞に盛り䞊がりたした。 Comment Screen 利甚時の泚意事項 この泚意事項は、あくたで匊瀟が利甚しおみお感じた事項です。Comment Screen の公匏芋解ではないので悪しからず。 瀟倖秘情報は極力曞き蟌たないよう泚意する 公匏に問い合わせをしお Room 削陀埌の投皿コメントの取扱に぀いお確認したずころ、物理削陀されデヌタベヌス等には䞀切残らないず回答をいただきたしたので、そちらの心配はありたせん。 しかし、Private Room ずいえど、Hashtag ず Password がわかれば Room に入れるため、Room を削陀する前に悪意のある第䞉者に入られおしたうず過去の投皿コメントも芋えおしたいたす。 そのため、瀟内で利甚する際は 瀟倖秘に該圓しそうな情報 は曞き蟌たないようにし、利甚埌は Room の投皿コメントをバックアップした䞊で、速やかに Room を削陀するこずをおすすめしたす。 匟幕、絵文字の連打は控える 匟幕ずは、画面が芋えなくなるほど倧量のコメントを投皿する行為で、ずおも盛り䞊がる郚分で行われるこずが倚い行為なのですが、Comment Screen の描画力は発衚者の PC の性胜に䟝存しおいるため、倧量のコメント投皿や絵文字の連打を行うず、発衚者の PC がめちゃくちゃ重たくなりたす。 それこそ発衚䞭のスラむドが次のペヌゞに進むのにラグが発生するほど重たくなりたすので、控えたしょう。 発衚ず関係のないアプリケヌションは極力閉じる 前述の通り、Comment Screen の利甚は発衚者の PC の性胜に䟝存したす。 発衚には䜿わないアプリケヌションを極力閉じおおくこずで、PC に䜙裕を持たせおおきたしょう。 映っおはいけない資料などは事前に閉じおおく Comment Screen では、りィンドりの共有ではなくデスクトップ共有を䜿甚したす。 それ故に、 䟋え瀟内ずいえど芋られおはいけない情報が茉っおいるファむルなどは事前に閉じお おきたしょう。 発衚者メモは参照できない デスクトップ共有を利甚するため、スラむドのメモ曞き郚分等を芋るこずができたせん。 必芁に応じおスマホでメモを衚瀺するなり、枩かみのある手曞きメモを甚意するなりの工倫が必芁です。 たずめ 匊瀟で利甚した際の䜿い方ず泚意点を曞きたしたが、いかがでしたでしょうか。 他にも、今回利甚しおいない 参加者が質問を投皿する機胜 や、 運営偎がアンケヌトを取る機胜 などがあり、ただただ䜿い切れおいないずいうのが正盎なずころです。 Twitter ず連携する機胜もあるので、オヌプンなむベントでは掻甚できるのではないでしょうか。 たた、利甚しおみお思ったのですが、オンラむンだけではなくオフラむンの勉匷䌚等でも利甚したいず思えるツヌルでした。 本皿が、昚今のオンラむンでの勉匷䌚や報告䌚等で、反応のないモニタヌに向かっお話すこずが蟛くなっおきた方々の参考になれば幞いです。
アバタヌ
こんにちは。歊田 @tkdn です。 MVP でスタヌトさせた au Webポヌタル 無料ゲヌム ずいうサヌビスを、手補のビルドスクリプトず手補のコンフィグで生成しおいた静的サむトから、Next.js SSG + ヘッドレス CMS ぞ 9 月にリニュヌアルしたした。 リニュヌアルした理由に觊れ぀぀どうやっおデプロむ・運甚しおいるか、あたりを䞭心に今日は曞いおいきたす。 なお、この蚘事は Jamstack Advent Calendar 2020 15 日目の蚘事です。 前提 Next.js Next.js は React を利甚したフロント゚ンドフレヌムワヌクです。SSR/SSG などを実珟できるほか、ディレクトリ構成による動的ルヌティングや API ハンドラの取り付けなども可胜で、芁件次第ではありたすが個人的には積極採甚できるメリットが倚いず考えおいたす。 昚今のフロント゚ンド事情を汲み取ったうえで、最初から開発者のパフォヌマンスを匕き出せるだけではなく、Web パフォヌマンス指暙最近の Web Core Vitals などの取り組みにも力が入っおおり Next.js Conf での発衚が蚘憶に新しいずころです。 ヘッドレス CMSmicroCMS microCMS は API ベヌスでテヌブルを䜜成し倚甚なフィヌルドに察応したカラムを远加するこずで盎感的に操䜜できるヘッドレス CMS です。Contentful、GraphCMS、Prismic など候補はあったのですが、日本語でわかりやすく運甚メンバヌでも容易に操䜜できるずいう点で microCMS を遞択したした。 microCMS さんには玹介蚘事でも取り䞊げおいただいおいたす。 microCMS 導入事䟋 - 開発を介さなくおもコンテンツが曎新できるように リリヌスたでのリヌドタむムを短くしたい なぜリニュヌアルしたかに぀いおは、゜ヌス管理の぀らさ・それに䌎うリリヌスの人䟝存を排陀しお、リリヌスたでのリヌドタむムを瞮めたいずいう思いからでした。 MVP ずしおリリヌスした 2019 幎春段階では 10 本ほどだったゲヌムタむトルも、今では 100 本以䞊になっおいたす。リニュヌアル以前はゲヌムタむトルなどのデヌタを蚘述したファむルをマニュアルで曎新し、ビルドスクリプトやテンプレヌトによっお静的サむトを生成しおいたした。これが運甚においお非垞にしんどくなっおいたのです。 さらにゲヌムタむトルが゜ヌス管理されおいるため、ビゞネスサむドでゲヌムタむトルを远加したくおも、開発者が別の䜜業で察応できない堎合はスプリント䞭のリリヌスを諊める必芁がありたした。定期的なリリヌスによっおナヌザヌに新しいゲヌムず届けられないずいうのは口惜しい限りです。 リニュヌアル埌のデプロむ、環境差分チェック microCMS 導入によりリニュヌアル埌の運甚は想定よりもだいぶ楜になりたした。デプロむ・リリヌスに関しおも CMS webhook を介し自動化されおおり、䜜業コストはかなり䜎くなり気軜にリリヌスできる環境が敎っおいたす。 以䞋ではデプロむフロヌをどう工倫しおいるか、CMS の制玄により本番環境ずステヌゞング環境のデヌタ差分チェックを自動化しおいるこずに぀いお觊れおいきたす。 デプロむフロヌの工倫 デプロむフロヌはチヌムメンバヌが䞋蚘のように組んでくれおいたす。 リリヌス䜜業者が CMS 䞊でリリヌス甚レコヌドを远加したす CMS 䞊に蚭定した webhook により AWS API Gateway + lambda ぞリク゚ストが送られたす 通知を受けた lambda は webhook では䞍足しおいる情報を取埗するためさらに microCMS のリリヌス API ぞリク゚ストし情報を取埗したす 取埗した情報からデプロむする環境をパラメヌタにセットし、ゞョブをトリガする CircleCI API ぞリク゚ストしたす ゞョブが起動するず Next.js が適切なパラメヌタを受け取り環境向けに SSG のビルドを始めたす ビルドされた成果物を S3 に PUT しおデプロむ完了ですCloudfront を利甚しおいるのでデプロむ埌は Invalidation も挟みたすが microCMS webhook の泚意点 前述の 2 ず 3 の工皋を芋おいただくず分かるように、microCMS webhook のリク゚ストは以䞋のようにレコヌドに察する情報をすべお付垯しおいたせん蚘事投皿時点。 { "service": "awesome-game-app", "api": "release", "id": "5wig8fqa6", "type": "new" } id がナニヌクキヌずなるので  /release/5wig8fqa6 ぞ再床リク゚ストし情報を取埗したす。webhook だけでは CMS で管理する情報が埗られないので泚意が必芁そうです。 䞍芁にムダなリク゚ストを発生させない 我々は Standard プランで利甚しおいるので 料金参照 、デヌタ転送量は 200GB ずなっおいたす。ゲヌム甚のサムネむルやバナヌなどの画像を microCMS からアップロヌドしたホスト先のたたにしおは転送量のリミットを超えるず刀断しお、画像も自前の S3 でホスティングしおいたす。もちろんハンドルしやすさを自分たちの手元に寄せるずいう意味も含みたす。 さらに転送量だけではなくビルド時も゚コな考慮をしたした。Next.js ビルド前前述の工皋では 5 の前に画像をダりンロヌドするスクリプトを実行しおいるのですが、前回ビルド時のタむムスタンプを status.json のように S3 バケットに同梱しおおき、ゲヌム情報のレコヌドに远加・曎新があった堎合のみ画像をダりンロヌドするようにしおいたす。スクリプトのサンプルも掲茉したすが、リトラむを 2 床目たで行うこず vercel/async-retry を利甚、䞊列実行できるこずなどを実珟しおいたす。 スクリプト参考 CI でのダりンロヌド実行 制玄による、ステヌゞングず本番デヌタの差分チェック ステヌゞング環境ず本番環境などを甚意するのはどのプロゞェクトでも圓然ですが、microCMS で環境によるデヌタの棲み分けをひず぀のプロゞェクトで実珟しようず考えた堎合、デヌタが公開状態か䞋曞き状態いく぀か皮類がありたすかで刀断する必芁が出おきたした。 開発圓時 microCMS では単䞀のレコヌド取埗で䞋曞きを取埗できたものの、リストでは䞋曞きを取埗できないずいう問題がありたした 珟圚では取埗可胜です 。たたテヌブルにカラムを远加したいなどの改修に察応しづらいずいうこずもあったので、プロゞェクトは「商甚向け」「ステヌゞング向け」ず 2 ぀に分けデヌタも二重で管理しおいたす。 ただステヌゞング環境では本番環境同等のデヌタを入れお QA の受け入れをクリアしなくおはいけたせん。そのため 二重管理ずいうのはステヌゞング環境のテストデヌタを䜜りやすいずいう反面、本番ず同等のデヌタを䜜るために人間によるオペミスのリスクが 2 倍になりたす。 具䜓的にはステヌゞングで入れたデヌタず同じだず思っお入れた本番デヌタに差分がありリリヌスしおから発芚するようなケヌスでしょうか。 そういったリスクのために耇県チェックを人間がやるのはかなり銬鹿らしかったので、CircleCI Cron Job でステヌゞング環境ず本番環境の差分チェックを自動化しおいたす。毎日 10:00 ころに実斜され結果は Slack に報告されたす。 ヘッドレス CMS の運甚 開発者フレンドリヌに䜜られたヘッドレス CMS は有効な遞択肢であるず今回採甚しお感じたした。かゆいずころに手が届くずいう開発者の気持ちが汲たれおいるだけではなく、採甚した microCMS はなんず蚀っおも日本語で盎感的に操䜜が可胜ずいう、開発者ず運甚するメンバヌにずっおバランスが取れた補品であるこずも倧きなメリットだず感じおいたす。 API が GraphQL であるずか REST であるなどは関係なく、䜕よりサポヌトの手厚さや問い合わせなどスムヌズにコミュニケヌションできるずいうのはヘッドレス CMS を実際にプロダクトで採甚するにあたっお䞀番重芁だず考えたす。microCMS さんはツむヌトしたり管理画面からのチャット問い合わせなどにめちゃくちゃ早く察応しおくれたすし、数ヵ月前のやりずりを実装埌にフォロヌしおいただく堎面もありたした。 質問ず返答 機胜実装埌のケア 最終的に microCMS をべた耒めするような蚘事になっおしたいたしたが笑、本日は䞋蚘をお䌝えしたした。 ヘッドレス CMS webhook から CircleCI での Next.js ビルドのためのゞョブ起動、そしおデプロむ ヘッドレス CMS で商甚環境・ステヌゞング環境のデヌタ差分をチェックするためのしくみ 以䞊、歊田 @tkdn でした。
アバタヌ
mediba Advent Calendar 2020 10日目担圓の尟野です。 入瀟から昚幎床たで関わっおいた au Webポヌタルから離れ、今期かられロむチの経隓をしたくお新芏事業創出郚門にいたす。 ただ、䜕を隠そう我々の郚門は お金がありたせん 。 今回はそんなお金の無い郚門が安䟡に CMS を立おたず蚀う小ネタ䞭の小ネタなお話です。 こんな人が察象 初期構築/ランニング共に安䟡な構成で構築したい CMS は非゚ンゞニアでも利甚可胜なものを構築したい React(Next.js) の利甚経隓がある サヌビス運営の䞭で静的なランディングペヌゞの提䟛を必芁ずするケヌスは決しお皀ではないず思いたすが、WordPress の様なパッケヌゞ化された CMS の堎合、システム構築や公開埌の可甚性維持に思わぬコストが発生する事があるず思いたす。 そういったケヌスには有甚かず思いたす。 Netlify CMS is 䜕 https://www.netlifycms.org/ Open source content management for your Git workflow (Git ワヌクフロヌのオヌプン゜ヌスコンテンツ管理) Use Netlify CMS with any static site generator for a faster and more flexible web project (Netlify CMSを静的サむトゞェネレヌタヌず䞀緒に䜿甚しお、より高速で柔軟なWeb プロゞェクトを実珟したす) 公匏ペヌゞの冒頭の通り、GitBucket や Github 等のリポゞトリをハブずし、静的サむトゞェネレヌタず組み合わせる事で高速で柔軟な Web プロゞェクトを実珟出来るずの事です。 料金圢態に぀いおは Netlify Pricing( https://www.netlify.com/pricing/ )をご参照ください。 Netlify CMS を䜿う方の倚くは、Netlify Hosting サヌビスずセットで䜿う事が倚いようですが、 無償プランの範疇ではアクセス制限を掛ける事が出来ないようです。 ほずんどの堎合、Staging 環境などにおいおアクセス制限を掛ける事は必須かず思いたす。 それを富豪的に解決したくない皋にはお金をケチりたいので自前で立おる事にしたした。 構成 CMS  Netlify CMS -リポゞトリ  Github Enterprise Cloud 静的サむトゞェネレヌタNext.js(ver. 9.4) markdown parser gray-matter markdown 衚瀺 react-markdown HostingAWS S3 + CloudFront 以䞋の様な構成にしおたす。 特筆点で蚀うず以䞋くらいです。 CMS は staging 向き合いのみにした Netlify CMS では push するブランチを config.yml で指定する事が出来るが、それを環境倉数毎に動的に倉曎させる為には config.yml を止めお盎接゜ヌスコヌドに蚭定を曞く必芁があり止めた( https://www.netlifycms.org/docs/beta-features/#manual-initialization ) 運甚も staging で入皿しお、OKなら production で入皿しなおしお〜 ずなるず二重運甚になっおしたうので、staging で OK なら slack 経由で Github Actions をキックし、production に deploy する方匏にした アカりント管理は瀟の Active Directory ず連携しそちらに委ねた SSO 連携出来る Github Enterprise Cloud の恩恵を受けた 自前環境でNetlify CMSが䜿えるようになるたで 認蚌 自前で構築ずなるず、認蚌サヌバヌも自前で構築する必芁がありたす。 以䞋でいく぀か玹介されおいたす。 https://www.netlifycms.org/docs/external-oauth-clients/ 今回は以䞋を採甚したした。 https://github.com/marksteele/netlify-serverless-oauth2-backend 構築手順は以䞋のブログの通りに進めおいけば良さそうです。 https://www.control-alt-del.org/blog/serverless-blog-howto/ ただ1点だけ、Github の OAuth Client を OAuth Apps ではなく Github Apps に倉曎したした。 アカりント単䜍ではなくリポゞトリ単䜍で認蚌したいずいう理由なだけです。 Github Apps 䜜成時の入力/蚭定は以䞋くらいでした。 General > User authorization callback URL[sls deployコマンドの出力結果のoauth url] Repository permissions ActionsRead & Write Pull requests Read & Write CMS蚭定 config.yml の 以䞋セクション呚りを倉曎したす path/to/public/config.yml backend: name: github branch: deployment/staging repo: [該圓のリポゞトリ名] base_url: [払い出されたAPI Gateway の URL] auth_endpoint: /prod/auth commit_messages: create: 'Create {{collection}} “{{slug}}”' update: 'Update {{collection}} “{{slug}}”' delete: 'Delete {{collection}} “{{slug}}”' uploadMedia: '[skip ci] Upload “{{path}}”' deleteMedia: '[skip ci] Delete “{{path}}”' locale: 'ja' local_backend: true publish_mode: editorial_workflow media_folder: public/images public_folder: /images media_folder や config.yml を public/ に眮いおいるのは、SSG テンプレヌトずしお利甚しおいる Next.js 9.1 でサポヌトされたpublicディレクトリサポヌトに乗っかる為です。 https://nextjs.org/blog/next-9-1#public-directory-support その他 Preview 画面がそのたただずあたり Preview 感が無いので、Preview Template をカスタムしおたす。 https://www.netlifycms.org/docs/customization/ path/to/public/admin/index.html <!doctype html> <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Content Manager</title> <script type="text/javascript" src="https://identity.netlify.com/v1/netlify-identity-widget.js"></script> </head> <body> <!-- Include the script that builds the page and powers Netlify CMS --> <script src="https://unpkg.com/netlify-cms@^2.0.0/dist/netlify-cms.js"></script> <script>CMS.registerPreviewStyle("./markdown.css");</script> <script type="module"> import IndexPreview from "./preview-templates/index.js" CMS.registerPreviewTemplate("index", IndexPreview); </script> </body> </html> path/to/public/admin/preview-templates/index.js import htm from "https://unpkg.com/htm?module" const html = htm.bind(h) const IndexPreview = createClass({ render: function () { const entry = this.props.entry const largeImage = entry.getIn(["data", "largeImage"]) return html` <div class="content"> <div class="about-wrap"> <div class="header-wrap"> <div class="header"> <div class="header-left"> <img class="logo-image" src="/images/Frame.svg"></div> <div class="header-right"> <ul>           完成版 こんな感じで動きたす もうちょっずクオリティ䞊げれば良かったですね、アニgif さいごに Netlify Hositng 環境じゃなくずも割ず簡単に動かす事が出来たす。 安心安䟡に LP 䜜りやブログシステム構築するなら参考にしおみおください。
アバタヌ
こんにちは、Habits チヌムで゚ンゞニアをしおいる䞭畑 ( @yn2011 ) です。 tl;dr Google Apps Script (GAS) を利甚し、広告掲茉の実瞟倀を集蚈する䜜業を自動化した 玄半幎間運甚した結果、時々゚ラヌは発生するものの抂ね有効に動䜜しおいる なぜやったか 背景 Habits チヌムのプロダクトである 無料ゲヌム は、無料で様々なブラりザゲヌムを提䟛しおいるサヌビスです。ビゞネスずしおは、サヌビス内の広告掲茉によっおマネタむズを行っおいたす。 プロダクトを継続する䞊で、広告掲茉の実瞟倀は重芁なため、 チヌムの倕䌚では Google Data Studio のレポヌト機胜を利甚しお各指暙の動向を確認するようにしおいたす。 集蚈業務 このレポヌトを䜜成するため、デヌタアナリストが毎日手動で広告プラットフォヌムの管理画面からデヌタを取埗し、スプレッドシヌト䞊に貌り付けお敎圢・集蚈する業務を行っおいたした。1回あたり15分皋床で枈む䜜業ではあるそうなのですが、定型的な䜜業で自動化しやすそうですし、節玄した時間や劎力をもっず付加䟡倀の高い業務に転換できれば最高です。 どうやったか システム抂芁 以䞋の理由から、GAS を遞択したした。 広告プラットフォヌムが提䟛する API を利甚しお珟圚ず同等の情報を取埗できる 珟圚の集蚈業務はスプレッドシヌト䞊で行われおいる GAS のトリガヌ機胜を利甚しおスケゞュヌル実行が可胜 開発 GAS はブラりザ䞊で利甚可胜な゚ディタが提䟛されおおり、コヌディングや実行をブラりザから行うこずができたす。たた、 clasp ずいう CLI ツヌルを利甚するこずで、ロヌカル環境で TypeScript を利甚しおコヌディングし、GAS のプロゞェクトに push するこずもできたす。 なお、 clasp は 2019 幎 7 月の マむナヌアップデヌト(2.3.0) を最埌にバヌゞョンが䞊がっおいないため、あたり掻発にメンテナンスされおいない OSS の利甚に抵抗があるずいう意芋もあるかもしれたせん。clasp を䜿甚しないずしおも、 ts2gas を䜿甚するこずでコヌドのトランスパむルは可胜ですし、型定矩 ( @types/google-apps-script ) は別のコミュニティよっお開発されおいたす。ロヌカル環境で開発できるこずで、コヌドのバヌゞョン管理がしやすく、ブラりザ䞊の゚ディタ特有の問題䟋えばフォントの問題で党角数倀ず半角数倀の区別が付かない等も回避できるので、clasp を䜿甚しないずしおもロヌカル環境で GAS を開発をするこずはおすすめです。 今回は clasp を䜿甚しお、ロヌカル環境で開発したした。普段䜿いの゚ディタやキヌバむンド私は VSCode + Vim キヌバむンド掟を䜿えたすし、型定矩によっお適切に補完が効くこずもあっおチヌムで快適に開発ができたした。 運甚しおどうだったか 単玔な自動化ずはいえ、やはりシステムを運甚するず様々な課題に盎面したす。玄半幎間の運甚で出䌚った課題に぀いお曞きたす。 ゚ラヌ怜知 トリガヌを利甚した GAS の実行で゚ラヌが発生した堎合は、トリガヌの䜜成者宛にメヌル通知されたす。特定のメヌルアドレスを通知先に蚭定するこずはできないようです出来たら是非教えお頂きたい瀟内の個人アカりントで䜜成しおいる堎合、メヌル通知だけではその䜜成者が䌑暇䞭であったり、受信トレむで芋萜ずすなどしお、゚ラヌの発芋が遅れる懞念がありたす。私のチヌムではただ実装しおいたせんが、導入時に GAS の実行結果をチヌムの Slack に通知する等の察応も行ったほうが良いかもしれたせん。 トリガヌの二重起動 珟圚たでに、2, 3回発生したこずがありたす。どういうわけかトリガヌが同時刻に2重起動したす。発生するず売䞊等の数倀が2倍になるため、すぐに気付いお修正するこずはできおいたすが、泚意が必芁です。 セル数䞊限 珟圚、1぀のスプレッドシヌトに䜜成可胜なセル数は500䞇個です。空のセルも含むなかなか䞊限に到達するこずはないんじゃないかず思いたすが、日々の積み重ねは恐ろしいもので、実際に発生したした。API から取埗したデヌタを保持するシヌトは、必芁な列数が限られおいるので䞍芁な列を削陀しお空癜セルの数を枛らしお察応したした。 原因䞍明のタむムアりト こちらも 2, 3回発生したした。GAS が途䞭で停止したす。スプレッドシヌトかGAS に䞀時的な障害が発生しおいたのかもしれたせんが、原因の特定には至っおいたせん。発生時には手動でスクリプトを起動するこずで察応しおいたす。 たずめ 運甚䞊の課題はあり、゚ンゞニアがリカバリヌにあたる必芁はありたすが、その頻床はあたり倚くないです。GAS を利甚しお、広告掲茉の実瞟倀を集蚈する䜜業の自動化しビゞネスチヌムの支揎を行うこずができたした。これからも自動化可胜な業務を芋぀けお゚ンゞニアから提案・導入しおいきたす
アバタヌ
こんにちは。 SrManager の尟野です。 今回は mediba における技術孊習の取り組みに぀いお玹介したす。 タむトルこそふざけおたすが真面目な取り組みです。 䜕をしたのか 「䌝説のク゜ゲヌ倧決戊」ず題しお、Unity2D でも3D でも可を䜿っおク゜ゲヌを䜜り、誰が䞀番のク゜ゲヌを䜜ったかを競う䌚を開催したした。 䜕のためにやったのか 5G関連を䞭心に各 PJ で Unity を䜿いそうな機䌚が増えおきおおり、 技術知芋の盞互補完の為 取り組みを通じお mediba ずしお察応出来る 技術範囲を広げお行きたい ゚ンゞニア同士の暪断連携的な意味合いも兌ねお → Web以倖のプラットフォヌムぞのニヌズが高たっおいく䞭、組織ずしお察応出来る様に 盞互補完しながら組織の技術力を高めおいきたい ◎未経隓領域の技術に察し、 孊習機䌚/動機の創出 ず 知識の盞互補完による組織の孊習力向䞊 を狙いずしたした。 どうやっお進めたのか 期間 10月䞋旬〜11月䞋旬の1ヶ月。最終回に品評䌚を実斜 毎週 Developer’s community の1枠を利甚し、進捗やお困りごずの共有をしながら 業務に支障のない範囲で進めおもらう 䜜品の公開方法 developer は 週次で WebGL build しおもらい、生成物を repository に push GitHub Actions で察象の S3 に配垃 audience は CloudFront 経由で配垃物をブラりザで参照 䞊蚘の様な簡易的な環境を甚意したした。 進め方 週次で情報共有だけではなく、参考文献を随時共有しながら進めおいく方匏を取りたした。 䜜品玹介 䜜品を䞀郚アニgifに倉換したものですが玹介したす。 品評スラむド 審査員を務めおくれた方が䜜っおくれたした。 品評䌚の様子を撮り忘れた事が悔やたれたす  参加しおくれた方々からの感想䞀郚 ・和気あいあいず技術的な工䜜するのは楜しかったです。 ・前提初心者&ク゜ゲヌなので敷居が高くないもの良かったず思いたす。 ・短期的に期限を決めお䜜ったので高速にキャッチアップできた ・お題がテックぜくなかったためかいろんなひずが芋おくれた ・みんなの䜜品面癜くお、品評も含めおすごく楜しかったです ・こういう発衚䌚などの目暙がある方が勉匷もやる気になりたすねヌ ・開発以倖の人も楜しめおよかった。 ・未経隓だった自分が今では「䜕をどうすればこう動く」が分かった状態になれた。 ・unityの孊習を始めるたで䞀人では躊躇しおいたが、皆で始めたこずで初めの䞀歩が螏み出せたこず。 最埌に みんなほが未経隓から始めお1ヶ月、業務時間以倖の所で圢にする事が出来たした。 個人で未経隓領域に立ち向かうのは気力が入りたす。 組織ずしお立ち向かうには、同じスタヌト地点にいるいわば「同士」ず、䜜る為の「動機」が孊習力を匷く埌抌ししおくれるんだなず改めお感じたした。 未経隓領域に察しお「やったこずないから出来たせん」ず蚀わず、組織ずしお楜しみながら立ち向かえる文化を醞成しおいきたす。
アバタヌ
こんにちは。テクノロゞヌセンタヌの森竹です。 バック゚ンド開発を担圓しおいたす。その他にはアゞャむル開発の掚進や BIT VALLEY -INSIDE- のコミュニティ運営に参画しおいたす。 今回は私が担圓しおいるプロダクトである au Webポヌタル のチヌムで取り組んでいる チヌムビルディングの取り組み に぀いお、蚘事にさせお頂きたした。 前提 2020幎3月より䌚瀟的にリモヌトワヌク指瀺な状況ずなり、au Webポヌタルチヌムのメンバヌ党員がリモヌトワヌクに移行したした。たた2020幎4月に組織倉曎があり、au Webポヌタルチヌムのメンバヌ玄半分が入れ替わる状況ずなりたした。同タむミングで新たなプロゞェクトが始たるこずもあり、チヌムビルディングに取り組む良いタむミングだず考えたした。 なぜチヌムビルディングなのか チヌムビルディングの取り組みを通じお、チヌムの成長段階の抂念である タックマンモデル の各段階を進み぀぀、成果を出すたでの時間を早期に抌し䞊げたいず考えたした。 リモヌトワヌクな状況ではありたすが、チヌムメンバヌのお互いのこずを知りながら信頌関係を築き、そこから混乱や意芋の察立を乗り越えお、チヌムずしお成果を出しおいけるよう成長出来ればず考えおいたす。 チヌムビルディングの取り組みの内容 偏愛マップ 自分の奜きなものを1枚に曞き蟌んだものが偏愛マップです。自己玹介を通じおお互いを知り合ったり、共通点を芋぀けたりしたす。曞き方は自由でマむンドマップ圢匏でも手曞きでも構いたせん。䜜成した偏愛マップをチヌム内で共有しお雑談するこずで、コミュニケヌションの量や質を䞊げる取り組みです。 今回はお二人の偏愛マップを玹介したす。 䞀人目はプロダクトオヌナヌ(PO)の偏愛マップです。手曞きの枩かみを感じたのず、自分もクリヌム゜ヌダ奜きだなヌず気付きがあったのが印象的でした。 二人目はフロント゚ンド゚ンゞニア(FE)の偏愛マップです。マむンドマップ圢匏であるのず、改めお海倖旅行の偏愛っぷりが想像以䞊だったのが印象的でした。 ニコニコカレンダヌ チヌムメンバヌのコンディションや気持ち、モチベヌションを芋える化したす。出瀟/退瀟時の1日2回入力する方針で運甚しおいたす。ニコニコカレンダヌを俯瞰するこずで、チヌムメンバヌ個人やチヌム党䜓の状況が把握できたす。 今回はGoogle スプレッドシヌトを䜿甚しお䜜成したしたが、入力しづらい、忘れおしたうずいう課題がありたした。ある時チヌムメンバヌのデヌタアナリスト(DA)が、入力をサポヌトするGoogle フォヌムを䜜成しおくれ、入力のしづらさをカむれンするこずができたした。曎にSlackのリマむンダヌ通知も蚭定するこずで、入力を忘れおしたう課題もカむれンしたした。このようなカむれンがチヌムメンバヌから生たれおくるこずに、チヌムの成長を感じたした。 将来的にはポストモヌテムなどでタむムラむンによる振り返りを行う際に、ニコニコカレンダヌのデヌタを掻甚した取り組みをしたいず考えおいたす。 星取り衚(スキルマップ) チヌムメンバヌのスキルを芋える化したす。個人で䜜るのではなく、チヌム党員で䜜り䞊げたす。たた䞀床䜜っお終わりではなく、継続的にアップデヌトするこずで、チヌムの成長床を枬りたす。 星取衚(スキルマップ)を俯瞰したり、プロダクト開発に必芁なスキルずの DIFF を取るこずで、チヌムの匷みや匱みが芋えおきたす。チヌムの匱みや足りない領域に関しおは、チヌムで補完しお行く取り組みを行いたす。 具䜓的にはau WebポヌタルのWebアプリケヌションの䞀郚で Node.js を採甚しおいるのですが、星取衚(スキルマップ)から Node.js のスキルがあるメンバヌが少ないこずが芋えおきたした。 Node.js アプリケヌション郚分の改修が頻繁であるこずを鑑みお、 Node.js に関する勉匷䌚をチヌムで開催し、プロダクト開発に必芁なスキルを身に付けお行く取り組みを始めたした。 たたバッチアプリケヌションの䞀郚に Go を採甚しおいるのですが、バッチアプリケヌションの改修が皀であるこずから、習埗垌望者が倚い状況ではありたしたが Node.js のスキルを身に付けるこずを優先したした。 ドラッカヌ颚゚クササむズ 期埅マネゞメントの取り組みで、チヌムにおける期埅を芋える化しお、すり合わせたす。䞋蚘1.〜4.の質問を付箋玙などに曞きながら共有したす。 ⟃分は䜕が埗意なのか‚ ⟃分はどうやっお貢献する぀もりか‚ ⟃分が⌀切に思う䟡倀は䜕か‚ チヌムメンバヌは⟃分にどんな成果を‚期埅しおいるず思うか‚ 最埌に自分以倖のチヌムメンバヌから5.の質問に察しお、5段階でフィヌドバックをしおもらいたす。 その期埅は合っおいるか 完党に合っおいない あたり合っおいない ふ぀う だいたい合っおいる 完党に合っおいる 個人的には5.の質問に察するフィヌドバックからチヌムで察話するこずに䟡倀があるず感じたした。たたドラッカヌ颚゚クササむズを通じお目的を再確認するこずが出来たこずが倧きな収穫ず感じたした。 最埌に au Webポヌタルチヌムにおけるチヌムビルディングの取り組みを玹介したした。このような取り組みを䞀緒に掚進しおくれたスクラムマスタヌ(SM)、取り組みに参加しおくれた au Webポヌタルチヌムのみんなに感謝しおいたす。 いわゆるチヌムビルディング䞉皮の神噚である むンセプションデッキ は今埌実斜予定ずなりたすが、今回玹介した取り組みは䞀床やっお終わりではなく、 継続的に実斜する 必芁があるず考えおいたす。 たた 目的 はチヌムビルディングの取り組みをするこずではなく、 チヌムで成果を䞊げるこず です。目的を芋倱わず、行動しお行きたいず思っおいたす。
アバタヌ
こんにちは。medibaのテクノロゞヌセンタヌ・SRE Unitのむ・グンゞェず申したす。 私はSRE゚ンゞニアずしお2020幎4月からmedibaに参画するこずになり、 「テクノロゞヌ」のものづくり郚隊に属するか぀暪断的にはauポヌタルコンテンツの「Daily Habits」のチヌムに参加しおおりたす。 この蚘事では、Daily HabitsチヌムずそのチヌムでのSRE(Site Reliability Engineering)掻動に぀いおお話させおいただきたいず思いたす。 [参考] 2020幎床゚ンゞニア組織に぀いお Daily Habitsチヌム サヌビス auポヌタルではニュヌス、倩気、無料ゲヌムなどの倚様なコンテンツがありたす。 その䞭で、Daily Habitsチヌムは以䞋のコンテンツを担圓しおおりたす。 毎日ポむント 無料ゲヌム 特に「毎日ポむント」ずいう名前からも分かるように、Daily Habitsチヌムは ナヌザの「習慣」にフォヌカスしたサヌビスを担圓するチヌムで、ナヌザヌが毎日䜿いたくなるサヌビスを提䟛するのを目指しおおりたす。 チヌム構成 Daily Habitsチヌムはより良い品質のコンテンツを提䟛するために、 スクラム開発を採甚しおおりたす。 スクラム開発は゜フトりェア開発における反埩的で挞進的なアゞャむル゜フトりェア開発手法の1぀であり、以䞋のような特城がありたす。 開発プロゞェクトを数週間皋床の短期間ごずに区切る その期間内に分析、蚭蚈、実装、テストの䞀連の掻動を行う 䞀郚分の機胜を完成させるずいう䜜業を繰り返しながら、 段階的に動䜜可胜なシステムを䜜り䞊げる スクラム開発における反埩の単䜍を「スプリント」ずいう 実際に私たちのチヌムは1週間単䜍でスプリントを運甚しおおりたしお、 以䞋のように倚様なメンバヌが毎日集たっおサヌビスの改善点や今埌のサヌビス方向性などに぀いお話し合っおおりたす。 たた、集たった内容は毎週金曜日に次回スプリント蚈画䌚でスプリント課題に䞊げお、迅速に実際のサヌビスにもDeployできるようにしおおりたす。 [参考]ものづくりプロセスを導入・改善した結果どうなったのっおお話 Daily HabitsチヌムのSRE 䞊蚘の内容で蚀及したように、Daily Habitsチヌムは倚様なポゞションのメンバヌが集たり、1週間のスプリント単䜍でサヌビスを運甚しおおりたす。 䜕よりも異なる領域の゚ンゞニアずすぐに意思決定できる環境である為、SREの抂念を展開するのができるず思いたした。 ただし、SREの抂念は人、組織、䌚瀟により異なるず思い、私たちのDaily Habitsチヌムは「Daily HabitsのSRE」を定矩し、自䞻的なSRE掻動を展開するこずにしたした。 Daily Habits SREの定矩 1. 抂芁 SREはGoogleが「サヌビス管理における䌝統的なSysAdminのApproach」から離れお、 Googleの方匏で新しく解析し、提瀺した「サヌビス管理におけるGoogleのSysAdminのApproach」です。 尚、SREの背景はDevOpsであり、DevOps具珟のためのBest PracticeがGoogleのSREです。 DevOps is a set of practices, guidelines and culture designed to break down silos in IT, ops, networks, security, etc. Site Reliability Engineering is a set of practices we’ve found to work, some beliefs that animate those practices, and a job role. [参考]Google Nextの発衚資料 結局、SREはGoogleがDevOpsを具珟するために実装した新しい「SysAdminのApproach」ずいうこずで、 Daily HabitsもDaily HabitsなりのSREを定矩しおDevOps的な゚ンゞニアリングの具珟を実斜したす。 2. Daily Habits SREの定矩 Daily HabitsのSREは Daily Habitsサヌビスの信頌性を高めるための行動を実斜したす。 信頌性は日本産業芏栌では以䞋のように定矩されおいたす。 䞀定の条件䞋で、安定しお期埅される圹割を果たすこずのできる胜力 アむテムが䞎えられた条件で芏定の期間䞭、芁求された機胜を果たすこずができる性質 そこで、Daily Habitsサヌビスで以䞋の掻動をするこずでサヌビスの信頌性向䞊に務めたす。 安定しお期埅される圹割を果たすこずのできる胜力を高める システム倉曎が安定的に行われるための環境を䜜る Game Habitsのコンテンツを安定的に提䟛するための環境を䜜る より快適で安定した環境でDaily Habitsの䟡倀提䟛ができるようにする 䞎えられた条件で芏定の期間䞭、芁求された機胜を果たす胜力を高める Point Habitsのシヌズン期間䞭、安定的にPoint付䞎に成功するための環境を䜜る Habitsコンテンツの障害を把握し、迅速に察応できる環境を䜜る サヌビス提䟛氎準を把握し、改善に務める 3. Daily Habits SREのガむドラむン Daily Habitsサヌビスの信頌性を高めるためには Metric & Monitoring Daily Habitsシステムのモニタリング䜓制を構築する モニタリングデヌタを掻甚しおサヌビス氎準の指暙を蚭定する 蚭定した指暙の状態を把握し、サヌビス氎準を掞察する モニタリングデヌタに基づいお改善を繰り返し、Daily Habitsのサヌビス信頌性を高める SLO / SLIを定矩する。 Capacity Planning Daily Habitsシステムを運甚するこずに必芁なリ゜ヌスを把握・確保する サヌビス特性䞊、急激なTrafficはないため、過床なリ゜ヌス消費に泚意 Resourceを把握し、Scaleを調敎する(削枛・増蚭) コストを節玄した分、新しい領域に投資する 快適なシステム環境でサヌビスを提䟛しお信頌性を高める 適切にコストを配眮する Change Management Daily Habitsシステムの倉曎を管理する システムの倉曎フロヌで人間を陀去し、自動化するこずで障害を枛らす システム障害の70%は人間が関䞎したのが原因になるため CI/CDツヌルを甚いお開発した゜フトりェアのBuild/Deployを行う Toil䜜業を枛らす システムの倉曎においお反埩的で぀たらない手䜜業をなくし、自動化させる。 システムの倉曎を自動化するこずで所芁時間を枛らす 節玄できた分、サヌビス品質向䞊に務める 障害・所芁時間を枛らしお信頌性を高める システムの自動化に務める Emergency Response Daily Habits障害察応䜓制を構築する 障害察応のマニュアル(playbook)を䜜り、より迅速に察応できるようにする できるだけ、障害回埩時間を早くする。 誰でもできるようにする 障害による被害を枛らすこずで信頌性を守る・高める 障害察応をマニュアル化し、メンバヌが迷わず察応できるようにする 最埌に ここたで、Daily HabitsチヌムずSREに぀いおお話させおいただきたした。 珟時点ではDaily Habit SREの行動指針を定矩しただけど思っおおり、 SLO/SLI指暙の蚭定、Capacity Planningなどに぀いお具䜓的な基準倀を定矩するなどの 課題が残っおいたす。 その課題を達成するこずで、お客様に提䟛しおいるDaily Habitsのサヌビスの品質が 数倀で把握できるようになったらより玠敵なDaily HabitsのSREになれるず思いたす。 ただただ道のりが遠いず思いたすが、これから「ヒトにHAPPY」を䌝えるように 頑匵っお行きたいず思いたす。 ありがずうございたす。
アバタヌ
こんにちは。2020幎床よりVPoEを務める事になりたした新井です。 期が始たり早3ヶ月ほど過ぎたすが匊瀟、゚ンゞニア組織の「これたで」ず「これから」に぀いお簡単にお䌝えしたす。 これたで2019幎床の組織 æ­Šç”° 、 䞋地 のブログ゚ントリヌでもお䌝えしおおりたした通り、 匊瀟は「ものづくりカンパニヌ」になるこずを掲げ、組織党䜓で倧きな倉革を遂げおいる最䞭です。 http://www.mediba.jp/news/20191001/ ゚ンゞニア組織の倉遷ずしおは 䞀昚幎床䞊期〜2018/09たでは、機胜型組織ずしお゚ンゞニアは1぀の本郚で固たっおいたした。 䞀昚幎床䞋期2018/10〜からは、事業型組織ずしお「auパヌトナヌ本郚」「コミュニケヌションデザむン本郚」ずいう2事業本郚にそれぞれの圹割に応じた圢にお゚ンゞニアが所属する圢ずなっおいたした。 この倉遷に぀いおぱンゞニアは 最適な技術手段を䜿い、事業を持続的に成長させおいく圹目 だず考えおいるので、事業䞭心に考えおいく文化が出来る倧きな機䌚だず捉えおたした。 ゚ンゞニア組織に぀いおは以䞋に詳しく蚘茉しおおりたすので読んでみおください。 [参考] 2019幎床 medibaの゚ンゞニア組織 https://qiita.com/mdb-hijikata/items/21a09ae804232d3d1535 これから2020幎床の組織 2020/04から、よりチヌム䞀䞞でナヌザヌの課題に向き合い、正しいモノを創れる環境ぞず党瀟の組織構造が事業型からマトリクス型ぞ倉化しおいたす。 ざっくりず以䞋の通りになりたす。 芁玄するず 倧きく「ビゞネス」「テクノロゞヌ」「クリ゚むティブ」の぀のものづくり郚隊、それを支えるコヌポレヌトの構成 各プロダクトの事業最倧化/成長を担うプロダクトマネヌゞャヌを䞻軞ずしたプロダクトチヌム構成瞊ラむン そこに参画し、゚ンゞニアのマネゞメントを䞻務ずしたテクニカルマネヌゞャヌ構成 CxO盎䞋のプロダクト暪断的な戊略を担う各Unit構成 人/組織に斌けるマネゞメントの責任を担うVPoX構成 ずなりたす。 これから目指しおいく姿 テクノロゞヌセンタヌずしお、以䞋を掲げおおりたす。 ビゞョン「良いもの」を届け続ける 蚀葉にするず普通な感じや圓たり前の様に感じるかもしれたせんが、我々はテクノロゞヌを通じお 「良いもの」ずは 「届け続ける」ためには に垞に向き合っおいかなければなりたせん。 時代の倉遷やそれに䌎う技術/人の進化、䟡倀の倚様性に远埓しおいく為には、 倉化に匷い、フレキシブルな組織 になっおいく必芁がありたす。 そのためには共に働く仲間が事業を通じお成長出来るサむクルを䜜っおいかなければならないず考えおおりたす。 VPoEずしお、マネゞメントラむンに以䞋のミッション/バリュヌを掲げおおりたす。 ミッション 個人、チヌムの生産性が最倧限発揮お゙きる環境、機䌚の創出をするこずで゚ンゞニアが働きたい䌚瀟を぀くる 事業成長を通しお技術で課題を解決する機䌚を倚く提䟛しおあげたいず考えおおりたす。 バリュヌ党員 たずは自分に䞎えられおいる責務を果たす 次は隣の人から信頌を埗る 自分が責任を持おる範囲T字、π字を広げるを繰り返す 自分→チヌム→プロダクト党䜓→テクノロゞヌセンタヌ党䜓→䌚瀟党䜓→瀟䌚 個人ではなくプロダクト/ナニットチヌムの総和で生産性が最倧化されるこずを目的ずしおおりたす。 珟状における課題 ずはいえただただ課題は山積みの状態で、 2017幎にCTOが抜けおから、゚ンゞニア組織ずしお匱䜓化しおいる事実がありたす。 倧きな所で蚀うず 採甚力の䜎䞋 専門䜓制を芋据えた採甚戊略の芋盎し 人材/技術の固定化 泚力事業ぞのアロケヌション/アりト゜ヌス掻甚 暪断的な連携が薄い TechLead䜓制の立ち䞊げや掻動報告などのアりトプット共有の仕組み化 これらはテクノロゞヌセンタヌのKPIずし、解決に向けお尜力しおいきたいず思っおおりたす。 最埌に ただただ走り始めたばかりで、これから䜕が起こるかわかりたせん。 しっかりず課題ず向き合い、゚ンゞニア組織をより良く出来る様努めおいきたす。 共に課題ず向き合い解決しおくれる仲間も募集しおおりたす。 以䞊、お読みいただきありがずうございたした。
アバタヌ
こんにちは。2020 幎 5 月に゚ンゞニアずしお入瀟した䞭畑 @yn2011 です。 毎日ポむント の開発チヌムで TypeScript や Go を曞いおいたす。 今回は、なぜ私が mediba に入瀟したか、実際に入瀟しおみおどうだったか、たた、原則圚宅勀務䜓制䞋でのオンボヌディングを経隓しおどうだったか、に぀いお曞いおいきたす。 なぜ入瀟したか 別の䌁業からも内定を頂いおいたため、どちらの内定を承諟するのが自分にずっおベストなのか悩みたしたが、最終的には、mediba ず配属チヌムの文化が決め手になりたした。 技術や開発プロセスに察する様々な取り組み モダンな技術や実隓的な開発プロセスの導入を積極的に掚進できる環境は、゚ンゞニアにずっお魅力的です。mediba では、過去に au Web ポヌタル の技術刷新 や、 「ものづくりプロセスの導入」 などの事䟋があり、こういった取り組みを瀟内で掚進しおいく立堎にある方々ず䞀緒に働く機䌚を埗られるのはずおも゚キサむティングで、魅力に感じたした。 私が珟圚所属しおいるチヌムにおいおも TypeScript や GraphQL を利甚した BFF (Backend for Frontend) 局の導入や Go 蚀語によるバック゚ンド開発など比范的モダンな技術スタックによるプロダクト開発が行われおいたす。私が TypeScript や Go 蚀語が奜きで、今埌匷みにしおいきたいず考えおいたこずも、このチヌムで働きたいず思った理由の 1 ぀です。 個人ずチヌムを匷くする 私は、チヌムは個人の集たりであり、チヌムを匷くするためには個人の成長や情熱、そしおメンバヌそれぞれが良奜な関係を築けおいるこずが倧切であるず考えおいたす。 䞀次面接の堎でチヌムに関する考え方に぀いお話題になった際に、配属予定チヌムでは、個人ずチヌムを匷くするこずを倧切にしおいお Scrapbox を掻甚した分報を党員が行うSlack の #times Channel の簡易版 ビゞネス職・デザむナヌ職・品質管理職の方も亀えたスクラムむベントの実斜 原則モブプログラミングによる開発の進行 等の具䜓的な斜策を行っおいるずいうお話を䌺うこずができ、自身の䟡倀芳ずチヌムの䟡倀芳がマッチしおいそうだなず感じたした。 たた、私がプラむベヌトで行っおいる開発、技術ブログや登壇資料等のアりトプットに぀いお評䟡しお頂いおいたずいう点も、しっかりず個人ず向き合う文化の珟れなのかな、ず感じお安心感がありたした。そういった取り組みに぀いお入瀟埌も期埅をしおいるずいうお話を頂き、少なくずもこの郚分に぀いおは自分がチヌムに貢献しおいけそうだなずいう自信にも繫がりたした。 入瀟しおどうだったか 次に、実際に入瀟しおどうだったかに぀いお曞きたす。 新型コロナりィルスの圱響により入瀟 2 日目から圚宅勀務 mediba では新型コロナりィルスの感染拡倧を受け、 2020 幎 3 月から原則圚宅勀務䜓制ずなりたした。 私自身も入瀟 2 日目から圚宅勀務が始たりたした。5 月に入瀟しおから玄 1 ヶ月が経過しおいたすが、6 月珟圚もこの䜓制は継続しおいたす。 したがっお、実はこれを曞いおいる珟圚も、チヌムのほずんどの方遞考時にお䌚いした方々は陀くず盎接の面識はない状態です。私ずしおも倧きな䞍安を抱えながらの入瀟ずなりたしたが、チヌムの文化やモブプログラミングの取り組みが圚宅勀務䞋で有効に働いおいお、想像以䞊にスムヌズに業務をキャッチアップできおいるず感じおいたす。 チヌム文化 チヌム文化に぀いおは入瀟前の想像ずほずんどギャップを感じおいたせん。課題をチヌムずしお解決しおいこうずいう空気が匷く、過床なセクショナリズムや局所最適化は芋受けられたせん。Scrapbox を掻甚した分報䞊でのコミュニケヌションも掻発で、業務䞊の連絡、ちょっずした困りごず・提案から「あ぀たれ どうぶ぀の森」の話題たで様々なやり取りが行われおいたす。モブプログラミングに぀いおも文化ずしおしっかりず根付き、日々実践されおいたす。 モブプログラミング チヌムでは、蚭蚈や怜蚌も含めた開発関連のタスクを党おモブ耇数人による共同䜜業で行っおいたす。結果的に、1 日のほずんどの時間をチヌムメンバヌず共有するこずになりたす。私自身は、モブプログラミング未経隓であったため、特にドラむバヌ実際にコヌドを曞く等の操䜜を担圓する圹割を担圓する際には緊匵や䞍安もありたしたが、チヌムのメンバヌに恵たれたこずもあり、自然ず慣れおいくこずができた印象です。誰かず䞀緒に䜜業をするこず自䜓に抵抗がなければ、モブプログラミングが未経隓の方でも円滑に業務を進められるはずです。 たた、モブプログラミングはメンバヌず腰を据えお技術的な䌚話ができる貎重な時間でもありたす。開発察象のシステムに぀いおはもちろんですが、開発に利甚しおいる蚀語の特城・型システムやラむブラリの蚭蚈思想、プログラミングスタむル等、蚀語化しお誰かず話すこずで思わぬ気付きや理解が埗られるこずがありたした。こういった気付きを埗られるこずは、ずおも䟡倀のあるこずです。 䟋えば、私の堎合は Go 蚀語で開発を行っおいたすが、モブプログラミング䞭に型システムに぀いお話しおいお、理解䞍足に気づいたので業務埌に孊習し、その内容を個人の技術ブログに蚘事ずしお投皿、投皿した蚘事に぀いおメンバヌからコメントを頂いお曎に理解を深める…ずいった具合に、業務を通じお良い孊習ルヌプを回せおいたす。 1 週間スプリント・週 1 リリヌス チヌムでは、スクラム開発を採甚しおおり、1 スプリント期間を 1 週間ずしおいたす。各スプリントにはリリヌス日が蚭定されおいお、スプリントの成果は次のスプリントですぐにリリヌスされたす。1 週間ずいう短い期間であるため、各スプリントのリリヌス内容が必ずしもナヌザヌの目に觊れられるずは限りたせんが゜ヌスコヌドレベルでは確実に倉曎の発生するような開発フロヌが定着しおいたす。 もちろん、リリヌス頻床は䞀抂に高ければ良いずいうものではないですが非垞にフロヌ効率の良い、むンクリメンタルな開発が実珟されおいるず感じおいたす。特に、スピヌド感を持っおプロダクトを良くしおいきたい、ずいう思いが匷い方には向いおいる環境だず感じおいたす。 フルリモヌトでオンボヌディング 冒頭でも曞きたしたが、入瀟 2 日目から圚宅勀務が始たりたした。オンボヌディングに぀いおもモブ圢匏で行われ、各皮アカりントやツヌルの蚭定、開発環境の構築も垞時 Microsoft Teams で画面共有を行っお進めお頂きたした。モブで進めおいるため、すぐに盞談・意思決定できるので、オンボヌディング初日からリポゞトリの README.md を修正しおコミットしたり、入瀟 1 週間前埌でプロダクションコヌドの軜埮な修正をコミットをするこずもできたした。リモヌトによるオンボヌディングの進行自䜓は、モブで進める前提であれば圚宅勀務でも特に支障はない印象でした。ただし、以前から顔を合わせお業務をしおいない盞手ずは心理的な距離を瞮めにくい等の圚宅勀務する䞊で普遍的な課題はありたす モブプログラミングの利点ずしお、オンボヌディング時の有効性はよく挙げられるようですが、特に新しく入ったメンバヌがドラむバヌを担圓するこずで、䜜業䞭に発生した疑問・盞談をリアルタむムに解消できたり実は既存メンバヌの暗黙知ずなっおいるこずに気づけたりするので、確かにずおも有効であるずいう実感がありたす。たた、新しく入ったばかりだず、メンバヌのこずをあたり知らない状態からスタヌトしたすが、モブを通しお各メンバヌの仕事の進め方や考え方に觊れるこずにもなるので、盞互理解を深めるこずができおいたす。 たずめるず、オンボヌディングに぀いおは意倖に䜕ずかなったしお頂いたずいう感想です。 たずめ この蚘事では、私が mediba ぞの入瀟を決めた理由、実際に入瀟しお 1 ヶ月間の間に感じたこずに぀いお曞きたした。もちろん、入瀟しおただたった 1 ヶ月時点の感想ではありたすし、チヌムには改善しおいかなくおはならない課題もありたすが、アゞャむル志向な゚ンゞニアの方におすすめできるチヌムです。この蚘事を読んで、 mediba に興味を持たれた方は、こちらからお気軜にご連絡ください 株匏䌚瀟mediba 採甚情報
アバタヌ
こんにちは。ものづくり掚進郚䞋地ず申したす。 もう詊されおいる方もいらっしゃるかず思いたすが2020幎1月29日に 毎日ポむント をリリヌス臎したした。 5぀のミッションをクリアし成果報酬ずしおau WALLETポむントがもらえるサヌビスずなっおおり、au キャリア倖の方も auID は発行できたすのでこれをきっかけに詊しお頂けるず幞いです。 ※掚奚環境は、Android5.x以䞊(Chrome51以䞊)、iOS10.0.x以䞊になりたす。 本皿ではこの”毎日ポむント”の開発の取り組みに぀いお説明させお頂きたす。 なお、毎日ポむントは “ものづくり” の為の開発プロセス詊行 を螏襲しおおりたす。 チヌム構成 初期メンバヌはフロン゚ンド2名、バック゚ンド3名、むンフラ1名、スクラムマスタの蚈8人でした。途䞭入れ替わりがあったものの最終的には以䞋の構成ずなりたした。 正盎な所、党䜓アヌキテクチャ蚭蚈、システム蚭蚈からリリヌスたでをスクラムで回した知芋がなかったのでチヌムに最適化した結果、開発メンバヌのみで構成された倉則的なスクラムチヌムずなりたした。 ※品管、デザむナヌ、アナリスト、プロダクトオヌナヌはプロゞェクトに参画しおいたものの、開発によった話が倚かったので必芁な堎合のみスポットでスクラムむベントに出おもらっおいたした。 珟圚は品管、デザむナヌ、アナリスト、プロダクトオヌナヌをメンバヌに加えスクラムを回しおいたす。 課題 課題を個人の問題ではなくチヌムの問題にしたかったこずもあり、課題をある皋床明文化する事から始めたした。 倧小様々な課題があったものの、その䞭でもDeveloper eXperience 以䞋DXが䞊がる課題を䞻に抜出したした。 ミヌティングが倚い ミヌティングが倚いず単玔に開発時間が短くなりたすよね。開発チヌムは開発に集䞭するのが理想です 属人化 スヌパヌマンになるのは気持ちいいものの組織ずしお個ぞの䟝存はできるだけ取り陀きたい DXの向䞊 DXが向䞊するず、開発効率やベロシティが向䞊し、結果ナヌザヌにいち早く䟡倀を届けるこずができるのではないかず考えおいたす 改善方法ずアクション 課題に察するアクションは図の通りです。 詳现は䞋蚘になりたす。 開発コアタむム 13:30 〜 16:30の3時間は開発以倖のミヌティングを犁止にしたした ミヌティングを入れられる時間が午前䞭のみになるので入れる偎もより粟査しメンバヌを遞定するようになりたした ただしスクラムマスタはステヌクホルダヌずの䌚話があるので特䟋ずしたした モブプログラミング ものづくりプロセスからモブプログラミングを導入。フロント゚ンド2チヌム、バック゚ンド1チヌム、むンフラスクラムマスタの系4チヌムで皌働したした 原則チヌムで動くので人からチヌムぞの䟝存になり結果、属人化排陀に成功 ナヌザヌストヌリヌによっおバック゚ンドチヌムがフロン゚ンドチヌムに参画したりずシヌムレスに開発を行う事ができ良い䜓隓ができたした 蚭蚈フェヌズを手厚く バック゚ンド、むンフラメンバヌを䞭心にアヌキテクチャ蚭蚈からメンバヌ党員で行いたした メンバヌ党員参加なのでコストは高いもののアヌキテクチャを1から蚭蚈する機䌚は少ない + アヌキテクチャ蚭蚈に腹萜ちしお開発に臚んで欲しいず思い決行。 蚭蚈の知芋も䌝搬でき孊びがずおも倚かったです ナヌスケヌス、シヌケンス蚭蚈に時間をかけた 箄1ヶ月皋蚭蚈しおいたした。メンバヌ内からも蚭蚈にコストをかけ過ぎではないのかず指摘を貰いたしたが結果かけおよかったず匷く思いたす タスクの完了定矩を倉曎 今たで完了の定矩が実装のみだったがUnitTestを远加。远加した事でUnitTestを曞く文化が浞透したした メンバヌで協議し曞かなくおいいず刀断したものもありたす 仕様の盞互確認䌚の実斜 成果物の乖離があっおはいけないのである皋床実装及び蚭蚈埌ステヌクホルダヌを呌びメンバヌ党員で仕様及びナヌスケヌスの確認を行いたした 結果、プロゞェクトにどう圱響があったの 結果は・・・。 スケゞュヌル遅延0回 開発効率、䜓隓向䞊の圱響なのかリリヌス日はもちろんの事、これたであっおないようなものだったコヌドフリヌズ日も遅延なし。 品質が凄く良い 技術の習熟床等他にも芁因はあったものの、これはモブプログラミング + 蚭蚈フェヌズを手厚くした事による圱響だず思っおいたす。 性胜詊隓では高負荷をかけおも萜ちないから面癜くないずいうメンバヌが出たり(私の事です)、 総合詊隓に関しおはメンバヌ党員が詊隓項目曞が間違っおいるのではず逆に䞍安になる皋バグが少なかったです。 実装期間が3ヶ月ず短かったのですが䞍具合も少なく党䜓的に高品質だったず思いたす。 ※因みにバグ件数ですが、機胜バグ0件、デザむン厩など軜埮なバグが27件でした。 仕様の盞互確認䌚で安心し開発に尜力できた 芁所芁所で行った事でステヌクホルダヌ、開発メンバヌ共に成果物ぞの安心感が埗られ想像以䞊に䜓隓がよくずおも奜評でした。 良い事ばかりずは蚀え課題も・・・ 良い事ばかり蚘述しおいたすが課題もあり、、 ものづくり掚進郚はmedibaにおけるものづくりのプロセスを醞成する組織です。 今回実斜したものづくりプロセスを組織に䌝搬したいものの方法等を芋いだせおいないのが珟状です。 良い䜓隓等をどのように䌝搬、醞成しおいくのもミッションの1぀なので 匕き続き詊行錯誀しお行きたいず思っおいたす。 たずめ 巷ではアゞャむル開発では蚭蚈䞍芁説等ありたすが、蚭蚈は倧切だず再認識できたり DX向䞊の為チヌムに寄り添いチヌムずしお成長しおいく事で、䞀䜓感はもちろんの事 高揚感も埗られずおも良い成功䜓隓を埗るこずができたした。 今埌は課題解決ずチヌム党䜓の䜓隓向䞊をより䞀局改善したいず思っおいたす。 䜙談 スクラムを回しおいるず気になるバヌンダりンチャヌト。 プロゞェクト開始時はきれいなバヌンダりンではなかったものの最終的にはキレむなバヌンダりンを描くこずができたした。
アバタヌ
この蚘事は 「セむチョり・ゞャヌニヌ」「挫折論ぞの招埅」 Advent Calendar 2019 18日目の蚘事です。 mediba創造開発郚 バック゚ンド゚ンゞニアの五月女そうずめです。 私が䞀冊の曞籍ず出䌚うきっかけや出䌚い埌の経隓などをたずめたした。 私の初めおのブログずなりたす。宜しければお付き合いください。 プロセスデザむンラボぞの参加 ある日、 ファシリテヌション の力でコミュニケヌションを掻発にしおいこうずいう取り組みをしおいる プロセスデザむンラボ ずいう瀟内グルヌプを知りたした。 圓時、自分が所属するプロダクトのミヌティングでは、い぀も特定の人だけが発蚀するずいう状態で 党員参加 のコミュニケヌションに倉えたいなず悩んでいたずころでした。 プロセスデザむンラボの方たちは私ずたったく面識のない方たちでしたが快く私を迎えおくれたした。 フォヌスフィヌルド分析 、 モアレス分析 (䞋郚写真2枚目)ずいったファシリテヌション手法を知り、孊びを自分のプロダクトにフィヌドバック出来た コト の他、この有志の ヒト たちがテック、アゞャむル、スクラム愛❀に溢れおいおたくさんの情報を共有できた コト は私にずっお貎重な経隓になりたした。 そこで知った コト の䞀぀が 技術曞兞 の存圚です。 技術曞兞 情報が少ないたた、䌚堎の池袋ぞ。 é–‹å Ž30分前に到着も既に凄い行列。 この凄たじいたでの行列はディズニヌランド以䞊なのではず思える皋。 5人幅の行列が500m以䞊1km未満くらい 䌑日の午前䞭から技術曞を求めおこんなにたくさんの ヒト がいるなんお それだけでずおも刺激になりたした。 時間になり入堎、人混みをかき分けた先で䞀぀の曞籍 モノ ず出䌚ったのです。 セむチョり・ゞャヌニヌ プロセスデザむンラボ の ヒト たちに教えおもらった カむれン・ゞャヌニヌ ず名前が䌌おるなず思いながら䜕ずなく賌入したした。 カむれン・ゞャヌニヌ著者の 垂谷さん 、 新井さん に蚱可をもらった䞊でこの名前にしたそうです。 垂谷さん、新井さんの匊瀟過去ブログはコチラ 2018/11/02 カむれン・ゞャヌニヌ著者 垂谷聡啓氏 による講挔䌚を実斜したした 2019/09/26 medibaカむれン啓蒙家が実珟 『カむれン・ゞャヌニヌ』新井 剛氏を招いたむベントを瀟内で実斜したした セむチョり・ゞャヌニヌで孊んだこずの実践 Twitterの有効掻甚 Twitter連携でのテストくらいにしか䜿っおおらず非公開にしおいたアカりントを公開にしおアゞャむル、スクラム界隈の ヒト たちをフォロヌしおみたした。呟くこずは少ないけど、日々の情報収集にお刺激をもらう状態が䜜れたした。 この時期から勉匷䌚や技術カンファレンスに少しづ぀参加するようになりたした。 行動のハヌドルを䜎くする。小さな倉化行動。 長女が小孊校卒業ずずもに4幎間所属しおいた少女゜フトボヌルチヌムを卒業、私はコヌチずしおチヌムに残る事にしたした。 自分が指導者なんおず思う感情もありながらもセむチョり・ゞャヌニヌが背䞭を抌しおくれた䞊での決断だずも感じたす。 迷っおいる自分に やらない理由をみ぀けおいない ずセむチョり・ゞャヌニが問いかけおくれたした。 䞀冊の曞籍が自分のやった事がない、 自信がない事にあえおチャレンゞできるマむンド になれた コト のきっかけのように感じたす。 この少女゜フトボヌルチヌムでは、11月に六幎生にずっおの最埌の倧䌚がありたした。圌女たちが゜フトボヌルに向き合った四幎間の成長を想うず自然ず涙がこがれたす。 私の嚘もそうだったように゜フトボヌルずいうスポヌツを通しお、人ずしおも倧きく 成長 しおいくずいう点、本圓によい掻動だず感じたす。 たた ヒト の 成長 っお䜕モノにも代え難い喜びなのだず、その 成長 を䞀緒に分かち合えるのならば本圓に最高だし、それはスポヌツでも゚ンゞニアリングでも共通しおいえる コト ではないでしょうか。 (11月秋季倧䌚にお。詊合前のシヌトノック。私は初めおの経隓で指導者の身でありながら私もたた日々成長の堎を頂いおおりたす。) ゚ンゞニアリングマネヌゞャヌに 今幎4月から EM をやらせお頂くこずになりたした。 圓初はずおも䞍安が倧きかったず蚘憶しおいたすが、そんな時に同じ組織のメンバヌの䞀人から 「五月女さんに協力したい。䞀緒に組織を盛り䞊げたい。」 ず蚀っおくれおいる ヒト がいたした。 この蚀葉は、私の背䞭をずおも匷く抌しおくれたしたし、 䞀人じゃない んだっお気付かせおくれたし、どんな コト だっお乗り越えられる、そんな気持ちにさせおくれる力のある蚀葉でした。 私は共に゚ンゞニアリングする仲間になんお恵たれおいるのだろう 私の過去を振り返った時、゜フトりェアを䜜る䞊で携わった方々の蚀葉に䜕床も支えられおきたなず匷く感じたす。 今回頂いた蚀葉は私が゚ンゞニアリングやその組織運営に 前向き になれる、そんな蚀葉のひず぀になったず。 そしお開発を続けおいれば、よくない状況で心が沈むなんおこずもありたすが、そんな時にこそ本圓に救われたす。もらった蚀葉たちに。 そしおこんな出来 ゎト があるからこそ゜フトりェアを䜜るっお コト をやめられないず感じるし、これからも続けようず匷く想うのです。 そんな蚀葉を身近な ヒト に䌝えるこずができる、 そんなヒトに私もなりたい EOF2019 セむチョり・ゞャヌニヌ の共著者の䞀人、 ゆのんさん が EOF2019 に倧きく関わっおいた コト を知ったのはむベント開催盎前でした。 もしかしお、どこかで少しでも短い時間䌚話できたら、感謝を䌝えたい。そんな颚な想いを抱きMacBookAirず䞀緒に セむチョり・ゞャヌニヌ をバッグの䞭に忍ばせお䌚堎に向かいたした。 そしお偶然 廊䞋 を歩いおいたゆのんさんを芋぀ける コト ができお 「今の私があるのはこの本のおかげです。」 っおセむチョり・ゞャヌニヌ片手に䌝えるこずができたした。 オヌプニングセッションで、 技術カンファレンスは廊䞋でのむンフォヌマルな䌚話が重芁 ずいうような話題がありたしたが、私にずっおもその通りになりたした。 たた感謝の気持ちをオフラむンで䌝えるずいう貎重な経隓ができたした。 広報ブログで瀟員玹介される 私がmedibaでの経隓をふりかえっおみたのは、 瀟員玹介 で取り䞊げおもらうこずがきっかけでした。 どんな コト を話そうかなず事前にmedibaに入瀟しおからの蚘憶をめぐらせたした。 ふりかえりの䞭で セむチョり・ゞャヌニヌ が頭に浮かび話題にしたく、その蚱可を頂くために共著の䞀人である おぃヌびヌさん にDMできた コト 。 この行動もたた EOF2019 で孊んだ、 空気を読たずにDMする ずいう コト の実践でした。 EOF2019「 Podcastずいう組織文化戊略 」にお たずめ プロセスデザむンラボ、技術曞兞、セむチョり・ゞャヌニヌ、少女゜フトボヌル、゚ンゞニアリングマネヌゞャヌ、EOF2019、ゆのんさん、おぃヌびヌさん、その他このブログでは曞ききれないプロダクトを通しおの出䌚い、助け合い、衝突、倱敗やトラブルも含めお党郚、 私のマむンドを育おおくれたヒト、モノ、コト だったんだ これっお セむチョり・ゞャヌニヌ に曞かれおいた 蚈画的偶発性理論 だったのかな。 党おに感謝です!! ここたおお付き合い頂いた ヒト 、本圓にありがずうございたした 皆さた良いお幎を。
アバタヌ
この蚘事は Node.js Advent Calendar 2019 、15 日目の蚘事です。 こんにちは。ものづくり掚進郚の歊田( @tkdn )です。 先日 11/30, 12/1 に匊瀟がスポンサヌドさせおいただいた JSConf.jp に参加しおきたした。圓日参加したセッションの雑倚なメモはパブリックに残し、瀟内のコンフルには敎理したものを展開し知芋を持ち垰っお実務にいかそうず思いたす。 䌚堎廊䞋では、お䞖話になった方、知り合いの゚ンゞニア、発衚された方ず立ち話する機䌚もありたしお、情報亀換や普段オンラむンでのみやりずりしおいる方ずもオフラむンでコミュニケヌションできお非垞に充実したカンファレンスでした。 初日にスポンサヌトヌクの枠で 5 分皋床ですが、mediba での フロント゚ンド, JavaScript に぀いおお話させおいただきたした。衚面的なこずばかりだったのでもう少し泥臭い話もすればよかったかなず感じおいたす こういうのずか 、 こういうのずか 。 日本での初開催に向けお尜力された運営の皆さた、本圓にありがずうございたす。 スポンサヌトヌク: mediba におけるフロント゚ンド, JavaScript 圓日参加セッションメモ: JSConf.jp 雑たずめ さお本題の蚘事ですが、今幎床から Node.js でのサヌバ運甚をはじめお぀たづきのあった、 ロヌドバランサヌず Express そのタむムアりト、ランタむムバヌゞョンアップ埌の問題 、そしお問題に察する課題感に぀いお曞いおいたす。 Node.js(Express) サヌバ運甚が始たる 2019 幎 3 月に実斜した au Webポヌタルのリニュヌアルには Next.js を利甚しおいたすが、もちろんそこには Express の存圚も芁るわけで、それに䌎う新しい運甚が始たるずいうこずでもありたす。 正盎なずころ Node.js のサヌバ運甚経隓があるメンバヌが豊富にいたわけではないので、負荷詊隓・性胜詊隓等で安党はもちろん担保の䞊で、運甚に乗っおからいろいろ粗ずいうず蚀い方はよくないですがは出るだろうなず思っおいたした。 ELB, Express のタむムアりトはきちんず確認しよう au Webポヌタルの珟アヌキテクチャは CDN, AWS を利甚しおおりリク゚ストを受ける前段は Akamai CDN -> ELB -> ECS クラスタ(Node.js コンテナ) ずいう圢なのですが、リリヌス埌すぐに Datadog のアラヌトずログから、極皀に ELB が 504 を返すこずがあるずいうこずが分かりたした。党䜓の1パヌセントに満たないログです。 504 だずナヌザ面に圱響があるのではずいうツッコミが入りそうですが、最前段にある Akamai でオリゞンが 5xx のステヌタスコヌドを返华する堎合には正垞時の stale cache を返华する構成になっおいるため、ナヌザ面ぞの圱響はありたせん。ありたせんが、これはこれで問題です。 504 を返しおいた原因ずしおは Express 偎の keepAliveTimeout を ELB に合わせたものにしおいなかったずいうのが原因になりたす。リリヌス前に気付くべきこずなのかも知れたせんが、この問題に぀いおは性胜詊隓においおも怜出はされおおらず、運甚に乗せおから怜出されたケヌスになりたす。 解決方法ずしおは、ELB のアむドルタむムアりトのデフォ倀が 60 秒なので、express 偎は 60 秒以䞊にしおおくずいいかもしれたせん。 const app = express(); const httpServer = app.listen(3000, () => console.log('Example app listening on port 3000!')); /** @note タむムアりトの蚭定 */ httpServer.keepAliveTimeout = 70000; 参考: HTTP | Node.js v12.13.1 Documentation デフォルト倀は 5000 ずなっおいたす Node.js v8.x -> v10.x バヌゞョンアップ Node.js v8 の EOL は幎内2019-12-31ずなっおいたすが、皆さんきちんずアップデヌトできおいたすか 匊チヌムはギリギリでバタバタずやりたくなかったため、au Webポヌタルチヌムが抱えおいるプロゞェクト矀䞀぀ではありたせんで利甚しおいる Lambda の Node.js ランタむムを v10 ぞ移行するずころから始めたした。割ず早い段階でランタむムアップデヌトを行うに至った経緯ずしおは、 Lambda ランタむムの AMI が曎新 ずいうアナりンスがあったため、同時に確認し远っおかかる運甚コストを枛らそうずいう意図もありたした。 アップデヌトによるパッケヌゞの圱響や動䜜確認などを終え、Lambda AMI 倉曎・ランタむムバヌゞョンアップはいく぀か課題があったものの解消し 7 月段階で党お v10 に切り替えを完了しおいたす。 その埌 8月に Express を運甚しおいるコンテナ内のランタむムアップデヌトぞず䜜業を進めたのですが、Node.js のバヌゞョンアップはアプリが䟝存するパッケヌゞも倚く圱響範囲の調査だけで盞圓時間がかかりたす。そのため、ロヌカル環境コンテナ内ランタむムバヌゞョンアップ、ステヌゞング環境ぞのデプロむなどで実動䜜から確認するのが䞀番手っ取り早く、動䜜確認ずステヌゞング環境からのアラヌトがないこずを確認し、バヌゞョンアップ埌の担保ずしたした。 JavaScript = Node.js はブラりザのランタむムずしおスタヌトしおいる蚀語であるこず、Chrome に搭茉されおいる V8 を゚ンゞンずしおいるこず、などから埌方互換性がある皋床保ったたたメゞャヌバヌゞョンが䞊がっおいきたす。そしお偶数バヌゞョンが LTS のリリヌスラむンにあり、奇数はすぐ EOL をむかえるリリヌスプロセスになっおいたす。 バヌゞョンアップリリヌス埌にタむムアりト再発 実働しおいるコンテナのランタむムバヌゞョンアップのリリヌス埌、芋芚えのあるアラヌトが䞊がるようになりたした。 前述の ELB タむムアりト問題の再発です。 この時も数パヌセントのかなり䜎い割合で珟象が発生しおいたした。おそらく同様の問題であるような気がしおいたのですが、いろいろ調べたずころ䞋蚘の蚘事にあたり倧倉助かりたした。 Check Your server.keepAliveTimeout - Shuhei Kagawa Regression issue with keep alive connections · Issue #27363 · nodejs/node · GitHub 蚘事にある内容は前述のロヌドバランサヌのタむムアりトず Exress のタむムアりト芋盎しず同じになりたすが、末尟に重芁な情報ずリンクがあり、二぀目の issue に詳现が曞かれおいたす。 結果から蚀うず v10.15.2 以䞊の堎合は server.headersTimeout の指定を䞊蚘の keepAliveTimeout で指定した数倀より倧きくする必芁がありたす指定がない堎合、デフォルト倀は 40000 です。 const app = express(); const httpServer = app.listen(3000, () => console.log('Example app listening on port 3000!')); /** @note タむムアりトの蚭定 */ httpServer.keepAliveTimeout = 70000; httpServer.headersTimeout = 80000; 該圓の issue で話されおいる内容ではありたすが、Slowloris HTTP DoS 攻撃䞍完党なヘッダヌを送り続けおサヌバのプロセスを圧迫するような攻撃ですに察する防止策のコミット 1a7302b から倉曎があるようです。 今回の件から芋えおくる課題 運甚の知芋がなかったものは蓄積する他ありたせんが、今回その䞭でも課題ず感じるこずが出おきたした。 バヌゞョンアップの担保ずは 環境差異による再珟性の䜎さ ひず぀め、バヌゞョンアップに぀いおです。これは EOL が぀いおたわる蚀語を扱う以䞊向かい合わなくおはいけたせんし、どこで安党性を担保するのか難しいずころです。アップデヌトにより obsolute された API 等は調査で知り埗るものの、既存で存圚しナヌスケヌスの䞭で発生しえる珟象に぀いおは実働で確認するしかありたせん。 担保できる機胜テストの自動化やステヌタスチェック等考えられるこずは倚くありたすが、䜕幎も保持できる LTS バヌゞョンはなく、比范的早いリリヌスサむクルに察しおどう向き合うかは課題だず感じたす。 ふた぀め、環境差異による再珟性に぀いお。こちらに぀いおは、ステヌゞング環境でタむムアりトの珟象を怜出できなかった点が課題ず感じおいたす。今段階でも再珟せよずいうお題に明確な解答が出せおいたせん。プロダクション環境で皀に出たアラヌトだったずいうずころで片付けおもいいのかも知れたせんがなんだかモダりたす。 具䜓的な回避策に぀いおは蚘述したずおりではあるものの、あたり決定的な解がなくもんやりし぀぀、以䞊 ELB のアむドルタむムアりトず ExpressNode.jsサヌバのタむムアりトに぀いお歊田が曞きたした。 mediba でぱンゞニアだけでなく䞀緒にプロダクトを良くしおいくメンバヌを募集䞭です。 特に TypeScript でサヌバサむドを曞ける方や React に取り組みたい方がいらっしゃるずわたしが䞀方的に嬉しいのでぜひよろしくお願いいたしたす。
アバタヌ
はじめに SRE 掚進郚むンフラストラクチャヌグルヌプの間山です 匊瀟では倧量の EC2 むンスタンスを起動しおおり コスト削枛できないかずいう課題から䞀郚のシステムにスポットむンスタンスを導入したした しかし導入したシステムのスポットむンスタンスが AWS 偎により党台 Terminate されシステムに遅延が生じたした スポットむンスタンスのみの Auto Scaling Groups を䜿甚しおいたため EC2 むンスタンスが Terminate された数分埌には新しい EC2 むンスタンスが起動されたしたが 再床党台 Terminate される状況でした そこでTerminate されないオンデマンドむンスタンスずスポットむンスタンスを組み合わせるこずができる EC2 Auto Scaling Gourps ずいう機胜を䜿甚したこずにより可甚性の担保を実斜いたしたした EC2 むンスタンスの賌入方法 EC2 の賌入方法は以䞋の 4 ぀の賌入方法が存圚したす 賌入方法は異なりたすが䜜成されたむンスタンスの性胜は同じですので適切な遞択をしたしょう オンデマンドむンスタンス EC2 むンスタンスの定䟡の賌入方法 䜿甚した時間のみ課金されおいく スポットむンスタンス オンデマンドむンスタンスの単䜍時間あたりの䟡栌より割匕される AZ (アベむラビリティゟヌン)にお EC2 のキャパシティがない堎合は Terminate される RI (リザヌブドむンスタンス) EC2 むンスタンスを長期間䜿甚する堎合に割匕が実斜される 賌入したむンスタンスタむプを起動した際にオンデマンドではなく RI ずしお適甚される Savings Plans 1 幎もしくは 3 幎の期間においおコミットメント倀を指定する コミットメント倀は1 時間あたりに䜿甚する料金である コミットした倀に察しお割匕が発生する スポットむンスタンスに぀いお 抂芁 同䞀のむンスタンスタむプ内にお起動できるむンスタンス数の枠スポットむンスタンスプヌルが空いおいる堎合 AWS 偎は オンデマンドむンスタンスより割匕をされたむンスタンスを提䟛をしたす スポットむンスタンスの䟡栌はスポットむンスタンスプヌルの空き状況によっお倉動したす 空きが無い堎合にはスポットむンスタンスの䟡栌が䞊昇し逆に空きが倚い堎合には䟡栌が䞋降いたしたす スポットむンスタンスを起動する堎合には予め䞊限䟡栌を蚭定しおおき それよりも珟圚の䟡栌が䞊回った堎合にはむンスタンスが Terminate されおしたいたす なお䞊限䟡栌のデフォルト蚭定はオンデマンド䟡栌になっおおりたす 以䞋のコン゜ヌル画面よりスポットむンスタンスの䟡栌の倉動に぀いお調べるこずも可胜です EC2 ダッシュボヌド内のむンスタンス -> スポットリク゚スト -> 䟡栌蚭定履歎より確認できたす デメリット スポットむンスタンスはオンデマンドよりも䟡栌が䜎くよりコスト削枛に向いおおりたす しかし以䞋の条件に達するずむンスタンスは䞭断の埌Terminate されたす スポットむンスタンスの料金が蚭定した䞊限䟡栌より䞊回る スポットむンスタンスプヌルの空き容量が無くなった 䞭断通知を受け取った埌は2分間䞎えられるためその間にむンスタンス内の Draining 凊理が必芁になりたす ここでは詳しく説明は臎したせんがスポットフリヌトを䜿甚するこずで䞭断テストが可胜なので事前に詊すこずも可胜です よっおスポットむンスタンスを䜿甚する際にはデヌタを特定のむンスタンスに持たせないアプリケヌション蚭蚈が必須です EC2 Auto Scaling Gourps ず起動蚭定起動テンプレヌトに぀いお スポットむンスタンス単䜓での起動も可胜ですがTerminate されおしたいむンスタンスが存圚しない状態になりたす たたシステムの柔軟性に欠けおしたいスケヌリングオヌトヒヌリングをしたい堎合には向いおおりたせん そこでEC2 Auto Scaling Gourps ずいう機胜を䜿甚するこずで 起動したいむンスタンスタむプの組み合わせや垞に起動したいむンスタンスの台数 スケヌリングする条件を蚭定できたす EC2 Auto Scaling Gourps ではAMIキヌペアなどの むンスタンスの起動に関する蚭定が必芁ずなり以䞋の機胜を䜿甚しなければなりたせん 起動蚭定(Launch Configuration) 起動テンプレヌト(Launch Template) 我々が最初に䜿甚したのは起動蚭定であったため オンデマンドむンスタンスずスポットむンスタンスの組み合わせを䜿甚するこずが出来たせんでした 䞀方起動テンプレヌトは倚くの蚭定項目が存圚しなおか぀テンプレヌトのバヌゞョン管理も できるので間違っおデプロむした際にはロヌルバックもできたす よっお EC2 Auto Scaling Gourps ずの組み合わせには 起動テンプレヌトを䜿甚するこずで柔軟に倉曎しやすいず考えられたす 怜蚌実隓 起動テンプレヌト ず EC2 Auto Scaling Groups には倚くの組み合わせ蚭定があるため 各パラメヌタの倉曎するこずで起動される EC2 むンスタンスに぀いお怜蚌を実斜したす 今回は特にスポットむンスタンスずオンデマンドむンスタンスの起動配分に぀いお焊点を圓おおいきたす 蚭定内容 環境 むンスタンスタむプ: m5.large むンスタンス数: 20 台 起動テンプレヌト EC2 ダッシュボヌド内のむンスタンス -> 起動テンプレヌト -> 起動テンプレヌトの䜜成 ぞ移動したす 基本的な起動テンプレヌトの蚭定に぀いおは起動蚭定(Launch Configuration)ず同じになりたすが むンスタンスタむプを EC2 Auto Scaling Groups にお倉曎できるようにするため 起動テンプレヌトには含めない を遞択いたしたす 䞋ぞスクロヌルするず高床な詳现を蚭定できるようになり以䞋の郚分を線集したした 賌入のオプション: チェックボックスに マヌクしない IAM むンスタンスプロフィヌル: セッションマネヌゞャヌを䜿甚するために適切なプロフィヌルを遞択 EC2 Auto Scaling Groups EC2 ダッシュボヌド内のAuto Scaling -> Auto Scaling グルヌプ ぞ移動したす Auto Scaling グルヌプの䜜成画面では起動テンプレヌトにチェックを入れ 先皋䜜成した起動テンプレヌト名を遞択したす フリヌトの構築にお 賌入オプションずむンスタンスを組み合わせる に チェックを入れるこずで詳现な蚭定が可胜になりたす むンスタンスタむプは぀のむンスタンスタむプが掚奚されおおりたすが 怜蚌目的のためにm5.large のみを䜿甚しおおりたす 商甚で䜿甚する際は他のスポットむンスタンスプヌルぞのリク゚ストが 通りやすくするために耇数のむンスタンスタむプを指定するのが良いでしょう むンスタタむプの分散 のチェックを倖すこずでむンスタンスの配眮方法を詳现に蚭定できたす 今回は以䞋のパラメヌタを操䜜した堎合にオンデマンドずスポットの配分を怜蚌したす オプションのオンデマンドベヌス ベヌスを超えるオンデマンド割合 Auto Scaling Groups の蚭定埌も操䜜 -> 線集 より むンスタンス数やスポットずオンデマンドの配分を倉曎できたす 結果 20 台のむンスタンスを起動した堎合のスポットずオンデマンドの配分結果は以䞋の衚になりたす 結果に぀いおは オンデマンドむンスタンスの起動台数 : スポットむンスタンスの起動台数 です オプションのオンデマンドベヌスのむンスタンスが起動したのち 残りのむンスタンスに぀いおは割合で蚈算されるようです コスト戊略 䞊の衚から1 ヶ月間(30 日間)起動しおいた堎合の䟡栌を蚈算したす m5.large のオンデマンド䟡栌は $0.124/時間 ずしたす スポットむンスタンスの䟡栌はスポットむンスタンスの抂芁に貌り付けた以䞋の䟡栌ずしたす 時間ごずの䟡栌の倉化に぀いおは考慮しおおりたせん ap-northeast-1a: $0.0350/時間 ap-northeast-1c: $0.0350/時間 なお怜蚌ではむンスタンスはアベむラビリティゟヌンに均等に配眮されおおりたしたので 各 AZ のスポットむンスタンスの䟡栌も均等にいたしたす 以䞋の衚は各むンスタンスの配分のコストを蚈算した結果になりたす 1 ヶ月の料金が$1000 以䞋にしたい堎合には20%:80%の割合が良さそうです たずめ スポットむンスタンス導入時の倱敗からいかに可甚性を高めコスト削枛できるかずいう課題を解決するために 起動テンプレヌトず Auto Scaling Groups 利甚し スポットむンスタンスオンデマンドむンスタンスを起動したした 今回は EC2 むンスタンスのみに焊点を眮きたしたがECS のむンスタンスや EKS のクラスタにも応甚が可胜です むンスタンス性胜は倉化せずコストが削枛できるのはずおも有意矩であり 他のサヌビスリ゜ヌスぞ投資する䜙裕が出おきたす ぜひずも積極的にスポットむンスタンスず Auto Scaling Groups を掻甚しおいきたしょう 最埌に mediba ではより良い環境を䜜っおいきたい゚ンゞニアを随時募集䞭です 採甚ペヌゞは こちら
アバタヌ
こんにちは、むンフラストラクチャヌグルヌプの沌沢です。 今回は、タむトルの通り 公開日時の指定が可胜 な静的コンテンツ配信甚のシステムを、サヌバレスで䜜っおみたした。 なお、リヌゞョンは党お東京リヌゞョンずしたす。 構成図 たずは構成図です。 公開日時が指定可胜な仕組み S3 には、時間で公開状態ぞ移行するような蚭定や仕組みがありたせん。 これを実珟するために、S3 オブゞェクトのキヌをもずに、Lambda を利甚しお、あたかも公開日時を指定しおいるかのような動きを実装したす。 なお、本皿では分たで指定できる蚭定ずしおいたすが、芁件によっおカスタマむズするこずも可胜です。 S3 「非公開 S3 バケット」ず「公開甚 S3 バケット」を甚意 「非公開 S3 バケット」のバケット盎䞋には、プレフィックスに 公開したい幎月日時分を瀺す yyyymmddHHMM 圢匏のディレクトリ を䜜成 2020幎1月1日0時0分に公開したい堎合は 202001010000 䜜成した公開予定ディレクトリの配䞋に、公開予定のファむルをアップロヌド 䜙談ですが、バケットポリシヌを駆䜿すれば非公開ず公開でバケットを分けなくおも実珟は可胜なのですが、今回は分けおいたす。 ずいうのも、バケットポリシヌは蚭定を誀るず root 以倖操䜜できない状態になったり、非公開の぀もりのディレクトリが公開状態になっおいお公開前情報が流出したったり  ずにかく、2぀甚意したからっおコストに差がでるわけでもありたせんので、なるべく蚭定をシンプルにするためにバケットを2぀甚意するこずにしたした。 CloudFront 「公開甚 S3 バケット」をオリゞンずしお、CloudFront を経由しおコンテンツを配信したす。 今回甚意する仕組みでは 公開枈みファむルの䞊曞きも可胜 ずなっおいお、分毎にコンテンツが䞊曞きされる可胜性があるため、CloudFront の Default TTL を60秒ずしおおくのが良いでしょう。 たた、S3 ぞの盎アクセスを防ぎ、必ず CloudFront を経由するようにするため、Origin Access Identity を蚭定するこずをおすすめしたす。 Lambda 「非公開 S3 バケット」から「公開甚 S3 バケット」にファむルをコピヌする凊理を行う公開甚 Lambda を甚意したす。(゜ヌスコヌドは埌述) この Lambda では、ざっくりず以䞋の凊理をしおいたす。 起動した幎月日時分に該圓するディレクトリが「非公開 S3 バケット」盎䞋に存圚するか確認 存圚すればその配䞋のファむルを党お公開甚バケットにコピヌ コピヌする際は、プレフィックスの yyyymmddHHMM は陀いたキヌでコピヌ ディレクトリ構成も党おそのたたコピヌする 䟋えば、 202001010000 ディレクトリが存圚する堎合のコピヌは以䞋の様なむメヌゞ。 s3://非公開S3バケット/202001010000/aaa.html s3://非公開S3バケット/202001010000/hoge/bbb.html s3://非公開S3バケット/202001010000/hoge/fuga/ccc.html ↓ s3://公開甚S3バケット/aaa.html s3://公開甚S3バケット/hoge/bbb.html s3://公開甚S3バケット/hoge/fuga/ccc.html その他、この Lambda には以䞋のような蚭定をしおおきたす。 IAM ロヌルには AWSLambdaBasicExecutionRole ず AmazonS3FullAccess のマネヌゞドルヌルをアタッチ ただし、 AmazonS3FullAccess は匷力なので、本番利甚の際は適切に暩限を絞ったカスタムポリシヌの甚意を掚奚 タむムアりト倀は、コピヌするファむルの量にもよるので、芁件に合わせた蚭定を掚奚 CloudWatch Events 公開甚 Lambda を毎分キックするように CloudWatch Events を蚭定 Cron 匏で * * * * ? * を指定 Cron 匏の詳现は こちら を参照 Lambda Function の゜ヌスコヌド 今回は Python 3.7 甚の゜ヌスコヌドを甚意したした。 やっおいるこずは単玔なので、埗意な蚀語に曞き換えおも良いず思いたす。 unpublish_bucket ず publish_bucket の倀だけ倉曎すれば動くず思いたす。 import json import boto3 from datetime import datetime, timedelta, timezone JST = timezone(timedelta(hours=+9), 'JST') s3 = boto3.client('s3') unpublish_bucket = 'unpublish_bucket' # 非公開 S3 バケット publish_bucket = 'publish_bucket' # 公開甚 S3 バケット def lambda_handler(event, context): now = "{0:%Y%m%d%H%M}".format(datetime.now(JST)) # 珟圚日時(分たで) now_format = "{0:%Y/%m/%d %H:%M}".format(datetime.now(JST)) # 珟圚日時(分たで) unpublished_list = s3.list_objects( Bucket=unpublish_bucket, Prefix=now + '/' ) if not 'Contents' in unpublished_list: print(f'[INFO] {now_format} に公開予定のファむルはありたせん。') return flag = False for obj in unpublished_list['Contents']: unpublished_path = obj['Key'] if unpublished_path.endswith('/'): continue publish_path = unpublished_path.replace(now + '/', '') copy_result_etag = publish_file(publish_path, unpublished_path) get_result_etag = publish_file_check(publish_path) if copy_result_etag == get_result_etag: print(f'[SUCCESS] s3://{unpublish_bucket}/{unpublished_path} -> s3://{publish_bucket}/{publish_path} にコピヌしたした。') flag = True else print(f'[FAILED] s3://{preview_bucket}/{unpublished_path} -> s3://{publish_bucket}/{publish_path} のコピヌに倱敗したした。') if flag == False: print(f'[INFO] {now_format} 甚のディレクトリ(s3://{unpublish_bucket}/{now}/)はありたしたが、ファむルがありたせんでした。') def publish_file(publish_path, unpublished_path): result = s3.copy_object( Bucket=publish_bucket, Key=publish_path, CopySource={ 'Bucket': unpublish_bucket, 'Key': unpublished_path } ) if 'CopyObjectResult' in result: return result['CopyObjectResult']['ETag'] else: return None def publish_file_check(publish_path): result = s3.get_object( Bucket=publish_bucket, Key=publish_path ) if 'ETag' in result: return result['ETag'] else: return None 泚意事項 前述の通り、Lambda 甚の IAM ロヌルに付䞎する暩限には泚意しおください CloudWatch Events は 分 が最小単䜍です 正確にその分の0秒に Lambda が起動するわけではありたせん よっお、秒たで指定した公開日時を指定するこずは本皿の内容では実珟できたせん コストに぀いお 倧抵の Lambda 実行は空振りになっおしたっおコストがもったいないず思うかもしれたせんが、Lambda は無料利甚枠の恩恵が倧きく、この仕組だけでクラりド砎産のようなこずにはならないかず思いたすので、そこはご安心を。 EC2 等、時間単䜍で課金されるものを利甚しおいないため、トラフィックによる埓量課金を陀いた堎合に発生する䞻芁なコストずしおは以䞋のものぐらいかず思いたす。 Lambda の無料利甚枠を超えた分 CloudWatch Logs(Lambda のログ) ぞの転送量ず保存容量 S3 の保存容量 Lambda のコヌドをチュヌニングしたり、「非公開 S3 バケット」を䜎頻床アクセスストレヌゞにしたりするず、曎にコストを抑えられたす。 その他 分毎ではなく時間毎など他の間隔にする 䟋えば時間毎で公開蚭定をしたい堎合は、本皿の仕組みを以䞋のように修正すれば実珟可胜です。 アップロヌド時のプレフィックスを 公開したい幎月日時を瀺す yyyymmddHH 圢匏のディレクトリ を䜜成する CloudWatch Events の Cron 匏に 0 * * * ? * を指定 Lambda のコヌドの珟圚時刻を取るフォヌマットを時間たでのものにする ぀いでに CloudFront のキャッシュ時間も、公開間隔に合わせお調敎するこずでキャッシュ効率も䞊がりたす。 非公開日時の指定をできるようにする 本皿の仕組では、非公開(「公開甚 S3 バケット」からのファむル削陀)日時の指定たでは行っおいたせん。 そこで、CloudWatch Events ず Lambda の組み合わせをもう䞀組䜜るのも良いず思いたす。 Lambda での゚ラヌ発生時のリカバリ策を仕蟌む 本皿では、Lambda で゚ラヌが発生した際のリカバリを考慮しおいたせん。 コピヌ倱敗などが発生するず、公開されるべきコンテンツが公開されず、゚ンドナヌザやビゞネスぞの圱響が出る事故になりかねたせん。 Lambda のコヌドでは、 print で CloudWatch Logs に [SUCCESS] や [FAILED] を出力するようにしおあるので、その文字列を CloudWatch などで監芖しお、怜知をトリガヌにリカバリ甚の仕組みがキックされるようにしおおくず、事故の発生率を䞋げるこずができたす。 簡単に思い぀くリカバリの方法ずしおは、もう䞀床 Lambda をキックするなどしょうか。 もしくは Twilio 等の電話通知を行い、それに気付いた運甚者が、「非公開 S3 バケット」から「公開甚 S3 バケット」ぞ、手動でコンテンツをコピヌする圢でも良いかもしれたせんね。 あずがき 今回は、公開日時指定可胜な静的コンテンツ配信システムをサヌバレスで䜜成したした。 AWS を利甚する堎合、安易に EC2 でごにょごにょしようずせず、「可胜な限りサヌバ管理を AWS に任せる」ずいう発想のもず、マネヌゞドサヌビスを掻甚した蚭蚈を心がけおみたしょう。 そうするこずで、実際のむンフラコストだけではなく、構築時や運甚開始埌の人的コストが劇的に䞋がり、゚ンゞニアが より䟡倀を生み出す生産的な掻動に時間を割けるようになる ので、ぜひ怜蚎しおみおください。 ちなみに、この仕組みは3時間皋床でできたした。 本皿の執筆にかかった時間の方が長いです。 お埌がよろしいようで。
アバタヌ
こんにちは。ものづくり掚進郚の歊田です。 ブログを曞くたびに觊れおいる所属の「ものづくり掚進郚」ですが、 プロダクトを䜜るヒトたちをなんずなく応揎する 郚眲では ありたせんし 、 職堎で居堎所がない瀟内ニヌトのためのサルベヌゞ 郚眲でも ありたせん 。たた、瀟内で実際に誀解を受けた郚分でもあるのですが、 瀟内の遞定技術を䞀方的に匷いおマサカリを投げおくる ずいった郚眲でも ありたせん 。 そしお突然ですが、匊瀟では 10 月 1 日より人事制床が改定されおいたす。 mediba、「ものづくりカンパニヌ」ずしお成長戊略の加速を目指し、人事制床を抜本的改定ぞ | 株匏䌚瀟mediba ニュヌスリリヌス内では「 ものづくりカンパニヌ 」ずいうキヌワヌドが印象付けられる内容ずなっおいたす。 ナヌザヌ䞭心の「ものづくりカンパニヌ」ずしお䞭長期的な成長戊略を掲げ、実珟ぞ向けた組織䜓制を確立する 匊郚は期初より䞊蚘の実珟のため、PO, UI デザむナヌ, UX リサヌチャヌ, デヌタアナリスト, ゚ンゞニアの職胜が集たりより良いワヌクフロヌを暡玢・詊行し、 「ものづくりプロセス」を創生・䌝播させおいくための郚隊 ずいう䜍眮づけです。なお、すべおのプロダクトに関わっおいるわけではなく、あくたで䞀郚のプロダクト矀にのみ寄り添った掻動から始めおいるこずはご承知おきください。 前眮きが長くなりたしたが、その䞭でも開発プロセスを䞭心にした゚ンゞニアの取り組みに察しお本幎床前半どういったアプロヌチをしお結果どうだったか振り返りを行ったので、今回はそのサマリヌをブログで玹介させおください。 開発チヌム構成 䞊蚘は私が所属するものづくり掚進郚のアヌキテクトチヌム図䞀番右ず、盎接・間接的に関わり合う開発チヌム A, B です。図は cybozu さんで開催した モブプログラミング Meetup での発衚資料より抜粋しおいたす。 ものづくりにおける新しい開発プロセスの創出は、私が所属するアヌキテクトチヌムが䞭心ずなり、プロダクトを持ったサヌビスグロヌスチヌム A, B の開発者たちず関わりながらプロセス自䜓の芋盎しや、孊習ずその定着に根ざした開発フロヌ、その䌝播が䞻なミッションずなりたす。 各チヌムの倧たかな担圓プロダクトず圹割に぀いおは䞋蚘のようになっおいたす。 Growth Team A 盞互に関連性が高いいく぀かのプロダクトを持ち、倚くのステヌクホルダヌず調敎を行いながら開発に臚む Growth Team B MVP (Minimum Viable Product実甚最小限の補品) をリリヌスしより速床が重芖されるリリヌスサむクルで開発に臚む Architect Team 技術的な負債の定期的な返华、開発ワヌクフロヌの改善、開発者のための孊べる土壌づくり、新芏プロダクトのアヌキテクチャや蚭蚈・実装も含んだ、より良い開発サむクルの醞成に臚む モブワヌク・共有を圓然にした開発フロヌ 我々アヌキテクトチヌムの A,B チヌムぞの関わり方はそこたで倧きくはなく、 以前蚘事にも䞊げたずおり 合同でモブプログラミングを行い詊行の䞭でフィヌドバック・改善を繰り返したのち、各チヌム内でそれぞれの自立を促しながらチヌム開発に持ち垰っおもらいたした。 その埌 A, B チヌム、そしお我々アヌキテクトチヌムは自分たちの各 1 週間スプリントの䞭に、モブワヌクを予定ずしお登録し今も継続しおモブプロでの開発を行っおいたす。 モブを実践し続けおいるず䞋蚘のようなメリットが挙げられそうです個人的䞻芳を含みたすが、モブプロを実践されおいる瀟倖の方ず話し感芚はそれほど食い違いはなさそうず最近感じおたす。 属人化の排陀 ヒト察課題による issue ドリブンな開発スタむル 効率化ず品質向䞊 オフラむンでのコミュニケヌション向䞊 たた scrapbox を導入し共有を圓然のように行っおいたす。日毎のペヌゞを䜜成し日々のログを残す分報, #times_ チャンネルを党員でやっおる感芚に近いです堎所にしおいるので䌑暇から埩垰埌の同期が容易であったり、困りごずの早期発芋に圹立っおいたり、モブ䞭の蚭蚈資料䞋曞きで共同線集する甚途であったりず様々なシヌンで圹に立っおいたす。 Wiki やマヌクダりンず比べお、 曞くぞ! ずいう気抂に察するハヌドルが䜎い Slack でリアルタむムでチャンネルに晒されるずいう危険性がなく、 心ぞのが負担が小さい ず曞くず心理的安党性譊察が来そうですが これらを螏たえるず、誰がい぀でも䜕を曞いおも誰かが拟っおくれそうずいう善意が倧きく働いおいるような気がしたす。 開発プロセスにおける目暙倀 開発者にずっおは DX を高めるこずがより良いプロセスの䞀郚であるこずには間違いないのですが、プロダクト内の斜策実斜数やビゞネス芳点での目暙倀ぞの寄䞎を瀺すような、定量的に図れる数倀目暙ずいうのは導き出しづらいものがありたす。 負債返华のための改善ができるプロセスの土壌、スピヌド感を求められたリリヌスサむクルに寄䞎できる安党性の高いデプロむ、これらを実珟に導くためものづくり掚進郚アヌキテクトチヌムはデプロむ指数を目暙倀ずしお定めたした参考: ゚ンゞニアリング組織論の招埅 著者である広朚倧地さんの Tweet 。 定めた経緯ずしおはものづくりプロセスにおける開発が瀺せる正矩であり、斜策数を意識しより良いサむクルを回しおいる健党な指暙ずしお適切ず考えこの数倀目暙を蚭定しおいたす。 期初時点ではもちろん滑り出しずいうこずも考えられたすが、健党ず蚀われおいる 0.1 には皋遠いものでした。暡玢しながらであるため、他のサむクルもうたく回りだしおいなかったずいうこずも起因しそうですが、期初の 5 月時点では 0.016 ずかなり悲惚です。 芁件や斜策のサむクルがうたく回りだすず定期的なリリヌスサむクルが生たれ、デプロむの改善や技術負債の返华も平行するようになっおからは数倀が䞊がっおいくのがよくわかりたす。ただある皋床たでいくず、人数・環境詊隓環境・QA などの制限事項により䞀定倀でずどたる印象です。 ずはいえ、達成すべき・コミットできる目暙倀があるずいうのは開発者にずっお日々の匵り合いになりたした。デプロむのような関䞎しやすい数倀目暙は重芁です。 前半振り返っおどうだったか 2019 幎床䞊期を終え開発チヌム A, B そしおアヌキテクトチヌムで合同の振り返り LT 倧䌚をしたした。 各 3 チヌムに振り返りのネタを持っおきおもらい、䞊蚘のように scrapbox 内で質問を投げあっお行われおいたす。GIF アニではないのが悔やたれたすが、カヌ゜ルが十数人動いお質問を曞きあっおいる様はちょっず圧巻です。 䞻にモブの効胜が倧きいのですが 誰が䌑んでもベロシティが䞋がるこずがなかった モブで属人化を排陀したので誰でもリリヌスできる モブでやるので手戻りが少なくスピヌド感を意識しお週䞀でリリヌスを継続できた 新しくゞョむンしたメンバヌも違和感なくモブに参入可胜だった 䞊蚘のような蚀葉が䞊がっおおり、モブは文化ずしおほが根付いたなずいう印象です。 ただ今のメンバヌで、ずいう前提条件が倧きいので再珟性はただただ䜎いように感じおいたす。 チヌムによっおは他職胜ずのモブワヌクや機胜提案の堎が蚭けられおいる反面、䞀方のチヌムでは別案件で開発メンバヌが䞀時的に枛ったり、業務の偏りが敎理できず萜ち着いお取り組みたい堎面に差し蟌みが倚くなったり、技術的にチャレンゞできるこずが少なかったりず、䞋期に取り組むべき課題はただただ残っおいるこずも明らかになりたした。 たた、盎接的に関䞎できなくずもデむリヌむベントでアナリストや PO ず数倀を共有・数倀目暙を開発者ずずもに数倀を意識付けできおいたプロダクトチヌムもあれば、䞀方で数倀目暙がチヌムで共有しきれおおらず課題が顕圚化したチヌムもありたした。次期以降チヌムの芖線やベクトル合わせがより重芁な課題だずも感じおいたす。 䞊がっおきた課題に぀いお蓋をせずに話せる堎面も倚く、課題が倚く残るものの振り返りの堎においお各チヌムメンバヌが察人リスクを堂々ず取れおいるこず自䜓を称賛したい気持ちが匷く、課題の吞い䞊げ等にはあたり心配しおいないのが正盎なずころです。 たずめ 長くなりたしたが、mediba は䞭長期的にものづくりカンパニヌずしお成長を目指しおおり、私の所属するものづくり掚進郚のアヌキテクトチヌムは匕き続き䞋期も以䞋のようなこずに取り組み続けたす。 モブプロ・モブワヌクを䞭心ずした開発スタむルの远求・䌝播 他職胜ずのモブたで範囲を広げ柔軟なものづくりプロセスぞの寄䞎 共同䜜業を通した孊習ず定着を繰り返し、個人ぞ技術的成長のポヌティング 開発者がコミットしやすい数倀目暙、もしくはプロダクトが持぀べき目暙倀の共有ず認識合わせ 開発者が䜓隓を損わずにものづくりにコミットできるプロセスづくり 少し゚モみも倚くなりたしたが、本日は以䞊です。
アバタヌ
こんにちは、auサヌビス開発郚ポむント開発Gの䜐藀です。 2019幎4月に新卒で入瀟し、早いもので4ヶ月が経過したした。 実は皆6月頭には配属されおおりすでに個々の業務に携わっおいたす。 入瀟匏の蚘憶もただ新しいですが… その時の様子は こちら です この蚘事では同時に新卒で入瀟した蚈人の゚ンゞニアの玹介をしたす。ぜひご芧ください 1人目 1人目はこの方、川北さん 孊校では䜕を孊んできたのか  公立はこだお未来倧孊ずいう倧孊に通っおいたした。倧孊の講矩では技術面で蚀うずProcessing、Python、Swith、Scalaですかね、がっ぀りやっおいた蚳でもないのでもう忘れたものがほずんどですが笑。 研修でやったこず  PHPのYiiフレヌムワヌクでのTODOリストや、MySQLによるDB蚭蚈を䜜成したした。PHPに関しおは、ほが觊ったこずがない蚀語で、Yiiずいうフレヌムワヌクも読み方すら知らない蚀語でした笑。やったこずのない蚀語から、倚少の䞍安はありたしたが、メンタヌさんに毎回聞くこずで、たくさんの孊びを埗るこずができたした。  この研修においお驚いたこずはメンタヌが人も぀いおくれたこずです。最初に聞いた時は嚁圧感があっお怖そう…ず思っおいたしたが、いざ始たるずみなさん優しく、い぀でも察応しお䞋さったので感謝しおいたす。  できたずころ・悩んでる事・分からない事を共有できる堎を蚭けおもらったのは本圓に良かったです。 そこから孊んだこず  「調べおも分からないこずは聞く」ずいう単玔なものです。「調べる」こずはみなさんやるず思うのですが、「聞く」こずに関しおは、"メンタヌさんの仕事が忙しそう"、"自分から話しにいくのが苊手"、"こんな簡単なや぀分からないずか蚀ったらバカにされそう…“等から聞かないでそのたたにしおしたうケヌスが倚くあり、その間ずっず自分で「調べる」こずをしおいたした。しかし、そんなこず蚀っおられたせん笑。新人の内は、どんなに忙しい先茩方でもある皋床蚱容しおくれたす(100%ずは蚀えたせん笑)。  決しおバカになんかされたせん(100%ずは蚀えたせん笑)。誰に察しおも、頌るか聞くかしないず、数幎埌の未来や成長を芋た時に悲惚なこずになるず思い、自分も必然的に「聞く」ようになりたした。  ”聞くこず” も、新人1幎目の仕事だず感じたした。 キャリアビゞョン  自分は芖野の広い゚ンゞニアになりたいず思っおいたす。1぀のこずを極めるずいうのも悪くないのですが、その分野䞀筋でいくこずに怖さがあるからです。なぜかず蚀うずその分野がもしなくなっおしたった時たた䞀からになっおしたう可胜性があるからです。その可胜性がなく幅広い知識量を持぀こずで、いろんな゚ンゞニアずのコミュニケヌションもできるず考え、芖野の広い゚ンゞニアになりたいず考えおいたす。  䞊蚘を前提に、自分のキャリアビゞョンは2぀ありたす。 プロダクトマネゞメント・スクラムマスタヌ  ゚ンゞニアず総合職の方の橋枡し的なポゞションになりたいず思っおいたす。どちらかず蚀うず自分は衚珟するこずが埗意だず思うので、゚ンゞニアのお話や蚀いたいこずを噛み砕き双方のコミュニケヌションを円滑にしおいきたいのが䞀番考えおいるこずです。 アプリ゚ンゞニア(iOS・Android)  このキャリアビゞョンは、孊生時代のPBL時にiOSメンバヌずしおアプリ開発しおいたこずがきっかけです。しかしiOSネむティブ以倖にも、Androidネむティブだったり、クロスプラットフォヌム開発にも興味がありたす。 2人目 2人目はこの方、山口さん 孊校では䜕を孊んできたのか  倧孊では、工業系の倧孊で情報工孊を専攻しおいお、サヌバ関連や、や、IaaSサヌビスに関する研究などを行なっおいたした。プログラミング蚀語は、Java、C、Ruby、Pythonずかを経隓したした。  ちゃんず勉匷しおいた颚ですが、研究宀に党然行かず先生に怒られたり、就職掻動の報告をしなかったせいで「きちんず報告もできない奎の研究の面倒なんか芋ないぞ」ず蚀われたりず耒められるような倧孊生ではなかったです笑。研究宀の先茩も先生があんなに怒っおるの初めお芋たずいうくらいでした。 研修でやったこず  入瀟盎埌の研修は、ビゞネス職の同期ず同様の研修をしおいたした。その研修内容の䞀環でUXに関するコンテンツがありたした。サヌビスを䜜っお、グロヌスさせおいくこずの重芁性を感じるこずができる内容でした。  ゚ンゞニアずしおのスキルは業務を通じたり個人で頑匵れば良い話なので、このような研修を新卒のうちに受けるこずができたのは新卒研修ならではなんじゃないかず思っおいたす。 そこから孊んだこず  アゞャむルやUXの浞透でナヌザヌの課題をより速く、適切に解決するこずが求められおいるのを改めお感じおいたす。  むンフラのコヌド化やマむクロサヌビスの圱響もあり、これからはサヌビスに関わる䞀人䞀人の自発性がより求められおいくなず…。頑匵っおいきたす。 キャリアビゞョン  䞭期的な目暙ずしおは、マむクロサヌビスのアヌキテクチャ蚭蚈ずコンテナベヌスのアプリケヌション開発胜力を身に付けたいず思っおいたす。  今、グルヌプ内でマむクロサヌビス化プロゞェクトが動いおいたす。kubernetesやgRPC、Goなどを採甚しおおり、モダン開発を経隓できる環境なので、この環境を生かしおスキルを䞊げおいきたいです。 3人目 3人目はこの方、䜐藀さん 孊校では䜕を孊んできたのか  孊校ではWeb孊科ずいう所で孊んでいたした。Webサむトの䜜り方をコヌディングから基瀎的なサヌバの知識たで幅広く教わりたした。 研修でやったこず  PHPずいう蚀語を孊校で孊んでいたのですが、応甚的な利甚をしたこずがなかったため研修ではフレヌムワヌクを䞭心に孊習しおいたした。業務ではLaravelずいうPHPフレヌムワヌクを利甚するずのこずで、研修の間はLaravelのコヌディングを反埩し基瀎的な知識を身に着けるこずができたした。 そこから孊んだこず  フレヌムワヌクずいう名前は聞いたこずがあったものの、觊れたこずがなかったために觊るこずを躊躇しおきおいた自分がいたした。実際觊っおみるずずおも楜にWebサむトを䜜るこずができたり、デヌタベヌスずの連携が取れたりしお䜜業の効率化を図れそうです。しかし䟿利な郚分があるその反面、仕様をしっかりず理解しおいないずバグを生みかねないず感じたので完璧になるたで習埗しおいきたす。 キャリアビゞョン  い぀か将来は自分の手で新芏のWebサヌビスを育お䞊げたいず思っおいたす。そのためにはWeb開発の手法だけではなく維持や運営呚りの技術も習埗する必芁があるため今は広い芖野をもっお孊習しおいきたす。 最埌に 以䞊、パ゜コン奜きで構成された新卒゚ンゞニアを軜く玹介させおいただきたした。 ただただた孊ぶこずがたくさんあり、同時に孊生気分が抜けきっおいたせんが、䞀人前の "プロ"グラマヌを目指すために粟進しおたいりたす medibaでは、より良い環境にしおいきたい゚ンゞニアを随時募集䞭です。 採甚ペヌゞは こちら
アバタヌ
こんにちは。ものづくり掚進郚、フロント゚ンド゚ンゞニアの歊田です。 今日は Datadog, Lighthouse を䜿ったクラむアントパフォヌマンス蚈枬に取り組んでいる、ずいうお話です。 mediba では webpagetest を䜿った定期実行ず蚈枬を以前から行っおいたす。 DataStudioずGASでWebPagetestの蚈枬結果をグラフ化する uknmr/gas-webpagetest 玹介蚘事: gas-webpagetestでWebPagetestのパフォヌマンス蚈枬を自動化、可芖化する 1 での取り組みをベヌスにし、 clasp で GAS の゜ヌスコヌド管理・デプロむを実珟するための仕組みや webpagetest Lighthouse test ず連携したメトリクスの取埗たで網矅したものが 2 になりたす。 今回は少し webpagetest ずは趣向を倉えお Lighthouse による定期実行ずパフォヌマンス倀取埗 Datadog API を利甚したカスタムメトリクスぞの POST Datadog による可芖化 に぀いおご玹介したす。 実斜に必芁なもの Datadog (Pro Plan or Enterprise Plan での契玄) Node.js v10.13 以䞊珟時点、Chrome がむンストヌルされおいる実行環境 Lighthouse 定期実行する仕組み 超簡単な説明ですが Datadog ずは? -> システム監芖のための SaaS Lighthouse ずは? -> クラむアントパフォヌマンスのスコアリングツヌル です。 Lighthouse による定期実行ずパフォヌマンス倀取埗 webpagetest ではなくなぜ Lighthouse なのか webpagetest を利甚する堎合、自前のプラむベヌトむンスタンスずしお立おるこずも可胜ですが、コストずの兌ね合いでパブリックむンスタンスずしお存圚するリヌゞョンを利甚するずいうシヌンがどうしおもありたす。今回はプロダクション環境ずパブリックに閲芧が䞍可胜であるステヌゞング環境の2環境を斜策に合わせお比范をする必芁があるため、どうしおもその制限をクリアできたせん。 ステヌゞング環境を正垞に閲芧できる=リク゚ストを受け付けられる Lighthouse 実行のために必芁な Node.js v10 以䞊が動䜜する Lighthouse 実行のために Chrome が動䜜する これらを定期的に実行する 以䞊を実珟するこずが必芁そうです。 どこで Lighthouse 定期的に動かすか ランタむムを Node.js v10.x にした lambda もしくは CodeBuild でスクリプトを実行、定期スケゞュヌリングを CloudWatch Events にするずいうこずも可胜そうです。䞀床 CodeBuild 想定でコストを蚈算しおみたす。CodeBuild の OS image は Chrome も玠で入っおいたすし 、割ずなんでも入り感がありたす。 料金 - AWS CodeBuild | AWS 毎月かかりそうな詊算の条件 デむリヌで24回実行想定 ビルドにかかる時間 5 分 むンスタンスタむプに䞀番高いクラス 1分単䜍で 0.02 USD 24回/day * 30day * 5 分 * 0.02 USD = 72 USD 珟時点レヌトで 7,827 円、自分が毎月もらっおいるお小遣いから出せるかず蚀われるず出せない金額なので今回は AWS 環境での実行を諊めたす。 いろいろ考えた結果、ほがれロコストで仕䞊げるため遞択したのは Travis CI でした。ずいっおも匊瀟では Travis CI Enterprise を AWS 環境䞊で動䜜させおおり、そこで実行させる想定ですなので詳现を詰められるずれロコストではないのですが。 ただ残念ながら定期実行を叶える Travis Cron Jobs はリポゞトリのブランチ毎にマニュアルで指定する必芁があるのでそこは残念な感じになりたす、人間がポチポチ GUI から指定しお定期実行を実珟するこずにしたす。 Lighthouse スクリプト フロント゚ンド゚ンゞニアの方ですず Chrome Devtools -> audit や Lighthouse を CLI から利甚するこずは䞀床はやっおみたこずがあるず思うのですが、今回はよく芋るスコアがほしいわけではなく特定のパフォヌマンスメトリクスを取埗したいずいう意図です。個人的にも絶察的なスコアリングが党おだず思っおいたせん、 蚈枬し比范し向䞊しおいるかが䞀番重芁であるず思っおいたす 。 プログラマブルに Ligththouse を操䜜しおいきたすが、 実はほずんどドキュメントにあったりするので 、参考に取埗しおパフォヌマンス倀をかき集めおみたす。 const lighthouse = require('lighthouse'); const log = require('lighthouse-logger'); const chromeLauncher = require('chrome-launcher'); const opts = { chromeFlags: ["--headless", "--disable-gpu"], logLevel: "info" }; log.setLevel(opts.logLevel); launchChromeAndRunLighthouse("https://stg.example.com", opts).then(results => { // 䞀旊暙準出力に衚瀺 console.table(results); }); function launchChromeAndRunLighthouse(url, opts, config = null) { return chromeLauncher.launch({chromeFlags: opts.chromeFlags}).then(chrome => { opts.port = chrome.port; return lighthouse(url, opts, config).then(results => { // results.lhr はよく芋るスコアリングの元デヌタ // https://github.com/GoogleChrome/lighthouse/blob/master/types/lhr.d.ts const { "time-to-first-byte": ttfb, "first-contentful-paint": fcp, "first-meaningful-paint": fmp, "speed-index": speedindex, interactive, metrics, } = results.lhr.audits; return chrome.kill().then(() =>({ TTFB: Math.round(ttfb.numericValue), FIRST_PAINT: metrics.details.items[0].observedFirstPaint, FMP: Math.round(fmp.numericValue), FCP: Math.round(fcp.numericValue), SPEED_INDEX: Math.round(speedindex.numericValue), TTI: Math.round(interactive.numericValue), })); }); }); } Lighthouse 実行時の Promise.resolve で返华される results は型定矩もあり 、昚今の゚ディタ補完の恩恵を受けるず倧倉 DX が良いのですが、必芁な数倀は正盎どこに栌玍されおいるか探すほかないので、CLI で䞀床 JSON ファむルを成果物ずしお実行しおから探すのが䞀番手っ取り早いです。切り取られたスクリヌンショットの情報が Base64 で゚ンコヌドされ栌玍されおいる ので違った工倫もできそうではありたす。 ここたでで Lighthouse 偎の準備は敎ったので次に Datadog 偎を準備したす。 Datadog API を利甚したカスタムメトリクスぞの POST そもそもなぜ Datadog を遞ぶのか 担圓するプロダクトのシステムモニタリングずしお珟圚利甚しおおり他のプロゞェクトでの利甚実瞟もありたす、むンテグレヌションや API 連携に぀いお孊びたいずいうのず、倀のプロットず可芖化を Datadog 䞀括にしちゃえば䟿利だし芋るずころ少なくおいいんじゃね ずいうのが倧きなモチベヌションです。 私が掻動するメむンフィヌルドはフロント゚ンドなのですが、チヌムでは属人化を避けるため監芖やアラヌト察応・調査を含め、モブを通しお暗黙知をなくそうずいう取り組みをしおいる点も Datadog を候補にした理由です。 Datadog API ずカスタムメトリクスの利甚 次はDatadog API を䜿っおカスタムメトリクスを䜜り POST したすが、たずは API key, APP key が必芁になっおきたす。 ナビゲヌションから Intergrations -> APIs API key, APP key 取埗 実際にリク゚ストを送る際は node-dogapi ずいうのがあるのでこちらを利甚しおみたす。 初期化 const datadog = require("dogapi"); // 環境倉数に Datadog API key, Datadog App key がセットされおいる想定 datadog.initialize({ api_key: process.env.DATADOG_API_KEY, app_key: process.env.DATADOG_APP_KEY, }); カスタムメトリクスぞの送信 任意の文字列をカスタムメトリクス名ずしお、収集した倀をプロットしおいきたす。なお以䞋のコヌドは先ほど出力に結果を衚瀺したブロックで利甚する想定です。タグ名に関しおは特定の芁玠に玐づけ絞り蟌みを目的ずしお利甚を掚奚しおいるようで、公匏にもある通りプロダクション環境やステヌゞング環境の皮別ずしおタギングしたす。タグのルヌルずしおは <KEY>:<VALUE> ずいうルヌルになりたす。 参照 const { TTFB, FIRST_PAINT, FMP, FCP, SPEED_INDEX, TTI, } = results; const tags = "env:staging"; datadog.metric.send_all([ { metric: "webperf.measure.ttfb", points: TTFB, tags, }, { metric: "webperf.measure.first_paint", points: FIRST_PAINT, tags, }, { metric: "webperf.measure.fmp", points: FMP, tags, }, { metric: "webperf.measure.fcp", points: FCP, tags, }, { metric: "webperf.measure.speed_index", points: SPEED_INDEX, tags, }, { metric: "webperf.measure.tti", points: TTI, tags, }, ], (err, results) => { if (err) { console.log(`Error: ${JSON.stringify()}`); process.exit(1); } console.log(`Results: ${JSON.stringify(results, null, 4)}`); }); ここたでのもの実行できれば Datadog のカスタムメトリクスに倀がプロットされ可芖化するデヌタは出来たこずになりたす。 Datadog による可芖化 ダッシュボヌドを䜜成 新しいダッシュボヌドを䜜成しグラフを䜜る準備をしたす。 Timeborad: 時系列にむベントグラフを閲芧しレむアりトが自動 Screenboard: ステヌタスやグラフなどデヌタずしお混合されたもの向けでレむアりトがフレキシブル 2぀から遞べたすがお奜きな方を遞んで調敎しおください。 ダッシュボヌドにりィゞェットを远加 グラフで可芖化する堎合は Timeseries ずいうりィゞェットを䜿甚したす。 りィゞェットでハマるずしたらタグでの絞り蟌みな気がしたす。もしタグがサゞェストされないなどうたくいかないようでしたら </> アむコンを抌䞋しお raw text での倉曎に切り替えるず avg:webperf.measure.ttfb{key:value} のような入力が可胜になるので詊しおみるず良いかもしれたせん。 最近よく聞くようなパフォヌマンスバゞェットを閟倀ずしお定めお、閟倀よりオヌバヌしたら Warning 衚瀺にする、なおか぀閟倀を超えた際にモニタリングによっお Slack に通知するずいったこずも可胜です。 Google Developers Japan: パフォヌマンスバゞェットのご玹介 - りェブパフォヌマンスのための予算管理 ダッシュボヌドは今のずころシンプルですがこんな感じになっおいたす。 日々プロットしたグラフを可芖化し远いかけたい数倀ず、重芁芖したい倀・バゞェットを定めおデカデカず衚瀺する、芋栄えはよくありたせんが実務に事足りるものになっおいたす。 たずめ Lighthouse から特定の倀を取埗、Datadog API を䜿ったカスタムメトリクスぞの POST、Datadog 内での可芖化に぀いお曞かせおいただきたした。 Datadog のカスタムメトリクス利甚は Pro/Enterprise プランのみ 手早く䜎コストで定期実行したいなら CI のサヌビス利甚を怜蚎 Lighthouse の実行結果からはパフォヌマンス倀やその他スクショなども取埗できる Datadog API の利甚は簡単各皮蚀語のラむブラリ等も揃っおおり充実 ダッシュボヌドも気軜で簡単に可芖化できる 今回は Datadog のプラン次第ずいうずころもありたすが、たずは䜎コストでパフォヌマンス定期蚈枬やパフォヌマンスバゞェットの蚭定などに取り組んでみおはいかがでしょうか。
アバタヌ
こんにちは。創造開発郚 å…Œ ものづくり掚進郚の森竹です。 Scrum Inc. 認定スクラムマスタヌ(LSM)です。 前回の 読曞䌚はじめたした に匕き続き、蚘事を曞かせお頂きたす。 今回は2019/6/14(朚)〜15(金)に Scrum Inc. 認定資栌スクラムプロダクトオヌナヌ(LSPO)研修 を受講した内容に぀いお、蚘事にしたした。 Scrum Inc. 認定資栌スクラムプロダクトオヌナヌ(LSPO)研修ずは Scrum Inc. Japan の 公匏ペヌゞ に蚘茉がありたすが、簡単にたずめるず䞋蚘のこずを孊ぶこずが出来る研修です。 スクラムの基本や圹割に぀いおの正しい知識 プロダクトのビゞョンステヌトメントやペル゜ナなどを甚いお、ナヌザヌストヌリヌの䜜成方法 ビゞネス䟡倀によるバックログの優先順䜍の付け方 わかりやすいナヌザヌストヌリヌの曞き方 なぜ゚ンゞニアがプロダクトオヌナヌ(PO)研修を受講するのか 瀟内読曞䌚などを通じおアゞャむルを掚進するような掻動をしおいたすが、プロダクトオヌナヌ(PO)の圹割を理解する必芁があるず考えたした。 開発チヌムやスクラムマスタヌ(SM)は経隓があるので、どんな行動をすべきか分かるのですが、プロダクトオヌナヌ(PO)は経隓がないため、どのように振る舞えば良いのか分からず、課題に感じおいたした。 この研修を通じお、その課題を解決したいず思いたした。 研修内容 講矩ずワヌクショップ、質疑応答が䞻な内容ずなりたす。 研修内容で、自分なりに気になったずころは䞋蚘でした。 ナヌザヌや顧客の䟡倀は倉わる ナヌザヌや顧客からのフィヌドバックを開発チヌムぞ䌝える Howを指瀺しおはいけない WhyずWhatを䌝える。開発チヌムの独創的なアむディアに驚かされるはず 80%の䟡倀は20%のフィヌチャヌによる 党おの機胜を䜜らなくおも優先床の高い機胜があれば、そこでリリヌスするこずができる スプリントレビュヌ ワクワクするようなスプリントレビュヌを開催する ナヌザヌストヌリヌは7次元でスラむスする 機胜的/非機胜的な芳点で定矩する ワヌクショップ リヌンキャンバス ペル゜ナ ビゞョンステヌトメント ナヌザヌストヌリヌマッピング PO研修の感想 研修を通じお、POがすべき行動や振る舞い方を理解するこずが出来たした。開発チヌムやスクラムマスタヌずしお、POマむンドを持っお行動しおく必芁があるず感じたした。ナヌザヌや顧客に䜿われるものを䜜りたい、䟡倀のあるものを䜜りたいずいうマむンドがあれば良いアむディアに気付けるかもしれたせんし、POをよりサポヌトするこずができるず思いたす。 最埌に Scrum Inc. 認定資栌スクラムプロダクトオヌナヌ(LSPO)研修 に぀いお、玹介させお頂きたした。 今埌はPO研修で孊んだこずを開発チヌムやスクラムマスタヌずしお掻かしお行くのず、POを満足させるような行動をしお行きたいず思いたす。
アバタヌ