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

TECH PLAY

BASE株匏䌚瀟

BASE株匏䌚瀟 の技術ブログ

å…š616ä»¶

本皿は BASE Advent Calendar 2019 🎅🎄 の14日目です こんにちは、Product Divisionの金城( @o0h_ )ず申したす。 10月にBASEに入瀟したしお、ブログ投皿は本皿が初ずなりたす。よろしくおねがいしたす。 さお、早速掲題の件に入らせおいただきたす。 PSR, PHP-FIG 「PSRはPHP-FIGが策定し運甚する䞀連の芏栌であり、その19号はPHPDoc Tagsに぀いおの決め事」です。 PSRには色々なレむダヌのルヌルが ─時には 「本来の䞻旚を超えおいる」ずいう批刀 をもさえ巻き起こしながら─ 策定されおいたす。 1 PHP-FIGは、元々はオヌトロヌディング掻甚のための取り組み 2 を契機ずしお䜜られた団䜓です 3 。぀たり、元来から「PHPの曞き方」に匷い関心を持っおいたずも蚀えたす。 PSRの「0番目がAutoloading Standard」ずいう事だけに留たらず、「続く1番目はBasic Coding Standard」「2番目がCoding Style Guide」であるこずからも「初期にフォヌカスしおいた領域がどこであるか」ずいうのを䌺い知れるのではないでしょうか。 曎に蚀い加えるず、PSR-0,2のみが珟状でDeprecatedステヌタスに配眮されおいたす 4 。 すなわち、「より掗緎した芏栌を埌から䜜り、採択しおいる」のが、AutoloadingずConding Styleに関する話題であるずいう事です。 5 そしお、2019幎12月珟圚で「Draft」にあるのが「PSR-5: PHPDoc Standard」ず「PSR-19: PHPDoc tags」です。 ある意味で「実装のし易さ」ず同じくらいに「コヌドを読みやすく・違和感なく」運甚しおいく事に重きを眮いおいた団䜓が、「doccomment/tagの曞き方に぀いお未だに暙準化できおいない」・・ずいうのは、ちょっず面癜いず思いたせんか䞀䜓どんな経緯があったのでしょうね。 そんな蚳で、本皿では「PSR-19なんなのよ」ずいう事に぀いお芋おいきたいず思いたす。 PHPず「doc comment」 䞀昔前たで、PHPでdoc commentずいうず「いろんな方蚀がある」ずいう印象を抱いた方も倚いず思いたす。私もその1人です。 (以䞋、doc commentに぀いお「PHPDoc」 6 ず衚蚘するこずずしたす。) 「phpDocumentorのそれに埓おう」「いやPhpStormに合わせりゃよくない」「Phanが」「PHPStanが」ずいった゜レです。 もちろん、それぞれ目的が違うものであり、自分達の目的を果たすために独自の拡匵的な蚘法なども導入しおいく事には必然性がありたす。完党に統䞀され埗るものではないでしょう。・・ずはいえ、いち利甚者的な芳点からするず「䌌たような事は同じ曞き方で出来ればいいのにな」ず思う蚳です。たさに「盞互運甚性のための決たり事」があるず良かろうなぁずいう堎面で、PSRに目が向きたす。 なるほど、それがPSR-5です。 しかしこのPSR-5、提案自䜓は数幎前になされたものの、「広範に支持されるような勧告」ずいった地䜍にたでは至りたせんでした。結局は「色々な曞き方がある内のいち方蚀」のような雰囲気のたたです。そうしお遂には議論が停止、草案は「STATUS:ABANDONED」 7 に・・・・ なったのですが、これが再提案されお「DRAFT」化 8 、今に至りたす。そういった蚳で「5番」などずいう非垞に若い番号が未だに議論されおいる蚳ですね。 そしお新生PSR-5はEditor/Working group membersずしお「phpDocumentetor」「PhpStorm」「Psalm」「PHPStan」の関係者をそれぞれ迎えおいたす。これは珟実的な萜ずし所を芋぀け぀぀、各ツヌルのサポヌトの芳点からも実甚性を䌎う状況が実珟できるのではないでしょうか。期埅ですね 昚幎時点でのPSR-5の状況に぀いおは、こちらの蚘事に倧倉よくたずたっおおりたした。ご参照ください。 qiita.com PSR-19 PSR-5の「埩掻」にあたっお、䞀緒に提出されおいるのがPSR-19です。 これは、PSR-5にたずたっおいた内容を2぀に分けようずいう提案 9 に基づくものになりたす。 PSR-5に぀いおはPHPDocのフォヌマットを、PSR-19に぀いおはタグの皮類を決める内容になりたす。二者が分割された動機に぀いおは「PHPdocのフォヌマット(PSR-5)を䞀般的な内容にし぀぀、タグの内容(PSR-19)は拡充しやすくする。たた、将来的にはPHPDoc倖でも利甚可胜になるこずを芋越しお」ず説明されおいたす。 The rationale behind the splitting is to make it easier to add new tag dictionary PSRs in the future and also make PHPDoc more generic so it can be used for non-docblock standard such as Doctrine-style annotations. 䟋ずしお Doctrine-style annotations が挙げられおいたすが、䟋えば <?php /** * @MyAnnotation(myProperty="value") */ private $ bar ; のようなものでしょうか。 ずいうこずで、本皿は(既にその内容には芋慣れおいるであろうPSR-5よりも)PSR-19の䞭身はどうなっおいるのかなず興味を持っお調べおみるものです。 䞭身を芋おみる 珟時点でのPSR-19のproposalはこちらから確認できたす。 fig-standards/phpdoc-tags.md at 2668020622d9d9eaf11d403bc1d26664dfc3ef8e · php-fig/fig-standards · GitHub たた、GitHub䞊での議論(PR)に぀いおはラベルで蟿っおみるのが良いでしょう。 Pull Requests · php-fig/fig-standards · GitHub 䞭身を芋おみるず、5぀のセクションに分かれおいたす。 PHPDoc standard(PSR-5)を補完するのが䞻目的であるこず MUSTやSHOULDなどの語に぀いおはRFC 2119に準ずるこず (い぀ものや぀ですね) 甚語の定矩等はPSR-5に準ずるこず inheritDocの扱いに぀いお 改倉無しで党䜓を匕き継ぐ堎合は @inheritDoc を、むンラむンで埋め蟌む堎合は {@inheritDoc} を甚いるこずなど そしお第5セクションが「タグ」の定矩です。 珟時点では以䞋のリストが掲茉されおいたす @api @author @copyright @deprecated @internal @link @method @package @param @property @return @see @since @throws @todo @uses @var @version このうち、 @method @param @property @return @throws @var などは、すっかりお銎染みなのではないでしょうか。クラスやメ゜ッドの機胜に関連するもので、PhpStormなどのIDEやPHPStan・Phanずいった静的解析を利甚しおいる堎合には欠かせたせん。 残る内容に぀いお、その曞匏や意味を掻い摘んで芋おいきたしょう。 独断にお、関連するタグごずに以䞋の4぀の矀にたずめながら取り䞊げおいきたす。 利甚者の想定・提䟛範囲に関わるもの 著䜜者・暩利に関わるもの 関連情報・参照情報に関わるもの バヌゞョン・曎新に関わるもの 利甚者の想定・提䟛範囲に関わるもの 論理的な空間・括りず、誰に向けお提䟛しおいるものかに関する情報です @package @package は、「論理䞊の区分」を瀺すために甚いるものず説明されおいたす。 PHPの持぀蚀語機胜であるNamespaceず近い抂念を取り扱うものであり、実際に「階局は(Namespaceず同様に) \ で区切っお蚘述する」ず芏定しおいたり、「Namespaceず完党に䞀臎する堎合に@packageタグを利甚するこずは掚奚しない」ず蚀及されおいたす。 あくたで Namespaceで衚珟される「機胜的な区分」ずは別に、論理䞊の区分を明らかにしおおきたいずいう堎合に利甚される ものになりたす。 @api @api は、 「primary public API of a package」に付䞎されるものず説明されおいたす。 publicなメ゜ッドの䞭でも、 そのパッケヌゞ倖から利甚される ようなものを区別するためのものです。 @internal @internal は、@apiず察象的に「only for use within the application, library or package to which it belongs.」ず説明されおいたす。 「primary public API of a package」に付䞎されるものず説明されおいたす。 このタグが芏定されおいる動機に぀いおも説明しおいお、 1぀には「ラむブラリの䜜者が、 ナヌザヌに察しお"砎壊的な倉曎を含む可胜性がある"ずいうこずを瀺す ため」 2぀には「静的解析時に、 パッケヌゞ倖からの利甚を譊告できるようにする ため」 ずいうポむントを取り䞊げおいたす。 実際に、PhpStormでは違反的な利甚に察しお譊告を出すようになっおいたす。 著䜜者・暩利に関わるもの 該圓箇所に関する暩利等に関する情報です @author, @copyright @author は、その䜜者や重倧な改修を行った人を瀺すものず説明されおいたす。 @copyright はそのコヌドに察する著䜜暩ず説明されおいたす。 (特異な内容はないので、あずは割愛) 関連情報・参照情報に関わるもの 該圓箇所の実装の理解を助ける情報です @link @link は関連する情報を瀺すものず説明されおいたす。 ( a custom relation between the associated "Structural Element" and a website, which is identified by an absolute URI. ず曞かれおいたすが、ここは「Webサむト」ずいうより「情報の掲茉されおいるWebサむト」ずいったニュアンスで解釈するほうが意味する所に近いのかなず思いたす) @linkタグを利甚する堎合には、絶察URIで瀺すように指瀺されおいたす。 たた、むンラむンでの利甚も想定されおいたす。 <?php /** * This method counts the occurrences of Foo. * * When no more Foo ( {@link http://example.com/my/bar} ) are given this * function will add one as there must always be one Foo. * * @return int Indicates the number of items. */ function count () { <...> } @see @see は関連するリ゜ヌスを瀺すものず説明されおいたす。 @linkはURIだったのに察し、こちらはURI以倖のリ゜ヌスを利甚するこずも可胜 です。䟋えば他のクラスやメ゜ッドがあり、そのような芁玠を指す堎合には「FQSEN」を利甚するようにず芏定されおいたす 10 。 たた、関連先のリ゜ヌスずの関連性(=なぜ see なのか)ずいう説明を茉せるべきだずされおいたす(SHOULD)。 @link が察象リ゜ヌスの説明に぀いお「しおもよい」ずされおいるのに察しお( The @link tag MAY have a description )、こちらが「べき」なのは、「ドキュメント」以倖のリ゜ヌスも扱えるからでしょうか。 @uses @uses は利甚される芁玠やファむル名を瀺すものず説明されおいたす。 ただし、蚘述できるのは同じプロゞェクト内のリ゜ヌスに限るずされおいたす。そのために、URI等の利甚は犁止です。(システム倖郚のリ゜ヌスに蚀及する堎合は、 @see を利甚するこずが出来たす) 䟋ずしお、「コントロヌラヌのメ゜ッドに察しお、描画されるView/templateファむル名を瀺す」ずいった内容が挙げられおいたす。 これは、どういった堎合に嬉しいのでしょうか 䟋えば 動的な関数の呌び出しを行っおいる堎合やマゞックメ゜ッド経由で利甚しおいるメ゜ッド に぀いお、@usesを甚いお゚ディタや静的解析ツヌルに「実際に䜿っおいるよ」ずいうこずを知らせるこずが出来たす。 䜙談ですが、 @used-by に぀いおは、珟時点ではPSR䞊での芏定はありたせんでした。 バヌゞョン・曎新に関わるもの 珟行の状態や曎新履歎ずいった情報です @version @version は、珟圚のバヌゞョン情報ずそのバヌゞョンで提䟛された内容を瀺すものず説明されおいたす。 セマンティックバヌゞョンを利甚しお蚀及するこず、説明文を加えるこずを掚奚されおいたす(RECOMMENDED)。 @since @since は提䟛が開始された(もしくは内容が珟行の状態に倉曎された)バヌゞョンを瀺すものず説明されおいたす。 (@versionず同様に)セマンティックバヌゞョンを利甚しお蚀及するこず、説明文を加えるこずを掚奚されおいたす(RECOMMENDED)。 䟋えば「2.0.4から、第3匕数が远加された」ずいった内容などは@sinceで瀺すのが良さそうです。 「提䟛のタむミング」「バヌゞョニング」に関わるずいうこずで、@versionず混同するこずもあるかもしれたせんが、 「今がどのバヌゞョンであるか」ずいった情報には@sinceによっお提䟛されるべきではない(@versionを利甚する) ず説明されおいたす。 @deprecated @deprecated は廃止予定・将来のバヌゞョンにお削陀されるものを瀺すものず説明されおいたす。 廃止予定ずされた理由に぀いお、説明文を加えるこずも可胜ずされおいたす(MAY)。たた、代替ずなる手段が甚意されおいる堎合には @see タグによっお瀺すこずが掚奚されおいたす(RECOMMENDED) @todo @todo は実斜される(開発・改修される)べきこずを瀺すものず説明されおいたす。 このタグには必ず説明を入れなければならない(MUST)ずのこずです。 (todoが「バヌゞョンに関するもの」かずいうず、「将来的な倉曎に関するもの」ずいう意味では、この矀に属するのではないでしょうか) その他の提案内容に぀いお ここに列挙したタグは既にproposalにコミットされおいるもので、ある皋床の同意を埗たものずいう扱いになりたす。 もちろん、「今はリストに含たれおいる」ずいうだけであり、最終的には削陀されるかもしれないし他のタグが远加される可胜性もありたす。(そもそもPSR19自䜓が採択されおいないですからね) たた、興味深い議論ずしおは、PSR-5の領域ですが PR#1191にお「 no-return type」に぀いおの提案がなされおいたす。 github.com これは、TypeScriptでいう never に盞圓するもので、exit()やtrigger_error()の発火により「呌び出し元に凊理を戻さない」性質を説明するものです。PHPStanやPsalmでも、それぞれ @return never , @return no-return ずいう衚蚘によっお扱われおいたす。 PSR-19に぀いおも、いく぀かのタグの远加に関するPRが䜜成されおいる状況です。 たずめ ざっくりず、珟時点でPSR-19ずしお芏定されおいるPHPDocのタグに぀いお芋おいきたした。 倚くのタグは「定番化」しおいるもので、既存のコヌドに察しお衝撃を䞎える事はないように思いたす。実際に、PSR自らがInterfaceの定矩等においお既に利甚しおいる状況が芋受けられたす。 PSR自䜓は決しお「PHPを曞く際に埓わなければならない」ものではなく、「フレヌムワヌクやツヌルを䜜る時に準拠しおおくこずで、䜕か良いこずがあるず良いよね」皋床のものです。そのため、実質的なデファクトスタンダヌド(今だずphpDocumentorになるでしょうか)が存圚すれば、倧きく困るこずもありたせん。実際に、過去に議論が停滞したのも「困らなかったから」ずいう偎面はあるでしょう。 ですが、個人的には、先述の通り「PSR自䜓がPHPDocを利甚しおいる」こずもあり、やはり明確な定矩を持぀べきなのではないかなず考えおいたす。 繰り返しになりたすが、PSR-5,PSR-19はその内容がただ確定しおおらず、珟圚進行系で議論がなされおいる状況にありたす。なので、ここにたずめた内容も採択時には倉曎されおいるかもしれたせん。 それでも、その内容や議論に興味を持぀こずは、今っぜいPHPを考える䞊で倚少なり意味のあるこずではないかず考えたす。 PSRはその性質的に「最倧公玄数」を瀺す力も持っおいるず捉えおいるからです。 皆さんもぜひ、PSR-5/PSR-19の内容を眺めながら「ドキュメント性胜の高い゜ヌスコヌド」に぀いお想いを銳せおみるのはいかがでしょうか ここたで読んでいただきありがずうございたした。 明日は、Data Strategy Groupの霋藀ずFrontend Group加藀が曎新予定です✚ 前身ずなる「PHP Standards Group」は「PHP本䜓ぞの提案」を目指しお結成されたグルヌプです。しかし「暙準化」に際しおは考慮すべき点が倚く困難性があったため、「より柔軟な提案をするために、蚀語仕様そのものではなく、その䞊に乗るプラクティスずしお芏玄を求めよう」ず方向転換をしお今のPHP-FIGが生たれたした。そのため、「広い範囲を扱う」ずいうのは、サゞ加枛はあれど、FIGにおける本質的な振る舞いだず私は解釈しおいたす。 ↩ https://wiki.php.net/rfc/splclassloader ↩ 歎史に぀いおは、こちらの蚘事に詳しいです The Past, Present and Future of the PHP-FIG — SitePoint ↩ PSRのステヌタスや議論の進行に぀いおは、 https://www.php-fig.org/bylaws/psr-workflow/ をご芧ください ↩ ず蚀い぀぀、「PSR-3を螏たえお簡玠化した(利䟿性を高めた)PSR-16:Simple Cache」や「PSR-7をコアずした䞀連のHTTP関連Interface(15,17,18)」もあるので、「特定の領域に぀いお深める・広める」ずいう事自䜓は他にも積極的に行われおいたす。 ↩ https://github.com/php-fig/fig-standards/blob/2668020622d9d9eaf11d403bc1d26664dfc3ef8e/proposed/phpdoc.md#3-definitions ↩ GItHub䞊でステヌタスを倉曎された゜ヌスはこちらです https://github.com/mcneely/fig-standards/pull/1 ↩ https://github.com/php-fig/fig-standards/pull/1078 ↩ https://groups.google.com/d/msg/php-fig/5Yd0XGd349Q/w-uTRA2nEgAJ ↩ FQSENに぀いおは、PSR-5を参照しおください https://github.com/Chofoteddy/fig-standards/blob/e89924d320c269678fe3f5822c9bf9ef95db1af0/proposed/phpdoc.md#3-definitions ↩
はじめたしお、Owners Marketingグルヌプの小林です。 Owners Marketingグルヌプは、ショップオヌナヌさん向けに新芏機胜などを垞に開発しおいる゚ンゞニアのチヌムで、最近ではネットショップ䜜成サヌビス「BASE」の拡匵機胜である「BASE Apps」のInstagram販売App、予玄販売Appや顧客管理Appなどを開発リリヌスしたした。 アドベントカレンダヌ14日目のこちらの蚘事では、BASE瀟内の郚掻動のひず぀、ランニング郚の掻動に぀いお玹介したいず思いたす。 devblog.thebase.in BASEの郚掻動 BASE瀟内には倚くの郚掻動があり、5名以䞊のメンバヌが集たれば、郚掻動ずしお認定され、䌚瀟から掻動費の䞀郚を補助する制床がありたす。 ランニング郚以倖に瀟内にある郚掻動 ビヌル郚ペヌガ郚日本酒郚筋トレ郚ボヌドゲヌム郚ボルダリング郚サりナ郚LLVM郚など 瀟内にあるコミュニティは倚皮倚様で気軜に参加できるため、仕事ではあたり関わりのない人ずも気軜にコミュニケヌションできる堎ずしお、積極的に掻甚されおいる印象です。 過去には、ボヌドゲヌム郚が、ランサヌズさんず合同倧䌚などを実斜し、瀟倖亀流の堎ずしおも掻甚されおいたす。 basebook.binc.jp ランニング郚 ランニング郚では日々の掻動ずしお、週䞀回、仕事埌にオフィスの近く走る掻動を開催しおいたす。皇居䞀呚をメむンコヌスずしお、その日の参加メンバヌの走力や䜓調に合わせお、6〜13kmくらいの距離を走っおいたす。 ランニング郚に参加する前たで、日々の業務では座りっぱなしで運動䞍足を感じる事が倚く、たた「運動したい。走りたい。」ず思っおもなかなか継続できず䞉日坊䞻になりがちでした。ランニング郚は、雚で䞭止になる日もあるのですが、基本的には毎週掻動しおいるため、継続的に運動できる環境になり運動䞍足が解消できるず思い、参加しおいたした。 皇居呚回コヌス 有名な皇居ラン。 オフィスがある六本朚グランドタワヌから皇居に向かい、皇居の呚りを1呚しおグランドタワヌたで戻るコヌスです。 皇居呚蟺は倚少のアップダりンがあり、1呚5kmで信号で止たる事がなく走りやすいコヌスです。 桜の時期では、倜桜を楜しみながら走れたす。 マラ゜ン倧䌚 私がランニング郚に参加し始めお1幎半ですが、週䞀回の掻動以倖に、䌑日に開催されるマラ゜ン倧䌚に䜕床か出堎しおきたした。それたでマラ゜ン倧䌚に参加したこずがなかったので、最初は10kmのマラ゜ン倧䌚に出堎するこずにしたした。 10kmずいう目暙ず他のメンバヌに負けたくないずいう気持ちもあり、週䞀回の掻動以倖でも、仕事埌や䌑日にも自䞻緎習。 日々のランニングずは違いマラ゜ン倧䌚に出堎するこずで、各メンバヌの目暙蚭定ができ、Slack䞊でもランニング郚のチャンネルでは話が尜きたせん。 小さい芏暡のマラ゜ン倧䌚でも、ゎヌルするずメンバヌ党員に達成感があり、倧䌚埌の打ち䞊げでは䞀䜓感が生たれたす。 ただ、倧䌚が終わるずすぐに次の目暙を蚭定したくなり、終了埌すぐに次の倧䌚に申蟌みをするを繰り返し、出堎を重ねる毎に自然ず距離を延ばしおきたした。 以䞋、私が出堎したマラ゜ン倧䌚 2018幎10月21日 10km 2018幎10月27日 16km 2019幎01月20日 21km 2019幎06月23日 30km 2019幎09月28日 21km 2019幎11月10日 42.195km 2019幎11月17日 42.195km 2019幎12月09日 42.195km 2019幎11月10日に参加した暪浜マラ゜ンでは、高速道路の䞀郚区間が䞀郚芏制ずなり、高速道路を走る事ができたした。奥にはベむブリッゞも芋えおずおも気持ちがよかったです。 たずめ 仕事を䞀生懞呜するのは勿論ですが、職堎のメンバヌず他の事にも挑戊できる環境であるこずは玠晎らしいず思いたす。 最初は運動䞍足解消やコミュニケヌションの堎ずしお、ランニング郚を掻甚しおいたしたが、少しず぀小さな達成を積み重ね、い぀のたにかフルマラ゜ンを走れるくらいの走力が぀いおいたした。 䜕事にも圓おはたるず思いたすが、 THERE IS NO FINISH LINE. そこにゎヌルはありたせん倧䌚埌の打ち䞊げを楜しみ぀぀、継続した挑戊をしおいきたいず思いたす。 最埌たで読んでいただきありがずうございたした 明日は、Frontendグルヌプの加藀さんずData Strategyチヌムの霋藀さんですお楜しみに。
この蚘事はBASE Advent Calendar 2019 13日目の蚘事です。 devblog.thebase.in こんにちは。UIデザむナヌの野村です。 2019幎4月にBASEに入瀟し、䞻にショップオヌナヌさんが䜿う管理画面のUIデザむンに携わっおいたす。 デザむンワヌクの䞋敷きになるようなトラむをいく぀か行っおおりたしお、今回はそのあたりの話をさせおいただきたいず思いたす。 [これたでに実斜したトラむ] 2床のデザむン思考ワヌクショップ 非デザむナヌ向けのデザむンツヌル講習䌚 サヌビスデザむンの勉匷䌚で組織デザむンに぀いお孊ぶ瀟倖 開発プロゞェクト内での実践途䞭 なぜそんなトラむをしおるのか、ずいう話 受蚗デザむンの䞖界からむンハりスぞ移行しお 私はBASE入瀟前はデザむン制䜜䌚瀟に勀めたりフリヌランスで働いたりしおいたのですが、携わった業務はほが党お受蚗案件でした。 業務委蚗の圢で事業䌚瀟内で勀めたこずはあったものの、むンハりスデザむナヌずしおの経隓はずおも浅い状態で入瀟しお参りたした。 受蚗での仕事ず、事業䌚瀟内むンハりスでのデザむンワヌクには色々ず違いがありたす。 受蚗デザむナヌをしおいるず、基本的には「お客さん䟝頌者が提瀺する情報をベヌスにモノを䜜る」ずいう圢をずりたす。 実際のずころ、プロゞェクト開始段階でお客さんから十分な情報を提瀺されるこずは皀でしお、远加で色々ず調査・怜蚎を行うこずずなりたす。 もらった情報を粟査した䞊で、䞍足を補うためにお客さんにヒダリングをしたり、内倖ぞの調査を提案し蚈画したり、技術や呚蟺事情に぀いおの勉匷䌚や講習䌚を行ったり... などなど、良いアりトプットに到達するための斜策を打っおいくわけですが、ずはいえ基本的には情報収拟ず取りたずめはお客さん偎で担圓するこずが䞻で、受蚗デザむナヌずしおの自分は「 お客さんの情報収拟掻動をサポヌトし぀぀、制䜜に泚力する 」ずいうのが基本スタンスずなりたす。 そうなるず、情報の深いずころたではむマむチ理解が浅いたた玍期優先で業務を進行するこずになったりするのですが、それは「 仕方ないこず 」ず飲み蟌んできたした。 むンハりスデザむナヌずしお仕事をしおいるず、自ら瀟内で動いお事業やナヌザの深い情報を掻き集めながらプロダクトを䜜っおいくこずができたす。 マネヌゞャヌが取りたずめおくれた情報のみから業務を進めおいくこずも可胜ではありたすが、瀟内の各郚眲で持っおいる知芋や䜓隓を掻き集めお自ら消化・敎理しお業務に反映するこずで、アりトプットの質は目に芋えお向䞊したす。倧倉ではありたすが、むンハりスデザむナヌずしお働くにあたっおの面癜いポむントの1぀です。 効率よく、か぀深く情報を共有するには 自ら組織内のナレッゞ掻き集めようずした時、新参者は 誰がどんな知識をもっおいるかわからない ずいう事態に陥りがちです。 それらはドキュメントずしお蓄積されおたりしたすが、党おが明文化されおいるわけではありたせん。 たた、ドキュメントには文章や図の圢で知識を溜めおいくこずはできたすが、そこに各人の想いや䜓隓ひっくるめお ナラティブ 、ず呌ぶこずにしたすたで蟌めるのは難しいです。文章曞くの苊手な人も居たすし。 ナレッゞは有圢文章・図化しお蓄積可胜だけど、ナラティブは無圢のたた流動し続けるこずしかできない、ずでも申したしょうか。 そしお、ナラティブのようなバックグラりンドを螏たえおないず、せっかくの知識もその真の意味、深い意味が抜け萜ちた䞊っ面だけのものになっおしたうこずがありたす。非垞に勿䜓ない事態ですね。 そんな想いから、郚眲の垣根を超えお各人のナラティブをそれずなく共有できるような、そんな堎を組織内に䜜れないものか、ず考えたした。 プラむベヌトなこずを掘り䞋げようずいうものでなく、仕事やプロダクトに぀いおのナラティブを共有するのが䞻なので、 プロダクトの䌁画をテヌマにしたワヌクショップ をするのが良いかな、ずいう思いに至り、䌁画ず実斜をしたした。他、非デザむナヌ向けにデザむンツヌルの講習䌚をしたり、デザむン組織醞成に関する瀟倖の勉匷䌚に出たり、ずいったトラむをしたした。 2床のワヌクショップ 「デザむン思考を䜓隓するワヌクショップ」ずいう名目で、2時間皋床のショヌトワヌクショップを瀟内で2床実斜したした。2回ずも、参加人数は10名前埌の、小芏暡なものです。 第1回ワヌクショップ たずはやっおみよう、ずいうこずで7月にパむロット版的な圢で実斜したした。 内容ずしおは、私が過去に参加した1DAYワヌクショップを䞋敷きに、2時間皋床の尺で収たるよう圧瞮したものです。 いくらかバタ぀いたものの、10名匷の参加者には楜しんでいただけたようで、パむロット版ずしおは成功を玍めたず思っおいたす。 その時の様子は こちら 。 第2回ワヌクショップ 第2回のワヌクショップは、流れずしおは抂ね第1回ず同じなのですが、第1回での反省点や、いただいたフィヌドバックなどを螏たえ、か぀段取りのバタ぀いた箇所を敎理するなど、いく぀かのアレンゞをしたした。 その時の様子は以䞋の通り↓ ワヌクショップ振り返り 2回のワヌクショップの埌には、参加者からはそれなりにポゞティブなフィヌドバックをいただけたした。「楜しかった」「普段話せない人ず話せおよかった」「良い頭の運動になった」など 90〜120分皋床のワヌクショップをスムヌズに進めるための段取りも䜜れたず思っおいたす。 自身のファシリテヌション力向䞊にも぀ながり、良いトラむができたした。 他、ナラティブ共有に぀いおのトラむ 「他郚眲メンバヌのナラティブを埗る」ずいう䞻旚からは少々逞れるのですが、以䞋のようなトラむを行いたした。 非デザむナヌ向けの、デザむンツヌル講習䌚 これは私が䌁画したわけではなく、デザむンチヌムメンバヌの小山が䞻導したものなのですが、デザむナヌ以倖ぞのデザむンツヌル講習を行いたした。業務の効率化を意図しおの斜策ですが、デザむナヌから他郚眲メンバヌぞの良いナレッゞ共有・ナラティブデザむナヌの䜜業姿勢ずか共有になったず考えおいたす。 組織ナラティブに関しお勉匷䌚参加瀟倖 瀟倖で行われたサヌビスデザむンに関する勉匷䌚にお、組織におけるナラティブ構築に関しお敎理・発衚したりもしたした。この勉匷䌚の圱響で、ナラティブずいう単語を倚甚するようになった私です。口には出しおないけど。 開発プロゞェクトの䞭にナラティブ収集のフェヌズを組み蟌んでみるトラむ ここたででご玹介したのは開発プロゞェクトの倖偎で実斜しおきた内容なのですが、珟圚は「 プロトタむプ怜蚌のための瀟内ヒダリング 」ずいう名目で、プロゞェクト初期段階で他郚眲から意芋を収集するフェヌズを䜜るこずにトラむしおいたす。 単なる意芋収集に留たらず、ナラティブ共有の䞀助になっおいる、ず感じおいたす。 この件に぀いおはただプロゞェクト進行䞭に぀き詳しくは曞けないのですが、いずれ敎理しおたた蚘事化したいず思いたす。 敎理途䞭のものをチラ芋せするず以䞋のような具合です。 トラむのたずめず今埌 業務の傍でいく぀か斜策をトラむしおみたした。 それぞれ倚くの知芋を埗られたしたが、䞀方で、拡倧しおいく組織の䞭で個々のメンバヌの想いや䜓隓を収集するこずの難しさを感じおいたす。デザむンワヌクに本圓に圹立っおいるのかは、正盎ただよくわかりたせん。 最埌に挙げたデザむンプロセスのトラむに぀いおは、進行䞭の開発プロゞェクトに取り蟌み぀぀詊しおるため、デザむンワヌクに察しおそれなりの効果があるこずを実感できおいたす。たずはこのプロセスを敎理しお瀟内で共有し、トラむを重ねおいきたい次第です。 ワヌクショップに぀いおも参加者からはポゞティブな感想をいただいおいたすので、こちらも続けおいきたい想いでいたす。 ただ、これたでに実斜したワヌクショップよりも、もう少し業務ずの繋がりをむメヌゞしやすいような圢のワヌクショップを行いたいず思っおいたす。 具䜓的に䜕かモノプロトタむプを䜜っお怜蚌するような圢をずれたら良いのではないかず思い、珟圚はプロトタむピングにフォヌカスしたワヌクショップに぀いお孊習・研究しおいるずころです。 なんやかんやず、 チヌムを超えお存圚朜圚しおいる集合知をデザむンワヌクに繋げるこずを意図したトラむをしおいたす 、ずいうお話でした。最埌たでお読みいただきありがずうございたす。 明日はPlatform Devの金城さんずService Devの小林さんです
はじめに この蚘事はBASE Advent Calendar 2019 13日目の蚘事です devblog.thebase.in こんにちは。BASE株匏䌚瀟 Product Design Divison でデザむンリヌドをしおいる北村 ( @naomi_kun )です。 ふだんはオヌナヌさた向けの管理画面やショッピングアプリの改善、新機胜の開発たでいろんな郚分でUI蚭蚈を担圓しおいたす。盎近では、既存機胜のフルリニュヌアルプロゞェクトを進めおおり、おんおこ舞いになりながらもずおも楜しみながら開発しおいたす。 実は、9月にデザむンマヌケットのテヌマ䜜者さん向けの機胜が少しアップデヌトされたした。デザむンマヌケットでテヌマを䜜成しようず思っおいるデザむナヌさんは、ぜひ BASE Developers からデザむナヌ申請しおみおください。 https://developers.thebase.in/ 今日は、BASEに入瀟しお2幎半を迎えたので、BASEの考える「Move Fast」をデザむナヌ芖点で振り返りながら、いろいろ曞いおみようず思いたす。 BASEのMove Fastずいう文化 入瀟圓初からBASEには「Move Fast」ずいう文化が浞透しおおり、今珟圚のプロダクトの開発にもその考え方が匷く根付いおいたす。自分が携わっおきたプロゞェクトも、たずリリヌスしおみよう、ファヌストリリヌスを恐れるな、ずいう考えが匷く、チャレンゞングな䌚瀟の雰囲気を感じずったのを芚えおいたす。 前Qのはじめにも、あらためお「Move Fastを䜓珟したプロダクト䜜りを正ずする」ずいうこずが党瀟的に語られ、各プロゞェクトの開発珟堎では、「DAY1にこだわるために䜕をすべきか」ずいう議論が飛び亀っおいたす。 プロゞェクトが煮詰たるあたり、圓初の芁件から膚れ䞊がったり、リリヌスが遅れがちになるずいったプロゞェクトを経隓しおいたこずもあるので、このスピヌド感ず意思決定の方法はずおも「匷い」なず思いたした。匷い、ずいう衚珟が適切かはわからないんですが、匷さを持っおいる䌚瀟だなず感じおたす。 日々感じおいるこずですが、「BASE」のショップオヌナヌさんは本圓に成長速床が早く、気づいたらずおもおおきなブランドになっおいる、ずいうこずも倚いです。 そんなオヌナヌさんたちの成長速床に぀いおいくための方法ずしお、「DAY1にこだわる」ずいう意思決定が蚀語化されたこずは、私個人ずしおは、腑に萜ちた気がしたす。 入瀟圓初を振り返りながら圱響されたこず 入瀟した圓初、私はアプリの開発チヌムにアサむンされたしたが、振り返っおみるず珟圚のBASEのMove Fastを䜓珟するような珟堎だったなあず思いたす。 その頃のチヌムにはディレクタヌがいなかったため、開発メンバヌ党員がオヌナヌシップをもっお取り組んでおり、仕様決めやUI蚭蚈を䞀緒に進められたこず、䞍具合時の察応もリアルタむムで議論しおいたこずなど、いろんなずころに銖を぀っこめる環境のおかげもあっお、結果的にサヌビスぞの理解がずおも深たったず思っおいたす。 たた、珟圚のVP of Product・CTO・テックリヌドなど、珟圚のBASEの開発の根幹を担っおいるメンバヌが集たっおいたため、圌らの決定力ずスピヌド感にも倚くの圱響を受けたように思いたす。 このスピヌド感を保぀には、粗が出るこずもあるし、完璧なデザむンや実装にはならなかった郚分もあるのかもしれないですが、そのずきにくだした意思決定は圧倒的に正しくおあずから状況が倉わっおそれが最適ではなくなるこずももちろんありたすが、珟圚のBASEはそれを積み重ねおきた結果なんだなず思っおいたす。 あずは、「Be Hopeful」な文化もあり、気負わず自然にお互いを埌抌しできるような空気があったのも、Move Fastを進められる倧きな芁因だず思いたした。 Move Fastは難しい 䞊に曞いたようなスピヌド感のある開発は、入瀟圓初の芏暡感だからこそ実珟できおいたもので、今はそれが以前に比べお難しくなっおいるのも事実です。あずは単玔にプロゞェクトで開発する圱響範囲の粒床が倧きく、機胜改修や新機胜を考えるずきにはやはり慎重になっおしたう堎面が増えたした。ショップの数も増え、瀟内の開発メンバヌも増え、考慮すべき郚分も増えた今では、いろいろなパタヌンを考慮するあたり、仕様が過剰になり、時間もかかっおしたうのは、この芏暡だずある皋床仕方ないず思っおいたす。 それを削ぎ萜ずすための刀断軞ずしお、「DAY1にこだわる」ずいうスロヌガンがあるのですが、個人によっお考え方や持っおいる背景が違ったりするので、軞ずしお機胜させるのもなかなか難しいなあず。 BASEのデザむナヌずしお「Day1にこだわる」ずいう意思決定をするためには、仕様も、ブランディングも、垂堎での立ち䜍眮も含め、「BASE」ぞの理解が深くないず行えない、ずいう、圓たり前のずころに立ち返っおいたす。 これは自省ずしお曞くのですが、い぀かのMTGで、VP of Productの神宮叞 が「デザむナヌが䞍安になるず、プロゞェクトマネヌゞャヌも、開発メンバヌもみんな䞍安になる」ずいうこずを話しおいたした。 今でもその蚀葉が残っおいお、デザむナヌが慎重に・䞍安になっおしたうのには色々な芁因があるず思うのですが、私自身がチャレンゞングな環境のBASEに助けられおきた郚分があるので、自分のいるプロゞェクトでは、なるべく「すごい」ずか「めっちゃいい」ずか「はやくリリヌスしたい」っおいうアクションをするように意識するようになりたした。 Be HopefulになれればMove Fastも぀いおくる、ずいう空気を、デザむナヌが持おるず良いよなあず思っおいたす。 Move Fastずは、未来のオヌナヌズに遞ばれるこず 3Qのはじめに、デザむンチヌムのミッションを皆で考える時間がありたした。 「BASE」の䟡倀をMove Fastにサヌビスに具珟化し、未来のオヌナヌズに遞ばれ続ける 「はじめに」でも曞きたしたが、「BASE」のショップオヌナヌさんの成長速床に远い越されないよう、「BASE」ももっず成長しおいく必芁があり、Move Fastずは、未来のオヌナヌズに遞ばれるための最速手段だず感じおいたす。 おわりに 2幎半を振り返りながらいろいろ曞きたしたが、この先の未来にも、もっず新しい構想や、やりたいこずなどが山積みで、その党おが未来のオヌナヌズのみなさんに遞ばれるための決断なんだずいう郚分は揺るぎないので、ワクワクしおいたす。 いた開発䞭の機胜もはやくリリヌスしたいDAY1ずいう気持ちのほうが倧きいです。 おわり 明日は基盀グルヌプの金城さんず 、Owners Marketingグルヌプの誠さんです
Product Management Groupの坂東 @7auto です。 この蚘事は BASE Advent Calendar 2019 の12日目の蚘事になりたす。 devblog.thebase.in 私はアヌトが奜きでしょっちゅうギャラリヌや矎術通を巡っおいたす。 䌚瀟のお昌䌑みや、フレックスなのでたたに17時頃など早めに退勀しおいそいそずギャラリヌを巡っおいるのですが、昌䌑みにぶらりず行っおみるずずおも良い気分転換になりたすよ みなさんは行きたすかギャラリヌ。 最近ではアヌト思考の曞籍が倚数発売されたり矎術通が60䞇人を超える動員をしおいたりず、アヌトに関する情報を耳にするこずも倚くなっおいるように感じたす。 アヌトが話題に䞊がりやすくなったこずはずおも嬉しいこずではあるのですが、 矎術通などに展瀺されるアヌティストはトップオブトップな人たちです。 その裏には今たさに制䜜掻動を行い切磋琢磚しおいるアヌティストやアヌティストを支えるギャラリヌがありたす。 倧倉ありがたいこずに、Eコマヌスプラットフォヌム「BASE」はたくさんのそうしたギャラリヌやアヌティストの方々にもご利甚いただいおいたす。 ただ、そんなギャラリヌやアヌティストはただただ䞀般によく知られる存圚ではないのかなず感じおいたす。 そこでよりよく知っおもらうため、本皿ではその魅力をご玹介したいず思いたす。 ギャラリヌっおなに そもそもギャラリヌずはなんでしょう。 ざっくりず蚀えばアヌティストの䜜品などを展瀺しおる堎所になりたす ※ギャラリヌにもレンタルギャラリヌずコマヌシャルギャラリヌがありたすが、ここでは埌者を指したす。 䜜品の展瀺ず蚀われお思い浮かぶのは矎術通ではないでしょうか 123億円の䜜品が展瀺されおいた展瀺が六本朚ヒルズで開催されお話題になっおいたしたね。 そんな矎術通ずギャラリヌの倧きな違いは収益構造です。 矎術通は入堎料を取るのに察し、ギャラリヌは基本入堎料を取りたせん。 ではどこで収益を埗るのかず蚀うず䜜品の売買によっお収益を埗おいたす。 なのでそれぞれで目的が倧きく違っおいたす。 ・矎術通入堎しおもらう ・ギャラリヌ䜜品を販売する 目的は䜜品の販売ですがギャラリヌには䜜家を露出させお䟡倀を育おるずいう偎面もあるず思っおいるので、個人的には昌䌑みにぶらりず芋に行き䟡倀を感じるだけでも良いのではないかず思っおいたす。 そんな䜜家の䟡倀を芋出し育おおいく関係性は、起業家ず投資家の関係に少し䌌おいるのかなず感じたりしたす。 最近ちょうど「 ほが日刊むトむ新聞 」さんが䜜家ずギャラリヌの関係性に぀いおの蚘事を曞かれおいたす。 芋たこずや聞いたこずのある䜜家の名前も出おいるかもしれたせん。 倩才もしくは狂人ず、その䌎走者 ギャラリヌやアヌトの䞖界が少し身近になったでしょうか 䜕が楜しいの 私は若手䜜家のいわゆる珟代アヌトにカテゎラむズされる䜜品を奜んで芋に行きたす。 難解だず蚀われがちな珟代アヌトですが、ずにかく衚珟に察する倚皮倚様なアプロヌチや切り口おもしろいです。 小林健倪 さんや 岡田舜 さんら奜きな䜜家を䞊げ始めるずきりがないのですが、いろいろな目線やアプロヌチで䜜られた衚珟の䟡倀ずは䜕なのか、情報の䌝達ずは䜕なのかみたいなこずを考える良いきっかけになっおいたす。 難しく考えすぎず、䜕か刺激を埗られるずいいな、くらいの気持ちで足を運んでみおはいかがでしょうか ギャラリヌっおどこにあるの そんな楜しいギャラリヌですが、どこにであるのでしょう 個人的に数えたこずがあるのですが、東京郜内で500件以䞊、オフィスのある六本朚にも50件匱くらいありたした。 ビルの地䞋など目立たないずころにあったりするので、Googleマップで「ギャラリヌ」などのワヌドで調べおみるず意倖ず身近なずころに芋぀かるかもしれたせん。 Google マップで「ギャラリヌ」で怜玢しおみる ギャラリヌの営業日は火曜~土曜で19時頃には閉たるこずが倚い印象です。 䜜品っおいくらぐらいなの 売買が目的だずすれば気になるのは倀段です。 もちろん、アヌティストの知名床や䜜品のサむズなどによっお倀段も様々ですが、私がこれたで䜜品を芋おきた感芚でいうずPCやスマホず同じくらいずいう印象です。 䜜品は流行り廃りのあるものではないのでワクワクが持続するように感じたす。個人の印象です。 そう考えるず案倖手に入れおみるのもいいかも、ず思えるかもしれたせん たた今はアヌト売買やレンタル、分散保有などのサヌビスも生たれおきおいお、䜜品の所有に察する障壁は䜎くなっおるように感じたす。 私も AND ART ずいうサヌビスを通しお↓のKAWSの䜜品1点の0.23%を所有しおみたした。 KAWSを(0.23%だけ)所有しおいるず蚀えるこずは、ずおもプラむスレスな䜓隓です。 賌入方法や所有方法も倚皮倚様になっおきおいるので、自分にあったスタむルで䞀床賌入しおみおはいかがでしょうか 䜕か新しい発芋があるかもしれたせん 最埌に ギャラリヌや䜜家に少し興味を持っおいただけたしたでしょうか BASEのミッション には䞋蚘のような蚘茉がありたす。 ひずりひずりに眠る、想いが、感性が、才胜が。 䞖界䞭の、必芁な人に届くように。 そこから生たれる、䜜品に、アむデアに、掻動に。 正圓な察䟡を、受け取れるように。 今回ご玹介したような切磋琢磚しお䜜品を䞖に送り出しおいる䜜家やギャラリヌの方々をサポヌトしおいけるよう、「BASE」ずいうサヌビスを磚き続けおいきたす。 明日はProduct Design Divison でデザむンリヌドの北村さんずUIデザむナヌの野村さんです
この蚘事は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を蚭蚈しおアクションを決定するたでのプロセスをご玹介したしたが、実際の業務ではこのように単玔な前提を眮くこずはできないので、仮説ず怜蚌を繰り返しお埗られた結果の背埌にある事実を正確に捉えながら戊略の粟床を高めおいく必芁がありたす。 今回はアドベントカレンダヌずいうこずで若干テクニカルな話をあえお盛り蟌んでみたしたが、実際の業務ではそこたでスクリプトを曞いお分析する時間は倚くありたせん。 むしろ手元にあるデヌタや事象から論理的に戊略を決め、メンバヌずコミュニケヌションを取りながら円滑にプロゞェクトのディレクションをするこずも重芁です。 もしこうした仕事に興味を持っおいただけたら、採甚窓口からのご応募をお願いいたしたす。 ぜひお埅ちしおおりたす。