Upgrade to Pro — share decks privately, control downloads, hide ads and more …

LINEポイントクラブにおける PerlからKotlinへの移行を振り返る / The migration from Perl to Kotlin at LINE Point Club

LINEポイントクラブにおける PerlからKotlinへの移行を振り返る / The migration from Perl to Kotlin at LINE Point Club

「LINEポイントクラブ」は、LINE Payでの支払いやLINEの各種サービスで使える共通ポイント「LINEポイント」を貯められる様々なミッションの提供や、連携サービスでの利用の案内を行うポータルサービスです。LINEポイントクラブは、2013年6月に前身のサービスが提供開始され、その後日本では2020年からLINEポイントクラブと改称して運営されてきましたが、システム開発を始めた2013年から2021年までの8年間、Perlで開発され続けてきました。
2021年1月から1年間をかけて一気にKotlinへ書き換えるプロジェクトを進行し、2022年4月に私が担当するプロジェクトとしては一旦終わりました。本イベントでは、LINE DEVELOPER DAY 2021では語れなかった、Perlプロダクトを現代的なアーキテクチャと技術セットで再実装するプロジェクトの全貌と、プロジェクトの担当を終えた今の気持ちを赤裸々にお話しします。

LINE DEVELOPER DAY 2021での発表とアフターインタビューも併せてご覧ください。
https://linedevday.linecorp.com/2021/ja/sessions/157/
https://engineering.linecorp.com/ja/interview/story-of-rewriting-8-year-old-perl-product-with-kotlin/

大原 康平 / LINE株式会社 開発4センター OA Dev 5チーム
2018年入社の新卒4年目。LINEポイントクラブのサーバサイドの開発を担当。問題が発生した時の原因を探したり、パフォーマンスのボトルネックを調べて改善するのが好きです。夏の夜のモワッとした空気が好きです。

※この資料は以下イベントで発表しました
https://line.connpass.com/event/246551/

A3966f193f4bef226a0d3e3c1f728d7f?s=128

LINE Developers
PRO

May 25, 2022
Tweet

More Decks by LINE Developers

Other Decks in Technology

Transcript

  1. -*/&ϙΠϯτΫϥϒʹ͓͚Δ 1FSM͔Β,PUMJO΁ͷҠߦΛৼΓฦΔ 0"%FWνʔϜେݪ߁ฏ 

  2. ొஃऀ঺հ l ։ൃηϯλʔ 0GGJDJBM"DDPVOU։ൃࣨ l αʔόαΠυ։ൃऀ l ͜Ε·Ͱͷ࢓ࣄ l ೥݄

    d೥݄ɿ-*/&ϙΠϯτΫϥϒ։ൃ l ೥݄ dɿ-*/&ެࣜΞΧ΢ϯτ։ൃ l ,PUMJOྺ l ೥݄͔Β l ͦͷલ͸ 1FSMϝΠϯ +BWBͪΐͬͱ େݪ ߁ฏ
  3. ʮ-*/&ϙΠϯτΫϥϒʯͱ͸ʁ ͳͥ ,PUMJOʹॻ͖׵͑ͨͷ͔ʁ 1FSM͔Β ,PUMJO΁Ҡߦ͢ΔϓϩδΣΫτͷશ๴ 1FSM͔Β ,PUMJO΁Ҡߦ͢ΔϓϩδΣΫτͰى͖ͨ໰୊ɾվળ ϓϩδΣΫτΛৼΓฦͬͯΈͯ 01 02

    03 04 05 ࠓ೔͓࿩͢͠Δ಺༰
  4. ʮ-*/&ϙΠϯτΫϥϒʯͱ͸ʁ ͳͥ ,PUMJOʹॻ͖׵͑ͨͷ͔ʁ 1FSM͔Β ,PUMJO΁Ҡߦ͢ΔϓϩδΣΫτͷશ๴ 1FSM͔Β ,PUMJO΁Ҡߦ͢ΔϓϩδΣΫτͰى͖ͨ໰୊ɾվળ ϓϩδΣΫτΛৼΓฦͬͯΈͯ 01 02

    03 04 05 ࠓ೔͓࿩͢͠Δ಺༰
  5. -*/&ϙΠϯτΫϥϒͱ͸ʁ

  6. ஷΊΔλϒ ϙΠϯτΛஷΊΔ͜ͱ͕Ͱ͖Δ ೥͔ΒαʔϏε։࢝ͨ͠ 1FSMͰॻ͔Ε͍ͯͨ ೥͔Β೥ʹ͔͚ͯ ,PUMJOʹॻ͖׵͑ͨ ʢࠓճͷൃදʣ

  7. ࢖͏λϒ ϙΠϯτΛ༷ʑͳ΋ͷʹަ׵͢Δ͜ͱ͕Ͱ͖Δ ೥ʹαʔϏε։࢝ͨ͠ ,PUMJOͰॻ͔Ε͍ͯΔ

  8. l QNϑΝΠϧͷ਺ l ௒͑ʢςετ͸আ͘ʣ l QNϑΝΠϧɿ$POUSPMMFS .PEFM ػೳͷϏδωεϩδοΫͷཻ౓ l ίϛοτ਺

    l ໿ ίϛοτ ։ൃͷن໛ײɿϦϓϨʔεલͷ 1FSMϓϩδΣΫτͰ͸
  9. l LUϑΝΠϧͷ਺ l ௒͑ʢςετ͸আ͘ʣ l 1FSMϓϩδΣΫτͷ ௒ͷ QNϑΝΠϧΑΓ΋૿͍͑ͯΔओͳཧ༝ l %BUBDMBTT͕૿͑ͨҝ

    l ϩδοΫΛϨΠϠ͝ͱʹ෼͚ͨҝ l ίϛοτ਺ l ໿ ίϛοτ l ͬ͘͟Γܭࢉ͢Δͱฏ೔ຖ೔໿ ίϛοτҎ্ͷࠩ෼͕औΓࠐ·Ε͍ͯΔΠϝʔδ ։ൃͷن໛ײɿϦϓϨʔεޙͷ ,PUMJOϓϩδΣΫτͰ͸
  10. ʮ-*/&ϙΠϯτΫϥϒʯͱ͸ʁ ͳͥ ,PUMJOʹॻ͖׵͑ͨͷ͔ʁ 1FSM͔Β ,PUMJO΁Ҡߦ͢ΔϓϩδΣΫτͷશ๴ 1FSM͔Β ,PUMJO΁Ҡߦ͢ΔϓϩδΣΫτͰى͖ͨ໰୊ɾվળ ϓϩδΣΫτΛৼΓฦͬͯΈͯ 01 02

    03 04 05 ࠓ೔͓࿩͢͠Δ಺༰
  11. l ͳͥ (P΍ଞͷݴޠ͡Όͳ͍ͷ͔ʁ l +BWB,PUMJO͕ࣾ಺Ͱ࠷΋࢖ΘΕΔݴޠ͔ͩΒ l ผͷνʔϜͱ஌ݟ͕ڞ༗͠΍͍͢J l ΤϯδχΞ͕ผͷνʔϜʹҟಈ͠΍͍͢ʢΩϟονΞοϓ͠΍͍͢ʣJ l

    ࣾ಺ͷΤίγεςϜ͕ར༻Ͱ͖ΔJ l ͳͥ +BWBͰͳ͍ͷ͔ʁ l νʔϜͰ։ൃͯ͠ΔଞͷϓϩμΫτͱٕज़ηοτΛ߹Θ͔͔ͤͨͬͨΒ l ,PUMJO͕ॻ͖΍͍͢ͱฉ͍͍ͯͨ ͳͥ ,PUMJOʹॻ͖׵͑ͨͷ͔ʁ
  12. l ՝୊ղܾͷҝ l γεςϜͷߏ੒͕ෳࡶԽ͍ͯͨ͠ l ஷΊΔλϒ͕ 1FSMͰ࢖͏λϒ͕ ,PUMJO l ౰࣌

    1FSM͔Β௚઀ )#BTF͕࢖͑ͳ͔ͬͨҝ +BWB,PUMJOͰॻ͔Εͨ )#BTFHBUFXBZBQQΛ࣮૷ɾ؅ཧ͍ͯͨ͠ l ػೳࣗମͷෳࡶԽɻෆཁͳػೳ΋ଟ͔ͬͨ l ݴޠͷ໰୊Ͱ͸ͳ͍͕ɺॻ͖׵͑ϓϩδΣΫτʹΑͬͯղܾͰ͖ͦ͏ͳϙΠϯτ l ஷΊΔλϒΛ։ൃ͢ΔͨΊͷ 1FSMΤϯδχΞͷ࠾༻͕೉͍͠ l 1FSMͷ࠷ۙͷϛυϧ΢ΣΞʹର͢ΔΫϥΠΞϯτϥΠϒϥϦ͕ ๛෋ͱ͸ݴ͑ͳ͘ͳ͖ͬͯͨ 1FSM͔Β͜ͷλΠϛϯάͰॻ͖׵͑Δ͜ͱʹܾΊͨཧ༝ʢʣ
  13. l ॻ͖׵͑ϓϩδΣΫτʹऔΓ૊ΊΔ࣌ظͩͬͨҝ l ௚ۙ൒೥͸େ͖ͳγεςϜվम͕ͳͦ͞͏ͱ͍͏ݟ௨ཱ͕͍ͬͯͨ͠ 1FSM͔Β͜ͷλΠϛϯάͰॻ͖׵͑Δ͜ͱʹܾΊͨཧ༝ʢʣ

  14. l ݴޠɿ,PUMJO l ϑϨʔϜϫʔΫɿ4QSJOH#PPU "SNFSJB l ϛυϧ΢ΣΞɿ.Z42- )#BTF 3FEJT ,BGLB

    l "1*ɿ3&45 H31$ ٕज़ελοΫ
  15. ʮ-*/&ϙΠϯτΫϥϒʯͱ͸ʁ ͳͥ ,PUMJOʹॻ͖׵͑ͨͷ͔ʁ 1FSM͔Β ,PUMJO΁Ҡߦ͢ΔϓϩδΣΫτͷશ๴ 1FSM͔Β ,PUMJO΁Ҡߦ͢ΔϓϩδΣΫτͰى͖ͨ໰୊ɾվળ ϓϩδΣΫτΛৼΓฦͬͯΈͯ 01 02

    03 04 05 ࠓ೔͓࿩͢͠Δ಺༰
  16. Kafka ,PUMJO ͰͷγεςϜΞʔΩςΫνϟ media core admin cv-worker Redis Clusters Redis

    gRPC gRPC media DB DB for Earn Tab MySQL REST DB for Use Tab MySQL MySQL HBase
  17. Kafka ,PUMJO ͰͷγεςϜΞʔΩςΫνϟ media core admin cv-worker Redis Clusters Redis

    gRPC gRPC media DB DB for Earn Tab MySQL REST DB for Use Tab MySQL MySQL HBase Ϣʔβ͕ϙΠϯτΫϥϒ΁ΞΫηεͨ͠ࡍʹ֤छίϯςϯπΛฦ͢ BQQ
  18. Kafka ,PUMJO ͰͷγεςϜΞʔΩςΫνϟ media core admin cv-worker Redis Clusters Redis

    gRPC gRPC media DB DB for Earn Tab MySQL REST DB for Use Tab MySQL MySQL HBase ؅ཧը໘༻ͷ BQQ
  19. Kafka ,PUMJO ͰͷγεςϜΞʔΩςΫνϟ media core admin cv-worker Redis Clusters Redis

    gRPC gRPC media DB DB for Earn Tab MySQL REST DB for Use Tab MySQL MySQL HBase ϙΠϯτ෇༩ॲཧΛߦ͏ BQQ
  20. Kafka ,PUMJO ͰͷγεςϜΞʔΩςΫνϟ media core admin cv-worker Redis Clusters Redis

    gRPC gRPC media DB DB for Earn Tab MySQL REST DB for Use Tab MySQL MySQL HBase ஷΊΔλϒͷओͳػೳΛ H31$ Ͱఏڙ͢Δ BQQ
  21.  DPSFBQQ։ൃ׬ྃɾ ଞͷ BQQͷઃܭ  ΠϯςάϨʔγϣϯɾ 2" 1FSM,PUMJOҠߦϓϩδΣΫτͷશ๴ɿεέδϡʔϧ 1FSMʹ࢒͍ͯͨ͠ ػೳͷ։ൃ

     શମ։ൃ׬ྃ  ϝΠϯػೳͷϦϦʔε  શମઃܭɾDPSFBQQઃܭɾ ։ൃ؀ڥ੔උ
  22.  DPSFBQQ։ൃ׬ྃɾ ଞͷ BQQͷઃܭ  ΠϯςάϨʔγϣϯɾ 2" 1FSMʹ࢒͍ͯͨ͠ ػೳͷ։ൃ 

    શମ։ൃ׬ྃ  ϝΠϯػೳͷϦϦʔε  શମઃܭɾDPSFBQQઃܭɾ ։ൃ؀ڥ੔උ 1FSM,PUMJOҠߦϓϩδΣΫτͷશ๴ɿεέδϡʔϧ
  23. l ߹ܭ໊ߏ੒ l ໊ͷ +BWB,PUMJOΤϯδχΞ l 1FSMϓϩδΣΫτͷ࢓༷ʹ͍ͭͯ͸શવ෼͔Βͳ͍ঢ়ଶ͔Βͷελʔτ l ݩʑͷΞαΠϯɿ࢖͏λϒɾͦͷଞͷϓϩδΣΫτͷ։ൃ l

    ໊ͷ 1FSMΤϯδχΞ l +BWB,PUMJOʹ͍ͭͯࢲ͸গ͚ͩ͠෼͔Δɺଞͷ໊͸શવ෼͔Βͳ͍ঢ়ଶ ͔Βͷελʔτ l ݩʑͷΞαΠϯɿஷΊΔλϒͷ։ൃ ϓϩδΣΫτͷશ๴ɿ։ൃऀߏ੒
  24. l ՝୊ l λεΫͷׂΓৼΓ΍޻਺ݟੵ΋Γͷ೉͕͋ͬͨ͠͞ l ղܾࡦ l ҠߦϓϩδΣΫτॳظ͸؇͍෼ۀମ੍Λෑ͍ͨ l 1FSMϝϯόʔ͕࢓༷Λॻ͘

    l +BWB,PUMJOϝϯόʔ͸։ൃΛ؆୯ʹਐΊΒΕΔΑ͏ͳࣄલ४උΛ͢Δ ՝୊ɿνʔϜ಺ͷۀ຿஌ࣝɾ։ൃεΩϧͷෆۉߧ
  25. l ݁Ռ l ฒߦͯ͠࢓༷ࡦఆͱ։ൃͷ४උΛਐΊΒΕͨ l 1FSMϝϯόʔ͕ٕज़ελοΫ͕෼͔Βͳ͍ؒ͸࢓༷͕ᐆດͳ෦෼͕࢒ͬͯ ͠·ͬͨ l ։ൃ͠ͳ͕Β࢓༷Λ੔͍͑ͯ͘͜ͱʹͳ͍ͬͯͬͨ l

    +BWB,PUMJOϝϯόʔʹ͸։ൃɾίʔυϨϏϡʔͷෛՙ͕دͬͯ͠·ͬͨ l ίʔυϨϏϡʔίετ΋େ͖Ίʹͳͬͨ l ࢓༷ͷશ๴ ٕज़ͷશ๴͕ݟ͑ͯͳ͍ͷͰ࡞ۀྔͷݟੵ΋Γ͕೉͔ͬͨ͠ ՝୊ɿνʔϜ಺ͷۀ຿஌ࣝɾ։ൃεΩϧͷෆۉߧ
  26. l ΑΓεϜʔζͳελʔτΛ੾ΔͨΊʹ͸Ͳ͏ͨ͠ΒΑ͔͔ͬͨʁ l ࢓༷ࡦఆͷ࣌ؒΛ΋ͬͱ௕͘औΔ l ࢓༷ϨϏϡʔɾٕज़शಘͷલ४උΛΑΓஸೡʹ΍Δ l ཧ૝Λݴ͑͹ɿ্هͭͰϓϥεϲ݄͘Β͍ͱΕΔͱεϜʔζͩͬͨΑ͏ʹײ͡Δ l ޻਺Λݟੵ΋Δࡍʹɺ

    +BWB,PUMJOϝϯόʔͷίʔυϨϏϡʔෛՙΛ ΑΓେ͖Ίʹߟྀ͢Δ ՝୊ɿνʔϜ಺ͷۀ຿஌ࣝɾ։ൃεΩϧͷෆۉߧ
  27. l ࠷΋େ੾ʹͨ͜͠ͱ l ʮ-*/&ϙΠϯτΫϥϒʯӡӦʹܞΘΔਓ͕ࢪࡦΛԁ׈ʹ਱ߦͰ͖ΔΑ͏ʹ͢Δ͜ͱ l ʮஷΊΔʯλϒͱʮ࢖͏ʯλϒͷΞϓϦέʔγϣϯͷ౷߹ l ϝϯςφϯείετ࡟ݮͱଐਓԽͷղফΛૂ͏ l ઃܭͷݟ௚͠

    l ࣗ෼ͨͪͰϝϯςφϯε͍ͯͨ͠ಠࣗͷδϣϒΩϡʔΛഇࢭ͠ɺ ,BGLBΛಋೖͨ͜͠ͱͳͲ ઃܭͰେ੾ʹͨ͜͠ͱɾલఏͱͳͬͨػೳཁ݅
  28. l σʔλϕʔεʹେ͖͘खΛೖΕΔ͜ͱ l ຊ౰͸εΩʔϚߏ੒͕ෳࡶԽ͍ͯͨ͠ͷͰखΛೖΕ͔ͨͬͨ l ޻਺͕๲େʹͳΓ࠷ॳͷϦϦʔε·Ͱ͕͔͔࣌ؒΓ͗͢Δ͜ͱ͕൑໌ͨ͠ l ୅ΘΓʹɺΞϓϦέʔγϣϯͷίΞ෦෼ͰෳࡶੑΛӅณ͢Δํ਑ʹͨ͠ ઃܭͰબ͹ͳ͔ͬͨҊ

  29. Kafka ,PUMJO ͰͷγεςϜΞʔΩςΫνϟɿϙΠϯτ media core admin cv-worker Redis Clusters Redis

    gRPC gRPC media DB DB for Earn Tab MySQL REST DB for Use Tab MySQL MySQL HBase 3FEJTʹͷΈ઀ଓ͠εέʔϥϏϦςΟͷվળ
  30. Kafka ,PUMJO ͰͷγεςϜΞʔΩςΫνϟɿϙΠϯτ media core admin cv-worker Redis Clusters Redis

    gRPC gRPC media DB DB for Earn Tab MySQL REST DB for Use Tab MySQL MySQL HBase ಠࣗͷδϣϒΩϡʔ͔Β ,BGLB΁Ҡߦ
  31. Kafka ,PUMJO ͰͷγεςϜΞʔΩςΫνϟɿϙΠϯτ media core admin cv-worker Redis Clusters Redis

    gRPC gRPC media DB DB for Earn Tab MySQL REST DB for Use Tab MySQL MySQL HBase ஷΊΔλϒͱ࢖͏λϒͷ౷߹
  32.  DPSFBQQ։ൃ׬ྃɾ ଞͷ BQQͷઃܭ  ΠϯςάϨʔγϣϯɾ 2" 1FSMʹ࢒͍ͯͨ͠ ػೳͷ։ൃ 

    શମ։ൃ׬ྃ  ϝΠϯػೳͷϦϦʔε  શମઃܭɾDPSFBQQઃܭɾ ։ൃ؀ڥ੔උ ॗʑͱ։ൃ 1FSM,PUMJOҠߦϓϩδΣΫτͷશ๴ɿεέδϡʔϧ
  33.  DPSFBQQ։ൃ׬ྃɾ ଞͷ BQQͷઃܭ  ΠϯςάϨʔγϣϯɾ 2" 1FSMʹ࢒͍ͯͨ͠ ػೳͷ։ൃ 

    શମ։ൃ׬ྃ  ϝΠϯػೳͷϦϦʔε  શମઃܭɾDPSFBQQઃܭɾ ։ൃ؀ڥ੔උ ॗʑͱ։ൃ 1FSM,PUMJOҠߦϓϩδΣΫτͷશ๴ɿεέδϡʔϧ -*/&%&7&-01&3%":Ͱ͜͜ͷ࿩Λͯ͠·͢ʂ ಈըɾهࣄΛݟ͍ͯͩ͘͞ʂ
  34.  DPSFBQQ։ൃ׬ྃɾ ଞͷ BQQͷઃܭ  ΠϯςάϨʔγϣϯɾ 2" 1FSMʹ࢒͍ͯͨ͠ ػೳͷ։ൃ 

    શମ։ൃ׬ྃ  ϝΠϯػೳͷϦϦʔε  શମઃܭɾDPSFBQQઃܭɾ ։ൃ؀ڥ੔උ 1FSM,PUMJOҠߦϓϩδΣΫτͷશ๴ɿεέδϡʔϧ
  35. l 1FSMͰಠཱͯ͠ಈ࡞Մೳͳػೳ l όονॲཧ l ؅ཧը໘ l ֎෦޲͚ͷ "1* ॳظͷϦϦʔεʹؚΊͳ͔ͬͨػೳ

    σʔλϕʔε΁ͷมߋΛ࠷খݶʹͱͲΊͨ͜ͱͰ 1FSMΛ࢒͠ͳ͕ΒҠߦͰ͖ͨ
  36. l ΄ͱΜͲ͸ҠߦͰ͖ͨ l ݱࡏ΋एׯͷҠߦ͸࢒͍ͬͯΔ͕ɺ શϝϯόʔ͕ϑϧͰҠߦ࡞ۀΛ͍ͯ͠Δ༁Ͱ͸ͳ͍ l ࢒͍ͬͯΔͷ͸ɺࡉ͔͍όονॲཧ l DPSPVUJOF΍ JOMJOFDMBTTͳͲͷػೳ΋ར༻࢝͠Ί͍ͯΔ

    ݱঢ়
  37. ʮ-*/&ϙΠϯτΫϥϒʯͱ͸ʁ ͳͥ ,PUMJOʹॻ͖׵͑ͨͷ͔ʁ 1FSM͔Β ,PUMJO΁Ҡߦ͢ΔϓϩδΣΫτͷશ๴ 1FSM͔Β ,PUMJO΁Ҡߦ͢ΔϓϩδΣΫτͰى͖ͨ໰୊ɾվળ ϓϩδΣΫτΛৼΓฦͬͯΈͯ 01 02

    03 04 05 ࠓ೔͓࿩͢͠Δ಺༰
  38. l ࠓ೔࿩͢͜ͱ l ྫ֎ॲཧͷ΍Γํʹ໰୊͕͋ͬͨ࿩ l ੩తղੳπʔϧ %FUFLU Λಋೖͨ͠Βྑ͔ͬͨΑͱ͍͏࿩ l ࠓ೔࿩͞ͳ͍͜ͱ

    l -*/&%&7&-01&3%":Ͱൃදͨ͠಺༰ ,PUMJOҠߦϓϩδΣΫτͰى͖ͨ໰୊ͱվળ
  39. l ͜Μͳίʔυॻ͍ͯ·ͤΜ͔ʁ ྫ֎ॲཧͷ΍Γํ͕ྑ͘ͳ͔ͬͨ

  40. l ͜Μͳίʔυॻ͍ͯ·ͤΜ͔ʁ ྫ֎ॲཧͷ΍Γํ͕ྑ͘ͳ͔ͬͨ ࣗલͰϩΪϯά͔ͯ͠Β࠶ૹग़͢ΔΞϯνύλʔϯ

  41. l ͲΜͳ໰୊͕ى͜Δͷ͔ʁ l ಉ͡໰୊ʹىҼ͢Δϩά͕ෳ਺ग़ྗ͞ΕΔ͜ͱͰࠞཚΛҾ͖ى͜͢ l ͳͥࠞཚ͕ى͜Δͷ͔ʁ l ݸผͷϩάʹՃ͑ͯɺେҬྫ֎ϋϯυϥͰ΋ϩά͕ग़ྗ͞ΕΔҝ l େҬྫ֎ϋϯυϥͱ͸ʁ

    l ϑϨʔϜϫʔΫଆͰ༻ҙ͍ͯ͠ΔେҬతͳྫ֎ॲཧػߏͷ͜ͱ l ෳ਺ $POUSPMMFSʹڞ௨ͨ͠ྫ֎ϋϯυϥ͕ॻ͚Δ l ྫɿ4QSJOH.7$Ͱ͸ !$POUSPMMFS"EWJDF Λ෇༩ͨ͠ΫϥεͰهड़Ͱ͖Δ ࣗલͰϩΪϯά͔ͯ͠Β࠶ૹग़͢ΔΞϯνύλʔϯͱ͸ʁ ˞ࢀߟɿஈ֊తʹཧղ͢Δ +BWBྫ֎ॲཧ IUUQTRJJUBDPNUTJJUFNTEGDDEBFE
  42. l ϩΪϯά͸େҬྫ֎ϋϯυϥʹ೚ͤΔ l ,PUMJOͰ͸ελοΫτϨʔε͕ϩάʹग़ྗͰ͖ΔͷͰɺ Լͷ֊૚Ͱࡉ͔͘ϩΪϯά͢Δඞཁ͸ͳ͍ ઌ΄Ͳͷίʔυ͸Ͳ͏͢Ε͹ྑ͍ͷ͔ʁ

  43. l 1FSMͷϓϩδΣΫτͰ͸େҬྫ֎ϋϯυϥ΍ελοΫτϨʔεΛ ϩάʹग़ྗ͢Δ࢓૊Έʹͳ͍ͬͯͳ͔ͬͨҝɺஞҰϩΪϯά͍ͯͨ͠ l ͦ͏͍ͬͨίʔυΛ ,PUMJOʹҠߦ͢ΔࡍʹΞϯνύλʔϯʹ͍ؕͬͯͨ ͳͥ͜ͷΞϯνύλʔϯʹؕͬͨͷ͔ʁ

  44. l %FUFLU ಋೖલ͸ LUMJOU ͸ಋೖ͞Ε͍ͯͨ l LUMJOU ͱ %FUFLU ͷҧ͍

    l LUMJOU ͸ DPEJOHTUZMFΛ֬ೝ͢Δ l %FUFLU ͸ίʔυͷෳࡶ౓΍ίʔυͷ೏͍ʢ໰୊ͷஹީʣΛݕ஌͢Δ ੩తղੳπʔϧ %FUFLU Λಋೖͨ͠Βྑ͔ͬͨ
  45. l -POH.FUIPE ΍ $PNQMFY.FUIPE ͋ͨΓͷܯࠂ͕ಛʹ͋Γ͕͍ͨ l ਓ͕ؒʮ͜ͷϝιου͸௕͍ɾෳࡶͳͷͰमਖ਼͍ͯͩ͘͠͞ʯͱϨϏϡʔ͢Δͷ͸೉͍͠ l ओ؍తͳଆ໘͕͋ͬͯࢦఠͮ͠Β͔ͬͨΓਓʹΑͬͨΓ͢Δ෦෼͕େ͖͍ҝ l

    ػցతʹܯࠂ͕ग़Δͱ඼࣭ͷҡ͕࣋͠΍͍͢ l େ͖͍ϓϩδΣΫτͰ΋్த͔Βಋೖ͠΍͍͢ l طଘͷίʔυʹग़͍ͯΔܯࠂΛແࢹ͢Δҝͷ CBTFMJOFYNM Λग़ྗͰ͖Δػೳ͕ศར %FUFLU ͷྑ͍఺
  46. ʮ-*/&ϙΠϯτΫϥϒʯͱ͸ʁ ͳͥ ,PUMJOʹॻ͖׵͑ͨͷ͔ʁ 1FSM͔Β ,PUMJO΁Ҡߦ͢ΔϓϩδΣΫτͷશ๴ 1FSM͔Β ,PUMJO΁Ҡߦ͢ΔϓϩδΣΫτͰى͖ͨ໰୊ɾվળ ϓϩδΣΫτΛৼΓฦͬͯΈͯ 01 02

    03 04 05 ࠓ೔͓࿩͢͠Δ಺༰
  47. l ܕ͕͋Δɾ/VMM ҆શੑ͕͋Δ l දݱྗ͕ߴ͍ l ֦ுؔ਺ l JG USZ

    XIFOͳͲ͕஋ΛฦͤΔ l /VMMͷ৔߹ͷॲཧͷॻ͖෼͚͕؆୯ʹͰ͖Δʢ ΍ ʣ l ๛෋ͳ +BWBࢿ࢈Λ࢖͑Δ l ࣮ߦ଎౓͕଎͍ 1FSM͔Β ,PUMJO΁Ҡߦͯ͠ײͨ͜͡ͱɿϙδςΟϒฤʢʣ
  48. l ܕ͕͋Δɾ/VMM ҆શੑ͕͋Δ l දݱྗ͕ߴ͍ l ֦ுؔ਺ l JG USZ

    XIFOͳͲ͕஋ΛฦͤΔ l /VMMͷ৔߹ͷॲཧͷॻ͖෼͚͕؆୯ʹͰ͖Δʢ ΍ ʣ l ๛෋ͳ +BWBࢿ࢈Λ࢖͑Δ l ࣮ߦ଎౓͕଎͍ 1FSM͔Β ,PUMJO΁Ҡߦͯ͠ײͨ͜͡ͱɿϙδςΟϒฤʢʣ
  49. l ܕ͕͋Δɾ/VMM ҆શੑ͕͋Δ l දݱྗ͕ߴ͍ l ֦ுؔ਺ l JG USZ

    XIFOͳͲ͕஋ΛฦͤΔ l /VMMͷ৔߹ͷॲཧͷॻ͖෼͚͕؆୯ʹͰ͖Δʢ ΍ ʣ l ๛෋ͳ +BWBࢿ࢈Λ࢖͑Δ l ࣮ߦ଎౓͕଎͍ 1FSM͔Β ,PUMJO΁Ҡߦͯ͠ײͨ͜͡ͱɿϙδςΟϒฤʢʣ
  50. l ܕ͕͋Δɾ/VMM ҆શੑ͕͋Δ l දݱྗ͕ߴ͍ l ֦ுؔ਺ l JG USZ

    XIFOͳͲ͕஋ΛฦͤΔ l /VMMͷ৔߹ͷॲཧͷॻ͖෼͚͕؆୯ʹͰ͖Δʢ ΍ ʣ l ๛෋ͳ +BWBࢿ࢈Λ࢖͑Δ l ࣮ߦ଎౓͕଎͍ 1FSM͔Β ,PUMJO΁Ҡߦͯ͠ײͨ͜͡ͱɿϙδςΟϒฤʢʣ
  51. l ܕ͕͋Δɾ/VMM ҆શੑ͕͋Δ l දݱྗ͕ߴ͍ l ֦ுؔ਺ l JG USZ

    XIFOͳͲ͕஋ΛฦͤΔ l /VMMͷ৔߹ͷॲཧͷॻ͖෼͚͕؆୯ʹͰ͖Δʢ ΍ ʣ l ๛෋ͳ +BWBࢿ࢈Λ࢖͑Δ l ࣮ߦ଎౓͕଎͍ 1FSM͔Β ,PUMJO΁Ҡߦͯ͠ײͨ͜͡ͱɿϙδςΟϒฤʢʣ ΫϥεΛܧঝͤͣʹɺ Ϋϥεʹ৽͍͠ػೳΛ௥Ճ͢Δ
  52. l ܕ͕͋Δɾ/VMM ҆શੑ͕͋Δ l දݱྗ͕ߴ͍ l ֦ுؔ਺ l JG USZ

    XIFOͳͲ͕஋ΛฦͤΔ l /VMMͷ৔߹ͷॲཧͷॻ͖෼͚͕؆୯ʹͰ͖Δʢ ΍ ʣ l ๛෋ͳ +BWBࢿ࢈Λ࢖͑Δ l ࣮ߦ଎౓͕଎͍ 1FSM͔Β ,PUMJO΁Ҡߦͯ͠ײͨ͜͡ͱɿϙδςΟϒฤʢʣ
  53. l ܕ͕͋Δɾ/VMM ҆શੑ͕͋Δ l දݱྗ͕ߴ͍ l ֦ுؔ਺ l JG USZ

    XIFOͳͲ͕஋ΛฦͤΔ l /VMMͷ৔߹ͷॲཧͷॻ͖෼͚͕؆୯ʹͰ͖Δʢ ΍ ʣ l ๛෋ͳ +BWBࢿ࢈Λ࢖͑Δ l ࣮ߦ଎౓͕଎͍ 1FSM͔Β ,PUMJO΁Ҡߦͯ͠ײͨ͜͡ͱɿϙδςΟϒฤʢʣ
  54. l ܕ͕͋Δɾ/VMM ҆શੑ͕͋Δ l දݱྗ͕ߴ͍ l ֦ுؔ਺ l JG USZ

    XIFOͳͲ͕஋ΛฦͤΔ l /VMMͷ৔߹ͷॲཧͷॻ͖෼͚͕؆୯ʹͰ͖Δʢ ΍ ʣ l ๛෋ͳ +BWBࢿ࢈Λ࢖͑Δ l ࣮ߦ଎౓͕଎͍ 1FSM͔Β ,PUMJO΁Ҡߦͯ͠ײͨ͜͡ͱɿϙδςΟϒฤʢʣ
  55. l ܕ͕͋Δɾ/VMM ҆શੑ͕͋Δ l දݱྗ͕ߴ͍ l ֦ுؔ਺ l JG USZ

    XIFOͳͲ͕஋ΛฦͤΔ l /VMMͷ৔߹ͷॲཧͷॻ͖෼͚͕؆୯ʹͰ͖Δʢ  ΍ ʣ l ๛෋ͳ +BWBࢿ࢈Λ࢖͑Δ l ࣮ߦ଎౓͕଎͍ 1FSM͔Β ,PUMJO΁Ҡߦͯ͠ײͨ͜͡ͱɿϙδςΟϒฤʢʣ /VMMͩͬͨΒޙଓͷॲཧΛ͢Δʢ͜͜Ͱ͸ྫ֎Λ౤͛Δʣ
  56. l ܕ͕͋Δɾ/VMM ҆શੑ͕͋Δ l දݱྗ͕ߴ͍ l ֦ுؔ਺ l JG USZ

    XIFOͳͲ͕஋ΛฦͤΔ l /VMMͷ৔߹ͷॲཧͷॻ͖෼͚͕؆୯ʹͰ͖Δʢ ΍ ʣ l ๛෋ͳ +BWBࢿ࢈Λ࢖͑Δ l ࣮ߦ଎౓͕଎͍ 1FSM͔Β ,PUMJO΁Ҡߦͯ͠ײͨ͜͡ͱɿϙδςΟϒฤʢʣ
  57. l ܕ͕͋Δɾ/VMM ҆શੑ͕͋Δ l දݱྗ͕ߴ͍ l ֦ுؔ਺ l JG USZ

    XIFOͳͲ͕஋ΛฦͤΔ l /VMMͷ৔߹ͷॲཧͷॻ͖෼͚͕؆୯ʹͰ͖Δʢ ΍ ʣ l ๛෋ͳ +BWBࢿ࢈Λ࢖͑Δ l ࣮ߦ଎౓͕଎͍ 1FSM͔Β ,PUMJO΁Ҡߦͯ͠ײͨ͜͡ͱɿϙδςΟϒฤʢʣ UFYU͕OVMMͳΒ MFOHUI͸࣮ߦ͞Εͣ OVMMΛฦ͢
  58. l ։ൃ؀ڥʹؔ͢ΔΤίγεςϜ͕੔͍ͬͯΔ l ,PUMJOͷ։ൃݩ͕ +FU#SBJOT TSP Ͱ͋Γɺ *%&΍पลπʔϧ΋։ൃ͍ͯ͠ΔͨΊ ڧྗͳαϙʔτ͕͋Δ l

    ܰྔͳฒྻԽ͕Ͱ͖Δ l $PSPVUJOFͳͲ l ࣾ಺ͷଞνʔϜͱ৘ใަ׵͕੝ΜͳͨΊαʔόαΠυ։ൃͷ ૬ஊ͕ߦ͍΍͍͢ l ฼਺ͷؔ܎্ 1FSM։ൃΑΓ΋૬ஊ͕ਐΈ΍͍͢ 1FSM͔Β ,PUMJO΁Ҡߦͯ͠ײͨ͜͡ͱɿϙδςΟϒฤʢʣ
  59. l Ϗϧυʹ͕͔͔࣌ؒΔҝखݩͰͷमਖ਼ΠςϨʔγϣϯ͸ 1FSM࣌୅ΑΓ΋஗͘ͳͬͨ l 4QSJOH#PPU΍ HSBEMF ͳͲ BQQΛ࡞੒͢Δ্Ͱඞཁͳ ஌ࣝ΍ٕज़͕ଟ͍ l

    1FSMͰ͸γϯϘϧςʔϒϧΛ͍͡Δ͜ͱͰ NPOLFZQBUDI͕ ඇৗʹ༰қͰɺಛघͳςετ͕؆୯ʹॻ͚ͨ 1FSM͔Β ,PUMJO΁Ҡߦͯ͠ײͨ͜͡ͱɿωΨςΟϒฤʢʣ
  60. l スレッドセーフに関して注意する必要がある l 1FSMではマルチプロセス・シングルスレッドのアプリケーションを書いていたので 意識が薄かった 1FSM͔Β ,PUMJO΁Ҡߦͯ͠ײͨ͜͡ͱɿωΨςΟϒฤʢʣ

  61. l H31$ ͷ CJEJSFDUJPOBMTUSFBNJOHΛ࢖ͬͯΈ͍ͨ l 1FSM࣌୅ͷ "1*Λ࠶ݱ͢Δ͜ͱΛ༏ઌ͍ͯͨ͠ͷͰɺ·ͩख͕ճ͍ͬͯͳ͍ 1FSM͔Β ,PUMJO΁Ҡߦͯ͠ײͨ͜͡ͱɿͦͷଞฤ

  62. l ౰ͨΓલͰ͸͋Δ͕ผͷݴޠʹ׬શʹҠߦ͢Δͷ͸݁ߏେมͩͬͨ l ςετΛআ͖ QNϑΝΠϧ ௒͑Δ͘Β͍ͷن໛ͩͱΤϯδχΞਓͰ೥Ҏ্͔͔Δ l νʔϜҰؙͰ୹ظؒʹϓϩδΣΫτશମΛผͷݴޠ΁Ҡߦ͢Δͷ͸ νʔϜશһʹͱͬͯྑ͍ܦݧʹͳͬͨ l

    1FSM΋޷͖͕ͩͬͨɺ ,PUMJO΋޷͖ʹͳͬͨ ϓϩδΣΫτͷ୲౰Λऴ͑ͨࠓͷؾ࣋ͪ
  63. l -*/&ϙΠϯτΫϥϒͷ 1FSM͔Β ,PUMJO΁ͷҠߦϓϩδΣΫτͷ঺հ l ͳͥࠓ ,PUMJOʹͨ͠ͷ͔ʁ l ͳͥ ,PUMJOʁɿॻ͖΍͍͢ҝɾࣾ಺ͰΑ͘࢖ΘΕ͍ͯΔҝ

    l ͳͥࠓʁɿ௕೥ӡ༻͍ͯ͠ΔதͰ՝୊͕ੵΈॏͳ͍ͬͯͨҝɾऔΓ૊ΊΔ࣌ظͩͬͨҝ l ઃܭͰେ੾ʹͨ͜͠ͱ΍ݱঢ়ͷ঺հ l ϓϩδΣΫτͰى͖ͨ໰୊ͱվળ l ྫ֎ॲཧͷ࢓ํ͕ҧ͏ͱ͍͏࿩ͱ %FUFLU ಋೖͨ͠Βྑ͔ͬͨͱ͍͏࿩ l ৼΓฦͬͯͷײ૝ͷ঺հ ·ͱΊ
  64. l -*/&ϙΠϯτΫϥϒͷ 1FSM͔Β ,PUMJO΁ͷҠߦϓϩδΣΫτͷ঺հ l ͳͥࠓ ,PUMJOʹͨ͠ͷ͔ʁ l ͳͥ ,PUMJOʁɿॻ͖΍͍͢ҝɾࣾ಺ͰΑ͘࢖ΘΕ͍ͯΔҝ

    l ͳͥࠓʁɿ௕೥ӡ༻͍ͯ͠ΔதͰ՝୊͕ੵΈॏͳ͍ͬͯͨҝɾऔΓ૊ΊΔ࣌ظͩͬͨҝ l ઃܭͰେ੾ʹͨ͜͠ͱ΍ݱঢ়ͷ঺հ l ϓϩδΣΫτͰى͖ͨ໰୊ͱվળ l ྫ֎ॲཧͷ࢓ํ͕ҧ͏ͱ͍͏࿩ͱ %FUFLU ಋೖͨ͠Βྑ͔ͬͨͱ͍͏࿩ l ৼΓฦͬͯͷײ૝ͷ঺հ ·ͱΊ ,PUMJOະܦݧऀɾ੩తܕ෇͚ະܦݧऀͰ΋ ,PUMJO͸ॻ͖΍͍͢Ͱ͢ʂ ੋඇαʔόαΠυ ,PUMJOΛॻ͖·͠ΐ͏ʂ