「あなたの図曞通は、あなたの子䟛のように、あなたにずっお予期しない方向に進むこずができたす」MobXの䜜成者ずのむンタビュヌ





人気のあるオヌプン゜ヌスラむブラリの䜜成者の人生はどうですか もちろん、あなたの仕事の結果が䞖界䞭の倚くの人々を助けるこずは玠晎らしいこずです。 しかし、あなたは自分の䞻な仕事でさえない仕事に圧倒されおいるず思いたすか どのように察凊したすか どれほど倧胆に暩限を委任できたすか



Michelle Weststrateはこのすべおを十分に認識しおいたす。圌のMobXラむブラリには 、githubに17,000以䞊の星があり、その貢献者の数は100をはるかに超えおいたす。 そしおすぐにミシェルはHolyJSで話すためにロシアに来るので、䌚議のプログラム委員䌚のメンバヌ Dmitry DmitryMakhnev MakhnevずEvgeny bunopus Kotは圌に詳现に尋ねたしたオヌプン゜ヌス党般、そしお特にMobXに぀いお、そしお䌚議に぀いお。



ナヌゞヌンあなたのこずを知らない人のために、最初に自分自身に぀いお少し話しおもらえたすか



「はい、もちろん。」 私の名前はミシェルりェストストラットほずんどの人にずっお発音が難しすぎるです。私はオランダ出身です。 ほずんどの堎合、圌らはMobXたたはimmerでの私の仕事から私を知っおいたす。 私はメンディックスで働いおいたす。 倚くのコンサルティング䌚瀟が䜿甚するアプリケヌション開発プラットフォヌムである゜フトりェアを䜜成する゜フトりェアを䜜成しおいたす。 倚数の銀行保険䌚瀟および同様のシステムを自動化したす。 私は技術的な偎面をやっおいたす-぀たり、私が奜きなこずです。 そしお玄2幎前、私はオヌプン゜ヌスの䞖界に参加したした。その瞬間から、ReactコミュニティずJSコミュニティの䞡方で掻動しおいたした。



ナヌゞヌンメンディックスで正確に䜕をしおいたすか、テクニカルアドバむザヌはいたすか



-はい。 そこにはいく぀かの異なる圹割があり、䞻な圹割はテリッドです。 本質的に、これは私たちの「郚族」の 1぀に察する技術的解決策の遞択に責任があるこずを意味したす。 したがっお、私はモバむルアプリケヌションの環境である補品に取り組んでいたす。 私たちは4぀のチヌムず連携し、䞻にアヌキテクチャず技術に関する適切な決定を䞋したす。 さらに、私はただプログラミング䞭です。 これは私の仕事の䞀郚です。



もう1぀は、オヌプン゜ヌスコミュニティぞの参加です。 これは「双方向」のアクティビティです。 䞀方では、䌚議で共有したいクヌルな技術的なこずを行っおおり、自分で話すか、同僚に話すこずを勧めおいたす。 反察に、䌚議ぞの頻繁な蚪問でも反察のこずが蚀えたす。あなたが私たちに圹立぀かもしれない䜕かを芋぀けたら、それを研究しおスタックに含めたす。



Eugene「 OSS䌝道」はTwitterの説明で蚀及されおいたす。 それは䜕であり、なぜあなたにずっおそれが重芁なのですか



-これが重芁である最初の理由開発をオヌプン゜ヌスに倉換するず、時間をたったく節玄できたせんが、テストに倧いに圹立ち、品質が向䞊するこずがわかりたした。 MobXのようなラむブラリは非垞に異なる条件で䜿甚されるためです。 そしお、この意味で、オヌプン゜ヌスには他の方法で入手するのが非垞に難しいずいう利点がありたす。



そしお2぀目私たちの「䜎レベル」開発は䌚瀟を定矩しないず信じおいるので、なぜそれらを共有しないのか。 ぀たり、䌁業は、技術自䜓ではなく、その技術に基づいお䜜られた補品によっお、倚少なりずも競争力を高められるずいうこずです。 そしお誰もがコラボレヌションの恩恵を受け、これにより開発党䜓が加速されたす。



Eugene時々、圌らは「非珟金」オヌプン゜ヌスは実際には非垞に高䟡な喜びだず蚀う。 Linuxのようなプロゞェクトには、OracleやMicrosoftのような巚人からの莫倧な資金が必芁です。 そうですか 倧芏暡なベンダヌやお金がなくおもオヌプン゜ヌスコミュニティは存圚できたすか



-特定の状況に䟝存するず思いたす。 そのように存圚する可胜性のある小さなラむブラリがありたす。 しかし、䞊蚘のLinuxカヌネルやReact Nativeなどのプロゞェクトは非垞に耇雑であり、非垞に倚くの人々がそれらに䟝存しおいるため、信頌できる財務モデルが必芁です。 この堎合、倧きなスポンサヌがいなければ非垞に難しいでしょう。 しかし、私はこれが問題だずは思わない。 䌁業が責任を負うこずを孊ぶこずは、䌁業なしで行うこずを孊ぶこずよりも重芁だず思いたす。



Eugeneたずえば、Facebookがあなたのずころに来お「MobXを賌入するか、MobXを埌揎しお、開発が私たちのブランドの䞋に行くようにしたしょう」ず蚀ったら



-たあ、実際、圌らはすでにスポンサヌです 面癜いですが、FacebookはOpen CollectiveでのMobXのスポンサヌの1぀です。 ある意味で、これはすでに起こっおいたす。 私の意芋では、オヌプンコレクティブはオヌプン゜ヌスの財政状態を改善する方法の良い䟋です。 請求曞などの財政的に深刻なアプロヌチがあるため、䌁業は自分に合った方法で開発を埌揎するこずができたす。



Mendixでは、実際、私はすでにMobXで䜜業するための報酬をほずんど受け取っおいるので、Facebookに完党に切り替えるこずに興味はありたせん。 他の人の興味を匕く可胜性があるこずは理解しおいたすが、これには問題はありたせん。 私の意芋では、ラむセンスがオヌプン゜ヌスのたたであれば、その補品がメむンスポンサヌのブランド䞋にあるずいう事実には䜕の問題もありたせん。 テレビでサッカヌを芋おいるようなものです。誰もが詊合を芋るこずができれば、Tシャツにどんなロゎが付いおいおもそれほど違いはありたせん。



ナヌゞヌン倧䌁業が図曞通を埌揎しおいる堎合、「私たちはそんなにお金を払っおいるので、それで私たちにこれをしおください」ず蚀うこずはできたせんか



「少なくずもこれに遭遇したこずがないので、問題になりたす。」 私が間違っおいなければ、webpackはそのようなモデルを䜿甚したす。そこで機胜の代金を支払うこずは可胜です。 そのため、倚少のリスクはありたすが、プロゞェクトがその哲孊に忠実であるこずを保蚌するのは、メンテナヌの責任だず思いたす。 しかし、この哲孊の範囲内では、十分な操䜜の䜙地がありそうです。 さらに、オヌプン゜ヌスでは、突然䜕かが完党にうたくいかない堎合、少なくずもフォヌクの可胜性が残りたす。



Eugeneオヌプン゜ヌス゜フトりェアの開発は曲線のようなものです。最初に、誰も必芁ずしないラむブラリを䜜成し、次にそれを䜿い始め、それからgithubで䜕千もの星を獲埗したす。 オヌプン゜ヌスプロゞェクトが䞀般的になるず、倚くの時間がかかり始めたす。 MobXにいくら費やしたすか



-最近はあたりありたせん。 MobXは珟圚非垞に安定しおいたす。 もちろん、過去に倚くを費やしたした。 それは非垞に異なっおいたした。 最初の数幎間は週に数倜で、Twitterで小さな問題や質問に答えるだけの小さな瞬間があったず思いたす。 これらのささいなこずは、時間の倧きな投資ずしおは感じられたせんが、合蚈するず著しく増加するず思いたす。 ただし、枬定するのは非垞に困難です。 これが仕事甚メヌルの確認方法です。問題を確認し、すぐに応答を送信したす。



Eugeneあなたが開発者であり、ラむブラリを䜜成し、人気が出おきお、たすたす時間がかかる状況で生産性を䞊げるにはどうすればいいですか あなたは幞運です、あなたは勀務時間䞭にそれをする機䌚がありたす。 しかし、あなたがすでに仕事ず趣味を持っおいお、プロゞェクトがより人気になったら



-さお、私がMobXの仕事を始めたずき、それは私の自由な時間でもありたした。プロゞェクトが人気を博したずき、仕事の時間は远加されたした。 しかし、いく぀かのヒントがありたす。 私が助けおくれたいく぀かのルヌルがあるこずに気づきたした。



最初ドキュメントの関連性を監芖したす。 同じ質問を3、4回受け取った堎合は、ドキュメントに回答を蚘録しおください。 最終的に時間を節玄できるからです。



第二に、どの問題を受け入れるかに぀いお非垞に気を配るこず。 最初は、゚ラヌが通知されるずすぐに、利甚可胜な説明に基づいお問題を再珟しようずしおいたす。 たた、堎合によっおはこれが䞍可胜であり、すでに時間がかかっおいるこずがわかりたす。 そのため、サンドボックス内のコヌドであろうず、単䜓テストを䌎うプルリク゚ストであろうず、問題から盎接実行できるものを芁求しおいたす。 問題がどこにあるかを刀断できるようにするもの-ラむブラリ内たたはナヌザヌ偎。 これは非垞に重芁です。時間を節玄し、問題の䜜成者が時間を費やす準備ができおいるこずを確認できるからです。 「バグを再珟する時間がない」ず蚀う人もいたすが、「それなら、問題を解決する時間がない」ず感じたす。 結局のずころ、人はおそらく自分のラむブラリを䜿甚する仕事に察しお支払われおいるでしょう。それでは、なぜ自分の自由時間を圌の問題に投資すべきなのでしょうか 䞀般に、このような遞択性は圹立ちたすが、すべおの人を助けたいので、やや責任感が枛りたす。 しかし、「みんなを助ける」こずは単に非珟実的であるこずがわかりたした。



それでも、いく぀かのラむブラリを扱っおいるため、すべおの問題に即座に察応するのではなく、あるラむブラリから別のラむブラリに「ゞャンプ」したす。各ラむブラリで䞀床に数日間䜜業し、次のラむブラリに進みたす。 そしお、私が今しおいるこずに぀いお曞いおいただければ数分で答えるこずができたすが、あなたの番がただ届いおいない堎合は䜕日も答えられたせん。 これにより、コンテキストを切り替える頻床が少なくなりたす。



これらのヒントはすべお、ラむブラリが人気を博し始めたずきに圹立ちたす。



ナヌゞヌン人気のあるラむブラリの䜜成者が「再珟できない、単䜓テストを曞く」ず答えたずき、これは人々に「圌はうぬがれおいお、助けたくない」ず感じさせたせんか



-私はそのような効果に出くわしたしたが、めったにありたせん。 通垞、ナヌザヌは、メンテナヌが非垞に忙しく、高い確率で問題が圌の偎にあるこずを理解しおいるず思いたす。 Lodashフィルタヌを䜿甚しおいお問題がある堎合は、「誰もがLodashを䜿甚しおいるため、おそらく䜕か間違っおいる可胜性がありたす」ずいう無意識の気持ちになるでしょう。 そのため、ほずんどの人は問題に泚意する必芁があるこずを理解しおいたす。



Eugeneラむブラリが人気を博し、より倚くの時間を必芁ずするずき、貢献者ずしおあなたの圹割を共有し、コミュニティの他のメンバヌに暩利を䞎える䟡倀はいくらですか



-これは玠晎らしいアむデアです。通垞、1人からの耇数の良いプルリク゚ストたたは倧きい堎合は1぀のプルリク゚ストを芋぀けたらすぐに貢献者の暩利を䞎えたす。 私の意芋では、これはうたく機胜したす。 たずえば、MobX状態ツリヌでは、ほずんどの䜜業が私ではなく他の人によっお行われおいたす。 たた、コヌドベヌスには、私よりも理解しやすい郚分が他にもありたす。すべおがその状態になったこずは玠晎らしいこずです。 「コア」MobXの堎合、これは必須ではありたせん。すべおがすでに萜ち着いおおり、アルゎリズムは過去数幎にわたっお倉曎されおいないため、サポヌト䜜業はわずかです。 しかし、MobX状態ツリヌの堎合、倚くのナヌザヌラむブラリを䜜成する人々を意図的に遞択し、メンテナヌの暩利を付䞎したした。 結局のずころ、日垞業務でラむブラリを積極的に䜿甚するず、芋逃したパタヌンや䞀般的な問題に出くわすこずになりたす。 たた、開発者のモチベヌションず信頌感を䞎えおくれるず思いたす。なぜなら、圌らは図曞通が盎面しおいるものを扱うのを助けるこずができるからです。



ナヌゞヌン同時に、図曞通が子䟛の頃に打ちのめされおいるずいう感芚はありたせんか おそらく、他の人がどのようにそれを開発するかに぀いおあなたは同意しないのでしょうか



-時々それは少し起こりたす。 しかし、私はそれが正垞だず思いたす。 あなたは子䟛たちず倧きな類掚をしたした。圌らは時間ずずもに成長し、18歳になり、そしおあなたは圌らが自分の道を芋぀ける時が来たので、圌らを手攟す必芁がありたす。 ある皋床、オヌプン゜ヌスのラむブラリも同様だず思いたす。 それらが成功すれば、より困難な状況に盎面し始めたす。 あなたは私が䞀般的に察凊したくないケヌスに察凊し始めたす。 コヌドは、圓初私が欲しかった矎しく、クリヌンでミニマルなコヌドではなくなりたす。 これは避けられたせん。



MobXにはこれの玠晎らしい䟋がありたす。元々は、デコレヌタが非垞にシンプルなTypeScriptのために曞いたもので、その埌、人々は完党に異なる実装があるBabelでそれを䜿い始めたした。 そしお、最終的に、コヌドベヌスの䞀郚は、TypeScriptたたはBabelのどちらを䜿甚しおいるかを刀断しようずしおいるため、非垞に芋苊しくなりたす。 それはひどく聞こえ、ひどく芋えたす。 しかし、それは仕事の䞀郚です。 それを愛する必芁はありたせんが、すべおがどこでもうたく機胜するこずを確認する必芁がありたす。 そしお、この意味で、あなたの子䟛はあなたが考えおいなかった方向に進むこずができたすが、最終的には人々がプロゞェクトをうたく利甚できるこずが重芁であるため、これは正垞です。



Eugene開発は倉化しおおり、10〜20幎前よりもずっず簡単になっおいたす。 これらの倉曎に関連しおオヌプン゜ヌスの珟圚の状況に぀いおどう思いたすか、たた将来に䜕を期埅したすか 倧䌁業はすべおの熱狂的なファンになりたすか



-これは難しい質問です。 倧きな倉曎があるかどうかはわかりたせん。 そしお、䞀床に䞡方向に倉化がありたす。 FacebookずMicrosoftには特に感銘を受けおいたす。珟圚どのくらい開いおいるのか、サヌドパヌティの開発者がどの皋床貢献できるのか。 React Nativeは、䜜品の倧郚分がFacebookからのものではない、特に印象的な䟋です。 䞀方、孀独な人にずっおは、オヌプン゜ヌスプロゞェクトに参加したり、自分のプロゞェクトを䜜成したりするこずは、今のように簡単ではないでしょう。 ツヌルはより暙準化されおおり、 CodeSandboxやGitpodなどの優れたオンラむンIDEがありたす 。 私はここ数週間Gitpodで仕事をしおきたしたが、それは玠晎らしいこずです。ロヌカルで䜕もしなくおもプルリク゚ストをチェックできたす。 ブラりザでDockerを実行するだけで開発できたす。 そのため、倉曎が䜕になるかわかりたせん。



Eugene8幎前、私がC ++開発者だったずき、珟圚のようなオヌプン゜ヌスコミュニティはありたせんでした。 そしお今、WebずJavaScriptの䞖界では、オヌプン゜ヌスの開発がどんどん速くなっおいるこずがわかりたす。 この成長は続くのでしょうか



-運動は続くず思いたす。 私の意芋では、理由の1぀は次のずおりです。䌁業ず開発者の䞡方が、オヌプン゜ヌスが開発たたは䜿甚する人にずっお有甚であるだけでなく、埓業員を芋぀けるのにも圹立぀こずをたすたす理解しおいたす。 その人のオヌプン゜ヌスぞの参加を芋るず、䞀日䞭むンタビュヌするよりも、圌に぀いおもっず理解できたす。 圌が問題に答えるか、それらを開始する方法は倚くを瀺しおいたす。 開発者や䌁業は、この重芁性をたすたす認識し始めおいるず思いたす。



ナヌゞヌンそれでは、オヌプン゜ヌスラむブラリの開発がむンタビュヌに圹立぀ず思いたすか



-たさに。 あなたが䌚瀟であり、あなたのAPIに密接に結び付けられおいないそのようなラむブラリを持っおいるなら、人々が参加するようになるので、これは玠晎らしいです-そしお圌らはたさにあなたが必芁なものかもしれたせん。 そしお、寄皿者の1人を雇うず、参加しやすくなり、䜕が期埅できるかをよりよく理解できたす。 この理由だけで、倚くの興味深いこずが開かれたず思いたす。



Dmitryオヌプン゜ヌス党般に぀いお話したしたが、具䜓的にはMobXに進みたしょう。 最初にどのように、なぜ始めたのですか



-いい質問です。 Mendixには、Cで蚘述されたWindowsアプリケヌションがありたす。 数幎前、私たちはそれをりェブに移怍するこずを決め、䜿甚するスタックを芋぀け始めたした。 Reactはただ始たったばかりで、Angularはしばらく前から存圚しおいたしたが、Emberはかなり人気がありたした。 そしお、かなり早く、コンポヌネントモデルず提案された抜象化レむダヌのために、Reactに恋をしたした。



しかし、その埌、パフォヌマンスの問題があるこずがわかりたした。Reactの堎合でも、DOMを完党に曎新するのは非垞に高䟡であるこずがわかりたした。 Cでは、モデルを絶えず曎新しおキャンバス党䜓を再描画したしたが、いずれも非垞に高速に動䜜するため、誰も最適化を行いたせんでした。したがっお、「スマヌトな方法でレンダリングを行う」必芁はありたせんでした。 しかし、ここでDOMの堎合、毎秒60回すべおを再描画するこずはできないこずがわかりたした。 そこで、効果的にそれを行う方法を考えたした。 䞍倉のアプロヌチに぀いお考えたしたが、この堎合、いく぀かの理由で適合したせんでした。 それらの1぀は、䜿甚したデヌタずそのレンダリング方法です。 同じ情報がさたざたな堎所でレンダリングされたした。 デヌタを正芏化するこずは非垞に困難です。 そしお第二に、あなたはただあたりにも倚くの詳现に察凊しなければならなかったようです。 たずえば、レンダリングするデヌタのセレクタヌを䜜成する必芁がありたす。



しかし、Cコヌドず同じ単玔なコヌドを蚘述し、前に「䜕かをレンダリング」し、これが将来どのように倉化するかを気にしたくない堎合はどうでしょうか。 コンポヌネントに「それでは、デヌタのこの郚分をここから取埗したすが、この郚分をそこから取埗しお、䜕かをレンダリングできたす」ず蚀いたくない堎合は、 珟圚どのテクノロゞヌが利甚可胜かを調査し始め、Knockout、Meteor、そしお少なくずも抂念的にはAngularでも䜿甚されおいるパラダむムにすぐに到達したした。 デヌタの䟝存関係ずコンポヌネントの関係、たたはい぀レンダリングするかを意味しない堎合。



特にアプリケヌションが倧きくなるず、なぜ人々がそのようなアプロヌチを嫌うのかを理解し始めたした。 そしお、倚くの堎合、予枬可胜性ず「デバッグ」の欠劂に぀いお人々が懞念しおいるこずが倚く、䜕かがあたりにも頻繁に、たたはあたりにもたれに、たたは間違った順序で行われる可胜性があるこずが刀明したした。 そしお、私たちはもっず良くできるず決めたした。 私たちは同じ目暙を目指しお努力するこずができたすが、よりスマヌトな実装ぞのアプロヌチです。 そしお、MobXが登堎したした。 オブザヌブずオブザヌバブルの関係をキャプチャするだけでなく、䟝存関係グラフ党䜓を構築するため、すべおのオブザヌバヌが最も効率的な順序で実行されるこずを確認できたす。 リアクティブプログラミングには、「グリッチ」ずいう抂念がありたす。したがっお、ここではこれを行うこずはできたせん。 䞀般的に、ここでは既存のものを取り䞊げたしたが、より予枬しやすいものにしようず詊みたした。



Dmitry぀たり、䜕らかのアプロヌチが奜きなのに、既存のラむブラリヌでは十分でない堎合、あなたはそれを受け入れおより良くするこずができ、これは人気になりたすか



-はい、たさに それで私は最初に内郚目的のためにそれを曞き、それからReactEuropeに行きたした。 2015幎のようで、Fluxパタヌンに぀いお倚くの話がありたした。 その埌、フラックス戊争が激化した。 そしお、私たちはすでに解決した問題に倚くの゚ネルギヌを泚いでいるず感じたした。 « ». . , « Flux», - . .



: MobX , . , ?



— ! « MobX Lite». , MobX, 200 . , . . , . MobX. , — API, . , , API . , MobX 5 MobX 4 , Proxy .



: Proxy. - , . ?



— , , Proxy - , . . Chrome 8, , .



: . , jQuery -, , - . Redux MobX. ?



— , . , jQuery- . , JQuery , . - . jQuery React , , , . . , state definitions .

, , React UI. . , - UI .



: ? , ?



— , . , immutable values. , , immer — , immutable states JS. , state management. , , , . , , , GraphQL, , . 




: -, MobX?



— , , , . . : , to-do list . , , todo. , - , todo- , . . , .



: . . , - . , ?



— , . : , . — , , . , . Docker, . , , , . — « ». -, — , , . , , . — , , - . - -, , . , , . : -, , . .



: ( , ) , , Medium YouTube. ?



— , , — . , . — . , , , 
 . . , . . , . , , . , , , , - . , . , (, , ) — . , , . .



: . — ?



— . , MobX. , . MobX.



HolyJS 2018 Moscow , 24-25 . state management. .



All Articles