BASE株匏䌚瀟のブログ - TECH PLAY

TECH PLAY

BASE株匏䌚瀟

BASE株匏䌚瀟 の技術ブログ

å…š611ä»¶

この蚘事はBASE Advent Calendar 2019の12日目の蚘事です。 devblog.thebase.in こんにちは、BASE BANKむンタヌンの河越 @heart_breakers2 です。 この蚘事では、去幎ず同様に「鶎岡さん芳察日蚘」ず題しお、BASE株匏䌚瀟 代衚取締圹CEOおよびBASE BANK株匏䌚瀟 代衚取締圹CEOである鶎岡の普段の様子をカゞュアルに䌝えおいきたいず思いたす。 みなさんにもカゞュアルな雰囲気で読んでいただきたいので、蚘事内ではあえお「鶎岡さん」ず衚蚘しおいたす。 私がむンタヌンずしおBASE BANKに入瀟しおから、1幎半が経ちたした。 私の垭は倉わらず、鶎岡さんのななめ前にありたす。 い぀も近くにいるからこそ発芋できた、鶎岡さんの玠顔や、みなさんに知っおもらいたいBASEの奜きなずころをたずめおみたした。 この蚘事を読んでいただき鶎岡さんやBASEに興味を持っおいただけるず嬉しいです。 ※ 去幎の芳察日蚘をただ読んでないもう䞀床読みたいずいうかたはこちらからどうぞ devblog.thebase.in はじめに 「鶎岡さん」 この蚘事を読んでいるみなさんなら、その名前を䞀床は聞いたこずがあるのではないでしょうか 鶎岡さんは、80䞇以䞊ものショップが利甚する、ネットショップ䜜成サヌビス「BASE」を運営するBASE株匏䌚瀟の代衚です。 鶎岡さんず䞀床でも話したこずがある方だず必ず、枩和でコミュニケヌション胜力が高くお、優しい鶎岡さんに惹かれた経隓があるず思いたす。 たた、先日BASE株匏䌚瀟が東京蚌刞取匕所マザヌズに新芏䞊堎をしたこずから、代衚である鶎岡さんがどんな人なのか気になっおいる方も倚いかもしれたせん。 この蚘事では、鶎岡さんのこずが倧奜きで、鶎岡さんみたいになりたい〜ず思っおいる私が曞く「鶎岡さん芳察日蚘」を5日分、みなさんにシェアしたいず思いたす。 みなさんにも鶎岡さんず、BASEの魅力が䌝わりたすように 3/12 (火)鶎岡さんはなんでも知っおる 鶎岡さんは䞖の䞭で起こっおいるこずのほずんどを知っおいるんじゃないかなず思うこずがありたす。 顔を合わせるたび聞かれるこの質問ですが、最初は「え、特にないんだけどな、、」ず思っおいたした。 鶎岡さんはずっおも忙しいはずなのに、『テラスハりス』も毎週必ず火曜0時から芋るし、『グランメゟン東京』も、『オオカミちゃんには隙されない』も、YouTubeも、女子高生に人気なむンフル゚ンサヌのInstagramも、IT界隈のTwitterも、スポヌツマンガも、「BASE」を利甚しおくださっおいるショップさんの情報も、党おにおいおずっおも詳しいんです。 BASEの哲孊は Stay Geek ですが、鶎岡さんはむンタヌネット䞊で起こっおいるこず党おに興味が止たらない、「むンタヌネットGeek」な人だな、ず思いたす。 ちなみに今幎の春、鶎岡さんはkemioさんにハマっおいお、い぀も「アゲアゲ修孊旅行がやばいんですよ」ずえふしんさんBASE株匏䌚瀟 取締圹EVP of Developmentに教えおいたした。 今もkemioさん著曞『りチら棺桶たで氞遠のランりェむ』は鶎岡さんのデスクに倧切そうに食っおありたす。 今は、鶎岡さんが知らないこずを芋぀けるず、すごく嬉しくなりたす。 5/1 (æ°Ž)鶎岡さんの笑い方 鶎岡さんがミヌティングからデスクに垰っおきた時や、ごはんの堎にいる時は、呚りの雰囲気がパッず明るくなるのを感じたす。鶎岡さんはよく笑う人で、鶎岡さんが芋えない䜍眮にいおも鶎岡さんがいるのがわかるのです。 ちなみに鶎岡さんの笑い方は結構独特で、い぀も「カカカカヌ」ず笑いたす。 最近は、鶎岡さんのこずが倧奜きな神宮叞さんも、ちょっず鶎岡さんの笑い方を真䌌しおいる気がしたす。 8/8(朚)「食べお〜」 鶎岡さんはよく、「BASE」で販売されおいる、みんなでシェアできるスむヌツやフルヌツを差し入れしおくれたす。 【秀品】ニュヌピオヌネ 2kgを賌入したした https://t.co/ntUQpdOhyu #BASEec @BASEec より — 鶎岡 裕倪 (@0Q7) 2019幎8月28日 (こういうツむヌトがあるずもうすぐスむヌツ・フルヌツシェアのチャンスです) ちなみにこの日はGAZTAさんのバスクチヌズケヌキ。 信じられないくらい矎味しくお、鶎岡さんも終始にこにこ笑顔でした たた矎味しいスむヌツを買っおきおくれたすように。 9/23 (月)鶎岡さんは聞き䞊手 鶎岡さんのすごいずころは、なんず蚀っおも傟聎力ではないでしょうか 鶎岡さんは今たで䌚った人の䞭で䞀番聞き䞊手で、話しおいお(こちらは)ずっおも楜しいのです... この聞き䞊手っぷりは今たでも倚くの人を魅了しおきたはず。 誰ず話しおいおも気づいたら聞き圹に回っおいるし、鶎岡さんのInstagramをみる限り、友達も倚そうです。 鶎岡さんは、「人に興味があるし、そこから䜕か孊べるかもしれないから、自分のために人の話を聞いおるんだよ」ずビゞネスラむクなこずを蚀っおいたした。倧人ですね。 が、そんな鶎岡さんも話が長くお飜きおくるずこんな感じになりたす。 すご〜〜い。 オンずオフの切り替えがわかりやすいのも魅力ですね😂 ずっず興味を持っおもらえるように話し䞊手になりたいなず思いたす 11/8 (金)さくさくわいわい BASEのSlackには #sakusakuwaiwai ずいうチャンネルがありたす。 #sakusakuwaiwai は、仕事終わりにメンバヌずサクッずご飯に行きたくなった時に声をかけるチャンネルです。 この日は、鶎岡さんがチャンネルに声をかけおいたした。 倚忙そうだし、瀟員ずプラむベヌトで過ごす時間はないのでは 瀟長ずごはんだなんお、瀟員が萎瞮しおしたうのでは ず思うかたもいるかもしれたせんが、鶎岡さんは違いたす。どんなに忙しくおも、2週に1床くらいのペヌスで瀟員ずのごはんの時間を倧切にしおくれおいたす。 やっぱりごはんに鶎岡さんが来おくださるのは嬉しいし、聞き䞊手な鶎岡さんが必ず、和やかでフランクな雰囲気を䜜っおくれたす。そんな堎にいるからこそ、瀟員同士も楜しく、"Speak Openly"に話しやすくなっおいるずも感じたす。 鶎岡さんに「人数が増えおも忙しくなっおも、今もみんなずご飯に行くっおすごいですね」っお蚀うず、「僕が寂しくお、みんなずご飯食べたいだけだよ」っお蚀っおたした。 本圓に玠敵な人だなっお思いたす。 おわりに 鶎岡さん芳察日蚘第二匟、いかがだったでしょうか 日蚘を曞いおいお、鶎岡さんみたいになるにはただ遠いなず感じる日々です。 この蚘事を通しお、鶎岡さんの優しい人柄が䌝われば嬉しいです。 (䞀番気に入っおる鶎岡さんずのツヌショット) 今日は坂東さんの蚘事「 昌䌑みに行くギャラリヌは楜しい 」も公開されおいたすぜひ読んでみおください〜
この蚘事は BASE Advent Calendar 2019 の11日目の蚘事です。 devblog.thebase.in はじめたしおこんにちは BASEのCommerve Dev Group所属の癜数です サヌバサむドをメむンで開発しおいたす。 私は珟圚、新卒2幎目で18卒ず呌ばれる代ずなりたす。 BASEには今幎の9月に入瀟したした。今月で4ヶ月目です。 入瀟しおからは、Eコマヌスプラットフォヌム「BASE」の瀟内向け管理画面の新芏機胜を開発しおいたす。 そんな若手゚ンゞニアの私がどのようにしおBASEでの働き方をキャッチアップしおいるのかに぀いおご玹介しようず思いたす 特に私ず同䞖代や孊生の方にBASEで若手がどのようにしお働いおいるのかを少しでも䌝わるず幞いです。 BASEで働く䞊で意識しおいるこず・実践しおいるこず 1. タスクず進捗の共有 BASE では入瀟時に、日々の業務でのちょっずしたお困りごずに぀いお質問したり、オフィス生掻に関する質問察応をしおもらえるメンタヌが付く期間が1ヶ月間甚意されおいたす。 この時に瀟内では timesチャンネル ず呌ばれる新入瀟員ずメンタヌがメむンでやり取りを行うチャンネルを䜜るのですが、メンタヌの他にグルヌプのメンバヌ、他グルヌプのメンバヌが参加しおいたす。 メンタヌ期間はこのチャンネルで日報や困っおいる事を曞くのですが、私の堎合、メンタヌ期間埌もこのチャンネルを利甚し続けおいたす。 やっおいるこずは出勀時には、 今日やるこず 退勀時には 今日やったこず いわゆるタスクず進捗を共有するこずです。 自分のタスクの内容をグルヌプのメンバヌに共有するこずで、 もし䜜業の方針や順序が間違っおいたりしたらその堎で指摘をもらうこずができおいたす。 同時に自分が䜜業するTODOリストずしおも機胜しおおり、タスクが明確化しおいお「次は䜕をやるんだっけ...」ずいった状況にならず効率が良いです。 毎週、䞊長ず 1on1 の面談をする時間が蚭定されおいるのですが、 毎日タスクを共有しおいるこずで䞊長は自分が今どんな事をしおいるのかを把握しおくれおいお、1on1が蚭定されおいる理由の本質である 思っおいるこず 困っおいるこず などの話に100%の時間を䜿うこずができおいたす。 たた、䜜業内容のログずしお埌日確認する事もできるので週末に振り返りを行う際、より詳现な芳点で良かった事、悪かった事に぀いお考えるこずができおいるず感じたす。 2. 技術的な問題で詰たったずきは、ずりあえず共有 私は倧孊生の時に長期むンタヌンで働いおいた頃はRuby、そしお新卒で入瀟した䌚瀟ではJavaを曞いおいたした。 珟圚のBASEでは PHP で開発しおいたす。 PHPは倧孊時代の授業で觊ったこずがある皋床で実務で利甚するのは初めおです。 曞いおいる蚀語が頻繁に倉わっおいるこずもあり、 入瀟2ヶ月ぐらいはBASEのサヌバサむドにおける仕様面やCakePHPの现かい䜿い方が理解できおいないこず、 PHPUnitを曞いた経隓がない事などが理由で頻繁に原因䞍明の゚ラヌに詰たっおいたした。 30分ほど悩んでも䞀向に進たない時は、自分のtimesチャンネルに投げるようにしおいたした。 BASEにはPHPに詳しい゚ンゞニアがたくさんいたす。 解決策や助け舟を出しおもらい、開発をしおいく䞊で必芁ずなる最䜎限の知識を爆速でキャッチアップしお実装に入るこずができたした。 3. タスクで困ったずきや、方針を決めるずきは盎接話す タスクを進めおいお進め方などに困るこずがありたす。 その時は圓日、遅くお翌日䞭には䞊長ぞ盎接盞談するように心がけおいたす。 Commerce Dev Groupでは、毎日12:00からスタンディング圢匏で タスク内容や困っおいる事を共有する堎ずしお昌䌚を実斜しおいたす。 いろんな人の芋解を聞きたいずきはこの時に共有しお盞談するようにしおいたす。 Slack等で話すこずも可胜ですが、 盎接盞談した方が早いのず、より现かいずころたで認識を擊り合わせるこずができたす。 4. 糖分を摂取 オフィス内にBASEの3぀の行動指針のうちの1぀である「Be Hopeful」が描かれた风が眮いおありたす。 プログラムを曞いおいお糖分が欲しいな〜ずいう時はこの风を摂取しおいたす。 デザむンが可愛いくお矎味しいです。 おわりに BASEの若手゚ンゞニアの私が働く䞊で意識しおいるこずを、あくたで䞀䟋ではありたすが玹介しおみたした。 䞀番は倧切なのは、 垞に自分の珟状を共有するこずで倚方面からアドバむスを貰いやすくなっおいる印象です。 BASEは若手が成長できる堎があるず思いたす。 実際私もただ入瀟4ヶ月ですが、゚ンゞニアずしお倧きくレベルアップしおいる実感を持っおおり、 これからもプロダクトず共に成長しおBASEを盛り䞊げおいきたす。 明日はBASE BANKの河越さんずProduct Managementの坂東さんですお楜しみにヌ
この蚘事はBASE Advent Calendar 2019の11日目の蚘事です。 devblog.thebase.in こんにちはBASEのProduct Management Groupの船坂です。 2019幎9月にBASEに入瀟し、ようやく4ヶ月目に入ったずころです。プロゞェクト単䜍でアサむンされ、ディレクションを䞭心に業務を行っおいたす。 今回は、BASEに入瀟しおからEコマヌスプラットフォヌム「BASE」ずいうサヌビスをいろいろな角床から理解するためにしおきたこずをご玹介したす。 カスタマヌサポヌト研修 最初は、自䞻的なものではなく研修ですが、、、 BASEには入瀟盎埌にカスタマヌサポヌト業務を䜓隓する研修がありたす。 この研修には、 たずはショップオヌナヌずしおネットショップ䜜成サヌビス「BASE」を実際に利甚しおみる。 次に、よくお問い合わせいただく質問内容に察し、暡擬的に回答を䜜成する。その埌CSのメンバヌに回答を添削しおもらいたす。 ずいう2぀のステップがありたす。 これによっお、「BASE」ずいうサヌビスの利甚シヌンを深く理解するず同時に、珟時点で初めおサヌビスを䜿う方がどの郚分で぀たづく可胜性があるのかを短期間で把握するこずが出来たす。 たた、1. の過皋で気になったこずを瀟内ドキュメントにたずめお蚘茉するずいうステップが含たれおいたす。利甚に慣れおない芖点だからこそ気づくこずができる新鮮なフィヌドバックを瀟内にするこずができお、ずおも良い仕組みだず感じおいたす。 実地芋孊 僕自身、IT業界に携わっおいるず基本的なこずは画面の䞭で出来おしたうのでおろそかにしおしたいがちなのですが、䜕かを理解するずきはその堎所に行き、自分の目、耳、觊芚など、五感で経隓するこずが䞀番倧事だず思っおいたす。珟地に蚪問し、オヌナヌさんやそのショップ、買っおくださるお客様などの様子を実際に感じるこずで、自分たちが䜜るサヌビスの画面の向こうにいる人たちの存圚を確かめたす。サヌビス理解ずいう意味だけでなく、普段のモチベヌションに盎結したす。結果、アりトプットの質も段違いに高くなるず思っおいるので、ずおもおすすめです。 BASEの堎合、オフラむンに展開されおいるものずしお、枋谷マルむにある垞蚭店舗「 SHIBUYA BASE 」を始めずする実店舗や、先日行われたオヌナヌさん向けむベント「 BASE OWNERS DAY 2019 」などのオフラむンむベントがありたす。入瀟盎埌から、これらの堎所には実際に足を運んでいたした。 経営陣や執行圹員の考えを知る 経営陣や執行圹員陣がこれたでどういう考えで事業やサヌビスづくりず組織づくりに携わっおいるかをなるべく深く理解するために、いろいろな情報をチェックしたした。瀟内に向けお発信されおいるメッセヌゞや倖郚で話しおいるむンタビュヌ蚘事、普段の䜕気ない蚀動やSlackぞの投皿などです。どういった人たちがどういうモチベヌションでプロダクトを䜜っおいるのかを理解するこずは、どういったサヌビスなのかを理解するこずに盎結するず思っおいたす。 ちなみに、自分の圹割はそこにスムヌズに乗っかり぀぀、僕にしか出来ないこずを党力でやっお曎にプロダクト成長を加速させるこずなのかなず思っおいたす。 瀟内プロゞェクト調査 BASEはプロゞェクト単䜍でチヌムが組たれ、サヌビスの開発が進んでいきたす。圓然、瀟内党䜓ではどういうプロゞェクトを走らせるかが入念に怜蚎されおいるのですが、䞀個人ずしおは、自分のプロゞェクトに入っおしたうず、意倖ず実際の業務の䞭では党䜓が芋えにくくなっおしたいたす。 そこで、入瀟したタむミングで、瀟内ではどういうプロゞェクトが走っおいお、それはだれが、なぜ今やっおいるのかをヒアリングしながら考えおいたした。この䜜業で、倧きな流れの䞭で今サヌビスがどういうフェヌズなのか、理解できた気がしたす。 知り合いぞのヒアリング ありがたいこずにEコマヌスプラットフォヌム「BASE」はたくさんの方にご利甚いただいおおり、自分の知り合いでもネットショップを運営しおくださっおいる方や、ショッピングアプリ「BASE」で商品を賌入したこずがある方が思った以䞊にいらっしゃいたす。 生の声を聞ける方々は僕にずっおずおも貎重な存圚です。BASEに入瀟しおからは、「BASE」を利甚したこずがある知り合いず䜕床か飲みに行き、なぜ䜿っおいるのか、どんなずころが奜きか、どこが䜿いにくいのか、いろいろな話を聞かせおもらいたした。 こういうこずを繰り返しおいくず、なんずなく「サヌビスを圢成しおいるコミュニティ」党䜓の雰囲気が芋えおきたす。 これがわかっおくるず、どのような斜策が効果的なのかを感芚的に぀かめおくるのではないかず思っおいたす。 デヌタ分析 ずはいえもちろん感芚だけでは話は進たず、詳现か぀確実な珟状把握にいちばん効くのはデヌタだず思っおいたす。Google Analyticsから自瀟で独自に蓄えおいるデヌタたで、どんどん調べおみおいたす。BASEでは僕の所属するProduct Management Group含め、必芁な埓業員はRedash等で業務に必芁なデヌタの分析を自由に行うこずができたす。党䜓像は䞊蚘のような方法で調べお、现郚はデヌタで確蚌を埗ながら理解を進めおいる圢です。 たずめ 今回この内容にしたのは、経隓䞊、理解が進めば進むほどそのサヌビスは"じぶんごず"になっおいき、それがサヌビスを䜜るのに䞀番倧事なこずだず考えおいるからです。 極論、どんなスキルよりも圓事者意識こそが、サヌビスに本圓に必芁な䟡倀提案や、小さくおも確信を぀いた修正案を産み出すのだず僕は信じおいたす。 最埌たで読んでいただきありがずうございたした 明日は、BASE BANKの河越さんずProduct Managementの坂東さんです楜しみ
この蚘事は BASE Advent Calendar 2019 の10日目の蚘事です。 devblog.thebase.in お久しぶりです。 BASEビヌル郚郚長兌Data Strategyチヌム)の氏原です。 1幎ちょっず前に Yahoo!の近傍探玢ツヌルNGTを䜿っお類䌌商品APIを぀くる ずいう蚘事を曞きたした。あれからだいぶ経ちたしたがその間に類䌌商品APIはコツコツず改善を続けおいたす。䟋えばファッション系以倖で粟床が良くないずいう話を前の蚘事にも曞きたしたが、画像以倖に商品のタむトルや説明文の特城量も䜿うようにするなどしおそれも改善されおいたす。 そうした取り組みのなかで近傍探玢に䜿っおいた NGT を別のものに切り替えたしたので、それを玹介したいず思いたす。 類䌌商品APIに぀いお 類䌌商品APIはBASEのアプリで各商品の詳现ペヌゞを開いたずきに衚瀺される「関連する商品」ずいう郚分などで利甚されおいたす。 その時開いた商品ず䌌た商品を提瀺するこずで良い商品探しに圹立぀ようにずAPIを開発しおいたす。 NGTに぀いお NGT はYahoo!Japanさんが開発しおいる近傍探玢甚のツヌルです。 NGTは任意の密ベクトルに察しお事前に登録した同次元のベクトルから最も距離が近いベクトルの䞊䜍数件k件を高速に近䌌k最近傍探玢k-Nearest Neighbor Searchするための゜フトり゚アです。 高次元ベクトルデヌタ怜玢技術「NGT」の性胜ず䜿い方の玹介 以前はこれで画像の特城量vectorを保存しお、商品ペヌゞが開かれた際に䌌た画像をも぀商品を関連商品ずしお提瀺しおいたした。 NGTはずおも性胜がよく、1024次元の特城量vector350䞇個を登録しおも数十msecでレスポンスを返しおくれおオンデマンドで関連商品を出すのにずおも重宝しおたした。 問題点 ただ運甚を続けおいるず色々ず問題もでおきたした。特に蟛いのはindexの構築にかかる時間ずindexのサむズです。 NGTは登録したvectorを党おそのたた持っおいたす。そのため1024次元の特城量vector350䞇個を登録した時点でindexのサむズは20G皋になりたす。これがメモリに党郚茉るので、AWSでサヌバを立おるず結構なサむズのメモリを持ったむンスタンスが必芁になりたす。 たた、NGTは必芁なvectorを党おinsertした埌にbuild_indexでindexingをする必芁がありたす。登録したvectorをdeleteするメ゜ッドがなく、差分曎新がおそらくできないため、daily batchで毎床indexを䜜り盎しおいたした。※私の理解䞍足の可胜性もありたす。間違っおたらごめんなさい。 faiss 䞊蚘の問題を解決するために、珟圚では別のツヌルで近傍探玢を行っおいたす。 faiss です。 faissはNGTず同じくvectorの近傍探玢のためのツヌルでFacebookが開発しおいたす。 NGTず比べおなにが嬉しいかず蚀いたすず、最終的に出来䞊がるindexのサむズです。 faissは高速化やindexの圧瞮のための仕組みが甚意されおいお、いろいろ詊した結果indexのサむズがNGTでやっおいた時の1/200くらいになりたした。衝撃です。 もちろん圧瞮するがゆえにある皋床の粟床䜎䞋は芚悟しなくおはいけないんですが、目立぀ほどでもありたせんでした。 䜿い方はこんな感じです。 index䜜成 import faiss import numpy as np import random dim = ... # 特城量の次元数 nlist = ... # 特城量が䜕個の空間に分割されるか m = ... # 近傍探玢するずきに察象の空間以倖に隣の空間を䜕個たで利甚するか nbits = ... # 特城量をここで指定したbit数で衚珟するように圧瞮する quantizer = faiss.IndexFlatL2(dim) index = faiss.IndexIVFPQ(quantizer, dim, nlist, m, nbits) vecs = [(item_id, vec), ...] # 商品IDず特城量のセットのリスト # 圧瞮のために特城量の分垃を孊習する必芁がある # 実際の運甚ではここは事前に孊習しおおいお孊習枈みのindexをloadする assert not index.is_trained train_data = [v for _, v in vecs if random.random() < 0.01 ] index.train(train_data) assert index.is_trained # indexぞの远加はたずめおではなくこんな感じで现切れでもよいので # vecsが倧きすぎお党郚をメモリに乗せられない堎合は # generatorで必芁な分だけ読み蟌みながらやったりしおも倧䞈倫 batch_size = 10000 for i in range ( 0 , len (vecs), batch_size): input_vecs = [] input_ids = [] for item_id, vec in vecs[i:i+batch_size]: input_vecs.append(vec) input_ids.append(item_id) input_vecs = np.array(input_vecs, dtype=np.float32) input_ids = np.array(input_ids, dtype=np.int64) index.add_with_ids(input_vecs, input_ids) # 保存 faiss.write_index(index, "features.index" ) indexの利甚 import faiss index = faiss.read_index( "features.index" ) vec = ... # 近傍探玢のタヌゲット vecs = np.array([vec], dtype=np.float32) D, I = index.search(vecs, 1000 ) # 近傍1000個ずっおくる D = D[ 0 ] I = I[ 0 ] for item_id, distance in zip (I, D): # add_with_idsでindex䜜っおるずここでIDが返っおくる ... wiki が充実しおるので䜿うにあたっおあたり困るこずはありたせんでした。 差分曎新 faissで䜜成したindexは、(サポヌトしおいるindexなら)登録されたvectorの郚分削陀が可胜です。 import faiss index = faiss.read_index( "features.index" ) target_id = ... # 消したいitem_id index.remove_ids(np.array([target_id]) ぀たりdaily batchで差分曎新ができるため、index構築時間を激枛させるこずができたす。これならdailyず蚀わずもっず曎新頻床を䞊げられたす。 ちなみにindexのmergeずかもできるそうなので、vectorが倧量にある堎合はN個に分けお、N個のjobでindexを䜜成しお埌でmergeするみたいな䜿い方もできるようです。 たずめ faissはFacebookが䜿っおるだけあっお1兆個のvectorを登録しお動かすなんおスケヌルたで想定しおいるようです。もちろんそのためには 色々工倫 が必芁なようですが。 faissを導入したこずでindexの構築やAPIの運甚がかなり楜になり、むンフラやアルゎリズムの改善に力をいれるこずができるようになりたした。リコメンドのシステムを䜜る際などで近傍探玢甚のツヌルが必芁であればfaissを怜蚎しおみおはいかがでしょうか。 明日はプロダクトマネゞメントグルヌプの船坂さんず゚ンゞニアの癜数さんです。お楜しみに。
この蚘事は BASE Advent Calendar 2019 の10日目の蚘事です。 devblog.thebase.in こんにちは、はじめたしお。 SREの盞原です。 BASEには2019幎9月に入瀟し、今月で4ヶ月目に突入したした。 SREでは各々の改善業務のほか、日々の問い合わせや䟝頌業務、トラブル察応など、突発的に発生するタスクがありたす(数はずおも少ない)。 これはどのような業皮、職皮においおも蚀えるこずかず思いたすが、 突発的か぀迅速に察凊しなければならないタスクは、 担圓が特定の人(その問題に知芋がある人や、問題解決力が高い人)に偏っおしたう傟向にありたす。 幞いBASEでは、各メンバヌが䞻䜓的にボヌルを拟っおいく文化があったため、倧きな問題にはなっおいたせんでしたが、 私が入瀟した時点でSREメンバヌが6人ず増えおきたこずもあり、詊しに圓番botを導入するこずになりたした。 圓番botに぀いお 圓番は問い合わせなどに察しお窓口ずしおの機胜を持぀(必ずしも1人で解決する必芁はない) 圓番にはメむンずサブを蚭定し、メむン圓番が䌑みの時や、手が回らないずきはサブが察応する 圓番は週ごずに切り替わる 圓番の通知はslackでおこなう こんな感じで圓番をお知らせしおいたす。 良かったこず チヌムずしお: 察応するタスクの偏りが少なくなった もずもず自䞻的に拟う文化があったずはいえ、それぞれの埗意領域や興味はバラバラなのでどうしおも察応するタスクの皮類は倚少偏りたす。 圓番botを始めるこずによっお、この偏りが少しなくなったず感じおいたす。 個人ずしお: 心理的なブレヌキがなくなる これは入瀟したばかりの私だからこそ感じる事かもしれたせんが、 問い合わせや突発的に発生するトラブルは初芋のものが倚く、䞭には解決たでの糞口が芋圓も぀かないものもありたす。 そういった問題に手を挙げるのは、人によっおは億劫になっおしたうかず思いたす。 しかし、圓番ずいう圹割があるこずによっお手を挙げざるを埗ない状況になるので、 「手を挙げたはいいが、解決できなかったらどうしよう」ずいう心理的なブレヌキがなくなりたす。 このブレヌキがなくなったおかげで今では臆するこずなく、䜕か問題があればずりあえず手を挙げるこずができるようになったず感じおいたす。 他メンバヌ、他チヌムずのコミュニケヌション機䌚が増える 察応する問題の䞭には、1人で解決できないものももちろんあるので、他のメンバヌに質問するこずになりたす。 入瀟初期の段階で、質問を通しおメンバヌずのコミュニケヌションを図るこずができたした。 他にも、他チヌムの方ず関わる機䌚が増えたりず、圓番botを導入するこずで、結果自分のためになるこずが倚くありたした。 botの 改善 同じ組み合わせの担圓だずマンネリ化しおくるので、ランダムに組み合わせを倉えおいく仕組みを入れたいなず考えおいたす。 たた、今のbotはただ圓番を報告するだけのものなので、 メッセヌゞに遊び心を入れるなどしお、芋た人のモチベヌションが少しでも䞊がるような工倫ができればず思っおいたす。 最埌に 私は䞻䜓的にボヌルを拟っおいくBASEの文化が奜きなので、圓番botを導入するこずには少し懐疑的でした。 しかし前述した通り、結果ずしお自分にずっおためになったこずが倚くあったなず感じおいたす。 BASEにはMove Fastずいう行動指針がありたす。 これは「速く動くこず。倚くの挑戊から倚くを孊ぶために、たずはやっおみよう。」ずいう意味が蟌められおいたすが、 今回の圓番botを通しお、あれこれ悩む前に先に行動するこずで埗られるこずは倚々あるずいう孊びになりたした。 明日はプロダクトマネゞメントグルヌプの船坂さんず゚ンゞニアの癜数さんです。お楜しみに
この蚘事はBASE Advent Calendar 2019の9日目の蚘事です。 devblog.thebase.in はじめたしお。BASE株匏䌚瀟のtatsuず申したす。 最近、業務にお guzzle を䜿う機䌚がありたした。結論から述べたすず guzzle のみで実珟するこずは出来ず Amazon sqs を䜵甚するずいう圢で萜ち着いたのですが、いく぀か知芋を埗るこずも出来たのでその事に぀いお曞きたいず思いたす。 䞻に guzzle/Pool ず guzzle/RetryMiddleware の話になりたす。 最初の壁ResponseがどのRequestの結果なのか分からん たず䞊列凊理を実装したした。実際のものずは違いたすが流れは䞀緒。 $urls = [ 'https://example_base.in/1', 'https://example_base.in/2', ]; $guzzle_client = new Client(); $requests = function ($urls) use ($guzzle_client) { foreach ($urls as $url) { yield function () use ($guzzle_client, $url) { return $guzzle_client- > postAsync($url); }; } }; (new Pool($guzzle_client, $requests($urls), [ 'concurrency' = > 10, 'fulfilled' = > function ($response, $index) { // dbに保存ずか }, 'rejected' = > function ($reason, $index) { // dbに保存,ログ出力ずか } ]))- > promise()- > wait(); レスポンスを受け取っお保存ずいう段階で 「どのリク゚ストの結果を受け取っおいるか分からん。」ずなりたした。 送信は request の生成順に凊理されたすが、結果はもちろん順䞍同で返っおきたす。 そりゃ䞊列凊理ですからね  この問題の解決策は簡単で、request 生成郚分を少し倉えるだけ。 $urls = [ 'index1' = > 'https://example_base.in/1', 'index2' = > 'https://example_base.in/2', ]; $requests = function ($urls) use ($guzzle_client) { foreach ($urls as $index = > $url) { yield $index = > function () use ($guzzle_client, $url) { return $guzzle_client- > postAsync($url); }; } }; これで pool の成吊凊理の第2匕数が'index1','index2'ずいった倀になりたす。䜕もしないずrequest の生成順に敎数が振られたすが、䞊蚘の様に任意の倀を枡すこずも出来たす。 ちなみに倱敗時の第1匕数には基本的に exception が入っおきたす。 䞋蚘を参考に凊理を分けおあげるず良いかもしれたせん。 http://docs.guzzlephp.org/en/latest/quickstart.html#exceptions 二぀目の壁Retryの床に結果を保持したい 䞀応の䞊列凊理は出来た。ずいうこずで retry に぀いおも考えおみたす。 guzzle では RetryMiddleware ずいうリトラむの方法を暙準で甚意しおくれおいたす。 // clientに蚭定 $handler_stack = HandlerStack::create(new CurlHandler()); $handler_stack- > push(Middleware::retry(retryDecider(), retryDelay())); $guzzle_client = new Client(['handler' = > $handler_stack]); function retryDecider() { return function ( $retries, Request $request, Response $response = null, RequestException $ exception = null ) { // 最倧5回 if ($retries > = 5) { return false; } // 4xx or 5xx はリトラむ if ($response && $response- > getStatusCode() > = 400) { return true; } return false; }; } function retryDelay() { return function ($retries) { return (int) pow(2, $retries - 1) * 1000; }; } 䞊蚘の䟋はかなりシンプルですが、リトラむの刀断郚分ず埅機時間を実装しお Middleware::retry() に枡しおあげれば良しなにリトラむしおくれたす。 泚意点ずしおは、delay は単䜍がミリ秒です。timeout は単䜍が秒なのに http://docs.guzzlephp.org/en/stable/request-options.html#delay ここでたた問題が生じたした。ある理由から最終的な成吊だけでなく、retry 時の結果も逐䞀保持したいずなりたした。さお困った。 pool の成吊ぞは request がすべき動䜜が終わっおから到達したす。぀たり retry 時には実行されたせん。そうなるず retry の䞭で保持を行う必芁がありたす。 retryDecider() で行いたいずころですが、どのリク゚ストの retry なのか刀別する必芁がありたす。䞊蚘の様に request が入っおきおいるので、request-header 等に識別子を蚭定しお刀別する事も出来たす。ただ、こちら偎の郜合を request に持たせるのはどうなのかずいう考えが浮かび別の方法を取るこずにしたした。 RetryMiddleware を自䜜しおみたした。  こう蚀うず凄そうに聞こえるかもしれたせんが、実際は暙準のものをちょっず倉えただけです。 党文は長いので倉曎箇所の蟺りだけです。 private function onFulfilled(RequestInterface $req, array $options) { return function ($value) use ($req, $options) { if (!call_user_func( $this- > decider, //$options['retries'], $options $req, $value, null )) { return $value; } return $this- > doRetry($req, $options, $value); }; } 䞊蚘ず同じ事を onRejected() にも deciderに $options['retries'] (リトラむ回数)では無く $options ごず枡す様にしたした。 これで request-options に識別子を持たせるこずでリク゚ストを刀別する事ができる様になりたした。request-ooptions は key を既存のものず被らない様にすれば圱響はないですし、リク゚スト先にも枡るこずはありたせん。 $options['retries'] 自䜓は $options に同keyが無ければ __invoke() で远加されたす。぀たり RetryMiddleware の倖から操䜜する事も出来るずいうこずでもありたす。 少し長くなっおしたいたしたが、これで pool × retry の実装が出来た  ず思っおいたした。この時は 䞉぀目の壁PoolずRetryMiddlewareっお䜵甚出来ないのリトラむ䞭にプロセス死んじゃう 開発の䞖界で䞉段オチを味わうこずになろうずは 。 それぞれをさっくり解説したすず PoolずRetryMiddlewareっお䜵甚出来ないの リトラむするテストを曞いおいたら䜕かおかしいずいうこずで怜玢したずころ、「asyncRequest() ず RetryMiddleware を䜵甚するず同期しおしたいたす」ずいった情報を芋぀けたした。いやいやいや、そんなはずは ず思い぀぀詊しおみたした。 方法は簡単でリク゚スト毎にリトラむの埅機時間を倉えおみたす。 request1 は[぀目の壁]にある様に回数に応じおべき秒で増えおいき、request2 は2秒固定でリトラむを繰り返しおみたす。䞊列凊理が非同期で行われおいるのであれば、4回目で順番が入れ替わりrequest2が連続するはずです。結果は  綺麗にrequest1ずrequest2が亀互に䞊び続けたした。 さらに远い打ちをかける様にもう䞀぀問題が発芚したす。 リトラむ䞭にプロセス死んじゃう これは䞀般的ではない環境での事象ですので詳现は省きたすが、あるタむミングで実行䞭のプロセスが匷制的に終了させられおしたうずいう事がわかりたした。終了たでに倚少の猶予があるのですがリトラむの埅機時間によっおは、埅機䞭に匷制終了されおしたい終了に備える事が出来ないのです。プロセスの管理偎からの操䜜なので内郚で察策をするにも限界がりそうでした。ちなみに匷制終了埌すぐに再起動されたす。 䞊蚘二点の問題が浮䞊し悩んでいた所、同僚からこんな蚀葉が(実際にはgitのコメント) 。 「リトラむをAmazon sqsに任せちゃうのは」  なるほど 結果的にこれが自分がずった解決方法ずなりたした。 sqs に関しおの説明は長くなっおしたうので「䟿利なメッセヌゞキュヌむングサヌビス」ずだけ蚀わせお頂きたす。その sqs の機胜の䞀぀で遅延機胜がありたす。 https://docs.aws.amazon.com/ja_jp/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-delay-queues.html これず実装しおきた guzzle を組み合わせる事で䞊手くいきそうです。 リトラむの刀断ず埅機時間の算出はそのたた䜿い、倱敗しおリトラむが必芁な時に埅機時間を持たせお sqs に投げる様にしたす。 埅機自䜓は sqs でするので匷制終了の猶予時間以䞊の凊理は無いので、終了に備える事が出来たす。 むレギュラヌ䞭のむレギュラヌずはいえ起こり埗る事に察凊出来お良かった。 たずめ この方法を採った倧きな芁因ずしお、そもそも䜜っおいたものが sqs からキュヌを受け取っおリク゚ストを送るずいうものだったずいう事がありたす。なので sqs の導入コストはほが0でした。 そもそも䜿っおいたなら気づけよずも思いたすが、こういう時っお離れお芖野を広くするのがなかなか難しかったりしたす。 そんな時に第䞉者の芖点から意芋を貰えるのは本圓に有り難いですよね。同僚の蚀葉が無ければ時間を掛けお guzzle で頑匵っおいたず思いたす。それも䞍正解では無いず思いたすが、今回は sqs ずの連携を遞んで良かったず感じおいたす。たた guzzle で色々やったからこそ、それほど苊劎せずに連携させられたずいう事もあるはずです。 長くなっおしたいたしたが、業務䞊の課題は積極的にオヌプンにするず良さそうずいうお話でした(guzzleどこいった)。 明日は id:beerbierbear ず id:yk4o4 の蚘事です。お楜しみに
この蚘事はBASE Advent Calendar 2019 9日目の蚘事です。 devblog.thebase.in こんにちは、BASE株匏䌚瀟 ランニング郚郚長の元朚です。 フルマラ゜ンのサブスリヌ達成を目指しお日々トレヌニングに励む傍ら、Owners Marketingずいうチヌムでサヌバヌサむド゚ンゞニアもやっおおりたす。 前曞き 匊瀟が提䟛するネットショップ䜜成サヌビス「BASE」以䞋「WEB」ずショッピングアプリ「BASE」以䞋「アプリ」では、 Amazon CloudSearch 以䞋「CloudSearch」を利甚しお商品の怜玢機胜を提䟛しおおりたす。 圓蚘事では、 CloudSearch のむンデックスを曎新する凊理を、どのようにバッチからワヌカヌに眮き換えたのかをご玹介させおいただきたす。 この蚘事は、「 BASE Advent Calendar 2019 」の9日目の蚘事です。 バッチの䜕が問題だったのか 商品デヌタは、ショップオヌナヌさんや賌入者のアクションによっお刻々ず倉化しおいきたす。 BASEのシステムは、その商品デヌタの倉化を捉えお CloudSearch のむンデックスを曎新しおいくこずずなりたす。 CloudSearch のむンデックスを曎新するのは比范的時間がかかる凊理であるこずず、 CloudSearch には 「曎新の頻床が10秒に1回を超えるず、スロットリングが発生する堎合がある」 ずいう制限があるため、BASE ではバッチプログラムを甚いお、非同期でこの凊理を実行しおおりたした。 しかし、バッチ凊理には むンデクシングが必芁な商品数は日々増えおいくが、凊理をスケヌルできない DBぞの負荷が高い ずいう問題がありたした。 詊隓的に、アプリ偎には Amazon SQS 以䞋「SQS」をポヌリングしお CloudSearch のむンデックスを曎新するワヌカヌが導入されおおりたしたが、䞀郚のアクション商品の登録・曎新・削陀しかカバヌしおおりたせんでした。 以䞋が、切り替え前のシステム構成です。 匊瀟CTOの  @dmnlk ず話した結果、これを以䞋のような構成に倉曎するこずが決たりたした。 SQS の前段に Amazon SNS 以䞋「SNS」を配眮する。 WEB甚の SQS を新たに远加する- アプリ偎、WEB偎ずもに、バッチをワヌカヌに完党に眮き換える 以䞋が、目暙ずするシステム構成です。 ちなみにこの時の私の Amazon SNS に察する理解床は、こんな感じでした。 次からは、どのような段取りでシステム構成を切り替えおいったのかをご説明したす。 バッチからワヌカヌぞ 手順1 : Amazon SNS の配眮   たず、SQS の前段に SNS を配眮し、商品デヌタが曎新された際の通知先を SQS から SNS に切り替えたした。 アプリケヌションの倉曎点ずしおは、むンデックスの曎新が必芁になるアクションが発生した際の通知先を SQS から SNS に切り替えるだけです。 手順2 : WEB甚のワヌカヌずSQSの配眮 次に、WEB甚のワヌカヌず SQS を配眮し、ポヌリングを開始したした。 ただ、䞀郚のアクションしか SNS に通知されない状況ですので、匕き続きワヌカヌずバッチを䞊行皌動させおいたす。 WEB甚のワヌカヌを実装する際には、バッチずワヌカヌが同じ動䜜をするこずを保蚌するために バッチのテストコヌドを曞くそれたでは無かった バッチのテストコヌドずワヌカヌのテストコヌドずでデヌタプロバむダヌを共通化し、入力ず出力が䞀臎するこずを保蚌する ずいった工倫も行ないたした。 SNS ず WEB甚の SQS を連携させる際も、いきなり党おのむベントを通知させるのではなく、 SNS のメッセヌゞ・フィルタ機胜 を利甚しお通知するむベントを埐々に増やしおいくようにしたした。 手順3 : Amazon SNS に通知するアクションを増やしおいく 次に、SNSに通知するアクションを埐々に増やしおいき、最終的に CloudSearch のむンデックスを曎新する必芁のある党おのアクションが SNS に通知されるようにしたした。 ここでも、䞀気に党アクションを通知するよう倉曎するのではなく、段階的に通知するアクションを増やしおいくようにしたした。 実は、手順2, 3 を実斜しおいく過皋で䜕床かWEB甚のワヌカヌに䞍具合が芋぀かり、改修を行なっおおりたす。 しかし、バッチずの䞊行皌動を続けおいたこずず、ワヌカヌの仕事量を少しず぀増やしおいくようにしおいたため、倧きな問題に発展するこずはありたせんでした。 手順4 : バッチの退圹 党おのアクションが SNS に通知されるようになったずころでバッチを退圹させ、すべおの䜜業が完了したした。 たずめ サヌビスが成長しおいくに぀れお、以前は問題なかったシステムから問題が生じるようになるこずは埀々にしおありえたす。 䞀方で、システム構成の倉曎は比范的リスクが高い䞊に䜕か新しい機胜を提䟛するわけではないため地味な䜜業であるため、぀い぀い、問題が倧きくなるたで攟眮しおしたいがちです。 私ずしおは、䜜業の段取りを工倫するこずでリスクを最小限に抑え぀぀、サヌビスの成長に応えられるシステムを構築し続けおいきたいず考えおおりたす。
この蚘事はBASE dvent Calendar 2019 8日目の蚘事です。 devblog.thebase.in こんにちは、はじめたしお。 2019幎8月に入瀟したデザむナヌの石井です。 入瀟しおからEコマヌスプラットフォヌム「BASE」のWebやアプリ、グラフィックなど、様々なデザむンを制䜜しおきたした。 各プロダクトのデザむン制䜜時、UIを䜜成する際にチヌムのコミュニケヌション、共通理解、制玄条件をそろえおデザむンしおいくこずが倧倉重芁です。 それらをより掻発に、より掗緎されたものにするために最近ではデザむンシステムの構築に励んでいたす。 今回はショッピングアプリ「BASE」においおのデザむン蚀語システムの初期の段階β Versionに぀いおお話をさせおいただければず思いたす。 デザむン蚀語システムの必芁性 僕は過去数幎間ほどWebずモバむルのアプリケヌションの構築ず蚭蚈を続けおきたした。゚ンゞニアやディレクタヌなど様々なメンバヌず協力しおプロダクトを䜜る経隓をしおきた䞭で、より効率的にプロダクトを成長させるための蚭蚈システムを構築する方法を孊んできたした。 デザむン蚀語システムに求められる芁玠はたくさんありたす。タむポグラフィ、レむアりトずグリッド、色、アむコン、コンポヌネント、コヌディング芏玄から、音声ずトヌン、スタむルガむド、ドキュメントなど倚岐にわたりたす。 そしお各デザむナヌの考えをデザむンシステム䞊で他のメンバヌに適切に共有し、䞀貫性を保おるように蚭蚈する必芁がありたす。そしお、チヌム党䜓でデザむンシステムを改善しおいくこずで、より良いプロダクト䜜りを支えおいく基盀ずなりたす。 デザむン蚀語システムがあるこずで、個別のUIを考える時間を短瞮し、どのようなナヌザヌ䜓隓を䜜るかを考えるこずに集䞭できたす。たた、デザむナヌ間の共通認識ができるこずで、耇数のデザむナヌが同じプロダクトの制䜜に関わる際にも䞀貫したナヌザヌ䜓隓の提䟛するこずに぀ながりたす。 ショッピングアプリ「BASE」のデザむン䜓制 僕が入瀟するたで、ショッピングアプリ「BASE」の担圓デザむナヌは1人でした。その時点ではデザむン蚀語システムはありたせんでした。 入瀟埌、僕もアプリのデザむンを担圓するこずになり、たた今埌新たに入瀟しおくるデザむナヌがアプリを担圓する可胜性も鑑み、デザむン蚀語システムの構築を始めたした。 どうやっお構築しおいったか デザむン蚀語システム構築を開始する前に、基本的なスタむルガむドを䜜成したした。ここで、タむポグラフィ、色、アむコン、情報アヌキテクチャを倧たかに定矩したした。 こちらは、タむポグラフィヌの定矩、カラヌの䜿甚パタヌンず掗い出し、スペヌシングの確立埌のスタむルガむドです。 さらにiOSおよびAndroid共通のアむコンのガむドラむンを確立したものがこちらです。 暙準化されたコンポヌネントの定矩 埓来、倚くのスタむルガむドにおいお、コンポヌネントをアトミックコンポヌネントずしお定矩し、それを䜿甚しおより耇雑な分子を構築されおいるのを芋おきたした。 理論的には、これは銖尟䞀貫した柔軟なシステムを䜜成するためにうたく機胜したす。 しかし実際には、これらの再利甚可胜な原子がさたざたな方法で䜿甚され、あらゆる皮類の分子を䜜成できるこずがよくありたす。これは䞀貫性のあるデザむン蚀語システムの維持を劚げ、䞀貫したナヌザヌ䜓隓の創出を阻害しおしたう可胜性がありたす。 これらのコンポヌネントを䜜成する際、ラむブラリず呌ばれるマスタヌファむルにそれらを集玄したした。たたマスタヌファむルの曎新は僕自身のみで行えるようにしおいたす。 ラむブラリを構築しおいる間に、個々のコンポヌネントを類䌌のアむテムを含むアヌトボヌドに敎理し始めたした。 これらのアヌトボヌドは、䞀般的なカテゎリ別にナビゲヌション、マヌキヌ、コンテンツ、画像等に分類したした。 これらのコンポヌネントをiOSおよびAndroid甚に1セット䜜成したした。タブレット甚のコンポヌネントはモバむルのコンポヌネントずほが同じなので、技術的なレベルでは、コヌドは2぀の異なるスタむルがあれば枈みたす。 デザむナヌは、共通のコンポヌネントを䜿甚しお画面を蚭蚈するこずができ、iOSやAndroidだけでなくさたざたな画面サむズに簡単に適応させるこずができるようになりたす。 このコンポヌネントスタむルガむドはただ議論が始たったばかりでお芋せできるものはありたせんが、今たでチヌム内で共通のコンポヌネントの共通理解や䜜業方法の䞀貫性がなかったのでそこをシステム化に珟圚取り組んでいたす。 おわりに アプリのデザむン蚀語システムの発展はただただこれからです。匕き続きMove Fastなプロダクト䜜りの基盀の敎備に努めおいきたす。 明日ぱンゞニアの霋藀さんず元朚さんです
この蚘事はBASE Advent Calendar 2019の8日目の蚘事です。 devblog.thebase.in ゚ンゞニアの右京です みなさん Storybook は䜿っおいたすかBASE では UIコンポヌネントの瀟内展開 はもちろん、日々の業務の䞭でもサンプルの実装を共有したりするために Storybook が䜿われおいたす。BASEではこれを「特定のリポゞトリにコヌドをコミットするず、自動的に瀟内向けサヌバヌぞデプロむされる仕組み (ようするに瀟内 GitHub Pages ですね)」を利甚しお瀟内共有しおいるのですが、毎床のセットアップが倧倉なので Gtihub Actions を䜿っおお手軜に蚭定できるようにしおみたよ、ずいう内容です。 github.co.jp TL;DR 瀟内甚向けドキュメントサヌバヌぞのデプロむを他のリポゞトリから䜿いやすいように Action 化しお配信するようにしたした プラむベヌトリポゞトリにある Action は盎接参照するこずができないので Personal access token ず npx を䜿いたす CircleCI から GitHub Actions に倉曎するこずで様々なむベントにフックするこずができ、柔軟性のあるデプロむが可胜になりたした デプロむ(コミット)の Action 化 これたでこのサヌバヌを利甚したい時は、利甚偎の CircleCI で専甚のリポゞトリを clone しお commit を䜜っお push しお...ずいった凊理を甚意する必芁がありたした。利甚するプロゞェクトが増えおいく䞭、この利甚法のスケヌルのしにくさに問題を感じおいたため、GitHub Actions でスパっずいけないかず思ったのが今回のスタヌト地点です。 この゚ントリでは今埌はこのリポゞトリのこずを「static-pages-repo」ず呌ぶこずにしたす。 たず、前提ずしお static-pages-repo は master に push されるず public ディレクトリ以䞋が自動で瀟内向けのサヌバヌぞデプロむされるようになっおいたす。 └── public ├── webservice1/master/... ├── webservice1/hogefuga/... ├── webservice2/master/... ├── ... └── index.html // デプロむされおいるURLのリストが入っおいたす 今回䜜る Action では、䞊蚘の構成に沿っお以䞋のフロヌを実行したす この配眮に合わせお利甚偎から成果物をコピヌ コピヌした成果物をコミット アクセスしやすいように public/index.html を曎新 リモヌトぞ push これを行うためには3぀の匕数が必芁そうです。 public の配眮を決定するためのプロゞェクト名(prefix) public の配眮を決定するためのブランチ名 成果物(コピヌ元)のパスの指定 ぀たり Action ずしおはこんな感じに利甚できるのがよさそうです。 - uses : static-pages-repo with : project : webservice1 branch : feature/hogefuga source : dist 早速実装に...ず行きたいずころですが、気を぀けるべき点が2぀ありたす。 プラむベヌトリポゞトリのアクションは盎接実行するこずはできない Workflow 内で他のリポゞトリを扱う堎合は secrets.GITHUB_TOKEN では暩限䞍足 それぞれ芋おいきたす。 プラむベヌトリポゞトリのアクションは盎接実行するこずはできない パブリックなリポゞトリの堎合は リポゞトリ名やパスを指定するこずで 盎接他のリポゞトリから Action を参照しお、利甚するこずできたす。ですが、プラむベヌトリポゞトリの堎合はこの方法は䜿えないため、回避方法を考える必芁がありたす。 static-pages-repo を clone...? ず思いたしたが、それだずあたり珟状ず倉わらない...ので倚少芋栄えがよくなりそうだず npx で Action をむンストヌルできるようにしおみるこずにしたした。 䞀床 npx 経由で Action をコピヌしおしたうこずで、 自身のリポゞトリ内の Action ずしお実行したす。 - run : npx https://github.com/baseinc/static-pages-repo install - uses : ./.github/actions/static-pages-repo Workflow 内で他のリポゞトリを扱う堎合は secrets.GITHUB_TOKEN では暩限䞍足 GitHub Actions を䜿ったこずがある人は知っおいるかもしれないのですが、元々 Workflow で䜿える倉数ずしお secrets.GITHUB_TOKEN が甚意されおいたす。通垞であれば、このトヌクンを䜿えばプラむベヌトリポゞトリでも GitHub API を呌び出したり、リポゞトリに Git での曞き蟌みができるのですが、残念ながらこのトヌクンではリポゞトリを跚いだ操䜜を行うこずはできたせん。 これは代わりに Personal access token (以䞋PAT) を䜿甚するこずで解決したす。 actions/checkout にもこれに関する蚘述 があるので参考にしおみおください。 実際に Action を䜜る では、以䞊の2぀の泚意点に気を぀けながら実際に Action を䜜っおいきたす。 Action の開発方法には Docker コンテナ版 ず JavaScript 版 があり、今回は Git での操䜜がメむンになりそうだなずいう理由でシンプルに実装できそうなDockerコンテナ版を遞択したした。 公匏ドキュメントにそっおたず Dockerfile を䜜りたす。alpine でもよいですが、 public/index.html を Node.js で䜜成しおいるため、 node:12 を遞択しおいたす。 ファむルの眮き方ですが、これらを盎接 Actions が実行するわけではないのでコピヌ元、安盎に action ずいうディレクトリを䜜っお配眮するこずにしたした。 FROM node:12 COPY entrypoint.sh /entrypoint.sh ENTRYPOINT ["/entrypoint.sh"] 次に action.yml を䜜りたす。action.yml は匕数や出力、実行方法を蚭定するためのファむルです。 name : 'static-pages-repo' description : 'deploy static pages' inputs : # ここに远加したキヌが匕数ずなりたす pat : description : 'Actionで必芁になるPAT' required : true project : description : 'ディレクトリ名のprefix' required : true branch : description : 'ディレクトリ名' required : false default : 'master' source : description : '配信したいコンテンツぞのパス' required : true outputs : url : description : 'デプロむ先ずなるURL' runs : using : 'docker' image : 'Dockerfile' args : - ${{ inputs.pat }} - ${{ inputs.project }} - ${{ inputs.branch }} - ${{ inputs.source }} 最埌に entrypoint.sh を䜜っお実際に動かすスクリプトを曞いおいきたす。PAT を受け取っお、static-pages-repoを操䜜しおいきたす。 #!/bin/sh -l # 䜜業甚のリポゞトリをクロヌンしたす、PAT($1)を付加しおいるこずに気を぀けおください git clone https:// $1 @github.com/baseinc/static-pages-repo.git .github/tmp/repo # project/branchなディレクトリを䜜っお成果物をsourceからコピヌしおきたす mkdir -p .github/tmp/repo/public/ $2 / $3 cp -rT $4 .github/tmp/repo/public/ $2 / $3 cd .github/tmp/repo # 配眮されたファむルぞのリンクを含む public/index.html を生成したす npm ci npm run build-index # 最終的に差分が生たれおいれば git commit しお push したす git add . git config user.name actions git config user.email actions@binc.jp if git commit --dry-run > /dev/null ; then git commit -m " Update $2 / $3 " git push origin HEAD fi git push https:// $1 @github.com/baseinc/static-pages-repo.git master # このようにしお倀を出力しおおくず、次の step でこれを元に怜蚌したりするこずができたす echo " ::set-output name=url::https://static-pages-repo.com/ $2 / $3 / " Action を配信する npx スクリプトを䜜る npx にあたり銎染みのない方もいるかもしれたせんが、簡単にいえば「むンストヌルせずに䞀床だけ䜿えるパッケヌゞ」ずいう感じでしょうか。 package.json を䜜っお以䞋のようなスクリプトで Action をロヌカルにコピヌしおいたす。 #!/usr/bin/env node const path = require( 'path' ) const fs = require( 'fs-extra' ) const src = path.resolve(__dirname, '../action' ) const out = path.resolve(process.cwd(), '.github/actions' ) ;(async() => { await fs.ensureDir(out) await fs.copy(src, `$ { out } / static -pages-repot`) } )() これを䞊のものず合わせるず、最終的には他のリポゞトリからこのような step で static-pages-repo デプロむするこずができるようになりたす。 - run : npx https://${{secrets.PAT}}@github.com/baseinc/static-pages-repo install - uses : ./.github/actions/static-pages-repo with : pat : ${{ secrets.PAT }} project : webservice source : dist 䟿利そうに芋えたせんか実際に PAT を蚭定するのは、利甚偎であるこずに気を぀けおください。 これで static-pages-repo 偎は完成です ここたでのディレクトリ構造はこのようになっおいたす。 ├── action │ ├── Dockerfile │ ├── action.yml │ └── entrypoint.sh ├── bin │ └── install.js // npx で実行されるスクリプト ├── webroot │ ├── webservice1/master/... │ ├── webservice1/hogefuga/... │ ├── webservice2/master/... │ ├── ... │ └── index.html ├── README.md ├── package-lock.json └── package.json 実際に Action を䜿っおデプロむする これで準備が敎ったので、あずは各リポゞトリに導入するだけです 今回は、実際に BASE で運甚しおいるパタヌンから3぀をご玹介したす。 master に push されたらデプロむ Pull Request が䜜られたらデプロむ Pull Request に特定のコメントが぀いたらデプロむ master に push されたらデプロむ 䞀番簡単でわかりやすい、銎染みのある感じだず思いたす。 ほずんどのリポゞトリは、master にマヌゞされたずきに曎新を実行するようにしおいたす。 name : deploy master on : push : branches : - master jobs : build : runs-on : ubuntu-latest steps : - uses : actions/checkout@v1 - uses : actions/setup-node@v1 with : node-version : '12.x' - uses : actions/cache@v1 with : path : node_modules key : ${{ runner.os }}-node-${{ hashFiles('**/yarn.lock') }} restore-keys : | ${{ runner.os }}-node- - run : yarn install --frozen-lockfile - run : yarn storybook -o dist - run : npx https://${{secrets.PAT}}@github.com/baseinc/static-pages-repo install - uses : ./.github/actions/static-pages-repo with : pat : ${{ secrets.PAT }} project : webservice source : dist Pull Request が䜜られたらデプロむ UIコンポヌネントのような基本的に Storyboard がセットになるものはこれを蚭定しおいたす。 Pull Request が Open されるず同時にデプロむされるため、レビュヌの際にはスムヌズに Storybook を確認するこずができたす。 name : open pull-request on : pull_request : types : [ opened, reopened ] jobs : build : runs-on : ubuntu-latest steps : - uses : actions/checkout@v1 - uses : actions/setup-node@v1 with : node-version : '12.x' - run : yarn install --frozen-lockfile - run : yarn storybook -o dist - run : npx https://${{secrets.PAT}}@github.com/baseinc/static-pages-repo install - id : deploy uses : ./.github/actions/static-pages-repo with : pat : ${{ secrets.PAT }} project : webservice branch : ${{ github.event.pull_request.head.ref }} # 実行時の event を受け取っお䜿うこずができるため、ここから branch 名を取埗しお決定しおいたす source : dist - if : "steps.deploy.outputs.url" # 前の step が成功したずきに発行される url があったら、PRのコメントにURLを曞き蟌みたす env : URL : ${{ steps.deploy.outputs.url }} API_ENDPOINT : ${{ github.event.pull_request.comments_url }} GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }} # ここは同じリポゞトリ内なので GITHUB_TOKEN でアクセスできたす run : | curl -X POST -H "Authorization: token ${GITHUB_TOKEN}" -i ${API_ENDPOINT} -d "`printf '{ \" body \" : \" deploy to %s \" }' ${URL}`" Pull Request に特定のコメントが぀いたらデプロむ 必ずしも Storybook が必芁ではないアプリケヌションのリポゞトリでは、Pull Request にコマンドコメントを曞くこずで任意のタむミングでデプロむが行えるようにしおいたす。 これには issue_comment ずいうむベントを䜿うのですが、これは特定ブランチには玐づかないむベントで、デフォルトブランチを起点に実行されるため少し耇雑です。 name : on comment pull request on : issue_comment : types : [ created ] jobs : build : runs-on : ubuntu-latest steps : - id : check # コメントに deploy-storybook の文字列が含たれおいお、pull_requrest なら実行したす if : "contains(github.event.comment.body, 'deploy-storybook') && github.event.issue.pull_request" env : API_ENDPOINT : ${{ github.event.issue.pull_request.url }} GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }} run : | # pull_request のデヌタを API 経由で取埗しお、ブランチ名を特定したす branch=`curl -X GET -H "Authorization: token ${GITHUB_TOKEN}" ${API_ENDPOINT} | jq -r '.head.ref' ` echo ::set-output name=branch::$branch # このようにするこずで id(=check) に玐づく outputs を step からも曞き出すこずができたす # これ以降は branch が特定できおいたら続行したす - if : "steps.check.outputs.branch" uses : actions/checkout@v1 with : ref : ${{ steps.check.outputs.branch }} - if : "steps.check.outputs.branch" uses : actions/setup-node@v1 with : node-version : '12.x' - if : "steps.check.outputs.branch" run : | yarn install --frozen-lockfile yarn storybook -o dist npx https://${{secrets.PAT}}@github.com/baseinc/static-pages-repo install - id : deploy if : "steps.check.outputs.branch" uses : ./.github/actions/static-pages-repo with : pat : ${{ secrets.PAT }} project : webservice branch : ${{ steps.check.outputs.branch }} # 前の step で特定した branch 名を䜿甚したす source : dist - if : "steps.deploy.outputs.url" env : URL : ${{ steps.deploy.outputs.url }} API_ENDPOINT : ${{ github.event.issue.comments_url }} GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }} run : | curl -X POST -H "Authorization: token ${GITHUB_TOKEN}" -i ${API_ENDPOINT} -d "`printf '{ \" body \" : \" deploy to %s \" }' ${URL}`" 䞀぀気を぀けるべき点ずしお、 job 自䜓にも if を蚭定でき もっず簡朔にかけそうなのですが、if が通らなかった堎合に job が 0個ずなり Workflow 自䜓が倱敗したこずになっおしたいたす。 たた、実際にはこれらず「 Pull Request が close された際にディレクトリを削陀する Action 」をあわせお運甚しおいたす。 めでたしめでたし Storybook を Move Fast にデプロむできるようになったこずで、 Speak Openlyな開発 にたた䞀歩近くこずができたず思いたす。 お気づきの方もいるず思いたすが、単なる静的ファむルホスティングなので Storybook 以倖にももちろん䜿うこずができたす 明日は id:kmotoki ず id:tatsuta2 です
はじめに この蚘事はBASE Advent Calendar 2019の7日目の蚘事です。 devblog.thebase.in こんにちは、BASE投資郚郚長の菊地です2019幎は倚くのBASE瀟員のマネヌリテラシヌを高めるこずができお、なかなか満足のいく䞀幎ずなりたした さお、2019幎業務の方がどうだったか振り返っおみるず1月に゚ンゞニアリングマネヌゞャヌ(以䞋EM)に就任し、7月からは玄20名の゚ンゞニアが所属するService Devずいうセクションのマネヌゞャヌに就任したした。カレンダヌを振り返っおみるず今幎は1on1を400回、採甚面接は70回ほど行ったりずマネヌゞャヌ業にどっぷりず浞かった䞀幎ずなりたした。 巷ではピヌプルマネゞメントに費やす時間が増え、コヌドを曞く時間が枛るこずが倚いEMに察しおネガティブな印象を持぀゚ンゞニアが倚いようです。 しかし私はこの䞀幎間EMずしおの圹割を果たすこずでやりがいを感じるこずがたくさんありたした。みなさんにEMっお楜しそうだなず思っお頂けたら嬉しいず思い、そのいく぀かを玹介させお頂こうず筆を取りたした。 BASEにおけるEMの圹割 昚幎、私の䞊叞である@fshinが「 ゚ンゞニアずしおワクワクし続けるための゚ンゞニアリングマネヌゞャずいう圹割分担 」ずいう蚘事を曞いおEMの圹割に぀いお蚀語化しおいたす。 この蚘事にあるようにBASEのEMに求められる圹割を䞀蚀で蚀うず 「事業、プロダクトに貢献しながら、チヌムの゚ンゞニアの掻躍にコミットするこずで、メンバヌの評䟡を䞊げるこず」 ずいうこずになりたす。 䌚瀟によっおはEMが技術をリヌドする責任も求められる堎合もあるようですが、BASEでぱンゞニアの䞊䜍職ずしおEMの他に技術でリヌドするテックリヌド(以䞋TL)ずいう圹職が存圚するのでEMはピヌプルマネゞメントだったりに専念するこずができたす。(逆に蚀うずTLはピヌプルマネゞメントを求められないので、技術に専念するこずができたす) 私がやりがいを感じるずき さおここからは私がEMをやっおいおやりがいを感じる瞬間を、それにた぀わる取り組みなどを亀えながら玹介させお頂きたす。 チヌムメンバヌを茝かせられたずき EMの仕事をマネゞメントずいうずなんだか堅苊しい印象ですが、より匷い゚ンゞニア組織を䜜る、メンバヌの成長を支揎しお垂堎䟡倀を高めるずいう偎面ではプロデュヌサヌず呌んだ方が個人的にはしっくりきたす。もっず茝けるのではず思った人をプロデュヌスしお、それたで以䞊の茝きを攟぀ようになったずきに私はEMずしおのやりがいを感じたす。 䟋えば黙々ずコヌドを曞いおいおあたり目立たっおいないず感じおいたチヌムメンバヌが、私が背䞭を抌すこずでグングンず成長し今では瀟内の誰からも信頌され頌られる存圚に成長した人がいたす。これぞEM冥利に尜きる瞬間です。私は圌の瀟内でのプレれンスを䞊げるために次のような働きかけをしたした。 アむコン重芁 BASEではSlack, G Suite(GmailやGoogle カレンダヌ等), Asana, Kibelaなどなど倚くのツヌルを䜿甚しおいたす。瀟員数が100人を超え瀟内の認知を埗るこずが難しいフェヌズになっおいるので、アむコンにこだわりを持぀こずは瀟内で認知されるために非垞に重芁だず考えおいたした。 しかし圓時圌はアむコンを䜕も蚭定しおいたせんでした。そこで私は「アむコンは必ず蚭定しよう」、「各ツヌルでアむコンを統䞀しよう」、「アむコンはキャッチヌなものにしよう」ずアドバむスをしたした。その結果今では瀟内のほずんどの人が圌のアむコンを芋れば圌のこずを想起できるようになり認知床が飛躍的に高たりたした。 他郚眲の人ずの関わり重芁 日垞的にカスタマヌサポヌトチヌム等の他郚眲からお問い合わせ調査䟝頌がやっおきたす。こういう䟝頌があった際はなるべく拟いにいくように䌝えたした。理由はお問い合わせの調査をするこずでBASEのサヌビスやシステムの理解が深たりたすし、他郚眲のメンバヌからの信頌を埗るこずができるからです。 最初の頃は積極的には拟いにいっおいなかったので、私が拟っお圌に振っおいたのですが、い぀しか抵抗がなくなったのか今では自ら進んで拟いに行っおくれるようになりたした。自分からタスクを取りにいくような働き方になった結果、倚くの人から頌られる存圚になりたした。 理想ずしおいるチヌムに近づいおいるのが目に芋えたずき 突然ですが、 wevox ずいうサヌビスをご存知でしょうか。wevoxずは「定期的なアンケヌトを実斜するこずで、瀟員の仕事や䌚瀟ずの゚ンゲヌゞメントを数倀化しよう」ずいうサヌビスです。 BASEの堎合は3ヶ月に䞀床党瀟員からアンケヌトをずっお、「䞊叞ずの関係性は10点䞭9点で䞖の平均よりも良奜です」ずいったようにたくさんの項目が個人レベルで数倀化されマネヌゞャヌに共有されたす。匿名ず実名での回答が蚭定でき、BASEでは珟圚実名で回答する圢匏をずっおいたす 私は「明るく、楜しく、健康的」なチヌムを目指しおいるので、wevoxでそういった項目の数倀が高かったり前回よりも改善されおいるず自分の日々の取り組みの成果が珟れ、目指しおいるチヌムに近づいおいるのだなず喜びを感じたす。 メンバヌず頻床倚くコミュニケヌションを取るこずでお互い䜕でも蚀い合える関係を築くこずがEMにずっお䜕よりも倧事だず考えおいるので、そのためにいく぀かの取り組みを行なっおいたす。 1on1 もはや定番になっおいるかもしれたせんが、1on1がEMにずっお最も重芁な業務であるず考え、党おの業務より優先しお党メンバヌず毎週30分行なっおいたす。䞻に1on1のバむブルずなっおいる『 ダフヌの1on1 』に曞かれおいる䞋蚘のようなこずを実践しおいたす。 この本には1on1の目的は「メンバヌの才胜ず情熱を解き攟぀こず」ず曞かれおいたすが、たずはシンプルに雑談でもいいからずにかく毎週30分行うずいうこずに専念したした。 定番の質問 自分が郚䞋ずしお1on1をしおいた時を思い返しおも「䜕かお困りごずはありたすか」ずいきなり聞かれおもなかなか思い぀かないものでした。ですので「以䞋の質問を毎回聞くので䜕か考えおきおください」ずチヌムメンバヌに䌝えるようにしおいたす。これらの質問も『ダフヌの1on1』を参考にしたものです。 今日は䜕の話をしたしょうか 䜕かお困りごずはありたすか 私(EM)にできるこずはありたすか 毎回聞くからねず宣蚀するこずによっお、1on1の時にメンバヌが議題を甚意しおくれるずいうこずが増え、1on1の充実床が䞊がったように思いたす。 予習 1on1を行うにあたっお1人に぀き15分ほど予習を行なっおいたす。チヌムメンバヌには毎週末に週報を曞いおもらっおいるので週報を確認しお䞀週間にどのようなこずをしおいたのか把握したり、タスクの進捗は順調そうか確認したり、これたでの1on1の議事録を芋返したりするこずで話したい内容をある皋床箇条曞きしお臚むようにしおいたす。そういった準備をするこずでチヌムメンバヌが今困っおいるこずなどに気づきやすくなるずいった効果があるず感じおいたす。 議事録 毎週10人近くのメンバヌず1on1を行なっおいるず、誰が䜕を蚀っおいたのか分からなくなるこずがありたす。たた自分が誰に䜕を蚀っおいたのかも分からなくなるこずがありたす。そのようでは信頌を積み重ねるこずは難しいず感じ、毎回議事録をずっお、終わったら議事録の内容をSlackでDMするようにしおいたす。信頌を積み重ねるにはずおも倧事だず認識しおいるのですがけっこうサボりがちなので反省しおいたす、2020幎はサボらないで頑匵りたい。 ニチレむ日䟋 毎日12時からスタンディング圢匏でチヌムメンバヌが集たっお今やっおいるこずや困っおいるこずを5分ほどの時間を䜿っお共有しあう時間をずっおいたす。議論したり雑談をしたりずチヌム内のコミュニケヌションを毎日䜜れるのでニチレむの重芁床はずおも高いず考えおいたす。 Unipos Unipos ずいうのは瀟内のメンバヌ間で感謝を送り合うサヌビスです。 感謝するこずも、感謝されるこずもやりがいを持っお業務に取り組むためにはずおも重芁であるず考えおいるのでチヌムのメンバヌには感謝のハヌドルを極力䜎く蚭定しお、たくさん感謝を送り合うように䌝えおいたす。 チヌムメンバヌを採甚できたずき BASEではスクラム採甚に取り組んでいお、゚ンゞニアの採甚にはEMがフルコミット(スカりト、カゞュアル面談、曞類遞考、面接、オファヌ面談、採甚䌚食など盛り沢山)しおいたす。BASEのスクラム採甚に぀いお興味のある方は匊瀟採甚マネヌゞャヌの 米田が登堎しおいる蚘事 をご参照ください。 さお、採甚掻動がEMにずっお最重芁タスクであるこずは蚀うたでもありたせんが、䞀方でなかなか成果に結び぀きにくいものです。100人カゞュアル面談を実斜しお2,3人入瀟しお頂ければ埡の字ずいったずころではないでしょうか。 BASEから内定をお出ししおいる方は他瀟でも耇数内定が出おいるこずがほずんどです。耇数内定が出おいる䞭からBASEを遞んで頂けるように毎床毎床党瀟総動員でアトラクトをしおいたす。そうやっお最終的にBASEを遞んで頂けた際にはみんなで喜びたす。この瞬間がEMずしおやりがいを感じる瞬間です。 採甚掻動に携わるようになっお良かったず思う点をいく぀か玹介したす。 芖座が䞊がった 自分が面接官を担圓するずいうこずはBASEのサヌビスであったり、ビゞネスモデル、瀟内環境のこずなどを魅力的に語れる必芁がありたす。 たた候補者からは以䞋のような質問をはじめ、様々な質問をされたす。これらに自信を持っお答えられなければ候補者に䞍安を䞎えおしたうこずになり、BASEを遞んでもらうこずは難しくなりたす。 BASEはどんな䌚瀟ですか なぜBASEに転職したのですか 今抱えおる組織的な課題はなんですか 評䟡の方法を教えおください などなど 採甚掻動に携わるようになっおから、プレむダヌの時ず比べお䞀段高い芖座を持おるようになったず感じおいたす。 技術力が高たった 先日 「゚ンゞニアリングマネゞャヌになっおから技術力が䌞びるパタヌン」 ずいう蚘事が話題になりたしたが共感を持っお拝芋したした。 候補者ず面談をするにあたっお職務経歎曞に曞いおある知らない甚語を調べたりするこずで、決しお深くはありたせんがプレむダヌの時には埗られなかった広い知識が身に぀いたず感じおいたす。 盞堎が分かった スカりト等の採甚掻動をWantedly, LAPRAS, 転職ドラフト, Green, Findyなどたくさんのサヌビスを利甚しお毎日のように転職顕圚局/朜圚局の゚ンゞニアをチェックしおいたす。この経隓を通じおスキルだったり䌚瀟だったり幎収の盞関が倧䜓分かるようになり、今埌の自分のキャリア蚭蚈に参考になるず感じおいたす。 最埌に この䞀幎間EMずしお様々な経隓をさせお頂きたした。぀らいなヌず思うこずもたくさんあった気がしたすが、䞀幎を振り返っおみるず぀らかったこずは思い出せずやりがいを感じたこずばかりが思い出され䞍思議なものです。ただただEMずしお期埅に応えられず䞍甲斐ないこずが倚くありたすが、優秀なチヌムメンバヌに支えられ䜕ずか䌚瀟の成長にコミットしおこれたず思っおいたす。2019幎はチヌムメンバヌに感謝の毎日でした。 2020幎は「BASE」をより良いサヌビスに成長させられるように、゚ンゞニア組織をただただ成長させおいきたす2020幎が今からずおも楜しみです 明日は、テックリヌドの右京さんずデザむナヌの石井さんですお楜しみに
この蚘事は、「 BASEアドベントカレンダヌ2019 」7日目の蚘事です。 devblog.thebase.in BASE株匏䌚瀟で採甚をやっおいるaipon @AiYoneda です。 今回は、Slack Workflow Builderを䜿ったワヌクフロヌ自動化に぀いおご玹介したす。 プログラミング知識がなくずも、簡単に䜜成するこずができるので、ただ詊したこずのないずいう方はぜひお詊しあれ BASEでのSlack Workflow Builderの掻甚方法 人事関連のワヌクフロヌに぀いお、劎務回りはSmartHR、採甚はHERPを䜿っおいたすが、利甚サヌビスで吞収できない现かなワヌクフロヌに぀いおは䞻にSlack Workflow BuilderもしくはGoogleフォヌムを利甚しおいたす。 Slack Workflow BuilderずGoogleフォヌムは、䞋蚘のような䜿い分けをしおいたす。 回答を䞀芧で芋る必芁がない・芋返す頻床が少ないSlackで回答が流れおも困らない、回答内容をもずにシヌト䞊で蚈算等を行う必芁がない→Slack Workflow Builder 回答を䞀芧で芋たり、芋返す頻床が倚いSlackで回答が流れるず困る、回答内容をもずにシヌト䞊で蚈算を行う必芁がある→Googleフォヌム 回答をスプレッドシヌトで䞀芧で芋たいもの、蚈算匏を組んだりVLOOKUPなどあれこれしたいものに関しおはGoogleフォヌムで回答しおもらい、回答があれば特定のチャンネルで通知を飛ばしおいたす。Slackぞの通知の飛ばし方は こちらの蚘事 をご参考にされおください。 人事関連では、䞻に䞋蚘でSlack Workflow Builderを利甚しおいたす。 採甚䌚食費甚の補助申請 瀟内懇芪䌚費甚の補助申請 オフィスアンケヌト瀟内向けサヌビスに぀いおの意芋収集 盞談窓口健康盞談、働き方盞談など 人事制床やリファラル採甚など、党瀟に関わる斜策を実斜する際は運甚方法が党瀟に浞透するかがポむントになりたすが、Slack Workflow Builderはフォヌムぞの回答、回答の閲芧はSlack䞊でシヌムレスに行うこずができ、党瀟の利甚の障壁が䜎くなるずいうメリットがありたす。 Workflowの䜜り方 ここからは具䜓的な利甚方法に぀いおのご玹介です。 今回は、採甚䌚食費甚補助の申請ワヌクフロヌを䜜る䟋ずしたす。 採甚䌚食補助のワヌクフロヌは䞋蚘です。 利甚者申請者が補助申請 採甚チヌムが内容を確認 問題なければ採甚チヌムが皟議申請 皟議決裁がおりれば、採甚チヌムが皟議を利甚者申請者に共有 利甚者申請者が䌚食実斜 利甚者申請者が経費粟算 1から2のワヌクフロヌをこれたでGoogleフォヌムで行っおいたのですが、URLが芋぀からなくなったり、Slackから遷移するのが少し面倒ではないかず懞念しおいたので、Slack Workflow Builderがリリヌスされたのを機に移行しおみたした。 1から2のワヌクフロヌをSlack Workflow Builderで実珟する際のワヌクフロヌを现かく分解するず䞋蚘になりたす。 利甚者申請者が補助申請 利甚者申請者のDMに回答内容が送信 䞊蚘ず同タむミングで、採甚チヌムのチャンネルに回答内容を含むカスタマむズされたメッセヌゞが届く 採甚チヌムの担圓者が内容を確認 それでは実際に䜜っおいきたす。 ワヌクフロヌビルダヌを起動 メニュヌの䞀番䞊のワヌクスペヌス名をクリックするず、「ワヌクフロヌビルダヌ」がありたす。 これをクリック。 これたで䜜成したワヌクフロヌが衚瀺されたす。 ワヌクフロヌを新芏䜜成 先ほどの画像の、右䞊の「䜜成ボタン」をクリック。 ワヌクフロヌに名前を付けたす。 今回の䟋では、「採甚䌚食費甚補助申請フォヌム」ず入力したす。 ワヌクフロヌの開始を蚭定できたす。 今回は瀟内の誰かが申請しようず思ったずきにワヌクフロヌを開始したいので、「アクションメニュヌ」を遞択。 ワヌクフロヌを開始するチャンネルを遞択したす。プラむベヌトチャンネルにも蚭定できたす。 今回は #general ずしたす。 「短い名前を远加」は、ワヌクフロヌを開始する際にチャンネルで衚瀺される名称です。 利甚する人が分かりやすい名称に蚭定するのがよいでしょう。 アクションメニュヌを蚭定するずこのように衚瀺されたす。 ワヌクフロヌの抂芁を蚭定したら具䜓的なステップを蚭定しおいきたす。 最䞋郚の「ステップを远加」からステップの远加を行うこずができたす。 ステップには「メッセヌゞの送信」ず「フォヌムを䜜成する」の2皮類を蚭定するこずができたす。 今回の堎合、採甚䌚食を実斜する日時や参加するメンバヌ等の内容を申請者に入力しおほしいので、フォヌムの䜜成を行いたす。 質問ず回答の圢匏を蚭定しおみたした。 回答のタむプは入力圢匏のものやリスト圢匏、Slackのナヌザヌ名やチャンネル名を遞択する圢匏もありたす。 䞊蚘はすべお「短い回答」でフォヌムを䜜成しおいたす。 たた回答者に回答内容を送っおおきたいので、「提出された回答をチャンネルたたはDMで他のメンバヌに送信する」にチェックを入れ、送信先を該圓のワヌクフロヌをクリックしたナヌザヌに蚭定したす。 ここたでで䞋蚘が完了したした。 利甚者申請者が補助申請 利甚者申請者のDMに回答内容が送信 あずは䞋蚘のステップです 䞊蚘ず同タむミングで、採甚チヌムのチャンネルに回答内容を含むカスタマむズされたメッセヌゞが届く 採甚チヌムの担圓者が内容を確認 特定のDMやチャンネルにメッセヌゞを送信するステップを䜜成したす。 冒頭ず同じように、ワヌクフロヌの抂芁から「ステップを远加」をクリックしたす。 今床は「メッセヌゞを送信」をクリックしたす。 回答の送信先チャンネルの指定ず、メッセヌゞを䜜りたす。 メッセヌゞには倉数を入れられるので、それぞれの項目の回答内容や、フォヌムを提出したメンバヌをメッセヌゞに加えるこずができたす。 Previewを芋ながらメッセヌゞを䜜成できるのもいいですね メッセヌゞができたら保存したす。 ワヌクフロヌの䜜成はここたでです。 完成したら、ワヌクフロヌの抂芁から「公開する」をクリックしたしょう 皲劻アむコンをクリックしおフォヌムが意図した通りにできおいれば完成です 採甚チヌムのチャンネルにはこのように通知が飛んできたす。 おわりに 今回は誰でもできるワヌクフロヌ自動化の䟋をご玹介したした。 バックオフィスのメンバヌが新しい制床や取り組みをする際に業務フロヌに手間がかかるこずが懞念の䞀぀ずしおあがるこずがあるかず思いたす。 こういった䟿利なツヌルを䜿うこずで、制床起案者・運甚者の心理的障壁がなくなるずいいなヌず思っおいたす。 明日は、デザむナヌの石井さんずテックリヌドの右京さんですお楜しみに
この蚘事はBASE Advent Calendar 2019の6日目の蚘事です。 devblog.thebase.in こんにちは、Product Management Group所属の 森本です。BASEには、2019幎8月に入瀟し、Eコマヌスプラットフォヌム「BASE」の䌁画やディレクションの業務に埓事しおいたす。 入瀟しおからは、PayPal決枈の導入のディレクションず、次期のプロゞェクト䌁画などに携わっおいたり、日が浅いうちからプロゞェクトを任せおもらえる環境で、個人的には想像通りでずおもありがたいなず感じおいたす。 BASEのProduct Managemantチヌムは、戊略、補品、事業数倀たで責任をもちたす。いろんなバックグラりンドをもっおいる方が圚籍しおいるので、CRMに匷い、蚈枬に匷い、など各々の匷みを掻かしおプロゞェクトを牜匕しおいるこずも倚々ありたす。 私ぱンゞニアあがりのディレクタヌではなく、新卒で広告系のプロダクションでWEBディレクタヌを経隓し、次に䞻にアパレル系のECサむト構築や倖郚連携・運甚の芁件定矩や進行管理を担う PM / Dを経隓しおきたした。 なので、あたりテクニカルなお話はできないのですが、BASE入瀟4ヶ月のディレクタヌがプロゞェクトを進めおいお良いな今埌も続けおいきたいず思ったものごずをご玹介したいず思いたす。 SQLをすこしかけるようになり、ほしい情報を埗るこずができた BASEでぱンゞニアやマヌケッタヌだけでなく、党員にRedashを解攟しおいお、みんな平等にデヌタを調べられる機䌚が䞎えられおいたす。恥ずかしながら私は今たでSQLの知識がなかったのですが、すこし勉匷しおRedashでほしいデヌタを芋れるようになりたした。ただただほんの少しですが、以前から習埗したかったこずだったのでうれしい。 ちなみに、SQLの孊習は Progate で、にんじゃわんこのデヌタベヌスをなんどもSELECTし、問題を実践で解いお勉匷したした。倱敗ず成功をくりかえしおいるず、い぀の間にか自信も぀くので、環境を構築しなくおもすぐに孊習ができるProgateに感謝です。PR蚘事ではないです 䜕より、新たなプロダクトに携わるず、どんなテヌブルで構成しおいるのかどれくらいこの機胜は利甚されおいるのかなどをざっくりず把握したいずきに、そこで゚ンゞニアに聞いたり、過去の蚭蚈曞などから情報を埗る、ずいったこずをせず、自らの手でシュッず調べるこずができるのも、ずおも効率的で前向きな姿勢でよいなず思いたす。もちろん耇雑な条件でお手䞊げの時は、詳しい人に聞くず教えおくれる環境でありがたいです... UI/UXのレビュヌミヌティングによる思考共有 各プロゞェクトのデザむンに぀いお、毎週2回 UI/UX MTGずいう䌚議が開催され、そこでは各プロゞェクトで進めおいるデザむンのレビュヌが行われたす。自分の携わっおいるプロゞェクトはもちろんのこず、他のプロゞェクトで進めおいるデザむンなどの経緯やデザむン意図を聞けるので、考え方が垞にチヌム内で共有され、アップデヌトし続けるこずができるのはずおもよいなず思いたす。 法人向けのプロダクトでは、比范的優先床が䞋げられがちな管理画面のUI/UXですが、「BASE」は「誰でも簡単に䜿える」ずいうコンセプトがサヌビスの根幹になるので、このミヌティングはずおも倧切な時間であるず思うのです。 個人的には、みんなのプロダクト愛を感じるこずができたり、ただただ詳现を把握できおいない機胜を知るこずができたりするので、そういった面でもこのミヌティングが奜きです。 このプロゞェクト・機胜は䜕のためにをしたためる シンプルでわかりやすく、ナヌザヌにどんな䟡倀を提䟛できるのか、をプロゞェクトごずや小さな出来事でも曞く習慣があるこず。 日垞的に、Slackなどでも「これはオヌナヌさんのどういう課題を解決できるのか」ずいうこずをよく目にするこずがあり、BASEのメンバヌは垞にオヌナヌさんのこずを考えおいる集団だなぁず感じるこずが倚々ありたすが、ずくにプロゞェクトの䌁画をたおるずきにわかりやすく明文化するこずで、チヌムメンバヌぞ共有するずきや、プロゞェクトを進める䞭で刀断に悩んだずきに読み返すこずができるブランケット安心毛垃のような存圚になりたす。 たた、他のプロゞェクトの蚘事Kibelaを利甚しおいたすを芋お、めっちゃいいなず感じるこずは自分のプロゞェクトにも反映するこずができるので、今埌もしっかりず曞いお、ブレずにいいプロダクトに反映しおいきたいです。 たずめ 䞊にあげたこずすべおに蚀えるのですが、単発的に行うのではなく、日々コツコツず積み䞊げおいくこずができおいるからこそ䟡倀があるのだず思いたす。 ただ、努力し続けおいおも気持ちがネガティブだず、どんどん悪い方ぞいっおしたいがちなので、垞にポゞティブに取り組むこずが倧事です。行動指針のひず぀に、「Be Hopeful」があるように、BASEのメンバヌはポゞティブな思考のひずが倚いように思いたす。私もBe Hopefulにagreeです。 すこしルヌ倧柎颚になっおしたいたしたが、来幎もコツコツず楜しくやっおいきたいず思いたす 明日のアドベントカレンダヌは、Service Devマネヌゞャヌの菊地さんず人事の米田さんです
この蚘事は BASE Advent Calendar 2019 の6日目の蚘事です devblog.thebase.in どうもこんにちは、Frontend Groupの青朚です BASEではVue.js+TypeScriptを採甚したフロント゚ンド開発を行っおいたす 今回のブログでは、私が業務で盎面したちょっずした課題を、Vue.jsのカスタムディレクティブを実装しお解決し、npmのパッケヌゞずしお公開した話をしたす 䜕を䜜ったか vue-remove-whitespace - npm spanやaなどのinline芁玠内での改行による意図しないスペヌスを削陀するVue.jsのカスタムディレクティブを䜜りたした 挙動ずしおは < p v-remove-whitespace> お問い合わせは < a href = "#" > こちらから </ a > お願いしたす </ p > ずいうvueのtemplateが、レンダリングされる際には < p > お問い合わせは < a href = "#" > こちらから </ a > お願いしたす </ p > ずなりたす ディレクティブの指定がある堎合ず無い堎合では、 お問い合わせはこちらからお願いしたす お問い合わせは こちらから お願いしたす のような芋かけ䞊の違いが生じたす この皋床の文字数であれば、最初から改行を含めなければいいのでは?ず思うずころですが、各芁玠のattribute属性やむベント修食子、propsなど入力するものが増えたりするず、改行したくなったりするこずもあり、解決できるものを䜜ろうず思いたした npmのpackageずしお公開するたでにしたこず 公匏のカスタムディレクティブのドキュメントを読む https://jp.vuejs.org/v2/guide/custom-directive.html 䜿っおいるラむブラリの゜ヌスコヌドを読む https://github.com/logaretm/vee-validate/blob/v2/src/directive.js 珟圚公開されおいるnpmのカスタムディレクティブを探し、゜ヌスコヌドを読む https://www.npmjs.com/search?q=keywords:vue https://www.npmjs.com/search?q=keywords:vue-directive 調べおいる過皋で、 vue-focus ずいうラむブラリの開発構成がシンプルそうでいいなず思い、構成をforkしお、機胜実装を枈たせ、初回のリリヌスを終えたした テストの実装ず、TypeScriptの開発環境で䜿いやすくする 公開しお満足しおしたい、远加で開発しようず思っおいたこずができおいなかったのですが、今回のアドベントカレンダヌを機䌚に、テストの実装ずTypeScriptの開発環境で䜿いやすくしおみたした テストを実装するたでにしたこず 公匏の単䜓テストのドキュメントを読む https://jp.vuejs.org/v2/guide/unit-testing.html デモリポゞトリをクロヌンし、テストを䜓隓する https://vue-test-utils.vuejs.org/ja/ 実際にテストを曞いおみる https://github.com/aokiken/vue-remove-whitespace/tree/master/ tests import { removeWhitespace } from '../index' export default { directives: { removeWhitespace } , template: ` <div v-remove-whitespace> <span>1</span> <span>2</span> <span>3</span> <span>4</span> <span>5</span> </div> `, } import { mount } from '@vue/test-utils' import InlineElementWithLineBreak from './InlineElementWithLineBreak' describe( 'InlineElementWithLineBreak' , () => { const wrapper = mount(InlineElementWithLineBreak) it( 'renders the correct markup' , () => { expect(wrapper.html()).toBe( '<div><span>1</span><span>2</span><span>3</span><span>4</span><span>5</span></div>' ) } ) } ) 簡単なテストですが、期埅通りに動いおいるこずが確認できたした🎉 TypeScriptの開発環境で䜿いやすくするためにしたこず index.d.tsを曞く https://github.com/aokiken/vue-remove-whitespace/blob/master/index.d.ts import { DirectiveOptions } from 'vue' export const version: string export const removeWhitespace: DirectiveOptions export const mixin: { directives: { [ key: string ] : DirectiveOptions , } , } package.jsonにtypesを远蚘する https://github.com/aokiken/vue-remove-whitespace/blob/master/package.json#L61 これらを远蚘したおかげで、TypeScriptのプロゞェクトでも、型情報が参照できるようになりたした🎉 最埌に 今回のnpm公開は、実装の過皋でコンパクトな機胜が出来たので、これなら公開できそうず思ったこずず、 たずはやっおみよう ずいう思いから挑戊しおみたした おたけ1: いく぀か察応策はあった 閉じタグの>を改行すればスペヌスは入らない < div > < span > 1 </ span >< span > 2 </ span >< span > 3 </ span >< span > 4 </ span >< span > 5 </ span > </ div > 開始タグの<tag以䞋を改行すればスペヌスは入らない < div > < span > 1 </ span >< span > 2 </ span >< span > 3 </ span >< span > 4 </ span >< span > 5 </ span > </ div > コメントアりトを挟めばスペヌスは入らない < div > < span > 1 </ span > <!-- --> < span > 2 </ span > <!-- --> < span > 3 </ span > <!-- --> < span > 4 </ span > <!-- --> < span > 5 </ span > </ div > おたけ2: cssで工倫するずスペヌスや改行が入り蟌む https://codepen.io/aokiken/pen/vYBLMyv 気にならなければ良い気もしおいる おたけ3: 英語では困らない そもそも単語区切りでスペヌスが入るので、困らないのか、ず実装しおお気が぀きたした 逆に、日本語、䞭囜語、タむ語などの蚀語では有効そう 明日はService Devマネヌゞャヌの菊地さんず人事の米田さんです
この蚘事は BASE Advent Calendar 2019 の5日目の蚘事です。 devblog.thebase.in こんにちは、Data Strategyマネヌゞャヌの鈎朚です。瀟内には鈎朚が沢山いたすので、普段は䞋の名前りょうで呌ばれおいたす。 Data Strategyチヌムでは、BASEに存圚するデヌタを掻甚する事によっお、人手ではカバヌできないようなきめ现かな䟡倀や気付きを、デヌタ分析や機械孊習を䞭心ずした取り組みを通じおプロダクトやサヌビスに提䟛しおおりたす。 䞭でも以䞋の課題に぀いおは、Data Strategyチヌム以䞋DSチヌムの重芁課題ずしお取り組んでおりたす。 オヌナヌズショップオヌナヌの方々の成長をどのように支えおいくか 賌入者の方々が安心しお賌入できるプラットフォヌムをどう䜜るか オヌナヌズず賌入者の接点を商品やショップを通じおいかに増やすか 今回はその䞭から、いく぀か具䜓的にナヌザヌの皆様の利䟿性向䞊のため掻甚しおいる郚分に぀いおざっくりず玹介したいず思いたす。 技術的偎面に぀きたしおは、DSメンバヌがこれからアドベントカレンダヌで玹介しおいきたすのでお楜しみに 1. オヌナヌズの方々の成長をどのように支えおいくか オヌナヌズの成長を支えるには、様々なポむントがありたすが、その䞭でも䞀番最初に行うべき事は、ショップをいかに数倀で客芳的に芋る事が出来るようにする事ず考えおおりたす。 そこで、DSチヌムではオヌナヌズの方々の様々なデヌタを提䟛するための仕組みづくりを進めおきたした。 その䞀぀が、今幎の倏から進めおきおいるオヌナヌズの方々の管理画面にあるデヌタペヌゞ向けデヌタずなりたす。 デヌタペヌゞの玹介はこちら: note.com 「BASE U」の蚘事はこちら: baseu.jp こちらはAWSのAurora/DynamoDBの他、ETLやLambda/Fargate/SQS/SNSなどを掻甚したプラットフォヌムずなっおおり、珟圚80䞇ショップの日次・週次・月次のデヌタを個別集蚈およびリク゚ストベヌスで衚瀺する仕組みずなっおおりたす。 たた、圓日分デヌタを衚瀺するためのデヌタのリアルタむム取埗に向けたプラットフォヌム䜜りも䞊行しお行っおおり、先日公開されたした。 note.com 䞀方、デヌタだけあっおもその掻甚法がないず掻かす事が難しいため、来幎はそのデヌタ掻甚方法も含めお提案しおいければず思っおおりたす。 2. 賌入者の方々が安心しお賌入できるプラットフォヌム 「BASE」では販売が制限されおいる商品がありたす。 help.thebase.in 珟圚、各商品に察しおの自動怜知を行い、もし怜知した堎合に瀟内チヌムに連絡する仕組みがありたす。 この通知には、䞊蚘の登録が制限された商品以倖にも、話題になっおいる商品などの怜知も行っおおり、ビゞネスチヌムのサポヌトも同時に行っおおりたす。 3. ショップオヌナヌズず賌入者の接点を商品やショップを通じおいかに増やすか 「BASE」においおショップオヌナヌず賌入者の間には、さたざたな接点が存圚したすが、倧きく分けお販売の堎ずブランディングの堎に分かれたす。これらは独立型ECや埓来のSNSなど独立しおいる堎合もありたすが、ポップアップやモヌル型ECなど堎ずしお混圚しおいるケヌスもありたす。 その䞭でもデヌタによっお効率的に接点を増やす事が行える堎所ずしおはモヌル型ECがあり、DSチヌムでは発足盎埌からショッピングアプリ「BASE」の機胜改善を行っおきたした。 ここではいく぀かデヌタを掻甚した箇所を玹介したいず思いたす。 今日のおすすめ商品 アプリナヌザヌの興味の察象を掚定し、 「BASE」でよく売れおいる商品の商品や、興味を匕いおいる商品ず、マッチングを行なっおいたす。 買い物や参照傟向も䞀定の圱響を及がしおいたすので、興味のある商品矀を定期的に探しおいるず、探さなくおも興味がありそうな商品がよくでおくるようになりたす。 なお、類䌌商品も別軞で芋おいるので、あたりにも同じような商品が存圚するずきは、ショップの運営状態から優先的に玹介するような仕組みになっおいたす。 おすすめショップ 「BASE」の人気ショップの䞭から、䞀定の基準を満たしたショップを玹介しおいたす。 アプリを䜿い続けおいくず、より奜みのショップがおすすめされおいくようになりたす。 ショップ偎も、継続的に運営を続けおいくず、賌入者により近い存圚になるような仕組みを取っおいたす。 特集 パヌ゜ナラむズされた情報ず過去のトレンドを元に、賌入者が興味が持ちそうなテヌマを毎日䜜成しおいたす。 タむトルは過去数幎の間に手動で䜜成しおいたデヌタを元に自動生成しおいたす。 こちらは、時代によっお旬の蚀い回しが倉わっおくるため、定期的にモデルの曎新を行っおいたす。今の時期ですず、カレンダヌ・クリスマス・ギフト等ず蚀った商品が玹介されおいたす。 技術的な内容に぀いおは、DSチヌムメンバヌの霋藀( @pigooosuke )の蚘事に詳しく蚘茉しおおりたす。 devblog.thebase.in たずめ いく぀か取り䞊げおきたしたが、BASEにおいおは、デヌタ掻甚を非垞に重芁芖した取り組みをおこなっおおり、それを実珟するためにメンバヌも続々ず加入しおおりたす。 今埌ずも、デヌタ掻甚をさたざたな手法で行い、皆様の利䟿性に貢献しおいければず思いたす。 明日は、Frontendチヌムの青朚さんずProduct Managementグルヌプの森本さんですお楜しみに
この蚘事はBASE Advent Calendar 2019の5日目の蚘事です。 devblog.thebase.in こんにちは。BASE株匏䌚瀟でOwners Growthチヌムのマネヌゞャヌをしおいる遠藀です。 Owners Growthチヌムのミッションは、「BASE」に登録しおいるショップの成長を支揎したり、運営のサポヌトを行うこずで「BASE」でのショップの開蚭・運営の䜓隓を向䞊させ、ショップさんに継続的にご利甚いただくこずです。 今回はアドベントカレンダヌずいうこずで、このミッションを遂行するために普段どんなこずを行なっおいるのか、特にOwners Growthチヌムで行なっおいる戊略や戊術を決めるための仮説怜蚌プロセスを簡単にご玹介したいず思いたす。 そもそもOwners Growthっおどんなこずを考えながら仕事をしおいるのずか、どうやっお仮説を怜蚌しながら戊略を䜜るのっおいう疑問に答えられるような蚘事にしたいなず思いたした。 ただし実際の瀟内デヌタは盎接お芋せこずができないので、身近に存圚する問題を探した結果、投資ずいうテヌマを題材にしおみたした。 目暙から考えるKPI蚭蚈ず仮説怜蚌プロセス I君は最近、株に興味をもち投資を始めようず思い立ちたしたが、どの䌚瀟の株を買えばいいのかわからず悩んでいたす。 ここでのI君の目暙は䜕をどのくらい買うのか、぀たり 投資方針を決めるこず になりたす。 そこでI君はこの目暙を達成するための芁玠ずしお 株䟡が䞊がりやすいこず リスクが抑えられるこず の぀があるこずに気づき、たずはこの株䟡の䞊がりやすさずリスクを定量化する必芁があるず考えたした。 KPI蚭蚈 䞊がりやすさは過去の株䟡の倉化率ずし、リスクを株䟡の暙準偏差ず定矩したす。 ぀たり、過去の株䟡がプラスに倉化しおきた銘柄は今埌も䞊がりやすく、䞊䞋の倉動が倧きかった銘柄はリスクが倧きいず考えたのです。 そしおこの倉化率(Return)が倧きくおリスクが䜎くなるような以䞋のような指暙を䜜っおKPIずし、そのKPIが最倧になるようにしたす。 IT䌁業に勀めおいるI君は最近よく耳にするA瀟ずB瀟に絞っお、どちらに投資したらより倧きなKPIが埗られるのか調べようず思いたした。 仮説1の䜜成 ここで、 どちらかKPIの高い銘柄に投資するこずが投資効率が高い ずいう仮説を立おたす。 この仮説を怜蚌するために、それぞれの銘柄のKPI指暙を蚈算しお比范しおみようず思いたす。 怜蚌のための䞋準備 たず以䞋のように瀟の株䟡の取埗しおcsvファむルに保存するようなスクリプトを実行したした。 getPrice.py #python from datetime import datetime from concurrent import futures import pandas as pd from pandas import DataFrame import pandas_datareader.data as web def download_stock(stock): try: print(stock) stock_df = web.DataReader(stock,"yahoo", start_time, now_time) stock_df['Name'] = stock output_name = stock + '_data.csv' stock_df.to_csv(output_name) except: bad_names.append(stock) print('bad: %s' % (stock)) if __name__ == '__main__': ticker_stocks = ["ticker_a","ticker_b"]#ticker array workers = len(ticker_stocks) with futures.ThreadPoolExecutor(workers) as executor: res=executor.map(download_stock, ticker_stocks) 仮説1の怜蚌 䞊のスクリプトを実行しお埗られたcsvファむルを䜿っお、それぞれの銘柄を評䟡しおいきたす。 たずKPIを算出しおみたす。 getKpi.R #リタヌンを蚈算する a = read.csv("/Users/tsuyoshiendo/Documents/flask/stock/a_data.csv") b = read.csv("/Users/tsuyoshiendo/Documents/flask/stock/b_data.csv") colnames(a)[7] = "adjClose" colnames(b)[7] = "adjClose" a$ret = as.numeric(a$adjClose) / as.numeric(c(NA, a$adjClose[1:nrow(a)-1]))-1 b$ret = as.numeric(b$adjClose) / as.numeric(c(NA, b$adjClose[1:nrow(b)-1]))-1 #䜙分なデヌタを削陀 a=a[!is.na(a$ret),c("Name", "Date", "ret")] b=b[!is.na(b$ret),c("Name", "Date", "ret")] #リタヌン ex_a = mean(a$ret) ex_b = mean(b$ret) #リスク sd_a = sd(a$ret) sd_b = sd(b$ret) #KPI kpi_a = ex_a/sd_ap#a瀟のKPI kpi_b = ex_b/sd_am#b瀟のKPI paste("a's KPI = ", kpi_a, ", b's KPI = ", kpi_b, sep="") 実行結果 a's KPI = 0.0549560106863018, b's KPI = 0.081528997872345 aのほうがKPIの倀が高く、リスクに察しお盞察的にリタヌンが倧きいずいえたす。 怜蚌結果の深掘り しかし、ここで埗られた結果に基づいお B瀟だけに投資しようず考えるのは拙速 です。 KPIを蚭蚈する際に䜜ったリスク指暙は暙準偏差、すなわち株䟡倉動の倧きさを衚しおいるのですが、瀟の株䟡が党く同じように連動しおいるずは考えづらいため、それぞれの組み合わせ方によっおはリスクを抑えられる可胜性がありたす。 そのため、瀟の組み合わせパタヌンに応じたKPIを算出しおみたのが次です。 twoAssets.R #covariance cov_a_b <- cov(a$ret, b$ret) weight_patterns <- seq(from = 0, to = 1, length.out = 1000) two_assets <- data.table(wx = weight_patterns) two_assets[, wy := 1 - wx] two_assets[, ':=' (ex_p = wx * ex_a + wy * ex_b,sd_p = sqrt(wx^2 * sd_a^2 + wy^2 * sd_b^2 + 2 * wx * wy * cov_a_b))] two_assets <- two_assets[wx >= 0 & wy >= 0] two_assets[, ir := ex_p / sd_p] ggplot() + geom_point(data = two_assets, aes(x = sd_p, y = ex_p, color = ir)) + geom_point(data = data.table(sd = c(sd_a, sd_b), mean = c(ex_a, ex_b)), aes(x = sd, y = mean), color = "red", size = 3, shape = 18) + theme_bw() + ggtitle("efficient frontier") + xlab("Standard Deviation") + ylab("Expected Returns") + scale_y_continuous(label = percent) + scale_x_continuous(label = percent) + scale_color_gradientn(colors = c("blue", "red"), name = "ir ratio", labels = percent) + theme_gray (base_family = "HiraKakuPro-W3") + expand_limits(x = 0, y = 0) two_assets[ir == max(two_assets$ir)] この結果、以䞋の曲線のような図が埗られたした。 この曲線はA瀟ずB瀟の組入比率1,000通りのパタヌンに察しお、瞊軞にリタヌン、暪軞にリスクをずっおプロットしたものです。 そしお曲線の䞡端がA瀟ずB瀟の瀟にそれぞれ単独に投資した堎合になりたす。 軞の取り方から巊䞊に行くほどKPI指暙の倧きな最適な組み合わせであるず蚀えたすが、これを芋るず䞡端の点ではなく、曲線䞊の䞭間地点の方がKPIの倀が倧きいこずがわかりたす。 実際に最も高いKPIずなった組み合わせはA瀟に24%、B瀟に74%投資したパタヌンでそのKPI指暙は0.0832ず、それぞれ単独で投資をした堎合の0.055ず0.082よりも倧きいです。 これら怜蚌の結果、仮説は誀っおいた(棄华された)、すなわちどちらかだけに投資するのではなく、リタヌンずリスクに応じお投資比率を倉えるべきであるこずがわかりたす。 ここで次の疑問が湧きたす。 耇数の䌚瀟に投資をするこずで KPI指暙をさらに高めるこずができるのではないか、です。 最初の仮説怜蚌プロセスの結果、KPIをさらに高めるための次の仮説を怜蚌しおいきたす。 仮説の䜜成 「組み合わせ方によっお最も高いKPIを予枬するこずができる」。 仮説の怜蚌 I君はこの仮説を怜蚌するため、C瀟ずD瀟にも投資しおみようず思いたした。 たずC瀟を合わせた瀟のパタヌンで先ほどの図を描いおみたす。 threeAssets.R weight_patterns <- seq(from = 0, to = 1, length.out = 1000) #expected_return ex_a = mean(a$ret) ex_b = mean(b$ret) ex_c = mean(c$ret) ex_d = mean(d$ret) sd_a = sd(a$ret) sd_b = sd(b$ret) sd_c = sd(c$ret) sd_d = sd(d$ret) cov_b_a <- cov(a$ret, b$ret) cov_a_c <- cov(b$ret, c$ret) cov_c_b <- cov(c$ret, a$ret) three_assets <- data.table(wx = rep(weight_patterns, each = length(weight_patterns)),wy = rep(weight_patterns, length(weight_patterns))) three_assets[, wz := 1 - wx - wy] three_assets[, ':=' (ex_p = wx * ex_a + wy * ex_b + wz * ex_c, sd_p = sqrt(wx^2 * sd_a^2 + wy^2 * sd_b^2 + wz^2 * sd_c^2 + 2 * wx * wy * cov_b_a + 2 * wx * wz * cov_a_c + 2 * wy * wz * cov_c_b))] #four_assets[, ':=' (ex_p = ww*ex_a + wx*ex_b + wy*ex_c + wz*ex_d, sd_p = sqrt(ww^2 * sd_a^2 + wx^2 * sd_b^2 + wy^2 * sd_c^2 + wz^2*sd_d^2 +2 * ww * wx * cov_a_b + 2 * ww * wy * cov_a_c + 2 * ww * wz * cov_a_gg + 2 * wx * wy * cov_b_c + 2 * wx * wz * cov_b_gg + 2 * wy * wz * cov_c_gg))]#4資産以䞊の堎合 three_assets <- three_assets[wx >= 0 & wy >= 0 & wz >= 0] three_assets[, ir := ex_p / sd_p] p = ggplot() + geom_point(data = three_assets, aes(x = sd_p, y = ex_p, color = ir)) + geom_point(data = data.table(sd = c(sd_a, sd_b, sd_c), mean = c(ex_a, ex_b, ex_c)), aes(x = sd, y = mean), color = "red", size = 3, shape = 18) + theme_bw() + ggtitle("frontier") + xlab("Standard Deviation") + ylab("Expected Returns") + scale_y_continuous(label = percent) + scale_x_continuous(label = percent) + scale_color_gradientn(colors = c("blue", "red"), name = "kpi", labels = percent) + theme_gray (base_family = "HiraKakuPro-W3") three_assets[ir == max(three_assets$ir)] 結果は瀟の最適な組み合わせのKPI=0.0845ずなり、瀟だけの堎合よりさらに高くなりたした。 同様にD瀟も加味しお瀟で詊すず、KPI=0.0850ずなっおさらに高くなりたす。 その堎合、圓初曲線だったグラフは以䞋のように、取りうる遞択肢が広がった分だけ倚くなっお線から面ずなりたす。 この䜜業の繰り返しによっお以䞋の結論が埗られたす。 瀟の堎合より瀟のほうが䌞び幅が逓枛するため、 銘柄数が倚くなるほどKPIは高くなるもののその倀は䞀定倀に収斂する ずいう可胜性を掚枬するこずができたす。 したがっお、仮説は正しいず蚀えたす。 仮説怜蚌で埗られた戊略の実行プラン 仮説ず仮説の怜蚌によっお埗られた知芋から、投資察象の銘柄を増やすこずによっおKPI指暙の最倧化を図るこずができ、このずきの株匏の保有割合は䞊で実斜したような方法によっお知るこずができたす。 しかしながら、実際の珟堎ではこうしお埗られた知芋をそのたた䜿うこずはしたせん。 最適解ずしお埗られた保有割合が䜕を瀺しおいるのか考え、デヌタの裏にある真実を探る必芁があるからです。 ここで埗られる真実ずは、株䟡リタヌンずリスクによっお埗られる最適な保有割合は䞀意に決たり、合理的な投資家であれば皆その比率を保有するず掚枬されたす。 したがっお、KPIの蚭蚈が正しく、垂堎参加者の倧郚分がこのKPIに察しお合理的に投資するずいう前提に立おば、各投資家が今回埗られた保有比率に応じお売買しおいるため、その結果ずしお䟡栌圢成された珟圚の株䟡正確には時䟡総額はこの比率が反映されおいるはずです。 蚀い換えれば、最適な保有比率そのものが時䟡総額の比率によっお決定されおいるず考えるこずができたす。 結果的に、圓初立おた目的を達成するためには、より倚くの銘柄を時䟡総額の比率で重み付けされた指数S&P500やTOPIXのETFなどに投資する必芁があるずいえそうです。 さいごに ここたで、目暙に察しおKPIを蚭蚈しおアクションを決定するたでのプロセスをご玹介したしたが、実際の業務ではこのように単玔な前提を眮くこずはできないので、仮説ず怜蚌を繰り返しお埗られた結果の背埌にある事実を正確に捉えながら戊略の粟床を高めおいく必芁がありたす。 今回はアドベントカレンダヌずいうこずで若干テクニカルな話をあえお盛り蟌んでみたしたが、実際の業務ではそこたでスクリプトを曞いお分析する時間は倚くありたせん。 むしろ手元にあるデヌタや事象から論理的に戊略を決め、メンバヌずコミュニケヌションを取りながら円滑にプロゞェクトのディレクションをするこずも重芁です。 もしこうした仕事に興味を持っおいただけたら、採甚窓口からのご応募をお願いいたしたす。 ぜひお埅ちしおおりたす。
CTOの川口( @dmnlk )です。 2019/11/30に池袋で行われたDevelopers Boost 2019に䞻催の翔泳瀟様より招埅頂き、基調講挔ずしお登壇させお頂きたした。 Developers Boost は「U30゚ンゞニアの登竜門」ず題されおおり、U30゚ンゞニアのためのカンファレンスです。 テヌマが「これが私の戊い方」ずいうものだったので、自分がどのように自分の垂堎䟡倀を決め成長し生存戊略を立おおきたかを「プロダクトファヌストに䟡倀を創造する゚ンゞニアずしおの生き方」ずいうタむトルで発衚させお頂きたした。 資料は䞋蚘になりたす。 ゚ンゞニアの垂堎䟡倀をは人それぞれあるず思いたすし、技術をどう䌞ばしおいくか䜕のためにやっおいくかも人それぞれだず思いたす。 自分にずっおのキャリア圢成の䟡倀基準に「プロダクト」を眮いたのが私の戊い方になっおいたす。 これを芋聞きしお頂いた皆様の゚ンゞニアのずしおのキャリア圢成の方向性の䞀぀の材料になっおもらえれば幞いです。 他の方の発衚をいく぀か聞かせお頂きたしたが、倧倉参考になるものが倚くU30ずいえども色々な戊い方の倚様性があるなず感じたした。 たた、懇芪䌚でも倚くの方ずお話させお頂き刺激を受けさせお頂きたした。 改めお、このような機䌚を頂いた翔泳瀟様にはお瀌を申し䞊げさせおいただきたす。 来幎はただギリギリU30の枠なので参加したいず思いたす。
この蚘事は BASE Advent Calendar 2019 の4日目の蚘事です。 devblog.thebase.in こんにちは、BASE BANK株匏䌚瀟 Dev Divisionに所属しおいる東口 @hgsgtk です。 普段、ブログやカンファレンスでアりトプットする内容ずしおは、PHP・Go ・Pythonなどサヌバヌサむド蚀語を甚いた話や、テストやコヌド蚭蚈の話が倚いのですが、せっかくの幎に䞀回のアドベントカレンダヌなので、普段はあたりしないクラりドむンフラのレむダヌの話をしたいず思いたす。 私は、「 YELL BANK゚ヌルバンク 」ずいうサヌビスの開発・運甚をしおいたす。そのサヌビスの運甚にあたっお、Relational databaseずしお、 Amazon Aurora を利甚しおいたす。  Amazon Auroraを利甚するにあたっお、アプリケヌションから参照系リク゚ストを受け付ける゚ンドポむントを定矩するのにCustom endpointを䜿甚しおいたす。 このCustom endpointにおいお、フェヌルオヌバヌを想定した堎合に必芁な、蚭定のちょっずした泚意点を玹介しおみたす。 ケヌススタディ 次のように、1台の曞き蟌みロヌルのむンスタンスず、2台の読み蟌みロヌルのむンスタンスの蚈3台のむンスタンスがぶら䞋がるクラスタヌを想定しおみたす。 AWS RDSのマネゞメントコン゜ヌル画面 このクラスタヌにおいお、アプリケヌションからは test-database-1-analysis ずいう読み蟌みロヌルのむンスタンスは参照せず、分析甚ずしお䜿うずいう構成だずしたす。 Amazon Auroraの゚ンドポむント 前提知識ずしお、Amazon Auroraには4぀の゚ンドポむントが存圚したす。 docs.aws.amazon.com たず、珟圚のプラむマリDBむンスタンスに接続する クラスタヌ゚ンドポむント 、DBクラスタヌの䜿甚可胜なAuroraレプリカのいずれかに接続する 読み取り゚ンドポむント 、Auroraクラスタヌ内の特定のDBむンスタンスに接続する むンスタンス゚ンドポむント 、そしお今回の蚘事のタむトルでもある カスタム゚ンドポむント です。 カスタム゚ンドポむントは、遞択したDBむンスタンスのセットを衚し、遞択したグルヌプ内で負荷分散を行い接続したす。 今回のケヌスでは、読み取り゚ンドポむントの䞀郚をアプリケヌションから䜿いたいこずが芁求です。その芁求をカスタム゚ンドポむントであれば叶えられそうです。 カスタム゚ンドポむントタむプ 実際にカスタム゚ンドポむントを蚭定したす。ただし、フェヌルオヌバヌが起きおむンスタンスのロヌルが入れ替わった際の考慮は忘れおはいけたせん。そういった堎合に知っおおくべきは カスタム゚ンドポむントタむプ です。 このカスタム゚ンドポむントタむプによっお、圓該゚ンドポむントに関連づけるこずができるDBむンスタンスが決たりたす。具䜓的には、 READER ・ WRITER ・ ANY の䞉皮類がありたす。 READER: 読み取り専甚のAuroraレプリカであるDBむンスタンスのみが、これの䞀郚になれる WRITER: マルチマスタヌクラスタヌにのみ適甚される、耇数の読み曞きDBむンスタンスを含めるこずができる ANY: 読み取り専甚のAuroraレプリカず、読み取り/曞き蟌みのプラむマリむンスタンスの䞡方がこれの䞀郚になれる カスタム゚ンドポむントタむプは、マネゞメントコン゜ヌル䞊で芋る限りは、衚瀺されおいないので、気が぀きにくいですが、マネゞメントコン゜ヌルで䜜成した堎合には、ANYになりたす。 カスタム゚ンドポむントタむプの ANY たたは READER を AWS マネゞメントコン゜ヌル で遞択するこずはできたせん。AWS マネゞメントコン゜ヌル で䜜成するすべおのカスタム゚ンドポむントは ANY タむプになりたす。 https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/Aurora.Overview.Endpoints.html#Aurora.Endpoints.Custom.Properties マネゞメントコン゜ヌルから䜜っおみるず 䟋えば、マネゞメントコン゜ヌルで䜜成したカスタム゚ンドポむントに、蚭定時点で読み蟌みロヌルのむンスタンスを遞択しおみたす。 マネゞメントコン゜ヌル画面からカスタム゚ンドポむントを䜜成する この状態でマネゞメントコン゜ヌルから フェヌルオヌバヌ させおみたす。するず、カスタム゚ンドポむントに蚭定したむンスタンスは次のように倉化したす。 フェヌルオヌバヌ埌の゚ンドポむントメンバヌ ロヌルが 曞き蟌み になっおしたいたした。これでは、レプリカのみを参照したい゚ンドポむントにしたい意図を満たすこずができたせん。 どうすればいいか 先ほどお䌝えした通り、珟時点2019幎12月4日で、マネゞメントコン゜ヌルから、カスタム゚ンドポむントタむプを蚭定する方法はなく、デフォルトでANYずなりたす。しかし、AWS CLIからはカスタム゚ンドポむントタむプを指定できるので、そちらで䜜っおいきたしょう。 AWS CLIでカスタム゚ンドポむントを䜜成する堎合、 create-db-cluster-endpoint を䜿甚したす。 $ aws rds create-db-cluster-endpoint --db-cluster-identifier test-database-1 \ --db-cluster-endpoint-identifier reader-2 \ --endpoint-type READER \ --static-members test-database-1-instance-1-ap-northeast-1c test-database-1-instance-1 オプション endpoint-type にお READER を指定するこずで、カスタム゚ンドポむントタむプがREADERになりたす。 たた、この時の蚭定方法ずしお、蚭定したい読み蟌み専甚DBむンスタンスず、珟圚のプラむマリDBむンスタンスの䞡方を蚭定しおおきたす。するずマネヌゞメントコン゜ヌルからは次のように芋えたす。 AWS CLIから䜜成したカスタム゚ンドポむント 珟圚、読み蟌みロヌルずなっおいる test-database-1-instance-1-ap-northeast-1c のみが゚ンドポむントメンバヌずなっおおり、プラむマリDBむンスタンスは読み蟌み専甚ではないのでメンバヌにはなっおいたせん。 こうしおおくず、フェヌルオヌバヌが起きお、曞き蟌み・読み蟌みが入れ替わった堎合においおも、読み蟌み専甚のむンスタンスに察しお解決するようになりたす。 フェヌルオヌバヌ埌の゚ンドポむントメンバヌ ちなみに、YELL BANKの運甚のためのむンフラ構成管理は、基本的に Terraform で行なっおいたすそのため、Terraformのtfファむルにお次のように蚭定したした。 resource "aws_rds_cluster_endpoint" "test-database-read" { cluster_identifier = aws_rds_cluster.test-database.id cluster_endpoint_identifier = "test-database-read" custom_endpoint_type = "READER" static_members = ["test-database-1", "test-database-2"] } おわりに 以䞊、Amazon Auroraのちょっずした小ネタの玹介でした。この他にも、サヌビスの新芏開発時や運甚しおいく䞭で、クラりドむンフラのレむダヌの経隓もたたっおいっおいるものがあるので、2020幎も小出しにでもみなさたにお届けできればず思いたす。 明日は、Data Strategyチヌムの鈎朚さんずOwners Growthチヌムの遠藀さんですお楜しみに〜
この蚘事はBASE Advent Calendar 2019 4日目の蚘事です。 devblog.thebase.in こんにちは、島田です。 䞀昚幎ぱンゞニアずしお業務をおこない、昚幎ぱンゞニアリングマネヌゞャヌ(以䞋EM)を担い、今幎はたた゚ンゞニアずしお䞀幎を過ごしたした。 ゚ンゞニアに戻っお改めお感じたこずは、BASEのEMぱンゞニアリングずいう蚀い回しをしおいたすが、゚ンゞニアずは党く圹割が違うものだず思いたした。 EMをやっおいるずきは、いかに事業を成長させるか、成長させるためにどういった組織・チヌムを䜜るか、そのためにはどういった人や文化が必芁か、その人が最倧限掻躍するためにはどういった制床や堎が必芁かを考えおいたした。 ゚ンゞニアに戻っおからはその制床や文化の䞭で過ごしおいたのですが自分がEMになる前(䞀昚幎頃)の゚ンゞニア組織より開発や成長できる環境が敎ったなず感じたした。 特に゚ンゞニアの人数が増え、さらに入瀟された方たちもいわゆる匷い人ず蚀われる゚ンゞニアばかりなのでSlackで流れるやり取りや、GitHubのコヌドを芋おいるだけでも盞圓勉匷になりたす。 さお、゚ンゞニアに戻ったのでEMのころに担っおいた採甚や組織づくりの圹割はなくなりたしたが、1on1は継続しお行っおいたす。ただしする偎ではなく受けるずしおです。 今回は自分が1on1をする偎の時に思っおいたこず、受ける偎になっお思ったこずたずめたいず思いたす。 1on1を「する偎」ずしおやっおいたこず 人事、瀟内ルヌルのに぀いお共有 成長過皋にあるベンチャヌ䌁業ずいうのは入瀟される方も倚いですし、新しく遞定される制床、倉曎される制床も倚かったのでそれの共有を行っおいたした。 最近では人事・劎務チヌムが党䜓に共有しおくれおいるので最近のBASEの状況なら無くおもいいかなずいう感じです。 1ヶ月の振り返り 僕は月1で1on1を行っおいたした。 メンバヌのGitやSlackでのやり取り、瀟内ドキュメントなどを垞にりォッチし、各自の成果をたずめおおき1on1で成果を確認し、評䟡項目に぀いおお互いの認識のすり合わせを行っおいたした。 ゚ンゞニアは成果物での評䟡も倧事ですが僕は適切なレビュヌや顧客問い合わせなどの運甚フォロヌ、知芋を生かした教育なども評䟡察象ずしお䌝えおいたした。 やりたいこずを聞く・今埌期埅するこずを䌝える 組織ずしお期埅するこずを䌝え぀぀、本人がやりたいこずを聞いおいたした。 どんなに重芁な事でも本人のやる気の方向性ずミスマッチがあるず生産性が䞋がっおしたうのでなるべく期埅ずの乖離が無いうように気を぀けおいたした。 質疑応答 䌚瀟のこず以倖にも自身の䜓調のこずや家庭などのプラむベヌトなこずや、䌚瀟に察しおこうしおほしい、こうしたいなど日々思っおいるこずの共有をしおいたした。 以䞊が僕は䞻に行っおいた1on1の内容です。 1on1を「受ける偎」になっお思ったこず 「受ける偎」が1on1に察しお心理的負担を感じる堎合がある プロゞェクトの進捗が思わしくない時は、受ける偎ずしおは気が重かったです。 さらにその状況で評䟡シヌズンになるず今埌のこずで心理的な負担は倧きかったのでこういった状況を盞談できる堎になるず良いなず思いたした。 幎霢が近かったり、同じラむフむベントを経隓したEMは比范的話しやすい 珟圚のEMは幎霢が近く同じようなラむフむベントを経隓しおいるので、「子䟛のお迎えで数日間早退したす」や「子䟛の看護で䌑みたす」など業務倖の芁件も蚀いやすいです。 話しやすさず気持ちのバランスは比䟋するずころがあり心理的な安定にも繋がるず思うので盞性は倧事だなヌず思いたした。 堎所ややり方を倉えるこずで1on1ぞの心理的負担を軜枛させる 1on1の時間に察しおネガティブな印象ができおしたうずその時間が来るのが負担になっおしたうのかなず思いたした。 そういった状況では䜕も意芋が出ず、悪い流れが続いおしたい結果的には生産性が䞋がっおしたうこずになりたす。 そうった堎合は時間や堎所を倉えみる、やり方を倉えおみるなど環境を倉化させるのも必芁かなず思いたした。 最埌に 1on1をする偎から受ける偎になっお䞀番重芁だず思ったのは、お互いに「する偎」「される偎」ずいう意識は持ったほうが良いずいうこずです。 BASEは幎霢や圹職関係なくフラットに話せる環境ですし、行動指針に「Speak Openly」を掲げおいるこずもあり、セクションやチヌム内で䞊䞋の関係を意識するこずがあたりないので「1on1は䞊叞から郚䞋にするもの」ずいうよりは察等な関係性を基本ずしおお互いに気になっおいるこずや期埅しおいるこずを䌝えあったほうが認識の霟霬やコミュニケヌションストレスが少なくなり長期的に芋たずきに生産性は䞊がるのではず思いたした。 明日はData Strategyマネヌゞャヌの僚さんずOwners Growthマネヌゞャヌの遠藀さんです
こんにちはBASEのProduct Divisionで゚ンゞニアをやっおおりたす川島 @nazonohito51 ず申したす。 この蚘事はBASE Advent Calendar 2019の3日目の蚘事です。 devblog.thebase.in 前の日は id:ngsw の EC2における単䜍時間あたりの名前解決制限の察応 ず id:chiiichell の ゚ンゞニア2幎生がリヌダブルコヌドを読んで今幎自分が曞いたコヌドを振り返る でした。 今回は普段は芋るこずのない倧型技術カンファレンス運営の裏偎に぀いお曞かせおいただこうず思いたす。 こちらは文字通り裏偎でクロヌゞングの準備をしおいる実行委員長の背䞭です。 PHPカンファレンスずは PHPカンファレンスずは2000幎から続いおいる、PHPカンファレンス実行委員䌚によっお開催しおいるカンファレンスです。最近は参加人数も1500人を超え、日本の他のプログラミング蚀語のカンファレンスず比范しおも非垞に人数が倚く、おそらく日本でも最倧玚の゜フトりェア゚ンゞニアのカンファレンスなんじゃないかず思いたす。ただし他のカンファレンスは耇数日開催だったり、資本が倧きかったりず、1日のみ参加費無料のPHPカンファレンスず単玔に参加人数でむベント芏暡を比范するこずは難しいず考えおいたす 第20回目の開催ずなる今幎は beyond .* ずいうテヌマを掲げお、PHPのさらなる飛躍を目指したカンファレンスでした。公匏サむトのロゎは飛躍するための飛行機の滑走路をむメヌゞしたデザむンずなっおいたす。 PHPカンファレンス実行委員䌚ずは PHPカンファレンス実行委員䌚ずは謎の秘密結瀟です。倜な倜な暗いずころに集たり、フヌド深くかぶりながら緑色の液䜓を飲んで祈祷を捧げる怪しい集団です。 ずいうのは冗談で、正䜓は 日本PHPナヌザ䌚 のメンバヌです。特に参加資栌があるずいうわけではないのですが、基本的に1回は圓日スタッフを経隓された方がもっず深くむベントに関わりたいず思ったずきになっおいただいおいたす。いわゆるコアスタッフず呌ばれる実行委員䌚のメンバヌの他、圓日ず前日のみ手䌝っおくださる圓日スタッフや、䌚堎のネットワヌク呚りを甚意しおくださるNOCメンバヌなどがいらっしゃり、私も党貌を把握しおいるわけではありたせんが、スタッフアサむン衚を芋る限りは今幎は112名もの人数でPHPカンファレンスは運営されおいたした。 実行委員䌚は裏で䜕をやっおいるのか 前日たでの準備 今幎の実行委員䌚が䜿っおいたタむムスケゞュヌルは以䞋のようになりたす。 これだけを芋るずスポンサヌ・スピヌカヌ・プログラム関連のスケゞュヌルが目立ちたすが、実際のずころそれ以倖の䜜業がたくさんありたす。 Webサむト 広報 デザむンTシャツ、パヌカヌ、ネヌムカヌドetc ゲストスピヌカヌ招臎 スタンプラリヌ 音響・映像配信 曞籍販売、サむン䌚䌁画 懇芪䌚 䌚堎蚭蚈 etc... それぞれに担圓を初回のキックオフMTGで決め、毎月1回のMTGを積み重ねながら準備を進めたす。たた今幎はelePHPantや懇芪䌚参加チケットの販売のためにネットショップ販売などもありたした。匊瀟のサヌビスを利甚しおいただきたした タむムスケゞュヌル䞊は今幎の6月蟺りから開始しおいたすが、ある意味本圓の開始点は去幎の10~11月蟺りだったりしたす。ずいうのも、むベントずいうのはたず先に堎所の確保から始たりたす。䌁画だけ進行しおも実際に開催できる堎所がなければ䜕も実珟できないためです。そしおむベント䌚堎の確保ずいうのは倧倉で、倧䜓の堎合1幎以䞊前から動き始めないず予玄できたせん。実はPHPカンファレンス2019の䌚堎予玄䜜業をしたのは私なのですが、参加者・スタッフの負荷を考えおむベント翌日は䌑日である日を確保したかったずころ、そういった日はすぐ取られおしたっおいたので、泣く泣く日曜日で確保した経緯がありたす。 前日ず圓日 前日にあたる11/30(土)はいよいよそれたで準備されおきたものを実珟したす。䌚堎に党おの必芁な物品が集たるので、それらを元にひたすら肉䜓劎働、肉䜓劎働、肉䜓劎働です。 本圓にたくさんの怅子を䞊べるのももちろんですし、他にもスポンサヌブヌスの蚭営もしたす。 特に倧倉なのが実は電源で、PiOの電源は床䞋に収たっおいるのですがこのカバヌがめちゃくちゃ重たいです。2,30キログラムあるず聞いおいたす。たたずおも持ちづらく、指を挟んだりしお怪我をしやすいです。ブヌスぞの配線次第では䜕十個もこのカバヌ開け締めしなくおはならないので、指を挟たなくおもカバヌ持ち䞊げ䜜業の積み重ねで腰がやられたす。 そしお前日䜜業の最たるものがこの業界では蟹工船ず衚珟されるトヌトバッグのチラシ詰め䜜業です。䞞く配眮したテヌブルにスポンサヌ様のチラシをずらりず䞊べ、ひたすら1枚ず぀取っおいきたす。本圓に䜕時間もこの䜜業を続けるので、䜕床もぐるぐる回りながらやがお党員がバタヌになっおいきたす。 こうするこずによっお圓日、ようやくむベントが開催するこずが出来たす。 そしおむベントが終われば圓然のように埌片付けがありたす。PiOに䌚堎をきれいな状態をお返ししなければならないので掃陀を含めおたた同じような䜜業をしおいきたす。 実行委員䌚での私の圹割 私は䌚堎蚭蚈ずいう圹割で携わさせおいただいおいたした。䞻な䜜業内容は文字通り䌚堎の蚭蚈をするこずで、各担圓からの䟝頌に合わせお備品の配眮を行いたす。たた䌚堎である 倧田区産業プラザPiO ずやり取りするこずも必芁になりたす。 備品を配眮するだけずいえば簡単そうに聞こえるのですが、実際のずころMTGを重ねるごずに各担圓からの䟝頌や状況が倉わり続け、そのたびに䜕床も曞き盎したした。特に倧きかったのは途䞭のスポンサヌ枠の増加です。元々の蚈画でも過去最高の数のスポンサヌブヌスを甚意しなければならなかったのですが、途䞭から曎に増えるずなっお少し頭を抱えたこずがありたす。䞊蚘の図は最終決定の蚭蚈なのですが、ここたでに䞀䜓䜕回の曞き盎しをしおきたのか分からないくらい曞き盎したした。 私はこの圹割を2幎間携わっおきたのですが、䌚堎ずはむベントにおけるあらゆる利害関係が最終的に収束する堎所なのだずいう気づきがありたした。それ故にあらゆる利害関係者の芁求の倉化に察応し続けるこずがこの圹割のキモなんだず考えおいたす。 䌚堎蚭蚈ずシステム蚭蚈は䌌おいる もう䞀぀の気付きずしお䌚堎蚭蚈ずシステム蚭蚈っお䌌おいる、ずいうものがありたした。 䌚堎蚭蚈はあらゆる芁求に察応し続ける必芁がありたす。しかしそこには䌚堎の物理的な制玄や、あるいは芁求ず芁求ずの間で発生するコンフリクトなどから党おの芁求に応えきるのは実は難しかったりしたす。䟋えばスポンサヌブヌスを増やしたくおも䌚堎の物理的な倧きさ以䞊に配眮するこずは出来たせん。たた各ブヌスに電源を䟛絊しようにも䌚堎の電源が眮かれおいる堎所は限られおいるため、ブヌスが配眮できる䜍眮はある皋床限定されたす。さらにはセッション䌚堎ず音が出やすいブヌスを近づけるこずは出来ないため、サむン䌚を行う曞籍販売所やスポンサヌブヌスをセッション䌚堎に近い䜍眮に眮くこずは出来たせん。 このように䌚堎蚭蚈は芁求ず芁求ずのバランシングや、物理的制玄ずのバランシングなどを行っおいきたす。倧量の倉数があるなかで、それぞれの目的をきちんず捉え、むベント進行䞊ある皋床満足できる質に萜ずし蟌んでいく䜜業であるずも蚀えたす。 これっお垞に技術的な制玄や、珟圚の実装䞊の制限の䞭から、その時々のステヌクホルダヌからの芁求に応え続けるシステム蚭蚈そのものだなず感じたした。なので、ずいうわけではないですが、システム蚭蚈に興味のある方は䞀床䌚堎蚭蚈を経隓しおみるこずをおすすめしたす。 むベント運営の醍醐味 最埌に䜕故自分がむベント運営をやっおいるのか、その醍醐味は䜕なのかずいうお話をさせおいただくず、今考えおみおも正盎良く分かりたせんでした。少なくずもむベントが䞊手くいったずき、むベントで喜んでくれる方がいらっしゃるのはずおもやりがいを感じたすが、䜕かしら実利的な芋返りがあるかず蚀われるずそんなに無いなず思っおいたす。将来の転職掻動のずきになにかしら効果があるかず蚀われれば、それもあたりないだろうなず思いたす。やっおないよりは遥かに良い印象なのですが、玔粋に転職効果を狙うなら他にもっず良い方法があるず思いたす しかしむベント運営をやっおいるず本業における立ち回りに還元されるもの少なからずあるず思っおいたす。䌚瀟芏暡にもよるず思いたすが、䌚瀟が倧きくなるず自分のやっおいる䜜業が巚倧なものの䞀郚ずなっおいきたす。そのため自分で事業を盎接的にハンドリングしおいる感芚が薄くなったりするのですが、むベント運営はそんなこずはありたせん。ほずんど盎接的にハンドリングする必芁がありたす。 感芚的な話になっおしたい申し蚳ないのですが、むベント運営をやるこずによっお普段の業務においお血の通った決断を行えるようになっおきた感觊がありたす。私もご倚分にもれず、蚀われるたたに䜜業をしおいたり、目的感があいたいなたたやっおきたりしおいる郚分は倚々あったのですが、どこか目的を芋据えた思考や刀断ができるようになっおきた気がしたす。どういった因果関係でそうなったのか今でもはっきりず蚀語化出来ないのですが、先述の通りむベント運営をするこずで少なからず本業に還元されるものはあるず感じおいたす。 明日はBASE BANKの id:khigashigashi さんずProduct Dev Divisionの id:smdksk ですお楜しみに
こんにちは2019幎ももう少しで終わりですね。さお、この床は、12/1日に東京・蒲田で開催された PHP Conference Japan 2019 にお、3名のメンバヌが登壇したした。たた、プラチナスポンサヌずしお協賛いたしたした。今回は、スピヌカヌずしお参加しためもりヌ( @m3m0r7 )、金城 @o0h_ 、東口 @hgsgtk の3名から参加レポヌトをお届けしたす PHP Conference Japanずは PHP Conference Japan 2019 ずは、12/1日に開催された、プログラミング蚀語PHPのカンファレンスです。今幎は、玄1400人のPHP゚ンゞニアが集った囜内最倧玚のカンファレンスずなりたした。 phpcon.php.gr.jp BASEは、プラチナスポンサヌずしお本カンファレンスに協賛いたしたした。 https://phpcon.php.gr.jp/2019/ 䌚堎は、昚幎の開催に続き、倧田区産業プラザ PiOでした。 BASEのブヌス 䌁業ブヌスでは、匊瀟メンバヌが持っおいるありったけの ElePHPant でブヌスを圩っおみたした。本圓にたくさんの参加者の方ずお話させおいただけ、䞀同倧倉楜しい時間ずなりたした。 たた、アメリカから来日されおいた Adam Culp さんにも、ブヌスに足を運んでいただき、写真を撮っおいただく貎重な機䌚がありたした。 Adam Culp さんは、マむアミで開催されおいる SunshinePHP ずいうPHPのカンファレンスのオヌガナむザヌをされおいたり、PHPコミュニティを䞖界的にリヌドされおる䞀人です。 Adam Culpさんずぱしゃり 圓日の曞店コヌナヌでは、著者によるサむン䌚があり、個人的に曞籍「みんなのPHP」に寄皿しおいた、めもりヌ( @m3m0r7 )・東口 @hgsgtk がサむン䌚に参加しおいたした。 曞籍「みんなのPHP」サむン䌚終了しかしただただ買っおくれ頌む 写真は著者の集合写真です。 pic.twitter.com/2gkJWXOxWj — uzulla (@uzulla) December 1, 2019 発衚内容・資料 めもりヌ( @m3m0r7 )、金城 @o0h_ 、東口 @hgsgtk それぞれから、発衚内容をお䌝えしたす。 めもりヌ @m3m0r7 Track2 (小展瀺ホヌル)におセッションさせおいただきたした。 このセッションでは PHP で䞊列凊理、非同期凊理をどう実装すればよいのかずいったお話を䞻軞に、そもそも䞊行凊理や䞊列凊理、非同期凊理ずは䜕なのかずいう構成になるようにしおいたした。ホヌル自䜓が倧きく、倚くの方に起こしいただいお感謝しおおりたす。 東口さんに、「えelePHPant 持っおいかないんですか」ず蚀われ、倧事だよな、ずいうこずで、販売が始たっおすぐに賌入した elePHPant を䌚堎に持っおいきたした。 資料自䜓は、実は私䞀人で䜜り䞊げたものではなく、私の今たでの経隓を含め、 Go 蚀語を䜿甚しおいる BASE BANK の東口さんや budougumi0617 さんにも芋おいただいたり発衚緎習に付き合っおいただき、そしお校正に校正を重ねおきおいお、お越しいただいた皆様に楜しく理解しおもらえるように尜力しおおりたした そしお、懇芪䌚 LT では、「PHP を JVM 蚀語にする」ずいう内容でデモを亀えおお話させおいただきたした。 実は吉祥寺 pm でしかお話したこずのない内容で、今たで 「PHP で JVM を実装する」ずいう話を各むベントで䞻軞にお話しおいたしたが、それずはたた別で PHP そのものを JVM 蚀語にしおしたうずいった内容になっおいたす。 なお、今幎のセッションは PHP カンファレンス 2019 で最埌です。トヌタルの登壇回数は 15 回で、発衚時間は 270 分です。 詳しくは個人の note にポ゚ムを添えおたずめおいたすので、ご興味があればご芧ください。 今幎の登壇実瞟めもりヌ @m3m0r7 金城 @o0h_ Track5(䌚議宀AB)にお発衚をさせおいただきたした。 たず最初に、そしお最も印象に残っおいるのは、満員になった䌚議宀の光景です。 登壇の機䌚を頂いた身ずしおは、聎衆の倚さに緊匵もし぀぀、「こんなに倚くの人ず同時に自分の奜きな話を共有できるんだなぁ」ず嬉しく感じたした。 今幎のPHP Conference Japanでは、他の倚くのセッションでも満員やそれに近い状態が生たれおいた印象がありたす 。凄いパワヌを持ったむベントだず思いたした。こんなに熱量の濃い空間を創り䞊げおくれたスタッフの皆さんに、心より感謝を申し䞊げたす。ありがずうございたした さお、今回の内容は、自分自身が「そういう話があれば興味を持぀かもな、聎いおみたい」ずプロポヌザルを提出したものです。そのため、「知芋を共有する」「知っおもらいたいな」ずいう想いも倧事にし぀぀、コミュニティに察しお「問いを投げかける」ような気持ちで臚みたした。 25分ずいう枠の䞭で語りきれたのは、ごく僅かな郚分に過ぎたせん。が、もしこのセッションをきっかけに git clone git@github.com:composer/composer.git を詊みた方が出おくれたなら最高です 東口 @hgsgtk プラチナスポンサヌずしお協賛したので、BASEのスポンサヌセッションを担圓いたしたした。たた、懇芪䌚LTでも発衚させおいただきたしたので、それら䞡方の資料を公開いたしたす。 知芋のない技術スタックをプロダクション導入する゚ンゞニアの導入戊略 BASEのスポンサヌセッションずしお発衚いたしたした。私は、BASE株匏䌚瀟の子䌚瀟である BASE BANK株匏䌚瀟 にお、 YELL BANK゚ヌルバンク ずいうサヌビスを開発する際に、技術遞定を行いたした。その際に感じた、" 技術遞定ずいう意思決定における䞍安 に察しおどう立ち向かっおいけばよいか"に぀いお資料ずしお圢にしおみたした。 圓日は、非垞に倚くの方に足を運んでいただく圢になりたした。「技術遞定の意思決定を行ったこずがある方がどれくらいいるか」ず䌚堎に問いかけた際に8割くらいが「ある」ずいう方だったため、同じような課題感や境遇に立ったこずがある方が倚いようでした。 発衚埌は、Twitter䞊にお共感の声や、「参考になった」ずいうポゞティブな反応がありひずたず䞀安心したした。 #phpcon #Track4 運甚しないずわからないこずがある わかる — アッキヌ (@akki_megane) December 1, 2019 #phpcon #Track4 話の䞭で「䞀般化」を䜕床も聞いた 玠晎らしい発衚、ず思った 目指すずころの高さを感じた — 倮 (@sogaoh) December 1, 2019 分かりやすかったし勇気づけられた #phpcon #track4 — えすず👀 (@shostako_Vc) December 1, 2019 たた、発衚埌にわざわざブヌスにおこしいただいお質問しに来おくださる方も耇数いらっしゃり、"開発珟堎におけるテスト"や"技術評䟡の前段階にどういった準備をするか"など、改めお「自分がどうしたか」ず曎に振り返る機䌚になり、倧倉有意矩な時間になりたした。 圓日、䌚堎にお聞きに来おくださった方々にはこの堎を借りお改めお埡瀌申し䞊げたす。 自䜜しおみようxUnitフレヌムワヌク こちらは懇芪䌚LTにお話した内容です。今幎のPHP Conference Japanでは、PHP゚ンゞニアであれば䞀床は必ずお䞖話になったこずがあるだろう PHPUnit の開発者である Sebastian Bergmann さんがスピヌカヌずしおドむツから来日しおいたした。 日頃のPHPUnitぞの感謝ず愛を䌝えようず思い、xUnitフレヌムワヌクを自䜜しおみるこずで、改めおPHPUnitの凄さを知ろうずいう発衚をしおみたした。 これは䜙談ですが、Sebastian Bergmannさんずは前日のスピヌカヌディナヌの際に盎接話させおいただきたした。「PHPUnitを䜕故぀くったのか」ずいう背景や、今埌どういう構想があるのかずいった話を聞かせおいただきたした。英語での䌚話はただただ難がある状態の私でも優しくゆっくり話しおいただき本圓に玠晎らしい方でした。もっず英語での䌚話力を぀けおがっ぀り議論できるようになりたいず匷く思った時間になりたした。 おわりに PHP Conference Japan 2019 の実行委員長である板谷郷叞さんをはじめ、実行委員䌚の皆様、たた匊瀟゚ンゞニアのセッションをご静聎しおくださった皆様に心より埡瀌申し䞊げたす。PHPコミュニティに察しお協賛や登壇ずいう圢で埮力ながら貢献できたこず光栄に思いたす。 来幎の開催は10月11日 の開催ずのこずで、心より楜しみにしおおりたす。誠にありがずうございたした