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

モバイルアプリの行動ログの「仕込み」を快適にする / iOSDC Japan 2022 - Mobile App Logging

Yuji Fujisaka
September 12, 2022

モバイルアプリの行動ログの「仕込み」を快適にする / iOSDC Japan 2022 - Mobile App Logging

iOSDC Japan 2022、9/12(月) 13:55〜 Track B での発表内容です
https://fortee.jp/iosdc-japan-2022/proposal/ad544d2d-0e37-48f7-836a-3d46abe4ad2f

Track B 生放送
http://live.nicovideo.jp/watch/lv338311180

クックパッドの After Party についてhttps://cookpad.connpass.com/event/254459/

Yuji Fujisaka

September 12, 2022
Tweet

More Decks by Yuji Fujisaka

Other Decks in Programming

Transcript

  1. :VKJ'VKJTBLBJ04%$+BQBO ϞόΠϧΞϓϦͷߦಈϩάͷ ʮ࢓ࠐΈʯΛշదʹ͢Δ

  2. ͸͡Ίʹ ର৅ wϞόΠϧΞϓϦͷߦಈϩάͷ ઃܭ΍࣮૷ɺ෼ੳʹؔ৺ͷ͋Δਓ w ϩάΛ࢓ࠐΉࡍͷࣦഊஊͱ࠶ൃ๷ࢭࡦ͕ؾʹͳΔਓ w 04-PH"1*ʹڵຯ͕͋Δਓ

  3. ࣗݾ঺հ ౻ࡔ༞࢙ :VKJ'VKJTBLB !ZVKJG@ !ೣɼྉཧ "$PPLQBE*OD  ΫοΫύουJ04ΞϓϦ ɹϨγϐºങ͍෺ͷମݧͮ͘Γ

  4. ߦಈϩάͱ͸ʁ

  5. ߦಈϩάͱ͸ Ϣʔβʔૢ࡞Λى఺ʹૹ৴͞ΕΔϩά w ྫɿݕࡧ݁Ռը໘Λදࣔ w ྫɿ஫จϘλϯΛλοϓ ‣ ΞϓϦͷར༻ঢ়گΛ෼ੳ͠ αʔϏε։ൃͷҙࢥܾఆʹ໾ཱͯΔ ʲʓʓը໘Λදࣔʳ

    ʲ˚˚˚Λλοϓʳ ʜʜ ूੵ ໨తʹ͋Θͤͯ ूܭ ૢ࡞͝ͱʹૹ৴
  6. ߦಈϩάͷ࣮૷ ྫɿ(PPHMF"OBMZUJDT 'JSFCBTF IUUQTpSFCBTFHPPHMFDPNEPDTBOBMZUJDTFWFOUT Analytics.logEvent("select_content", parameters: [ "content_type": "image", "content_id":

    "P12453", "items": [["name": "Kittens"]] ]) ෼ੳʹඞཁͳ৘ใʢྫɿΠϕϯτ໊ɺίϯςϯπͷछྨɺ*%౳ʣΛϩΨʔͰૹ৴
  7. ߦಈϩάͷར༻ͷྲྀΕ ྫɿԾઆݕূͷҰ࿈ʢΫοΫύουJ04ΞϓϦ ઃܭ ࣮૷ ޮՌଌఆ ҙࢥܾఆ ϦϦʔε

  8. ߦಈϩάͷར༻ͷྲྀΕ ྫɿԾઆݕূͷҰ࿈ʢΫοΫύουJ04ΞϓϦ ݕূઃܭ ࢪࡦഎܠͷཧղ طଘϩάͷൃ۷ ઃܭ ࣮૷ ޮՌଌఆ ҙࢥܾఆ ϦϦʔε

  9. ߦಈϩάͷར༻ͷྲྀΕ ྫɿԾઆݕূͷҰ࿈ʢΫοΫύουJ04ΞϓϦ ݕূઃܭ ࢪࡦഎܠͷཧղ طଘϩάͷൃ۷ ઃܭ ࣮૷ ޮՌଌఆ ҙࢥܾఆ ϦϦʔε

    ػೳ։ൃ ৽نϩάͷ௥Ճ
  10. ߦಈϩάͷར༻ͷྲྀΕ ྫɿԾઆݕূͷҰ࿈ʢΫοΫύουJ04ΞϓϦ ݕূઃܭ ࢪࡦഎܠͷཧղ طଘϩάͷൃ۷ ઃܭ ࣮૷ ޮՌଌఆ ҙࢥܾఆ ϦϦʔε

    ػೳ։ൃ ৽نϩάͷ௥Ճ σʔλूܭʢ42-࡞੒ʣ ղऍɾධՁ
  11. ߦಈϩάͷར༻ͷྲྀΕ ྫɿԾઆݕূͷҰ࿈ʢΫοΫύουJ04ΞϓϦ ݕূઃܭ ࢪࡦഎܠͷཧղ طଘϩάͷൃ۷ ઃܭ ࣮૷ ޮՌଌఆ ҙࢥܾఆ ϦϦʔε

    ػೳ։ൃ ৽نϩάͷ௥Ճ σʔλूܭʢ42-࡞੒ʣ ղऍɾධՁ ܧଓ൑அ
  12. ߦಈϩάͷར༻ͷྲྀΕ ྫɿԾઆݕূͷҰ࿈ʢΫοΫύουJ04ΞϓϦ ઃܭ ࣮૷ ޮՌଌఆ ҙࢥܾఆ ϦϦʔε #͞Μ "͞Μ "͞Μ

  13. ߦಈϩάͷར༻ͷྲྀΕ ྫɿԾઆݕূͷҰ࿈ʢΫοΫύουJ04ΞϓϦ ઃܭ ࣮૷ ޮՌଌఆ ҙࢥܾఆ ϦϦʔε #͞Μ "͞Μ "͞Μ

    ػೳͱϩάͷ࣮૷
  14. ߦಈϩάͷར༻ͷྲྀΕ ྫɿԾઆݕূͷҰ࿈ʢΫοΫύουJ04ΞϓϦ ઃܭ ࣮૷ ޮՌଌఆ ҙࢥܾఆ ϦϦʔε #͞Μ "͞Μ "͞Μ

    ػೳͱϩάͷ࣮૷ ෼ੳ༻42-ͷ࡞੒
  15. ߦಈϩάͷར༻ͷྲྀΕ ྫɿԾઆݕূͷҰ࿈ʢΫοΫύουJ04ΞϓϦ ઃܭ ࣮૷ ޮՌଌఆ ҙࢥܾఆ ϦϦʔε #͞Μ "͞Μ "͞Μ

    ػೳͱϩάͷ࣮૷ ෼ੳ༻42-ͷ࡞੒ ࣮૷ऀͱ෼ੳऀ͕ผʑͳ͜ͱ΋
  16. ߦಈϩάͷར༻ͷྲྀΕ ྫɿԾઆݕূͷҰ࿈ʢΫοΫύουJ04ΞϓϦ ઃܭ ࣮૷ ޮՌଌఆ ҙࢥܾఆ ϦϦʔε #͞Μ $͞Μ %͞Μ

    ෼ੳ༻42-ͷ ࡞੒ ػೳͱϩά ͷ࣮૷
  17. ߦಈϩάͷར༻ͷྲྀΕ ྫɿԾઆݕূͷҰ࿈ʢΫοΫύουJ04ΞϓϦ ઃܭ ࣮૷ ޮՌଌఆ ҙࢥܾఆ ϦϦʔε #͞Μ $͞Μ %͞Μ

    ෼ੳ༻42-ͷ ࡞੒ ػೳͱϩά ͷ࣮૷ ࣮૷ऀͱ෼ੳऀ͕ಉҰͳ͜ͱ΋
  18. ߦಈϩάͷར༻ͷྲྀΕ ྫɿԾઆݕূͷҰ࿈ʢΫοΫύουJ04ΞϓϦ ઃܭ ࣮૷ ޮՌଌఆ ҙࢥܾఆ ϦϦʔε &͞Μ ػೳͱϩά ͷ࣮૷

    ෼ੳ༻42-ͷ ࡞੒ ࣄલௐࠪ اը ʮ࣍͸ʜʜʯ ࣮૷ऀͱ෼ੳऀ͕ಉҰͳ͜ͱ΋
  19. ߦಈϩάͰ͋Γ͕ͪͳ໰୊ͷྫ ઃܭ ࣮૷ ޮՌଌఆ ҙࢥܾఆ ϦϦʔε w#ΞϓϦόʔδϣϯ͝ͱͷڍಈࠩҟ w#ϩάͷ࣮૷ϛεʢ߲໨໊ͷUZQPɺඞཁͳ৘ใͷܽଛɺܕͷؒҧ͍ʣ ‣ ྺ࢙తܦҢ͕ੵΈॏͳΓɺޙੈͷਓʹࡂ೉͕ʜʜ$

    ઃܭ ࣮૷ ޮՌଌఆ ҙࢥܾఆ ϦϦʔε ઃܭ ࣮૷ ޮՌଌఆ ҙࢥܾఆ ϦϦʔε O೥ޙ ʜʜ $
  20. ߦಈϩάͰ͋Γ͕ͪͳ໰୊ͷྫ ઃܭ ࣮૷ ޮՌଌఆ ҙࢥܾఆ ϦϦʔε w#ΞϓϦόʔδϣϯ͝ͱͷڍಈࠩҟ w#ϩάͷ࣮૷ϛεʢ߲໨໊ͷUZQPɺඞཁͳ৘ใͷܽଛɺܕͷؒҧ͍ʣ ‣ ྺ࢙తܦҢ͕ੵΈॏͳΓɺޙੈͷਓʹࡂ೉͕ʜʜ$

    ઃܭ ࣮૷ ޮՌଌఆ ҙࢥܾఆ ϦϦʔε ઃܭ ࣮૷ ޮՌଌఆ ҙࢥܾఆ ϦϦʔε O೥ޙ ʜʜ $
  21. ຊηογϣϯͷ֓ཁ w ߦಈϩάͷ೰Έͷछͷ͏ͪɺ࢓ࠐΈʢઃܭɾ࣮૷ʣʹண໨ w ΫοΫύουJ04ΞϓϦͰͷऔΓ૊ΈΛͭ঺հ w ᶃυΩϡϝϯτϕʔεͷܕ҆શͳϩά࣮૷ίʔυࣗಈੜ੒ w ᶄνΣοΫϦετ͕ࣗಈͰຒ·ΔΞϓϦ಺ϩά֬ೝπʔϧ

  22. औΓ૊Έᶃ υΩϡϝϯτϕʔεͷ ܕ҆શͳϩά࣮૷ίʔυࣗಈੜ੒

  23. υΩϡϝϯτϕʔεͷܕ҆શͳϩά࣮૷ίʔυࣗಈੜ੒ ֓ཁ wϩάఆٛυΩϡϝϯτʢ.BSLEPXOʣ͔Β ϩά࣮૷ίʔυʢ4XJGUʣΛࣗಈੜ੒ τϥϯεύΠϧ # recipe_search Ϩγϐݕࡧը໘ͷΠϕϯτͰ͢ ## search

    ϨγϐݕࡧΛߦͬͨࡍʹૹ෇͞Ε·͢ - keyword: !string 256 - ݕࡧΩʔϫʔυ - order: SearchOrder - ݕࡧॱ - latest,popularity ## show_recipe ݕࡧ݁Ռը໘͔ΒϨγϐৄࡉը໘ʹભҠ͢Δࡍʹૹ෇͞Ε·͢ - recipe_id: !integer - දࣔͨ͠ϨγϐͷID /// Ϩγϐݕࡧը໘ͷΠϕϯτͰ͢ public enum RecipeSearch: LogCategory { public static var categoryName: String { "recipe_search" } public var eventName: String { switch self { case .search: return "search" case .showRecipe: return "show_recipe" } } public func makePayload() -> [String: Any] { switch self { case let .search(keyword, order): return [ "keyword": keyword.validateLength(within: 256).dump(), "order": order.dump(), ].compactMapValues { $0 } case let .showRecipe(recipeId): return [ "recipe_id": recipeId.dump(), ].compactMapValues { $0 } } } /// ϨγϐݕࡧΛߦͬͨࡍʹૹ෇͞Ε·͢ case search(keyword: String, order: SearchOrder) /// ݕࡧ݁Ռը໘͔ΒϨγϐৄࡉը໘ʹભҠ͢Δࡍʹૹ෇͞Ε·͢ case showRecipe(recipeId: Int64) } ਓ͕ॻ͍ͨ.BSLEPXOܗࣜͷυΩϡϝϯτ ࣗಈੜ੒͞ΕΔ4XJGUͷίʔυ The Swift logo is a trademark of Apple Inc. https://developer.apple.com/swift/resources/ The Markdown Mark https://github.com/dcurtis/markdown-mark
  24. υΩϡϝϯτϕʔεͷܕ҆શͳϩά࣮૷ίʔυࣗಈੜ੒ ۩ମྫ खॱ ɹϩά࢓༷Λߟ͑ͯ ɹυΩϡϝϯτΛهड़ ɹ # recipe_search Ϩγϐݕࡧը໘ͷΠϕϯτͰ͢ ##

    search ϨγϐݕࡧΛߦͬͨࡍʹૹ෇͞Ε·͢ - keyword: !string 256 - ݕࡧΩʔϫʔυ - order: SearchOrder - ݕࡧॱ - latest,popularity ## show_recipe ݕࡧ݁Ռը໘͔ΒϨγϐৄࡉը໘ʹભҠ͢Δࡍʹૹ෇͞Ε·͢ - recipe_id: !integer - දࣔͨ͠ϨγϐͷID
  25. υΩϡϝϯτϕʔεͷܕ҆શͳϩά࣮૷ίʔυࣗಈੜ੒ ۩ମྫ खॱ ɹϩά࢓༷Λߟ͑ͯ ɹυΩϡϝϯτΛهड़ ɹ # recipe_search Ϩγϐݕࡧը໘ͷΠϕϯτͰ͢ ##

    search ϨγϐݕࡧΛߦͬͨࡍʹૹ෇͞Ε·͢ - keyword: !string 256 - ݕࡧΩʔϫʔυ - order: SearchOrder - ݕࡧॱ - latest,popularity ## show_recipe ݕࡧ݁Ռը໘͔ΒϨγϐৄࡉը໘ʹભҠ͢Δࡍʹૹ෇͞Ε·͢ - recipe_id: !integer - දࣔͨ͠ϨγϐͷID ## search ϨγϐݕࡧΛߦͬͨࡍʹૹ෇͞Ε·͢ - keyword: !string 256 - ݕࡧΩʔϫʔυ - order: SearchOrder - ݕࡧॱ - latest, popularity
  26. खॱ εΫϦϓτΛ࣮ߦ ˠ9DPEFϓϩδΣΫτ಺ʹ ɹίʔυ͕ࣗಈੜ੒͞ΕΔ  υΩϡϝϯτϕʔεͷܕ҆શͳϩά࣮૷ίʔυࣗಈੜ੒ ۩ମྫ /// Ϩγϐݕࡧը໘ͷΠϕϯτͰ͢ public

    enum RecipeSearch: LogCategory { public static var categoryName: String { "recipe_search" } public var eventName: String { switch self { case .search: return "search" case .showRecipe: return "show_recipe" } } public func makePayload() -> [String: Any] { switch self { case let .search(keyword, order): return [ "keyword": keyword.validateLength(within: 256).dump(), "order": order.dump(), ].compactMapValues { $0 } case let .showRecipe(recipeId): return [ "recipe_id": recipeId.dump(), ].compactMapValues { $0 } } } /// ϨγϐݕࡧΛߦͬͨࡍʹૹ෇͞Ε·͢ case search(keyword: String, order: SearchOrder) /// ݕࡧ݁Ռը໘͔ΒϨγϐৄࡉը໘ʹભҠ͢Δࡍʹૹ෇͞Ε·͢ case showRecipe(recipeId: Int64) }
  27. खॱ εΫϦϓτΛ࣮ߦ ˠ9DPEFϓϩδΣΫτ಺ʹ ɹίʔυ͕ࣗಈੜ੒͞ΕΔ  υΩϡϝϯτϕʔεͷܕ҆શͳϩά࣮૷ίʔυࣗಈੜ੒ ۩ମྫ /// Ϩγϐݕࡧը໘ͷΠϕϯτͰ͢ public

    enum RecipeSearch: LogCategory { public static var categoryName: String { "recipe_search" } public var eventName: String { switch self { case .search: return "search" case .showRecipe: return "show_recipe" } } public func makePayload() -> [String: Any] { switch self { case let .search(keyword, order): return [ "keyword": keyword.validateLength(within: 256).dump(), "order": order.dump(), ].compactMapValues { $0 } case let .showRecipe(recipeId): return [ "recipe_id": recipeId.dump(), ].compactMapValues { $0 } } } /// ϨγϐݕࡧΛߦͬͨࡍʹૹ෇͞Ε·͢ case search(keyword: String, order: SearchOrder) /// ݕࡧ݁Ռը໘͔ΒϨγϐৄࡉը໘ʹભҠ͢Δࡍʹૹ෇͞Ε·͢ case showRecipe(recipeId: Int64) } NBLFίϚϯυ
  28. खॱ εΫϦϓτΛ࣮ߦ ˠ9DPEFϓϩδΣΫτ಺ʹ ɹίʔυ͕ࣗಈੜ੒͞ΕΔ  υΩϡϝϯτϕʔεͷܕ҆શͳϩά࣮૷ίʔυࣗಈੜ੒ ۩ମྫ /// Ϩγϐݕࡧը໘ͷΠϕϯτͰ͢ public

    enum RecipeSearch: LogCategory { public static var categoryName: String { "recipe_search" } public var eventName: String { switch self { case .search: return "search" case .showRecipe: return "show_recipe" } } public func makePayload() -> [String: Any] { switch self { case let .search(keyword, order): return [ "keyword": keyword.validateLength(within: 256).dump(), "order": order.dump(), ].compactMapValues { $0 } case let .showRecipe(recipeId): return [ "recipe_id": recipeId.dump(), ].compactMapValues { $0 } } } /// ϨγϐݕࡧΛߦͬͨࡍʹૹ෇͞Ε·͢ case search(keyword: String, order: SearchOrder) /// ݕࡧ݁Ռը໘͔ΒϨγϐৄࡉը໘ʹભҠ͢Δࡍʹૹ෇͞Ε·͢ case showRecipe(recipeId: Int64) } NBLFίϚϯυ ϩάఆٛͷྻڍܕʢFOVNʣɹ
  29. खॱ εΫϦϓτΛ࣮ߦ ˠ9DPEFϓϩδΣΫτ಺ʹ ɹίʔυ͕ࣗಈੜ੒͞ΕΔ  υΩϡϝϯτϕʔεͷܕ҆શͳϩά࣮૷ίʔυࣗಈੜ੒ ۩ମྫ /// Ϩγϐݕࡧը໘ͷΠϕϯτͰ͢ public

    enum RecipeSearch: LogCategory { public static var categoryName: String { "recipe_search" } public var eventName: String { switch self { case .search: return "search" case .showRecipe: return "show_recipe" } } public func makePayload() -> [String: Any] { switch self { case let .search(keyword, order): return [ "keyword": keyword.validateLength(within: 256).dump(), "order": order.dump(), ].compactMapValues { $0 } case let .showRecipe(recipeId): return [ "recipe_id": recipeId.dump(), ].compactMapValues { $0 } } } /// ϨγϐݕࡧΛߦͬͨࡍʹૹ෇͞Ε·͢ case search(keyword: String, order: SearchOrder) /// ݕࡧ݁Ռը໘͔ΒϨγϐৄࡉը໘ʹભҠ͢Δࡍʹૹ෇͞Ε·͢ case showRecipe(recipeId: Int64) } NBLFίϚϯυ ϩάఆٛͷྻڍܕʢFOVNʣɹ /// Ϩγϐݕࡧը໘ͷΠϕϯτͰ͢ public enum RecipeSearch: LogCategory { ʢதུʣ ɹ /// ϨγϐݕࡧΛߦͬͨࡍʹૹ෇͞Ε·͢ case search(keyword: String, order: SearchOrder) /// ݕࡧ݁Ռը໘͔ΒϨγϐৄࡉը໘ʹભ…… case showRecipe(recipeId: Int64) }
  30. υΩϡϝϯτϕʔεͷܕ҆શͳϩά࣮૷ίʔυࣗಈੜ੒ ۩ମྫ खॱ ɹੜ੒͞ΕͨྻڍܕͰ ɹϩάૹ৴Օॴʹ࣮૷ // ϨγϐݕࡧॲཧͷϦΫΤετޙ logger.post( RecipeSearch.search( keyword:

    keyword, // “ಲ೑" order: order // .latest ) )
  31. ໿೥ؒӡ༻ͯ͠ ϩάఆٛͷ.BSLEPXO͸ϑΝΠϧҎ্ʹ ˠࠞཚ΋ͳ͘׆༻Ͱ͖͍ͯΔ%

  32. υΩϡϝϯτϕʔεͷܕ҆શͳϩά࣮૷ίʔυࣗಈੜ੒ Կ͕خ͍͠ͷ͔ʁᶃ wυΩϡϝϯτ͕ৗʹ׬උ

  33. υΩϡϝϯτϕʔεͷܕ҆શͳϩά࣮૷ίʔυࣗಈੜ੒ Կ͕خ͍͠ͷ͔ʁᶃ wυΩϡϝϯτ͕ৗʹ׬උ ࣮૷ऀ΋෼ੳऀ΋͏Ε͍͠&

  34. υΩϡϝϯτϕʔεͷܕ҆શͳϩά࣮૷ίʔυࣗಈੜ੒ Կ͕خ͍͠ͷ͔ʁᶃ wυΩϡϝϯτ͕ৗʹ׬උ ‣ Ұ͔ॴʹ͢΂ͯ·ͱ·͍ͬͯΔʢ୳͠΍͍͢ʣ ࣮૷ऀ΋෼ੳऀ΋͏Ε͍͠&

  35. υΩϡϝϯτϕʔεͷܕ҆શͳϩά࣮૷ίʔυࣗಈੜ੒ Կ͕خ͍͠ͷ͔ʁᶃ wυΩϡϝϯτ͕ৗʹ׬උ ‣ Ұ͔ॴʹ͢΂ͯ·ͱ·͍ͬͯΔʢ୳͠΍͍͢ʣ ‣ ΞϓϦͱಉ͡ϨϙδτϦͰ(JUόʔδϣϯ؅ཧ ࣮૷ऀ΋෼ੳऀ΋͏Ε͍͠&

  36. υΩϡϝϯτϕʔεͷܕ҆શͳϩά࣮૷ίʔυࣗಈੜ੒ Կ͕خ͍͠ͷ͔ʁᶃ wυΩϡϝϯτ͕ৗʹ׬උ ‣ Ұ͔ॴʹ͢΂ͯ·ͱ·͍ͬͯΔʢ୳͠΍͍͢ʣ ‣ ΞϓϦͱಉ͡ϨϙδτϦͰ(JUόʔδϣϯ؅ཧ w ΞϓϦόʔδϣϯ͝ͱͷࠩҟ΋ࣗಈه࿥ ࣮૷ऀ΋෼ੳऀ΋͏Ε͍͠&

  37. υΩϡϝϯτϕʔεͷܕ҆શͳϩά࣮૷ίʔυࣗಈੜ੒ Կ͕خ͍͠ͷ͔ʁᶃ wυΩϡϝϯτ͕ৗʹ׬උ ‣ Ұ͔ॴʹ͢΂ͯ·ͱ·͍ͬͯΔʢ୳͠΍͍͢ʣ ‣ ΞϓϦͱಉ͡ϨϙδτϦͰ(JUόʔδϣϯ؅ཧ w ΞϓϦόʔδϣϯ͝ͱͷࠩҟ΋ࣗಈه࿥ ࣮૷ऀ΋෼ੳऀ΋͏Ε͍͠&

    ͜ͷϩά͸WͰ ഇࢭͯ͠·͢Ͷ
  38. υΩϡϝϯτϕʔεͷܕ҆શͳϩά࣮૷ίʔυࣗಈੜ੒ Կ͕خ͍͠ͷ͔ʁᶃ wυΩϡϝϯτ͕ৗʹ׬උ ‣ Ұ͔ॴʹ͢΂ͯ·ͱ·͍ͬͯΔʢ୳͠΍͍͢ʣ ‣ ΞϓϦͱಉ͡ϨϙδτϦͰ(JUόʔδϣϯ؅ཧ w ΞϓϦόʔδϣϯ͝ͱͷࠩҟ΋ࣗಈه࿥ w

    ϩάఆٛͷഎܠ΋1VMM3FRVFTUΛ௥ͬͯ֬ೝͰ͖Δ ࣮૷ऀ΋෼ੳऀ΋͏Ε͍͠& ͜ͷϩά͸WͰ ഇࢭͯ͠·͢Ͷ
  39. υΩϡϝϯτϕʔεͷܕ҆શͳϩά࣮૷ίʔυࣗಈੜ੒ Կ͕خ͍͠ͷ͔ʁᶃ wυΩϡϝϯτ͕ৗʹ׬උ ‣ Ұ͔ॴʹ͢΂ͯ·ͱ·͍ͬͯΔʢ୳͠΍͍͢ʣ ‣ ΞϓϦͱಉ͡ϨϙδτϦͰ(JUόʔδϣϯ؅ཧ w ΞϓϦόʔδϣϯ͝ͱͷࠩҟ΋ࣗಈه࿥ w

    ϩάఆٛͷഎܠ΋1VMM3FRVFTUΛ௥ͬͯ֬ೝͰ͖Δ ࣮૷ऀ΋෼ੳऀ΋͏Ε͍͠& ͜ͷϩά͸WͰ ഇࢭͯ͠·͢Ͷ ͳΔ΄Ͳʜʜ ͜͏͍͏ܦҢͰ௥Ճ͔
  40. υΩϡϝϯτϕʔεͷܕ҆શͳϩά࣮૷ίʔυࣗಈੜ੒ Կ͕خ͍͠ͷ͔ʁᶄ wܕ҆શ ‣ ҙਤ͠ͳ͍஋͕ೖΓࠐ·ͳ͍ ‣ *%&Ͱิ׬͞ΕΔͷ΋շద

  41. υΩϡϝϯτϕʔεͷܕ҆શͳϩά࣮૷ίʔυࣗಈੜ੒ Կ͕خ͍͠ͷ͔ʁᶄ wܕ҆શ ‣ ҙਤ͠ͳ͍஋͕ೖΓࠐ·ͳ͍ ‣ *%&Ͱิ׬͞ΕΔͷ΋շద

  42. υΩϡϝϯτϕʔεͷܕ҆શͳϩά࣮૷ίʔυࣗಈੜ੒ Կ͕خ͍͠ͷ͔ʁᶄ wܕ҆શ ‣ ҙਤ͠ͳ͍஋͕ೖΓࠐ·ͳ͍ ‣ *%&Ͱิ׬͞ΕΔͷ΋շద wਓؒ΋ػց΋ಡΈ΍͍͢ ‣ ଟ͘ͷࣾһ͕.BSLEPXOʹ׳Ε͍ͯΔ

    ‣ υΩϡϝϯτͱ࣮૷ͷζϨΛ੩తղੳͰࣗಈݕग़
  43. υΩϡϝϯτϕʔεͷܕ҆શͳϩά࣮૷ίʔυࣗಈੜ੒ Կ͕خ͍͠ͷ͔ʁᶄ wܕ҆શ ‣ ҙਤ͠ͳ͍஋͕ೖΓࠐ·ͳ͍ ‣ *%&Ͱิ׬͞ΕΔͷ΋շద wਓؒ΋ػց΋ಡΈ΍͍͢ ‣ ଟ͘ͷࣾһ͕.BSLEPXOʹ׳Ε͍ͯΔ

    ‣ υΩϡϝϯτͱ࣮૷ͷζϨΛ੩తղੳͰࣗಈݕग़ ͳͲ $*Ͱఆظ֬ೝ
  44. ৄ͘͠͸ ࢀߟࢿྉ υΩϡϝϯτϕʔεͷܕ҆શͳ ϞόΠϧΞϓϦߦಈϩάج൫ͷ ߏங https://techlife.cookpad.com/ entry/2020/11/05/110000

  45. ͜ΕͰ࠷ߴʹͳͬͨʁ

  46. ৽ͨͳ՝୊ʜʜ

  47. ͏·͍͔͘ͳ͔ͬͨࣄྫ ྫɿ͋ΔࢪࡦͰͷʮ࣮૷ˠϦϦʔεˠ෼ੳʯͷྲྀΕ ઃܭ ࣮૷ ޮՌଌఆ ҙࢥܾఆ ϦϦʔε ࢪࡦΦʔφʔ ࣮૷ऀ

  48. ͏·͍͔͘ͳ͔ͬͨࣄྫ ྫɿ͋ΔࢪࡦͰͷʮ࣮૷ˠϦϦʔεˠ෼ੳʯͷྲྀΕ ઃܭ ࣮૷ ޮՌଌఆ ҙࢥܾఆ ϦϦʔε ػೳͱϩάΛ௥Ճ ࢪࡦΦʔφʔ ࣮૷ऀ

  49. ͏·͍͔͘ͳ͔ͬͨࣄྫ ྫɿ͋ΔࢪࡦͰͷʮ࣮૷ˠϦϦʔεˠ෼ੳʯͷྲྀΕ ઃܭ ࣮૷ ޮՌଌఆ ҙࢥܾఆ ϦϦʔε ػೳͱϩάΛ௥Ճ 42-ॻ͍ͯूܭ ࢪࡦΦʔφʔ

    ࣮૷ऀ
  50. ͏·͍͔͘ͳ͔ͬͨࣄྫ ྫɿ͋ΔࢪࡦͰͷʮ࣮૷ˠϦϦʔεˠ෼ੳʯͷྲྀΕ ઃܭ ࣮૷ ޮՌଌఆ ҙࢥܾఆ ϦϦʔε ػೳͱϩάΛ௥Ճ 42-ॻ͍ͯूܭ ࣮૷ऀͱ෼ੳऀ͕ผʑͳ৔߹

    ࢪࡦΦʔφʔ ࣮૷ऀ
  51. ͏·͍͔͘ͳ͔ͬͨࣄྫ ྫɿϦϦʔεޙʹϩάͷ࣮૷࿙Εʹؾͮ͘ ઃܭ ࣮૷ ޮՌଌఆ ҙࢥܾఆ ϦϦʔε ࢪࡦ Φʔφʔ ࣮૷ऀ

  52. ͏·͍͔͘ͳ͔ͬͨࣄྫ ྫɿϦϦʔεޙʹϩάͷ࣮૷࿙Εʹؾͮ͘ ͋Εʁ͜ͷϩά ૹΒΕͯͳ͍ʁ ઃܭ ࣮૷ ޮՌଌఆ ҙࢥܾఆ ϦϦʔε ࢪࡦ

    Φʔφʔ ࣮૷ऀ
  53. ͏·͍͔͘ͳ͔ͬͨࣄྫ ྫɿϦϦʔεޙʹϩάͷ࣮૷࿙Εʹؾͮ͘ ͋Εʁ͜ͷϩά ૹΒΕͯͳ͍ʁ ΦΝʔʂ࣮૷࿙Ε ͯ·ͨ͠ʜʜ ઃܭ ࣮૷ ޮՌଌఆ ҙࢥܾఆ

    ϦϦʔε ࢪࡦ Φʔφʔ ࣮૷ऀ
  54. ͏·͍͔͘ͳ͔ͬͨࣄྫ ྫɿϦϦʔεޙʹϩάͷ࣮૷࿙Εʹؾͮ͘ ͋Εʁ͜ͷϩά ૹΒΕͯͳ͍ʁ ΦΝʔʂ࣮૷࿙Ε ͯ·ͨ͠ʜʜ ʮΧʔτʹ௥ՃʯϘλϯͷϩάɺ "ը໘Ͱ͸࣮૷ࡁΈ͕ͩͬͨɺ #ը໘ʹ͸๨Ε͍ͯͨʜʜ ઃܭ

    ࣮૷ ޮՌଌఆ ҙࢥܾఆ ϦϦʔε ࢪࡦ Φʔφʔ ࣮૷ऀ
  55. ͏·͍͔͘ͳ͔ͬͨࣄྫ ྫɿϦϦʔεޙʹϩάͷ࣮૷࿙Εʹؾͮ͘ ͋Εʁ͜ͷϩά ૹΒΕͯͳ͍ʁ ΦΝʔʂ࣮૷࿙Ε ͯ·ͨ͠ʜʜ ʮΧʔτʹ௥ՃʯϘλϯͷϩάɺ "ը໘Ͱ͸࣮૷ࡁΈ͕ͩͬͨɺ #ը໘ʹ͸๨Ε͍ͯͨʜʜ ઃܭ

    ࣮૷ ޮՌଌఆ ҙࢥܾఆ ϦϦʔε ੩తղੳʹΑΔ࣮૷࿙Εݕग़͸׬શͰ͸ͳ͍ ࢪࡦ Φʔφʔ ࣮૷ऀ
  56. ະղܾ՝୊ ࢓૊ΈͰΧόʔͰ͖͍ͯͨͷ͸Ұ෦෼ ઃܭ ࣮૷ ޮՌଌఆ ҙࢥܾఆ ϦϦʔε ݕূ໨తͷ ੔ཧɾ೺Ѳ ϩάఆٛ

    ϩά࣮૷ 0,✅ #ة͏͍ ಈ࡞֬ೝ ͜ͷύλʔϯͰ͸ ɹߟྀ࿙Εͯͨͳʜʜ
  57. औΓ૊Έᶄ νΣοΫϦετ͕ࣗಈͰຒ·Δ ΞϓϦ಺ϩά֬ೝπʔϧ

  58. ‣ ϩάૹ৴Λ໢ཏతʹ֬ೝ͠΍͍͢ νΣοΫϦετ͕ࣗಈͰຒ·ΔΞϓϦ಺ϩά֬ೝπʔϧ ֓ཁ ᶃϩάఆٛΛνΣοΫϦετʹొ࿥ <>঎඼ৄࡉදࣔ <>ొ࿥λοϓ <>ղআλοϓ ɹʜʜ ඞཁͳϩά

    ˞։ൃ൛ϏϧυͷΈͰ༗ޮͳػೳ
  59. ‣ ϩάૹ৴Λ໢ཏతʹ֬ೝ͠΍͍͢ νΣοΫϦετ͕ࣗಈͰຒ·ΔΞϓϦ಺ϩά֬ೝπʔϧ ֓ཁ ᶄϢʔβʔͱಉ༷ʹΞϓϦΛૢ࡞ ˞։ൃ൛ϏϧυͷΈͰ༗ޮͳػೳ ᶃϩάఆٛΛνΣοΫϦετʹొ࿥ <>঎඼ৄࡉදࣔ <>ొ࿥λοϓ <>ղআλοϓ

    ɹʜʜ ඞཁͳϩά
  60. ‣ ϩάૹ৴Λ໢ཏతʹ֬ೝ͠΍͍͢ νΣοΫϦετ͕ࣗಈͰຒ·ΔΞϓϦ಺ϩά֬ೝπʔϧ ֓ཁ ᶄϢʔβʔͱಉ༷ʹΞϓϦΛૢ࡞ ˞։ൃ൛ϏϧυͷΈͰ༗ޮͳػೳ ᶃϩάఆٛΛνΣοΫϦετʹొ࿥ ✅঎඼ৄࡉදࣔ <>ొ࿥λοϓ <>ղআλοϓ

    ɹʜʜ ඞཁͳϩά
  61. ‣ ϩάૹ৴Λ໢ཏతʹ֬ೝ͠΍͍͢ νΣοΫϦετ͕ࣗಈͰຒ·ΔΞϓϦ಺ϩά֬ೝπʔϧ ֓ཁ ᶄϢʔβʔͱಉ༷ʹΞϓϦΛૢ࡞ ˞։ൃ൛ϏϧυͷΈͰ༗ޮͳػೳ ᶃϩάఆٛΛνΣοΫϦετʹొ࿥ ✅঎඼ৄࡉදࣔ ✅ొ࿥λοϓ <>ղআλοϓ

    ɹʜʜ ඞཁͳϩά
  62. ‣ ϩάૹ৴Λ໢ཏతʹ֬ೝ͠΍͍͢ νΣοΫϦετ͕ࣗಈͰຒ·ΔΞϓϦ಺ϩά֬ೝπʔϧ ֓ཁ ᶄϢʔβʔͱಉ༷ʹΞϓϦΛૢ࡞ ˞։ൃ൛ϏϧυͷΈͰ༗ޮͳػೳ ᶃϩάఆٛΛνΣοΫϦετʹొ࿥ ✅঎඼ৄࡉදࣔ ✅ొ࿥λοϓ <>ղআλοϓ

    ɹʜʜ ඞཁͳϩά ֘౰ϩά͕ૹΒΕΔͱ ࣗಈͰνΣοΫࡁΈʹ
  63. ‣ ϩάૹ৴Λ໢ཏతʹ֬ೝ͠΍͍͢ νΣοΫϦετ͕ࣗಈͰຒ·ΔΞϓϦ಺ϩά֬ೝπʔϧ ֓ཁ ᶄϢʔβʔͱಉ༷ʹΞϓϦΛૢ࡞ ˞։ൃ൛ϏϧυͷΈͰ༗ޮͳػೳ ᶃϩάఆٛΛνΣοΫϦετʹొ࿥ ✅঎඼ৄࡉදࣔ ✅ొ࿥λοϓ <>ղআλοϓ

    ɹʜʜ ඞཁͳϩά ֘౰ϩά͕ૹΒΕΔͱ ࣗಈͰνΣοΫࡁΈʹ ʜʜ
  64. ‣ ϩάૹ৴Λ໢ཏతʹ֬ೝ͠΍͍͢ νΣοΫϦετ͕ࣗಈͰຒ·ΔΞϓϦ಺ϩά֬ೝπʔϧ ֓ཁ ᶄϢʔβʔͱಉ༷ʹΞϓϦΛૢ࡞ ˞։ൃ൛ϏϧυͷΈͰ༗ޮͳػೳ ᶃϩάఆٛΛνΣοΫϦετʹొ࿥ ʜʜ ✅঎඼ৄࡉදࣔ ✅ొ࿥λοϓ

    <>ղআλοϓ ɹ ඞཁͳϩά ະૹ৴༗Γ⾠
  65. ‣ ϩάૹ৴Λ໢ཏతʹ֬ೝ͠΍͍͢ νΣοΫϦετ͕ࣗಈͰຒ·ΔΞϓϦ಺ϩά֬ೝπʔϧ ֓ཁ ᶄϢʔβʔͱಉ༷ʹΞϓϦΛૢ࡞ ˞։ൃ൛ϏϧυͷΈͰ༗ޮͳػೳ ᶃϩάఆٛΛνΣοΫϦετʹొ࿥ ʜʜ ✅঎඼ৄࡉදࣔ ✅ొ࿥λοϓ

    <>ղআλοϓ ɹ ඞཁͳϩά Ұ௨Γͷಈ࡞֬ೝޙɺ ϩάૹ৴࿙Ε͕Θ͔Δ ະૹ৴༗Γ⾠
  66. ‣ ϩάૹ৴Λ໢ཏతʹ֬ೝ͠΍͍͢ νΣοΫϦετ͕ࣗಈͰຒ·ΔΞϓϦ಺ϩά֬ೝπʔϧ ֓ཁ ᶄϢʔβʔͱಉ༷ʹΞϓϦΛૢ࡞ ˞։ൃ൛ϏϧυͷΈͰ༗ޮͳػೳ ᶃϩάఆٛΛνΣοΫϦετʹొ࿥ ʜʜ ✅঎඼ৄࡉදࣔ ✅ొ࿥λοϓ

    ✅ղআλοϓ ɹ ඞཁͳϩά ඞཁͳϩά͕શͯૹ৴͞Εͨ ʹ໰୊ͳ͘ϦϦʔεͰ͖Δ ( શͯૹ৴֬ೝࡁΈ%
  67. ͜Ε·Ͱͷϩάͷૹ৴֬ೝ ஍ຯʹ໘౗ͳ࡞ۀʜʜ w9DPEFͷίϯιʔϧ΍ $POTPMFBQQͰ֬ೝ w༷ʑͳ৚݅ͷ૊Έ߹ΘͤͰ֬ೝ ྫɿແྉձһʗ༗ྉձһ ύλʔϯ"ʗύλʔϯ#ʗύλʔϯ$ ɹɹɹɹɹɹɹɹɹɹɹ 9DPEFͷ ίϯιʔϧ

    $POTPMFBQQ
  68. ͜Ε·Ͱͷϩάͷૹ৴֬ೝ ஍ຯʹ໘౗ͳ࡞ۀʜʜ w9DPEFͷίϯιʔϧ΍ $POTPMFBQQͰ֬ೝ w༷ʑͳ৚݅ͷ૊Έ߹ΘͤͰ֬ೝ ྫɿແྉձһʗ༗ྉձһ ύλʔϯ"ʗύλʔϯ#ʗύλʔϯ$ ɹɹɹɹɹɹɹɹɹɹɹ ਖ਼௚ݟͮΒ͍ʜʜ 9DPEFͷ

    ίϯιʔϧ $POTPMFBQQ
  69. ͜Ε·Ͱͷϩάͷૹ৴֬ೝ ஍ຯʹ໘౗ͳ࡞ۀʜʜ w9DPEFͷίϯιʔϧ΍ $POTPMFBQQͰ֬ೝ w༷ʑͳ৚݅ͷ૊Έ߹ΘͤͰ֬ೝ ྫɿແྉձһʗ༗ྉձһ ύλʔϯ"ʗύλʔϯ#ʗύλʔϯ$ ɹɹɹɹɹɹɹɹɹɹɹ ਖ਼௚ݟͮΒ͍ʜʜ ࡞ۀྔଟ͍ʜʜɻͰ΋ɺ࿙ΕͯΔͱࠔΔ͔Βͳʜʜɻ

    9DPEFͷ ίϯιʔϧ $POTPMFBQQ
  70. ‣ ΞϓϦͷڍಈ֬ೝ࣌ʹɺϩάૹ৴ͷ֬ೝ΋໢ཏͰ͖Δ ‣ ΞϓϦͰखܰʹ׬݁͢ΔͷͰɺଞͷਓʹख఻ͬͯ΋Β͍΍͍͢ νΣοΫϦετ͕ࣗಈͰຒ·ΔΞϓϦ಺ϩά֬ೝπʔϧ Կ͕خ͍͠ͷ͔ʁ ʜʜ ✅঎඼ৄࡉදࣔ ✅ొ࿥λοϓ ✅ղআλοϓ

    ɹ ඞཁͳϩά શͯૹ৴֬ೝࡁΈ%
  71. ઃܭ ࣮૷ ޮՌଌఆ ҙࢥܾఆ ϦϦʔε ݕূ໨తͷ ੔ཧɾ೺Ѳ ϩάఆٛ ϩά࣮૷ #ة͏͍

    ಈ࡞֬ೝ 0,✅ νΣοΫϦετ͕ࣗಈͰຒ·ΔΞϓϦ಺ϩά֬ೝπʔϧ ಋೖલ ͜ͷύλʔϯͰ͸ ɹߟྀ࿙Εͯͨͳʜʜ
  72. ઃܭ ࣮૷ ޮՌଌఆ ҙࢥܾఆ ϦϦʔε ݕূ໨తͷ ੔ཧɾ೺Ѳ ϩάఆٛ ϩά࣮૷ 0,✅

    ಈ࡞֬ೝ νΣοΫϦετ͕ࣗಈͰຒ·ΔΞϓϦ಺ϩά֬ೝπʔϧ ಋೖޙ
  73. ઃܭ ࣮૷ ޮՌଌఆ ҙࢥܾఆ ϦϦʔε ࣮૷ऀҎ֎ʹ΋ ෼୲Ͱ͖ͯॿ͔Δ% ݕূ໨తͷ ੔ཧɾ೺Ѳ ϩάఆٛ

    ϩά࣮૷ 0,✅ ಈ࡞֬ೝ νΣοΫϦετ͕ࣗಈͰຒ·ΔΞϓϦ಺ϩά֬ೝπʔϧ ಋೖޙ
  74. Ͳ͏࣮ݱ͔ͨ͠ʁ

  75. ΞϓϦͷϩά࣮૷ͷؔ࿈ਤ ϩάఆٛ .BSLEPXO 04-PH 04-PH4UPSF ΞϓϦ಺ ϩά֬ೝπʔϧ ϩάఆٛ 4XJGU ϩάૹ৴ϥΠϒϥϦ

    PT-PHHFS ϩΨʔ 04ϩάʹ΋ग़ྗ ϩάαʔόʔ΁ૹ৴ ఆٛΛ࢖ͬͯૹ৴ .BSLEPXO ύʔαʔ EBJGVLV τϥϯεύΠϥ ఆٛΛ ࢀর 04ϩάΛऔಘ தؒදݱΛ 4XJGU ίʔυԽ ʢ։ൃ൛ΞϓϦͷΈʣ
  76. ΞϓϦͷϩά࣮૷ͷؔ࿈ਤ ϩάఆٛ .BSLEPXO 04-PH 04-PH4UPSF ΞϓϦ಺ ϩά֬ೝπʔϧ ϩάఆٛ 4XJGU ϩάૹ৴ϥΠϒϥϦ

    PT-PHHFS ϩΨʔ 04ϩάʹ΋ग़ྗ ϩάαʔόʔ΁ૹ৴ ఆٛΛ࢖ͬͯૹ৴ .BSLEPXO ύʔαʔ EBJGVLV τϥϯεύΠϥ ఆٛΛ ࢀর 04ϩάΛऔಘ தؒදݱΛ 4XJGU ίʔυԽ ʢ։ൃ൛ΞϓϦͷΈʣ
  77. ΞϓϦͷϩά࣮૷ͷؔ࿈ਤ ϩάఆٛ .BSLEPXO 04-PH 04-PH4UPSF ΞϓϦ಺ ϩά֬ೝπʔϧ ϩάఆٛ 4XJGU ϩάૹ৴ϥΠϒϥϦ

    PT-PHHFS ϩΨʔ 04ϩάʹ΋ग़ྗ ϩάαʔόʔ΁ૹ৴ ఆٛΛ࢖ͬͯૹ৴ .BSLEPXO ύʔαʔ EBJGVLV τϥϯεύΠϥ ఆٛΛ ࢀর 04ϩάΛऔಘ தؒදݱΛ 4XJGU ίʔυԽ ʢ։ൃ൛ΞϓϦͷΈʣ
  78. ΞϓϦͷϩά࣮૷ͷؔ࿈ਤ ϩάఆٛ .BSLEPXO 04-PH 04-PH4UPSF ΞϓϦ಺ ϩά֬ೝπʔϧ ϩάఆٛ 4XJGU ϩάૹ৴ϥΠϒϥϦ

    PT-PHHFS ϩΨʔ 04ϩάʹ΋ग़ྗ ϩάαʔόʔ΁ૹ৴ ఆٛΛ࢖ͬͯૹ৴ .BSLEPXO ύʔαʔ EBJGVLV τϥϯεύΠϥ ఆٛΛ ࢀর 04ϩάΛऔಘ தؒදݱΛ 4XJGU ίʔυԽ ʢ։ൃ൛ΞϓϦͷΈʣ
  79. ΞϓϦͷϩά࣮૷ͷؔ࿈ਤ ϩάఆٛ .BSLEPXO 04-PH 04-PH4UPSF ΞϓϦ಺ ϩά֬ೝπʔϧ ϩάఆٛ 4XJGU ϩάૹ৴ϥΠϒϥϦ

    PT-PHHFS ϩΨʔ 04ϩάʹ΋ग़ྗ ϩάαʔόʔ΁ૹ৴ ఆٛΛ࢖ͬͯૹ৴ .BSLEPXO ύʔαʔ EBJGVLV τϥϯεύΠϥ ఆٛΛ ࢀর 04ϩάΛऔಘ தؒදݱΛ 4XJGU ίʔυԽ ʢ։ൃ൛ΞϓϦͷΈʣ
  80. ΍΍͍͜͠) w04-PHGSBNFXPSLͷ04-PH4UPSFͳͲ IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOPTMPH wPT'SBNFXPSLͷ-PHHFS΍04-PH IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOPTMPHHFS wPT'SBNFXPSLͷPT@MPH VOJpFEMPHHJOHTZTUFN  IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOPTMPHHJOH wPT'SBNFXPSL

    IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOPT J04ͷ-PHHJOHTZTUFN J04 J04 J04 J04
  81. ΍΍͍͜͠) w04-PHGSBNFXPSLͷ04-PH4UPSFͳͲ IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOPTMPH wPT'SBNFXPSLͷ-PHHFS΍04-PH IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOPTMPHHFS wPT'SBNFXPSLͷPT@MPH VOJpFEMPHHJOHTZTUFN  IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOPTMPHHJOH wPT'SBNFXPSL

    IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOPT J04ͷ-PHHJOHTZTUFN J04 J04 J04 J04
  82. PT-PHHFS ֓ཁ J04 w ΞϓϦ͔Β౷߹ϩάγεςϜʹϩάΛॻ͖ࠐΊΔ w ඇৗʹޮ཰తͰɺΞϓϦͷಈ࡞஗Ԇͳ͘࢖͑Δ w $POTPMFBQQ΍9DPEFͷίϯιʔϧͰϩάΛ֬ೝͰ͖Δ w

    ηϯγςΟϒͳ৘ใ͸ϚεΫͰ͖Δʢࢦఆͯ͠ެ։΋Ͱ͖Δʣ w IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOPTMPHHFS w IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED
  83. PT-PHHFS ؆୯ͳྫ import os // ϩάͷग़͕ࣗ෼͔ΔΑ͏ʹ subsystem ͱ category Λࢦఆ

    let osLogger = Logger(subsystem: bundleID, category: "Activity") // ϩάΛॻ͖ࠐΉ osLogger.notice(“\(logDataString)”) J04
  84. ΞϓϦͷϩά࣮૷ͷؔ࿈ਤ ϩάఆٛ .BSLEPXO 04-PH 04-PH4UPSF ΞϓϦ಺ ϩά֬ೝπʔϧ ϩάఆٛ 4XJGU ϩάૹ৴ϥΠϒϥϦ

    PT-PHHFS ϩΨʔ 04ϩάʹ΋ग़ྗ ϩάαʔόʔ΁ૹ৴ ఆٛΛ࢖ͬͯૹ৴ .BSLEPXO ύʔαʔ EBJGVLV τϥϯεύΠϥ ఆٛΛ ࢀর 04ϩάΛऔಘ தؒදݱΛ 4XJGU ίʔυԽ ʢ։ൃ൛ΞϓϦͷΈʣ
  85. ΞϓϦͷϩά࣮૷ͷؔ࿈ਤ ϩάఆٛ .BSLEPXO 04-PH 04-PH4UPSF ΞϓϦ಺ ϩά֬ೝπʔϧ ϩάఆٛ 4XJGU ϩάૹ৴ϥΠϒϥϦ

    PT-PHHFS ϩΨʔ 04ϩάʹ΋ग़ྗ ϩάαʔόʔ΁ૹ৴ ఆٛΛ࢖ͬͯૹ৴ .BSLEPXO ύʔαʔ EBJGVLV τϥϯεύΠϥ ఆٛΛ ࢀর 04ϩάΛऔಘ தؒදݱΛ 4XJGU ίʔυԽ ʢ։ൃ൛ΞϓϦͷΈʣ
  86. 04-PH4UPSF ֓ཁ w ΞϓϦ಺Ͱ౷߹ϩάγεςϜ͔ΒϩάΛऔಘͰ͖Δ w /41SFEJDBUFͰ৚݅Λࢦఆͯ͠औΓग़ͤΔ w IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOPTMPHPTMPHTUPSF J04

  87. 04-PH4UPSF ར༻ྫ J04 import OSLog …… let store = try

    OSLogStore(scope: .currentProcessIdentifier) let predicate = NSPredicate(format: "(subsystem == %@)", Bundle.main.bundleIdentifier!) return try store.getEntries(matching: predicate)
  88. ΞϓϦͷϩά࣮૷ͷؔ࿈ਤ ϩάఆٛ .BSLEPXO 04-PH 04-PH4UPSF ΞϓϦ಺ ϩά֬ೝπʔϧ ϩάఆٛ 4XJGU ϩάૹ৴ϥΠϒϥϦ

    PT-PHHFS ϩΨʔ 04ϩάʹ΋ग़ྗ ϩάαʔόʔ΁ૹ৴ ఆٛΛ࢖ͬͯૹ৴ .BSLEPXO ύʔαʔ EBJGVLV τϥϯεύΠϥ ఆٛΛ ࢀর 04ϩάΛऔಘ தؒදݱΛ 4XJGU ίʔυԽ ʢ։ൃ൛ΞϓϦͷΈʣ
  89. ΞϓϦ಺ϩά֬ೝπʔϧͷߏ੒ 04-PH4UPSF ΞϓϦ಺ϩά֬ೝπʔϧ HFU&OUSJFT [OSLogEntry] [OSLogEntryLog] ߦಈϩά ఆٛ ߦಈϩάఆٛ .BSLEPXO

    ϩά֬ೝπʔϧ༻ͷϞσϧ ߦಈϩάͷ+40/Λσίʔυ DPNQBDU.BQ [OSLogMessageComponent] ʹؚ·ΕΔ
  90. ΞϓϦͷϩά࣮૷ͷؔ࿈ਤ ϩάఆٛ .BSLEPXO 04-PH 04-PH4UPSF ΞϓϦ಺ ϩά֬ೝπʔϧ ϩάఆٛ 4XJGU ϩάૹ৴ϥΠϒϥϦ

    PT-PHHFS ϩΨʔ 04ϩάʹ΋ग़ྗ ϩάαʔόʔ΁ૹ৴ ఆٛΛ࢖ͬͯૹ৴ .BSLEPXO ύʔαʔ EBJGVLV τϥϯεύΠϥ ఆٛΛ ࢀর 04ϩάΛऔಘ தؒදݱΛ 4XJGU ίʔυԽ ʢ։ൃ൛ΞϓϦͷΈʣ
  91. ·ͱΊ

  92. ·ͱΊ ᶃυΩϡϝϯτϕʔεͷܕ҆શͳϩά࣮૷ίʔυࣗಈੜ੒ υΩϡϝϯτ͕ৗʹ׬උ͞Εɺ௕ظؒͰෳ਺ਓ͕ؔΘͬͯ΋շద  ᶄνΣοΫϦετ͕ࣗಈͰຒ·ΔΞϓϦ಺ϩά֬ೝπʔϧ ᶃͷ࢓૊Έ΍04-PH4UPSF౳Λ׆༻͠ɺշదͰ໢ཏతͳಈ࡞֬ೝ ΫοΫύουJ04ΞϓϦͷߦಈϩάͷઃܭɾ࣮૷࣌ͷ޻෉

  93. DPPLQBE@JPTED@BGUFS@QBSUZ w $BTF1BUIT w .BJOUBJOBCJMJUZ*OEFYͱ ίʔυͷอकੑվળ w %PD$%PDVNFOUBUJPO "SDIJWF w

    0QFO"1*  ౳ͷτϐοΫͰ࿩͠·͢ʂ IUUQTDPPLQBEDPOOQBTTDPNFWFOU