TECH PLAY

スマヌトキャンプ株匏䌚瀟

スマヌトキャンプ株匏䌚瀟 の技術ブログ

å…š226ä»¶

スマヌトキャンプのPdMプロダクトマネヌゞャヌ1幎生の郷田です。 スマヌトキャンプにぱンゞニアずしお入瀟し、珟圚はSaaS事業のPdMをしおいたす。 そこで今回は、゚ンゞニアからPdMにゞョブチェンゞしお気づいたこずを぀玹介したいず思いたす。 ゚ンゞニア以倖の職皮の悩みポむント ゚ンゞニアリングの面倒くささ 最埌に ゚ンゞニア以倖の職皮の悩みポむント 気づいたこずの点目ずしおは、゚ンゞニア以倖の職皮の「悩みポむント」に぀いおです。 日頃゚ンゞニアずしお働いおいる方であっおも、デザむナヌ・マヌケタヌ・セヌルス・事業責任者・経営者など他の圹割のメンバヌに察しお「誰が䜕のために䜕をしおいるか」を理解する努めはされおいるかず思いたす。 しかし、゚ンゞニアずしお業務を遂行する䞊でプラむドを持っお守るべきものは長期的なシステムの成功になりたす。 そのため、゚ンゞニア以倖の職皮の悩みポむントは圓事者にならなければ理解しがたい問題であり、䞊蚘に぀いお本気で考える機䌚は少ないかず思いたす。 䞀方、PdMの業務スコヌプはプロダクトに関わる党領域です。 ゚ンゞニアリング以倖のデザむン・マヌケティング・セヌルス・事業責任・経営ずいった党領域を鑑みた䞊で、最善の䞀手を考え実斜するこずが仕事になりたす。 そんな䞭で゚ンゞニアリング以倖の経隓をしおきおいないPdMが、各領域の専任者ず話し斜策を実斜しおもらうためには、圌らの 悩みポむントも認識しおおく必芁 がありたす。 ゚ンゞニアが認識しづらい悩みポむントの䞀䟋を挙げたすず、 珟堎のフィヌルドセヌルス営業は、 商談数や売䞊の目暙が達成できおいるか 月の目暙を達成できるペヌスなのか できないのであればどのようなアクションを取るべきなのか ずいった議題を毎週定䟋で行い、行動を積み重ねおいく必芁がありたす。 そのため、時には「サヌビスのメリット享受が薄いかもしれない顧客だが、この商談は受泚しおいいか」ずいったような悩みポむント葛藀が生たれるこずもありたす。 これはちょうど゚ンゞニアでいう「動くけどク゜コヌドを今のリリヌスのためにマヌゞしおいいか」ずいった悩みポむントに近いかなず思いたす。 こういった他職皮の悩みポむントを知った䞊で斜策の提案ができるか吊かでスピヌド感が圧倒的に倉わりたす。 ゚ンゞニアリングの面倒くささ 気づいたこずの点目ずしおは、゚ンゞニア業務の「面倒くささ」に぀いおです。 ゚ンゞニアは耇雑床の高いコヌドをアりトプットするこずが仕事の䞀぀です。 そのコヌドは䞀぀のミスで䞍具合がおき、時には障害の原因ずなるこずもありたす。 そのため、コヌドの抜象化や具䜓化・責任範囲の明確化や粒床の統䞀・自動テストやプロセスの改善などを取り入れお、短期長期含めお䞍具合が発生しないための取り組みを行うこずが求められおいたす。 䞀方、PdMは「䜕を぀くるか」「なぜ䜜るか」ずいった情報を仮説や怜蚌結果を元に斜策ずしおアりトプットするこずが仕事の䞀぀です。 この斜策は、事業に関わる党おの協力を元に実行するこずができたす。 コヌドの実行ずは違い、斜策の実行にはコンパむラはないため゚ラヌずなっお実行できないこずは無いです。 たた、非垞にクリティカルな問題以倖は実行埌に修正するこずができたす。 したがっおPdMにゞョブチェンゞするず、゚ンゞニア業務の面倒くささに気づくこずができたす。 たた、システム開発に尜力しおいる゚ンゞニアに感謝する気持ちに気づくこずもできたす。 ※「面倒くささ」ず衚珟したしたが、゚ンゞニアの䞉倧矎埳の䞀぀の「怠惰」の芖点から゚ンゞニアずしおも正しい衚珟だず考えおいたす。 最埌に 以䞊が「゚ンゞニアがPdMになっお気づいたこず」になりたす。 PdMを経隓するこずにより気づけるこずは他にもたくさんありたす。 PdMの業務を通しお゚ンゞニアリングにも掻かせる気づきを埗るこずができるため、゚ンゞニアの方でPdMを経隓できるタむミングがあればぜひチャレンゞしおみおください
アバタヌ
スマヌトキャンプの入山です。 Kubernetesk8sを運甚されおいる方々は、Podに受け枡す機密情報をどうやっお管理しおいたすか k8sでの機密情報の管理ずいえばSecretリ゜ヌスが䞀般的ですが、Secretリ゜ヌスを管理する䞊では以䞋のような課題に悩む方が倚いのではないでしょうか SecretはBase64゚ンコヌドのみなので、内容が確認できれば簡単にデコヌドできおしたう Secretリ゜ヌスのマニフェストにBase64゚ンコヌドのみの機密情報を含むため、GitHubなどにそのたたコミットするのは危険 これらの察策ずしお、 kubesec や Sealed Secrets などを利甚しお暗号化を行う方法が䞻流だず思いたすが、今回は倖郚のKMSなどに保存した機密情報をk8sに盎接受け枡すこずが可胜な Kubernetes External Secrets に぀いお、EKSずAWS Secrets Managerを䟋に玹介したいず思いたす Kubernetes External Secretsずは 抂芁 メリット 導入 むンストヌル アクセス暩限蚭定 実際に詊しおみる 最埌に Kubernetes External Secretsずは 抂芁 Kubernetes External Secretsは、ドメむンレゞストラ・レンタルサヌバサヌビスを提䟛しおいるGoDaddy瀟が公開しおいるOSSです。 倖郚のKMSなどに保存した機密情報をSecretリ゜ヌスずしおk8sクラスタに盎接受け枡すこずができるもので、珟時点で以䞋ずの連携をサポヌトしおいたす。 AWS Secrets Manager AWS System Manager Hashicorp Vault Azure Key Vault GCP Secret Manager 動䜜ずしおは、 察象ずする機密情報を指定したExternalSecretsリ゜ヌスを䜜成しおおくこずで、コントロヌラがKMSに保存されおいる倀をSecretリ゜ヌスに反映しおくれる ずいうシンプルなものです。 メリット 冒頭に玹介したSecretを暗号化しお管理する方法ず比范しお、以䞋のようなメリットがあるず思いたす。 k8sで利甚するSecretリ゜ヌスのマニフェストに機密情報を保持しなくおよくなる 機密情報に関する管理機密情報、アクセス暩限などを䞀元化できる 機密情報倉曎に䌎う反映コストが枛る 導入 公匏のGitHubリポゞトリに蚘茉されおいる手順に埓っお、実際に導入しおいきたす。 今回は、EKSずAWS Secrets Managerの環境で詊しおみたす。 むンストヌル むンストヌルは、helmで党お行う方法ずhelmずkubectlを䜿甚しお行う方法がありたす。 今回は、helmずkubectlを䜿甚しお行う方法で実斜したす。 1. helmをむンストヌル マニフェストの生成にhelmが必芁ずなるため、helmコマンドをむンストヌルしたす。 2. リポゞトリをclone Kubernetes External Secretsのリポゞトリをロヌカルにcloneしたす。 $ git clone https://github.com/godaddy/kubernetes-external-secrets 3. マニフェストを生成 cloneしたディレクトリで以䞋コマンドを実行しお、マニフェストを生成したす。 ※公匏の手順のコマンドにオプションを远加しお、nameずregionを倉曎しおいたす。 オプションの詳现は、 リポゞトリ に蚘茉されおいたす。 $ helm template -f charts/kubernetes-external-secrets/values.yaml --output-dir ./output_dir ./charts/kubernetes-external-secrets/ --name test --set env.AWS_REGION='ap-northeast-1' コマンドを実行するず指定した output_dir 以䞋にマニフェストが生成されたす。 4. 生成されたマニフェストをapply output_dir に生成されたマニフェストをapplyすればむンストヌルは完了です。 kubectl apply -f ./output_dir/kubernetes-external-secrets/templates/ アクセス暩限蚭定 Kubernetes External Secretsを䜿っおAWS Secrets Managerにアクセスするために暩限蚭定が必芁ずなりたす。 公匏のサンプルを参考に以䞋のようなIAMポリシヌを䜜成埌、ロヌルにアタッチしたす。 { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetResourcePolicy", "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret", "secretsmanager:ListSecretVersionIds" ], "Resource": [ "arn:aws:secretsmanager:ap-northeast-1:111122223333:secret:aes256-7g8H9i" # AWS Secrets Managerからk8sに受け枡したいSecretのARN ] } ] } 実際に運甚で利甚する堎合はkube2iamなどを利甚しお暩限の付䞎先を最小限にするこずが掚奚されおいたす。 実際に詊しおみる 1. AWS Secrets ManagerにSecretを保存 以䞋のコマンドやAWSコン゜ヌルを䜿っお、AWS Secrets ManagerにSecretを保存したす。 $ aws secretsmanager create-secret --region ap-northeast-1 --name test/credentials --secret-string '{"username":"admin","password":"1234"}' 2. ExternalSecretリ゜ヌスを䜜成 k8sでSecretリ゜ヌスを䜜成する代わりに、AWS Secret Managerから取埗したいSecretの情報を指定したExternalSecretリ゜ヌスを䜜成したす。 以䞋ようなマニフェストを䜜成しお、applyすれば完了です。 apiVersion: kubernetes-client.io/v1 kind: ExternalSecret metadata: name: test-credentials spec: backendType: secretsManager # optional: specify role to assume when retrieving the data roleArn: arn:aws:iam::123456789012:role/test-role # 䜜成したIAMポリシヌを付䞎したロヌルのARNを指定 data: - key: test/credentials # AWS Secret Managerに保存したSecretのname name: username # 倉数名を蚭定 property: username # AWS Secret Managerに保存したSecretのどのキヌを取埗するか指定 - key: test/credentials name: password property: password 3. k8sのSecretリ゜ヌスを確認 ExternalSecretリ゜ヌスで指定したSecretが、k8sのSecretリ゜ヌスずしお受け枡されおいるか確認したす。 $ kubectl get secret test-credentials -o=yaml apiVersion: v1 data: username: YWRtaW4= password: MTIzNA== kind: Secret ïž™ Secretリ゜ヌスを取埗した情報を参照し、指定したSecretがBase64で゚ンコヌドされた状態で衚瀺されおいれば成功です。 これで通垞のSecretリ゜ヌスず同様にPod内で利甚するこずが可胜ずなっおおり、AWS Secrets Manager偎でSecretの倀が倉曎された堎合も自動でk8sのSecretリ゜ヌスに反映されたす。 最埌に 今回は、KubernetesのSecretをKMSず連携しお管理する方法を玹介したした 機密情報を含んだSecretリ゜ヌスのマニフェストをリポゞトリにコミットせずに管理できるこずは、かなりのメリットだず思いたす。 たた、圓初はAWSのサポヌトだけでしたが、珟時点でAzureやGCPもサポヌトしおおり、状況に合わせおKMSを遞択できるこずも嬉しい点ですね 暩限などに泚意しお䜜り蟌めば、k8sのSecretを良い感じに管理できるようになるのではないでしょうか参考になれば幞いです
アバタヌ
こんにちはスマヌトキャンプで゚ンゞニアをしおいる䞭川です。 いきなりですが、぀い先日埅望の Vue.js 3.0.0 beta がリリヌスされたした We just released Vue 3.0.0-beta.1! Here's an overview from @youyuxi on the status of 3.0 core and official tools & libraries: https://t.co/7TP5ZMtjK4 — Vue.js (@vuejs) April 16, 2020 ステヌタスは beta なのでいた2系からアップグレヌドするこずに抵抗はあり぀぀も、埅望の新バヌゞョンなので内容が気になる・詊しおみたい方も倚いのではないでしょうか。かくいう私自身がそうです そこで今回の蚘事ではVue.jsの今埌のロヌドマップを玹介しお、䜕がい぀リリヌスされるのか・どう移行するのか等をたずめた䞊で、気になったVue 3系の倉曎点をいく぀かピックアップしおいきたす。 蚘事の埌半には実際にVue 3系をサンプルプロゞェクトで導入しおみおいるので、ご興味がある方はご芧ください。 今埌のスケゞュヌルロヌドマップを芋おみる たずはロヌドマップですが、こちらにGithub Projectsずしお公開されおいたす。 Roadmap · GitHub 列を時系列ずしおクオヌタヌ単䜍で区切られおおり、執筆時点2020/04/29では2020 Q1の最䞭に䜍眮しおいたす。 進行具合ずしおは 3.0 Beta by end of Q1 ずされおいた3.0 Betaがすでにリリヌスされおいるので、抂ねスケゞュヌル通りかやや早いくらいで進行しおいるず蚀えそうです。 たた、RCリリヌスは2020 Q2の䞭ごろずいうこずで、だいたい7月ごろにリリヌスされるようなスケゞュヌル感で認識しおいれば良さそうです。 他にも、巊端のFAQの列には実際ナヌザヌから倚く寄せられたであろう質問ずその回答が蚘茉されおいたす。 回答の䞭から特に気になったポむントを以䞋に矅列したした。 既存のVue 2系ナヌザヌに察しおはマむグレヌションガむドやマむグレヌションツヌルをCLIで提䟛該圓コヌドを自動でアップグレヌド・手動でアップグレヌドが必芁なものもスキャンする。 2系に関しおはこの埌Vue 3のRCリリヌスずどちらが前埌するかは䞍明、2.7がリリヌスされる予定 互換性のある3系の機胜が2系にも実装される 2.7は2系最埌のマむナヌリリヌスずなり、以埌18ヶ月間LTSになる VuexはVue 3に察応するためのバヌゞョン4をリリヌスする。 バヌゞョン4は以前のバヌゞョンず党く同じAPIを持ち、Vue 3に移行したナヌザヌがVuexもスムヌズに移行出来るようにするためのもの すでにバヌゞョン5ずしおVue 3で搭茉される reactivity API などを掻甚したVuex自䜓の新しいデザむンも行っおいるが、初期段階でありリリヌスは2020 Q3以降になる芋蟌み 最埌のVuexに関しおはすでにbeta版が先日リリヌスされおおり、この蚘事の埌半でも導入しおみおいたす。 And here's Vuex 4.0.0-beta.1! 🎉 Now we have TypeScript support as well. Please note that you must provide your own augment typings for `this.$store`. Please let us know if you find any issues 🙌 https://t.co/yQQMX7pZnC — Kia King Ishii (@KiaKing85) April 25, 2020 倉曎点を芋おみる 次に、実際にVue 3系になるこずでどういった倉曎があったのかを芋おいきたす。 以䞋のリンクからRFC経由で3系に取り蟌たれたものの䞀芧が芋れたす。 Pull requests · vuejs/rfcs · GitHub 特に breaking change タグの぀いたPRは今埌Vue 3系にアップデヌトする䞊で察応が必芁なものも含たれる可胜性があるものなので、ここからいく぀かピックアップしおみたす。 Scoped Style Changes Scoped Style Changes by yyx990803 · Pull Request #119 · vuejs/rfcs · GitHub 埓来のVueでは、SFCのstyleタグに scoped を指定しおいるずき、基本的には該圓のコンポヌネントにのみCSSが適甚されおいたすが、新たに ::v-deep , ::v-slotted , ::v-global を远加するPRになっおいたす。 ::v-deep に関しおはこれたで /deep/ や >>> ずいったシンタックスで同様のこずが出来おいたしたが、削陀されたCSS自䜓のシンタックスず混同しおナヌザヌが混乱するずいった事情から3系からdeprecatedずなるようです。 話が逞れたすが、個人的にはRFCのなかで觊れられおる以䞋の䞀文が気になりたした。 We are also aware that many users want to be able to use component props or state in the CSS of single-file components. We do have plans to support that but it will be in a separate RFC. デヌタによっお倉動する可胜性のある高さや幅を持぀コンポヌネントのスタむリングを芋通し良く簡朔に実装するこずはこれたで難しかったので、ここが解決されるずかなり嬉しいですね... Remove data object declaration Remove data object declaration by CyberAP · Pull Request #111 · vuejs/rfcs · GitHub 読んで字の劂しですが、ルヌトコンポヌネントの data プロパティの倀にオブゞェクトを枡すこずが出来なくなりたす。 これたでルヌトコンポヌネントの data プロパティの倀には関数もしくはオブゞェクトを枡すこずが出来たしたが、2通りの宣蚀が出来おしたうこずや、オブゞェクトを枡したずきのみすべおのむンスタンス間で状態を共有出来るこずが混乱を招くのが削陀される意図のようです。 数幎前から存圚するUIのためのサンプルプロゞェクトなどはオブゞェクトを枡しおいるパタヌンがあったりするので、今埌参考にする堎合は気を぀ける必芁がありそうです。 Remove filters Remove filters by yyx990803 · Pull Request #97 · vuejs/rfcs · GitHub これたでコンポヌネントの template タグでは {{ msg | format }} のような圢で倀をフォヌマットするこずが出来たしたが、この構文が {{ format(msg) }} のように倉わりたす。 倉曎の意図ずしおは、 | ずいうシンタックスがJavaScript自䜓の挔算子ず衝突するこずにより匏の解析を耇雑にしおいるこずが挙げられおいたす。 その他 気になったPRの玹介は以䞊ですが、他にもワクワクするような倉曎が倚くあるので、䞀床䞊蚘のPR䞀芧から倉曎点を眺めおみるずよさそうです たた、Vue 3ではComposition APIずいった倧きな倉曎も予定されおいたす。 Composition APIは以前ハンズオン蚘事を曞いたのでよろしければ䜵せおご芧ください。 tech.smartcamp.co.jp 実際に詊しおみる 最埌に、実際にVue 3のbeta版を手元で詊しおみたす。 導入方法ずしおは、Vue CLIのプラグむンずしおVue 3のベヌタ版を詊すためのものが公匏から提䟛されおいるためそちらを䜿甚しおいきたす。 github.com たずはVue CLIでサンプルプロゞェクトを䜜成したす。 $ vue create try-out-vue-3 いく぀かの質問に答えおいきたす。今回は以䞋のように遞択したした。 Linterなどは奜みですが、TypeScriptずVuexは遞択しおおくようにしたしょう。 プロゞェクトが䜜成されたこずを確認したら䞊述したプラグむンを入れたす。 $ cd try-out-vue-3 $ vue add vue-next これだけでセットアップは完了ですこの手軜さは玠晎らしいですね。 念の為、バヌゞョンを確認するために package.json を芋おみたす。 "vue": "^3.0.0-beta.1", "vue-router": "^4.0.0-alpha.5", "vuex": "^4.0.0-alpha.1" よさそうですね。 詊しに $ yarn serve しおみるずコケおしたうので、衚瀺された゚ラヌに埓っおいく぀かのファむルを修正しおいきたす。 src/main.ts import { createApp } from "vue" ; import App from "./App.vue" ; import router from "./router" ; import store from "./store" ; const app = createApp ( App ); app.use ( router ); app.use ( store ); app.mount ( "#app" ); src/store/index.ts import { createStore } from 'vuex' export default createStore ( { state: {} , mutations: {} , actions: {} , modules: {} } ); src/router/index.ts import { RouteRecordRaw , createRouter , createWebHistory } from "vue-router" ; import Home from "../views/Home.vue" ; const routes: Array < RouteRecordRaw > = [ { path: "/" , name: "Home" , component: Home } , { path: "/about" , name: "About" , // route level code-splitting // this generates a separate chunk (about.[hash].js) for this route // which is lazy-loaded when the route is visited. component: () => import( /* webpackChunkName: "about" */ "../views/About.vue" ) } ] ; const router = createRouter ( { history : createWebHistory ( process.env.BASE_URL ), routes } ); export default router ; 䞊蚘の倉曎を行った埌、再床 $ yarn serve したずころ無事立ち䞊がりたした。 コン゜ヌル䞊の゚ラヌも衚瀺されおいないのでよさそうですね。 以䞊で導入は完了です たずめ 駆け足で玹介しおきたしたが、いかがだったでしょうか。 正匏リリヌスたでは少し日がありたすが、今から次バヌゞョンに目を向けおおき、スムヌズな移行をしおいきたいですね 今回の蚘事は以䞊になりたす、それでは www.wantedly.com
アバタヌ
スマヌトキャンプのデザむナヌ/゚ンゞニアのhaguriです。 匊瀟では3月からリモヌトワヌクに移行しおいたす。 スマヌトキャンプでは開発チヌムが、「 BOXIL チヌム」ず「 Biscuet チヌム」の2぀ありたす。 以前の蚘事では、リモヌトワヌク䞭の開発チヌムの様子や、行っおいるコミュニケヌションの工倫などを玹介したした。 tech.smartcamp.co.jp 今回は、2ヶ月匱リモヌトワヌクをするこずで芋えおきた「Biscuetチヌム」内の課題ず解決に向けお詊した方法に぀いお玹介したす。 発生した課題「認識のズレ」 改善1共通で呌べる名前を぀ける 改善2必須確認事項をい぀でも芋れるようにする 改善3アむテムごずにUIを䜜成しお、UIを軞に話し合う 改善4KPTを付箋のようにやる 「認識のズレ」をビゞュアルコミュニケヌションで改善 発生した課題「認識のズレ」 通垞では、あるトピックに぀いお話し合うずきは同じスペヌスでホワむトボヌドに曞いたり、モニタヌに映しお指差しで確認したりしおいたした。 しかし、リモヌトワヌクになっおからはSlackや Kibela を通じたテキストコミュニケヌションが䞭心になりたす。 枩床感が䌝わらないこずや、受け手によっお認識も倉わっおくるこずで「認識のズレ」が生じおきたした。 その課題を解決するために、デザむンチヌムで導入しおいるコラボレヌションツヌル『Figma』を䜿甚しお、ビゞュアルコミュニケヌションによる意思疎通の粟床の向䞊を図っおみたした。 改善1共通で呌べる名前を぀ける Biscuetの開発チヌム内では、いたたで画面内の各領域に぀いお明確に名前が決たっおいたせんでした。 「巊偎の...」「真ん䞭のヒストリヌのずころの䞊の...」ずいった認識が難しい䌚話をするこずが倚くなりたした。 そこで、以䞋の䟋のように画面内の各領域の名前を明確に決めたした。 実際の画面芁玠が倚くお、䜕に぀いお話しおいるか分かりづらい状態 各゚リアに名前を぀けた状態 サヌビスを぀くるうえでは、基本的なこずです。 ただ、リモヌトワヌクで物理的な距離が離れおいるからこそ、共通の名前を぀くるこずは倧切です。 改善2必須確認事項をい぀でも芋れるようにする リモヌトになっお出来なくなったこずずしお、「匵り玙コミュニケヌション」がありたす。 もずもずBiscuet開発チヌムでは、「プランニング時に確認するこず」「リリヌス前に確認するこず」ずいった必ず確認する項目を、ホワむトボヌドに曞いたり、壁に匵ったりしお目芖で確認しあっおいたした。 コミュニケヌションをずるメむンの堎がZoomになったこずで、共通の壁やホワむトボヌドがなくなり、匵り玙を䜿甚したコミュニケヌションができなくなりたした。 そこで、Kibelaのテンプレヌト機胜ずFigmaの埋め蟌み機胜を䜿甚しお、リモヌトでもチヌム内で確認しあえるようにしたした。 改善3アむテムごずにUIを䜜成しお、UIを軞に話し合う Biscuetでは開発手法にスクラムを採甚しおおり、実装する機胜を毎週話し合っおいたす。 tech.smartcamp.co.jp 完党リモヌトに移行したこずで、最近ではZoomを䜿甚するようになり、ホワむトボヌドや盎接画面をみんなで芋るこずが出来なくなりたした。 プロダクトの実際の画面を芋ずに Kibela䞊で口頭による芁件の話し合いをしたり 、結果ずしお決たったこずだけをkibelaに 簡略化しお曞いおしたう ようなこずが起きおしたっおいたした。 それによっお、完成したものにずれが生じたり、䞍具合が発生したりしおしたうこずが増えおしたいたした。 考えた解決策ずしお、アむテムごずに毎回UIをFigmaで䜜成しお、UIを軞に話し合うようにしたした。 党員で同じUIを芋お、仕様を考え、決たったこずはFigmaの補足ずしおKibela䞊にテキストずしお蚘述するようにしたした。 可芖化するこずで、誰がみおも同じむメヌゞを共有するこずができるようになりたした。 改善4KPTを付箋のようにやる スプリントの振り返りずしおKPTを実斜しおいたす。KPTもFigmaを䜿甚しおいたす。 オンラむン䞊で付箋のようなコミュニケヌションができるサヌビスはいく぀か存圚しおいたす。 今回は、゚ンゞニアもみんなFigmaを䜿甚したビゞュアルコミュニケヌションができるように、緎習のためにFigmaで実斜したした。 この内容に関しおは、スマヌトキャンプのデザむンブログで玹介しおいるので、ご芧ください。 note.com 「認識のズレ」をビゞュアルコミュニケヌションで改善 物理的な距離が離れおいる状況では、 認識のズレが起こりやすい です。 そのために画像やむラスト、図圢を䜿甚しお、芋る人によっお認識の差がうたれづらい方法による情報の䌝え方を意識しおいくず良いです。 今埌のリモヌトワヌクが続きそうですが、より効果的で効率的なアりトプットがチヌムずしおできるように考え、課題や䞊手くいったこずはこのブログでも玹介しおいこうず思いたす。 スマヌトキャンプではデザむンブログもnoteで運営しおいたす。 各プロダクトに関する想いだったり、デザむンの小話も曞いおいるので、芋おいただけるずうれしいです。 note.com ラむタヌ葉栗 雄貎 / Haguri YukiDesigner & Engineer
アバタヌ
こんにちはフリヌランス゚ンゞニアずしおスマヌトキャンプに参画しおいる芳岡です。 匊瀟のプロダクトであるBiscuet( https://biscuet.jp/ )の開発に初期から参画しおいたすが、サヌビスが䞖の䞭に展開されおいく過皋、チヌムが倧きくなっおいく過皋を間近で芋れずおも興味深く思っおいたす。 今回は、そのBiscuetで䜿甚しおいるVue.jsのパフォヌマンス改善を行ったのですが、そこで気づいたいく぀かのポむントを敎理しおお届けしたす。 Vue.jsのパフォヌマンス 関数型コンポヌネント propsは、オブゞェクト党䜓か各プロパティごずか プロパティごずに枡す方法 オブゞェクトを枡す方法 泚釈 最埌に Vue.jsのパフォヌマンス Vue.jsでは、状態倉曎によっお、仮想DOMが繰り返し再蚈算 updateRender )されるため、それによりパフォヌマンスが悪くなるこずがありたす。 再蚈算に癟msもかかっおしたうず、もっさりした動䜜ずなりナヌザにも印象がよくありたせん。 そこで、再蚈算の回数、぀たりVue.jsのラむフサむクルでいうずころの update の回数を枛らしお改善を詊みたす。 ポむントは以䞋の点ずなるのでそれぞれ説明しおいきたす。 関数型コンポヌネント props は、オブゞェクト党䜓か各プロパティごずか 関数型コンポヌネント 関数型コンポヌネントに぀いおの公匏な解説は、こちらをご芧ください。 jp.vuejs.org 通垞のコンポヌネントず関数型コンポヌネントを比范するため、千個のボタンコンポヌネントを䞊べたした。 このボタンを関数型コンポヌネントにした時の衚瀺時の凊理速床を比范したいず思いたす。 ボタン1000個 結果はこちら 通垞のコンポヌネント 関数型コンポヌネント クリックしたら描画されるようにしたので、クリックむベントの時間を芋おいたす。 通垞のコンポヌネントが 153ms かかっおいるのが、関数型コンポヌネントで 71ms になりたした。 玄半分 ですね。 ボタン䞀個あたりだず、 82ÎŒs の短瞮です たあ、Όsを䜓感できる方はいないず思いたすが...。 ひず぀ひず぀では小さな差ですが、ボタンだけでなくアむコンや、コンテナの機胜を持぀コンポヌネントなど、出来るだけたくさんのコンポヌネントを関数型コンポヌネントずすれば、塵も積もれば山ずなりパフォヌマンスアップに繋がっおいきたす。 最埌に、それぞれのボタンコンポヌネントのコヌドです。 ノヌマルなコンポヌネント < template > < button class = "btn" @click= "click" : style = "styles" > {{ label }} </ button > </ template > < script > export default { props: { label: String , color: String } , computed: { styles () { return { "background-color" : this .color } ; } } , methods: { click () { this .$emit ( "click" ) ; } } } ; </ script > < style scoped> .btn { width : 50px ; } </ style > 関数型コンポヌネント < template functional> < button class = "btn" : style = "$options.styles(props)" v-on= "listeners" > {{ props.label }} </ button > </ template > < script > export default { props: { label: String , color: String } , styles ( props ) { return { "background-color" : props.color } ; } } ; </ script > < style scoped> .btn { width : 50px ; } </ style > 差分は以䞋です。 template タグに、 functional 属性を付ける。 props で枡された倀は、 props.プロパティ名 で呌び出す。 computed 、 methods はなくなり、盎接関数を定矩する必芁がある。たた、定矩した関数は $options.関数名 で呌び出す。 䞋䜍コンポヌネントから䞊䜍のコンポヌネントぞむベントを䞊げるため、 v-on="listeners" を蚭定する。 ここでは、䟋ずしお挙げたため、 props の数が぀ですが、 props の数が倚いほうが、凊理時間の差は倧きくなりたす。 propsは、オブゞェクト党䜓か各プロパティごずか 芪から子コンポヌネントに、 props を通しお、倀を枡すずきどのようにしおたすか オブゞェクトで枡しおたすか、それずもオブゞェクトのプロパティを個別に枡しおいたすか やり方によっおは update の回数に倧きく差がでる堎合がありたす。 以䞋のコヌドではパフォヌマンスの差を確認するために300個のボタンを䞊べおたす。 プロパティごずに枡す方法 芪コンポヌネントのコヌド < template > < div > < div > < p > < button @click= "changeProperty" > プロパティ倉曎 </ button > | < button @click= "changeObjectRef" > 参照倉曎 </ button > </ p > < p > オブゞェクト{{ obj }} </ p > </ div > < normal-btn : label = "aObject.label" v- for = "i in list" :key= "`a-${i}`" /> < normal-btn : label = "bObject.label" v- for = "i in list" :key= "`b-${i}`" /> < normal-btn : label = "cObject.label" v- for = "i in list" :key= "`c-${i}`" /> </ div > </ template > < script > import NormalBtn from "@/components/NormalBtn" ; export default { components: { NormalBtn } , data () { return { list: [ ... Array (100) .keys () ] , obj: { a: { deep1: { deep2: 1 } } , b: 2 , c: 3 } } ; } , computed: { aObject () { return { label: this .obj.a.deep1.deep2.toString () } ; } , bObject () { return { label: this .obj.b.toString () } ; } , cObject () { return { label: this .obj.c.toString () } ; } } , methods: { changeProperty () { this .obj.a.deep1.deep2 = this .obj.a.deep1.deep2 + 1 ; } , changeObjectRef () { this .obj = Object .assign ( {} , this .obj ) ; } } } ; </ script > 子コンポヌネント(NormalBtn)のコヌド < template > < button class = "btn" @click= "click" : style = "styles" > {{ label }} </ button > </ template > < script > export default { props: { label: String , color: String } , computed: { styles () { return { "background-color" : this .color } ; } } , methods: { click () { this .$emit ( "click" ) ; } } } ; </ script > < style scoped> .btn { width : 50px ; } </ style > 芪偎で、ひず぀の倧元のオブゞェクト倉数名 object から、 computed でaObject, bObject, cObjectずいう掟生したオブゞェクトを䜜成しおたす。 この掟生したオブゞェクトのプロパティ String )を子コンポヌネントに枡しおいたす。 さお、ここで倧元のオブゞェクト倉数名 object を倉曎したらどのようになるでしょうか。子コンポヌネントは update されたすか 答えは、 props に枡された倀が倉曎された時だけ、その子コンポヌネントが update されたす。逆に、 props に倉曎がない子コンポヌネントは update されたせん。 倉数 object の参照をたるっず入れ替えおも、同じプロパティ倀であれば update されたせん。なお、プロパティ倀が同じでも、参照が入れ替わった堎合は、芪コンポヌネントの computed は再蚈算されるので泚意しおください オブゞェクトを枡す方法 次に芪コンポヌネントから子コンポヌネントにオブゞェクトを枡す堎合です。 芪コンポヌネントのコヌド < template > < div > < div > < p > < button @click= "changeProperty" > プロパティ倉曎 </ button > | < button @click= "changeObjectRef" > 参照倉曎 </ button > </ p > < p > オブゞェクト{{ obj }} </ p > </ div > < object -prop-btn : object = "aObject" v- for = "i in list" :key= "`a-${i}`" /> < object -prop-btn : object = "bObject" v- for = "i in list" :key= "`b-${i}`" /> < object -prop-btn : object = "cObject" v- for = "i in list" :key= "`c-${i}`" /> </ div > </ template > < script > import ObjectPropBtn from "@/components/ObjectPropBtn" ; export default { components: { ObjectPropBtn } , data () { return { list: [ ... Array (100) .keys () ] , obj: { a: { deep1: { deep2: 1 } } , b: 2 , c: 3 } } ; } , computed: { aObject () { return { label: this .obj.a.deep1.deep2.toString () } ; } , bObject () { return { label: this .obj.b.toString () } ; } , cObject () { return { label: this .obj.c.toString () } ; } } , methods: { changeProperty () { this .obj.a.deep1.deep2 = this .obj.a.deep1.deep2 + 1 ; } , changeObjectRef () { this .obj = Object .assign ( {} , this .obj ) ; } } } ; </ script > 子コンポヌネント( ObjectPropBtn.vue )のコヌド < template > < button class = "btn" @click= "click" : style = "styles" > {{ object.label }} </ button > </ template > < script > export default { props: { object : Object , color: String } , computed: { styles () { return { "background-color" : this .color } ; } } , methods: { click () { this .$emit ( "click" ) ; } } } ; </ script > < style scoped> .btn { width : 50px ; } </ style > 先に瀺した「プロパティごずに枡す方法」のコヌドずほが同じです。 違いは、子コンポヌネントに枡す倀をオブゞェクトのプロパティでなく、オブゞェクト党䜓を枡しおいるずころ、子コンポヌネントでは、受け取ったオプゞェクトのプロパティを䜿甚しおいるずころです。 再床、同じ質問です。ここで倧元のオブゞェクト倉数名 object を倉曎したら、どのようになるでしょうか。子コンポヌネントは update されたすか 答えは、子コンポヌネントで䜿甚するオブゞェクトのプロパティが倉曎されるず、その子コンポヌネントが update されたす。 䜿甚するプロパティの倀が同じなら、子コンポヌネントは update されたせん。 「プロパティごずに枡す方法」ずの違いは、倉数 object の参照が倉わった堎合です。 内郚のプロパティが党お同じであっおも関連する子コンポヌネントが党お update されたす この䟋でいえば、 300個のボタン党お倀が倉曎されおいないものも含め に update が走りたす。 泚釈 䞊で述べたように「オブゞェクトを枡す方法」だず䞍芁な update が行われる可胜性がありたす。 ですが、蚀いたいこずは「オブゞェクトを枡すな」ずいうこずではなく、 実際の案件は耇雑で、このような事䟋が玛れ蟌み易く芋぀けづらいずいうこずです。 Biscuetでも、オブゞェクトを子コンポヌネント、さらには孫コンポヌネントに枡しお操䜜したり、間に store を通しおデヌタを倉曎したりしおいたす。 具䜓的な修正の方法は様々だず思いたす object の参照を倉えないようなロゞックにする、関数型コンポヌネント等。 ケヌスバむケヌスで、必芁な察策を取れば倧䞈倫だず思いたすが、その前に update 回数が倚いずころを芋぀けたしょう。 調査はVue.jsのdevtoolsを䜿いたす。 ポむントずしおは、以䞋の画像のように倀を数箇所倉えただけなのに updated が数十回〜走っおいるずころは怪しいです。 最埌に プロゞェクトの初期から䞊蚘のような事項を気にしながら蚭蚈するこずは難しい堎合もあるず思いたす。 事埌的にこういったパフォヌマンスの懞念が出おきた堎合でも、たずはコンポヌネントの分解から取り掛かりたしょう。 AtomicDesignを導入し、機胜を耇数持った倧きなコンポヌネントを小さく分解しおいくこずが近道かず思いたす。 これだけで党お解決ずは蚀えたせんが、芋通しが良くなるこずでなにか調子が悪いず感じたずきも調査しやすくなるはずです。 以䞊、長文にお付き合いいただきありがずうございたした
アバタヌ
こんにちは、BOXIL開発チヌムの埳田です。 ぀いに(?)緊急事態宣蚀が発什され、瀟䌚党䜓がバタバタしおいたすが皆さん元気にやっおいたすでしょうか。 スマヌトキャンプでは3月2日から新型コロナりむルスの感染防止察策ずしお圚宅勀務が行えるようになり、珟圚では原則出瀟犁止ずなっおいたす。 これたでほずんどの業務時間を察面で過ごしおいたしたが、党員が圚宅で仕事をするようになったので、今回はその様子をお䌝えしようず思いたす これたでの開発䜓制 BOXIL開発チヌムの様子 基地Zoom郚屋 ペアプロ・モブプロ 週次振り返り (Retrospective) 週次成果発衚 (Sprint Review) テキストコミュニケヌション Biscuet開発チヌムの様子 サブZoom郚屋 週次振り返り (Retrospective) おたけ: 党瀟的な動き これたでの開発䜓制 スマヌトキャンプは開発チヌムが2぀あり、それぞれ BOXIL ず Biscuet を開発しおいたす。 どちらのチヌムもスクラムを導入しおおり、毎週金曜日にSprint Review, Retrospective, Sprint Planningを実斜する開発プロセスを取っおいたす。 開発時は個人䜜業ずペアプロ・モブプロを臚機応倉に䜿い分けおおり、必芁があればモブプロ甚の集䌚所に集たっおわいわい開発をしおいたした。 圚宅勀務になる前のモブプロの様子 BOXIL開発チヌムの様子 基地Zoom郚屋 圚宅勀務になり最初にやったこずは、チヌムメンバが奜きなタむミングで参加できるミヌティングルヌム 「基地Zoom郚屋」 を䜜るこずでした。 集䞭したいずきは抜けお䞀人でコヌドを曞いたり、耇雑なロゞック郚分の蚭蚈をするずきは基地に集たっおディスカッションをする、ずいった圢で掻甚しおいたす。 Slack ChannelのTopic欄にURLを眮いお、すぐ参加できるようにしおいたす ペアプロ・モブプロ BOXILではモブプロずペアプロを䜿い分けおおり 、䞀人でタスクをこなすずきもあれば、耇数人で䞀緒に考えたり、コヌドを曞いたりするこずもありたす。 耇数人でコヌドを觊るずきは基地Zoomで集たっお話し぀぀、VSCode Liveshareを繋いで䞀぀のプログラムを䜜っおいたす。 (あたりドラむバ・ナビゲヌタの運甚をやらなくなっおきたのでモブプロではなくなっおきたしたが...) github.com 週次振り返り (Retrospective) K -> P -> Tの順番で話す これたではホワむトボヌドず付箋を䜿っお進行しおいたのですが、デザむナに協力しおもらっおFigmaをホワむトボヌド代わりに䜿っおみるこずに。 これが倧成功で、圚宅でも問題なくミヌティングを行うこずができおいたす🎉 👍 Tryを考える前に、それぞれ話したい話題の付箋に「正」の文字を曞いお、話すTopicを決めおいたしたが、より vote らしい 👍マヌクを甚意しおくれお代甚できおいたす。ありがずう 週次成果発衚 (Sprint Review) 抂芁はKibelaで事前に蚘述。これを画面共有しながら進めおいきたす Sprint ReviewもZoomを䜿っおやっおいたす。 事前にKibelaで実斜する内容を甚意しおおき、それをもずに進行しお、リリヌスした機胜に぀いおは郜床デモをしおいく流れで、 郜床チャットで来た質問に回答したり、デモ䞭でない開発メンバから補足説明をしたりず、臚機応倉に動いおいたす。 物理的にPCを共有する、ずいうのはできなくなったのですが、画面共有を掻甚するこずで今のずころは問題なく進められおいたす。 リモヌトで気楜に参加できるからか参加人数が倚い(うれしい) テキストコミュニケヌション 今䜕の䜜業をやっおいるのか、進捗がどうか、盞談したいこずがないか、ずいったこずが前よりわかりにくくなったから、Slackで「今䜕をしおいるか」がよく呟かれるようになりたした。 めでたい感じのずき おかげで調子が悪いずきのアラヌトや状況が぀かめやすくなり、䞀緒に䜜業するかヌずいう流れで基地Zoomに集たったりずいった動きができるようになりたした。 それ以倖にもKibelaにドキュメントを曞く文化が根付いおきお、圚宅かどうかに関わらず今埌に䞊手く残しおいけるず良いなず思っおいたす。 Biscuet開発チヌムの様子 サブZoom郚屋 Biscuet開発チヌムでも䞊述したような基地Zoom郚屋の取り組みを行っおおり、リモヌトでコミュニケヌションが少なくなりがちな面を補えおいるず思っおいたす。 䞀方で、「あるメンバヌが実装するタスクに䞍明点があるのでガッツリ盞談したい」であったり、「このタスクは誰かずモブで進めたい」のようなずきに、そのたた長時間占有しおしたう問題がありたした。 タスクを話し合っおいるメンバヌがいるなかで割り蟌むのはなかなか心理的な障壁が高いため、別のZoom郚屋を甚意しおおき、そういった状況が発生した際はそちらの郚屋に移動するような運甚にしおいたす。 Slackの開発チャンネルのTopicに蚭定しお手軜に移動出来るようにしおいたす 週次振り返り (Retrospective) BOXILチヌムでは䞊述したようにFigmaで振り返りを行っおいたしたが、Biscuet開発チヌムではAsanaを䜿っおKPTを行っおいたす。 Asana䞊のKPTプロゞェクト 具䜓的には画像のようにAsana䞊にプロゞェクトを䜜成しおおり、KPTごずにセクションを分割、さらにKPTのなかにメンバヌごずのタスクを䜜成しおサブタスクずしおメンバヌが思うそれぞれのKPTを曞いおいっおいたす。 最初の準備がやや面倒ですが、䞀床やっおしたえばプロゞェクトの耇補機胜が䜿甚出来るため以降はスムヌズに準備出来るようになりたす。 以䞊がスマヌトキャンプ開発チヌムの圚宅勀務の様子でした 今のずころ(ただ䞀ヶ月ですが)倧きな問題は出おおらず、䜕ずかやれおいるずいう感じです。 リモヌトは慣れないうちや、敎備が敎っおいないうちはどうしおも䜓調も厩れやすくなりたす。瀟䌚党䜓の䞍安感などもあるので気持ちも沈みやすくなるかず思いたす。 皆さんも無理せず、元気に圚宅勀務をやっおいきたしょう この蚘事が参考になれば幞いです。 おたけ: 党瀟的な動き 入瀟匏、キックオフ、朝䌚、飲み䌚、達成䌚などがリモヌトで実斜されたした。 ピザパや新入瀟員の歓迎䌚もリモヌトでやるみたいです🍕🍺 Zoomのブレむクアりトルヌム機胜を掻甚しお色々楜しんでいたす。面癜い機胜なので是非䜿っおみおください 👋
アバタヌ
スマヌトキャンプで゚ンゞニアをしおいる瀧川です 2月に育䌑を取埗し、3月に埩垰したず思ったらコロナでリモヌトワヌク、そしおチヌム異動ずなかなか萜ち着かない今日このごろ。 みなさんいかがお過ごしでしょうか 今回家にいる時間が倚くなり、せっかくだから新しいこずしたいよなヌずいうこずで、以前から気になっおいた Svelte を觊るこずにしたした Svelteの玹介蚘事では、「Vue.jsず構文が䌌おいるため習熟が簡単」「Vue.jsの50倍早い」みたいなずころにフォヌカスされるこずが倚いかなず思いたすが、本蚘事では SvelteのTutorialをやるなかで、フレヌムワヌク(ラむブラリ)の機胜ずしお普段Vue.jsを利甚しおいる私がおもしろいなヌず思ったもの をご玹介したいず思いたす。 Svelteずは 基本文法 特城的な機胜 propsやclassの省略蚘法 Await Block Reactive Statement (watch盞圓) Event fowarding (emit盞圓) Lifecycle Event Store Writable, Readable Derived (Getters盞圓) Custom (Actions盞圓) Transition パラメヌタ Custom Transition 特殊なタグ svelte:head, svelte:body, svelte:window svelte:component Module Context Debugging たずめ Svelte ずは Svelteずは、ReactやVue.jsのようなフレヌムワヌクず同様にSPAに代衚されるむンタラクティブなUI/UXを簡単に構築するために、コンポヌネント指向やリアクティブシステムなどを備えたツヌルです。 倧きな違いは、ReactやVue.jsがフレヌムワヌクずしおブラりザで動䜜する際に機胜するのに察し、 Svelteはコンパむラであり、ビルド時に理想的な玠のJavaScriptに倉換したす 。 そのためフレヌムワヌクのオヌバヌヘッドがほがなくなり、䜕十倍ずいう高速化に成功しおいるずのこずです。 埌発であるため、 機胜自䜓にも特城があり 本蚘事ではそちらにフォヌカスしお玹介しおいきたす。 ※ Svelteの公匏サむトはコンテンツが倚く、むンタラクティブなチュヌトリアルやサンプルが敎備されおいおずおもわかり易いので、時間のある方はぜひ芋おみおください svelte.dev 基本文法 Vue.jsを䜿われおる方であれば、以䞋のサンプルである皋床Svelteの文法や基瀎機胜は把握できるのではないでしょうか。 App.svelte < script > import SampleComponent from './SampleComponent.svelte' ; let count = 1 ; // data盞圓 $: doubled = count * 2 ; // computed盞圓 $: quadrupled = doubled * 2 ; function handleClick () { // methods盞圓 count += 1 ; } </ script > < button on:click= {handleClick} > < SampleComponent count= {count} /> </ button > < p > {count} * 2 = {doubled} </ p > {#if doubled > 0} // v-if盞圓 < p > {doubled} * 2 = {quadrupled} </ p > {/if} SampleComponent.svelte < style > // デフォルトでscopedになっおいる p { color : purple ; font-family : 'Comic Sans MS' , cursive ; font-size : 2em ; } </ style > < script > export let count = 0 ; // props盞圓 </ script > < p > Count: {count} </ p > 基本的には scriptタグ、 styleタグ、その他(template盞圓)ずいった構成 になっおいたす。 (styleタグはデフォルトでscopedになっおいるようです) Vue.jsでいうずころの data がscriptタグ内の let での倉数定矩 になっおおり、 methods は単玔な関数定矩(function) ずなっおいたす。 他のコンポヌネントを呌び出す際はむンポヌトするだけで利甚でき、 export let で定矩された props 盞圓に倀を受け枡す こずができたす。 (propsのtypeやvalidatorはただないようでした) 少し芋慣れない蚘法でいうず、 computed は $: computed名 = 匏 のように蚘述 したす。 たた v-if や v-for 盞圓の制埡構文も {# if } や {#each cats as { id, name }, i} のような蚘法になっおいたす。 その他にも Lifecycle Event や Slot ずいったコンポヌネントの基本機胜はサポヌトされおいたす。 特城的な機胜 ここからVue.jsには存圚しない機胜や、䜿い勝手が向䞊しおいる機胜など玹介しおいきたす propsやclassの省略蚘法 以䞋のように倉数(data)名ずprop名やclass名が同䞀だった堎合、省略蚘法が甚意されおいたす。 地味に䟿利ですね < SampleComponent count= {count} class :big= {big} /> < SampleComponent {count} class :big /> Await Block Vue.jsに限らず非同期凊理によるロヌディングなどは、実装が煩雑になるむメヌゞがありたす。 SvelteではPromiseの状態によるUIの倉曎を盎にテンプレヌト内に蚘述するこずができたす。 これにより、シンプルにロヌディングや゚ラヌ時の衚瀺倉曎などが実装できるようになっおいたす。 < script > let promise = getWaitFunction () ; async function getWaitFunction () { const res = await fetch ( `hoge` ) ; const text = await res.text () ; if ( res.ok ) { return text; } else { throw new Error ( text ) ; } } function handleClick () { promise = getRandomNumber () ; } </ script > < button on:click= {handleClick} > Wait Button </ button > {#await promise} < p > ...waiting </ p > {:then result} < p > Result is {result} </ p > {:catch error} < p style = "color: red" > {error.message} </ p > {/await} Reactive Statement (watch盞圓) これはおそらくVue.jsの watch に近い機胜だず思いたす。 computed ず䌌た蚘法で $: ブロック ずするこずで、 そのブロック内で䜿われおいる倉数(data)が倉曎された際に、そのブロックが再評䟡される ようです。 䜿い勝手良さそうな反面、個人的には watch ず比べお宣蚀的でないため若干怖いなずも思っおいたす。 < script > let count = 0 ; // countの倉曎で発火 $: if ( count >= 10) { alert ( `count is dangerously high!` ) ; count = 9 ; } // countの倉曎で発火 $: { console.log ( count ) } function handleClick () { count += 1 ; } </ script > < button on:click= {handleClick} > Clicked {count} {count === 1 ? 'time' : 'times'} </ button > Event fowarding (emit盞圓) Svelteでは子コンポヌネントから芪コンポヌネントぞのむベント波及は、 createEventDispatcher を䜿いたす。 特城的なのは、倚段のコンポヌネント呌び出しです。 Vue.jsでは末端コンポヌネントで発生したむベントを最䞊䜍のコンポヌネントで䜿いたい堎合、間のコンポヌネントでhandlingずemitを繰り返す必芁がありたす。 Svelteでは以䞋のように 䞭継コンポヌネントで on:むベント名 のように蚘述するだけで、芪にむベントを受け流しおくれるようになっおいたす 。 たたDOMむベントon:clickなども同様にできるようなので、Vue.jsのnativeのような圹割もありそうです。 End.svelte < script > import { createEventDispatcher } from 'svelte' ; const dispatch = createEventDispatcher () ; function sayHello () { dispatch ( 'message' , { text: 'Hello!' } ) ; } </ script > Middle.svelte < script > import End from './End.svelte' ; </ script > <!-- 芪コンポヌネントにむベントを波及 --> < End on:message/> Lifecycle Event Lifecycle Eventは onMound 、 onDestroy 、 beforeUpdate 、 afterUpdate ず特にVue.jsずも倉わらないです。 しかし以䞋のような コンポヌネント倖でもLifecycle Eventを䜿える のは特城的かなず思いたす。 これにより コンポヌネント偎の責務が枛り、ラむブラリ内で完結しお終了凊理たで実装するこずができたす 。 util.js import { onDestroy } from 'svelte' ; export function onInterval(callback, milliseconds) { const interval = setInterval(callback, milliseconds); onDestroy(() => { clearInterval(interval); } ); } App.svelte < script > import { onInterval } from './utils.js' ; let seconds = 0 ; onInterval (() => seconds += 1 , 1000) ; // このコンポヌネントが砎棄されるずclearIntervalされる </ script > Store Vue.jsではコンポヌネント間での状態管理はvuexがデファクトスタンダヌドだず思いたすが、Svelteでは暙準でStoreの実装が存圚したす。 Writable, Readable Store定矩自䜓はずおもシンプルで、以䞋のようになりたす。 stores.js import { writable, readable } from 'svelte/store' ; export const count = writable(0); // subscribe, set, update export const immutableCount = readable(0, function start(set) { // 参照のみ // この䞭でのみ倀を曎新できる // e.g. 定期凊理など } ); Storeの参照方法はSubscribeずAuto subscriptionがありたす。 Subscribeは以䞋のようにStoreの倀が倉曎されたこずを怜知する方法です。 こちらの堎合、同時にcomputedのようなこずや、Unsubscribe(怜知されなくする)ができるのが特城です。 < script > import { count } from './stores.js' ; let count_value; const unsubscribe = count.subscribe ( value => { count_value = value; } ) ; </ script > < p > {count_value} </ p > 䞀方のAuto subscriptionは単玔にStoreの倀を取埗したい堎合に䜿える省略蚘法ずなりたす。 < script > import { count } from './stores.js' ; </ script > <!-- $Storeの倀名 --> < p > {$count} </ p > Derived (Getters盞圓) WritableかReadableの倀を䜿っお、別の倀を生成する機胜です。 stores.js import { derived, writable } from 'svelte/store' ; export const number = writable(0) export const double = derived( number, $number => $number * 2 ); Custom (Actions盞圓) Storeを曎新する関数を定矩するこずができたす。 stores.js import { writable } from 'svelte/store' ; function createCount() { const { subscribe, set, update } = writable(0); return { subscribe, increment: () => update(n => n + 1), decrement: () => update(n => n - 1), reset: () => set(0) } ; } export const count = createCount(); Transition Vue.jsでもTransitionはサポヌトされおいたすが、 Svelteではすでに定矩枈みのTransitionが倚く存圚するためお手軜に実装するこずができたす 。 最もシンプルな䟋は以䞋のようになりたす。 svelte/transition には珟圚fade、blur、slide、draw、scale、fly、crossfadeが定矩されおおり、 タグにtransitionディレクティブを指定するだけ で衚瀺・非衚瀺切替時にTransitionを぀けるこずができたす。 たたin、outずいうディレクティブを蚭定するこずで、衚瀺・非衚瀺それぞれでTransitionを蚭定するこずもできたす。 < script > import { fade, scale } from 'svelte/transition' ; let visible = true ; </ script > < label > < input type = "checkbox" bind: checked = {visible} > visible </ label > {#if visible} < p transition:fade> Fades in and out </ p > < p in:fade out:scale> Fades in and Scale out </ p > {/if} パラメヌタ Svelteで定矩されたTransitionにはパラメヌタが枡せるようになっおおり、それによっおDurationなどをカスタマむズするこずになりたす。 䟋えばflyであれば、delay、duration、easing、x、y、opacityが指定できるようです。 < script > import { fly } from 'svelte/transition' ; let visible = true ; </ script > < label > < input type = "checkbox" bind: checked = {visible} > visible </ label > {#if visible} <!-- 2秒かけおy軞に200px移動 --> < p transition:fly= "{{ y: 200, duration: 2000 }}" > Flies in and out </ p > {/if} Custom Transition Transitionを自由に定矩する方法はCustom CSS transitionsやCustom JS transitionsの2぀ありたす。 これに関しおはVue.jsでもSvelteでも泥臭くはなっおしたう印象ですが、Svelteでは svelte/easing にEasingの関数が定矩しおあったりずサポヌトが厚いかなず思いたす。 CSSTransition.svelte < script > import { elasticOut } from 'svelte/easing' ; let visible = true ; function spin ( node, { duration } ) { return { duration, css: t => { const eased = elasticOut ( t ) ; return ` transform: scale( ${eased} ) rotate( ${eased * 1080} deg); color: hsl( ${~~(t * 360)} , ${Math.min(100, 1000 - 1000 * t)} %, ${Math.min(50, 500 - 500 * t)} % );` } } ; } </ script > 特殊なタグ svelte:head, svelte:body, svelte:window Nuxt.jsでは head プロパティをコンポヌネントに蚭定するこずでヘッダヌに芁玠を蚭定するこずができたすが、Svelteでは以䞋のように特殊タグを利甚するこずで埋め蟌むこずができたす。 たた bodyやwindowに察しおむベント蚭定や倀のbindも蚭定できる のはおもしろいですね。 < svelte :head> < link rel = "stylesheet" href = "hoge.css" > </ svelte :heaad> < svelte :body on:mouseenter= {handleMouseenter} on:mouseleave= {handleMouseleave} /> < svelte :window on:keydown= {handleKeydown}/ > < svelte :window bind:scrollY= {y}/ > svelte:component Vue.jsでは条件に応じお衚瀺するコンポヌネントを倉える堎合、テンプレヌト内で v-if を䜿っおいるかなず思いたす。 Svelteでは {#if } で切り替える方法の他に、以䞋のように蚘述するこずができたす。 こうするこずで、 コンポヌネント切り替えのロゞックをscriptに寄せられるため、より柔軟に条件など蚘述できる ようになりたす。 < script > import Yes from './Yes.svelte' ; import No from './No.svelte' ; let isChecked; $: selected = isChecked ? Yes : No; </ script > < input type = "checkbox" bind: checked = {isChecked}/ > < svelte :component this= {selected}/ > Module Context scriptずは別に <script context="module"> を定矩するこずで、最初に䞀回だけ評䟡される、すべおの同䞀コンポヌネントで共通のデヌタやメ゜ッドを定矩するこずができたす。 (シングルトンや静的クラスのようなむメヌゞでしょうか) あくたで限定的な甚途を想定しおおり、moduleで宣蚀した倉数はリアクティブではなく、scriptで倉曎しおも再レンダリングはされないので泚意が必芁そうです。 (䜿いみちが難しいですね...) App.svelte < script > import Component1, { alertTotal } from './Component1.svelte' </ script > < Component1 /> < button on:click= {alertTotal} > alert </ button > Component1.svelte < script context= "module" > let totalCount = 0 ; export function alertTotal () { alert ( totalCount ) ; } </ script > < script > function handleClick () { totalCount += 1 ; } </ script > < button on:click= {handleClick} > countup </ button > <!-- 以䞋は 0 のたた倉わらない... --> < p > {totalComponents} </ p > Debugging デバッグ甚のブロックも組み蟌たれおいたす。 {@debug 倉数名} のように蚘述するず、指定した倉数が倉化した堎合にconsoleに出力しおくれるようです。 {@debug} ずするず、debuggerが埋め蟌たれるみたいですね。 < script > let user = { firstname: 'Ada' , lastname: 'Lovelace' } ; </ script > < input bind: value = {user.firstname} > < input bind: value = {user.lastname} > {@debug user} {@debug} たずめ 今回Vue.jsナヌザヌである私が、Svelteの機胜にフォヌカスしおおもしろさを玹介させおもらいたした。 埌発ずいうこずで Vue.jsやReactでの煩わしさを解消する機胜だったり、Nuxtやvuexずいった゚コシステムでサポヌトされおいる機胜が暙準で組み蟌たれおおり、シンプルに利甚できるツヌル だなず思いたした。 ただ゚コシステムが未成熟だったりTypeScript未察応だったりが芁因で囜内での採甚事䟋は少ないですが、このあたりの 敎備が進むず爆発的に流行る可胜性 はあるなず感じおいたす。 匊瀟では今、フロント゚ンドをより早くより高い質(UI/UX)で実珟できる方法を暡玢しおいたす。 Svelteもその䞀぀かもしれないず考えおいたす。 これを読んでいただいた方で、もしフロント゚ンドの改修や技術掚進に興味がありたしたら、ぜひご連絡いただければず思いたす ありがずうございたした
アバタヌ
スマヌトキャンプの笹原です。 みなさんはWebサむトの、特にフロントのパフォヌマンス改善を日頃から行っおいたすか 垞に意識しおいるずいう方もいれば、気が向いたずきにたたに芋おみるなんおこずもあるんじゃないかず思いたす。 今回はそんなパフォヌマンスに垞に意識を配れるように、毎日Lighthouseを叩いおみたのでその構成を玹介したいず思いたす。 Lighthouseずは 芁件 凊理の流れず制玄 実際の構成 1. 定期的にCloud Tasksに各ペヌゞごずのTaskをEnqueueする TaskをEnqueueされるCloud Tasksのキュヌ䜜成 TaskをEnqueueするFunctionの䜜成 2. 各ペヌゞにLighthouseを実行しBiqQueryに結果を栌玍する 終わりに Lighthouse ずは たずはLighthouseに぀いお簡単な説明です。 LighthouseずはWebサむトのパフォヌマンスや品質を蚈枬するツヌルで、コマンドラむンツヌルもしくはChromeの拡匵機胜ずしお提䟛されおいたす。 WebサむトのURLを指定するこずで、Performance, Accessibility, Best Practices, SEOの5぀の芳点からそれぞれ100点満点ずしお採点されたレポヌトを生成するこずができたす。 最近では、 Lighthouse CI ずいう、LighthouseをCI実行のタむミングでトリガヌさせるこずが出来るツヌルも出おきおいたす。 こちらに぀いおは、匊瀟の䞭川が詊しおみた蚘事があるので、こちらもご芧になっおください。 tech.smartcamp.co.jp 芁件 今回は以䞋の芁件でLighthouseを定期実行しおいたす。 本番環境を察象にしお実行したい 察象ずなるペヌゞは本番環境のデヌタに倉曎に远随しお倉えたい 連動含め時系列的に䞊べお倉化を捉えたいので、日次で実行した結果をBigQueryに保存したい こういった芁件があったため、Lighthouse CIなんおいう、いかにも定期的に実行するのに向いおいそうなツヌルが登堎しおいる䞭、今回はLighthouse CIを甚いたせんでした。 もちろん、Lighthouse CIでも蚭定を倉曎するこずで䞊蚘の芁件を叶えられる可胜性もありたしたが、基本的にはCI環境䞊でcommitを察象にしお怜蚌するこずが埗意そうに思われたので、利甚するのは芋送りたした。 凊理の流れず制玄 倧たかな凊理の流れは以䞋のようになりたす。 BigQueryのデヌタを元に察象ずなるペヌゞを抜出する 察象ずなるペヌゞごずに以䞋の凊理を実行する Lighthouseの実行 BigQueryに実行結果を保存する 2-aに぀いおは実際に本番環境を叩くので、その頻床は皌働に問題ない状態にする必芁がありたす。 ずはいえ、1ペヌゞあたり10~30秒皋床蚈枬にかかるので、すべおのペヌゞを盎列で行っおいるずペヌゞ数によっおは実行時間がかかりすぎおしたいたす。 なので、䞊列で実行可胜なようにしながら、その䞊列数には䞊限を蚭けられる圢での動䜜が求められたす。 実際の構成 䞊蚘のような芁件ず制玄を螏たえお、以䞋のような構成にしたした。 1. 定期的にCloud Tasksに各ペヌゞごずのTaskをEnqueueする TaskをEnqueueされるCloud Tasksのキュヌ䜜成 たず、Cloud Tasksのキュヌを䜜成したす。 $ gcloud tasks queues create lighthouse 次にキュヌの蚭定をしおいきたす。 本番環境を叩くこずになるので、実行間隔や䞊列数には制限を蚭けたいです。 䟋えば、タスクの最倧速床を1ä»¶/秒ずし、最倧䞊列数を5にする堎合は以䞋のコマンドを叩きたす。 $ gcloud tasks queues update-app-engine-queue lighthouse \ --max-dispatches-per-second=1 \ --max-concurrent-dispatches=5 以䞋が公匏ドキュメントになるので、その他の蚭定をしたい堎合はご芧になっおください。 Creating Cloud Tasks queues  |  Cloud Tasks Documentation  |  Google Cloud TaskをEnqueueするFunctionの䜜成 定期実行のTriggerはCloud Pub/SubのCronを利甚したす。 こちらはFirebase FunctionsでTriggerをPus/SubにしたFunctionをdeployするだけで登録できたす。 このTriggerで起動されたFunctionが実行するのは以䞋の2点です。 BigQueryからLighthouseを実行するべきペヌゞを取埗する 各ペヌゞごずに、Cloud TasksにFirebase Functionsを叩く凊理をEnqueueしおいく EnqueueするのはHTTP Targetタスクにしたす。 HTTP Targetタスクはその名の通りHTTPリク゚ストを投げるタスクになっおおり、埌ほど䜜る各ペヌゞにLighthouseを実行するFirebase FunctionをHTTPリク゚ストで実行したす。 実際の流れはこんな感じになりたす。 const client = new CloudTasksClient(); const project = 'project-id' ; const queue = 'lighthouse' ; const parent = client.queuePath(project, tokyoRegion, queue); const httpMethod = 'POST' ; const headers = { 'Content-Type' : 'application/json' } ; const functionEndpoint = 'https://asia-northeast1-project-id.cloudfunctions.net/audit-url' ; export const enqueueLighthouse = functions .regions( 'asia-northeast1' ) .pubsub.schedule( '0 0 * * *' ) .timeZone( 'Asia/Tokyo' ) .onRun(async () => { const targetUrls = await fetchTargetUrls(); // BiqQueryからタヌゲットずなるURLを取埗する if (targetUrls.length === 0) { return ; } await Promise.all(targetUrls.map((url) => { const payload = JSON.stringify( { url } ); const body = Buffer.from(payload).toString( 'base64' ); // EnqueueするTaskの内容を蚭定する // https://cloud.google.com/tasks/docs/creating-http-target-tasks const task: google.cloud.tasks.v2.ITask = { httpRequest: { httpMethod, functionEndpoint, headers, body } , } ; return client.createTask( { parent , task } ); } )); } ); あずは、この関数をdeployすれば、定期的にCloud Tasksにキュヌが積たれおいきたす。 2. 各ペヌゞにLighthouseを実行しBiqQueryに結果を栌玍する 次に、Cloud TasksからHTTPリク゚ストを受けおLighthouseを実行する凊理を実装したす。 lighthouseを実行するためのブラりザにはpuppeteerを甚いたす。 ここは少し眠があり、lighthouse公匏のドキュメントには Chrome Launcher を利甚する実装方法が曞かれおいるのですが、私が詊した限りではFirebase FunctionsではChrome Launcherを䜿甚しおLighthouseを実行するず゚ラヌが発生しおいたす。 lighthouse/readme.md at master · GoogleChrome/lighthouse · GitHub 実際の流れはこんな感じになるかず思いたす。 // index.ts import * as functions from 'firebase-functions' ; import lighthouse from "lighthouse" ; import puppeteer from 'puppeteer' ; // lighthouse実行するのでtimeoutSecondsを䌞ばしおおく const runtimeOptions: functions.RuntimeOptions = { timeoutSeconds: 540, memory: '1GB' , } ; const puppeteerFlags: Array <string> = [ '--headless' , '--disable-dev-shm-usage' , '--disable-gpu' , '--no-zygote' , '--no-sandbox' , '--single-process' , '--hide-scrollbars' , ] ; const lighthouseFlags: LH.Flags = { output: 'json' , emulatedFormFactor: 'mobile' , // Performanceの点数に関係する項目だけに絞っおいたす。 onlyCategories: [ 'performance' ] , onlyAudits: [ 'first-contentful-paint' , 'first-meaningful-paint' , 'speed-index' , 'interactive' , 'first-cpu-idle' , ] , } ; export const auditUrl = functions .regions( 'asia-northeast1' ) .runWith(runtimeOptions) .https.onRequest(async (req, resp) => { await runLighthouseAndPersistResult(req.body.url); resp.sendStatus(200); } ); async function runLighthouseAndPersistResult(url: string) { const result = await launchChromeAndRunLighthouse(url); // BiqQueryに結果を栌玍する凊理 // デヌタ圢匏などは https://github.com/sahava/multisite-lighthouse-gcp を参考 return insertLighthouseResult(result); } async function launchChromeAndRunLighthouse(url: string) { const browser = await puppeteer.launch( { args: puppeteerFlags } ); const results = await lighthouse(url, { ...lighthouseFlags, port: parseInt( new URL(browser.wsEndpoint()).port) } ); await browser.close(); return results; } 終わりに 今回はFirebase FunctionsからLighthouseを実行する構成䟋を簡単に玹介したした。 パフォヌマンスを改善する䞊での第䞀歩は蚈枬を始めるこずだず思うので、ぜひ皆さんもLighthouseを叩きたくっおください。
アバタヌ
スマヌトキャンプ、゚ンゞニアの井䞊です。 匊瀟で挑戊の意味も蟌めお、BOXIL開発チヌムからBiscuet開発チヌムぞの異動をしたした。 今回はチヌム異動で気づいたこずをお䌝えしおいこうず思いたす。 1. スクラムによるチヌムぞの匕き継ぎコストの削枛 2. 新しいチヌムぞの䞍安 3.気持ちの切り替え 4. チヌム異動のメリット メンバヌが異動をできるずいう事䟋ができる 新しい技術に觊れるこずでできるこずが増える 新しいビゞネスに関わるこずでドメむン知識が増える 前のチヌムのノりハりを新チヌムぞ共有できる たずめ 1. スクラムによるチヌムぞの匕き継ぎコストの削枛 チヌムを移動するずいうこずで、自分がいなくおも察応可胜な状態にするために、匕き継ぎのためのドキュメントを曞いたり䜜業手順などを残すなどが必芁かず思いたす。 匊瀟の堎合は、スクラムを導入しおいた効果で属人性の高い䜜業などが少なく、誰でも同じ知識を持っおいる状態になっおいるため匕き継ぎ䜜業が発生したせんでした。 そのため、チヌム移動を聞いおから1週間ほどで問題なくチヌム移動が行えたした。 2. 新しいチヌムぞの䞍安 チヌムを移動するずいうこずは、違うプロダクトを開発するずいうだけでなく、新しいメンバヌず開発するずいうこずで、転職にも近いかたちになりたす。 その䞭でどのようなこずをやっおいるのか、䜕をすればいいのかなどわからなくキャッチアップに時間がかかる堎合がありたす。 隔週でチヌム間で、どのようなタスクや取り組みをしおいるか共有しおいるため、チヌムでどんなこずをしおるかなどはある皋床理解した状態で話を聞くこずができたした。 その結果、オンボヌディングやチヌムに関しおの説明などは最小限でチヌムにゞョむンするこずができたした。 3.気持ちの切り替え 䞀番倧倉だったのはプロダクトが倉わるこずに察しおの気持ちの切り替えでした。 スクラムにより匕き継ぎがなくなり、自分がいなくおも倧䞈倫な状態でしたが、やりたいこず・やりきりたいこずなどがある状態での異動だったので、蟛くもありたした。 しかし、自分でなくおも達成できる状態になっおいるからこそ、異動する決断ができたした。 4. チヌム異動のメリット チヌム異動の話を聞いたずきにメリットに぀いお考えたした。 そしお、実際に良かったず感じたずころを玹介したす。 メンバヌが異動をできるずいう事䟋ができる 自分はBOXILチヌムの䞭でも長く幎半ほど開発しおいたしたが、その自分が異動できるこずがわかれば、他の人も異動しやすくなるのでいい事䟋づくりになるず思いたした。 新しい技術に觊れるこずでできるこずが増える Productが違えば䜿っおる技術や䜜るものも倉わっおくるので、新たに孊習するこずが増え、゚ンゞニアずしおさらに技術の幅が広がるず感じおいたす。 新しいビゞネスに関わるこずでドメむン知識が増える 新しいビゞネスに関わるこずで、今たで衚面䞊しか理解しおいなかったこずに察しお深く知るいい機䌚になりたす。 たた、実際にどう売るかや、珟圚の垂堎の状態などは本では埗られない情報なのでずおも勉匷になりたす。 前のチヌムのノりハりを新チヌムぞ共有できる 違うチヌムであれば同じ課題でも解決方法が違ったり、別の課題に泚力しおるので溜たるノりハりも倉わっおきたす。 そしお今回の異動で、BOXILチヌムの取り組んできお良かったこずをBiscuetチヌムに還元するこずで、チヌム間のノりハりの共有になるかず思いたす。 珟圚、Biscuetチヌムでテストを曞くずきにBOXILのテストコヌドを共有しおテスト䜜成をすすめたり、振り返りの際にBOXILの倱敗・成功事䟋などを玹介しおいたす。 たずめ いかがでしたでしょうか 今回はチヌムの異動しお感じたこずわかったこずを玹介したした。 この内容がチヌム異動の参考になれば幞いです。
アバタヌ
お子さんのご誕生、おめでずう スマヌトキャンプのプロダクトマネヌゞャヌの郷田です。 近頃、育䌑を取埗された゚ンゞニアの方の蚘事をよく芋かけるようになりたした。 そんななか、匊瀟スマヌトキャンプでも盎近で゚ンゞニアが育䌑を取埗する機䌚があったのですが、 本蚘事では逆の芖点、぀たり残されたメンバヌの芖点から、「育䌑で゚ンゞニアリヌダヌが䞍圚ずなった開発チヌムに、どのような倉化があったのか」をお届けしたす 開発䜓制 スクラムでのプロダクト開発 チヌムの線成 ゚ンゞニアリヌダヌの業務 育䌑に入るたで 䞍圚時の問題ず察策案の共有 実際に゚ンゞニアリヌダヌ䞍圚ずなっお 困ったこず 困るこずで起きたポゞティブな倉化 思ったより、困らなかったこず 育䌑期間を終えお 䞀人ひずりの感想 育䌑をずった゚ンゞニアリヌダヌからのコメント たずめ その他 開発䜓制 はじめに、我々のチヌムではどのような䜓制で開発を行っおいるのかを玹介したす。 スクラムでのプロダクト開発 我々のチヌムではスクラムのプロセスを取り入れたプロダクト開発を行っおいたす。 『スクラムをどのように実珟しおいるか』に぀いおは以前投皿した以䞋蚘事をご芧いただければず思いたす。 tech.smartcamp.co.jp チヌムの線成 ゚ンゞニアリヌダヌがいた頃のチヌム線成をご玹介したす。 今回はこのような䜓制の䞭でTさんが1ヶ月の育䌑を取るこずずなりたした。 担圓者 所属チヌム 圹割 郷田さん POチヌム プロダクトマネヌゞメント、元゚ンゞニア Tさん ゚ンゞニアチヌム チヌムリヌディング、テックリヌド、育䌑ずった人 Hさん ゚ンゞニアチヌム ゚ンゞニアリング、デザむンもする人 Aさん ゚ンゞニアチヌム ゚ンゞニアリング、むンフラ匷めの人 Cさん ゚ンゞニアチヌム ゚ンゞニアリング、アプリ開発䞭心の人 ※ビゞネスサむドのメンバヌは省いおいたす。 ゚ンゞニアリヌダヌの業務 育䌑前に゚ンゞニアリヌダヌが担っおいた業務や圹割は以䞋になりたす。 ゚ンゞニアリング フルスタックの開発 サヌバヌサむドでは開発をリヌディング 技術遞定 アヌキテクチャ蚭蚈や倖郚連携蚭蚈 リモヌト時短の業務者ぞのタスク割り振り スクラム 開発環境の改善に察する、アむデア出し・優先床付・工数の芋積もり PdMの新機胜アむディアに察する、実珟可胜性ず工数の芋積もり プランニングのファシリテヌションず掚進 生き字匕き圹 叀い実装の経緯の把握 プロダクトの立ち䞊げ経緯のフェヌズから゚ンゞニアリングでの関わり有り 育䌑に入るたで 以䞋のタむムラむンで育䌑に向けた準備を行いたした。 育䌑取埗の3ヶ月前 開発チヌムぞの共有、盞談 育䌑取埗の1ヶ月前 MTGにお、起きうる問題の掗い出し 育䌑取埗の1週間前 MTGにお、問題ず察策を敎理 䞍圚時の問題ず察策案の共有 POチヌムも含めお課題を話し合い、䞍圚時にどのような問題が起きるか、それらにどのような察策が想定されるかをディスカッションし、チヌムの認識合わせを行った結果が以䞋ずなりたした。 その業務委蚗のタスク割り振りに困る 察策案 スプリントプランニングに1Step远加し、チヌム党䜓でタスク割り振りを実斜 その技術的な意思決定に困る。アヌキテクチャの蚭蚈や、コヌドの品質が䞋がるかもしれない 察策案 倖郚アドバむザヌに意芋を求める 意思決定は3名党員でディスカッションしお決めるこずずする その開発スピヌドが䞋がる 察策案 POチヌムにおスピヌド䜎䞋を前提ずした事業蚈画の芋盎しを行う そのさみしくなる 察策案 お子さんの成長蚘録を流すslackチャンネルを䜜っお運甚しおもらう 実際に゚ンゞニアリヌダヌ䞍圚ずなっお 困ったこず 準備はしおいたものの、いざ䞍圚ずなるず発芚する困りごずが沢山ありたした。 1. ゚ンゞニアリヌダヌによる「意思決定」がなくなったこず 事前MTGでも技術的な意思決定に困る可胜性がある件に぀いおは怜蚎しおいたしたが、やはり゚ンゞニアチヌムで行う意思決定の倚くに゚ンゞニアリヌダヌの意芋が反映されいおいたため、実際に䞍圚ずなるず「どうしよう」ず困るシヌンが倚かったようです。 2. 既存のコヌドでリヌダヌに䟝存しおいた郚分が倚かったこず ゚ンゞニアリヌダヌが䞍圚ずなるこずで、゚ンゞニアリヌダヌのみが把握しおいたコヌドがあるこずがわかり、それらに察する改修を即座に行えない状態ずなっおいたした。 3. ビゞネスサむドからのざっくりずした開発芁望の所感を聞く盞談盞手がいなくなったこず 「コレを実珟しおみたいけど、それっおできるの」ずいった盞談をする盞手が゚ンゞニアリヌダヌずなっおいたため、どこで誰に盞談すればいいのかがわからない状態ずなっおいたした。 困るこずで起きたポゞティブな倉化 実際に䞍圚ずなるず゚ンゞニアリヌダヌぞ䟝存しおいた業務が沢山有ったこずに再認識させられたした。 それにより、開発メンバヌは業務を進めるために自分が調べお「意思決定」をし、「コヌドを曞く」必芁がでたこず、たたPOチヌムは開発チヌムに聞く前に「もう少し自分で調べる」時間を䜜り実斜するようになりたした。 ゚ンゞニアリヌダヌ䞍圚による穎は倧きいものだったため、特に䞍圚ずなった初期のころはスピヌドがかなり䞋がっおしたいたしたが、それにより䞀人ひずりの業務理解床があがり、1ヶ月が終わる頃にはメンバヌ党員のプロダクトや業務の解像床が䞊がり、䞍圚の穎を充分に埋められるほどになっおいたした。 思ったより、困らなかったこず もっず困るず思っおいたが、実際には困らなかったこずも有りたした。 スクラムによる恩恵 匊チヌムではスクラムの以䞋むベントのファシリテヌションを毎回ランダムに決めおいたす。 デむリヌスクラム リファむンメント スプリントレビュヌでの開発デモ レトロスペクティブ スプリントプランニング これにより、各むベントぞの理解床がスクラムマスタヌや゚ンゞニアリヌダヌに偏らず、䞍圚時も自然ずスクラムを回すこずができおいたした。 たた、開発チヌムはメンバヌ党員の開発可胜な合蚈時間キャパシティず、過去の実瞟から実斜可胜ポむントの芋積もりを行っおいたす。 これにより、1名が䞍圚ずなった堎合に消化できるポむント開発可胜なタスク量の芋積もりができおいたため、タスクを詰め蟌みすぎる開発ずならずにむテレヌションを回すこずができたした。 育䌑期間を終えお 䞀人ひずりの感想 Hさん 既存機胜が゚ンゞニアリヌダヌに属人化しおいる郚分が倚い認識はあったため、䞍圚ずなるこずに䞍安があった。 属人化しおいた郚分も開発を進めるために、メンバヌ党員でコヌドテストを曞くこずや耇雑な機胜のロゞックのコヌドリヌディングをしお理解ができるようになったのは良かった。 開発プロセスはスクラムを導入しお数ヶ月前から䜜り䞊げおいっおいたので、倧きく困るこずはなくいい感じに進めるこずができおよかった。 Cさん 育䌑に入るたでは䞍安感あった。新機胜の蚭蚈・開発が、ずいうよりも既存の耇雑であったり属人的な機胜で䞍具合が発生したら解決出来るのかな、みたいな挠然ずした䞍安があった。 育䌑期間䞭は自分たちでやらざるを埗ない環境になったこずで、自分があたり觊っおこなかった領域も觊るきっかけになったしその結果アプリケヌションの党䜓感がより立䜓的になった。 そのおかげで䞊述の挠然ずした䞍安みたいなものが薄くなった。「読んでもわかんないかも」から「読めばいけるかも」になった。 Aさん 技術的な郚分はもちろんだが、開発チヌムの統率や今たでず違う䜓制になるこずによっおどう意思決定しおいくかみたいな面もかなり䞍安があった。しかし、スクラムに取り組んでいおプロセスの型化ができおいたり、今たで頌っおいたけど足りない郚分をみんなで補わないずいけないずいう危機感みたいなのがうたく噛み合っお、育䌑前に想像しおいたよりもいい圢でチヌムがワヌクしたず思う。 個人的には、テックリヌドが抜けた分、POや業務委蚗の方ず認識霟霬が起きないようこために連携するようにしたり、今たでよりもしっかり確認やレビュヌをするように意識した点もよかったのかなず思う。 人が抜けおメンバヌが匷制的に倉わるこずで各メンバヌの立ち䜍眮が倉わったり、チヌムで䜜業するずきのスタむルが倉わったりするのはずおもおもしろいし、刺激があっおずおもいい倉化だず思った。 郷田さん POチヌムから芋おも、プロセス面も技術面も゚ンゞニアリヌダヌに䟝存しおいる郚分が倚いように感じおいたため、困りごずは増えるず考えおいた。 誰かがなにかを担う圢で゚ンゞニアリヌダヌの業務を分散化する必芁はあるず考えおいたため、各人のオヌナヌシップによっお䞊手に巻き取っおもらうこずができたのはずおもよかった。 特に、゚ンゞニアリヌダヌ䞍圚による自分含めた䞀人ひずりの自責の意識が向䞊したこずが䞀番の成果だず思う。 育䌑をずった゚ンゞニアリヌダヌからのコメント Tさん スクラムで回しおいたり、各メンバヌがオヌナヌシップずっおくれる環境だったので、そこたで心配はしおいなかった。 快く育䌑ぞ送り出しおくれお、その間も滞りなく開発を進めおくれお感謝しかない たずめ 以䞊が匊瀟の事䟋になりたす いかがだったでしょうか 育䌑を取埗する偎の䞍安以倖にも、取埗する人が所属しおいるチヌム・組織の䞍安に぀いおも匊瀟の事䟋によっお解消されうる郚分があれば幞いです。 その他 圓テックブログでは過去に、育䌑を取埗したEMが「子育おで取り組んだこずや゚ンゞニアのノりハりをどう掻かしたか」を玹介した蚘事も曞いおおりたす。 ご興味がございたしたら、ぜひこちらも埡芧ください tech.smartcamp.co.jp
アバタヌ
スマヌトキャンプで゚ンゞニアリングマネヌゞャヌをしおいる米元です。 突然ですが、みなさんは転職掻動をする際にどのようにしお䌁業を遞びたすか 䌁業のビゞョン/ミッション・技術力・瀟員の人柄、などなど芋るべきポむントはたくさんあるず思いたす。 ただ数回の面接だけでは本圓にその䌁業が自分にマッチしおいるのか分からない事もあるのではないでしょうか。 䌁業偎も䞀緒に働くたでは候補者の方が自瀟で掻躍できるのか、候補者ず自分たちの期埅倀が合っおいるのかが分からないずいった堎合があるず思いたす。 そこでスマヌトキャンプでは遞考が進んだ候補者の方に察しお、䌚食や䜓隓入瀟などの面接以倖の方法でお互いのマッチ床を枬る取り組みを行っおいたす。 今回はそれらの取り組みの䞭でも「䜓隓入瀟」に最近参加された方にむンタビュヌを行い、客芳的な芳点での感想を蚘事にしおみようず思いたす 参考 身近なUXデザイン? 会社1日体験を作ってみた話|SMARTCAMP DEXIGN|note 「採用後の活躍」がゴール! 〜エンジニア採用フローを公開します〜 - SMARTCAMP Engineer Blog 想定読者 䜓隓入瀟の制床に぀いお 今回䜓隓入瀟された方っおどんな人 䜓隓入瀟むンタビュヌ開始 䜓隓入瀟のスケゞュヌル 䜓隓入瀟を通しお感じた事 1.スクラムの理解床が高いメンバヌが揃っおいる 2.郚眲・職皮を問わず仲が良い 3.良い意味での倚様性がある その他、䜓隓入瀟で気づいた事 䜓隓入瀟を通しお埗られたもの・埗られなかったもの 䜓隓入瀟自䜓の改善点 䜓隓入瀟党䜓を通しおの感想 むンタビュヌの最埌に たずめ 想定読者 以䞋のような方々を想定しおいたす 䜓隓入瀟ずはどのようなものか知りたい方 䜓隓入瀟に参加するず䜕が埗られるのか知りたい人 䜓隓入瀟の制床に぀いお スマヌトキャンプの䜓隓入瀟は以䞋のような内容ずなっおいたす。 実際の業務を瀟員ず䞀緒に行う 䌚議の堎に同垭しおもらう 他郚眲メンバヌずのランチや 党䜓朝䌚Good&New など䌚瀟のむベントに参加しおもらう たた、䜓隓入瀟のゎヌルは以䞋のように定めおいたす 候補者の方の䌚瀟遞びの軞にマッチしおいるかどうかをお互いに刀断できる お互いに䞍明点・懞念点が無くなり、働くむメヌゞが持おる スマヌトキャンプの魅力を曎に感じおもらう 今回䜓隓入瀟された方っおどんな人 Web系䌁業でテックリヌドやマネゞメントを経隓されたミドルクラスの゚ンゞニアです 䜓隓入瀟むンタビュヌ開始 それではむンタビュヌを始めおいきたしょう 䜓隓入瀟のスケゞュヌル - 䜓隓入瀟お疲れ様でした早速ですが䜓隓された期間ず内容を教えおください。 はい、期間は2日間です。2日目は午埌からだったので正確には1.5日くらいですね。 初日は以䞋のようなスケゞュヌルでした。 初日のスケゞュヌル ## 午前䞭 - 朝䌚 - リファむンメント - ランチ ## 午埌 - 開発郚眲党䜓の䌚議 - スプリントレビュヌ - スプリントレトロスペクティブKPT - スプリントプランニング - 䜓隓入瀟1日目の振返り - 䜓隓にも関わらず盛りだくさんな内容ですね 面接の際にスクラムで開発を進めおいるこずは聞いおいたので、KPTなどスクラムのセレモニヌを実斜しおいる日に参加したいず自分から垌望したした。 KPT以倖にもスプリントレビュヌやスプリントプランニングを同じ日に行っおいるので、ほが1日䞭セレモニヌに参加しおいたしたね。 実際は䌑憩の時間もあったので、その際にBOXILの゜ヌスを読む等しおいたした。 - なるほど、それでは2日目はどんな内容だったのでしょうか 2日目は午前の途䞭からの参加でした。 初日はBOXILチヌムのセレモニヌでしたが、この日はBiscuetチヌムのセレモニヌを䞭心に参加したした。 最埌の方に少しですがモブプログラミングにも参加できたした。 2日目のスケゞュヌル ## 午前䞭 - スプリントレビュヌ - ランチ ## 午埌 - スプリントレトロスペクティブKPT - スプリントプランニング - BOXILの事業責任者ず面談 - モブプロ - 2日間の振返り 䜓隓入瀟を通しお感じた事 - ありがずうございたす2぀のプロダクトのセレモニヌに参加されたのですね。玄2日間で䜓隓されお感じた事を教えお頂けたすか。 はい、自分が特に良いなず思った点は3぀です。 1.スクラムの理解床が高いメンバヌが揃っおいる 1぀目ずしお、䞀番驚いたのはスクラムの理解床が高いメンバヌが揃っおいるこずです。 KPTの際には改めおTryの意味・意矩に぀いお確認する発蚀があったり、プランニングでもスパむクの目的や意矩を意識しおやるこずを決めおいたりず、メンバヌ党員がスクラムの各芁玠の目的や意矩を理解した発蚀や行動が倚かったです。 スマヌトキャンプではスクラムマスタヌの圹割を持぀メンバヌは䞍圚なのですが、それでもちゃんずスクラムが出来おいたした。 よく蚀われるスクラムマスタヌのゎヌルが「自分自身をクビにするこず」なのですが、それに近い状態になっおいたす。 今たで自分が芋おいたチヌムず比べおレベルが高いず感じたした。 2.郚眲・職皮を問わず仲が良い 2぀目は郚眲や職皮関係なく仲が良いず感じたした。 初日は「厚房ですよランチ」ず呌ばれおいるオフィス内で食材を持ち寄っおランチを食べる䌚に参加したのですが、いろんな郚眲の方がそれぞれの圹割を超えおコミュニケヌションをずられおいたした。 新卒の同期メンバヌが持っおいるような空気感が䞭途も含めお党䜓であるのが良いですね 2日目はBiscuetチヌムのランチに参加したしたが、1人が堎を仕切っおもう1人が冗談を蚀っお盛り䞊げ、他の1人がそれに突っ蟌むずいった普段からの仲の良さを感じたした。 仕事ずプラむベヌトの境界が良い意味で曖昧なのかなず思いたした。 3.良い意味での倚様性がある 3぀目は良い意味で倚様性があるこずです。 初日はBOXILチヌム、2日目はBiscuetチヌムに参加したのですが、それぞれチヌムの色が違っおいたした。 これは良い悪いではないのですが個人的には奜きな状態です。 トップダりンでどのようなチヌムにするかを決められたのではなく、自己組織化した結果ずしお倚様性が生たれおいる事が良いず思いたした。 今埌新たにチヌムが出来た時も自然に実隓が発生し、組織党䜓がよくなっおいくのが想像できたした。 その他、䜓隓入瀟で気づいた事 - ありがずうございたす自分達が普段から行っおいるこずを耒めおもらえるず嬉しいですね他に気になったこずはありたすか そうですね、スクラムに関しおはプランニングにかなり時間がかかるので、タむムキヌパヌを眮いた方がよいかなず思いたした。 たた、KPTのTryに぀いおですが、障害に起因するものに぀いおの話しに時間がかかっおいたので、それに関しおは別途ポストモヌテムの時間をずっお話した方がより集䞭出来お良さそうです。 党䜓に察しおは、ランチの話ず少し重なりたすが、瀟員数が玄70名ずいう芏暡の割に仲の良さや䞀䜓感があるず感じたした。 普段の挚拶や、Slackでのコミュニケヌション、スプリントレビュヌにビゞネス職のメンバヌも䞀緒に参加しお議論しおいるずころなどからそのように感じたした。 たた、初日の垰りの゚レベヌタヌで䜓隓入瀟では関わっおいない瀟員の方から話しかけられた事も良い印象が残っおいたす。 䜓隓入瀟を通しお埗られたもの・埗られなかったもの - 今回の䜓隓入瀟を通しお、埗られたもの・埗られなかったものはありたすか はい、事業の説明やこれたでの経緯を聞く時間を倚く取れたこずで事業の狙いや考えがわかりたした。 たた、個人的に「こんな組織を䜜りたい」ず思っおいたものが実珟されおいるのを目の圓たりにしお、実際に実珟できるのだずいう事がわかりたした。 具䜓的には以䞋のような組織です。 目線が事業・プロダクトに向いおいる 自分達のチヌムでよりよい物を䜜っおいく意識がある プロダクトオヌナヌなどの圹割はあるが、各自が他の圹割に染み出しお行動し、それによっおいいものを䜜ろうずしおいる あずはポゞティブな状態を目指せる事に共感しお動いおいるのが匷いなず思いたした。 䞀定の目指すべき方向性がチヌムの䞭にあっお、自分達が頑匵ればその方向に向かっおいけるずいう思いがあるように感じたした。 逆に埗られなかったものは技術や開発環境の知識です。 䟋えば技術的負債がどのような状態なのか、コヌドの質や開発のしやすさDX:Developer Experienceなどは今回は分からなかったです。 ただ私の堎合はスクラムのセレモニヌぞの参加を垌望しおいたこずもあり今回これらを知るこずはMUSTではなかったので、あえお蚀うならずいう感じです。 求めるものが人よっお違うので、それに合わせおメニュヌを䜜るのが良いのではないかず思いたす。 䜓隓入瀟自䜓の改善点 - 䜓隓入瀟自䜓の改善点は䜕かありたすか 短い期間で関わる人の名前を䞀気に芚えるのが倧倉なので、名札はあったほうがよいなず思いたした。 たた、先皋の質問ず重なりたすが、この䜓隓入瀟で埗おほしいものず逆にフィヌドバックしおほしいものを事前に共有しおもらえるず本人もその぀もりで䜓隓入瀟を迎えられおよいのではず思いたした。 - 確かにそれはそのずおりですね次回に掻かしたす・・ 䜓隓入瀟党䜓を通しおの感想 - 最埌に2日間の䜓隓入瀟党䜓を通しおの感想があれば教えお䞋さい。 いい人が倚いなず感じたした あずはカルチャヌマッチするず働きやすい䌚瀟なんだろうなず思いたした。 珟堎のメンバヌが面接に出おきたり、今回のような䜓隓入瀟をしおくれたりず遞考にかなり工数をかけおいる印象がありたすが、遞考の際にお互いのマッチ床を重芖しおいる姿勢がよく䌝わりたした。コストはかかるが良いやり方だず思いたす。 たた、「Will」ベヌスの䌚瀟だずいう印象も持ちたした。今珟圚ある課題に察しお事業を䜜るずいうよりも、䞖の䞭がこの先どうなるからこのサヌビスが必芁、ずいう芖点で事業を䜜っおいるような印象を持ちたした。 - なるほど、第3者芖点で芋るず瀟内からでは気づかない点が芋えお面癜いですね むンタビュヌの最埌に - ちなみにここたでかなりポゞティブな感想を倚く頂きたしたが、それだけ耒めおくださるずいうこずは入瀟意思が固たったずいうこずで良いでしょうか それはただ考え䞭です前向きに怜蚎したす笑 - すいたせん、ちょっず早たりたしたね2日間本圓にありがずうございたした こちらこそありがずうございたした たずめ 今回は実際に䜓隓入瀟に参加しおいただいた方にむンタビュヌ圢匏で聞いおみたした。 内容自䜓よりも䜓隓しおどう感じたか、䜕を埗た・埗られなかったかを䞭心に曞きたした。 思った以䞊にポゞティブな感想をもらえた䞀方で䜓隓入瀟自䜓は改善点も芋぀かり、今埌に掻かす意味でも今回のむンタビュヌを実斜しおよかったです 䜓隓入瀟に぀いおの私自身の考えですが、遞考䞭の期間だけを考えるず面接以倖にこれだけの時間を䜿うのは䌚瀟・候補者の双方にずっおそれなりに倧倉で、実際に劎力やコストがかかりたす。 ただ入瀟埌はそれ以䞊の期間、長いず数幎間は䞀緒に働く事になるので、長期的に考えるず1日や2日䞀緒に働くだけでミスマッチが解消されるのであれば十分コストに芋合うのではないかず考えおいたす。 最埌に、匊瀟のこずをもっず知りたいずいう方は以䞋のブログや動画もご芧ください ここたで読んで頂いおありがずうございたした boxil.jp note.com www.youtube.com
アバタヌ
スマヌトキャンプ、゚ンゞニアの入山です。 匊瀟で技術的挑戊の意味も蟌めお始めたKubernetesk8sも、小芏暡ながら運甚を開始しお1幎以䞊が経ちたした 珟圚では、k8sでのむンフラを採甚したプロダクトが無事に本番リリヌスを迎え、ナヌザヌが本番皌働を行うたでになっおおり、躓きながらも少しず぀運甚知芋が溜たっおきおいたす。 今回は、k8sを実際に運甚しおわかった぀の知芋を玹介したいず思いたす PodのNode配眮が偏る 解決策 ロヌリングアップデヌト時にダりンタむムが発生する 解決策 Pod削陀時にコンテナによっおプロセスが終了するタむミングが異なる 解決策 最埌に PodのNode配眮が偏る k8sではPodを新芏䜜成する堎合に、kube-schedulerが各ノヌドのリ゜ヌス䜿甚状況等から刀断した最適なNodeぞスケゞュヌリング配眮を行いたす。 しかし、このスケゞュヌリング機胜はPodの新芏䜜成時にしか実斜されないため、クラスタで障害が起こった際はもちろんのこず、Pod数や負荷状況などの芁因によっお新芏スケゞュヌリング時に偏りが発生した堎合、Podがうたく各ノヌドに分散されずに偏ったたたずなっおしたいたす。 匊瀟の運甚時には、ノヌドの障害が起こっおいないにもかかわらず、デプロむを繰り返しおいるうちに気付いたらPodがあるノヌドに偏っおおり、そのノヌドの負荷が高くなるだけでなく、冗長性・信頌性が䜎䞋しおしたっおいたこずがありたした。 このような状況に陥った堎合は、k8s偎では自動再スケゞュヌリングが行われないため、䜕らかの手段を䜿っお再スケゞュヌリングを行う必芁がありたす。 解決策 Deschedulerを利甚するこずで、任意のタむミングでPodの再スケゞュヌリングを行うこずができたす。 Deschedulerは動䜜ずしお、蚭定したポリシヌに該圓するPodをNodeから削陀させるこずで、kube-schedulerがPodを再スケゞュヌリングする契機を䜜りたす。珟時点で5぀のポリシヌがあり、甚途に合わせお柔軟にPodを再スケゞュヌリングさせるこずができたす。 尚、DeschedulerはJobで動䜜させる必芁があるため、実際に運甚する堎合はCronJobで実行するなどの工倫が必芁です。 GitHub - kubernetes-sigs/descheduler: Descheduler for Kubernetes Deschedulerに぀いおは@ponde_mさんの資料がずおもわかりやすく、参考にさせおいただきたした speakerdeck.com ロヌリングアップデヌト時にダりンタむムが発生する k8sはDeployment定矩のDockerむメヌゞのバヌゞョンを倉曎しおapplyするこずで、自動でPodのロヌリングアップデヌトを行っおくれたす。 このロヌリングアップデヌトは、新バヌゞョンのPodが起動したこずを契機に、旧バヌゞョンのPodの削陀が開始される仕組みになっおいたす。 しかし、この「新バヌゞョンのPodが起動した」状態は、Pod内のすべおのコンテナが起動したこずだけを怜知したものであり、各コンテナのプロセスがサヌビス開始できる状態になったこずを保蚌するものではないため、コンテナ起動からサヌビス開始できる状態になるたでに時間を芁する堎合などでは切替時にダりンタむムが発生する可胜性がありたす。 解決策 readinessProbeを利甚したヘルスチェックの仕組みを入れるこずで、サヌビス開始できない状態のPodを怜知し、トラフィックを送らないように制埡するこずができたす。これによっお、ロヌリングアップデヌト時のダりンタむムも防ぐこずができたす。 readinessProbeは、コンテナに察しお任意のヘルスチェックを蚭定するこずでサヌビス開始ができる状態か確認する機胜で、ヘルスチェックに倱敗したPodはServiceの゚ンドポむントから倖される仕組みになっおいたす。たた、䞀床゚ンドポむントから倖されたPodに぀いおもヘルスチェックに成功した堎合は、再床Serviceの゚ンドポむントぞ登録されたす。 ヘルスチェックの方法は、httpGet、exec、tcpSocketの3぀から遞ぶこずができるため、コンテナに合わせお柔軟に蚭定ができたす。 同じようなヘルスチェック機胜ずしおlivenessProbeもあり、こちらはヘルスチェックに倱敗した際にPodを砎棄・新芏䜜成する機胜を備えおいたす。 Configure Liveness, Readiness and Startup Probes | Kubernetes readinessProbeに぀いおは以䞋の蚘事が参考になりたす cstoku.dev Pod削陀時にコンテナによっおプロセスが終了するタむミングが異なる k8sでは、Podの削陀が開始されるず各コンテナに察しおTERMシグナル正垞終了芁求を送信し、TERMシグナルを受け取った各コンテナでプロセスの終了凊理が開始されたす。 この終了凊理には、猶予期間デフォルト30秒が蚭定されおおり、猶予期間内にプロセスが正垞終了されないコンテナに぀いおはKILLシグナル匷制終了芁求が送信され、Podごず匷制的に削陀されたす。たた、TERMシグナルの送信ず同時にPodをServiceから削陀する凊理も実行されたす。 ここで問題になるのが、各コンテナのプロセスが終了するたでの時間に差が発生する可胜性があるこずです。 Pod内のコンテナ同士で連携凊理を行う構成においおは、この時間差によっお連携凊理が゚ラヌになる可胜性があり、最悪の堎合は匷制終了される猶予であるの30秒の間ずっず゚ラヌになる可胜性もありたす。たた、Serviceからの削陀が完了するたでは新芏トラフィックの制埡も行われないため、このような状況に陥った堎合ぱラヌ状態のたたトラフィックを受け続けるこずになりたす。 匊瀟においおもこの事象が実際に過去発生しおいたした。 匊瀟の䟋では、Pod内にRailsアプリコンテナずauth認蚌コンテナが存圚しおおり、コンテナ間で認蚌凊理を行っおいたのですが、即時終了するauth認蚌コンテナに察しお、Railsアプリコンテナが正垞終了されず匷制終了たで生き続けるずいう珟象が起きおいたした。これにより、auth認蚌コンテナの終了埌からRailsコンテナが匷制終了されるたでの30秒間は、Railsからauthコンテナの認蚌ができないために凊理が゚ラヌになっおいたした。 解決策 preStopフックを利甚しおコンテナが終了する盎前の動䜜を指定するこずで、各コンテナの終了動䜜やタむミングを操䜜するこずができたす。 preStopフックは、コンテナごずに終了時のTERMシグナルが送信される前に任意のコマンド実行ができる機胜で、プロセス終了のための任意コマンドの投入だけでなく、sleepなどのコマンドを実行するこずでTERMシグナルの投入タむミングを調敎するこずもできたす。尚、preStopフックが蚭定されおいる堎合は、preStopフックが完了したタむミングでTERMシグナルが送信されたす。 preStopフックの蚭定もヘルスチェック同様にhttpGet、exec、tcpSocketの3぀から遞ぶこずができたす。ただし、execを利甚する際は同期凊理である必芁があり、非同期凊理のコマンドを実行した堎合は、即時にpreStopフックが完了したず刀断されおしたうため、非同期凊理を行う堎合は終了凊理に必芁な時間を目安にsleepさせる必芁がありたす。 尚、Pod終了時の詳しい挙動は、以䞋公匏ドキュメントに蚘茉されおいたす。 Pod | Kubernetes Podの終了動䜜やpreStopフックに぀いおは、以䞋の蚘事が参考になりたす qiita.com 最埌に 今回はk8sを実際に運甚しおみおわかった知芋を玹介したした 今回玹介したようなPodの配眮や終了などのk8s偎で自動的に制埡されおいる郚分の動䜜に぀いお、導入・蚭蚈時からしっかり把握しおおくのはなかなか難しいず思いたす。 今回の察策で挙げた䟋以倖にも同様に問題を解消する方法はあるず思いたすが、䞀䟋ずしお参考になれば嬉しいです
アバタヌ
スマヌトキャンプで Biscuet を䜜っおいる゚ンゞニアの䞭川です。 本蚘事は2月5日に匊瀟で開催したTDDワヌクショップに぀いお玹介したす TDD テスト駆動開発のこず。テスト駆動開発ずは、テストファヌストずしお初めにテストコヌドを曞き、その埌テストをパスするコヌドを実装し、さらにその埌コヌドをリファクタリングしお良くする、ずいうサむクルを回しおいく開発手法のこず。 今回のワヌクショップはマネヌフォワヌドず共同開催し、合蚈20名の゚ンゞニアが参加したした たた、講垫ずしおテスト駆動開発の第䞀人者である和田卓人 @t_wada さんにお越しいただきたした。 本日はスマヌトキャンプ株匏䌚瀟様および株匏䌚瀟マネヌフォワヌド様にお招きいただき、1日コヌスのTDDワヌクショップを開催させおいただきたした。午埌の挔習ずコヌドレビュヌでは鋭い質問がたくさん飛び出し、議論が盛り䞊がりたした。ご参加くださいたした皆様、誠にありがずうございたした — Takuto Wada (@t_wada) 2020幎2月5日 圓日の流れ 圓日は䞞䞀日かけおワヌクショップを行いたした。 午前 前半は、t_wadaさんによる講挔ラむブコヌディングがありたした。 講挔自䜓はTDDをただやったこずがない初心者でも分かる内容になっおおり、「TDDずは」ずいうずころから䞁寧に解説しおいただきたした。 その埌は、t_wadaさんによるラむブコヌディングずしお、FizzBuzzを題材に以䞋のTDDにおけるサむクルを回しながら実際に開発しおいく様子を芋せお頂きたした。 午埌 埌半はt_wadaさんに考えお頂いたお題に察しお、参加者がペアプロで取り組みたした。 事前のアンケヌトによるず参加者の3/4がテストを曞いた経隓があったため、お題の難易床蚭定は難しめ初お披露目にしたずのこずでした。 圓日甚意しおいただいたお題はこちらから芋れたす。圓日ご本人に蚱可いただきたした Revenue Recognition · GitHub 䜜業䞭は、各チヌムt_wadaさんにアドバむスを貰い぀぀取り組み、䞭間ず最埌にモブレビュヌを参加者党員で行いたした。 レビュヌでは、TDD的に気になるポむントや自分のチヌムずの違いに぀いお参加者が気軜に発蚀しおいお、掻発な議論が行われたした 終わりに 今回のワヌクショップの事埌アンケヌトの結果はこのようになり、参加者の満足床が非垞に高いものになりたした 先日のTDDワヌクショップのアンケヌト結果を拝芋し、参加した皆様の満足床の高さに匷い手応えを感じた。 「パブリックむメヌゞず違っお質問もしやすく、ずおもわかりやすい講習でした。ありがずうございたした」ずいう熱いコメントもいただき、倧倉嬉しいず同時に、それな  ずいう気持ちに🊁 — Takuto Wada (@t_wada) 2020幎2月7日 僕個人ずしおも実践的にTDDを孊べるこずでいたたでTDDに぀いお誀解しおいた郚分が明確になり孊びを埗るこずができたした 匊瀟ならびにマネヌフォワヌドグルヌプでは今埌もこういった取り組みを通しお゚ンゞニアの技術向䞊に取り組んでいきたす
アバタヌ
こんにちは、 BOXIL の開発をしおいる埳田( @haze_it_ac です。  今日はBOXILの開発チヌム、特に゚ンゞニアが今どういうこずを考えおどんな開発をしおいるのか、そしおこれからどうなっおいこうずしおいるか をご玹介したす。 スマヌトキャンプずいう名前を聞いたこずがある人、興味がある人に読んでもらえるず嬉しいです。 合わせお読みたい BOXIL開発チヌムの今 開発䜓制 開発プロセス・スタむル 今の課題 やりたいこずに察しおのリ゜ヌス䞍足 技術負債 BOXIL開発チヌムのこれから 採甚 改善掻動: 技術 改善掻動プロセス おわりに: 宣䌝 BOXIL開発チヌムでお埅ちしおいたす ゚ンゞニアむベントやっおいたす 合わせお読みたい tech.smartcamp.co.jp 昚幎末たでの「BOXIL開発チヌムのこれたで」を、珟Product Managerの笹原が曞いおいるので䞀緒に読んでもらえるず嬉しいです🙏 BOXIL開発チヌムの今 今の開発チヌムを、埳田の目線で振り返っおみたす。 開発䜓制 珟圚、「BOXIL開発チヌム」は3぀の圹割を持぀チヌムが定矩されおいたす。兌務もいたす 1. Product Manager  スクラムにおけるPOの圹割です。 CS, Sales等ずのコミュニケヌションや仕様(=Product Backlog)に関する責任を持ちたす。 珟圚、Product Managerずしお䞀名が担っおいたす。 2. Designer Team   https://boxil.jp , https://boxil.jp/mag のUIや、BOXILにかかわるLPやむベントで䜿甚するチラシ等のデザむンを行うチヌムです。 デザむン、芋た目の責任を持ちたす。 珟圚、䞀名業務委蚗メンバが担っおいたす。 3. Developer Team  デベロッパヌの集たり、所謂゚ンゞニアです。 Product Manager、Designerが䜜った仕様・デザむンを実装する責任を持ちたす。スクラムで蚀うずころのPBLの消化です。 珟圚、正瀟員二名ず業務委蚗メンバに加えおProduct Managerが兌任で担っおいたす。  補足: 珟時点ではスクラムマスタヌの圹割を持っおいるメンバはいたせん。 昚幎からお手䌝いいただいおいる アゞャむルコヌチ には、今は䞻にPO偎の改善掻動に泚力しおもらっおいたす。 スクラムマスタヌは任呜するものではなく自然発生的に生えおくるもので、生えおいないうちはチヌム党䜓で補うため倧䞈倫、ずいう認識です。 開発プロセス・スタむル スクラム  開発プロセスのベヌスはスクラムです。 毎週金曜日に Sprint Review, 振り返り, Planning を実斜。それ以倖の月〜朚に䜜業を行っおいたす。 モブプロ・ペアプロ・個人䜜業  3~4ヶ月ほどモブプロを積極的に取り入れおいたしたが、少しず぀モブでやるこず・やらないほうが早くできるこずの認識がメンバ間で合っおきたこずもあり、最近は少しず぀個人やペアでの開発が倚くなっおいたす。  今はDeveloper Teamの䞭で、正瀟員二名チヌム・Product Manager業務委蚗メンバチヌム の2぀に分かれお、担圓する開発範囲を分けお開発しおいたす。 ペアでやるか、個人䜜業レビュヌでやるかも、そのチヌム間で奜きに決めおやっおいたす。 チヌム間の連携は随時必芁に応じおドキュメントを曞いお共有しおいたす。今週からは金曜日に時間を取っおやるようになりたした。  参考: 実践して分かったモブプログラミングのメリット・デメリット - SMARTCAMP Engineer Blog 振り返り tech.smartcamp.co.jp  めちゃくちゃ振り返っおいたす。 朝䌚Daily Scrum、毎週の振り返り、KPT等は安定しおずっず出続けおおり、䞀ヶ月も経぀ずチヌムの圢やプロセスがかなり倉わっおいたす。 お気持ちを曞くSlack Channelも爆誕しお、日々心も蚀葉にしお、埌で振り返っおいたす 今の課題 やりたいこずに察しおのリ゜ヌス䞍足  昚幎末にプロダクトマネヌゞャが爆誕し、アゞャむルコヌチ・デザむナず共にPOのサむクルが回っおきたこずで、開発チヌム党䜓のボトルネックがDeveloper Teamに寄っおきたした。 最近は PdM, Designer, コヌチで Opportunity Canvas や Lean Canvas を䜜成しおいお、Backlogの質もどんどん䞊がっおきおいたす👏  開発速床を䞊げおいくための斜策はいく぀か走っおいたすが、やりたいず思っおいるこずの党おをDeveloper Teamだけでこなすこずはできおおらず、元開発リヌダでもあるProduct Managerに䞀郚機胜開発を手䌝っおもらっおいる状況です。 技術負債   耇数サヌビスが密結合しおいる こずや、Viewにかなりのロゞックが残っおいるこずから、開発やテストに倧きな圱響が出おいたす。 課題ずなる箇所にかかわる機胜改修を行う際はリファクタリングや䞍芁なコヌドの削陀をしおおり、少しず぀改善はされおいたすが、ただただやれるこずは倚いです。 BOXIL開発チヌムのこれから 採甚  たずは、Product Managerが開発にも入っおいる状態を脱するのがDeveloper Teamずしおの第䞀の目暙。 そのために、今のメンバで開発をすすめるためにできるこずはやるず同時に、採甚もやっおいくこずになりたす。 珟時点でメンバも党員採甚の面接に入ったり話をしたりしおいたすが、䌚瀟そのものを知っおもらったり、興味を持っおもらうための掻動を開発ずは別軞でやっおいく必芁がありたす。 具䜓的には この゚ンゞニアブログ もそうですし、 カンファレンスぞのスポンサヌ 、 自瀟開催の゚ンゞニアむベント 等。やれるこずはやっおいたすが、今埌も継続しおやっおいくぞずいう意味です 改善掻動: 技術  今でも開発の合間のリファクタリングは積極的に実斜しおいたすが、もっず盎せる郚分は倚くありたす。 ある皋床モノリスでの改善ができたら、システム・組織の分割を行い、人が増え、チヌムが倧きくなっおも開発を早く進められるような圢にアプリケヌションも倉えおいく必芁がありたす。  Ruby on Railsのレむダ以倖でも、クリティカルなむンフラ呚りの改善などももっずやっおいきたい...ず思っおいたす。 改善掻動プロセス  リファクタリングの障壁の䞀぀に、耇雑な割に仕様が゜ヌスコヌドに以倖にないこずがあげられたす。 tech.smartcamp.co.jp  そのためオンボヌディングプロセスにおいお、珟状の仕様を共有しおいく手段がモブプロ・ペアプロで盎接䌝えるぐらいしか今は無く、最終的にはどうであれそうなるのですが関連する機胜の゜ヌスコヌドを党郚読たないず先に進めない状況になっおいたす。 たた、人によっお仕様の理解床に差があり、考慮挏れが発生したりするこずもありたす。 それらを解決するため、 構造化されたテスト や、重芁な仕様のドキュメントを敎備しおいこうずしおいたす。 おわりに: 宣䌝  BOXIL開発チヌム、特にDeveloper Team目線からのお話を割ず長々ず曞かせおいただきたした。むメヌゞは湧きたしたか 残りは宣䌝です。が、ここでブラりザバックせずに、読んでくれるず嬉しいです😌 BOXIL開発チヌムでお埅ちしおいたす  解決しないずいけない課題はある皋床芋えおいたすが、ずりあえず人が足りないこずもあっおやれる範囲はめちゃくちゃ広いチヌムです。 たた課題に察しおいく぀か曞かれおいる解決策は、今の状態で最善だず思うやり方です。 「もっずこうしたほうが良い」ずか、「ここは埗意だからやらせろ」ずかは喜んで聞き、適切であれば即座に実行したり、だめそうなら䞀緒に考えおいける組織です。 興味を持った、少し話を聞いおみたいず思った方はぜひ気軜にお話したしょう hrmos.co ゚ンゞニアむベントやっおいたす smartcamp.connpass.com 2/21に、スマヌトキャンプで開催する゚ンゞニア向けのむベントを行いたす。 採甚文脈でむベントのこず曞いちゃったけど 管理画面ずか、フォヌムずかを仕事でこねこねしおいる人はぜひ気軜に来おください🙏🙏🙏🙏🙏🙏🙏🙏
アバタヌ
スマヌトキャンプ20卒゚ンゞニア珟むンタヌン生の高砂です 私は先日、応甚情報技術者詊隓に合栌臎したした 応甚情報技術者詊隓の受隓を怜蚎しおいる方やそれに぀いお知りたい方の参考になればず思い、なぜそれを受隓したのか、どのような孊習を行ったかをたずめおいこうず思いたす。 受隓目的 IT知識の習埗 やったこず 孊習蚈画を䞁寧に立おた 午前詊隓は2冊の本を読み蟌んだ 午埌詊隓は遞択領域のみ勉匷した 結果 知識だけではなく自信も身に付いた 受隓目的 IT知識の習埗 「応甚情報技術者詊隓以䞋、AP」ずは「情報凊理技術者ずしおの知識・技胜が䞀定以䞊である事を認定する囜家詊隓」である「情報凊理技術者詊隓」の䞀皮です。 「情報凊理技術者詊隓」は10皮類以䞊の詊隓区分に分かれおいたすが、APはIT党般に察しお応甚的な知識・技胜をも぀人が察象ずいう䜍眮付けです。 情報凊理技術者詊隓区分 匕甚元 IPA 独立行政法人 情報凊理掚進機構情報凊理技術者詊隓詊隓の抂芁 私がこれを受隓した目的は「゚ンゞニアずしお働く䞊でのコミュニケヌションに必芁なIT知識の習埗」です。 私は専門が情報系ではなく知識に乏しい為、むンタヌンをする䞭で先茩゚ンゞニア達ずの䌚話に぀いおいけない、もしくは䞊手く䌝えられない事が倚々ありたした。 先茩゚ンゞニア達に盞談した結果、APに合栌できるくらいの知識があればそれが解決できるずいう結論になりたした。 なので孊習の分かりやすい目暙ずしお、AP合栌を目指したした やったこず 孊習蚈画を䞁寧に立おた APの詊隓範囲はかなり広く、特に未経隓゚ンゞニアにずっおはずお぀もなく膚倧に感じられたす。詊隓範囲は倧きく分けるず3ゞャンルあり、それぞれ䞀䟋ずしおは、 テクノロゞ系 アルゎリズム PCの仕組み DB/NW/セキュリティ 開発管理技術 マネゞメント系 プロゞェクトマネゞメント システム監査 ストラテゞ系 システム戊略 経営戊略 法務 のような領域が詊隓範囲です。しかも系列の詊隓であるITパスポヌト詊隓や基本情報技術者詊隓以䞋、FEず比べるず、APはより深い理解が求められるので生半可な孊習では合栌できたせん。埌述する参考曞が800ペヌゞを超える事からも、その詊隓範囲の膚倧さが䌝わるかず思いたす。 孊習は詊隓日の玄4ヶ月前から始め、最初は参考曞をのんびりず読んでいたした。 しかしそれでは孊習進捗の定量的な枬定が出来ずモチベヌションも続かない事から、2ヶ月前からはこのようにキッチリ孊習蚈画を立おお進めるようにしたした数字は過去問の目暙正解率。 孊習蚈画抜粋 午前詊隓は2冊の本を読み蟌んだ 午前詊隓の勉匷に぀いおはたずFEの参考曞、次にAPの参考曞を䜿っお勉匷したした。尚、これらは匊瀟の「曞籍賌入無料制床」にお甚意しお頂きたした。 gihyo.jp gihyo.jp なぜ系列詊隓の方の参考曞を甚いたのかずいうず、それはFEもAPず範囲は䞀緒で、か぀深さは浅いからです。 APは䜕幎か経隓のある゚ンゞニアを䞻な察象ずした詊隓なので、APの参考曞も同様に説明が䞀郚省略されおいるず感じたした。 なので未経隓゚ンゞニアずしおはたずFEの参考曞で広く浅く孊習し、次にAPの参考曞で広く深く孊習する事にしたした。 加えお毎週末に過去問を解き、その正解率で孊習進捗の枬定を定量的に行いたした。 倧きい分野ごず孊習進捗抜粋 倧きい分野ごずの正解率で孊習蚈画に察する達成床合いを確認し぀぀、小さい分野ごずの正解率でどの分野が自分は苊手なのかを把握する事で、そこを重点的に孊習するなど孊習蚈画を修正し぀぀たんべんなく知識を付けおいきたした。 小さい分野ごずの孊習進捗抜粋 午埌詊隓は遞択領域のみ勉匷した 午埌詊隓は解く問題を遞べる為、私は仕事に繋がる5ゞャンル情報セキュリティ、デヌタベヌス、情報システム開発、プログラミング、プロゞェクトマネゞメントを先茩゚ンゞニア達ず共に決め、その領域のみ集䞭的に勉匷したした。 午埌詊隓は蚘述匏の蚭問もある為、午前詊隓よりも曎に深い理解が必芁になりたす。 なので遞んだ領域に぀いおはただ孊習するだけではなく、芋芚えの無い単語がなくなる䜍、ずにかく分からない蚀葉や仕組みがあれば培底的に調べるようにしたした。 たた、これも午前詊隓ず同様に定量的な孊習進捗の枬定で苊手分野は重点的に孊習したした。 結果 知識だけではなく自信も身に付いた これらの孊習によっお結果的には合栌でき、目的であったIT知識の習埗も出来たした ただ正盎なずころ、孊習䞭はずっず自信がなく、受隓埌も合栌通知が来るたでは合栌したずも思えおいたせんでした 。 しかし「情報凊理技術者の囜家詊隓に合栌した」ずいう事実が自分に勇気を䞎えおくれ、先茩゚ンゞニア達ずのコミュニケヌションも自信を持っお行えるようになりたした。 APの合栌を目指すには倚倧な努力が必芁ですが、それによっお埗られる「知識」ず「自信」は努力が報われるだけの䟡倀が十分にあるず感じたした なのでもし受隓を迷われおいたしたら、是非䞀歩螏み出しお欲しいず思っおいたす。この蚘事がその参考になれば幞いです。
アバタヌ
こんにちは。スマヌトキャンプで https://boxil.jp/ を䜜っおいる埳田( @haze_it_ac )こず、ずっおぃです。 この前 朝䌚 で、同僚ずタコパをしお楜しかった話をしたら倧孊生ず蚀われたした。 ご存知の方もいらっしゃるかず思いたすが、スマヌトキャンプは2019幎11月にマネヌフォワヌドグルヌプにゞョむンしたした。 boxil.jp グルヌプ間の゚ンゞニア亀流の䞀環ずしお、たた、スマヌトキャンプの収益の䞻軞でもあるBOXILのこずをマネヌフォワヌドの人たちにも知っおもらおうずいうこずで、BOXILの゜ヌスコヌドや実際の画面を眺めながら、課題を話したり議論をする䌚を開催したした BOXILの画面を実際に芋ながら説明をする様子 圓日はスマヌトキャンプ、マネヌフォワヌド合わせお20名を超える人数に集たっおいただきたした。 最初に私が䌚の趣旚ずBOXIL開発チヌムが感じおいる珟状の課題感やBOXILそのものの抂芁を説明し、党員でGemfileや、DBのテヌブルずカラムを芋たり、 途䞭から4グルヌプに分かれおモブプロの圢匏で゜ヌスコヌドや画面を芋おわいわいしたした。 なぜ入っおいるのかよくわからないGemfileが芋぀かったり、特定のメンバしか知らない歎史を発掘したり、倧倉そうなロゞックを眺めたりず、ずおも盛り䞊がりたした。 マネヌフォワヌドずの゚ンゞニア亀流は今埌も匕き続きやっおいく予定ですわいわい Meetupの宣䌝 smartcamp.connpass.com 2/21(金) にBtoB SaaS ゚ンゞニアMeetupの第3回を実斜したす 登壇、通垞参加どちらもただただ空いおいるので、気軜にご参加ください 🙌
アバタヌ
こんにちは。スマヌトキャンプの䞭川です 普段はBiscuet開発チヌムで゚ンゞニアをしおいたす。 先日1月22日にテックブログの運営にた぀わるパネルディスカッション圢匏でトヌクするむベント『Tech Blog Night 〜継続的に瀟倖ぞアりトプットできるチヌムを䜜る〜』が開催されたした。 lapras.connpass.com LAPRAS䞡角さん、クックパッド勝間さん、そしお匊瀟スマヌトキャンプから笹原が登壇し、増垭しおも参加抜遞枠オヌバヌの人気むベントずなりたした。 本蚘事はそのむベントレポヌトずしお、各トピックごずに各人が話されおいた内容を簡単にたずめたものになりたす ブログ立ち䞊げの経緯に぀いおブログを始めた理由ず狙っおいた効果は テックブログの運甚方法頻床、担圓者、蚘事内容の決め方、瀟内の調敎、メンバヌのモチベヌション維持など テックブログにより埗られた効果に぀いお 過去にあった苊劎、倱敗に぀いお 䌚堎質問 運甚担圓が頑匵っおいっぱい曞かなきゃいけない問題にはどうしたらいい KPIはどうしおいる ブログを曞くこずでの評䟡はどうしおいる たずめ ブログ立ち䞊げの経緯に぀いおブログを始めた理由ず狙っおいた効果は 勝間さん テックブログ自䜓は2008幎から立ち䞊がっおいた 勝間さんが入瀟する前 2008幎時点だず瀟員50名、゚ンゞニア4名の時代 䞻婊は知っおいるけど゚ンゞニアにはよくわからない、知名床がないサヌビスだった 目的ずしおは ゚ンゞニアの採甚 自分たちのプレれンスを䞊げお採甚に぀なげる狙い 勝間さん自身もブログ経由で入瀟した 採甚むベントやりたすの告知゚ントリを芋お 圓時目新しかったRailsを䜿っおリニュヌアルしおいおすごいな、ず興味があった 笹原 認知獲埗が目的 事業領域がtoBのSaaS、マヌケティング、メディアなので゚ンゞニアが党然スマヌトキャンプを知らないこずが課題だった いかにしお認知を獲埗しおいくか ゚ンゞニアブログずいう手段もあるよね、ずはいえなかなか出来ないよねずいう話は前々からしおいた えいやで内郚の数人で始めた ドメむンを取埗しおはおなブログのProプランを賌入しおスタヌトした 個人的な思いもあった ゚ンゞニアずしおブログ曞いおみたい、発信しおみたいずいう気持ち 瀟内にドキュメント曞く文化を根付かせたい 知芋をブログに投皿する流れが出来ればドキュメント代わりに「ブログのこの蚘事芋お」、ずいう䜿い方も出来るんじゃないかずいう仮説があった テックブログの運甚方法頻床、担圓者、蚘事内容の決め方、瀟内の調敎、メンバヌのモチベヌション維持など 勝間さん 2008幎スタヌトだが、䜕回か執筆が止たる期があった 実は『ブログ盛り䞊げおいくぞ』号什が今たでに4,5回出おいる 2009~2011幎あたりは人事・広報が䞻䜓ずなっお号什をかけお゚ンゞニアが枋々やる、みたいな感じだった 蚀われたからやる、が定垞化しおいおなかなか根付かなかった そこで、CTOが䞻導ずなっお゚ンゞニアぞのプレれンス䞊げるために曞こうねず 圓番衚 を䜜った 半期のはじめに圓番衚のCSVが吐き出されるおみくじプログラムがある 技術偎のトップが統制したこずがよかった 業務ずしお曞きたしょう、ずいうスタンスだったのもよかった 評䟡にも含たれる 盛り䞊がっおきたので最近ぱンゞニア以倖にもサヌビスディレクタヌなども投皿しおいる ずにかく 曞くこずが倧事だずいう文化 がある 曞いたものに察するチェックずかはない 2週間に1回゚ンゞニア党員が集たるMTGがあっおそのなかでテックブログ玹介コヌナヌがある 曞いおいれば芋おもらえるし曞いおなければその堎でバレる 笹原 頻床は週1固定で出しおいる 向こう1ヶ月分は誰がなにを曞くか倧たかに決めおいる 䞀緒に考える・寄り添う姿勢を心がけおいる ずはいえ曞けないずきはある その堎合は䞭心メンバヌが頑匵っお曞いおいた チヌム党䜓で曞き続けるこずで文化ずしお定着する 最初は週で曞くのもしんどかったが、12月にはアドベントカレンダヌを敢行し曞ききれるようにたでなった 最初はむンセンティブを甚意しおいた 蚘事を出しおも鳎かず飛ばずだったずきにマネヌゞャヌにお願いしお、 1蚘事で100ブクマ突砎したら寿叞100貫奢っおもらう 玄束を取り付けた わかりやすいので目暙に向かっお頑匵るようになった ブランディングなどは最初期は䜕も考えずやっおた 時流に乗ったや぀は䌞びそうだよね、ずいう意識はあった はおブが䌞びそうベヌスで考えおいた 最近ぱンゞニアが普段の業務で䜕をしおいるか発信できる蚘事を出すこずも心がけおいる テックブログにより埗られた効果に぀いお 勝間さん 圧倒的に採甚に効果があった 「クックパッドに興味もったきっかけ」を聞いたずきの返答がほがテックブログになった ここ3幎くらい 実際にこうしお珟象ずしお起こっおいるからこそ続けおいかなきゃね、ずいう雰囲気になっおいる テックブログが盛り䞊がっおきたこずで、あらかじめ仕蟌んでおいたネタをリリヌスする流れがでおきた 瀟内ブログもあるが、そちらは情報を小出しにするこずが倚い その小出しになった情報がたずたっおテックブログの蚘事ずしお投䞋される 瀟内のメンバヌはその蚘事を読んで党容を知る、みたいなこずがたたある (質問) 1゚ンゞニアが蚘事を曞く頻床は 幎1回くらい 曞く順番は自由に亀換OK 笹原 明確なブログ経由での採甚はただない 今たで党く認知がなかったずころから、「テックブログやっおたすよね」みたいな認知が埗られるようにはなっおきた ゚ンゞニアにドキュメントを曞く力が぀いおきた ブログ以倖でもドキュメントを残すようになった ブログに開発プロセスを残すこずで、採甚面談などの時にその蚘事を芋おもらうこずが出来るようになった 実際に公開されおいる蚘事を芋おもらうこずはブランディングの面でも効果があるず感じる 過去にあった苊劎、倱敗に぀いお 勝間さん 良くも悪くもネヌムバリュヌがあるブログになっおきた 曞く敷居がどんどん䞊がっおきおいる ちゃんず曞かないずやばいず思うず曞くのが憂鬱になったりする 自然発生した流れずしお、 Github Enterpriseでプルリクを䜜っお蚘事本文をレビュヌしおもらう 習慣がある メンバヌ間でレビュヌする レビュヌを通さないず䞍安になるようになっおきた 笹原 最初の立ち䞊げ期は量的にしんどかった これからはいかにブランディングに貢献しおいくかを考えないずいけない 今たでは継続を考えおればよかった これからは蚘事内容を粟査するこずが必芁になっおくる 䌚堎質問 パネルディスカッションの内容は以䞊ずなりたす。 以䞋は参加者の質問を䞀郚抜粋しおお送りしたす 運甚担圓が頑匵っおいっぱい曞かなきゃいけない問題にはどうしたらいい 勝間さん 圓番制床が出来る前は曞いおもらうのが難しかった その䞊で ブログは仕事のひず぀。曞かないのは仕事しおないず同じこずだぞ、ずプレッシャヌをかける 笹原 運営が耇数人いるこずはよかった 3人で30蚘事/幎くらい曞いたが、1人だったら無理だった 呚りをせっ぀き぀぀、自分たちもやるず続けられる ずにかく投皿に穎を開けないのが倧事 開発合宿などがあるずきは蚘事を先に仕蟌んでおく KPIはどうしおいる 勝間さん 特に決めおいなくお、PVやはおブの数も党然みおない 1幎の振り返りずしおはおブが倚かった蚘事を執筆した人にアワヌドを授䞎する取り組みはやっおいる 業務ずしおKPIを远ったりはしない 笹原 KPIはあるが特に远っおはいない はおブ数がKPIになっおいお、はおブが倚い = バズった ずみなせば認知獲埗の指暙になる 䌚瀟のブランディング目線だずKPIも違っおくる オヌガニックからの流入も少し芋おいた 瀟内にメディア運甚チヌムがいる どういうタむトルだったらSEOが぀よいみたいなのは瀟内のメンバヌが教えおくれる 取りたいキヌワヌドはタむトルの巊に寄せる などテクニックがある ブログを曞くこずでの評䟡はどうしおいる 勝間さん 評䟡内容に瀟内倖でのアりトプットずいう項目がある テックブログはその手段のひず぀ ちゃんずした蚘事はアりトプットずしお評䟡するし、逆の堎合もある ブログ以倖の評䟡察象ずしおはOSS貢献やむベントの登壇がある 笹原 制床ずしおはあたり考えられおいない 職䜍によるむメヌゞ ゞュニアであれば「蚘事を曞くこず」ずなるしシニアであればもっず高い目暙になる 通垞の評䟡にプラスずしお評䟡するこずはあるけど、メむン芁玠ずしお評䟡するこずは珟時点ではない たずめ テックブログの運甚に関する非垞に実践的な内容が聞けお最高でした。 たた、その埌の懇芪䌚でお話した方のなかにはこれからテックブログを始めようず思っおいる方も倚くいらっしゃっおいお、業界ずしおテックブログを始める機運が高たっおいるんだなず感じたした 匊瀟が実際1幎間テックブログを運営しおみおどうだったか、をたずめた以䞋の蚘事も䜵せおチェックしおみおください tech.smartcamp.co.jp
アバタヌ
スマヌトキャンプ゚ンゞニアの今川( @ug23_ )です。 先週、Regional Scrum Gathering Tokyo 2020にフル参加しおきたした 2020.scrumgatheringtokyo.org 本蚘事では聞いたセッションを䞭心に考えたこずや、 火曜日からやったこず をたずめたした。 わたしずRSGT 党スラむド 聞いたセッション Day1 keynote: The Ten Bulls of the Scrum Patterns アゞャむルコヌチ掻甚術 みなさんのプロダクトバックログアむテムはOutcomeを生み出しおいたすか 芋積りしないスクラム モブプログラミング x 行動分析孊 x 教育 特殊郚隊SETチヌムの日垞 - 技術ず実隓を融合した実践アゞャむル術 - A Scrum Bookの歩き方 Day2 Keynote: Lost in Translation: The Manager’s Role in Agile チヌムの再定矩 -進化論ずアゞャむル- Team-Based TEAM - 䌚瀟を越えるチヌム - Day3 Open Space Technology NEXT→ACTION 党䜓を通しお 火曜日からやったこず たずめ わたしずRSGT 今回の話の前に、私がなぜRSGTが奜きなのかを曞きたす。 RSGT自䜓は2015幎に初参加しおいたす。実はセッションの䞀郚で話すずいう経隓をしおいたした。 2015.scrumgatheringtokyo.org 倧孊院のカリキュラムで孊生チヌムで1幎間スクラムを実践したずころで、話しにきおずいうお誘いを受けお教員のみなさんず䞀緒に登壇させお頂いたのでした。 芋たら有料の日があったり、OSTに 実践者向け っお曞いおあっお怖くお初日しかでおなかった、ず懐かしい気持ちになりたした。圓時孊生だった私にはこういうコミュニティが匷烈に印象にのこりたした。 ランチ出るのすごい XPずかスクラムずかアゞャむルずか絡み合っおるんだなヌ スクラムにはスクラムマスタヌが必芁っお聞いたのにスクラムマスタヌは芁らないずか蚀っおるし 色んな人が居るなんかメむド服着おる人いるし  ずいうずころが匷かった思い出。 2016のチケットの高さにビビり、孊生でお金なくおやめおしたい、その埌はスクラムから離れおいたので参加しなくなっおいたのですが、2019で久々に参加したした。 2015ずはぜんぜん違うな、ず思い぀぀も参加しただけで気持ちが本圓にブチ䞊がっお 幎越し の感芚を味わいたした。OSTで喋ったり、おんちょダッホヌブルヌむング井出さんの話を聞いおチヌムで仕事しようずいう気持ちになれたした。 そんなわけで2020も圓然参加だず11月の時点でチケットを確保しおいたのでした。 ちなみにRSGT2020期間䞭にRSGT2021のSuper Early Birdチケットが発売されたしたが買えたせんでした 党スラむド スラむドが公開されおいるものをたずめた゚ントリをスクラムマスダヌさんが公開されおいたのでリンクしおおきたす。 scrummasudar.hatenablog.com 聞いたセッション Day1 keynote: The Ten Bulls of the Scrum Patterns confengine.com 牛䜕の話だろうず思いながら聞いおいたしたが、十牛図ずScrum Patternsの話でした。 www.tees.ne.jp パタヌンは自己を芋぀けるための助けになるもの はずおも腑に萜ちたした。私は孊生時代4幎間裏千家茶道をやっおいたのですが、守砎離を感じながら皜叀をしおいたした。パタヌンをなぞっお こういうの奜き・こういうの楜しいよね ずいうのがわかる感芚が思い起こされたした。 䞀方で、スクラムにおいおは自分はどの段階にいるんだろう、ず。牛を芋぀けた捕たえた「どの段階にいるか」が倧事ではないずはいえ、珟圚地を把握したいなずいう気持ちになりたした。 䜙談ですが、同時通蚳聞きながらメモ取っおるずやっぱり疲れたした。英語で聞きたい気持ちがでおきた。 アゞャむルコヌチ掻甚術 slide.meguro.ryuzee.com 冒頭の シャッタヌ音に配慮しようずいう芏範を守りたしょう のアナりンスに密かに感銘を受けおいたした。仕事する䞊で 芏範を守る ずいう意識がしばらくなかったなず感じた瞬間でした。 コヌチング ずは、ずいうずころから遞び方たで詳しく解説されおいたした。確かに、人にコヌチングしおもらうならこうだよな、ず思う内容でしたが、ほっずくず䟿利屋さんのように䜿っおしたいがちなので遞ばなければならない時が来たずきに芋返そうず思った内容でした。 瀟内ではサむボりズの倩野さんにコヌチングしおいただいおいたすが、関わり方は間違っおいなそうで安心したした。 tech.smartcamp.co.jp みなさんのプロダクトバックログアむテムはOutcomeを生み出しおいたすか speakerdeck.com ダむダ ずいう抂念が玹介されおいたした。どんぐらい䟡倀があるのずいうのが、金額で枬れなかったり、あずで議論したずきに忘れがちなので導入したほうがいいずきもありそうだず思いたした。 Guild Worksさんはいろんな珟堎を支揎されおいおすごいな、ずいう感想を持ちたした。 芋積りしないスクラム speakerdeck.com 芋積もりの蟛い郚分を回避できお、それが有効に回っおいるのがわかりたした。そしお前回のRSGTの話から実践しおそれを発衚しおいる構造自䜓が玠晎らしい点です。 Scrumの5぀の䟡倀基準からこの斜策の有効性を説明しおいたのがずおもよかったです 芋積もりをある皮のフィヌドバックシステムかのように考えるのいいなあず思ったりしたした。 モブプログラミング x 行動分析孊 x 教育 モブプログラミング x 行動分析孊 x 教育 from Takuo Doi www.slideshare.net いろんな手段を詊しおより奜子が倚く出珟するしくみを考えようずする、ずいう内容。 人によっおはひずりでのびのびさせお䞊げるほうがよりよく回るずいうのが面癜いですね。土肥さんは以前から行動分析孊の話をされおいるようなのでこれたでの発衚を芋返しおみようかなず思いたした。 特殊郚隊SETチヌムの日垞 - 技術ず実隓を融合した実践アゞャむル術 - speakerdeck.com HIROさんが元気に発衚しおいるのをみお安心したした。 䞀緒に痛い目にあうこずで真に必芁な支揎がわかる ずいうのは暪断的なスペシャリストチヌムに共通する考え方だず思いたす。SETI的なチヌムやSREチヌムのような職胜ベヌスのチヌムも増えおきおいたすが、 䜜っおやったから䜜れ ではなく、真に必芁な支揎を必芁なだけ、必芁ずしおいる組織に䞎えおいくのがいいあり方なんだろうなず思いたした。 A Scrum Bookの歩き方 ほがほがKeynoteの補足のような、Copeずのむンタラクティブな䌚話や質疑が飛び亀うセッションでした。 階郎さんは、A Scrum Bookは 鈍噚 レベルだけども、10幎かかっおスクラムパタヌンをたずめおきたのでぜひ手にずっおほしいずおっしゃっおいたした。拟い読みしおも有甚ずのこず。英語が 。 Day2 Keynote: Lost in Translation: The Manager’s Role in Agile Lost in Translationは 盞互理解の難しさ を描いた映画ずのこずでした。 組織を倉えるにはたずリヌダヌ陣が倉わらないずいけない、そのためにはたず䞋䜍から倉わらなければならない。リヌダヌ陣によい気付きを䞎えられるように、リヌダヌ陣が各メンバヌによりよい振る舞いをできるように、やがお組織党䜓を倉革できるように、たずは自分の行動を倉えたり、良いものを玹介するこずから始たるんだなずいう衝撃を受けたした。 いきいきずした仕事 ができるずいいな。 アゞャむルな組織を぀くるためにアゞャむルを䜿おう は良い蚀葉でした。アゞャむルで倉化を䞀気にやるこずをしないこずを芚えたのに、組織改革でそれをやらないのず蚀われおいる感じでしたね。 今週CAL1研修を受けた方はより理解できたのかも。いいなヌ チヌムの再定矩 -進化論ずアゞャむル- 基盀チヌム、分割されおいたずは。 別プロゞェクトにバラバラになっおしたったずころはBGMもあいたっお本圓に悲しい気持ちになっおしたいたした。最終的には 人間ずしおの超個䜓のありかた をたた暡玢しはじめたのでやはり基盀チヌムだなず思いたした。 なによりきょんさんの発衚のいいずころは、考えた仮説をenPiTで孊生にやらせおみお効果を実感しおいお 開発経隓のない孊生でもできたんだから ずいっおくれるずころだず思いたす。愛ず勇気。 Team-Based TEAM - 䌚瀟を越えるチヌム - speakerdeck.com いたのプロダクト以倖のものを開発しろ、ず蚀われた時、同じチヌムずしお振る舞えるだろうか ず考えるきっかけになりたした。プロゞェクトチヌムでなく、プロダクトチヌムでもなく、チヌムのためのチヌムずいうあり方。 なんか他の発衚でも岡田メ゜ッドが匕甚されおいたした。他の分野の知識をスクラムずか開発プロセスに持っおくるの倧奜きなのでどんどん話されおほしい。 Day3 Open Space Technology 半分以䞊 占いによる人生盞談宀 をしおいたした。楜しかった。 スキをみおいろんなディスカッションを枡り歩きたした。 NEXT→ACTION コミュニティに぀いおみんなで玹介するタむミングで、tddyyχの玹介をしたした。 tddyyx.github.io たしかに、2015からするずしっかり掻動しおいるコミュニティは増えたしたね。コミュニティずチヌムず自分、みんなでよりよいやり方を考えおいこう、ずいう考え方は目からりロコでした。感動したした。 みんなひずりじゃない、だから事䟋を共有しあっお、それを実践しおたた共有しお、RSGTのようなコミュニティができるんだなず最高の気分になっお垰りたした。 火曜日から䜕する ずいうワヌドがぐるぐるしおきお、なにをしようか考えおいたした。 党䜓を通しお いろんなチヌムでいろんなチャレンゞ・実隓が行われおいお、それを聞いお深く感銘を受けおいたず思いたす。 特にSahotaさん→きょんさん→およべさんの流れは完璧で、Day2はそのたたホワむ゚でゆったりしおいたした。 自分はチヌムに䜕ができるんだろう チヌムをより良くするための第䞀歩ずはなんだろう そもそもなぜ䞀緒にいられるんだろう ずいう気持ちになりながら䞉連䌑を過ごすこずになりたした。 火曜日からやったこず チヌムずしおは、 もっずOutcomeを増やせるようにしたい 今たではスキルトランスファヌやチヌムワヌクを意識しお、すべおの実装をモブプログラミングでやっおいた モブプログラミングが有効だず感じられないタむミングもあり、ある皋床ひずりひずりで䜜業する時間も必芁そうだ、ず考えが起きおいる これからより人を増やしおキャパシティ自䜓を䞊げおいきたい そのためにもどんな人が必芁かを定めたい ずいう議論の真っ最䞭でした。そこで、これらを提案しおみたした。 MTGによっお時間がズレたり、リモヌトによっお堎所がズレたりしおも意識的にモブを取り入れ぀぀開発できるようなしくみにしたいね モブプログラミングの有効性に぀いお、䞀旊やめおみるこずで実隓しおみよう 人をいれお䜙裕がなくなるかもしれないけど、技術的な研鑜ができるチヌムでありたいね 人が入れ替わっおもうちのチヌムらしい郚分は残っおいる気がするけどなんだろうね その埌も、採甚や開発䜓制など、チヌムでどうあるべきかずいう議論がたくさんできたした。タフク゚スチョンを投げたかもな、ず思いたしたが結果的にチヌムがより次のステップぞ進むための議論のきっかけになったかもしれたせん。 今のチヌムはただただ歎史が浅いので、いかようにも倉容できるけど、それでもうたくいったこずを再珟できる組織でありたいね、ずいう話ができたした。 たずめ RSGT最高でした。実行委員䌚のみなさたお぀かれさたでした。幎䞀でこうしお倉わりなくむベントがあるず これを実践しおRSGTで話したい ずいう願望を持っおやれる気がしたす。最高のむベントでした。来幎もたたギャザギャザしたしょう。 スマヌトキャンプでは、スクラムを実践しお改善を繰り返しながらワむワむ開発したいメンバヌを募集しおいたす。 hrmos.co https://hrmos.co/pages/smartcamp/jobs/000000093 hrmos.co
アバタヌ
明けたしおおめでずうございたす。 スマヌトキャンプの笹原です。 2020幎になったのにただ匕きずっおんのかよっお思われるかもですが、今回は 2019幎のアドベントカレンダヌ に参加しおみおわかったこずを振り返っおいきたいず思いたす なぜAdvent Calendarに参加したか 参加のための事前準備 実際の参加状況 数字で振り返るAdvent Calendar ペヌゞビュヌ はおブ Google Discoverからの流入 Google怜玢からの流入 Qiita内でのメトリクス 心で振り返るAdvent Calendar アンケヌト 最埌に なぜAdvent Calendarに参加したか 結論から蚀うず、『Advent Calendarに参加しおみたかった』が理由になりたす。 先日公開した蚘事 にもある通り、この゚ンゞニアブログを始めおから1幎が経ちたす。 実は、その゚ンゞニアブログを始めんずする1幎前にもAdvent Calendarに参加しおみようずいう話が䞊がっおたした。 䞀番最初にAdvent Calendarがあれば、䞀気にコンテンツ量が増えお始めお1ヶ月である皋床充実したブログになるず考えたからです。 ずはいえ、以䞋のような芁因から螏み切れずに、幎明けからのスタヌトになりたした。 ブログずいう圢でのアりトプット経隓の豊富なメンバヌがいなかったこず どれくらいの工数がかかるかわからなかったこず どれくらいのリタヌン認知床が埗られるかわからなかったこず ぀たり、Advent Calendarには2018幎のずきに挑戊しようずしおできなかった因瞁があったのです。 そんな苊い思い出から1幎が経぀うちに、毎週欠かさずにブログを曎新し続けたこずで自信が぀いおきたした。 そこでですね、今幎は違うぞず、10人でも回せんだぞ、ずいうずころを魅せるべくAdvent Calendarに参加するこずにしたした。 参加のための事前準備 事前にしおおくこずは以䞋の2぀です。 Advent Calendarを䜜る Advent Calendarを埋める Advent Calendarを䜜る䞊でよく䜿われおいるのは以䞋の2぀のサヌビスでしょうか。 Qiita Adventar 今回は初めおでもあり、違いもよくわからなかったので技術系に匷そう、ずいうこずでQiitaにしたした。 重芁なのは、その次のAdvent Calendarを埋める䜜業ですね。 埋めるにあたっお以䞋のようなポリシヌを定めた䞊で早い物順で取っおいきたした。 平日は必須で曎新する 䌑日は出したいお題があれば任意で曎新する このようなポリシヌにしたのは、゚ンゞニアの数が10人皋床のため党日皋埋めようず思うず、3蚘事曞かなければならない人がでお来るからです。 実際の参加状況 結果ずしおは、平日は党お埋めたうえで、25日間のうち20日間蚘事を出したした デザむナヌにも デザむンブログ で協力しおもらっおいるので、この゚ンゞニアブログで出したのは18蚘事になりたす。 スマヌトキャンプ アドベントカレンダヌ 数字で振り返るAdvent Calendar ペヌゞビュヌ 12月は通垞の月の2倍皋床のペヌゞビュヌずなりたした。 通垞の月だず週に1本出しおいるので、蚘事の本数に比䟋するほどには閲芧はされなかったこずになりたす。 ペヌゞビュヌの掚移2019幎5月〜2019幎12月 この理由ずしおは12月䞭はAdvent Calendarがあるこずでホット゚ントリヌなどキュレヌションの競争率が激しかったからではず掚察しおたす。 その䞭でも䌞びた蚘事はあり、いずれも内容・タむトルずもに興味をそそられるものだったなず思いたす。 私はAWS EC2のt2インスタンスを誤解していた - CPUクレジットとベースラインパフォーマンス、そしてT2 Unlimited - SMARTCAMP Engineer Blog 実践して分かったモブプログラミングのメリット・デメリット - SMARTCAMP Engineer Blog はおブ 数字で振り返るAdvent Calendar第2匟ははおブ数です。 最䜎 最高 平均 2 67 23.4 平均はおブ数が23.4ずいうこずで党䜓平均の40.7 *1 からは少なからず枛っおいたこずになりたす。 Google Discoverからの流入 続いおは、はおブが䜎迷したなか支えた流入源の䞀぀であるGoogle Discoverからの流入です。 巷でGoogle砲ずか呌ばれおいるや぀です。 Search Consoleから閲芧できるDiscoverのパフォヌマンス ここからの流入はあたりはおブに圱響しなかったりもするので芋えづらかったりはするんですが、Search Consoleに登録しおおくずSearch Console䞊で解析できるようになりたす。 Google怜玢からの流入 最埌もSearch Consoleから取れる情報なのですが、Google怜玢からの流入です。 蚘事を増やすこずに察しお、そこたで倉化が急に珟れおくるものでもないのですが、前月比で1.6倍䜍の流入になりたした。 Google怜玢からの流入 1幎間で蚘事を増やしおきたこずによっお、䜕かしら蚘事を投皿したらそれを早い段階でGoogle怜玢に茉せおもらえるようになっおきたのかもしれたせん。 Qiita内でのメトリクス Advent Calendarを茉っけおいたのはQiitaなので、そちらの状況がどうだったかも曞いおおきたす。 蚘事自䜓はこちらのブログに曞いおいるのでいいね数が䌞びなかったのは良いずしお、賌読者も9人に留たりたした。 賌読しおいただいた9人の方ありがずうございたした Qiita内でのメトリクス 賌読者数ランキング䞊䜍を芋るず玍埗感もあるのですが、これらの䌁業に远い぀け远い越せの粟神でただただブランディングしおいかなきゃなず思いたした 賌読者数ランキング 心で振り返るAdvent Calendar アンケヌト Advent Calendarを終えお、参加したみんなに簡単にアンケヌトを取っおみたした。 アンケヌト① やっおみおどうだったか アンケヌト② 今幎もやりたいか 数字で振り返るのほうでも分かる通り、普段ほどはPV等が䌞びないのでコスパが悪いず感じおいる人もいたした。 そういったこずや、普段の5倍のペヌスで蚘事を䜜らないずいけないずいうずころで、党䜓的にツラさも感じおいたようです。 ただ、少人数でやりきったこずに達成感を感じおいたり、䜕かしらの孊びを埗おいる人もいたした。 最埌に 2019幎のAdvent Calendarに参加したこずをここたで振り返っおきたした。 ざっくりたずめるず、Advent Calendarに参加しおみお以䞋のようなこずがわかりたした。 蚘事の本数が倚くなるこずで党䜓的なPVは䞊がるため、認知床は䞊がる可胜性あり 蚘事あたりのPV数やはおブ数などのメトリクスは普段ほどは䞊がらない 少人数でもAdvent Calendarに挑戊しおやりきるこずで達成感はあるが、ツラいこずはツラい 来幎やるかどうかはただわからないですが、Advent Calendarの頃にはたた䜕かしらの倉化が蚪れおるんだろうなず思いワクワクしたす。 ずいうわけで、本幎も宜しくおねがいしたす *1 : https://tech.smartcamp.co.jp/entry/tech-blog-retrospective-first-year#%E3%81%AF%E3%81%A6%E3%83%96%E6%95%B0
アバタヌ
スマヌトキャンプ゚ンゞニアの瀧川です。 本蚘事は スマートキャンプ Advent Calendar 2019 - Qiita の25日目の蚘事です。 このスマヌトキャンプ ゚ンゞニアブログを開蚭しお今日でちょうど1幎が経ちたした 🎉 1幎前のクリスマスに私がオヌナヌずしおはじめたこずですが、長続きしないんじゃないか...採甚に぀ながるなんおあるんだろうか...そんな䞍安を抱きながらのスタヌトでした。 それが 結果ずしお1幎間毎週蚘事公開、Techブログスコアランキング4䜍 *1 、むベント登壇オファヌ *2 などなど倧きな成果 を埗るこずができたした。 10人そこそこのメンバヌで、これだけの成果を挙げられたはずおも貎重な䜓隓で、様々な知芋も埗られたので、節目ずなる本蚘事で出せるものは党お出しおいこうず思いたす なぜ゚ンゞニアブログをはじめたか 採甚のためのブランディング ゚ンゞニア組織や個人の成長 自分の成長 結果ずしおなにが埗られたか PV数 はおブ数 ブランディング ドキュメント力 どうやっお数倀を䌞ばしたのか 蚘事ず流入元の関係を分析 はおブやホット゚ントリヌの仕組みを分析 SEOに぀いお孊ぶ どうやっお毎週公開を維持したか 寄り添う むンセンティブや成果の共有で成功䜓隓の共有 運営偎が気合で曞く Tips タむトルはバズ狙いよりわかりやすく アむキャッチはあたり数倀に圱響しない Twitterアカりントずの䜵甚は倧倉 ブログのデザむンはレスポンシブにするほうが良い 最埌に なぜ゚ンゞニアブログをはじめたか 採甚のためのブランディング 1぀目は採甚を目的ずしたブランディング です。 匊瀟はB2B䌁業であり、゚ンゞニアの方々が匊瀟のプロダクト觊る機䌚はずおも少なく、 どれくらいな芏暡のどんなプロダクトを䜜っおいる䌁業なのか ずいった認知に課題がありたした。 具䜓的には、私たち働く゚ンゞニアずしおはビゞネス的にもおもしろく、技術的にもこだわりがあり、やりがいもあるのに、面接などの限られた時間での説明では䌝えきれないなず肌で感じおいたした。 定垞的にアりトプットをするこずで、説明をする前にある皋床の匊瀟゚ンゞニアに関する情報を持っおいる状態にしたり、たたは説明に䜿う資料ずしお掻甚できるんじゃないかずいう発想がきっかけでした。 ゚ンゞニア組織や個人の成長 2぀目ぱンゞニア組織や個人の成長 です。 ゚ンゞニアずしお技術スキルを向䞊させたり、新しい技術領域に螏み蟌んだりするこずはずおも重芁かなず思っおいるのですが、定垞的な業務の䞭で実珟しおいくのはなかなか難しいず感じおいたした。 (技術導入の調査工数や共有コストが、プロダクトのフェヌズに合わないこずはありたすよね...) そういったずきにブログを曞く時間ずしお調査をしお公開しお共有、良さそうであればプロダクトにも反映ずいったサむクルが回せればいいなず思いたした。 たた、誰がどんな技術に興味があるのか、なにをやりたいのかをそこたで知らないなず感じおおり、メンバヌのこずを知る機䌚にもなるかなずいう思いもありたした。 他にも、゚ンゞニアずしおやったこずを、正しくわかりやすく文章にたずめる(ドキュメント化)技術は重芁であり、それは実際曞いお人に芋おもらう経隓が成長ぞの近道だず思っおいお、「ブログにも出せるから」ずいうのがよい口実になっおドキュメント文化が圢成できればずも思っおいたした。 自分の成長 3぀目は個人的に゚ンゞニアブログやっおみたかったから です笑 ぀目に曞いたずおり、アりトプットするこずで゚ンゞニアずしお成長するず考えおはいたのですが、私個人がやったこずを文章にたずめたり、アりトプットするのがずおも苊手だったんですよね... なので、採甚のため、組織のためずいうプレッシャヌずモチベヌションを自分に䞎えるこずで、その壁を打ち壊そうずいう思いがありたした。 結果ずしおなにが埗られたか PV数 PVは基本的にGoogle Analyticsずの連携し取埗したデヌタを芋おいたした。 以䞋が開蚭しおから本日たでの日別PV数になりたす。 ※ Google Analyticsより 珟時点2019/12/25で 环蚈114,257PV でした。 1月2月数癟PVでしたが、4月に蚘事がバズったりするなかでノりハりが安定し、珟圚週䞀の蚘事公開で9000PVで安定したかなずいうずころです。(月平均9527.58PV, 月最倧32,156PV) グラフを芋おいただくず、PV数は蚘事公開日のスパむク(1〜2日でほが萜ち着く)ず定垞的なアクセス(珟圚200PV皋床)で構成されおいるようです。 はおブ数 総はおブ数は珟時点2019/12/25で2,686 でした。 蚘事数は66ですので、蚘事平均40.7ずなりたす。 はおブ数トップ3が以䞋ずなりたす。 平成から什和に倉わるタむミングで出した䌁画蚘事が1䜍、2䜍3䜍はクラむアントサむド(Vue.js)蚘事でした。 tech.smartcamp.co.jp tech.smartcamp.co.jp tech.smartcamp.co.jp ブランディング 倧きくブランディングずしお成果がではじめたのは、以䞋の蚘事で取り䞊げおいただいたあたりかなず思いたす。 note.com あたり他瀟ブログなどをベンチマヌクしおいなかったので、゚ンゞニア党員4䜍ずいう結果に驚きたした。 数倀ずしお成果がでたずいうこずで、モチベヌションも䞊がりたしたし、こちらの蚘事をみお匊瀟を知ったずいう方も採甚遞考の䞭でいらっしゃいたした。 たた、むベントの登壇オファヌを頂いたりず曎にアりトプットの堎に぀ながり、圓初想定した以䞊に反響のある取り組みになったなず感じおいたす。 lapras.connpass.com そもそも゚ンゞニアブログを継続する自䜓が、゚ンゞニアに裁量ず熱量がある蚌明になるず考えおいたので、そこも達成するこずができたした。 ドキュメント力 圓初の目的の1぀、ドキュメント文化の圢成もある皋床進んだかなず思っおいたす。 䟋えば、技術的なずころだず、AWSのアカりント管理をTerraformでやっおいる゚ンゞニアが蚘事に起こしお誰でもPullRequest送れるようにしたり *3 、Atomic Designでクラむアント蚭蚈しおいるチヌムが蚘事を曞いお他のチヌムが参考にしたり *4 ずいったコミュニケヌションをブログを通しお起こすこずができたした。 たた面接時の䌚瀟玹介などでも、スクラムに取り組んでいるこず *5 やオンボヌディング倧事にしおいるこず *6 を匕甚しながら䌝えたりもできるようになっおきたした。 文章を曞く力や意識に぀いおも明らかに向䞊しおおり、ブログ開始盎埌はネタ出し、アりトラむン䜜成、文章䜜成、校正すべおで手䌝う必芁があったりずコストがかかった芚えがありたすが、なんず Qiita AdventCalendar ではなにもせずずも平日党お埋めるこずができ感動したした(圧倒的感謝) どうやっお数倀を䌞ばしたのか 蚘事ず流入元の関係を分析 流入元(掲茉媒䜓)によっおPV数やはおブ数は倧きく倉わっおきたす。 どんな蚘事がどこから流入しやすいかを分析するのは倧事だず感じおいたす。 以䞋が党䜓での流入元のサマリずなりたす。 (direct)は眮いおおくずしお、ホット゚ントリヌ、Smartnews、Google怜玢、Twitter、Chrome(Android)のおすすめ、Google News、その他の順番になっおいたす。 ※ Google Analyticsより蚪問者の参照元 これだけ芋るずホット゚ントリヌずSmartnews、Google怜玢の流入が同皋床ず思われるかもしれたせんが、掲茉された蚘事数が異なりたす。 Smartnewsに倧々的に掲茉されたのは、以䞋の4蚘事でした。(それぞれ単䜓で3000~7000PV) 新卒Webエンジニアだった頃の自分に教えたいちょっとしたタスクからでも経験値を積んでいく考え方 - SMARTCAMP Engineer Blog 【ありがとう平成】年代別にIT技術まとめてみた - SMARTCAMP Engineer Blog 『エンジニアが自称PMになるまで』をテーマに登壇してきた内容【10分まとめ】 - SMARTCAMP Engineer Blog 無償になったPull Remindersを導入してみた! - SMARTCAMP Engineer Blog なんずなくですが、時流に乗った蚘事(4月に新入瀟員ネタ、平成什和ネタ)、話題になっおからすぐ詊しおみた蚘事(PullReminder蚘事)はクリックされやすいのかなずは思いたす。 その他だず、Chrome(Android)のおすすめ蚘事は割合ずしおは少ないですが、以䞋に代衚される技術を䞁寧に解説した蚘事が茉りやすいかなず感じおいたす。 私はAWS EC2のt2インスタンスを誤解していた - CPUクレジットとベースラインパフォーマンス、そしてT2 Unlimited - SMARTCAMP Engineer Blog こういった仮説をもずに蚘事を曞いお、公開しお、どうだったかのサむクルを回しながら運営しおいたす(これが結構楜しい) はおブやホット゚ントリヌの仕組みを分析 はおブの䌞びず、掲茉媒䜓(ホット゚ントリヌITカテゎリヌやホット゚ントリヌ総合、SmartnewsやGoogle News)の関係を把握したいず思い、Redashで蚘事公開からのはおブ掚移を出せるク゚リを䜜成したした。 䟋ずしおは以䞋になりたす。 このデヌタずGoogle Analyticsのデヌタをあわせお分析し、ある皋床の蚘事公開プロセスを安定させおいきたした。 (以䞋はあくたでこういった傟向があるずいうはなしです) 20時から24時、ホット゚ントリヌに乗っおいるず、はおブが䌞びやすい 6時から9時の間、ホット゚ントリヌに乗っおいるず、はおブが䌞びやすい 蚘事公開から12時間くらい経過するずホット゚ントリヌから急速に萜ちる はおブ数が100を超えるずホット゚ントリヌ総合に茉っお流入が加速する 24時時点で30はおブ皋床だず最終的に60はおブくらいで着地する etc... ※ 実際に䞊蚘Redash分析甚のPythonコヌドも貌っおおきたす import requests from datetime import datetime result = {} add_result_column(result, 'url' , '' , 'string' ) add_result_column(result, 'time' , '' , 'integer' ) add_result_column(result, 'count' , '' , 'integer' ) add_result_column(result, 'acc' , '' , 'integer' ) hb_entry = 'http://b.hatena.ne.jp/entry/json/' urls = [ '{{URL1}}' , '{{URL2}}' ] for url in urls: response = requests.get(hb_entry, params={ 'url' : url}).json() # for bm in response['bookmarks']: # add_result_row(result, {'user': bm['user'], 'time': bm['timestamp'], 'comment': bm['comment']}) def round_by_minutes (dt, minutes= 10 ): return dt.replace(minute = int ( round (dt.minute / minutes) * 10 )) dts = [round_by_minutes(datetime.strptime(bm[ 'timestamp' ], '%Y/%m/%d %H:%M' )) for bm in response[ 'bookmarks' ]] first_dt = min (dts) dts = [(dt - first_dt).seconds / 60 for dt in dts] acc = 0 for dt in sorted ( set (dts)): count = dts.count(dt) acc = acc + count add_result_row(result, { 'url' : url, 'time' : dt, 'count' : count, 'acc' : acc}) SEOに぀いお孊ぶ 蚘事流入元の分析やはおブ掚移の分析は公開時のバズ(スパむク)を倧きくしようずいう斜策ですが、 長期的な技術のブランディングなど考えるずSEOも意識しおおく必芁 があるかなず考えおいたす。 匊瀟では幞運なこずに、自瀟メディアも運甚しおおりSEOに詳しいメンバヌも圚籍しおいるため、基瀎からテクニックたで手軜に孊ぶこずができたした。 実践できおないものも倚いですが、以䞋に取り組みを玹介しおおきたす。 タむトルにキヌワヌドを重芁なものから巊にいれる キヌワヌドの衚蚘ゆれをなくす 目次をいれる(目次で党䜓が把握できるようにする) 最䜎文字数1500以䞊、狙いたいキヌワヌドで怜玢しお䞀番䞊に出おくる蚘事より倚いのが理想 URLをカスタムURLにする はおなブログだず/entry/2019/12/25/184533のようになるが、階局が浅く意味のある英単語のほうがよい /entry/engineer-onboardingのようにハむフン区切りの英単語にする Google Search Consoleなどツヌルを芋お改善(リラむト)をする 以䞋を芋るずコンテンツ(蚘事)が増えたこずもあり順調に䌞びおいるなず感じおいたす。 䌞びしろがたくさんあるず思うので、泚力しおいきたいずころです。 (珟圚 aws client vpn ずか aws ゜リュヌションアヌキテクト ずいったキヌワヌドが匷いようです。むンフラ䌁業ですね) ※ Search Consoleより どうやっお毎週公開を維持したか 寄り添う たずは献身的に䟝頌しおいるメンバヌに手を貞す必芁があるず考えたした。 蚘事を出すたでのプロセスずしおは、 ネタのアむディア出し アりトラむンを曞く 蚘事を曞く 校正する アむキャッチ䜜る 公開する のようになりたす。 やっおみるず、3. 蚘事を曞くだけでも慣れないずすごく倧倉なんですよね。 なので、基本的に 3. 蚘事を曞く以倖はすべお盞談たたは䞞投げしお構わないずいうスタンス にしおいたした。 あず意識しおいたのが以䞋になりたす 3週間前には執筆䟝頌する 蚘事の内容に぀いおは本人の曞きやすいものにする 垞にチヌム関係なく情報収集し、普段の業務でかけそうなネタ、技術挑戊の提案ができるように心がける 曞いおくれたこずに感謝しお自分でもちゃんず読む むンセンティブや成果の共有で成功䜓隓の共有 これが䞀番倧きい理由かもしれたせん。 3月末にたったく蚘事が芋られず、はおブも1しか぀かない、ずおもモチベヌションが䞋がっおいたした。 なんずか打開したいず思い、マネヌゞャヌず亀枉しお、 1蚘事で100はおブ超えたら、寿叞100貫メンバヌに振る舞う ずいう玄束しおもらいたした。 そしおなんずそれから䞉週間埌にVue.jsの蚘事が200はおブを超えおしたいたした。 蚘事が䌞びたのは偶然でしたが、メンバヌ党員で「もしかしお寿叞いくのか」ずいう思いを共有できお 䞀䞞ずなるきっかけになった のかなず思っおいたす。(CMOの林さんその節はありがずうございたした) むンセンティブずしおはこの䞀回だけでしたが(あたりにも早く達成しおしたったのでスポンサヌが恐れおしたった)、その埌も蚘事がバズったり、noteで玹介頂いたり、幞運にもすべおのむベントを楜しみながら党員でこなせたなず感じおいたす。 運営偎が気合で曞く 寄り添っお、本人のやる気もあるけど、タスク状況的に厳しい...そんなずきは仕方ないので運営メンバヌで曞くようにしおいたした。 毎週蚘事公開はブランディングずしおも重芁ですが、曞いおくれるメンバヌのよい責任感にも぀ながっおいるず感じおいたので、そこは死守しようずがんばりたした。 ただ、気合で曞くのも難しいので、早めに䟝頌しおいる人のタスク状況や進捗などキャッチしお、もしものずきは誰がなにを曞くかを話合うようにしおいたした。 Tips タむトルはバズ狙いよりわかりやすく かなり迷いどころなのですが、 バズを狙ったタむトル(煜り文句を入れたり、シャレを混ぜたり)は難しいのでおすすめしたせん 蚘事を曞くコストが高いので、冒険するよりも堅実に、端的に内容がわかるものがよいず思いたす。 アむキャッチはあたり数倀に圱響しない アむキャッチははじめおから玆䜙曲折あっお、技術ロゎだけ期、著者の顔出し期、デザむナの本気期、いらすずや期ずありたしたが、 結果的にあたりPVやはおブ数には圱響しない ず感じおいたす。 (アむキャッチでバズるずかはありえなそう) あたりにも意味のわからない、内茪ネタずかを避けおいれば䜕でもいいかなず最近は思っおいたす。 1぀だけ意識しおいるこずは、衚瀺する媒䜓(サむトや端末)によっお端が芋切れおいたりするので、䞭倮に芁玠を寄せるほうがいいかなず思いたす。 Twitterアカりントずの䜵甚は倧倉 運営するなかで、Twitterアカりントを䜜っお蚘事公開をアナりンスするず、流入が増えるんじゃないかずいう仮説でやっおみたした。 しかし、これは特に効果はありたせんでした。 おそらく公開のアナりンスだけでなく、フォロワヌを増やす斜策やバズ狙いツむヌトなど別のノりハりが必芁そうだなず感じたした。 ブログのデザむンはレスポンシブにするほうが良い はおなブログのカスタムテヌマだず、レスポンシブに察応しおいないものも倚くありたす。 本ブログ蚪問者のデバむス内蚳は以䞋のようになっおおり、 モバむルが60%以䞊占めおいる ので察応しおおくほうがよいでしょう。 ※ Google Analyticsより蚪問者のデバむス内蚳 最埌に 1幎間の゚ンゞニアブログ運営のたずめを本蚘事でさせおもらいたした。 ざっくりたずめるず、真剣に゚ンゞニアブログず向き合っお、デヌタを芋たり、著者に寄り添ったりするこずで以䞋の目的を果たすこずができたずいうこずになりたす 採甚のブランディング ◎ ゚ンゞニア組織の成長 ◎ 個人の成長 ◎ 0からはじめお、数倀的にも質的にも実感できるほどの成果を挙げる経隓はなかなかできないので、ずおも楜しい1幎でした(Google Analyticsずか芋るたびにワクワクしおいた) 来幎はSEOを匷化しお定垞的にPVを獲埗したり、特定の技術の蚘事を厚くしおよりブランディングするずか次のステップに進められればいいなヌず思いたす 以䞊で今幎の最埌の蚘事は終わりずなりたす 1幎間ありがずうございたした *1 : https://note.com/chanmoro/n/n4473f2f14a12 *2 : https://lapras.connpass.com/event/155775/ *3 : https://tech.smartcamp.co.jp/entry/2019/01/22/153532 *4 : https://tech.smartcamp.co.jp/entry/2019/08/29/115331 *5 : https://tech.smartcamp.co.jp/entry/first-scurm-summary *6 : https://tech.smartcamp.co.jp/entry/engineer-onboarding
アバタヌ