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

TECH PLAY

BASE株匏䌚瀟

BASE株匏䌚瀟 の技術ブログ

å…š616ä»¶

Service Dev所属、サヌバサむド゚ンゞニアの宮村です。 珟圚私は、Service Devのチヌムに所属し、ネットショップ䜜成サヌビス「BASE」及びショッピングアプリ「BASE」の機胜開発を担圓しおいたす。 BASEでは最近、機胜開発の際に蚭蚈レビュヌを行うようにしおいたす。その取り組みに぀いお玹介したいず思いたす。 開発チヌムに぀いお BASEの開発チヌムは、メンバヌが増えるに埓っお専門化する圢でチヌムを分割しおきたした。 珟圚、サヌビスの機胜開発を䞻に担圓しおいるService Dev Sectionは、バック゚ンドが担圓領域を分担しお2Group、フロント゚ンド、ネむティブアプリを担圓するそれぞれ1Groupの蚈4぀のGroupから成り、Service Devの゚ンゞニアはいずれかのチヌムに所属する圢ずなっおいたす。 組織図に぀いお興味を持たれた方は、こちらの 䌚瀟説明資料 をご確認いただければず思いたす。 機胜開発の際はそれらの職胜別のGroupを暪断する圢でプロゞェクトチヌムを線成し、プロゞェクトチヌムが䞻䜓ずなっお機胜開発を行っおいきたす。チヌムのメンバヌ構成はプロゞェクトの特性や芏暡により様々ですが、倚くの堎合、同じグルヌプから1〜2名がプロゞェクトにアサむンされるこずずなりたす。 蚭蚈レビュヌを始めたわけ 機胜の増加、開発メンバヌの増加、䞊行するプロゞェクトの増加により、新しく課題が芋えおきたした。゚ンゞニアに察しお倚くのプロゞェクトが立ち䞊がったこずで顕著に珟れたものもありたした。 サヌバサむドの領域を専門にする゚ンゞニアが自分以倖にプロゞェクト内にはいない・少ない状態になるため、機胜の品質が個人に䟝存しがちな状況になっおしたっおいた。早い段階で倚くの目で芋るこずで、機胜の品質を担保したい。 チヌムのコヌドレビュヌのプロセスは取り入れおいたが、コヌドレビュヌの段階で指摘を受けるず手戻りが倧きいので、早い段階で既存のシステムに詳しいチヌムメンバヌによるレビュヌを取り入れ、手戻りを少なくしたい。 コヌドレビュヌ時に初めおコヌドを枡されおも仕様把握が難しいので、チヌムメンバヌ偎が事前に新機胜を把握しおおきたい。 以前からコヌドレビュヌは必須ずしおおり、チヌムで品質を担保するこずを重芖しおきおいたしたが、蚭蚈段階でレビュヌを行うこずで改善できるこずもあるのではないかず思い、蚭蚈レビュヌを始めおみるこずにしたした。 蚭蚈レビュヌの実践 い぀やるのか 蚭蚈レビュヌのタむミングは、プロゞェクトに゚ンゞニアが参加し、テヌブル蚭蚈、画面蚭蚈がある皋床できた頃、実装に入る前を目安ずしたした。これたでの実瞟では、開発チヌムのキックオフから数日〜数週間の間に行われおいたす。 どうやるのか プロゞェクトの担圓゚ンゞニアが、レビュヌ甚のドキュメントを䜜成したす。それをもずに、チヌムメンバヌに説明しフィヌドバックを受ける圢でレビュヌ䌚を開催したす。察面もしくはオンラむンミヌティングで、同期的に行うこずずしおおり、所芁時間は機胜によりたすが、30分から2時間皋床ずしおいたす。長くなる堎合は、耇数回に分けお実斜するこずもありたす。 ドキュメントずしお必ず甚意するようにしおいるのは、以䞋の内容です。 デヌタベヌス蚭蚈 䞀床動き出すず倉曎のコストが倧きいので、ER図を必ず甚意しお確認するようにしおいたす。 アプリケヌションのスケヌラビリティ クリティカルな凊理ぞの圱響 決枈などお金に関わる箇所を䞭心に、䞍具合が発生するず圱響が倧きい郚分は特に泚芖したす。 その他、画面蚭蚈やシヌケンス図など、機胜を理解するための資料を必芁に応じお甚意したす。 蚭蚈レビュヌを運甚しおみお 最初にやっおみおうたくいかなかったこず 仕様理解のために画面むメヌゞから説明を進めおいたずころ、機胜の仕様やUIぞのフィヌドバックが盛り䞊がっおしたい、時間がかかりすぎおしたいたした。サヌビスに察する思いが各々にあるこずはずおも良いず思いたすが、効率の面からはバランスを取る必芁がありたす。 それらの郚分は、プロゞェクトチヌムでディレクタヌやデザむナヌも含めお怜蚎されたものであり、䞀番その機胜を考えおいるのはプロゞェクトチヌムのメンバヌずいうこずは間違いないでしょう。これらの点に぀いおはプロゞェクトチヌムでの決定を尊重し、蚭蚈レビュヌでは実珟方法にフォヌカスしおレビュヌするようにしたした。 機胜の仕様やUIに぀いおは明らかに問題があるず考えられる堎合のみフィヌドバックするこずにしお、再床仕切り盎すこずにしたした。 良い点 進め方は未だ改善を繰り返しおいたすが、総合するずポゞティブな面が倚いず感じおいたす。いく぀かを箇条曞きで挙げおみたす。 ドキュメントを起こしお他の人のレビュヌを受けるずいうプロセス自䜓で、蚭蚈が敎理される効果がある 担圓゚ンゞニアが責任を持っお蚭蚈するので倧筋では問題ないこずが倚いが、やはりいく぀かの有効な指摘がある レビュアが珟圚担圓しおいるリリヌス前の機胜ずの敎合などを怜蚎できるずいったメリットもある レビュヌを受ける偎のメリットずしお、ただ実装を始める前なので指摘を受け入れお修正しやすい コヌドレビュヌの時点では、圓然ですがコヌドはある皋床曞き終わっおいるので、その時点でこの倉曎は ずいう躊躇も生たれたすが、それがないのは個人的にずおも倧きいず感じおいたす。 もちろん、このレビュヌは開発を始める前のプロゞェクトチヌムを含めお新機胜に察する理解が深くはないタむミングで行われるので、すべおがここでレビュヌを受けたずおりには進みたせんし、すべおの問題を軌道修正できるわけでもありたせん。ただ、レビュヌを行ったほうが、開発起因での手戻りや課題が早い時点で発生するようになったずいうような気はしたす。 課題や泚意点 準備段階に関しおは、レビュヌのフォヌマットが各人に任せるのではなく統䞀したほうがレビュヌする偎がやりやすいのではないかずいうこずで怜蚎しおいたす。ただ、プロゞェクトの特性などもあるので型を決めお守るずいうのが最善ではない気がしおおり、詊行錯誀しおいるずころです。 たた、レビュヌたでにどのくらい詰めるか、ずいう点も個人の感芚に頌るずころが倚いかもしれたせん。レビュヌを受けおも倧きな倉曎は必芁ないだろうずいう皋床には詰める必芁がありたすが、詰め切るのに時間をかけすぎおも機胜の提䟛に時間がかかっおしたいたす。 やりたいこずは Move Fast にプロダクトを改善するこずなので、それを念頭に眮いおよりプロセスの方も良い圢に改善しおいきたいず思いたす。 蚭蚈レビュヌ埌のプロセス 蚭蚈が承認されるず、それをもずに芋積もりを行い、各チヌムの開発に進んでいきたす。この時点でプロゞェクトのスケゞュヌル、人員蚈画の芋盎しを行うようにしおいたす。ずりあえず始めおみお、遅れそうになったずころ調敎を行うのではなく、この段階で盞談できるようになったこずも、プロゞェクト管理の芳点からはポゞティブな面ず蚀えるかもしれたせん。もちろん、開発開始埌でも、必芁があれば柔軟に察応しおいきたす。 たずめ メンバヌの増加、プロゞェクトの増加ずいう状況の䞭、サヌビス品質ず開発スピヌドを維持するために、蚭蚈レビュヌを取り入れたした。 最初は所属Group内で詊隓的に行っおいたしたが、最近では別チヌムも含め、ほがすべおのPJを察象にレビュヌを行っおいたす。たた、チヌム内でのレビュヌ埌にマネヌゞャやCTOずいった意思決定者も亀えたレビュヌを実斜するようにもなり、少しず぀圹割を広げお運甚されおいたす。 より良い開発が行えるよう、私たちも日々詊行錯誀しながらやっおいるのですが、同じような課題を抱える方の取り組みの第䞀歩ずしお、少しでも参考になれば幞いです。
BASE株匏䌚瀟 Product Dev Division 基盀グルヌプ Engineerの田䞭 ( @tenkoma )です。 ある出来事がきっかけで2芁玠認蚌にYubiKeyを賌入しお䜿っおみたので玹介したす。 フィッシングに匕っかからない自信を無くした話 1ヶ月半前の土曜倕方に、倖出先で以䞋のツむヌトを芋たした。 GitHub Japanさんからフィッシングらしきメヌルが来おたのでみなさんもお気を付けください pic.twitter.com/CsmkObwUS9 — Eiji Kitamura / えヌじ (@agektmr) June 13, 2020 ちょうど数時間前に同じメヌル文面を芋たような気がしたのず、同じく数時間前にPCでGitHub.comにログむンしおいたので、 「これはマズいかもしれない、匕っかかったか」ず焊りたした。 その堎ではパスワヌド倉曎だけしたした。急いで垰宅しお、状況を調べたした。その結果— GitHub たたはGitHub Japanを隙るメヌルは芋圓たらなかった ブラりザの履歎に停サむトにアクセスした履歎は無かった GitHub.com のSecurity logに自分の郚屋ずモバむル回線以倖のIPからログむンされたり操䜜されたログは無かった ので、フィッシングにひっかかったずいうのがほが思い違いであるこずがわかりたした。(䞀安心) もしかするず、䞊蚘ツむヌト以倖の泚意ツむヌトを芋たこずを、メヌルで受信したず思い蟌んだのかもしれたせん。 この経隓をしたこずで、「䞊蚘のようなメヌルを受信したら、冷静にフィッシングかもず疑うこず無く、停サむトにワンタむムパスワヌドごず枡しおしたうかもしれない、入力情報を䞭継されたら、ログむンされおしたうかもしれない」ず思いたした。 YubiKeyを賌入しお、普段の2段階認蚌にはそれを䜿う いたたで、GitHubログむンするずきは、ID/パスワヌド入力には1Passwordを、 2段階認蚌(2FA)では、Authyを䜿った時間同期匏のワンタむムパスワヌド(TOTP)を入力しおいたした。 しかし䞡方ずも人間が入力する情報なので、フィッシングで停サむトにアクセスした堎合に、䞡方を入力しおしたうこずができたす。 (1Password ならURLも保存しおおけば、ブラりザ拡匵の補完候補で絞り蟌たれるので、停サむトにアクセスしたずき、「候補に衚瀺されない」こずで気づける可胜性はありたす) YubiKeyなどのキヌデバむスを䜿うず、2FAではサヌバヌ偎のホスト名なども含め認蚌に必芁なデヌタを生成したす。 よっお本物のGitHubログむンに぀かう認蚌デヌタを、人間のミスで枡しおしたうこずはありたせん。 僕が賌入したのは、YubiKey 5Ciです。 Amazon | Yubico - YubiKey 5Ci - USB-C / Lightning 認蚌セキュリティキヌ | Yubico | USBメモリ・フラッシュドラむブ 通販 ワンタむムパスワヌドトヌクンYubiKey |株゜フト技研 MacBook Pro, iPhone X, Pixel 4で䜿いたかったので、USB Type-C, Lightning端子が付いおいる5Ciにしたした。 GitHub.com の2FAにYubiKeyを蚭定するず、ログむンはどうなる 䜿い始める前は、「TOTPより面倒くさくなるのでは、端末毎に蚭定が必芁ずかだず぀らいな」ず思っおいたしたが、むしろ簡単になりたした。 蚭定は、ペヌゞにアクセス埌、YubiKeyをさしお金属郚分を觊るだけなので省略したす。 (日付をみるず、GitHubフィッシングが話題になっおすぐYubiKeyを買っお蚭定したこずが分かりたす) GitHub.com に蚭定したデバむスキヌ䞀芧 ログむンで、ID/パスワヌドを入力しお送信するず、次のように衚瀺されたす。 ID/パスワヌド送信埌は、たずセキュリティキヌを䜿った2芁玠認蚌をうながされる キヌデバむスを蚭定するず優先しおそれで認蚌するように促されるんですね。 「Use security key」をクリックしお、YubiKeyを差し蟌み金属郚分を觊るず、ワンタむムパスワヌドが送信され、ログむンが完了したす。 僕の堎合、Authyを䜿ったずきより簡単になりたした。 Authyの堎合、 Authyを起動し GitHubの゚ントリを怜玢しお衚瀺し(蚭定が15個くらいある) クリップボヌドにコピヌするか6桁の数字を芚え 貌り付けるか入力しお送信 ずいう感じなので、怜玢しなくおよいので楜です。 たた、MacのChromeで有効にするず、他のデバむスでの蚭定は䞍芁です。 FirefoxやSafariでも䜿えたすし、Pixel 4(Chrome)やiPhone X(Mobile Safari)でもYubiKeyでの2FAが出来たした。 他にどんなサヌビスで䜿える YubiKeyが䜿えるか詊したずころ、以䞋のサヌビスでは䜿えるこずが分かりたした G Suite GitLab Twitter Facebook Sentry AWSマネゞメントコン゜ヌル(rootアカりント、IAMずもに) AWS 以倖ではTOTPずキヌデバむスの䞡方を同時に蚭定できるので、YubiKeyを玛倱したずきのリカバリヌずしおTOTPも有効にしおいたす。 個人でAWSのrootアカりントを持っおいるのですが(党然䜿えおいたせんが )、珟時点ではTOTPかキヌデバむスの片方しか蚭定出来ず、YubiKeyを玛倱したずきのリカバリができないため、rootアカりントには蚭定しおいたせん。 ただ買っおないけど、TOTPのかわりに䜿える方法っおある YubiKeyを䜿い始めおから知ったのですが、最近のMacではTouch IDが䜿えたす。 2段階認蚌が、Touch IDを指で抌さえるだけになるので、オススメです。 たたPixel 4の顔認蚌もキヌデバむスずしお䜿えたした。 iPhone XのFace IDは䜿えたせんでした。 たずめ YubiKeyを䜿った2段階認蚌は、お金はかかるけど、フィッシングでの䞍正ログむン察策になりたす ログむン操䜜も、時間同期匏のワンタむムパスワヌド(TOTP)より簡単になりたした YubiKey玛倱時のリカバリがかなり面倒なので、AWSマネゞメントコン゜ヌルのrootアカりントは耇数の2FAを蚭定出来るようになっお欲しい YubiKey持っおない堎合でも、MacのTouch IDやAndroidの顔認蚌が䜿える可胜性はありたす YubiKey、小さいので、財垃ずかに入れるずすぐに無くしおしたいそうです。 いたのずころ、IDカヌドホルダヌに付けおいるのですが、リモヌトワヌクだず垞時付けおないので、別のネックレスのようなものか、リストバンドに付けられるずいいかもしれない、ず思っおいたす。よい案があれば @tenkoma たで教えおください。
こんにちは。BASE BANK株匏䌚瀟 Dev Division にお、 Software Developer をしおいる東口 @hgsgtk です。 先日開催された July Tech Festa 2020 にお、「 少人数でのアゞャむル開発ぞの取り組み実䟋 䞀歩目の螏みだし方 」ずいう衚題で、発衚させおいただきたした。 https://speakerdeck.com/hgsgtk/a-first-step-to-agile-movement 今回はその発衚内容に぀いお、その思考過皋で出䌚った曞籍などを詳説ずしお加え぀぀、ブログずしお曞き䞋しおいきたす。 発衚資料 今回の発衚資料は、Speakerdeck に公開しおいたす。 発衚内容を通じお解決したいこずは、 率盎に曞くず、 数ヶ月前の自分が教えおほしかったこず です。数ヶ月前の自分は次のような状況でした。 挠然ずチヌム開発に課題を持っおいおいる その課題に察しお、アゞャむル関連の斜策が、有効な気がしおいるが、䞀歩螏み出せおいない この資料は、そんな状況を目前ずしおいる方々のなにかの圹に立おば、ず思いたずめたものです。 たた、アゞャむルず䞀口に蚀っおも様々な芁玠が絡んできたすが、圓該資料は、「チヌム環境」に焊点を圓おたものです。「 An Agile Way: アゞャむルの「ラむトりィング」ず「レフトりィング」 」の敎理では、 アゞャむルのレフトりィング 協働でゎヌルに向かう「チヌム環境」の範囲をスコヌプずしおいたす。 たずは珟状を芋る その状況においお、私が出䌚っお解決の糞口ずなったのは、「 みんなでアゞャむル ―― 倉化に察応できる顧客䞭心組織の぀くりかた 」ずいう曞籍です。 www.oreilly.co.jp その䞭で、次のようなフレヌズがありたした。 成功するアゞャむルの適甚は、垞に厳しく正盎に珟状を芋るこずから始たる。 䜕がうたくいっおいお、䜕がうたくいっおいないのか。アゞャむルを今の仕事 のやり方をちょっず倉えるだけのこずず思っおいるなら、アゞャむルから埗られ るメリットもちょっずだけになるだろう。今のやり方を遞んだ元になっおいる珟 2ç«  自分たちの北極星を芋぀ける そしお、章の名前「2ç«  自分たちの北極星を芋぀ける」にある通り、自分たちが倧事にしたい・目指したい目暙を、蚀語化するこずから始めおいたす。 そこからアゞャむルずの芪和性を考える 自分たちの珟状の課題・目指す方向性を蚀語化出来るず、アゞャむル開発の考え方・取り組み方法ずの察応を考えるこずができたす。 Manifesto for Agile Software Development に瀺されおいるアゞャむル開発宣蚀や、「 アゞャむルな芋積りず蚈画づくり 䟡倀ある゜フトりェアを育おる抂念ず技法 」にお説明のあるような基本的な仕事の進め方、から、その実践の有無を考察したした。 アゞャむルプラクティスを挞進的に導入する すべおのプラクティスを䞀気に導入するこずは、手䞀杯になりたすし、䞀気に生たれた新しい手段・HOWを理解しようずするこずに、関心が持っおいかれる重力が生たれるでしょう。そのため、優先床にそっお、少しず぀プラクティスを拡倧しおいくような倉遷を、結果的にたどっおいたす。 具䜓的には、 1. チヌム自身の怜査ず適応 → 2. プロダクトに察する怜査ず適応 ずいうフェヌズをたどりたした。 ここで取り組み始めたのは、たずチヌム自身の怜査ず適応のリズムを䜜るこずです。 1週間の スプリントむテレヌション を蚭定、最初に蚈画 スプリント蚈画 し、スプリント終了埌に、自分たちチヌムの取り組みに぀いお振り返る レトロスペクティブ を行う 芋積もりに、盞察的な倧きさによっお図る ストヌリヌポむント を利甚 珟圚の状況を可芖化するために カンバン管理 を行う カンバン管理は、か぀おから Asana を䜿っおいたのですが、うたく管理できおいたせんでした。今回の取り組みでは、 アゞャむルの境界を開発チヌム内ずした ので、開発䜜業ずの芪和性を考え、 GitHub Project を利甚したした。 それ以倖には、日々のコミュニケヌションの機䌚であるデむリヌスタンディングは、以前から行っおたした。 そしお、その埌、チヌムが䜜り出す成果・プロダクトの䜜り方に察しおプラクティスを適甚しおいきたした。 プロダクトぞのフィヌドバックルヌプがより頻繁に回るように、スプリントごずの成果物に察する振り返り スプリントレビュヌ を行う フィヌドバックをもらうために、リリヌス蚈画を行う際の前提の考え方を倉える バヌティカルスラむス でのデリバリヌぞ 䞍確実性を段階的に䜎枛させおいく意図 この倉遷になった背景には、䞻に぀の理由を考えおいたした。 1぀目は、たずは具䜓的なプラクティスではなく、目暙に目を向け、その方法の WHY に着目し、自身の取り組み・振る舞いに察する怜査ず適応のリズムを䜜り出すのを優先するずいう意図。 2぀目は、「 アゞャむルな芋積りず蚈画づくり 䟡倀ある゜フトりェアを育おる抂念ず技法 」にお玹介されおいる、開発プロゞェクトの䞍確実性の考え方「 Alexander Lauferの䞍確実性理論 」です。この抂念では、プロダクトにおける䞍確実性を次の぀に敎理しおいたす。 目暙の䞍確実性 (end uncertainty) 開発PJに察応させるず、䜕を開発するのか、スコヌプ・プロダクトの性質 方法の䞍確実性 (means uncertainty) 開発PJに察応させるず、どうやっお開発するのか、技術・スキル・連携方法 すべおのこずを䞀気に片付けようずするず混乱が生たれがちです。そのため、たずは、チヌムの連携方法や動き方、に぀いおの方法の䞍確実性を䜎枛させ、その埌「どういうプロダクトを䜜るのか」ずいう目暙の䞍確実性を䜎枛させるような取り組みを続ける、フェヌズ分けずなりたした。 バヌティカルスラむスでのデリバリヌを前提ずする 「プロダクトに察する怜査ず適応」を考えるず、その具䜓的な斜策は、プロダクト成果物に察するレビュヌを行うスプリントレビュヌが、䞀぀考えられたす。これは、そもそも、むテレヌションで生たれる成果物スクラムの蚀葉では「むンクリメント」でしょうかに察しお、フィヌドバックが埗られるような蚈画をしおいるこずが前提にありたす。その前提においお重芁なこずが、 バヌティカルスラむスでのデリバリヌ でしょう。 これは、「 More Effective Agile “゜フトりェアリヌダヌ”になるための28の道暙 」ずいう曞籍では、より効果的にアゞャむルの䟡倀を匕き出すための䞀぀の基本原則ずしおも玹介されおいたす。 短いスプリントがうたくいくには、動く機胜を少しず぀頻繁にデリバリヌする胜力をチヌムが逊わなければならない。こうした掻動をサポヌトするために甚いられる蚭蚈アプロヌチはバヌティカルスラむスず呌ばれる。バヌティカルスラむスは、増分的に機胜たたは䟡倀をデリバリヌするために各アヌキテクチャ局で倉曎を行う、ずいうものである。 9.4 基本原則バヌティカルスラむスでのデリバリヌ ぀たり、「XxxAPIを実装したす」・「テヌブルの蚭蚈をしたす」ずいったレむダごずの 䜜業ではなく お、「ナヌザヌずしお自身のメヌルアドレスを倉曎できる」ずいったように、 䞀぀のフルスタックの機胜 を指したす。 実際に、プロダクトに察する怜査ず適応のルヌプを回そうずするず、この考え方が必芁になっおくるため、リリヌス蚈画自䜓もこの考え方を前提にリプランニングをしたした。 取り組みを始めおから 実際にこのような取り組みに螏み切ったのは、COVID-19の流行がはじたった今幎の春からの話です。しかし、1weekのスプリントを通しお、チヌム開発に぀いおのフィヌドバックルヌプが、以前よりも早く回っおいるこずを感じたす。 具䜓的に目に芋えるような差で蚀うず、JTF2020から2月匱前の2020幎6月4日に、コネヒトマルシェずいうむベントで「 小さなチヌムが始めたアゞャむル開発 」ずいう発衚をしたした。目指す方向性は倉わっおいたせんが、その䞭のチヌムの取り組み・実装方法は改善され、倉容を遂げおいたす。 チヌムやその呚りを取り巻く状況は日々倉わっおいきたすが、その䞍確実性の高い倖郚芁因に察しおも、スプリント単䜍での適応の議論ができおいるように感じおいたす。 さいごにJuly Tech Festa 2020 ぞの謝蟞 July Tech Festa 2020 ずは、2020幎7月25日土に開催された、カンファレンスです。今回、600名匷の参加申蟌みがあったずのこずした。 techfesta.connpass.com ITに関わる党おの人の知的奜奇心を満たすお祭りを䜜りたい。 その思いからJuly Tech Festaは生たれたした。 興味のある技術に觊れ、普段䌚えない人の話を聞き、 参加した゚ンゞニアがスキルやキャリアに぀いお考えるきっかけになれば。 そんな堎を䜜ろうず今幎も July Tech Festa 2020 を開催したす。 個人的な話で恐瞮ですが、自分が瀟䌚人゚ンゞニアになっおから初めおカンファレンス参加したのが、July Tech Festa でした。たしか July Tech Festa 2016 だったず思いたす。その際、「倖の䞖界は想像以䞊に先ぞ進んでいる...!」ず衝撃を受け、今回のカンファレンステヌマであるように「 Extend Your Engineering Life! 」したこずを、匷い蚘憶ずしお思っおいたす。今回、そんなJuly Tech Festaのスピヌカヌずしおプロポヌザルを採択いただいたのは、感慚深い想いでした。 今回、初のオンラむンでのカンファレンスのなか、運営スタッフの方々には、この堎を借りお感謝申し䞊げたす。ありがずうございたした。
CTOの川口です。 今回はアプリケヌションの゚ラヌトラッキングツヌルに぀いおです。 これたでの経緯 BASEでは䞻にPHPアプリケヌションの゚ラヌトラッキングにRaygunを利甚しおいたした。 https://raygun.com/ これを採甚したのは3幎以䞊前で、圓時BASEではPHP5.3を利甚しおいたために利甚できるツヌルは限られおおりRaygunはPHP5.3でも動いたため採甚されたようです。 今では7.3を利甚しおいたのでこの条件は気にする必芁はありたせんが、積極的に倉曎する理由もなく䜿っおいたした。 圓初はPHPの゚ラヌトラッキングにのみ利甚しおいたしたが最近はfrontendの゚ラヌトラッキングにも利甚しおいたす。 ここが蟛いよRaygun たず料金が結構高めです。 APMやRealUserMonitoringなどの利甚はしおおらず゚ラヌトラッキングのみ䜿っおいたす。 https://raygun.com/platform/crash-reporting APMはPHPに察応しおいたせんし元々Newrelicを利甚しおいたす。 small business プランを利甚しおおり、$249/month です。 https://raygun.com/platform/crash-reporting#pricing これは非垞に高額ずいうほどでもありたせん。 ですが、曎にこの䞊のプランになるず$899ず䞀気に倀段があがりたす。これは䞀気に高額になりたす。 これのしきい倀が゚ラヌむベントの件数になっおおり、月間の件数を超えおしたうずプランを倉曎する必芁がありたす。 25䞇゚ラヌを超えお100䞇゚ラヌたで受け付けおくれるのはありがたいですが、結果的には30䞇むベント皋床で枈むであろう事が想定されコストパフォヌマンスが悪くなりたす。 さらにRaygunはあたりPHPのサポヌトに積極的でなく、UTF-8以倖を含むず問題が出たりしたす。 https://github.com/MindscapeHQ/raygun4php/pull/69 https://github.com/MindscapeHQ/raygun4php/pull/69#issuecomment-514351759 https://github.com/MindscapeHQ/raygun4php/issues/94 PRに察する反応も鈍いため匊瀟ではforkしおパッチを圓おお運甚しおいたした。 WEB UIもあたり良いものでなく党䜓的に遅く、日付範囲でのサマリなどがし蟛いず感じおいたした。 GitHubぞのissue連携も叀いAPIなどを利甚しおいるようで、Raygunぞ枡す暩限があたりに匷くこのあたりも問題です。 別の゚ラヌトラッキングツヌルに倉曎も話題には登っおいたしたが、ずるずるず先延ばしおいたした。 ゚ラヌ量増加に䟝るトラッキングの停止 珟圚のプランでは250,000 error events/monthを凊理するこずが出来たす。 基本的にこの数を超えるこずはないのですが、ミドルりェアの倉曎などで想定倖の゚ラヌが出たりするずアクセス量が倚いサヌビスの堎合゚ラヌむベントが䞀時的に倧量に発生したす。 ある時、これが耇数回起きおしたいlimitを超えおしたいたした。 完党にトラッキングが止たったわけではありたせんが、゚ラヌトラッキングツヌルずしお垞甚出来たせん。 圓然プランを䞊げれば動䜜するわけなのですが、3.5倍近い倀段を払っおたでずいう気持ちもありこのタむミングで乗換を怜蚎したした。 Raygunのようなサヌビスでは過去のデヌタはそこたで重芁床は高くありたせん。 ただ修正出来おいない゚ラヌが有る堎合別のトラッキングツヌルに乗り換えたずころで発生するこずはわかっおいるので改めお収集すればいいので問題にはなりたせん。 料金も安く、機胜的に優れおいるものに乗り換える方がメリットになるず考えたした。もちろん安いからず蚀っお機胜が十分でなければraygunでもいいですし別の高額なツヌルでも問題はありたせん。 乗り換え先 同様の゚ラヌトラッキングツヌルはいく぀かあり Bugsnag Rollbar newrelic Airbrake などがありたす。 今回は匊瀟で利甚したこずがあるメンバヌもいたので、Sentryにするこずにしたした。 倀段もRaygunより安䟡ですし、機胜も豊富そうに芋えたす。 仮に特定の月に゚ラヌが倧量に発生しおも、その量に応じお远加課金になるので今回のような事態になっおも毎月のプランたで倉える必芁がなくお安心感がありたす。 https://sentry.io/pricing/ https://docs.sentry.io/accounts/pricing/#faq 14日はトラむアルもできるので䞀時的な乗り換えに䜿っお䞍満があればRaygunに戻る事もできたす。 SDKも甚意されおいたす。匊瀟で䜿っおいるCakePHPを完党にサポヌトされおいるわけではないですがRaygunを利甚しおいるコヌドに少し修正を加えるだけで動きそう、ずいうこずで移行をはじめたした。 https://sentry.io/for/php/ 移行の実装は数時間で完了したした。 ここがすごいよSentry Sentryの゚ラヌトラッキング自䜓はraygunず別に倉わりはありたせんが、圧倒的に倚機胜である事がわかりたした。 WEB UIを芋おみるず、動䜜も速く情報量が非垞に倚くありたす。 Raygunの堎合、環境毎にアプリケヌションを登録しapi keyを差し替える必芁がありたすがSentryの堎合はenvironmentを指定するこずで䞀぀のアプリケヌションずしお登録するこずが出来たす。 特に䟿利だず感じたのぱラヌ時のスコヌプにある倉数がSentry䞊で確認できるので、どのような倉数によっお゚ラヌが起きるのかの調査が捗りたす。 䞋蚘のような事象は「Undefined index: id」ずいう゚ラヌが発生した堎合の衚瀺です。 $favorites に特定indexのみないのかそもそも空を参照しおいたか、ずいうのが刀断可胜であり、さらにitem_idも空配列ずいうこずがわかるのでなぜこのような゚ラヌが発生したかの調査にずおも有甚です。 error PHPのコヌドも䞀郚衚瀺されるので出先でちょっずした調査くらいならできそうです。 ずはいえ勝手にSentryにコヌドがアップロヌドされおいるのではずいうこずでセキュリティ的にちょっず心配になるのも事実です。 Spike Protectionずいう機胜がデフォルトでオンになっおおり、䞀時的に倧量にむベントが発生した堎合などにむベントを砎棄しおくれるようです。 DB障害などがあるず党おのアクセスで゚ラヌむベントが発生し情報の粟床は䞋がり぀぀むベント回数を消費しおしたい課金額が䞊がっおしたいがちですがこれはそれを回避しおくれそうです。 https://docs.sentry.io/accounts/quotas/?_ga=2.25032318.591036687.1594604704-646375577.1594038001#spike-protection docs.sentry.io ここが぀らいよSentry トラむアルしおいる状態なので明確な䞍満があるわけではただありたせん。 通知も现かく蚭定できるのですが、ここはちょっず慣れおいないず倧倉だなずいう印象です。 RaygunはずりあえずSlack通知くらいだったらwebhookのurlを枡せばよかったのですが、どういう条件で通知するかずいうのを登録しないずいけないので慣れるたでは戞惑いがありたした。 他には「Allow Shared Issues」ずいう機胜がありカゞュアルに゚ラヌのURLを公開出来おしたうのは危険なのでオフにしたした。 倚機胜であるがゆえに、どこを芋ればいいか迷っおしたうなずは感じおいたす。あたりにシンプルだったRaygunからの移行なため䜙蚈にそう思っおしたうのかもしれたせん。 おわりに ただトラむアル段階なので䜿いこなせおいるずいうほどではないですが、SentryはRaygunよりも優れおいるツヌルだず感じたした。 もちろん゚ラヌは通知さえできればいいずいうものではなく解消しおいき狌少幎にならないようにアプリケヌションを改善しおいくこずが重芁ですが、どのような堎合に゚ラヌが出おいるのかの調査がわかりやすく改善もしやすいです。 どのデプロむによっおどのような゚ラヌが匕き起こされたか、などを芳枬しおいきアプリケヌションの改善に圹立おおいきたいず思いたす。
フロント゚ンドチヌムの右京です。 Vue.js 3 が 八月䞊旬にリリヌス予定 ずいうこずで、BASE でもバヌゞョンアップに向けお少しづ぀アクションを始めおいたす。 Vue.js 3 では倚くの機胜が远加され開発の幅が広がりたすが、䞀方で削陀や非掚奚ずなる機胜も倚く頭を悩たされおいる方もいるのではないでしょうか、BASE もそうです。 この蚘事では ESLint ずその Vue.js 向けプラグむンの eslint-plugin-vue を利甚した、deprecated ずなる機胜ぞのアプロヌチを玹介したす。 なぜ eslint-plugin-vue か ESLint には Vue.js の SFC のためのプラグむンずしお eslint-plugin-vue が開発されおいお、BASE でもこれを利甚しおいたす。 このプラグむンには vue/no-deprecated- で始たるルヌルがいく぀かありたす。これは非掚奚になった機胜を䜿甚しおいるかどうかを怜出するためのルヌルです。 これたでは Vue.js 2.6 で非掚奚になった slot ず scope に関する以䞋のルヌルのみでした。 vue/no-deprecated-slot-attribute vue/no-deprecated-scope-attribute vue/no-deprecated-slot-scope-attribute しかし、最近リリヌスされ開発の勧められおいる v7.0.0-alpha.x で倚数のルヌルの远加が行われおいたす。 䟋えば BASE の堎合、Vue.js 3 の移行で特に課題だったのが filter の廃止です。 金額の倉換に倚くの filter を䜿甚しおいたため、範囲も広く眮き換え方法を暡玢しおいたずころでした。 eslint-plugin-vue では、これを vue/no-deprecated-filter ルヌルを適甚するこずで怜出するこずできたす。 このほかにも倚数のルヌルが珟圚進行圢で远加されおいたす。 ルヌルの䞀芧は 7.0.0-alpha.x タグの docs や、@ota-meshi さんによる日本語での解説から参照できたす。 https://github.com/vuejs/eslint-plugin-vue/tree/v7.0.0-alpha.9/docs/rules https://qiita.com/ota-meshi/items/ff0d70ef326657249727 BASE では倚数あるルヌルの䞭でも、特に効果の倧きそうな <template> に関するルヌルを䞭心に远加しおいくこずにしたした。 <script> 郚分には vue-class-component を䜿甚しおいるこずもあり、䞀旊優先するべきずころではないず刀断しおいたす。 Monorepo ず GitHub Actions を利甚した別ラむンでの継続的な改修 珟行の Vue.js 2.x での開発ももちろん行われおいるため、突然 ESLint のルヌルを倉曎するのはハヌドルが高く感じ、しばらくの間は既存のルヌルを共存させるこずにしたした。 これを実珟するため、 yarn workspace で Monorepo ずしお 7.0.0-alpha.x をむンストヌルし、普段䜿甚しおいるものずは別のルヌルを適甚できるようにしおいたす。 . ├── packages │ └── eslint-for-vue3 │ ├── node_modules │ │ └── eslint-plugin-vue // 7.0.0.alpha-x │ ├── .eslintrc.js // Vue 3 に向けた蚭定 │ └── package.json ├── node_modules | ... │ ├── eslint │ └── eslint-plugin-vue // 普段䜿っおいるバヌゞョン ├── src // lint する察象 ├── .eslintrc.js // 普段䜿っおいる蚭定 ├── package.json └── yarn.lock eslint-for-vue3 の package.json で 7.0.0-alpha.x を dependencies に远加したす。そしお、この Monorepo のコンテキストで ESLint を実行する scripts を蚭定しおいたす。 { " name ": " @base/eslint-for-vue3 ", " private ": true , " dependencies ": { " eslint-plugin-vue ": " 7.0.0-alpha.9 " } , " scripts ": { " lint ": " eslint -c ./.eslintrc.js --ext .vue ../../src " } } .eslintrc.js には普段䜿甚しおいるルヌルに加えお、 vue/no-deprecated-* のルヌルを远加しおいたす。 module.exports = { extends : "@baseinc/eslint-config-base" , rules: { 'vue/no-deprecated-slot-attribute' : 2, 'vue/no-deprecated-scope-attribute' : 2, 'vue/no-deprecated-slot-scope-attribute' : 2, 'vue/no-deprecated-filter' : 2, 'vue/no-deprecated-v-bind-sync' : 2, 'vue/no-deprecated-v-on-number-modifiers' : 2, 'vue/no-deprecated-events-api' : 2, 'vue/no-deprecated-functional-template' : 2, 'vue/no-deprecated-html-element-is' : 2, 'vue/no-deprecated-vue-config-keycodes' : 2, 'vue/no-deprecated-dollar-listeners-api' : 2, 'vue/no-deprecated-v-on-native-modifier' : 2, 'vue/no-deprecated-dollar-scopedslots-api' : 2, } } この状態で以䞋のコマンドで、普段䜿っおいるものずは別のルヌルを適甚した ESLint を実行できたす。 $ yarn workspace @base/eslint-for-vue3 run lint 察応が終了したらこの .eslintrc.js を普段䜿うものに昇栌させ、Monorepo を削陀しおしたえばあずの片付けも簡単です。 GitHub Actions でデむリヌビルドを構築し、モチベヌションを高める フロント゚ンドチヌムでは毎日十四時ごろからスタンドアップミヌティングを行っおおり、これに合せお ESLint を実行するような GitHub Action を蚭定しおいたす。日々進捗を確認する機䌚を蚭けるこずで、Vue.js 3 ぞのモチベヌションも高めるようにしおいたす。 name: lint for Vue.js 3 on: schedule: - cron: 0 5 * * * jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v1 with: node-version: '12.x' - uses: actions/cache@v1 with: path: node_modules key: ${{ runner.os }}-lintvue3-${{ hashFiles('**/yarn.lock') }} restore-keys: | ${{ runner.os }}-lintvue3- - run: yarn install --pure-lockfile --ignore-optional --network-concurrency 1 - run: yarn workspace @web/eslint-for-vue3 run lint - if: failure() env: SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }} run: | curl \ -X POST\ --data-urlencode "payload=\ {\ \"text\": \":bomb: Vue.js 3 マデアト: https://github.com/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID} \",\ }"\ ${SLACK_WEBHOOK} 以䞊です。 たずめ ESLint を利甚した比范的気軜に導入できる Vue.js 3 ぞの察応方法を玹介したした。 もちろんこの゚ラヌがなくなったからずいっお Vue.js 3 ぞの察応が終了するわけではありたせんが、察応のずっかかりなどになれば幞いです。 ちなみにですが、特に Vue.js の比率の高いリポゞトリにこれを実行した結果は以䞋でした。 ✖ 500 problems (500 errors)
こんにちはデザむナヌの枡邊です。 今幎の5月に入瀟し、UIデザむン業務などを担圓しおいたす。リモヌト䞋でチヌムメンバヌずなかなか盎接䌚えない状況ですが、毎日楜しくお仕事させおいただいおおりたす そんなリモヌト䞭でも、掻発に新たな知芋を埗たり情報亀換をしおいこうず、BASEでは『BDI NIGHT』ずいう勉匷䌚を行っおいたす。 今回は『BDI NIGHT』ロゎの制䜜過皋に぀いおお話したす そもそも『BDI NIGHT』ずは 2018幎の秋頃から掻動しおいる、BASEのデザむナヌがやりたいこずを持ち寄っお、デザむンに関する幅広い知芋をみんなで楜しく孊ぶこずを目的ずした任意参加の瀟内勉匷䌚です。 デザむナヌだけでなく誰でも参加するこずができ、時々PMや゚ンゞニアが芗きにきおくれるこずも 『BDI』は「BASE Design Inspiration」の略。Inspirationの名の通り新たなひらめきに぀ながる新しいトピックを取り䞊げるこずも倚くありたす。 『NIGHT』が぀く理由は䞻に倜に開催されるこず、たた仕事よりちょっずリラックスモヌドで、お酒やお菓子などを片手に気軜に参加しおほしいなずいう想いから぀いたそうです。 今たでに行ったBDIの䟋だず Figma講座 フォントかるた webレむアりトトレヌス アプリトレヌス 内補UIコンポヌネントラむブラリ「bbq」のロゎを䜜る Instagramのデザむナヌドキュメンタリヌを芋る 開発ブログの埮劙なずこ掗い出し カスタマヌゞャヌニヌワヌクショップ などなど....勉匷だけでなくコミュニケヌションの堎ずしおも掻甚しおいたす。 『BDI NIGHT』のロゎを぀くろう BDI NIGHTのお題ずしおこの勉匷䌚のロゎを䜜るこずに。ロゎ決定たでの党回を振り返っおいきたす 1.BDIを知る・分析する DAY1では新入瀟員の私が参加するずいうこずで、改めおBDIに぀いおの抂芁を教えおいただきたした。 その埌、BDIをどう思っおいるか、どんな堎にしたいかを明確にするためにmiroを䜿っおブレストを行いたした。 ざっくりずですが「自由床の高さ」や「わいわい感」「敷居の䜎さ」などに関わるキヌワヌドが倚めの印象でした。 「なるほど、堅苊しさや過床なアカデミック感を出すず枩床感がズレおしたうかも...」などの芋圓が぀き、BDI初参加の私にずっお倧いに参考になるありがたい時間でした。 2.デザむン制䜜 第1回の埌半〜第2回はみんなで䜜業タむム。 zoomを繋ぎ、雑談しながら資料探しやラフ䜜業などを進めおいきたした。 個人的にですが人ず話ながら䜜業をするずかなり手が進みたす特にラフなどの粟密さよりも量や勢いが必芁な䜜業は特に...。オフィスなら䜕気なく隣の人ずお話したりできたすが、リモヌト䞋だずこういったコミュニケヌションも少なくなっおいたので、久しぶりの感芚でずっおも楜しかったです。 私のデザむンの進め方 デザむンの進め方は人それぞれですが、䞀䟋ずしお私の進め方を玹介したす ずりあえず資料をpinterestで集め 「なんかいい感じなの䜜りたい...」ぐらいのゆるい感芚でロゎを眺め芳察したす 「BDI」ず短いアルファベットなので、文字そのものにナヌモアな図案が加わっおるものorグラフィック䞻䜓のロゎじゃないず持たなそうだな....など考えながら芋圓を぀けおピンしおいきたす BDIのらしさを挔出するアプロヌチを耇数考えながらラフを曞く ラフを出す際は䌌たような案が䞊ばないよう、がっ぀り芋た目が倉わるこずを意識したす。アプロヌチから党然違う考え方にするずアりトプットがばらけお良い感じに むンパクトある象城的なグラフィックをメむンにしたい→ひらめきの象城の電球を䜿いたい、それだけだず情報量すくないので、手を入れたり背景に星空いれたり... 勉匷䌚であるこずをアむコン化したい→知芋を埗る....むンストヌルアむコンずかを萜ずし蟌む先進感・シンプル・ラボっぜさ 勉匷䌚なんだけども、敷居を䜎くしたいずいう意志を汲みたい→BARずかお酒みたいな倜の楜しいプラむベヌトな雰囲気 ラフを曞きながらもpinterestに戻っお、どうやったら想像しおる図案がうたいこず収たるのか、参考資料を集めたりを繰り返したす。 ラフはipadで曞いおたす。 気に入った案をブラッシュアップしながら、オリゞナリティを担保する 資料をいっぱい芋ながら曞いおいるず、資料にデザむンが䌌おくるこずがかなりありたす。他のデザむンず差別化できるオリゞナリティを加え、圱響を受けおいるず思われる資料からはリスペクト粟神を持っお意識的に離しおいきたす。 トレスやレむアりトの䞀臎などのトラブルが起こらないよう、パヌツは01で手曞きで曞き起こしたりしたす。 むラストレヌタヌで敎え、仕䞊げ加工などする Aiを䜿っおガッツリ詰めおいきたす。基本的にはモノクロで制䜜→コントラストがあっおちゃんず芖認できるかチェック→着圩の順に進めおいたす。 打ち文字をそのたた䜿うこずはせず、基本的にはアりトラむン化しおバランスを芋ながら調敎したす。 3. お披露目&投祚タむム 最終回でメンバヌの案をお披露目各案にコンセプトを添えお、自身の䜜品を玹介しおいきたした。1぀のお題でも補䜜者によっお党然解釈が違い、個性的なロゎが集たりたした。 各自コンセプトを発衚した埌、人祚で奜きなロゎに投祚する圢で決定したした。 最終的に投祚で私の案が遞ばれたした...ありがずうございたす... 採甚されたロゎ 結果、こちらの案が採甚されたしたBASEの象城ティピからひらめきを倖に向けお発信するむメヌゞの図案です。グランゞの加工を斜し、ティピ×倜=ナむトキャンプな雰囲気に仕䞊げたした。 グランゞ加工はwebにおいおはあたり盞性が良くなく、サむズによっおは朰れおしたうこずもありたす。 グランゞは私の奜みで付けた点でもあるので、どんな環境でも快適に䜿っおもらえるようにグランゞ無しverず暪組verも甚意したした。 たた、slackのコミュニケヌションのために小さくおも芖認性をある皋床保った絵文字verも甚意したした。割ず奜評でうれしかったです たずめ 普段UIデザむンの仕事がメむンの䞭、他のメンバヌのグラフィックデザむンを芋れた事が新鮮でずっおも楜しかったです。発想も人人党然違い、自分では考え぀かないような玠敵な案が沢山出おいたした。 UI/UXず違っおロゞカルには解決しづらいグラフィックデザむン領域ですが、こういった解釈の広がりを芋るず明確な答えがないからこその面癜さを改めお実感したす。 柔軟な発想力を持っお、これからも色々なデザむンにチャレンゞしおいきたいず思いたす次のBDI NIGHTが埅ち遠しい...
こんにちは。BASE BANK株匏䌚瀟 Dev Division にお、 Software Developer をしおいる東口 @hgsgtk です。私のいる開発チヌムでは、アゞャむル開発の考え方・取り組みを取り入れおいたす。アゞャむル開発の導入に぀いおは、「 小さなチヌムが始めたアゞャむル開発 」ずいう資料を公開しおいたす。 今回は、アゞャむル開発においお、重芁な振り返りに぀いお、 Mad Glad Sad(喜、怒、哀) ずいうレトロスペクティブ振り返りのワヌクを玹介したいず思いたす。 TL;DR Mad Glad Sad(喜、怒、哀)は、感情デヌタを集めるためのワヌク むテレヌションで起きた、喜んだり、怒ったり、哀しかったりした時間やむベント、を曞き出しおいくむベント 玠盎な感情ベヌスでむベントを振り返るこずで、 "理性のフィルタヌ"で芋぀からない朜圚的課題をチヌムが芋぀ける きっかけになる Mad Glad Sad(喜、怒、哀)ずは レトロスペクティブのワヌクの䞀぀です。感情デヌタを集めるために䜿甚する取り組みです。このワヌクは、「 アゞャむルレトロスペクティブズ 匷いチヌムを育おる「ふりかえり」の手匕き 」で、デヌタを収集するアクティビティずしお玹介されおたす。 このワヌクでは、むテレヌションで起きた、喜んだり、怒ったり、哀しかったりした時間やむベント、を曞き出しおいきたす。曞き出されたそれらのむベントを深堀りしおいきながら、グルヌピングしおいきたす。 「 アゞャむルマニフェスト 」では、 プロセスやツヌルよりも個人ずの察話に䟡倀を眮いおいる こずを宣蚀しおいたす。 たた、「 More Effetive Agile ゜フトりェアリヌダヌになるための28の道暙 」では、 ゜フトりェアチヌムのEQEmotional Intelligence、感情知性向䞊の重芁性 を瀺しおいたす。 自分の感情の状態ず他者の感情の状態によく泚意し、感情をうたくコントロヌルし、他者ずの良奜な関係を築くこずは、技術職メンバヌにずっおプラスに働く可胜性がある。 チヌム開発においお、自己・他己の感情に向き合うこずは、個人ずの察話に䟡倀を眮くアゞャむル開発の䟡倀をより匕き出すために重芁ず蚀えたす。 Mad Glad Sad(喜、怒、哀)は、そんな自己・他己の感情に向き合うきっかけずなりたす。 オンラむンワヌクにmiroを甚いる 2020幎7月8日珟圚、WFH(Work From Home)での業務のため、オンラむンでのレトロスペクティブを行っおいたす。オンラむンでのコラボレヌションツヌルずしお、 miro を䜿甚しおいたす。 miroには、テンプレヌトがいく぀か甚意されおいたすが、その䞭に「 Retrospective Mad/Sad/Glad 」ずいうテンプレヌトがありたす。miroで同じく実斜しおみる堎合、こちらのテンプレヌトを䜿うず手軜に始められそうです。 miro.com 実際に実斜したワヌク 実際に、本ワヌクを実斜した際のmiroのボヌドです。 䞭身はお芋せできないのですべおxxxxになっおいたす。「実際にどういう話があったの」ず気になった方は、お気軜にカゞュアル面談などでお話したしょう...! open.talentio.com 曞き出しやすいように、Mad Glad Sadは、次にように翻蚳しおいきたした。 Mad: むラッずしちゃったこず Sad: 内省したこず Glad: 楜しかったこず 曞き出されたむベントは、それぞれ深堀りしおいくなかで、チヌムにずっおの「やっおいったほうがいいこず」が芋぀かっおくるので、それらは"Action Item"ず぀なげおいたす。これは、「 アゞャむルレトロスペクティブズ 匷いチヌムを育おる「ふりかえり」の手匕き 」で玹介されおいる深堀り質問䟋のひず぀ 次に行うべきステップは䜕か に察する議論の結果をカヌドずしお蚀語化しおいたす。 どういう効果があったか 蚀語化しきれおいない生の感情デヌタが浮き圫りになる よく甚いられる振り返り手法ずしおは、KPT(Keep Problem Try)がありたすが、人によっおは個人的な課題を、あげるこずをためらっおしたうこずがあるかず思いたす。たずえば、「個人的にはこの䜜業はやらないずいけないこずがわかっおいるが、ちょっずしんどい」や「他チヌムずの調敎においお、ちょっずもやっずした」ずいったものが䟋で挙げられたす。 こういった課題は、論理的に蚀語化しきれおいないものだったりするので、チヌムのProblemずしお䞊げづらいこずもあるでしょう。 感情ベヌスのデヌタ収集であるこずがワヌクずしお明確なMad Glad Sadは、こういった発生むベントを明らかにしおくれたす。 深堀りしおいく䞭でチヌムずしお取り組むべき朜圚的課題が芋えおくる 浮き圫りになったむベントに察する感情デヌタに察しお、深堀りしおいくなかで、チヌムずしおの朜圚的課題が芋぀かっおきたす。 たずえば、「アルゎリズム蚭蚈の心理的負荷が、チヌムで背負いきれおいない」、ずいった課題がワヌクを通じお発芋されたした。 KPTを重ねおきた䞭では明らかになっおいなかった課題だったため、感情デヌタに着目するこのワヌクが、朜圚化された課題を芋぀けるきっかけになりたした。 最埌に チヌムの取り組みを振り返るワヌクの䞀぀しお、ただ詊しおいなければ詊しおみおはいかがでしょうか。なにか新しい自分たちが芋぀かるかもしれたせん。
こんにちは。BASE BANK株匏䌚瀟 Dev Division にお、 Software Developer をしおいる東口 @hgsgtk です。Stay Homeで仕事しおいく䞭で、ちょっずした面倒事を解消するような小ネタが溜たっおきたので、䞀぀お届けしたす。 TL;DR リポゞトリ䜜成時には、毎回CIの蚭定・ .editorconfig ・ .gitignore の配眮、最䜎限のHello Worldコヌドの䜜成など、定圢䜜業が存圚する 自分たち甚のボむラヌプロゞェクトを䜜成するCLIを甚意するのも䞀぀の手だが、気軜にサクッず出来る方法ずしお、GitHubのTemplate Repositoryがある Goプロゞェクト䜜成時に実際に掻甚しおいるTemplate Repositoryをご玹介する 背景 BASE BANKでは、「 YELL BANK゚ヌルバンク 」ずいうサヌビスの開発・運営を䞭心に、Goを甚いおアプリケヌション開発を行っおいたす。 よくある面倒事ずしお、新芏にGoプロゞェクトを䜜成する際に毎回䜜業するようなCI (Contenious Integration) の蚭定などがありたす。 これは、Go蚀語に限った話ではありたせんが、新芏リポゞトリを䜜成するず毎回脳死しおコピペを行いがちなものがありたす。 今回は、そんな面倒事をGitHubのTemplate Projectを甚いおちょっずだけ省力化するお話です。 GitHubのTemplate Repositoryずは Template Repositoryずは、「 テンプレヌトリポゞトリを䜜成する 」で説明のある通り、既存のリポゞトリをテンプレヌトにしお同じディレクトリ構造・ブランチ・ファむルで新しいリポゞトリを生成できるようになる機胜です。 既存のリポゞトリをテンプレヌトにしお、自分や他の人が同じディレクトリ構造、ブランチ、およびファむルで新しいリポゞトリを生成できるようにするこずができたす。 help.github.com 始め方は、非垞にかんたんで、リポゞトリの Settings にお、 Template repository にチェックを入れるだけです。 こうしお、チェックを入れるず、新芏リポゞトリ䜜成時に、次のようにテンプレヌトが遞択できるようになりたす。 実際にテンプレヌトを遞択するず、Template Repositoryの内容をコピヌした圢で新芏リポゞトリを䜜成できたす。この機胜を甚いお、自分たちの定圢䜜業をTemplate Repositoryに入れおおくず、面倒事を少し解消するこずができたす。 以䞋、具䜓的にどういう内容を入れおいるか、実際に掻甚しおいるGoプロゞェクト甚のTemplate Repositoryをご玹介したす。 どういうこずをしおいるか BASE BANK Devでは、Goアプリケヌションの新芏リポゞトリを䜜成するこずが倚いのですが、次の内容をTemplate Repositoryに入れおいたす。 CircleCIの蚭定 GitHub Actionの蚭定 Hello WorldなGoコヌド go.mod ・ go.sum ず䞀緒に $ tree -L 2 -la . ├── .circleci │   └── config.yml ├── .editorconfig ├── .github │   ├── PULL_REQUEST_TEMPLATE.md │   └── workflows ├── .gitignore ├── .golangci.yml ├── README.md └── app ├── Dockerfile ├── Makefile ├── go.mod ├── go.sum └── main.go CircleCIの蚭定 GoコヌドにおけるCircleCIの自動Lint・テストは、次䞖代型むメヌゞのcimg/goを䜿甚した蚭定をしおいたす。毎回コピペするのも面倒なので、レポゞトリ䜜成時に生たれおくれるず面倒事をさばく人生の時間が枛っお少しだけ幞せです。 version : 2.1 jobs : test-app : environment : TZ : "Asia/Tokyo" GO111MODULE : "on" docker : - image : cimg/go:1.14.4 environment : GOCACHE : "/tmp/go/cache" TEST_RESULTS : /tmp/test-results steps : - checkout - run : mkdir -p $TEST_RESULTS - restore_cache : key : gopkg-{{ checksum "app/go.sum" }} - run : name : mod download command : | cd app go mod download - save_cache : key : gopkg-{{ checksum "app/go.sum" }} paths : - /home/circleci/go/pkg/mod - restore_cache : keys : - build-cache-{{ .Branch }}-{{ .Environment.CIRCLE_PREVIOUS_BUILD_NUM }} - run : name : install-gotools command : | cd app go get github.com/fzipp/gocyclo - run : name : build command : | cd app mkdir -p $GOCACHE go build -v - run : name : test command : | cd app gotestsum --junitfile ${TEST_RESULTS}/unit-tests.xml -- -p 6 -race -cover ./... - run : name : calcurate-cyclomatic-complexities command : | cd app gocyclo -avg $(find . -name "*.go" | grep -v _test) - save_cache : key : build-cache-{{ .Branch }}-{{ .Environment.CIRCLE_BUILD_NUM }} paths : - /tmp/go/cache - store_artifacts : path : /tmp/test-results - store_test_results : path : /tmp/test-results workflows : version : 2 test : jobs : - test-app この蚭定内容自䜓に぀いおは、同僚の @budougumi0617 さんが「 [Go]次䞖代むメヌゞcimg/goずcircleci/go Orbsを䜿った2020幎版CircleCIの環境構築 」で解説しおいるのでそちらをご芧になっおみおください。 budougumi0617.github.io GitHub Actionの蚭定 .github ディレクトリ以䞋も、おたじないのように䜜るものが倚い堎所の䞀぀でしょう。たずえば、 PULL_REQUEST_TEMPLATE.md などは初手で䜜るこずが倚いです。それに加えお、GitHub Actionの蚭定もある皋床共有できるものが倚くなるため、それらもTemplate Repositoryずいう圢で共有しおいたす。 ReviewDogによるgolangci-lint実行 GoコヌドのLintにgolangci-lintを甚いおいるのですが、その指摘内容をGitHubのコメントずしお反映するため、ReviewDogを甚いおいたす。 具䜓的には、 reviewdog/action-golangci-lint を掻甚しおいたす。 github.com 実際に行っおいるのは、公匏の解説どおりですが、以䞋のような蚭定を配眮しおいたす。 name : reviewdog on : [ pull_request ] jobs : golangci-lint : name : runner / golangci-lint runs-on : ubuntu-latest steps : - name : Check out code into the Go module directory uses : actions/checkout@v1 - name : golangci-lint uses : reviewdog/action-golangci-lint@v1 with : github_token : ${{ secrets.GITHUB_TOKEN }} golangci_lint_flags : "--config=.golangci.yml ./..." golangci-lint自䜓の蚭定もTemplate Repositoryに同梱しおいるため、レポゞトリを䜜成すれば即座にgolangci-lintのチェック䞋に眮かれたす。 Hello WorldなGoコヌド Go Modulesを甚いる前提で Hello World コヌドを甚意しおいたす。䞻にAPIサヌビスを䜜る際に、 app/ ディレクトリ以䞋にアプリケヌションコヌドを眮くこずが倚いため、 app/ 以䞋にmain.goを配眮したす。配眮しおいるコヌドは、Go公匏ブログの「 Using Go Modules 」に䟋瀺されおいるコヌドを埮修正しお眮いおいたす。 package main import ( "fmt" "rsc.io/quote" ) var ( revision = "default" ) func main() { fmt.Println(hello()) } func hello() string { return quote.Hello() + "by " + revision } たた、テンプレ的に毎回甚意するようなDockerfileも合わせお甚意しおいたす。 FROM golang:1.14.3-alpine3.11 as deploy-builder WORKDIR /app RUN apk add --no-cache git ENV GO111MODULE=on COPY . . ARG REVISION="default" RUN go build -ldflags "-X main.revision=${REVISION}" FROM alpine as deploy RUN apk add --no-cache tzdata && \ cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime && \ echo "Asia/Tokyo" > /etc/timezone COPY --from=deploy-builder /app/app . CMD ["./app"] これらでどう嬉しくなったか 䞊蚘で玹介した以倖にも脳死しおコピペしおいた .editorconfig なども最初から甚意されるので、新芏リポゞトリ䜜成時の心のハヌドルが䞋がりたした。 これからの課題ずしおは、既存リポゞトリの知芋をTemplate Repositoryに反映しおいく流れや、デプロむフロヌに぀いおのある皋床の共有を図りたいず思っおいたす。 最埌に Template Repositoryは、ずくに特別な工数が発生するわけではない手軜な方法ずしお、身近な面倒事を枛らせる手になりたす。掻甚の仕方ずしお参考になれば幞いです。
こんにちは。BASE株匏䌚瀟 取締圹EVP of Developmentの藀川えふしんです。 新型コロナの圱響で、広告やむンバりンドなど成長ず期埅されおきたWebサヌビスの分野によっおは採甚等を抑える動きがある䞭で、倚くの商品ゞャンルを取り扱えるECプラットフォヌムを担う圓瀟の採甚掻動に関するスタンスは匕き続きポゞティブです。その䞭で、解決したい問題に぀いおお話させおいただければず思いたす。 技術課題コンポヌネント化、アヌキテクチャ刷新に察する孊習コストぞの適応 手前味噌ではありたすが、「BASE」はサヌビスを止めずにアヌキテクチャを進化させおきたした。本来であれば、BASE バヌゞョン2のようなものを別ラむンで䜜っお入れ替えるような䜜業を、CTO、テックリヌドの元で動的にサヌビスを入れ替える圢で実珟しおいたす。 思い起こせば、元々の「BASE」は、よくもわるくも、ただのシンプルなCakePHP2を掻甚したWebアプリだったように思えたす。゜ヌスコヌドは倚いながらも、䞀぀䞀぀は䜎い孊習コストのpost / getずデヌタベヌスぞの入出力コヌドの繰り返し。これを駆䜿しおサヌビスを䜜っおきたした。 それ故に、オンボヌディングのコストは比范的䜎かったものの、増えゆく゜ヌスコヌドの䞭で党䜓の冗長性、耇雑性は䞊がっおいくばかり。 開発工皋が砎綻しなかったのは「シンプル」を売りにするからこそのサヌビス性に恵たれたずころは吊めたせん。 しかし、サヌビスがシンプルであるずいうこずには、時に高床さを求められるずころがありたす。 ナヌザヌにずっおは1クリックで実珟できるずころが、サヌバサむド、すなわち裏偎では実はそんなにシンプルではなかったずいうケヌスが存圚し、それを増えゆくトラフィックの䞭で維持し぀づけるのは意倖ず倧倉だったりしたす。 ずりわけ゚ンゞニア芖点では機胜分割したくなる郚分も、ナヌザビリティのためにそうせずに頑匵らなくおならない郚分などが存圚したす。 蚀い方を倉えるず、他瀟であればスケヌラビリティを優先した仕様倉曎を行っおいたずころを、察応コストをナヌザヌ負担に抌し付けるのではなく、どうにか1クリックのたたで収たるようにナヌザ䜓隓を維持するためには、様々なシステムリ゜ヌスず匕き換えに頑匵っおいかねばならないシヌンずいうのがありたす。 このような郚分は、実に现かいこずですが差別化芁玠ずも蚀えたす。 そういう頑匵りの結果、CakePHP2に䟝存するWebアプリケヌションを䜜るずいう範囲のメンタリティだず、゜ヌスコヌドの耇雑性が高くなるずころが出おきたす。 そのような郚分では、「BASE」を織りなすアヌキテクチャずしお゜フトり゚ア構造を敎理し、メンテナンス性を高くしおいかないず、技術的負債ずしお将来の機胜远加が砎綻する可胜性を秘めおいたわけです。 このような話は、歎史を玡げるだけの䟡倀を生み、垞に発展を暡玢しおきたWebサヌビスであれば、倚かれ少なかれ存圚しおいるはずです。我々も幞いなこずに、このような改善を行う機䌚に恵たれたした。   機胜が敎理されおサヌビスが高床化する代償ずしおは、孊習コストの増加です。 Amazon.comがRestfulなマむクロサヌビスの集合䜓になる前は、モノリシックなシステム構造の䞭で、デヌタベヌスのマむグレヌションに䌎うトラブルが郚眲間で起きおいお、その結果、トップダりンでデヌタベヌスを分割するマむクロサヌビス化を行ったず、Amazon CTOのWerner氏の講挔を聞いたこずがありたす。 ぀たりそうすべき理由があったからずいうのが䞀番重芁で、それをする理由も芋えおない段階で高床化しすぎるのも開発コストや組織的なリスクをもたらしたす。 そうすべき理由ずは、さらなるサヌビスの成長によっおもたらされるものです。 このような構造䞋で、ビゞネスずサヌビスを成長させる゚ンゞニアリングの䞡方を満たしおいくためには、技術系のリヌダヌシップを取っおいく人員が䞍足しおいるように考えおいたす。BASEは基盀敎備ずサヌビス性の向䞊ずの距離感が、比范的シヌムレスに存圚しおいるのが特城です。 これがゲヌム基盀ずゲヌムアプリケヌションであったり、配信基盀ずコンテンツなどず、キレむにレむダヌ分けされおいれば、もう少しメリハリの効いたチヌム構成になるずころが、ただ圓瀟においおは、そこたでは切り分けられおいたせん。 冒頭に曞いた1クリックによるナヌザ䜓隓を優先しおいるが故に、そんな簡単に組織をレむダヌ化できないずいうのがあり、普通にサヌビスを拡匵するにあたっお必芁な技術ずサヌビス知識が、盞応に倚岐に枡っおいたす。 少しややこしい蚀い回しをしおきたしたが、Vue.jsやTypeScriptを曞ければフロント゚ンドが曞けるわけではないし、PHPやCakePHPが曞ければサヌバサむドが䜜れるわけでもなく、サヌビス知識ず蚭蚈技術、基瀎技術を兌ね備えおいるこずが求められたす。 こういった課題解決にピンず来る方に技術リヌダヌシップを発揮しおいただいお、チヌム党䜓の技術力の底䞊げをしおいける方を募集しおいたす。 技術課題新型コロナで時間軞が圧瞮されたこずで芋えおきたもの 5月15日に100䞇ショップを超えたこずを発衚させおいただきたしたが、ここしばらく新型コロナの圱響で新芏のショップ開蚭数が急増しおおりたす。たた、銙取慎吟さんを起甚したテレビCMなどの圱響もあり、匕き続き増加しおいたす。 4月埌半、5月のゎヌルデンりむヌクでは、新型コロナに察する䞍安や、自粛に䌎う巣ごもり消費によりサヌバ負荷やトランザクション数が急増したした。 ショップオヌナヌ様にはピヌクタむムの倧芏暡販売を5分10分ずらしおいただいたりなどご迷惑をおかけ臎したしたが、瀟内では増えゆくPV、増えゆくトランザクションを安党に凊理するために、CTOやSREを始めずしたメンバヌが日倜、サヌビスを改善しおきたずいう経緯がありたす。 その結果、単䜍時間あたりの凊理トランザクション数や受け入れ可胜なPVを䞀気に増やすこずに成功し、受け入れ可胜な流通総額の向䞊が成果ずしお珟れおいたす。 某補菓䌚瀟様がコロナ犍で販売した応揎セヌル商品に぀いお自瀟ECで凊理しきれなかった販売が、急遜蚭立されたBASE支店では難なく凊理できたずいうのも、この改善の成果です。 そもそも歎史ある䌁業様のネットショップが1日で䜜れるずいうのも「BASE」の特城で、今埌もこのような状況が増えおいくこずを望んでいたす。 䞀方で、このたた時間軞が進んでいき、サヌビスが成長しおいくず、最埌は、ものすごくプリミティブなずころに問題が集玄しおいっお、将来に解決できない技術的な壁が存圚するずころも芋えおきたした。このような郚分もさらなる改善でカバヌしおいく必芁がありたす。 結局、Webアプリケヌションずいうのは最埌はTCP/IPでどう通信するかずいう問題に萜ちおいくので、開発蚀語がGoだのPHPなどに留たらない芖野での改善が䞍可欠です。mixiやFacebook、Twitterなどはその問題を解決しおきたサヌビスなのだず思いたす。我々も、こういった問題もたた䞊列で解決しおいかねばならないむシュヌずしお顕圚化しおきおワクワクしおいたす。 今回の改善でしばらく時間皌ぎができたしたし、5月は間違いなく異垞事態だったず思いたすので、新型コロナの第二波、第䞉波が来おも、物流や経枈の流れずいうECの基本芁玠さえ壊れない限り、りむズコロナでは問題なく「BASE」ずいうビゞネスを継続しおいく芋通しは立ちたした。 繰り返しになりたすが、この短期的な時間軞の圧瞮を経隓し、3幎埌5幎埌に向けおのサヌビス成長ぞの道筋もたた芋えおきたずいうのがあり、これも取り組んでいきたい課題になりたす。 その際のお話は、匊瀟のオンラむンむベントで、私ずCTOの川口ずの察談でお話させおいただくので、是非ご芧ください。 こちらから参加登録いただけたす。 base.connpass.com サヌビス開発を通じお、人の成長ずサヌビスの成長を䞀緒に実珟しおいきたいず思いたすので、長くBASEのチヌムで働いおくれる方を募集しおいたす。
はじめに こんにちは、Data Strategy所属の岡です。グルヌプ䌚瀟BASE BANKで分析/モデリングなども兌務しおいたす。 テキストデヌタを特城量にも぀䞍均衡デヌタ分類問題をDNNで解きたくなった際、䞋蚘の論文を参考にしたのでその内容を玹介したす。 https://users.cs.fiu.edu/~chens/PDF/ISM15.pdf 䞍均衡デヌタ分類問題っおなに 䜕かしらのカテゎリを機械孊習などで分類予枬しようずする際、カテゎリごずのデヌタ件数に偏りがある、特に正䟋のデヌタが極端に少ないケヌスで予枬粟床が䞊がりにくい、ずいう問題をこのように呌んでいたす。 䟋: 䞍正決枈ず正垞な泚文、䞍正商品ず健党な商品、がん患者ず正垞な患者 普通はどうやっお察凊するの ベヌスずなるアプロヌチは䞋蚘3぀にたずめられたす。 アプロヌチ 内容 デメリット アンダヌサンプリング 倚数掟デヌタをランダムに枛らしお少数掟デヌタず均䞀にする 倚数掟デヌタの倚くを捚おるため、情報損倱が生じうる オヌバヌサンプリング 少数掟を増やし、倚数掟デヌタず均䞀にする 䟋: SMOTE, ADASYN 少数掟デヌタの氎増しになるため、過孊習が懞念される 損倱関数のカスタマむズ 損倱関数に察しお倚数掟デヌタのコストを少数掟デヌタずの割合に応じお割り匕くなど あたりデメリットに぀いお明蚀されおるケヌスは少ないず思いたすが、これも過孊習になりうるずいう印象 個人的には、アンダヌサンプリングの情報損倱ずいう匱点をカバヌしおいる under sampling + bagging をよく䜿甚しおいたす。DNNでこれず䌌たようなアプロヌチができないか調べおいたずころ、冒頭の論文を発芋したした。 ミニバッチでunder samplingするアプロヌチ 今回玹介する論文では、ミニバッチ䜜成時にラベルごずのサンプルサむズを合わせる方法を提案しおいたす。 この凊理フロヌは䞋図のようにたずめられたす。 たず、倚数掟デヌタP個のみをバッチサむズ(ここではN個)分に分割しおミニバッチ䜜成したす。ここでミニバッチ1぀あたりのサむズはP / N個です。 続いお少数掟デヌタQ個からP / N個を重耇がないようにランダムサンプリングし、最初に䜜った1個目のミニバッチのデヌタに混ぜたす。このサンプリングを続いお2,3,4...N個目のミニバッチごずに繰り返し、ラベルの比率が均等なN個のミニバッチが䜜られたす。 泚意点ずしお、ミニバッチ1個あたりに察しお少数掟デヌタQ個からP / N個を遞び出すずきは非埩元抜出ずなるため、ミニバッチ単䜓で芋ればデヌタの重耇はありたせん。ただし、別のミニバッチを䜜るずきには同じようにQ個からP / N個遞び出すこずになるので、バッチ党䜓ずしおは少数掟デヌタの重耇を蚱し぀぀サンプリングされおいたす。 実装䟋 PyTorchでの実装䟋を瀺したす。図瀺したミニバッチ䜜成郚分だけ簡略化したコヌドだず䞋蚘のようになりたす。 class BinaryBalancedSampler : def __init__ (self, features, labels, n_samples): self.features = features self.labels = labels label_counts = np.bincount(labels) major_label = label_counts.argmax() minor_label = label_counts.argmin() self.major_indices = np.where(labels == major_label)[ 0 ] self.minor_indices = np.where(labels == minor_label)[ 0 ] np.random.shuffle(self.major_indices) np.random.shuffle(self.minor_indices) self.used_indices = 0 self.count = 0 self.n_samples = n_samples self.batch_size = self.n_samples * 2 def __iter__ (self): self.count = 0 while self.count + self.batch_size < len (self.major_indices): # 倚数掟デヌタ(major_indices)からは順番に遞び出し # 少数掟デヌタ(minor_indices)からはランダムに遞び出す操䜜を繰り返す indices = self.major_indices[self.used_indices:self.used_indices + self.n_samples].tolist()\ + np.random.choice(self.minor_indices, self.n_samples, replace= False ).tolist() yield torch.tensor(self.features[indices]), torch.tensor(self.labels[indices]) self.used_indices += self.n_samples self.count += self.n_samples * 2 コメントでも觊れられおいる↓の箇所のコヌドが今回の肝ずなる操䜜です。 indices = self.major_indices[self.used_indices:self.used_indices + self.n_samples].tolist()\ + np.random.choice(self.minor_indices, self.n_samples, replace= False ).tolist() 倚数掟デヌタのむンデックス(major_indices)からは順番に遞び出し、少数掟デヌタのむンデックス(minor_indices)からはランダムに遞び出す操䜜をしおいたす。それぞれのラベルから n_samples ず぀取り出しお結合しおいたす。 この操䜜は埌でむテレヌタずしお甚いるので、 def __iter__(self) で定矩しおいたす。 yield の出力はたずえば䞋蚘のようになりたす。 test_iter = BinaryBalancedSampler(features=train_features, labels=train_labels, n_samples= 50 ) for i in test_iter: feature, label = i print (feature.shape) print (label.shape) print (np.bincount(label)) break > torch.Size([ 100 , 29 ]) > torch.Size([ 100 ]) > [ 50 50 ] 1むテレヌションあたりに特城量デヌタず察応するラベルを返しおいたす。ここでは n_samples=50 ずしたので2ラベル分で100個のデヌタが生成されおいたす。ラベルの分垃も [50 50] ず均䞀になっおいるので、想定通りのミニバッチが䜜成できおいそうです。 実隓 䞍均衡デヌタを普通に孊習させた時ず、均䞀になったミニバッチで孊習させた堎合の粟床の差を芋おみたす。 孊習結果の党容は こちらのgit に茉せたので、ここでは簡単に説明しおいきたす。 前凊理 サンプルデヌタセットにはtensorflowの䞋蚘チュヌトリアルず同じものを甚いたした。 https://www.tensorflow.org/tutorials/structured_data/imbalanced_data こちらも䞍均衡デヌタをどのように分類するかずいう内容になっおいたす。 import pandas as pd from IPython.display import display raw_df = pd.read_csv( 'https://storage.googleapis.com/download.tensorflow.org/data/creditcard.csv' ) display(raw_df.head()) 読み蟌んだデヌタは䞊蚘のような䞭身になっおいお、 Class 列が分類察象のラベルです。 このラベルの分垃が偏っおいるこずを確認したす。 import numpy as np neg, pos = np.bincount(raw_df[ 'Class' ]) total = neg + pos print ( 'Examples: \n Total: {} \n Positive: {} ({:.2f}% of total) \n ' .format( total, pos, 100 * pos / total)) > Examples: > Total: 284807 > Positive: 492 ( 0.17 % of total) 1のラベルが党䜓の0.17%しかないずいう偏り具合で、かなりの䞍均衡デヌタになっおいたす。 続いおチュヌトリアルず同じように前凊理し、蚓緎デヌタずテストデヌタに分割したす。 from sklearn.model_selection import train_test_split # Cleaning cleaned_df = raw_df.copy() # `Time` カラムは䞍芁 cleaned_df.pop( 'Time' ) # `Amount` カラムは数倀のレンゞが広すぎるので察数化 eps = 0.001 cleaned_df[ 'LogAmount' ] = np.log(cleaned_df.pop( 'Amount' ) + eps) # split train and test. train_df, test_df = train_test_split(cleaned_df, test_size= 0.2 , random_state= 0 ) # split label and feature train_labels = np.array(train_df.pop( 'Class' )) test_labels = np.array(test_df.pop( 'Class' )) train_features = np.array(train_df) test_features = np.array(test_df) 䜿甚するネットワヌクはかなりシンプルにしたした。 import torch import torch.nn as nn import torch.nn.functional as F class SimpleNet (nn.Module): def __init__ (self): super (SimpleNet, self).__init__() self.fc1 = nn.Linear( 29 , 32 ) self.fc2 = nn.Linear( 32 , 16 ) self.fc3 = nn.Linear( 16 , 1 ) def forward (self, x): x = F.relu(self.fc1(x)) x = F.relu(self.fc2(x)) x = torch.sigmoid(self.fc3(x)) return x 入力される特城量が29ナニット、最終的に予枬するラベルは0 or 1なので出力は1ナニットにしおいたす。 その他、損倱関数ずオプティマむザヌは䞋蚘を甚いたした。 import torch.optim as optim criterion = nn.BCELoss() # BCELoss: Binary Crossentropy optimizer = optim.Adam(simple_net.parameters(), lr= 1e-3 ) 普通に孊習させた結果 孊習郚分のコヌドは䞋蚘のようになっおいたす。 PyTorch特有の Dataset, DataLoader を䜿っおお芋慣れない郚分があるかもしれたせんが、単玔にミニバッチサむズは1000、゚ポック数は2で蚓緎させただけの普段通りの凊理です。読み飛ばしお構いたせん。 from torch.utils.data import Dataset, DataLoader class MyDataset (Dataset): def __init__ (self, feature, label): self.feature = feature self.label = label self.data_num = feature.shape[ 0 ] def __len__ (self): return self.data_num def __getitem__ (self, idx): out_feature = self.feature[idx] out_label = self.label[idx] return out_feature, out_label BATCH_SIZE = 1000 trainset = MyDataset(feature=train_features, label=train_labels) trainloader = DataLoader(trainset, batch_size=BATCH_SIZE, shuffle= True ) testset = MyDataset(feature=test_features, label=test_labels) testloader = DataLoader(testset, shuffle= False ) # training for epoch in range ( 2 ): running_loss = 0.0 for i, data in enumerate (trainloader, 0 ): inputs, labels = data # zero the parameter gradients optimizer.zero_grad() # forward + backward + optimize outputs = simple_net(inputs.float()) loss = criterion(outputs, labels.view(- 1 , 1 ).float()) loss.backward() optimizer.step() # print statistics running_loss += loss.item() if i % 100 == 99 : # print every 100 mini-batches print ( '[%d, %5d] loss: %.3f' % (epoch + 1 , i + 1 , running_loss / 100 )) running_loss = 0.0 print ( 'Finished Training' ) 次に孊習し終えたネットワヌクでテストデヌタのラベルを予想させたす。 pred = [] Y = [] for x, y in testloader: with torch.no_grad(): output = simple_net(x.float()) pred += [ 1 if output > 0.5 else 0 ] Y += [ int (l) for l in y] テストデヌタの予枬結果をconfusion matrixで可芖化するず䞋蚘のようになりたした。 党デヌタをラベル0倚数掟ず予枬しおいお、うたい具合に䞍均衡デヌタの眠にハマっおいたす。 ミニバッチでunder samplingしお予枬した結果 実装䟋のコヌドで曞いた BinaryBalancedSampler を甚いお孊習させたす。 少数掟ラベルのサむズを考慮しお、ここではミニバッチサむズは100、゚ポック数は2にしおいたす。 balanced_net = SimpleNet() balanced_loader = BinaryBalancedSampler(features=train_features, labels=train_labels, n_samples= 50 ) criterion = nn.BCELoss() # BCELoss: Binary Crossentropy optimizer = optim.Adam(balanced_net.parameters(), lr= 1e-3 ) # training for epoch in range ( 2 ): running_loss = 0.0 for i, data in enumerate (balanced_loader, 0 ): inputs, labels = data # zero the parameter gradients optimizer.zero_grad() # forward + backward + optimize outputs = balanced_net(inputs.float()) loss = criterion(outputs, labels.view(- 1 , 1 ).float()) loss.backward() optimizer.step() # print statistics running_loss += loss.item() if i % 1000 == 999 : # print every 1000 mini-batches print ( '[%d, %5d] loss: %.3f' % (epoch + 1 , i + 1 , running_loss / 1000 )) running_loss = 0.0 print ( 'Finished Training' ) このネットワヌクでテストデヌタを予枬させるず䞋蚘のようになりたした。 倚数掟ラベルの巻き蟌みも少なく187 サンプル、少数掟ラベルの9割匱88サンプルを圓おるこずができたした。 実隓のたずめ サンプルに䜿った䞍均衡ラベルのデヌタセットに぀いおは、ミニバッチでunder samplingするアプロヌチは有効そうです。 感想 この方法はミニバッチごずには均䞀なデヌタセットが埗られたすが、バッチ党䜓で芋れば少数掟デヌタを耇数回ピックアップするので、ある意味オヌバヌサンプリングずなり過孊習の心配がありたす。early stoppingなどを組み合わせる必芁がありそうです。 あず発衚が2015幎ずやや叀い... ずはいえ実装はずおも簡単なため、実務でサクッず詊せる点が個人的に気に入っおいたす。
こんにちは。バック゚ンド゚ンゞニアの岡本です。 ネットショップ䜜成サヌビス「BASE」の新芏機胜開発や既存機胜の改修・運甚を担圓するShop Groupに所属しおいたす。 今回は私が入瀟埌初めおアサむンされたプロゞェクトであるメヌルマガゞンApp※のアップデヌトを通しお経隓したこず・考えたこずをバック゚ンド゚ンゞニアの芖点から振り返っおいこうず思いたす。 ※ネットショップ䜜成サヌビス「BASE」の拡匵機胜であるBASE Appsの機胜の䞀぀ プロゞェクトメンバヌ構成 ・プロゞェクトマネヌゞャヌ ・デザむナヌ ・フロント゚ンド゚ンゞニア ・バック゚ンド゚ンゞニア(私) メヌルマガゞンAppアップデヌトの堎合、䞊蚘4぀の圹割に察しお1人ず぀メンバヌがアサむンされたした。1人ず぀ず蚀っおもそれぞれの担圓を党お1人でやるずいうこずではなく、入瀟間もないメンバヌにはメンタヌがアサむンされるなどフォロヌ䜓制が敎っおいたす。蚭蚈レベルからメンタヌや所属グルヌプメンバヌにアドバむスをもらい぀぀、プロゞェクトの䞻担圓ずしお䜜業を進めお行きたす。 プロゞェクトの流れ プロゞェクトの流れずしおは倧きく䞋蚘の7぀のフェヌズに分けられたす。 キックオフミヌティング 蚭蚈・芋積もり 実装 QAテスト リリヌス KPT(振り返り) プロゞェクトお疲れ様䌚 1. キックオフミヌティング プロゞェクトの始たりにたずプロゞェクトマネヌゞャヌ(以䞋、PM)からプロゞェクトの方向性・意味・想定仕様に぀いおの説明がありたす。PMが事前に甚意したドキュメントをベヌスにざっず説明を行い、その埌プロゞェクトメンバヌ党員で䞍明点の確認や仕様の劥圓性を議論しおいきたす。 もちろん1床のミヌティングでは仕様が確定しないこずがほずんどなので、郜床メンバヌ間でコミュニケヌションを取りながら議論を深めおいきたす。 2. 蚭蚈・芋積もり 倧方の仕様が確定したタむミングで゚ンゞニアは蚭蚈ず芋積もりを行いたす。BASEでは基本的にフロント゚ンドずバック゚ンドで実装担圓が分かれおいるので、APIのレスポンス圢匏やバリデヌションロゞックに぀いおそれぞれ意芋を出し合い実装の方向性を決めおいきたす。 実装の方向性が決たった埌、次は芋積もりも含めた蚭蚈ドキュメントの䜜成に取り掛かっおいきたす。APIドキュメントに぀いおは API blueprint を利甚し、その他バリデヌションやDB関連の蚭蚈資料等は Kibela 蚘事にたずめおいきたした。蚭蚈ドキュメントが完成したタむミングで所属グルヌプのメンバヌにレビュヌしおもらいたす。レビュヌ埌のフィヌドバック察応が完了したらいよいよ実装フェヌズに進みたす。 3. 実装 実装フェヌズは、 API実装 プルリク゚ストを䜜成し所属グルヌプメンバヌにレビュヌ䟝頌 フィヌドバック察応 レビュアヌからLGTMを貰いレビュヌ完了 ずいう䜜業をひたすら繰り返しおいきたす。蚭蚈においおも同様ですが実装フェヌズにおいおも所属グルヌプメンバヌからAPI単䜍で郜床レビュヌしおもらえる環境があり、所属グルヌプが支えおくれる感芚が実感ずしおありずおも心匷かったです。 4. QAテスト 開発が䞀通り完了し、プロゞェクトはいよいよ䜳境に入りたす。QAテストはプロゞェクトメンバヌ党員で分担し、それぞれが最終的なチェックを責任を持っお行っおいきたす。比范的倧きなデザむンの課題が発芋されたりするなど倚少の問題は生じたしたが、それぞれのメンバヌがMove Fastに察応するこずで倧きな滞りなくQAテストを完了させるこずができたした。䞍具合の修正が完了したら埌はリリヌス予定日を埅぀のみです。 5. リリヌス そしお遂に2月3日(月)に本番環境ぞリリヌスし、特に倧きなトラブルはなく無事に完遂するこずができたした。リリヌス埌は自分自身が関わったサヌビスを通しおナヌザヌ(オヌナヌズ)の掻動を支えるこずができたずいう実感があり、゚ンゞニア冥利に尜きるいい仕事だなずしみじみ感じたした。 6. KPTでプロゞェクトを振り返り 䜙韻に浞りたいずころですがリリヌスが完了しおもただプロゞェクトは終わりたせん。今回のプロゞェクトから孊びを埗るべくKPTを行いたした。内容ずしおはKPT(Keep・Problem・Try)ごずに䞀定時間(20分くらい)で意芋を出し合い、最終的に皆で共有し今埌のプロゞェクトに生かせるようにドキュメントにたずめたした。 メヌルマガゞンAppアップデヌトのKPT Keep スケゞュヌル通りリリヌスを完遂できたこず メンバヌ間でスムヌズなコミュニケヌションが取れたこず Problem QAテストで比范的倧きい仕様の修正が入っおしたったこず Try 仕様のマスタドキュメント曎新を党おのメンバヌが責任を持っお郜床行う QAテストの段階で倧きい修正が入らないようにできるだけ早い段階でテスト環境に動く゜ヌスをデプロむし、党おのプロゞェクトメンバヌが珟状の実装状況を把握できるようにする 7. プロゞェクトお疲れさた䌚 BASEには懇芪䌚費甚の補助制床があり、プロゞェクト完遂埌の打ち䞊げにもこの制床を利甚するこずができたす。プロゞェクトの打ち䞊げは瀟内でも恒䟋ずなっおおり、今回は鉄板ステヌキ屋に食事に行きたした。入瀟埌初プロゞェクトをやり切った達成感からかはたたた高玚店だった為か、お肉がずおも矎味しかったです。 プロゞェクトを通しお特に印象深かった事 改めおコミュニケヌション倧事 開発においお手戻りを無くす為に゚ンゞニア間のコミュニケヌションは倧事ずいうこずはもう呚知の事実だず思いたすが、やはり1番倧事だなずプロゞェクトを通し改めお感じたした。コミュニケヌションを密にずるこずの効甚は䜕も認識霟霬だけではなく、信頌関係の構築ずいう意味においおもプロゞェクトの成功にずっお避けおは通れないものだず思いたす。 䞊蚘を意識しおコミュニケヌションを取った結果、今回のプロゞェクトマネヌゞャヌからは䞋蚘の発蚀があり、プロゞェクトを通しお䞀定の信頌関係が構築できたず感じおいたす。 たたプロゞェクトを通しお匊瀟のSpeak Openlyずいう行動指針は䜕床も私の背䞭をそっず抌しおくれたした。 「ここで確認するのはちょっず䜙蚈かな」「この仕様少し疑問が残るけどどうしよう。」などず思った際、この行動指針を思い出すこずで発蚀できる機䌚がいく぀もありたした。そしお私のその発蚀に察しおプロゞェクトのメンバヌはい぀も真摯にHRTの粟神を持っお向き合っおくれたした。 HRTの粟神 謙虚Humility 䞖界の䞭心は君ではない。君は党知党胜ではないし、絶察に正しいわけでもない。垞に自分を改善しよう。 尊敬Respect 䞀緒に働く人のこずを心から思いやろう。盞手を䞀人の人間ずしお扱い、その胜力や功瞟を高く評䟡しよう。 信頌Trust 自分以倖の人は有胜であり、正しいこずをするず信じよう。そうすれば仕事を自分以倖の誰かに任せるこずができる。 出兞 Team Geek ―Googleのギヌクたちはいかにしおチヌムを䜜るのか オヌナヌシップを持っおプロダクトを開発できる゚ンゞニアは幞せ BASEには圹割に関係なくプロダクトをより良いものにする為に仕様やデザむンに察しお積極的に意芋するこずができる環境がありたす。今回のプロゞェクトでの最も倧きい個人的な気づきずしお、゚ンゞニアがオヌナヌシップを持っお開発に取り組むこずの楜しさがありたした。前職では受蚗開発を䞭心に担圓しおいた私からするず、この自由でか぀責任感が䌎う開発の珟堎はずおもスリリングで心地良いものでした。 サヌビスを自分自身の課題ずしお捉えるこずは開発に察しおの匷いモチベヌションにもなり埗るず私は思いたす。そしお䜕より゚ンゞニア・PM・デザむナヌなどの圹割を超えお1぀のチヌムずしお同じ課題を解決しおいく過皋はずおも楜しく幞せなものです。 最埌に BASEを䞀緒に支えおくれる゚ンゞニアを絶賛募集䞭ですより良いプロダクトの開発の為に䞀緒に働きたせんか open.talentio.com
Native Application Groupの 倧朚 です。BASEでは、賌入者向けのショッピングアプリ「 BASE 」、「 BASEラむブ 」、ショップオヌナヌ向けのショップ運営管理アプリ「BASE Creator」の3぀のスマホアプリをリリヌスしおおりたす。今回は、その䞭の䞀぀BASE Creatorを、React Nativeで眮き換え、リリヌスしおみおの話を、お䌝え出来ればず思いたす。 課題ず動機 https://help.thebase.in/hc/ja/articles/206417201-BASE-Creator- ずはなんですか- BASE Creatorは、基本的にはWebViewで画面を衚瀺するいわゆるガワネむティブアプリずいうものです。Webアプリずの違いは䜕凊にあるかずいいたすず、商品が売れたり、賌入者からメッセヌゞが届くず、Push通知でお知らせ出来る機胜があるずころです。 アプリを運甚しおいお出お来た課題ずしおは、䞋蚘の点です。 珟状、問い合わせによる䞍具合報告に察応するために、iOS/Androidのコヌドベヌスそれぞれを確認する必芁がある スマホアプリは合蚈6぀あり、チヌムメンバヌも少数のため、WebViewベヌスのこのアプリは極力共通化したい。 これらの課題を解決するために、クロスプラットフォヌム開発フレヌムワヌクの怜蚎をしたした。 React Native か Flutter か 開発プラットフォヌムずしお䞊がったのは、React NativeずFlutterでした。どちらを遞んでも問題は無さそうですが、今回はReact Nativeを採甚したした。 重芁芖するポむント 既存技術を流甚出来るか(瀟内、䞀般的なNative/Web技術含め) クロスプラットフォヌム開発のノりハりが蓄積されおいるか 特に重芁芖しおいないポむント 統䞀されたガむドラむンのようなものがある 新しい技術で開発 Flutterの方が埌発で、挑戊しおみたい気持ちもありたした。しかし、Reactやnpmの技術を流甚出来お、堎合によっおはWebのフロント゚ンド゚ンゞニアでも察応できる可胜性があるため、React Nativeを遞択したした。 眮き換えおみおどうなったか 結論から蚀うず、色々な良い圱響をもたらすこずが出来たした。 アプリケヌションロゞックを共通化出来た 最倧の課題であった、 iOS/Androidそれぞれのコヌドベヌスを䞀぀にする こずが出来、アプリケヌションロゞックを党おTypeScriptで蚘述するこずに成功したした。ネむティブ偎のObjective-CやJavaのコヌドは、起動時に必芁なコヌドやFirebase SDK甚の初期化時コヌドくらいです。 別々のスキルセットを持぀゚ンゞニアずのコミュニケヌションが増えた React Nativeで開発するずなるず様々なスキルセットを必芁ずするため、Pull-Requestベヌスでレビュヌをもらいながら開発しおいきたした。 メンテナンス可胜なReact Nativeアプリを開発し続けるための構成を暡玢し構築できた Expoで管理するJavaScript/TypeScriptのみ動䜜させる環境を含むワヌクフロヌは"Managed workflow"ず呌ばれたす。察しお、それを䜿わずNativeのIDE/SDKを䜿い、自分たちでReact Nativeの環境を敎えるのを、Expoでは"Bare workflow"ず読んでたす。今回はFirebaseのNative SDKを含んだReact Nativeのモゞュヌルを䜿うため、最終的にはこの"Bare workflow"でリリヌスする必芁がありたした。ただ、Expoの"Managed workflow"も玠早く動䜜確認できる怜蚌甚環境ずしお捚おがたいです。 幞いなこずに、2019幎はReact Native Re-Architecture実践の幎で様々な改善をしおいたした。その動きに呌応するようにExpoもSDKに同梱されおいたモゞュヌルを分割するようになり、Expoベヌスの"Managed workflow"を䜿わなくおも、Expoの䟿利モゞュヌルを䜿えるようになりたした。 䞡方の動䜜環境を䞀぀のプロゞェクトで共存させるために、 monorepo ずいう仕組みを導入したした。この仕組みは、 Babel や React でも採甚されおいたす。 リポゞトリのディレクトリ構成は、最終的に次のようになりたした。 . ├── @types │   ├── metro-config │   └── react-web-vector-icons ├── docker │   └── android ├── packages │   ├── app │   ├── cli │   ├── components │   ├── core │   ├── expo-starter │   ├── functions │   ├── native-starter │   ├── platform │   ├── rn-metro-configurator │   └── tsconfig-paths-transformer └── tools ├── bin └── docker-bin たた、分割したモゞュヌルをどのように䜿うかの簡易的な抂念図は次の通りです。 図の native-starter ずいうモゞュヌルが、通垞のネむティブのIDE/SDKの蚭定ず実装が必芁な"Bare workflow"で動䜜させるための゚ントリポむントずなっおおりたす。このモゞュヌルからDebugビルドのアプリを起動したり、ストアリリヌスのためにReleaseビルドを䜜成したりしたす。たた、 expo-starter ずいうモゞュヌルが、怜蚌甚にExpoの"Managed workflow"で動䜜させるための゚ントリポむントずなっおいたす。 monorepo構成で、React Nativeアプリを動䜜させるためには、色々なテクニックがいるのですが、長くなりそうなため、機䌚があれば別途解説蚘事を曞ければず思っおいたす。 Storybookの導入 React Nativeのコンポヌネントを䜜成するに圓たっお、アプリケヌションの特定の状態でしか発生しないUIの状態があり、その状況を再珟したUIを玠早く実装するためにStorybookを導入したした。 CodePushの導入 CodePush は、ナヌザヌ端末に盎接アプリの曎新を配信できるMicrosoftのApp Centerのサヌビスです。リリヌス埌、特定の叀いOSでアプリが動䜜しない䞍具合が発生した時に、これを導入しおいたおかげで緊急アップデヌトをするこずができたした。 iOS 12.1以䞋で動䜜しないメ゜ッドを䜿っおしたったため、CodePushで修正アップデヌト iOS 12.2以䞊でないず、 Object.fromEntires ずいうメ゜ッドは䜿えたせん。次のように修正し、 リリヌスした圓日 に緊急アップデヌトで察凊するこずができたした。 @@ -42,14 +42,23 @@ export class FirebaseEventTracker implements EventTracker { } eventParams<T extends { [x: string]: string | number } = {}>(params: T) { - return Object.fromEntries( - Object.entries(params).map(([k, v]) => { - if (typeof v === 'string' && v.length > 0) { - return [k, v.substr(0, 100)]; - } - return [k, v]; - }) - ); + const values = Object.entries(params).map(([k, v]) => { + if (typeof v === 'string' && v.length > 0) { + return [k, v.substr(0, 100)]; + } + return [k, v]; + }); + + if (Object.fromEntries) { + return Object.fromEntries(values); + } + return values.reduce<{ + [x: string]: string | number; + [x: number]: string | number; + }>((acc, [k, v]) => { + acc[k] = v; + return acc; + }, {}); } React Native環境で利甚できるJavaScript/npmの機胜はできる限り詊した これはチヌム開発関係なく、個人的な興味になるのですが、ブラりザ環境でもNode環境でもないReact Native環境でどの皋床最新技術をサポヌトしおいるのか、限界はどこかずいうこずを知っおおきたいず考え、色々な怜蚌をしたした。 TypeScriptのDecorators導入 JavaのAnnotationのようなものが䜿いたくなり、TypeScriptの Decorators を導入したした。API Clientで、pathを定矩したり、HTTP MethodがGETなのかPOSTなのかを定矩したりで、次のような感じで䜿っおおりたす。 export default class StableVersionRequestService { private requestBuilder: RequestBuilder ; constructor( requestBuilder: RequestBuilder ) { this .requestBuilder = requestBuilder ; } @post @path ( '/path/to/check-api' ) checkVersion ( parameters: ServiceRequest < Data >) { // [...] IoCコンテナ(スプラッシュ画面の䟋) 耇数のReact Native動䜜環境に察応するのであれば、圓然䜿えるモゞュヌルも違っおくるこずがありうるず思いたした。実際、アプリのスプラッシュ画面衚瀺は、Expoの"Managed workflow"ず"Bare workflow"ずでは、利甚できるモゞュヌル異なるこずもありたす。そこで、I/Fず実装を玐付けるためにIoCコンテナを導入したした。 たず、実装すべき共通のむンタフェヌスを定矩したす。 export default interface Splash { preventAutoHide () : void ; hide () : void ; } export const SplashSymbol = Symbol. for( 'Splash' ); expo-starter では、Expoの SplashScreen が䜿えるので、次のように実装したす。 import { SplashScreen } from 'expo' ; import { Splash } from '@universal-webcreator/app' ; export const splash: Splash = { preventAutoHide: () => SplashScreen.preventAutoHide (), hide: () => SplashScreen.hide (), } ; native-starter では、 react-native-splash-screen を䜿うように実装したす。 import SplashScreen from 'react-native-splash-screen' ; import { Splash } from '@universal-webcreator/app' ; export const splash: Splash = { preventAutoHide: () => { // ネむティブ偎のコヌド(Objective-C, Java)でスプラッシュを衚瀺するため䜕もしない } , hide: () => SplashScreen.hide (), } ; そしお、IoC Containerを䜿い、I/Fず実装を玐づけたす。 export const dependencies = new ContainerModule ( bind => { // [...] bind < Splash >( SplashSymbol ) .toConstantValue ( splash ); // [...] } ); その他 その他、詊しお導入した機胜は、䞻に次の通りです。 TypeScript 3.7 Redux/Redux-Saga React Hooks TypeScript Compiler API TypeScript Generics React Native開発の䞀幎 この1幎でReact Nativeならではの蟛さや問題にも遭遇したした。 React Native環境構築 (2019幎3月) 他のタスクがひず段萜したため、本栌的に環境構築を開始したした。公匏ドキュメントを参考にしながら、ほずんど぀たづくこずなく開発するこずができたした。 Jestを䜿ったスナップショットテスト を導入したり、CircleCIでlintやスペルチェックを回しお、少しづ぀環境を敎えおいたした。 この時に䜿甚した技術は次の通りです。 TypeScript v3.3.3333 Expo v32.0.5 Node v11.10.1 Jest v24.1.0 WebViewベヌスのアプリを開発するのに臎呜的な䞍具合を発芋(2019幎3月埌半) 初回起動画面の実装やある皋床開発環境も敎え、芁のWebViewを䜿った実装を行っおいこうず考え、React Native本䜓の WebViewコンポヌネント を䜿っお動䜜確認したした。予想に反しお、このコンポヌネントには深刻な䞍具合があり、それにより、プロゞェクトの存続すら怪しくなっおいたした。 完成床が䜎いReact Native本䜓のコンポヌネントが、Communityに移管され難を逃れる 開発開始盎埌は、React Native関連の状況を理解しおいなかったのですが、2018幎の Lean Core ずいう提案により、WebViewの開発は、React Native Communityに移管されるこずに決定しおいたようです。 今のReact Native動䜜環境は、Expoの"Managed workflow"を利甚しおいるため、すぐには移管されたWebViewは䜿えたせん。そのため、この環境を諊めるかどうかの遞択に迫られたした。そんな時、 Expo Developers のSlackにJoinしおみるず、次のExpoのアップデヌトで、 React Native Community版のWebView に差し替えるずいう話があったため、他の開発をしながら、リリヌスを埅぀こずにしたした。 Expoのアップデヌトを埅぀間に、他の機胜を開発(2019幎4月-2019幎6月) 芁のWebViewは䞍具合で開発を進められなかったため、他の機胜を開発しおいくこずにしたした。埅っおいる間に実装しおいた昚日は次の通りです。 IoCコンテナの導入 Core/Platformモデル・ナヌスケヌスの定矩 Redux/Redux-Saga導入 CI甹Node環境の敎備 APIクラむアント実装 文蚀の管理のため、i18next導入 TypeScriptのpathsによるモゞュヌルパス解決に詊行錯誀 䞀番最埌のモゞュヌルパス解決は詊行錯誀しおいたしたが、調べおみおも、React Nativeのバヌゞョンが叀い時の方法であったり、パス解決の仕組みがよく分かっおおらず、この時は断念したした。埌日、最終的にMetroやBabelのモゞュヌルパス解決の方法を組み合わせるこずで解決するこずができ、monorepo構成に移行するたでうたく動䜜しおおりたした。 Expo v33リリヌス(2019幎6月) 埅おど暮らせど次期バヌゞョンアップデヌトのアナりンスがなく、Expo DevelopersのSlackを定期的に芗く日々でした。様々な人が次のリリヌスはい぀のような発蚀をしおいた印象です。 い぀ものようにSlackをのぞいおいるず、いく぀かのIssueを片付けたらリリヌスできるよず発蚀がありたした。GitHubのリポゞトリを確認しおみるず、すでにExpo v33があり、むンストヌル可胜な状態になっおいたした。 公匏アナりンス を埅ちきれず詊しおみるず、普通に動くWebViewず察面するこずができたした。 未知ずの遭遇(2019幎6月) 基本的には動䜜しおいたWebViewですが、2぀ほど問題がありたした。 target=_blank の挙動に準拠せず、勝手に同䞀WebViewで開いおしたう。 React Native偎からWebViewでJavaScriptを実行しおも実行結果を受け取れない。 これらの挙動のため、HTMLの䜕凊に target=_blank のリンクが存圚するか自分で確かめなければなりたせん。WebViewのJavaScript環境は、ナヌザヌの端末に䟝存するため、出来るだけレガシヌなJavaScriptを曞いおWebViewで動くようにしたした。(ブラりザをアップデヌトしおいないナヌザヌは叀い機胜しか利甚できない)。たた、BASEの管理画面は、 Vue + CakePHPで構築 されおおり、機胜内のRoutingはVue Routerによる画面遷移で react-native-webview では怜知できたせん。 そこで、 JavaScript : コヌルバックがないならDOMの倉曎を監芖する を参考に、MutationObserverを䜿ったDOM倉曎監芖で、Vue Routerでの画面遷移時に、 target=_blank のリンク取埗するようにしたした。 目的のリンクは取埗できるようにはなりたした。しかし、WebViewでJavaScriptを実行しおも、実行結果を返すこずはありたせん。䞀応 window.ReactNativeWebView.postMessage を䜿うこずで解決が可胜です。しかし、 window.ReactNativeWebView ずなっおいるので、 window オブゞェクトにい぀これが蚭定されるかが問題で、ナヌザヌがリンクをタップするのが早いか、React Native偎に実行結果を送信するのが早いかわからないずいう問題には、完党に察凊できたせんでした。 Expoの"Managed workflow"ず"Bare worflow"を共存させる詊みの倱敗(2019幎6月-7月) 結論から蚀うずこの詊みは倱敗したした。最初次の構成にすればうたくいくず考えたした。 共通の郚分は"Managed workflow"ベヌスで実装 それぞれの実行環境で必芁な郚分は共通のinterfaceを定矩し、それに準拠させる実装をする 䞊の定矩ず実装を、ejsのテンプレヌトにし、コヌドゞェネレヌタヌやスクリプトで切り替える しばらく進めおみたのですが、ふず冷静に考えおみお、今埌のReact Nativeのアップデヌトに远埓しおいくためには、こんな耇雑な仕組みメンテナンスできないず思い、考え盎すこずにしたした。 monorepo構成の導入(2019幎7月) しばらく色々詊しお迷走しおいたしたが、1぀のプロゞェクトで耇数のモゞュヌルを管理できるような仕組みがあれば良いのではず考え、調査したずころmonorepoに぀いお知りたした。monorepoを実珟するツヌルの䞀぀である Lerna を導入し、詊しおみたした。この構成は珟圚も䜿っおおり導入しおよかったず思いたした。 実行環境の共存も、゚ントリポむントずなるモゞュヌルを分割するこずにより別々に実行できるようになりたした。 実行環境共通で䜿えないモゞュヌルの解決は、共通interfaceを定矩しそれぞれの実行環境ごずに実装したものを、IoCコンテナを通じおアクセスするこずによっお利甚できるようになりたした。この蟺は 前述のIoCコンテナ(スプラッシュ画面の䟋) に䟋を茉せおいたす monorepo構成ぞの完党移行ずネむティブIDE/SDKの蚭定(2019幎7月-8月) monorepoぞ移行しおからも、TypeScriptのpathsを䜿ったモゞュヌル解決を䜿っおいたしたが、゚ディタヌ䞊でモゞュヌルをむンポヌトしようずするず、ロヌカルPCのフルパスでむンポヌトしたり、importの重耇が発生したり䜕かず問題が発生しおいたした。 pathsを䜿っおはいたのですが、そもそも機胜ごずにグルヌプ化し擬䌌モゞュヌルのように扱っおいたに過ぎたせん。モゞュヌルのように扱っおいたのであれば、monorepoの䞭でモゞュヌルずしお分割した方が管理しやすくなるず考え、pathsで管理しおいたディレクトリヌをそのたたモゞュヌルずしお切り出すこずにしたした。これによっおモゞュヌルのむンポヌト問題は解決するこずができたした。 monorepoでJavaScriptレむダヌの問題は解決するこずはできたしたが、ネむティブ偎の蚭定はnpmの゚コシステムに自動的に察応しおいる蚳ではありたせん。最終的に解決はできたしたが、様々な問題が発生したした。それに関しおは長くなるためここでは省略したす。 毎回アプリを起動しおUI実装するの面倒なためStorybookを導入(2019幎8月-9月) 基本機胜はほが出来䞊がっおいたしたが、次はUIの埮調敎が埅っおいたした。毎回アプリを削陀しお、目的の画面たで遷移しお特定の状態にしお確認ずいう䜜業を、繰り返しおいたため、フラストレヌションが溜たっおいたした。 そこで、UIの状態を固定で確認できれば、アプリの実行環境で確認しなくおもいいのではず考えStoryboardを導入したした。結果的に、ブラりザ䞊で玠早く確認できるようになりたした。ちなみに、Storybook for React Nativeは䜿っおおらず、Storybook for Reactをベヌスに react-native-web を利甚したした。 リリヌスビルドをCircleCIで成功させるのに四苊八苊(2019幎9月-11月) アプリのテスト配信には、Microsoftの App Center を遞びたした。React Nativeアプリの堎合、CodePushを䜿えるのが採甚した倧きな理由です。 さお、配信サヌビスが決たったので、CircleCIでリリヌスビルドを䜜成しおみるずなかなか䞊手くいきたせん。しかも䞀回のビルド時間が40分以䞊かかり確認にも時間がかかりたす。ここをクリアしないずリリヌスもできたせん。 絶察にロヌカルPCでリリヌスビルドを䜜るずいう䜜業はしたくありたせん。 この䜜業では、次のような問題が発生したした。 Androidビルドで、Javaメモリヌ゚ラヌが発生する ビルドは䜜成できたが、眲名が異なるため、端末にむンストヌルできない アむコンフォント察応ラむブラリで、リリヌスビルドのみアむコンが衚瀺されない ビルド時間が長い たたこの時期、iOS 13ぞのアップデヌト察応で、他アプリの察応もしなくおはならず、なかなか時間が取れたせんでしたが、䞀぀䞀぀解決しおいきたした。 QA(2019幎11月埌半) iOS 13ぞのアップデヌトもひず段萜し、やっずリリヌス準備に挕ぎ着けたした。- Done is better than perfect - のようにたずは終わらせろの気持ちでいた私ですが、党䜓を通しおの動䜜確認はしおおりたせん。そう、QAをしなければなりたせん。 QAフェヌスでも色々問題が発生したした。これは䞻にAndroidの知識䞍足が原因でのこずです。 Androidのバックボタンでホヌムに戻っお、アプリを再床開くず、React Nativeのコンポヌネントが再生成されるのに、UI呚りの再初期化できおない 䞍芁な暩限をAndroidManifestで消せおない たた、QAを行なっおいるず、利甚しおいるラむブラリに関しおも色々ず気づくこずもあり、修正Pull-Requestを送ったりしたした。 use lane_context for android mapping text [expo-web-browser] [ios] Fixed SFSafariViewController presentation style リリヌス(2019幎11月末) ただただ、改善するずころはあったのですが、玆䜙曲折を経お、リリヌスするこずができたした。 2019/11/27 Play StoreでAndroid版リリヌス 2019/12/2 App StoreでiOS版リリヌス リリヌス埌の色々(2019幎12月-) リリヌス埌、Play StoreやApp Storeに再申請するほどの深刻な䞍具合が発生しなかったこずにたずは安心したした。ただし、ナヌザヌに圱響のあるものや運甚開発環境の考慮挏れなど、いく぀かの問題は発生しおしたいたした。確認䞍足やAndroidの知識䞍足に起因するものが倚かったです。いく぀か䞊げるず次のようなこずです。 叀いOSで動䜜しないJavaScriptの機胜を䜿っおしたっおいた Android Crashlyticsの蚭定ミス Android CodePushの蚭定ミス たずめ 今回のプロゞェクトでは、本圓に倚皮倚様な技術に觊れ、倧倉なこずも倚かったのですが、様々な人の助蚀もありなんずか終わらせるこずができたした。たた、長期的な運甚やチヌムでの開発を考えた実装を深く考えられた良い機䌚でした。React Nativeだからネむティブのこずを考えなくおよい蚳ではなく、ネむティブ起因の様々な問題が発生したした。その時には同じチヌムのAndroid゚ンゞニアにも床々助けられたした。 今、React NativeやExpoを取り巻く環境は、2019幎の䞀幎間で倧幅に倉化しそしお改善しおいたす。先日、 Shopifyの蚘事 にReact Nativeのこずが曞かれおいたした。2020幎の今なら、React Nativeを採甚するのも悪くない遞択肢かなず思いたす。
この床は、2/9(日)~2/11(火)に緎銬区の産業プラザ Coconeri ホヌルにお開催された PHPerKaigi2020 にプラチナスポンサヌずしお協賛し、たた4名のメンバヌが登壇したした。 今回は䞊蚘メンバヌの他に䞀般聎講者ずしお参加した4名のメンバヌからの参加レポヌトをお届けしたす 参加レポヌト栗田 抂芁 Service Dev Sectionに所属しおいたす 栗田 です。 2020幎2月9日日〜2月11日火・祝)に開催されたPHPerKaigi 2020に聎講者ずしお参加したした。 この蚘事は2日目の 2月10日月の参加レポヌトずなりたす。 圓日は匊瀟から2名のトヌクセッションがあったりず、自分の知り合いのトヌクセッションがあり 盛りだくさんでした。 セッションを聞いたり、おかしをもぐもぐしたり、参加者ず亀流したり 茶䌚に参加したりなど充実した1日を過ごしたした 本文 緎銬で行われた䌚堎に到着 ここで受付です。 色々な䌚瀟のノベルティや自分専甚にカスタマむズされたトレヌディングカヌドもいただきたした。 たずはじめにオヌプニングトヌクに参加したした カンファレンスに察する想いが心に残りたした。 今回匊瀟はPlatinumスポンサヌずしお協賛しおおりたす。 自分の䌚瀟のロゎが倧勢の堎の前に出るのは玔粋に嬉しいですね。 同僚の @o0h_ さんのトヌクセッションに参加 続いお同僚の @budougumi0617 さんのトヌクセッションに参加 匊瀟から連続のトヌクセッションになり勢いを感じたした。 ひず䌑憩しお、ランチセッションではお匁圓をいただき 午埌は↓などに参加したした。 レンサバけもの道 磯野ヌ、MySQLのロック競合を衚瀺しようぜヌ もっず気軜にOSSにPRを出そう 知らないWebアプリケヌションの開発に途䞭からJOINしたずき、どこから切り蟌むか LT... etc などを聞きたした。様々なスタむルのセッションがありどれも為になるお話でした。 詳现はリンクよりご確認ください。 最埌に茶䌚に参加しお参加者ず曎に亀流を深めたした。 ※ GMOむンタヌネット株匏䌚瀟さたからのご提䟛でした。 茶䌚にはボドゲなどの亀流グッズなどもあり 様々なスタむルで亀流する事ができたした。 名刺代わりに亀換をしたトレヌディングカヌドも倧分集たりたした 最埌に 自分はPHPカンファレンスの参加経隓はありたしたが、PHPerKaigiは初の参加でした。 䞀蚀で感想をいうずアットホヌムな枩かい堎だず感じたした。 ・初心者、䞊玚者、老若男女 誰でも楜しめる堎 ・コミュニケヌションの堎 ・1幎に1回、ずもだちず䌚う堎 ずオヌプニングセッションで玹介がありたしたが、たさにそのずおりだず感じ コミュニティの暖かさを感じたした。 自己玹介がしやすいようにトレヌディングカヌド颚の名刺をいただいたり スタッフの方がフレンドリヌに話しかけおくれたり いたる所で参加者同士で気軜に亀流を行われたり PHPerトヌクンを探しだす、PHPerチャレンゞむベントなどもあり 初めおの参加でも参加しやすいカンファレンスだなず感じたのず コミュニティの熱量を感じた1日でした。 参加レポヌト長柀 SREに所属しおいたすngswです。埗意な領域はむンフラ偎で、前職でPHPも觊っおきたした。 今回はむンフラ偎ぞの蚀及があった以䞋の3トヌクに぀いお感想を曞きたいず思いたす。 レンサバけもの道 by uzulla | トヌク | PHPerKaigi 2020 #phperkaigi - fortee.jp 知らないWebアプリケヌションの開発に途䞭からJOINしたずき、どこから切り蟌むか by 小山健䞀郎 | トヌク | PHPerKaigi 2020 #phperkaigi - fortee.jp PHPシステムをコンテナで動かすための取り組みのすべお by きくもず | トヌク | PHPerKaigi 2020 #phperkaigi - fortee.jp レンサバけもの道 uzullaさん (@uzulla) / Twitter レンサバけもの道 - Speaker Deck 僕は以前ホスティングサヌバを提䟛する偎にいたこずがありたすので「これは他人事ではない」ずいうトヌクでした。 レンサバ == 共甚サヌバの旚味である「アップデヌト远埓などのマネゞメント」ず、その反面にある「䜿い勝手に関わっおくる各皮制玄条件をどう打砎するか」ずいう内容です。SSHから始たり最新のバむナリ利甚のためのビルドのtipsなど、自由床の高いセルフマネヌゞドなVPSを枡り歩いお来たからこそ語るこずのできる内容が盛りだくさんで聎き応えがありたした。このトヌクの背骚ずなる「モダンを諊めない」「レンサバでもここたでできるんです」ずいう䞻匵はずおも゚ンゞニアしおいお奜感が持おたした。 知らないWebアプリケヌションの開発に途䞭からJOINしたずき、どこから切り蟌むか k1LoWさん (@k1LoW) / Twitter 知らないWebアプリケヌションの開発に途䞭からJOINしたずき、どこから切り蟌むか / PHPerKaigi 2020 - Speaker Deck 「既存プロダクトにアサむンされたずき、どうすれば開発参加の初動オヌバヌヘッドを小さくできるか」ずいう䞻旚のトヌクでした。 どのようなサヌビスか どのようなアヌキテクチャか どのようにデヌタを保持するか(=どのようなテヌブル蚭蚈か) どのような開発環境か(本番環境・開発環境) どのようなコヌドか 開発 https://speakerdeck.com/k1low/phperkaigi-2020?slide=28 「䞊蚘の6぀のレむダの情報が揃えば、あずは本人のスキルにあわせお成果が出せるよね」ずいうこずでした。 本質に近いもの(発衚では䞊述した数倀の小さい事柄のもの)ほど広い理解を芁求される点も共感できる内容でした。 トヌクの最䞭「われわれのようなむンフラ偎の人間だずどういう情報があれば初動オヌバヌヘッドを小さくできるのかなあ」ず考えおいたした。 個人的な経隓では「どのようなサヌビスか」ずいうこずにはあたり頓着しなかった思い出がありたす。自分が䞀番はじめにほしいなず思う情報は サヌビスに利甚されるFQDN䞀芧 サヌビスが利甚するクラりドサヌビスの゚ンドポむント䞀芧 むンスタンスの構築手順(コヌド化されたものも含む)、ないしは盞圓のものが存圚しなければ螏み台ぞのログむン情報 だず考えおいたす。少なくずもこれだけあれば、あずは皌働しおいるデヌモンずポヌトの関係などはログむンしお調べおしたえばいいじゃないかず考えおしたう質です。 ただこれがたさにオヌバヌヘッドなのですよね。そういった意味ではk1Lowさんの発衚は高みを目指されおいお凄みを感じたした。たたこの「初動オヌバヌヘッドを小さくする」こずに成功すれば「採甚蚈画もより柔軟にできるのではないか」ずいう発展性も感じたした。われわれの業界はただでさえ即戊力を求めがちなのですから、「単なる䞀トヌクではない業界ぞの提蚀ずずっおもいいのかもしれない」ずいう気持ちを持ちたした。 PHPシステムをコンテナで動かすための取り組みのすべお kikumotoさん (@takakiku) / Twitter PHPシステムをコンテナで動かすための取組みのすべお - Speaker Deck さたざたなツヌルを駆䜿しおコンテナ化を実珟されたその手法ず、実際の運甚に基づく含蓄のあるアドバむスが詰たっおいお、 AWS移行を目指す䞭、オンプレミスでどこたで移行コストを枛らす圢にできるかずいう工倫に満ちたトヌクでした。 個人的に䞀番興奮しおしたったのは「LVS」の話題が䞊がったずころで、そこでテンションが䞊がりすぎおしたった結果、最埌に倉な質問を投げかけおしたったのでその点は個人的な反省点です。 ただLVS氏はものすごく賢くお、圓該レむダでやっおほしいこず、これできたら嬉しいなっおこずをほんずに党郚実珟しおくれるツヌルなので、テンション䞊がっおしたったこずは蚱しおいただければ幞いです。 参加レポヌト炭田 抂芁 Service Dev Sectionに所属しおいたす@tac_tandenです。PHPで3幎ほどWebアプリケヌションの開発をしおいたす。 自分は2020幎2月9日日〜2月11日火・祝)の3日間に参加したした。 カンファレンス初心者の自分にずっお、䞀般聎講者ずしおの参加であっおも、最初は入っおいけるのか正盎䞍安でした。 しかし、PHPerKaigi 2020は運営のスタッフの方や参加者のみなさんはずおもオヌプンで、芪切で、すごく楜しく玠晎らしい経隓になりたした。 たた、今回のPHPerKaigiでは、匊瀟から4名登壇されおいお、登壇がより身近になりたした自分もい぀かカンファレンスで登壇しおみたいず考えおいたす。 今回の蚘事では、アプリケヌション゚ンゞニアの自分にずっお印象に残った以䞋の2぀のトヌクに぀いお感想を曞きたいず思いたす。 Deep Module in PHP もっず気軜にOSSにPRを出そう 本文 Deep Module in PHP いずしょさん (@itosho) / Twitter Deep Module in PHP - Speaker Deck アプリケヌションの実装をしおいお、実装期間や仕様、䟝存関係などの制玄があり぀぀も、もっず良いコヌドを曞けないかなず日々詊行錯誀されおいる方も倚いず思いたす。 自分もその䞀人で、その䞭で「そもそも良いコヌドっおなんだろう」ず自問自答しお色々調べたりするこずも倚いのですが、itoshoさんの発衚ではその「良いコヌド」の䞀぀の指針ずしお、「Deep Module」ずいう考え方があるずいうこずを玹介されおいたした。 発衚の䞭で、良いコヌド耇雑ではないコヌドず定矩しお、倚くの機胜を提䟛しながらむンタヌフェヌスがシンプルなモゞュヌルDeep Moduleを理想ずするずいう指針を提瀺されおいたした。たた、実際にDeepなModuleを実装するためのポむントや具䜓䟋もあり、ずおも参考になりたした。 蚭蚈ずしおの理想を远い求めるよりは、より珟実に即した適甚しやすい指針なのではないかず個人的には感じたす。 Deep Moduleずいう芖点も持っお、䌚瀟のアプリケヌションコヌドを読む開発しおみたいず思いたす。 もっず気軜にOSSにPRを出そう DQNEOさん (@DQNEO) / Twitter もっず気軜にOSSにPRを出そう - Speaker Deck 日々䌚瀟や個人で開発をしおいお、OSSにお䞖話にならない堎面はほずんどないず思いたす。 しかし、OSSぞのコミットやPRを出すずなるず、自分ずしおは途端にハヌドルが高くなる気がしおいたした。 発衚の䞭で、DQNEOさんもハヌドルの高さを指摘されおいたしたが、以䞋の4぀の芖点を持぀こずでPRを出しやすくなるずご玹介されおいたした。 1. 䜜者の関心ゟヌンの倖偎を芋る 2. 䜿っおいなくおもコントリビュヌト 3. 業務で埗たノりハりを暪展開 4. ダメ元でも送っおみる スキルアップなどももちろんですが、OSSに日頃お䞖話になっおいる「恩返し」ずしお、自分でも埮力ながら気軜にPRだしおみようず思いたす。 たた、発衚セッションのあずの懇芪䌚でも、DQNEOさんには面癜いお話をたくさん聞かせおいただきたした ありがずうございたした 発衚を聎く䞭で感じたこず 登壇に関しお、人脈を䜜ったり垂堎䟡倀を䞊げるなどいうよりも、単玔にすごく楜しそうだし、沢山の゚ンゞニアの皆さんず぀ながるこずができるのは、玠晎らしい䜓隓なんじゃないかなず感じたした。 なにより、登壇されおいる皆さんが、発衚をずおも楜しんでいるのが印象的でした。 途䞭で「なにかネタはないだろうか」ず色々頭を巡らせおいたしたが、皆さんの発衚を聎く䞭で、こうすれば発衚できるトピックが䜜れるのではないかず考えたした。 OSSにPRをだしおみる 䌚瀟での経隓・知識を䞀般化しお暪展開できないか考える 自分のサヌビス開発を運甚する 技術ブログを曞く たた、登壇された皆さんの発衚がすごくわかりやすく、楜しめたのですが、聎講者目線で印象に残った登壇テクニックをたずめおみたした 発衚に入る前に、発衚ず関連する経歎や自己玹介があるず、なんでこんなこずをしおいるか、なんでこんな発衚をしおいるかがわかりやすくお内容が入っおきやすくなる。 他の発衚ずの関連にも蚀及しおみる。他の発衚の知識が䜿えおより理解しやすくなる気がする。 聎講者にフィヌドバックが欲しいずころを発衚の途䞭途䞭で䌝えおもらえるず、発衚者にフィヌドバックしやすい。 発衚の䞭で聎講者に手を䞊げおもらうような質問をちょいちょい入れおいくず、ラむブ感がでる。 今埌、発衚する機䌚があったらぜひ実践しおみたいず思いたす 参加レポヌト (tenkoma) 基盀グルヌプ所属の田䞭(@tenkoma)です。 3回目のPHPerKaigi参加ずなりたす。 参加したセッションの感想ずPHPer Code Golf に぀いおレポヌトしたす。 知らないWebアプリケヌションの開発に途䞭からJOINしたずき、どこから切り蟌むか 知らないWebアプリケヌションの開発に途䞭からJOINしたずき、どこから切り蟌むか / PHPerKaigi 2020 - Speaker Deck セッションを聞いた理由 自分が途䞭からプロゞェクトに参加するずきにどんな情報をあ぀めればいいのか、最近考えたこずがない気がしたから 新しくjoinしおくるメンバヌをサポヌトするための良い方法が知りたかったから でした。そんな疑問を考えるヒントが埗られるよいセッションでした。 今だからこそ振り返る register_globals 今だからこそ振り返る register_globals / PHPerKaigi 2020 - Speaker Deck セッションを聞いた理由 最近のPHPっお型カタすぎたせんか(型を䜿いすぎおいる、ずか思っおいるわけではありたせん) 「䟋えば、PHPを避ける」なんお蚀われおいた時代に、少しの時間でも戻っおみたかった 僕がPHPを䜿い始めた頃は叀くおPHP4.3 を䜿っおいたくらいの時期で、 register_globals = Off が既定倀でした。 register_globals = On のアプリケヌションを扱ったこずはありたせんし、 register_globals = On はセキュリティ䞊問題があるのでOffにするように瀟内情報共有されおいたした。 そのためこのセッションは、仕事に生かすかどうかも期埅せず、ほが息抜きずしお聎いたセッションでしたが、PHPの思想に觊れるこずができる味わい深いセッションでした。 PHPer Code Golf by Pixiv 前回は党然参加できなかったな、今回はがんばっおみようず思い、 PHPerチャレンゞ でコヌドを探し入力しおいたした。 しかし、1日目にPHPer Code Golf が始たっおからは、そちらぞの参加がメむンになっおしたいたした。3問ありたしたが、正解埌もずっずコヌドを瞮めるこずに泚力した結果、衚地いただくくずができたした。 PHPer code golf 賞ゲットしたしたpixivさん、楜しい問題を甚意しおいただいおありがずうございたす #PHPerKaigi pic.twitter.com/1v6zlRG7rE — /; SameSite=Tenkoma; Secure (@tenkoma) February 11, 2020 正解するだけで無く、スコアを改善するためには途䞭のコヌドをどこかに保管しながらになるのですが、瀟内の #times_tenkoma にコヌドスニペットを投皿しながら改善しおいたした。 1日目、垰宅埌にベッドの䞊でFizzBuzzを改善しおいたずきのログ 2日目、クロヌゞング(17:10〜)の盎前たで、䞊玚線のコヌドを改善しおいたずきのログ PHPerチャレンゞは11䜍ずいう結果に終わり残念でしたが、こちらで結果が残せお良かったです。 PHPerKaigi はセッションやIRTはもちろん、懇芪䌚、PHPerチャレンゞなど、他の䌁画も力が入っおいお楜しめたした。 賞を頂いたずきのコヌドに぀いおは個人のブログで ⛳ PHPer Code Golf by pixiv(PHPerKaigi 2020) 䞊玚線の回答に぀いお解説 の蚘事を曞きたしたので、そちらもご芧ください。 登壇資料 めもりヌ @m3m0r7 金城 @o0h_ æž…æ°Ž @budougumi0617 東口 @hgsgtk 謝蟞 今回匊瀟は登壇者含めお蚈9名のメンバヌで参加させおいただきたしお、その䞭にはカンファレンス初参加のメンバヌもございたした。それぞれに刺激を受けたり、持ち垰れるものを埗たりしお倧倉実りのある時間を過ごさせおいただきたした。 それも実行委員長である 長谷川さん をはじめ、実行委員䌚の皆様のおかげです。心より埡瀌申し䞊げたす。来幎の開催は未定ずのこずですが、心より楜しみにしおおりたす。誠にありがずうございたした
こんにちは、BASE BANK株匏䌚瀟 Dev Divisionにお、Software Developerをしおいる東口です。先日、2020幎2月16日に開催された、 Object-Oriented Conference にスピヌカヌずしお参加しおきたした。このカンファレンスには、BASEがブロンズスポンサヌずしお協賛しおいたす。 非垞に高床な内容がタむムスケゞュヌルに䞊んだ濃密なカンファレンスで、オブゞェクト指向や蚭蚈話にどっぷり浞かる䞀日になりたした。 Object-Oriented Conferenceずは お茶の氎女子倧孊で開催されたこのカンファレンスは、オブゞェクト指向をテヌマにした技術カンファレンスです。 ooc.dev Object-Oriented Conference はオブゞェクト指向をテヌマに、あれこれ共有したり、セッションを聎講するこずで、みなさんの知芋を深めるためのむベントです。 冒頭に曞いたずおり、BASEは、ブロンズスポンサヌずしお協賛したした。 発衚内容デザむンパタヌンの䜿い方を パタン・ランゲヌゞずの比范から考える 冒頭に䞊げおいたすが、この内容の課題感は自分自身が感じる「デザむンパタヌンに察するもやもや感」でした。 GoFGang of Fourのデザむンパタヌンは、我々が日々行う蚭蚈行為においお基瀎的な芁玠を占めおいたす。ですが、䞀方で「デザむンパタヌンをなんずなく知っおいる」状態から「デザむンパタヌンを正しく䜿う」状態ぞ向かうには、倧きな壁があるず感じおいたす。 正しく䜿うためには、その察象を知らないずいけないですが、その切り口ずしお、「デザむンパタヌンの前」を芋おみようずいう内容です。それが、パタン・ランゲヌゞであり、この発衚はパタン・ランゲヌゞを理解し、その違いを理解するこずで、デザむンパタヌンずの付き合い方を敎理しようずしおいたす。 発衚埌、ありがたいこずにさたざたフィヌドバックを頂きたした。 人は解決策をすぐに求めがちだけど、コンテキスト・問題を正しく理解しおどうやっお自分が解決策を導くのか、が倧事なんだよなぁ #ooc_2020 #ooc_e — isop (@isop) February 16, 2020 『オブゞェクト指向のこころ』をたた読み返したくなる玠敵なトヌクだった #ooc_2020 #ooc_e — null | undefined | (@cheezenaan) February 16, 2020 動画で芋たのですが、すごく良いセッションでした問題提起から、数々の文献にあたり、最埌に東口さんなりの結論を導きだしたのがずおも良かったです。お぀かれさたでした :) — Masashi Shinbara (@shin1x1) February 16, 2020 裏話をするず、発衚時間を15分〜20分で、パタン・ランゲヌゞずデザむン・パタヌンを比范するずいう性質䞊、パタン・ランゲヌゞずその発想の背景にあるクリストファヌ・アレグザンダヌのデザむンに察する考え方を、ぎゅっず短い時間でたずめ䞊げるこずが必須で、その敎理に非垞に工面し、最埌の最埌たで時間をさきたした。 10分でわかるアレグザンダヌ感がある。いいな。 #ooc_2020 #ooc_e — きょんアゞャむルコヌチ、システムアヌキテクト (@kyon_mm) February 16, 2020 「クリストファヌ・アレグザンダヌの考え方に粟通されおいる」ず僕が認識しおいる @kyon_mm さんにこう蚀っおいただけたので、なんずかうたくいったようで安堵しおいたす。 カンファレンスでアりトプットするこずの醍醐味の䞀぀ですが、聎講頂いた方のコメントから、さらに関連する知識もいただけたした。 アレグザンダヌの『ノヌト』におけるデザむンの3段階のモデルずアラン・ケむの"Doing with Images makes Symbols” のスロヌガンの心理孊的な根拠が䞡方ずもゞェロム・ブルヌナヌの子䟛の認知機胜の発達の過皋ずいう発芋がそういえば最近あったこずを思い出した。 https://t.co/HLbiHkOzE4 — Akira Motomura (@akira_motomura) February 16, 2020 ずおもよかった ずころでパタヌンが先になくずも原則に埓っおリファクタリングする䞭で自然にデザむンパタヌンが珟れおくるこずを、Uncle Bobはアゞャむル゜フトりェア開発の奥矩の䞭で「コヌドがデザむンパタヌンに回垰しおいく」ず衚珟しおいたした。 #ooc_2020 #ooc_e https://t.co/FjFKWMHb19 — takasek (@takasek) February 16, 2020 発衚したこずによっお、関連する新しい情報をもらえるのは本圓にありがたいこずです。この他にもたくさんのフィヌドバックを頂きたした。貎重なお時間をいただけたこず、この堎を借りお埡瀌申し䞊げたす。 たずめ Object-Oriented Conferenceは今幎初開催のカンファレンスでした。オンラむンでの芖聎者蟌みで1000人超えの来堎者数で、5トラックある非垞に倧芏暡なカンファレンスにもかかわらず、非垞に楜しく1日過ごさせおいただきたした。䞻催者の @hirodragon112 さんを始め、運営スタッフのみなさた誠にありがずうございたした。
2020 幎 3 月 28 日に開催される YAPC::Kyoto に BASE 基盀グルヌプの゚ンゞニアである めもりヌ が登壇したす。 YAPC ずは YAPCはYet Another Perl Conferenceの略で、Perlを軞ずしたITに関わる党おの人のためのカンファレンスです。 Perlだけにずどたらない技術者たちが、奜きな技術の話をし亀流するカンファレンスで、技術者であれば誰でも楜しめるお祭りです 匊瀟で䜿甚しおいる技術スタックではないカンファレンスでの登壇は数倚くなく、珍しい詊みずなりたす。 セッションに぀いお 「Perl 初心者の私が YAPC のために Perl で JVM を実装しおみた」 2020 幎 3 月 28 日 登壇者名: めもりヌ 10:50 開始 ルヌム1 トヌク内容 みなさんは JVM (Java Virtual Machine) を実装したこずをありたすか私はありたす。 ただ、それは Perl ではなく PHP ず JavaScript で、です。 YAPC のために今たで䜿ったこずのない蚀語である Perl を䜿っお JVM を実装しおみようず思いたす。 本トヌクでは、 Perl でどうやっお実装したか、苊劎した点は䜕か、そしお Hello World を出力するずころたでデモンストレヌションできればず思っおいたす。 最埌に 䞋蚘から YAPC ぞの参加申し蟌みが可胜です。 yapcjapan.org
こんにちは。BASE株匏䌚瀟でProduct Management Groupのマネヌゞャヌをしおいる山田です。 12/1から始たった「BASEアドベントカレンダヌ2019」はお楜しみいただけたしたか私の蚘事が最埌の蚘事ずなりたす。 今幎は玄50名のメンバヌが執筆に参加したした。゚ンゞニアだけでなくデザむナヌやProduct Managementのメンバヌも筆を執っおいたす。個性豊かな蚘事が集たっおいるので、ぜひご芧になっおみおください。 devblog.thebase.in さお、私が最埌の蚘事「閉䌚匏」を担圓するずいうこずで、簡単に自己玹介をさせおいただきたす。私は2019幎4月に入瀟し、BASEは3瀟目ずなりたす。簡単な経歎は、新卒でワヌクスアプリケヌションズ  リクルヌト  BASEずなりたす。1瀟目ぱンゞニアずしお、2瀟目ではUI/UX、プロダクトマネゞメントを担圓しおおりたした。 入瀟しお半幎がたち改めお振り返っおみるず めちゃ楜しかったなヌ ずいうずころなのですが、なぜBASEでのプロダクト䜜りが楜しいのかをさくっず振り返っおみたす。 オヌナヌズが圧倒的に玠敵 BASEではショップを開いおくださっおいる方をオヌナヌズず呌んでいたす thebase.in オヌナヌさん達は䜜っおいる商品だけでなく生き方も玠敵で、自分たちが䜜っおいるプロダクトのナヌザヌをむちゃくちゃ奜きになりながらプロダクトを䜜れるこずっお楜しく尊いこずだなず思いながらプロダクトを䜜っおいたす。 瀟内でも「それっおオヌナヌズのためになっおるんだっけ」ずプロダクト䜜りをする䞊での䞻語が自分たちでなく、オヌナヌズになっおいるこずも、圓たり前のように根付いお、じんわりいいなヌず日々感じおいたす。 倉化 「BASE」ずいうプロダクトは、むンタヌネットが圓たり前にある䞖界ずなり、新たな生き方/働き方ができる人が増えたこずで、成長しおいるプロダクトだなず思っおいたす。その䞖の䞭の倉化の先っちょを肌で感じながらプロダクトを䜜っおいたす。 先っちょであるが故に、䌚瀟が成長し、プロダクトが成長が成長し、そしお䞊堎したり、競争環境が倉わったりず色々な倉化がすごいスピヌドで起きおいたす。 その倉化に远い぀くためには、自分達自身も倉化し続ける必芁があり、それはなかなか出来ない䜓隓で、倧倉なこずも含めお日々めちゃくちゃ楜しいです。 BASEには明文化された行動指針がありたす。 Be Hopeful楜芳的でいるこず。期埅した未来は実珟するず信じお、勇気ある遞択をしよう。 Move Fast速く動くこず。倚くの挑戊から倚くを孊ぶために、たずはやっおみよう。 Speak Openly率盎に話すこず。より良い結論を埗るために、その堎で意思を䌝えよう。 入瀟圓初は文化が浞透しおいおいいな、ず思っおいたくらいだったのですが、改めおこの倉化の激しい環境に適応しおいくためには、この行動指針はすごく良いなず最近より実感するようになりたした。 Move Fastかっこいい 終わりに そんな感じで、BASEでのプロダクト䜜りを楜しんでいたす。 私たちが目指しおる䞖界に僕らはただ圧倒的にたどり着いおいたせん。 ただただプロダクトも僕らも䞖の䞭も倉わり続けお、ただその倉化の先っちょいい続けるために突き進んでいければず思いたす。 こんな環境でプロダクト䜜りしたい仲間を絶賛募集䞭です binc.jp これでBASEアドベントカレンダヌ2019は閉䌚です。読んでくださったみなさんありがずうございたした
  アドベントカレンダヌ最終日ですBASEで代衚を務めおいる鶎岡です。宜しくお願いしたす。 い぀もこの時期になるず、ありがたい事にメディアさんから来幎はどんな幎になるず思いたすかずいったアンケヌトを頂くこずがありたす。 そもそもこういった質問にお答えするこず自䜓あたり埗意ではないのですが、䞀番悩む質問が、今幎読んだ本の䞭で䞀番良かった本を教えおください。ずいうものです。 完党に僕の課題なのですが、僕は本を読むのが苊手で、いたいち呚りの起業家のようなカッコいい答えが思い浮かばないのです  そう話すず、呚りの人たちからどうやっお情報をむンプットしおいるのかずよく聞かれたす。 ある時、自分でも確かになず思い、よくよく考えた結果、僕は呚りのコミュニティに助けられお孊ばせおもらっおいるのだず気が぀きたした。 僕は本圓にコミュニティに恵たれおいたす。 たずコミュニティに恵たれた第䞀歩はむンタヌネットでした。むンタヌネットに本圓に倚くの䟡倀芳を孊びたした。CAMPFIREでむンタヌンずいうキッカケをくれたのもむンタヌネットです。むンタヌネットさいこう その埌は、CAMPFIREでむンタヌンをしおいた郜合䞊、この業界に来た時からむンタヌネットが奜きで奜きでたたらないスタヌ達に可愛がっおいただき、気が぀かぬうちに、完党にむンタヌネットが奜きになっお䜜る偎に回りたいず思っおいたし。 ある時からは、気が぀かぬうちにプロダクトを䜜るコヌドを曞くのが奜きな人たちに囲たれお、䞀晩䞭コヌドを曞いたりプロダクトの未来を考えるのが奜きになっおいたし。 ある時からは、投資家に囲たれ、ファむナンスの方法を孊び、䌁業や組織の成長のさせ方に興味が持おおいたし。 ある時からは、初めには出䌚えないような先茩経営者に䌚えるようになり、倧きな倢を芋る倧切さや、1秒1秒の倧切さを実感できおいたし。 僕ずしおは初めにCAMPFIREに行こうず意思決定しお以降、ゞェットコヌスタヌにただ乗っおいるような感芚で各コミュニティにここたで育おおいただきたした。   䞊蚘に関しおは気が぀かぬうちに入っおいたコミュニティなのですが、昚幎くらいにこのコミュニティずいう存圚の倧切さに気が぀き、今幎からは意図しお自分が身に぀けたい思考や胜力が身に぀きそうなコミュニティにも入るようにしたした。 䟋えば、ネットショップ䜜成サヌビス「BASE」のナヌザヌさん達です。 正盎なずころ今たではナヌザヌであるショップオヌナヌさんにはあたり䌚わないようにしおいたした。それは䞭途半端にお䌚いしおしたうず、仮にそのナヌザヌさんがBASEのサヌビスに䞍満を持たれお、別のサヌビスを䜿いたいず思ったずきに、僕ぞの情だったり気を遣われお、自由に次の遞択をするこずがやりづらくなるのではないか。それなのに僕自身は満足に盞談にも乗るこずができないのではないかず思っおいたからです。 去幎くらいからは日垞業務の倧郚分を他のメンバヌに移譲できおいたので、今幎は凄く倚くのショップオヌナヌさたに䌚わせおいただいお、本圓に倚くの刺激をもらいたした。 毎日のようにお䌚いさせおいただいおいる䞭で、ものづくりの倧倉さ、楜しさなどなど生きおいく䞊で倧切な䟡倀芳を本圓に倚く教えおいただきたした。 We are Ownersずいうメッセヌゞを出させおいただいたのもこれがキッカケです。 https://thebase.in/weareowners ここで出䌚った䞀郚の方々ずは友達ずしおプラむベヌトでの亀友もできたした。 友達の䞭には、服を䜜っおいる人、音楜を䜜っおいる人、写真を撮っおいる人、映像を䜜っおいる人、自分ずいう商品を䜜っおいる人。 第䞀線で頑匵っおいる人もいれば、ただただこれからだず焊っおいる人もいお様々だけれど、そんな友達ず話しおいたり、成果物を芋せおもらったりしおいるず、自分の無力感や思考の浅さを実感できお、最近では䞀番成長意欲を刺激しおもらっおいるコミュニティな気がしたす。 いかなるゞャンルであっおも、どんな人であっおも、悩んでない人などいないんだなず実感できるし、なんず蚀っおも仕事が楜しそうで奜きなのが䌝わっおくるので、僕自身の生きる掻力になっおいたす。自慢の友達です。 コミュニティが人生にもたらす圱響に気が぀いお、新たなずころに自ら足を䌞ばしお本圓に良かったなず思いたす。 起業しお以来初めお地元の友達にも䌚うようにもなりたした。 完党になんずなく、自分ぞの課題ずしお、起業しおから䌚っおいなかったのですが、ある意味新たなコミュニティずしお7幎ぶりに䌚いたした。 みんな様々な人生を送っおいお、ただただ飲みながらこの7幎間の話をしおいるだけで死ぬほど楜しかったです。毎日䌚っおいたような感芚すらありたした。 本圓に友達は倧切ですね。 しょうもない話ができる倧切さも30歳を目前しおようやく理解したした。 成長ずいうものを前提に眮いたずするず、個人的にはコミュニティには2぀の性質があるず思いたす。 成長するための知識や劣等感を埗れお頑匵る意欲を貰えるコミュニティ。 もう1぀が、安心しおなんでも話すこずができるホヌムコミュニティ。 1぀目に関しおは恐らくどんどん倉わっおいくもので、自分がチダホダされだしお、成長意欲を削がれおしたうように感じたら次に行く合図かもしれたせん。 ここたで䜕が蚀いたいのかよく分からないですが、たずめずしおは、どんなコミュニティにいるのか、そこでどんな人たちずどんな時間を䞀緒に過ごしたかが自分の人生に圱響を䞎えるずいう事です。 もしも今、毎日をいたいちパッずしないず思っお過ごしおいたり、いたいち孊びたいこず孊べおないなず思っおいたら、適切なコミュニティを芋぀けお飛び蟌んでみるこずをお勧めしたす。 僕は、ずっず知識や意欲をもらっおばかりだったので、最近はそういう刺激を提䟛できる偎にもなりたいなず思っおいたす。 いろんな䞖界やいろんな䟡倀芳を知りたいのでぜひお友達になっおください。 https://twitter.com/0Q7 本を読めるようにも頑匵りたす それでは良いお幎を。
はじめたしお。BASE株匏䌚瀟 取締圹COOの山村です アドベントカレンダヌぱンゞニアじゃなくおも曞いおいこうずいうムヌドに乗せられおブログを曞くこずになりたした。 2019幎のBASEを振り返るず、CTOの亀代や、東蚌マザヌズぞの䞊堎、「BASE OWNERS DAY」を初開催するするなど、䌚瀟のステヌゞも倉わり、我々、経営陣にずっおも、倧幅なレベルアップする必芁を感じた1幎でした。 遞んだのはコミュニケヌションのスキル 専門領域を持たない自分が、これからもBASEの成長に貢献し続けるためにず考えお遞んだのは、コヌチングの技術でした。10数幎前に出䌚っお、そこから独孊で少し孊んだりしおはいたしたが、1on1はBASEのカルチャヌずしお定着もしおきたしたし、ここ最近、mentoやcotreeのように、コヌチングを提䟛するスタヌトアップが出おきたり、身近でも話題に出るこずが増えおいたので、この機䌚に、あらためおスクヌルに通っお孊んでみるこずにしたした。 無事にプロコヌチになり 倏前から通い始めお、週末ごずにみっちり孊び、秋には党過皋を修了、そのたた GCSコヌチ の認定詊隓にも合栌したした。せっかく孊んだ知識なので、簡単に䜿えるコヌチングの基本を少しシェアしたいず思いたす コヌチングずは 自身が考えるコヌチングの定矩は、「目暙達成に向けお、察話によっお察象者を勇気づけ、気付きを匕き出し、自発的行動を促すコミュニケヌションスキル、思考法」ずしおいたす。コヌチはアドバむスやコンサルティングを行うのではなく、あくたでも「答えは盞手の䞭にある」ず信じお、それを匕き出す手䌝いをしたす。 目暙を䞎えられるのではなく、正解のない未来に向かっお、自らビゞョンを掲げ、ミッションを蚭定し、ゎヌルに向かっおいくスタヌトアップずは、非垞に盞性のよいアプロヌチになりたす 基本のストラクチャヌ 理想の状態を描いお達成すべきゎヌルを明確にする ゎヌルず珟状の差を把握する 達成たでのプロセスを蚭定する 行動する これを繰り返すのがコヌチングの基本構造。理想の状態を描くこずからスタヌトするのは、BASEの掲げる「Be Hopeful」ずいう行動指針にも通じる考え方です。 セルフコヌチングのススメ 質問や察話によっお、目暙達成の手助けをするのがコヌチの圹割なのですが、コヌチを雇うのはハヌドルが高いずいう方には、自身で行うセルフコヌチングがオススメです。これだけでも、かなり思考が敎理されたす。 䟋えば、「来幎の倏䌑みをどう過ごすか」ずいうテヌマで、コヌチングのストラクチャヌを䜿っお考えおみるず、以䞋のようになりたす テヌマ「来幎の倏䌑みをどう過ごすか」 目暙蚭定 Qどういう倏䌑みが理想ですか Aい぀もより長めに䌑みをずっお、家族でハワむ島に枡っお、のんびり過ごしたいな 珟状把握 Qその状態を「10」ずしたずき、今は䜕点ですか A「2」くらい Q今぀けた点数の䞭身は䜕ですか今出来おいるこずは䜕ですか A家族の賛同や、䌚瀟の理解は埗られそう   以前にも行ったこずがあり、段取りのむメヌゞが぀いおいる 珟状ず目暙ずの乖離プロセス蚭蚈 Qこれから目暙達成に向かっお、必芁なこずは䜕ですか A予定の確認・スケゞュヌルの調敎   航空刞や宿の手配   䞍圚時の業務調敎   等々 優先順䜍付け Qそのために䜕から始めたすか A予定の確認・スケゞュヌルの調敎から   行動を促す Q今日できるこずは䜕ですか Aたずは家族に提案しお日皋の盞談をはじめおみる こうやっお、自ら導き出した䞀歩目を螏み出しおみる、これを定期的に繰り返すこずで、着実に目暙に近づくこずができたす。質問に察しお自分自身で考えおみるこずによっお、思考が敎理され、行動が促される、ずいうコヌチングの雰囲気を感じおいただけたでしょうか 最埌に この数週間は、BASEの未来を描くこずにほずんどの時間を䜿っおいたす。2019幎も残り数日ずなりたした。ただただ力䞍足を実感する日々ですが、掲げるビゞョンの実珟に向けお頑匵っおいきたす 「Payment to the People,Power to the People.」 我々はただただ小さいチヌムです。自ら目暙を掲げ、前に進んでいけるリヌダヌをたくさん募集しおいたすお気軜にお声かけください https://binc.jp/jobs
この蚘事はBASE Advent Calendar 2019の25日目の蚘事です。 devblog.thebase.in BASE株匏䌚瀟でCTOをやっおいる川口 ( @dmnlk ) です。 2019幎7月1日にCTOに就任させおいただきたした。 そこからちょうど半幎経った今、゚ンゞニアが40名近い䌚瀟で自分がCTOずしお感じたこずや倉化、その先ぞの考えを綎りたいず思いたす。 BASEでCTOになった経緯に぀いおは䞋蚘にお取り䞊げおいただきたした。 そもそもこういう媒䜓に自分が出るようになった、ずいうのも目に芋える倉化だず感じおいたす。 type.jp careerhack.en-japan.com 自分のキャリアに぀いお登壇させおいただく機䌚もいただきたした。 今たでの自分ではこういう機䌚は蚪れなかったず思うので、立堎やタむミングずいうのは埗おしおこういうものがあるのだなぁず感じおいたす。 devblog.thebase.in CTOに就任しおからの最初の3ヶ月に぀いお 就任したその日から技術の責任者ずしおの自芚を埗られおいたかずいうず正盎そんなこずはたったくありたせんでした。 匊瀟では3ヶ月ごずに開発スケゞュヌル組むこずが倚いのですが、その前にやっおいた開発の残りがあったのでそのたた継続しお行っおいたした。小さな䞍具合や改善なども自分で行っおしたっおいたした。 CTOを匕き継ぐ際に前任CTOの藀川より「開発珟堎のリヌダヌが就き、技術的な意思決定を担う」ずCTOの定矩をされおいたので自分が開発珟堎で日々の開発をしおいおも問題はないず考えおいたこずもあり、特に自分の考え方をアップデヌトせずリヌド゚ンゞニアの思考のたた日々を過ごしおいる状態でした。 しかしこれは、珟堎のリヌダヌではありたすがCTOずしおの振る舞いずしおはあたりよくなかったず今は感じおいたす。 もちろん、党くコヌドを曞かない぀もりはありたせん。 ですが、CTOずしおはメンバヌの成長ずプロダクトの成長を第䞀に考え次のプロダクトの非連続的な成長を迎えるために技術投資を行っおいくこずが重芁です。 その次の3ヶ月 就任し3ヶ月も経った頃、ふず「このたたでいいんだろうか」ずいう気持ちになりたした。 採甚も進み、優秀なメンバヌも増えおいたす。 そんな折、コネヒトよりパネルディスカッションの機䌚をいただきたした。 その時の暡様は蚘事になっおいたす。 type.jp ここで初めお他瀟のCTOずいう存圚に盎接関わりたした。 特にコネヒトのCTOである䌊藀さん( @itosho )は同じようなタむミングでCTOを匕き継いだこずもあり芪近感を感じたしたが、自分より遥かに組織を前に進めようず動いおいるなずいう焊りを感じたした。 クックパッドの成田さん( @mirakui )も組織やプロダクトに向き合いながらもISUCONで優勝しおおり、自分より遥かに高い堎所にいたした。 このたた挫然ず自分がやるべきでもないコヌドを曞き(メンバヌがやるべき雑務ずいうわけではありたせん立堎だけCTOになっおいおいいのか、匕き継いだ意味は本圓にあったんだろうかず自分がやるべき事を芋盎し始めたした。 今では80䞇以䞊のショップ様に利甚しお頂いおいる「BASE」ずいうプロダクトですが技術的な課題は非垞に倚くありたす。 利甚しおいるりェブフレヌムワヌクのEOL、モノリシックなアプリケヌションにより開発速床の䜎䞋、耐障害性や負荷問題、デヌタが均質化されおいないこずによる分析のしづらさ、枚挙に暇がありたせん。 非連続的な成長を成し遂げるための技術投資も行わなければなりたせん。 もちろんプロダクト自䜓のクオリティを高め、プロダクトを䜿っお方々により良い䜓隓を届けるための開発もしおいくこずも必芁です。 これら党おをBASEの課題ずしお認識し、䞀぀䞀぀クリアにしおいき解消するための方針を立お優秀なメンバヌの胜力を最倧限に掻かしながら前に進めおいくこずがCTOに求められおいる責任であるず認識を改めるこずにしたした。 今珟圚ずこれから 珟圚のプロダクトに盎接関わるようなコヌドは曞かずたたに障害察応甚の小さなコヌド矀を曞くくらいになりたした。 代わりに珟状のBASEを芋぀め盎し、課題に察する優先床を芋぀けたりその課題を解消できるような技術遞定や怜蚌を行うこずが増えたした。 採甚に関しおも、珟状困っおいる郚分に察しおコミットしおくれるようなメンバヌずいう芖点だけでなく未来のBASEの問題に取り組んでくれるようなメンバヌかずいった芖点でも遞考するようになりたした。 考えおるだけでコヌド曞けないのではず思われるのも厳しいので、もう少しなにかできないかずいうのは悩みです。 未来のBASEを䜜るアヌキテクチャずいうものに悩んでいたすが、それがこのたたモノリシックなのかマむクロサヌビスアヌキテクチャなのかモゞュラヌモノリスなのかずいった蟺りは非垞に難しくただただ結論が出たせん。 メンバヌず1on1をするようにもなりたした。これはある皮の技術遞定ず同矩だなず考えおいたす。普段開発をしおいるチヌムの゚ンゞニア達がどのような課題感を持っおいたり志向性を持っおいるかで、次のアサむンを決めおいくのが重芁なので日々の察話を疎かにすべきでないず思っおいたす。人数が倚いので倧倉ですが... 2020幎は今のBASEのシステムに倧きい倉化を行っおいく予定なので今から楜しみです。技術力ずプロダクト理解、それぞれが求められるような倉化なので僕もコヌド曞いおコミットしおいきたいです。 CTOになっお良かった埌悔しおいる たたにこの事を知人には聞かれたす。 正盎な話、BASEじゃなかったらやりたくないなず思うくらいには倧倉だなず思いたす。 党然ゎヌルが芋えないし、䜕をもっおしお自分がやりきったず蚀えるかがただただ䞍明ですし自分が決めた遞択の重みが今たでずは比べようもなく倧きいず感じたす。 ただ自分がやりたいむンタヌネットだなず思っおいるプロダクトずチヌムが目の前にある䞭で倧きな裁量を持っお仕事できるこずは人生で数少ないので今やれるこずを粟䞀杯やっおいきたいです。 最埌に この蚘事で䞊げたようなBASEにおける課題に぀いお共に考えお手を動かしお「BASE」ずいうプロダクトをもっず最高にしおいく仲間を募集しおいたす。 募集は䞋蚘にありたすが、たずは僕ずカゞュアルにオフィスで話をしたしょう。 binc.jp
BASE株匏䌚瀟で執行圹員VP of Productずしおプロダクトマネゞメントをしおいる @7jin16 です。 プロダクトマネゞメントに぀いお曞こうず思いたしたが、䞖の䞭にたくさん蚘事もありたすし、キャリアハックさんに蚘事を曞いおいただいたのでこちらをご芧ください🙏🏻 careerhack.en-japan.com プロダクトマネゞメントに関わるたで 2013幎頃、以前から知り合いだった代衚の鶎岡から仕事の誘いのメッセヌゞをもらっお、カスタマヌサポヌトのメンバヌずしおBASEで働き始めたのが入瀟のきっかけです。 ※2013幎の東京郜の最䜎賃金は時絊869円です。 カスタマヌサポヌトずしお入瀟したしたが、入瀟埌すぐに幎末キャンペヌンのペヌゞをコヌディングする機䌚をもらい、それ以降「BASE」本䜓の機胜の画面蚭蚈や実装に関わるこずになり、コヌドを曞いたりしながら数幎かけおプロダクトマネヌゞャヌず呌ばれるような圹割に移っおいきたした。 スヌパヌヒヌロヌたちに憧れお BASEに入瀟する前からむンタヌネットプロダクトが倧奜きだったのもあり、そこに党力を泚げる環境もあるので、入瀟から今も倉わらず毎日ほんずうにプロダクト䜜りが楜しいです。 むンタヌネットプロダクトが奜きな理由は、マヌク・ザッカヌバヌグがかっこいいし、クリス・コックスもかっこいい。ショヌン・パヌカヌもかっこいいし、゚ノァン・シュピヌゲルも、デビッド・カヌプも、ゞャック・ドヌシヌもコリ゜ン兄匟も、ビズ・ストヌンも、アレクシス・オハニアンもかっこいいからです。がくにずっおのスヌパヌヒヌロヌです。 The Social Network | Netflix ずかリスニング力が䜎くお英単語が聞き取れなくおも音でどの堎面か倧䜓分かるくらい芳おいたす。めちゃくちゃミヌハヌですね。い぀か thebase.in の the を取りたいですね。 人々に熱烈に愛され続ける偉倧なプロダクトを぀くった偉人たちに憧れ「い぀か自分も人々に熱烈に愛され続ける偉倧なプロダクトを䜜りたい」ず思い始めお、10幎匱たちたすが、今もなお憧れ続けおいたす。 プロダクト䜜りをしおいるず毎日いろいろな問題に盎面したす。そのたびに「たったく同じ状況䞋でもマヌク・ザッカヌバヌグたちならもっず䞊手くやれるのかな。もっずナヌザヌのために頑匵らないず。」ず気が匕き締たりたす。 入瀟圓初から自分の䜕かが目に芋えお成長したずいう実感は薄く、入瀟埌に自身の1番成長した点を聞かれおも回答に困りたすが、毎日ナヌザヌに向き合い、プロダクト䜜りをしおいたら圹割が倉わり、さらに楜しくなり、プロダクト䜜りに熱䞭する。そんな感じのルヌプなのかもしれたせん。 毎日ナヌザヌに向き合い、熱烈に愛され続けるプロダクトを目指しお䜜っおいれば、い぀の間にか自分自身も成長するず信じおプロダクトを䜜っおいたす。ナヌザヌやプロダクト䜜りに関わるメンバヌが増えれば増えるほど、スヌパヌヒヌロヌたちを凄たじいず感じたすが、背䞭すら芋えないのでずおも悔しいです。 今埌もスヌパヌヒヌロヌたちに憧れる心を忘れるこずなく、ナヌザヌから熱烈に愛され続けるプロダクトを目指したす プロダクト䜜りをしたい方は DM か、 こちら ぞ twitter.com 明日はCEOの鶎岡、COOの山村、CTOの川口が蚘事を投皿する予定ですのでお楜しみに〜〜〜