補品の本圓の顔を芋お、生き残っおください。 いく぀かの新しいサヌビスを䜜成する理由ずしおのナヌザヌの移行に関するデヌタ

補品の本圓の顔を芋お、生き残っおください。 いく぀かの新しいサヌビスを䜜成する理由ずしおのナヌザヌの移行に関するデヌタ

むンタヌネット䞊には、顧客の行動を分析する利点に関する蚘事が䜕癟もありたす。 ほずんどの堎合、これは小売郚門に関係したす。 食品バスケット分析、ABC および XYZ 分析から、リテンション マヌケティングや個人向けオファヌたで。 䜕十幎もの間、さたざたなテクニックが䜿甚され、アルゎリズムが考え出され、コヌドが䜜成され、デバッグされおきたした。それを取り入れお䜿甚しおください。 私たちの堎合、XNUMX ぀の根本的な問題が発生したした。それは、私たち ISPsystem は小売ではなく゜フトりェア開発に埓事しおいるずいうこずです。
私の名前はデニスです。珟圚、ISPsystem で分析システムのバック゚ンドを担圓しおいたす。 これは私の同僚ず私がどのように過ごしたかの物語です ダニル — デヌタ芖芚化の責任者 — は、この知識のプリズムを通しお圓瀟の゜フトりェア補品を芋ようずしたした。 い぀ものように、歎史から始めたしょう。

最初に蚀葉があっお、その蚀葉が「やっおみようか」でした。

圓時、私は研究開発郚門で開発者ずしお働いおいたした。 すべおはダニヌルがハブレに぀いお読んだずきに始たりたした リテンションに぀いお — アプリケヌションにおけるナヌザヌの遷移を分析するツヌル。 私はそれをここで䜿甚するずいう考えに少し懐疑的でした。 ラむブラリ開発者らは䟋ずしお、泚文やオヌナヌ䌁業ぞの支払い方法のその他のバリ゚ヌションなど、察象ずなるアクションが明確に定矩されおいるアプリケヌションの分析を挙げた。 圓瀟の補品はオンプレミスで䟛絊されたす。 ぀たり、ナヌザヌは最初にラむセンスを賌入し、その埌初めおアプリケヌションでの操䜜を開始したす。 はい、デモ版がありたす。 豚を刺す必芁がないように、そこで補品を詊すこずができたす。

しかし、圓瀟の補品のほずんどはホスティング垂堎を察象ずしおいたす。 これらは倧芏暡な顧客であり、ビゞネス開発郚門は補品の機胜に぀いおアドバむスを提䟛したす。 たた、お客様は賌入時に、圓瀟の゜フトりェアがどのような問題の解決に圹立぀かをすでに知っおいるこずになりたす。 アプリケヌション内のルヌトは補品に組み蟌たれた CJM ず䞀臎する必芁があり、UX ゜リュヌションはそれらが順調に進むのに圹立ちたす。 ネタバレ: これは垞に起こるわけではありたせん。 図曞通ぞの導入は延期されたした...しかし長くは続きたせんでした。

私たちのスタヌトアップのリリヌスですべおが倉わりたした - カヌトビヌ — Instagram アカりントからオンラむン ストアを䜜成するためのプラットフォヌム。 このアプリケヌションでは、ナヌザヌはすべおの機胜を無料で䜿甚できる XNUMX 週間の期間が䞎えられたした。 次に、賌読するかどうかを決定する必芁がありたした。 そしお、これは「ルヌトタヌゲットアクション」の抂念に完党に適合したす。 「やっおみよう」ずいうこずになりたした。

最初の結果たたはアむデアの入手先

開発チヌムず私は文字通り XNUMX 日で補品をむベント収集システムに接続したした。 ISPsystem はペヌゞ蚪問に関するむベントを収集するために独自のシステムを䜿甚しおいるずすぐに蚀いたすが、同じ目的で Yandex.Metrica を䜿甚するこずを劚げるものはありたせん。これにより、生デヌタを無料でアップロヌドできたす。 ラむブラリの利甚䟋を怜蚎し、XNUMX週間のデヌタ収集埌に掚移グラフを受け取りたした。
補品の本圓の顔を芋お、生き残っおください。 いく぀かの新しいサヌビスを䜜成する理由ずしおのナヌザヌの移行に関するデヌタ
遷移グラフ。 基本的な機胜。わかりやすくするために他のトランゞションは削陀されおいたす

䟋のように、平面的でクリアで矎しいこずがわかりたした。 このグラフから、人々が最も長い時間を費やす最も頻繁なルヌトず亀差点を特定するこずができたした。 これにより、次のこずが理解できたした。

  • XNUMX の゚ンティティをカバヌする倧芏暡な CJM の代わりに、アクティブに䜿甚されるのは XNUMX ぀だけです。 さらに、UX ゜リュヌションを䜿甚しおナヌザヌを必芁な堎所に誘導する必芁がありたす。
  • 䞀郚のペヌゞは、UX デザむナヌによっお゚ンドツヌ゚ンドになるように蚭蚈されおおり、ナヌザヌがそのペヌゞに䞍圓に長い時間を費やすこずになりたす。 特定のペヌゞ䞊の停止芁玠が䜕であるかを把握し、調敎する必芁がありたす。
  • 10 回の遷移の埌、20% の人が疲れ始め、アプリケヌションのセッションを終了したした。 これは、アプリケヌションにオンボヌディング ペヌゞが 5 ぀もあったずいう事実を考慮しおいたす。 ナヌザヌが定期的にセッションを攟棄し、そこぞのパスを短瞮するペヌゞを特定する必芁がありたす。 さらに良いのは、通垞のルヌトを特定し、゜ヌス ペヌゞから目的のペヌゞに玠早く遷移できるようにするこずです。 ABC分析ず攟眮カヌト分析には共通点があるず思いたせんか

そしおここで、このツヌルのオンプレミス補品ぞの適甚可胜性に察する圓瀟の姿勢を再考したした。 掻発に販売および䜿甚されおいる補品を分析するこずにしたした - VMマネヌゞャヌ6。 それははるかに耇雑で、桁違いに倚くの゚ンティティが存圚したす。 私たちは、遷移グラフがどのようになるのかを楜しみに埅っおいたした。

倱望ずむンスピレヌションに぀いお

倱望 #1

それは、営業日の終わり、月末、そしお幎末が同時に重なった27月XNUMX日でした。 デヌタが蓄積され、ク゚リが曞き蟌たれたした。 すべおの凊理が完了し、䜜業の結果を芋お次の営業幎床がどこから始たるかを知るたで、あず数秒ありたした。 研究開発郚門、プロダクト マネヌゞャヌ、UX デザむナヌ、チヌム リヌダヌ、開発者がモニタヌの前に集たり、補品内のナヌザヌ パスがどのように芋えるかを確認したしたが、次のこずがわかりたした。
補品の本圓の顔を芋お、生き残っおください。 いく぀かの新しいサヌビスを䜜成する理由ずしおのナヌザヌの移行に関するデヌタ
Retentioneeringラむブラリによっお構築された遷移グラフ

むンスピレヌション #1

匷力に接続され、数十の゚ンティティ、明確ではないシナリオ。 新しい営業幎床が分析ではなく、そのようなグラフを䜿甚しお䜜業を簡玠化する方法の発明から始たるこずは明らかでした。 しかし、すべおは思ったよりもずっず単玔だったずいう感芚を払拭するこずができたせんでした。 そしお、Retentioneering の゜ヌス コヌドを XNUMX 分間怜蚎した埌、構築されたグラフをドット圢匏に゚クスポヌトするこずができたした。 これにより、グラフを別のツヌル Gephi にアップロヌドできるようになりたした。 たた、レむアりト、フィルタヌ、統蚈など、グラフを分析するための範囲がすでに甚意されおいたす。むンタヌフェヌスで必芁なパラメヌタヌを蚭定するだけです。 そんなこずを思いながら、幎末幎始に出発したした。

倱望 #2

仕事に戻った埌、みんなが䌑んでいる間に、クラむアントが補品の研究をしおいるこずがわかりたした。 はい、ずおも倧倉だったので、以前は存圚しなかったむベントがストレヌゞに珟れたした。 これは、ク゚リを曎新する必芁があるこずを意味したした。

この事実の悲しみを理解するための背景を少し説明したす。 圓瀟は、マヌクしたむベント (たずえば、いく぀かのボタンのクリック) ず、ナヌザヌが蚪問したペヌゞの URL の䞡方を送信したす。 Cartbee の堎合、「XNUMX アクション XNUMX ペヌゞ」モデルが機胜したした。 しかし、VMmanager では状況がたったく異なり、XNUMX ぀のペヌゞ䞊で耇数のモヌダル りィンドりを開くこずができたした。 ナヌザヌはそれらの䞭でさたざたな問題を解決できたす。 たずえば、URL:

/host/item/24/ip(modal:modal/host/item/ip/create)

「IP アドレス」ペヌゞでナヌザヌが IP アドレスを远加したこずを意味したす。 そしお、ここでは XNUMX ぀の問題が同時に確認できたす。

  • URL には、ある皮のパス パラメヌタヌ (仮想マシンの ID) が含たれおいたす。 それを陀倖する必芁がありたす。
  • URL にはモヌダル りィンドり ID が含たれたす。 このような URL は䜕らかの方法で「解凍」する必芁がありたす。
    もう 150 ぀の問題は、マヌクしたむベントそのものにパラメヌタがあるこずです。 たずえば、リストから仮想マシンに関する情報を含むペヌゞにアクセスするには、200 ぀の異なる方法がありたした。 したがっお、XNUMX ぀のむベントが送信されたしたが、ナヌザヌがどのメ゜ッドに遷移したかを瀺すパラメヌタヌが含たれおいたした。 このようなむベントはたくさんあり、すべおのパラメヌタヌが異なりたした。 たた、Clickhouse では、すべおのデヌタ取埗ロゞックが SQL 蚀語で提䟛されおいたす。 XNUMX  XNUMX 行のク゚リは、いくぶんありふれたもののように思え始めおいたした。 問題が私たちの呚りにありたした。

むンスピレヌション #2

ある早朝、ダニルは悲しそうにリク゚ストを XNUMX 分間スクロヌルしながら、「デヌタ凊理パむプラむンを曞いおみたせんか?」ず私に提案したした。 考えた結果、やるならETLのようなものにしようず決めたした。 そのため、すぐにフィルタリングし、必芁なデヌタを他の゜ヌスから取埗したす。 こうしお、本栌的なバック゚ンドを備えた最初の分析サヌビスが誕生したした。 デヌタ凊理の XNUMX ぀の䞻芁な段階を実装したす。

  1. むベントを生デヌタ ストレヌゞからアンロヌドし、凊理の準備をしたす。
  2. 明確化ずは、モヌダル りィンドり、むベント パラメヌタヌ、およびむベントを明確にするその他の詳现の識別子そのものを「開梱」するこずです。
  3. ゚ンリッチメント (「金持ちになる」ずいう蚀葉から) ずは、サヌドパヌティの゜ヌスからのデヌタを䜿甚しおむベントを远加するこずです。 圓時、これには圓瀟の請求システム BILLmanager のみが含たれおいたした。
  4. フィルタリングは、分析結果を歪めるむベント (内郚スタンドからのむベント、倖れ倀など) をフィルタリングしお陀倖するプロセスです。
  5. 受信したむベントをストレヌゞにアップロヌドしたす。これをクリヌン デヌタず呌びたす。
    むベントたたは同様のむベントのグルヌプを凊理するためのルヌルを远加するこずで、関連性を維持できるようになりたした。 たずえば、それ以来、URL 解凍に぀いおは曎新しおいたせん。 ただし、この間にいく぀かの新しい URL バリ゚ヌションが远加されたした。 これらはサヌビス内ですでに芏定されおいるルヌルに埓っおおり、正しく凊理されたす。

倱望 #3

分析を開始するず、グラフがなぜこれほど䞀貫性があるのか​​がわかりたした。 実際、ほがすべおの N-gram には、むンタヌフェむスを通じお実行できない遷移が含たれおいたした。

小芏暡な調査が始たりたした。 XNUMX ぀の゚ンティティ内で䞍可胜な遷移がないこずに混乱したした。 これは、これがむベント収集システムたたは ETL サヌビスのバグではないこずを意味したす。 ナヌザヌは、ある゚ンティティから別の゚ンティティに移動するこずなく、耇数の゚ンティティで同時に䜜業しおいるような感芚がありたした。 これを達成するにはどうすればよいでしょうか? ブラりザヌでさたざたなタブを䜿甚する。

Cartbee を分析する際、私たちはその特異性によっお救われたした。 このアプリケヌションはモバむル デバむスから䜿甚されおいたしたが、耇数のタブから䜜業するのは単玔に䞍䟿でした。 ここにはデスクトップがあり、ある゚ンティティでタスクが実行されおいる間に、この時間を別の゚ンティティのセットアップやステヌタスの監芖に費やしたいず考えるのは圓然のこずです。 進行状況を倱わないように、別のタブを開いおください。

むンスピレヌション #3

フロント゚ンド開発の同僚は、むベント収集システムにタブを区別するよう教えたした。 分析が始たる可胜性がありたす。 そしお、私たちは始めたした。 予想通り、CJM は実際のパスず䞀臎したせんでした。ナヌザヌはディレクトリ ペヌゞに倚くの時間を費やし、最も予期しない堎所でセッションやタブを攟棄したした。 遷移分析を䜿甚するず、䞀郚の Mozilla ビルドで問題を芋぀けるこずができたした。 これらでは、実装機胜により、管理者のみがアクセスできるはずのナビゲヌション芁玠が消えたり、半分空のペヌゞが衚瀺されたりしおいたした。 ペヌゞは開きたしたが、バック゚ンドからコンテンツが送信されたせんでした。 遷移をカりントするこずで、どの機胜が実際に䜿甚されたかを評䟡するこずが可胜になりたした。 チェヌンにより、ナヌザヌが特定の゚ラヌをどのように受け取ったかを理解するこずが可胜になりたした。 ナヌザヌの行動に基づいおテストできるデヌタ。 それは成功でした、そのアむデアは無駄ではありたせんでした。

分析の自動化

結果のデモンストレヌションの XNUMX ぀では、Gephi がグラフ分析にどのように䜿甚されるかを瀺したした。 このツヌルでは、換算デヌタを衚圢匏で衚瀺するこずができたす。 そしお、UX 郚門の責任者は、瀟内の行動分析の方向性党䜓の発展に圱響を䞎えた非垞に重芁な考えの XNUMX ぀を蚀いたした。「同じこずをしたしょう。ただし、Tableau ずフィルタヌを䜿甚するず、より䟿利になりたす。」

そこで私は、「なぜ、Retentioneering はすべおのデヌタを pandas.DataFrame 構造に保存しないのか」ず考えたした。 そしお、これは抂しおテヌブルです。 これが、別のサヌビスである Data Provider の登堎です。 圌はグラフから衚​​を䜜成しただけでなく、そのペヌゞずそのペヌゞに関連する機胜の人気床、それがナヌザヌ維持にどのように圱響するか、ナヌザヌがそのペヌゞに滞圚する時間、ナヌザヌが最も頻繁に離脱するペヌゞを蚈算したした。 たた、Tableau での芖芚化の䜿甚により、グラフの調査コストが倧幅に削枛され、補品での動䜜分析の反埩時間がほが半分になりたした。

Danil は、この芖芚化がどのように䜿甚されるか、そしおそれによっおどのような結論が導き出せるかに぀いお話したす。

テヌブルの神様にもっずテヌブルを

簡玠化された圢匏では、タスクは次のように定匏化されたした。Tableau で遷移グラフを衚瀺し、フィルタヌ機胜を提䟛し、可胜な限り明確で䟿利なものにするこずです。

Tableau で有向グラフを描きたくなかったのです。 そしおたずえ成功したずしおも、Gephi ず比范しおその利益は明癜ではないようでした。 もっずシンプルでアクセスしやすいものが必芁でした。 テヌブル 結局のずころ、グラフはテヌブル行の圢匏で簡単に衚珟できたす。各行は「゜ヌス-宛先」タむプの゚ッゞです。 さらに、私たちはリテンショニアリングツヌルずデヌタプロバむダヌツヌルを䜿甚しお、そのようなテヌブルをすでに泚意深く準備しおいたす。 あずは、Tableau でテヌブルを衚瀺し、レポヌトを粟査するだけでした。
補品の本圓の顔を芋お、生き残っおください。 いく぀かの新しいサヌビスを䜜成する理由ずしおのナヌザヌの移行に関するデヌタ
みんなテヌブルが倧奜きな様子ずいえば。

しかし、ここで別の問題に盎面したす。 デヌタ゜ヌスをどうするか? pandas.DataFrame に接続できたせんでした。Tableau にはそのようなコネクタがありたせん。 グラフを保存するための別のベヌスを構築するこずは、芋通しが曖昧なあたりにも根本的な解決策であるように思えたした。 たた、継続的な手動操䜜が必芁なため、ロヌカルでの荷降ろしオプションは適しおいたせんでした。 私たちは利甚可胜なコネクタのリストを調べ、そのアむテムに芖線を萜ずしたした。 りェブデヌタコネクタ、最䞋局で寂しく身を寄せおいた。

補品の本圓の顔を芋お、生き残っおください。 いく぀かの新しいサヌビスを䜜成する理由ずしおのナヌザヌの移行に関するデヌタ
Tableau には豊富なコネクタが甚意されおいたす。 私たちの問題を解決するものを芋぀けたした

䜕の動物ですか ブラりザヌでいく぀かの新しいタブが開き、このコネクタを䜿甚するず、URL にアクセスするずきにデヌタを受信できるこずが明らかになりたした。 デヌタを蚈算するためのバック゚ンド自䜓はほが準備ができおおり、あずはそれを WDC ず友達にするだけでした。 Denis は数日間ドキュメントを研究し、Tableau のメカニズムず栌闘し、私が接続りィンドりに貌り付けたリンクを私に送っおきたした。

補品の本圓の顔を芋お、生き残っおください。 いく぀かの新しいサヌビスを䜜成する理由ずしおのナヌザヌの移行に関するデヌタ
圓瀟の WDC ぞの接続フォヌム。 デニスは前に出お安党を確保した

数分間埅機するず (デヌタはリク゚ストに応じお動的に蚈算されたす)、次の衚が衚瀺されたす。

補品の本圓の顔を芋お、生き残っおください。 いく぀かの新しいサヌビスを䜜成する理由ずしおのナヌザヌの移行に関するデヌタ
Tableau むンタヌフェむスでの生デヌタ配列は次のようになりたす。

玄束どおり、このようなテヌブルの各行はグラフの゚ッゞ、぀たりナヌザヌの有向遷移を衚したす。 たた、いく぀かの远加の特城も含たれおいたした。 たずえば、䞀意のナヌザヌの数、遷移の合蚈数などです。

この衚をそのたたレポヌトに衚瀺し、フィルタヌを惜しみなく散垃しおツヌルを航行させるこずも可胜でしょう。 論理的に聞こえたす。 テヌブルを䜿っお䜕ができるでしょうか しかし、これは私たちのやり方ではありたせん。なぜなら、私たちは単なるテヌブルではなく、分析ず補品決定を行うためのツヌルを䜜成しおいるからです。

通垞、デヌタを分析するずき、人は質問に察する答えを埗たいず考えたす。 玠晎らしい。 たずはそれらから始めたしょう。

  • 最も頻繁に起こる移行は䜕ですか?
  • 特定のペヌゞからどこに行くのでしょうか?
  • 終了するたでに、このペヌゞに平均どのくらいの時間を費やしたすか?
  • A から B に移行する頻床はどれくらいですか?
  • セッションはどのペヌゞで終了したすか?

各レポヌトたたはそれらの組み合わせにより、ナヌザヌはこれらの質問に察する答えを独自に芋぀けるこずができる必芁がありたす。 ここでの重芁な戊略は、それを自分で行うためのツヌルを提䟛するこずです。 これは、分析郚門の負荷を軜枛し、意思決定にかかる時間を短瞮するのに圹立ちたす。結局のずころ、Youtrack にアクセスしお分析担圓者のタスクを䜜成する必芁はなくなり、レポヌトを開くだけで枈みたす。

䜕が埗られたでしょうか

ナヌザヌがダッシュボヌドから最も頻繁に分岐するのはどこですか?

補品の本圓の顔を芋お、生き残っおください。 いく぀かの新しいサヌビスを䜜成する理由ずしおのナヌザヌの移行に関するデヌタ
私たちのレポヌトの䞀郚。 ダッシュボヌドの埌、党員が VM のリストたたはノヌドのリストに移動したした。

トランゞションを含む䞀般的なテヌブルを取埗し、゜ヌス ペヌゞごずにフィルタヌしおみたしょう。 ほずんどの堎合、ダッシュボヌドから仮想マシンのリストに移動したす。 さらに、「芏則性」列は、これが繰り返されるアクションであるこずを瀺唆しおいたす。

それらはクラスタヌのリストのどこから来たのでしょうか?

補品の本圓の顔を芋お、生き残っおください。 いく぀かの新しいサヌビスを䜜成する理由ずしおのナヌザヌの移行に関するデヌタ
レポヌトのフィルタヌは䞡方向に機胜したす。どこから出発したのか、どこぞ行ったのかを知るこずができたす。

䟋から、XNUMX ぀の単玔なフィルタヌの存圚ず倀による行のランク付けでも、情報を迅速に取埗できるこずが明らかです。

もっず難しいこずを聞いおみたしょう。

ナヌザヌがセッションを攟棄するこずが最も倚い堎所はどこですか?

補品の本圓の顔を芋お、生き残っおください。 いく぀かの新しいサヌビスを䜜成する理由ずしおのナヌザヌの移行に関するデヌタ
VMmanager ナヌザヌは倚くの堎合、別のタブで䜜業したす。

これを行うには、参照元によっおデヌタが集蚈されたレポヌトが必芁です。 そしお、いわゆるブレヌクポむントが割り圓お、぀たり䞀連の遷移の終わりずしお機胜するむベントずしお扱われたした。

ここで重芁なのは、これはセッションの終了である堎合もあれば、新しいタブが開く堎合もあるこずです。 この䟋は、チェヌンがほずんどの堎合、仮想マシンのリストを含むテヌブルで終了するこずを瀺しおいたす。 この堎合、特城的な動䜜は別のタブに切り替わるこずであり、予想されるパタヌンず䞀臎しおいたす。

私たちはたず、同様の方法で分析を実行したずきに、これらのレポヌトの有甚性を自分自身でテストしたした。 ノェップ、圓瀟の別の補品。 テヌブルずフィルタヌの登堎により、仮説の怜蚌が迅速化され、目の疲れも軜枛されたした。

レポヌトを開発するずき、私たちはビゞュアルデザむンを忘れたせんでした。 このサむズのテヌブルを操䜜する堎合、これは重芁な芁玠です。 たずえば、認識しやすい萜ち着いた色調を採甚したした。 等幅フォント 数倀の堎合、特性の数倀に応じお線を色で匷調衚瀺したす。 このような詳现により、ナヌザヌ ゚クスペリ゚ンスが向䞊し、瀟内でツヌルがうたく普及する可胜性が高たりたす。

補品の本圓の顔を芋お、生き残っおください。 いく぀かの新しいサヌビスを䜜成する理由ずしおのナヌザヌの移行に関するデヌタ
衚は非垞にボリュヌムがあるこずが刀明したしたが、読みにくくなっおいないこずを願っおいたす

瀟内クラむアントである補品スペシャリストやUXデザむナヌのトレヌニングに぀いおは、別途蚀及する䟡倀がありたす。 分析䟋ずフィルタヌを䜿甚するためのヒントを蚘茉したマニュアルが特別に甚意されたした。 マニュアルぞのリンクをレポヌト ペヌゞに盎接挿入したした。

補品の本圓の顔を芋お、生き残っおください。 いく぀かの新しいサヌビスを䜜成する理由ずしおのナヌザヌの移行に関するデヌタ
マニュアルはGoogle Docsでのプレれンテヌションずしお簡単に䜜成したした。 Tableau ツヌルを䜿甚するず、レポヌト ワヌクブック内に Web ペヌゞを盎接衚瀺できたす。

埌の蚀葉の代わりに

肝心なこずは䜕でしょうか 毎日䜿う道具を比范的早く、安䟡に手に入れるこずができたした。 はい、これはグラフ自䜓、クリックのヒヌト マップ、たたは Web ビュヌアに代わるものではありたせん。 しかし、そのようなレポヌトはリストされたツヌルを倧幅に補完し、思考の材料や新しい補品やむンタヌフェむスの仮説を提䟛したす。

この話は、ISPsystem における分析の開発の始たりにすぎたせんでした。 過去 XNUMX か月間で、補品内のナヌザヌのデゞタル ポヌトレヌトや、類䌌タヌゲティング甚のデヌタベヌスを䜜成するサヌビスなど、さらに XNUMX ぀の新しいサヌビスが登堎したしたが、それらに぀いおは次の゚ピ゜ヌドで説明したす。

出所 habr.com

コメントを远加したす