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

動画
https://youtu.be/4NGvI9PoAIQ?list=PLod2oSGQp3W6tx5JMQntpuZ-fNpP4Y_Hh

クックパッドの 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
    ϞόΠϧΞϓϦͷߦಈϩάͷ
    ʮ࢓ࠐΈʯΛշదʹ͢Δ

    View Slide

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

    View Slide

  3. ࣗݾ঺հ
    ౻ࡔ༞࢙ :VKJ'VKJTBLB
    [email protected]
    !ೣɼྉཧ
    "$PPLQBE*OD

    ΫοΫύουJ04ΞϓϦ
    ɹϨγϐºങ͍෺ͷମݧͮ͘Γ

    View Slide

  4. ߦಈϩάͱ͸ʁ

    View Slide

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

    View Slide

  6. ߦಈϩάͷ࣮૷
    ྫɿ(PPHMF"OBMZUJDT 'JSFCBTF

    IUUQTpSFCBTFHPPHMFDPNEPDTBOBMZUJDTFWFOUT
    Analytics.logEvent("select_content", parameters: [
    "content_type": "image",
    "content_id": "P12453",
    "items": [["name": "Kittens"]]
    ])
    ෼ੳʹඞཁͳ৘ใʢྫɿΠϕϯτ໊ɺίϯςϯπͷछྨɺ*%౳ʣΛϩΨʔͰૹ৴

    View Slide

  7. ߦಈϩάͷར༻ͷྲྀΕ
    ྫɿԾઆݕূͷҰ࿈ʢΫοΫύουJ04ΞϓϦ

    ઃܭ ࣮૷ ޮՌଌఆ ҙࢥܾఆ
    ϦϦʔε

    View Slide

  8. ߦಈϩάͷར༻ͷྲྀΕ
    ྫɿԾઆݕূͷҰ࿈ʢΫοΫύουJ04ΞϓϦ

    ݕূઃܭ
    ࢪࡦഎܠͷཧղ
    طଘϩάͷൃ۷
    ઃܭ ࣮૷ ޮՌଌఆ ҙࢥܾఆ
    ϦϦʔε

    View Slide

  9. ߦಈϩάͷར༻ͷྲྀΕ
    ྫɿԾઆݕূͷҰ࿈ʢΫοΫύουJ04ΞϓϦ

    ݕূઃܭ
    ࢪࡦഎܠͷཧղ
    طଘϩάͷൃ۷
    ઃܭ ࣮૷ ޮՌଌఆ ҙࢥܾఆ
    ϦϦʔε
    ػೳ։ൃ
    ৽نϩάͷ௥Ճ

    View Slide

  10. ߦಈϩάͷར༻ͷྲྀΕ
    ྫɿԾઆݕূͷҰ࿈ʢΫοΫύουJ04ΞϓϦ

    ݕূઃܭ
    ࢪࡦഎܠͷཧղ
    طଘϩάͷൃ۷
    ઃܭ ࣮૷ ޮՌଌఆ ҙࢥܾఆ
    ϦϦʔε
    ػೳ։ൃ
    ৽نϩάͷ௥Ճ
    σʔλूܭʢ42-࡞੒ʣ
    ղऍɾධՁ

    View Slide

  11. ߦಈϩάͷར༻ͷྲྀΕ
    ྫɿԾઆݕূͷҰ࿈ʢΫοΫύουJ04ΞϓϦ

    ݕূઃܭ
    ࢪࡦഎܠͷཧղ
    طଘϩάͷൃ۷
    ઃܭ ࣮૷ ޮՌଌఆ ҙࢥܾఆ
    ϦϦʔε
    ػೳ։ൃ
    ৽نϩάͷ௥Ճ
    σʔλूܭʢ42-࡞੒ʣ
    ղऍɾධՁ
    ܧଓ൑அ

    View Slide

  12. ߦಈϩάͷར༻ͷྲྀΕ
    ྫɿԾઆݕূͷҰ࿈ʢΫοΫύουJ04ΞϓϦ

    ઃܭ ࣮૷ ޮՌଌఆ ҙࢥܾఆ
    ϦϦʔε
    #͞Μ
    "͞Μ "͞Μ

    View Slide

  13. ߦಈϩάͷར༻ͷྲྀΕ
    ྫɿԾઆݕূͷҰ࿈ʢΫοΫύουJ04ΞϓϦ

    ઃܭ ࣮૷ ޮՌଌఆ ҙࢥܾఆ
    ϦϦʔε
    #͞Μ
    "͞Μ "͞Μ
    ػೳͱϩάͷ࣮૷

    View Slide

  14. ߦಈϩάͷར༻ͷྲྀΕ
    ྫɿԾઆݕূͷҰ࿈ʢΫοΫύουJ04ΞϓϦ

    ઃܭ ࣮૷ ޮՌଌఆ ҙࢥܾఆ
    ϦϦʔε
    #͞Μ
    "͞Μ "͞Μ
    ػೳͱϩάͷ࣮૷ ෼ੳ༻42-ͷ࡞੒

    View Slide

  15. ߦಈϩάͷར༻ͷྲྀΕ
    ྫɿԾઆݕূͷҰ࿈ʢΫοΫύουJ04ΞϓϦ

    ઃܭ ࣮૷ ޮՌଌఆ ҙࢥܾఆ
    ϦϦʔε
    #͞Μ
    "͞Μ "͞Μ
    ػೳͱϩάͷ࣮૷ ෼ੳ༻42-ͷ࡞੒
    ࣮૷ऀͱ෼ੳऀ͕ผʑͳ͜ͱ΋

    View Slide

  16. ߦಈϩάͷར༻ͷྲྀΕ
    ྫɿԾઆݕূͷҰ࿈ʢΫοΫύουJ04ΞϓϦ

    ઃܭ ࣮૷ ޮՌଌఆ ҙࢥܾఆ
    ϦϦʔε
    #͞Μ
    $͞Μ %͞Μ
    ෼ੳ༻42-ͷ
    ࡞੒
    ػೳͱϩά
    ͷ࣮૷

    View Slide

  17. ߦಈϩάͷར༻ͷྲྀΕ
    ྫɿԾઆݕূͷҰ࿈ʢΫοΫύουJ04ΞϓϦ

    ઃܭ ࣮૷ ޮՌଌఆ ҙࢥܾఆ
    ϦϦʔε
    #͞Μ
    $͞Μ %͞Μ
    ෼ੳ༻42-ͷ
    ࡞੒
    ػೳͱϩά
    ͷ࣮૷
    ࣮૷ऀͱ෼ੳऀ͕ಉҰͳ͜ͱ΋

    View Slide

  18. ߦಈϩάͷར༻ͷྲྀΕ
    ྫɿԾઆݕূͷҰ࿈ʢΫοΫύουJ04ΞϓϦ

    ઃܭ ࣮૷ ޮՌଌఆ ҙࢥܾఆ
    ϦϦʔε
    &͞Μ
    ػೳͱϩά
    ͷ࣮૷
    ෼ੳ༻42-ͷ
    ࡞੒
    ࣄલௐࠪ
    اը
    ʮ࣍͸ʜʜʯ
    ࣮૷ऀͱ෼ੳऀ͕ಉҰͳ͜ͱ΋

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

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

    View Slide

  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

    View Slide

  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)
    }

    View Slide

  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ίϚϯυ

    View Slide

  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ʣɹ

    View Slide

  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)
    }

    View Slide

  30. υΩϡϝϯτϕʔεͷܕ҆શͳϩά࣮૷ίʔυࣗಈੜ੒
    ۩ମྫ
    खॱ
    ɹੜ੒͞ΕͨྻڍܕͰ
    ɹϩάૹ৴Օॴʹ࣮૷
    // ϨγϐݕࡧॲཧͷϦΫΤετޙ
    logger.post(
    RecipeSearch.search(
    keyword: keyword, // “ಲ೑"
    order: order // .latest
    )
    )

    View Slide

  31. ໿೥ؒӡ༻ͯ͠
    ϩάఆٛͷ.BSLEPXO͸ϑΝΠϧҎ্ʹ
    ˠࠞཚ΋ͳ͘׆༻Ͱ͖͍ͯΔ%

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  44. ৄ͘͠͸
    ࢀߟࢿྉ
    υΩϡϝϯτϕʔεͷܕ҆શͳ
    ϞόΠϧΞϓϦߦಈϩάج൫ͷ
    ߏங
    https://techlife.cookpad.com/
    entry/2020/11/05/110000

    View Slide

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

    View Slide

  46. ৽ͨͳ՝୊ʜʜ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  56. ະղܾ՝୊
    ࢓૊ΈͰΧόʔͰ͖͍ͯͨͷ͸Ұ෦෼
    ઃܭ ࣮૷ ޮՌଌఆ ҙࢥܾఆ
    ϦϦʔε
    ݕূ໨తͷ
    ੔ཧɾ೺Ѳ
    ϩάఆٛ ϩά࣮૷
    0,✅ #ة͏͍
    ಈ࡞֬ೝ
    ͜ͷύλʔϯͰ͸
    ɹߟྀ࿙Εͯͨͳʜʜ

    View Slide

  57. औΓ૊Έᶄ
    νΣοΫϦετ͕ࣗಈͰຒ·Δ
    ΞϓϦ಺ϩά֬ೝπʔϧ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  72. ઃܭ ࣮૷ ޮՌଌఆ ҙࢥܾఆ
    ϦϦʔε
    ݕূ໨తͷ
    ੔ཧɾ೺Ѳ
    ϩάఆٛ ϩά࣮૷
    0,✅
    ಈ࡞֬ೝ
    νΣοΫϦετ͕ࣗಈͰຒ·ΔΞϓϦ಺ϩά֬ೝπʔϧ
    ಋೖޙ

    View Slide

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

    View Slide

  74. Ͳ͏࣮ݱ͔ͨ͠ʁ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  80. ΍΍͍͜͠)
    w04-PHGSBNFXPSLͷ04-PH4UPSFͳͲ
    IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOPTMPH
    wPT'SBNFXPSLͷ-PHHFS΍04-PH
    IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOPTMPHHFS
    wPT'SBNFXPSLͷ[email protected] VOJpFEMPHHJOHTZTUFN

    IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOPTMPHHJOH
    wPT'SBNFXPSL
    IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOPT
    J04ͷ-PHHJOHTZTUFN
    J04
    J04
    J04
    J04

    View Slide

  81. ΍΍͍͜͠)
    w04-PHGSBNFXPSLͷ04-PH4UPSFͳͲ
    IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOPTMPH
    wPT'SBNFXPSLͷ-PHHFS΍04-PH
    IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOPTMPHHFS
    wPT'SBNFXPSLͷ[email protected] VOJpFEMPHHJOHTZTUFN

    IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOPTMPHHJOH
    wPT'SBNFXPSL
    IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOPT
    J04ͷ-PHHJOHTZTUFN
    J04
    J04
    J04
    J04

    View Slide

  82. PT-PHHFS
    ֓ཁ
    J04
    w ΞϓϦ͔Β౷߹ϩάγεςϜʹϩάΛॻ͖ࠐΊΔ
    w ඇৗʹޮ཰తͰɺΞϓϦͷಈ࡞஗Ԇͳ͘࢖͑Δ
    w $POTPMFBQQ΍9DPEFͷίϯιʔϧͰϩάΛ֬ೝͰ͖Δ
    w ηϯγςΟϒͳ৘ใ͸ϚεΫͰ͖Δʢࢦఆͯ͠ެ։΋Ͱ͖Δʣ
    w IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOPTMPHHFS
    w IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED

    View Slide

  83. PT-PHHFS
    ؆୯ͳྫ
    import os
    // ϩάͷग़͕ࣗ෼͔ΔΑ͏ʹ subsystem ͱ category Λࢦఆ
    let osLogger = Logger(subsystem: bundleID, category: "Activity")
    // ϩάΛॻ͖ࠐΉ
    osLogger.notice(“\(logDataString)”)
    J04

    View Slide

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

    View Slide

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

    View Slide

  86. 04-PH4UPSF
    ֓ཁ
    w ΞϓϦ಺Ͱ౷߹ϩάγεςϜ͔ΒϩάΛऔಘͰ͖Δ
    w /41SFEJDBUFͰ৚݅Λࢦఆͯ͠औΓग़ͤΔ
    w IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOPTMPHPTMPHTUPSF
    J04

    View Slide

  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)

    View Slide

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

    View Slide

  89. ΞϓϦ಺ϩά֬ೝπʔϧͷߏ੒
    04-PH4UPSF
    ΞϓϦ಺ϩά֬ೝπʔϧ
    HFU&OUSJFT
    [OSLogEntry]
    [OSLogEntryLog]
    ߦಈϩά
    ఆٛ
    ߦಈϩάఆٛ
    .BSLEPXO ϩά֬ೝπʔϧ༻ͷϞσϧ
    ߦಈϩάͷ+40/Λσίʔυ
    DPNQBDU.BQ
    [OSLogMessageComponent] ʹؚ·ΕΔ

    View Slide

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

    View Slide

  91. ·ͱΊ

    View Slide

  92. ·ͱΊ
    ᶃυΩϡϝϯτϕʔεͷܕ҆શͳϩά࣮૷ίʔυࣗಈੜ੒
    υΩϡϝϯτ͕ৗʹ׬උ͞Εɺ௕ظؒͰෳ਺ਓ͕ؔΘͬͯ΋շద

    ᶄνΣοΫϦετ͕ࣗಈͰຒ·ΔΞϓϦ಺ϩά֬ೝπʔϧ
    ᶃͷ࢓૊Έ΍04-PH4UPSF౳Λ׆༻͠ɺշదͰ໢ཏతͳಈ࡞֬ೝ
    ΫοΫύουJ04ΞϓϦͷߦಈϩάͷઃܭɾ࣮૷࣌ͷ޻෉

    View Slide

  93. [email protected]@[email protected]
    w $BTF1BUIT
    w .BJOUBJOBCJMJUZ*OEFYͱ
    ίʔυͷอकੑվળ
    w %PD$%PDVNFOUBUJPO
    "SDIJWF
    w 0QFO"1*

    ౳ͷτϐοΫͰ࿩͠·͢ʂ
    IUUQTDPPLQBEDPOOQBTTDPNFWFOU

    View Slide