Share
Embed
Forge Platform 概要
Forgeとは
Forge はアトラシアンのクラウドアプリ開発プラットフォームです。Forgeの特徴は、アトラシアンのクラウド上でアプリを実行できることです。Forge の大きなメリットは面倒な作業をFoegeに任せられることにあります。
アジェンダ
- Forgeとは
- Forgeのコンセプト
- Forgeのビルディングブロック
- Forgeでの開発のポイント
アトラシアン株式会社
October 03, 2024
Transcript
49 slides
-
What Forge can do What Forge is 'PSHFΞτϥγΞϯͷΫϥυΞϓ Ϧ։ൃϓϥοτϑΥʔϜͰ͢ɻ 'PSHFͷಛɺΞτϥγΞϯͷΫϥ
υ্ͰΞϓϦΛ࣮ߦͰ͖Δ͜ͱͰ͢ɻ 'PSHFͷେ͖ͳϝϦοτɺ໘ͳ࡞ۀ Λ'PFHFʹͤΒΕΔ͜ͱʹ͋Γ· ͢ɻ 'PSHF+JSBɺ$POGMVFODFɺ #JUCVDLFUͳͲͰར༻ՄೳͳΞυΦϯ ΞϓϦͱͯ͠ɺ։ൃऀͷϏδϣϯΛ࣮ ݱ͢ΔखஈͰ͢ɻ ॏཁͰͳ͍෦Λ'PSHFͷػೳ͕Χ όʔͯ͘͠ΕΔͨΊɺ։ൃऀίΞػ ೳͷߏஙʹूத͢Δ͜ͱ͕Ͱ͖·͢ɻ -
Forge ͷಛ σϑΥϧτঢ়ଶͰηΩϡΞ ΞτϥγΞϯʹΑΔϗετ ։ൃɺϝϯςφϯε͕༰қ EnterpriseڥͰ҆৺ͯ͠ར༻Մೳ 'PSHF'BB4ϓϥοτϑΥʔϜͱͯ͠ɺೝূɺΞΠσϯςΟ ςΟɺεέʔϦϯάɺςφϯτཧΛߦ͏ɻ σϑΥϧτͰɺ'PSHFͷͯ͢ͷػೳʢϢʔβʔσʔλʹ ৮ΕΔͷʣɺαΠτཧऀ͕ঝೝ͢Δ·Ͱ੍ݶ͞ΕΔɻ
͜ΕʹҎԼؚ͕·Ε·͢ɿ w "1*ͷݺͼग़͠ w ϓϥοτϑΥʔϜ͔ΒͷσʔλಡΈग़͠ σϑΥϧτঢ়ଶͰηΩϡΞ -
Forge ͷಛ σϑΥϧτঢ়ଶͰηΩϡΞ ΞτϥγΞϯʹΑΔϗετ ։ൃɺϝϯςφϯε͕༰қ EnterpriseڥͰ҆৺ͯ͠ར༻Մೳ • όοΫΤϯυϑϩϯτΤϯυࢲͨͪͷϓϥοτ ϑΥʔϜ্Ͱ࣮ߦ͞ΕΔɻ •
εέʔϦϯάࣗಈͰߦΘΕΔͷͰɺࣗͰ࣮ߦ͢Δ ඞཁ͕ͳ͍ɻ • ؍ଌՄೳͳࢹπʔϧΛఏڙɻ • ΤϯλʔϓϥΠζରԠͷػೳΛඋ͑ͨແྉͷϗεςο υετϨʔδɻ ΞτϥγΞϯʹΑΔϗετ -
Forge ͷಛ σϑΥϧτঢ়ଶͰηΩϡΞ ΞτϥγΞϯʹΑΔϗετ ։ൃɺϝϯςφϯε͕༰қ EnterpriseڥͰ҆৺ͯ͠ར༻Մೳ • ΫϩεϓϥοτϑΥʔϜͷCLIπʔϧ • ຊ൪ڥ1ҎʹσϓϩΠ
• ີͳϩʔΧϧ։ൃϧʔϓͷͨΊͷτϯωϦϯά • ෳͷ։ൃऀ͕ಉ࣌ʹΞϓϦΛ։ൃՄೳ • αʔόʔͳ͠ͰΞϓϦΛ࣮ߦͰ͖ΔͨΊɺϝϯςφϯε ͷෛ୲͕ඇৗʹখ͍͞ ։ൃɺϝϯςφϯε͕༰қ -
Forge ͷಛ σϑΥϧτঢ়ଶͰηΩϡΞ ΞτϥγΞϯʹΑΔϗετ ։ൃɺϝϯςφϯε͕༰қ EnterpriseڥͰ҆৺ͯ͠ར༻Մೳ ΞτϥγΞϯϓϥοτϑΥʔϜ͔Βσʔλ࣋ͪग़ͨ͘͠ͳ͍ɿ • ࣋ͪग़ͨ͠ઌ͕దͳਓ৫Ͱ͋Δ͔ݕূ͠ͳ͚ΕͳΒ ͳ͍ɻ
• ͲͷΑ͏ͳσʔλ͕࣋ͪग़͞ΕɺͲͷΑ͏ʹѻΘΕΔ͔Λཧ ղ͢Δඞཁ͕͋Δɻ • ͦͦσʔλ͕Εͳ͍ํ͕ͣͬͱ؆୯ɻ ForgeɺՄೳͳݶΓϓϥοτϑΥʔϜͰ݁͢ΔೳྗΛఏ ڙ͠ɺͦͷ݁ՌɺΤϯλʔϓϥΠζاۀʹ·ΕΔɻ EnterpriseڥͰ҆৺ͯ͠ར༻Մೳ -
Forge Example Apps Localised Date Macro ᙱ͍ͱ͜Ζʹख͕ಧ͖ɺʮ͋ͬ ͨΒ͍͍ͳʯͱࢥ͍ͬͯͨͷ Λ࡞Δ My
Reminders ʹ·ͬͨ͘৽͍͠ཁૉΛ ΈࠐΉ Decision Helper ϓϩηεΛࢧԉ͢ΔΞϓϦΛॻ ͘ -
Jira • Jira ՝ʹ৽͍͠ίϯςϯπΛՃ͢Δ • Jira ϫʔΫϑϩʔʹΧελϜ݅ΛՃ • ಛఆͷ՝ͷόοΫάϥϯυͰεΫϦϓτΛ࣮ߦ •
৽͍͠μογϡϘʔυ ΨδΣοτΛՃ͢Δ • JQL ݕࡧʹ৽͍͠ΫΤϦ༻ޠΛՃ What else can Forge do? Confluence Bitbucket • ΧελϜϚʔδνΣοΫΛఆٛ͢Δ • PRʹΞΫγϣϯͱΧʔυΛՃ͢Δ • ಈతϩδοΫΛ༻࣮ͯ͠ߦ࣌ʹύΠϓϥΠϯ ఆٛΛੜ͢Δ • ৽͍͠ϚΫϩͷՃ • ϗʔϜϖʔδʹ৽͍͠ίϯςϯπΛՃ͢Δ • ৽͍͠ίϯςϯπλΠϓͷՃ ʢσʔλϕʔεͳͲʣ -
Jira • Jira ՝ʹ৽͍͠ίϯςϯπΛՃ͢Δ • Jira ϫʔΫϑϩʔʹΧελϜ݅ΛՃ • ಛఆͷ՝ͷόοΫάϥϯυͰεΫϦϓτΛ࣮ߦ •
৽͍͠μογϡϘʔυ ΨδΣοτΛՃ͢Δ • JQL ݕࡧʹ৽͍͠ΫΤϦ༻ޠΛՃ What else can Forge do? Confluence • ৽͍͠ϚΫϩͷՃ • ϗʔϜϖʔδʹ৽͍͠ίϯςϯπΛՃ͢Δ • ৽͍͠ίϯςϯπλΠϓͷՃ ʢσʔλϕʔεͳͲʣ Bitbucket • ΧελϜϚʔδνΣοΫΛఆٛ͢Δ • PRʹΞΫγϣϯͱΧʔυΛՃ͢Δ • ಈతϩδοΫΛ༻࣮ͯ͠ߦ࣌ʹύΠϓϥΠϯ ఆٛΛੜ͢Δ -
Jira • Jira ՝ʹ৽͍͠ίϯςϯπΛՃ͢Δ • Jira ϫʔΫϑϩʔʹΧελϜ݅ΛՃ • ಛఆͷ՝ͷόοΫάϥϯυͰεΫϦϓτΛ࣮ߦ •
৽͍͠μογϡϘʔυ ΨδΣοτΛՃ͢Δ • JQL ݕࡧʹ৽͍͠ΫΤϦ༻ޠΛՃ What else can Forge do? Confluence Bitbucket • ΧελϜϚʔδνΣοΫΛఆٛ͢Δ • PRʹΞΫγϣϯͱΧʔυΛՃ͢Δ • ಈతϩδοΫΛ༻࣮ͯ͠ߦ࣌ʹύΠϓϥΠϯ ఆٛΛੜ͢Δ • ৽͍͠ϚΫϩͷՃ • ϗʔϜϖʔδʹ৽͍͠ίϯςϯπΛՃ͢Δ • ৽͍͠ίϯςϯπλΠϓͷՃ ʢσʔλϕʔεͳͲʣ -
Agenda NOW DONE Forgeͱ? ForgeԿΛͯ͘͠ΕΔςΫϊϩδʔͳͷ͔ Forge ͷίϯηϓτ Forge͕ͲͷΑ͏ʹஔ͞ΕΔͷ͔ɺͳͥͦ͏ͳͷ͔ Forge ͷϏϧσΟϯάϒϩοΫ
۩ମతʹͲΜͳػೳ͕ఏڙ͞ΕΔͷ͔ Forge Ͱͷ։ൃͷϙΠϯτ ։ൃ͢ΔͨΊʹඞ͓͖ͣͬͯ͘ϙΠϯτ -
The fundamentals of a Forge App Compute ίʔυΛΞτϥγΞϯϓϥοτ ϑΥʔϜͰϥϜμؔͱ࣮ͯ͠ ߦɻ
UI and CDN UIͱίϯςϯπΛϗεςΟϯά͢Δͨ ΊɺϗεςΟϯάڥΛؾʹ͢Δඞཁ ͕ͳ͍ɻ Storage ฐ͕͓ࣾ٬༷ͷσʔλΛϗεςΟϯά͍ ͨ͠·͢ͷͰɺ͓٬༷ετϨʔδɾϓ ϩόΠμʔΛ୳͢ඞཁ͕͋Γ·ͤΜɻ -
The fundamentals: A worked example UI and CDN Jira ՝͕ಡΈࠐ·ΕΔͱɺJira
CDN ͔Β ForgeͷUI ΛಡΈࠐ Έ·͢ɻ Compute UIͲͷΑ͏ͳϦϚΠϯμʔΛද ࣔ͢Δ͔ɺίʔυΛݺͼग़ͯ͠ ௐΔඞཁ͕͋Δɻ Storage ίʔυ Forge ετϨʔδ ϨΠ Ϡʔʹ͍߹ΘͤɺݱࡏͷϢʔ βʔͷϦϚΠϯμʔΛऔಘ͠·͢ɻ On page load Final state -
Agenda NOW DONE DONE Forge ͱ? ForgeԿΛͯ͘͠ΕΔςΫϊϩδʔͳͷ͔ Forge ͷίϯηϓτ Forge͕ͲͷΑ͏ʹஔ͞ΕΔͷ͔ɺͳͥͦ͏ͳͷ͔
Forge ͷϏϧσΟϯάϒϩοΫ ۩ମతʹͲΜͳػೳ͕ఏڙ͞ΕΔͷ͔ Forge Ͱͷ։ൃͷϙΠϯτ ։ൃ͢ΔͨΊʹඞ͓͖ͣͬͯ͘ϙΠϯτ -
Functions for Forge Compute Functions for everything ίʔυΛΞτϥγΞϯϓϥοτϑΥʔ Ϝ্Ͱ࣮ߦ͢Δඞཁ͕͋Δ߹ɺͦΕ ৗʹ
Forge ؔͷதʹ͋Γ·͢ɻ Secure environment ཧऀͷಉҙ͕ͳ͍ݶΓɺσʔλΛΠ ϯετʔϧ(αΠτ)ؒͰڞ༗͢Δ͜ͱ Ͱ͖·ͤΜɻ Performance and Scale ͓٬༷ͷސ٬͕1ਓͰ͋Ζ͏ͱઍਓ Ͱ͋Ζ͏ͱɺࢲ͓ͨͪ٬༷ͷͨΊʹ نΛ֦େ͠ɺΞϓϦͷεϜʔζͳՔ ಇΛҡ࣋͠·͢ɻ -
Forge storage for Apps Key-value storage ΛΦϒδΣΫτʹͰ͖Δ୯७ͳ σʔλΛ֨ೲ͢Δɻ Custom entities
and Complex queries ΑΓߴͳํ๏ͰরձͰ͖ɺΑΓ ෳࡶͳΦϒδΣΫτΛ࡞͢Δɻ Data residency ސ٬ͱಉ͡Ϧʔδϣϯʹอଘ͞Εͨ σʔλΛࣗಈతʹऔಘɻσʔλϨδσ ϯγʔΛαϙʔτ͢ΔͨΊͷ࿑ྗ΄ ͱΜͲඞཁ͋Γ·ͤΜɻϓϥοτϑΥʔ Ϝ্ʹ͋Δ͜ͱେ͖ͳར͕͋Δʂ Simple key-value storage Encrypted key-value storage -
App: Entity Property Tool for Jira Entity property/Content property storage
In-product ͷΦϒδΣΫτʢ՝ɺίϯ ςϯπɺίϝϯτͳͲʣʹର͢Δσ ʔλΛอଘ͠·͢ɻ Key-value storage ΦϒδΣΫτΛอଘ͢Δ͜ͱͰ͖ ͯɺΤϯςΟςΟΛอଘͨ͠Γɺ ෳࡶͳΫΤϦʔΛ࡞ͨ͠Γ͢Δ͜ ͱͰ͖ͳ͍ɻ Platform benefits ࣗಈతʹόοΫΞοϓʹؚ·ΕΔɻ DaReΛαϙʔτɻσʔλͱಉϨ ϕϧͷαϙʔτΛड͚Δɻ -
Scheduled triggers Create scheduled jobs όοΫάϥϯυͰ࣮ߦ͞ΕΔػೳ Λεέδϡʔϧ͢Δ͜ͱ͕Ͱ͖Δʂ Periods not time
of day δϣϒͷ࣮ߦִؒͷ͞Λબ͠ ·͢ɻ Runs for every install ͯ͢ͷΠϯετʔϧࡁΈͷαΠτ ͰɺΠϯλʔόϧ͝ͱʹ1ճɺ͕ؔ ࣮ߦ͞Ε·͢ɻΦʔέετϨʔγϣ ϯෆཁʂ -
Async events (Queues) Create a queue όοΫάϥϯυͰॲཧ͞ΕΔ δϣϒΛΩϡʔʹՃ͢Δɻ Inbuilt retry
support δϣϒ͕ࣦഊͨ͠߹ɺԆΛઃ͚ͯ কདྷ࠶ࢼߦ͢ΔΑ͏ʹ؆୯ʹઃఆͰ ͖Δʂ Batch processing ͯ͢ͷ Jira ՝ Confluence ϖʔδʹର ͯ͠Կ͔Λ࣮ߦ͢Δඞཁ͕͋Γ·͔͢? Τ ϯςΟςΟ͝ͱʹδϣϒΛ࣮ߦ͠·͢ʂ Create the Queue Push events to the queue Consume events off the queue -
Web triggers What are they? HTTPϦΫΤετͷ݁Ռͱͯؔ͠Λ ݺͼग़͠·͢ɻ֎෦αʔϏε͕ΞϓϦ ͷΞΫγϣϯΛτϦΨʔ͠·͢ʂ Accessible from
Code ͋ͳͨͷΞϓϦɺUIͰΣϒτϦ ΨʔͷURLΛఏڙ͢Δ͜ͱ͕Ͱ͖·͢ɻ ϢʔβʔʹϦϯΫΛఏڙ͠·͠ΐ͏ɻ Can return data ϨεϙϯεͰσʔλΛฦ͢͜ͱ͕ Ͱ͖Δɻ -
Product events (triggers) What are they? ͰԿ͔͕ى͜Δͱɺ͋ͳͨͷΞϓϦ ʹΠϕϯτ͕ૹ৴͞Ε·͢ɻ(ྫɿissue ͕ߋ৽͞Εͨɺϖʔδ͕࡞͞Εͨͳ Ͳʣ
Different event, different data Πϕϯτ͝ͱʹɺͦͷΠϕϯτͷχʔ ζʹ߹ΘͤͨҟͳΔϖΠϩʔυϑΥʔ Ϛοτ͕͋Δɻ -
Forge UI Flexibility you control UI KitͱCustom UI ͷؒͰɺॊೈੑ ͱ͍͢͞ͷͲͪΒ͔Λબ
Native rendering UI Kit ϑϩϯτΤϯυ ίϯϙʔ ωϯτΛϨϯμϦϯάɻগͳ͍ϝ ϯςφϯεͰɺωΠςΟϒͳମݧ ͕ಘΒΕ·͢ɻ Your UI, hosted by us ΧελϜ UI Λ༻͢Δͱɺϑϩ ϯτΤϯυ ϦιʔεΛϗετ͠ ͳ͕ΒɺҙͷϑϩϯτΤϯυ ϑϨʔϜϫʔΫΛ༻Ͱ͖·͢ɻ UI Kit Custom UI * Table, text, buttons, links * Dark mode for free * Complex UI components of my choice * Non-standard experience * Still fully hosted for me -
Forge Remote Whatever it takes ϓϥοτϑΥʔϜʹΓͳ͍Կ͔ ͕ඞཁ? ҆શʹ֎෦͔Βௐୡ Front-end to
remote ϑϩϯτΤϯυΛϦϞʔτʹ͠ ͯ࠷େΛ࣮ݱ Access APIs and Storage Remotely ֎෦αʔϏε Atlassian API ͱ Forge ετϨʔδʹ҆શʹΞΫη εͰ͖ɺಉ͡σʔλ ιʔεΛ ༻ͯ͠ Atlassian API ͷػೳΛ࠷େ ݶʹ׆༻ -
Agenda NOW DONE DONE Forge ͱ? ForgeԿΛͯ͘͠ΕΔςΫϊϩδʔͳͷ͔ Forge ͷίϯηϓτ Forge͕ͲͷΑ͏ʹஔ͞ΕΔͷ͔ɺͳͥͦ͏ͳͷ͔
Forge ͷϏϧσΟϯάϒϩοΫ ۩ମతʹͲΜͳػೳ͕ఏڙ͞ΕΔͷ͔ Forge Ͱͷ։ൃͷϙΠϯτ ։ൃ͢ΔͨΊʹඞ͓͖ͣͬͯ͘ϙΠϯτ DONE -
Screenshot media placeholder Simply drop your screenshot on to this
media placeholder Manifest File What ForgeΞϓϦͷఆٛΛ͢ΔYAML ϑΝΠϧ Contents ϞδϡʔϧɺϦιʔεɺݖݶͳͲ ΞϓϦͰඞཁͱͳΔ͞·͟·ͳ ใΛؚΉ -
Screenshot media placeholder Simply drop your screenshot on to this
media placeholder Modules What ForgeΞϓϦ͕ΞτϥγΞϯ ΛͲͷΑ͏ʹ֦ு͠ɺΓऔΓ ͢Δ͔ͷهड़ Contents ͯ͢ͷʹڞ௨͢ΔϞδϡʔ ϧͱɺݻ༗ͷϞδϡʔϧ͕ ͋Δ -
Jira-Specific Modules What Jira ΫϥυͰ༻͢ΔϞδϡʔ ϧɻ When to use it
৽͍͠ΧελϜϑΟʔϧυ՝ ύωϧɺ৽͍͠ϓϩδΣΫτϖʔ δͷՃͳͲɺJira ݻ༗ͷػೳΛ ֦ு͢ΔͨΊʹ༻͠·͢ɻ -
Jira-Specific Modules: Custom Field Type What ಠࣗͷΧελϜϑΟʔϧυλΠϓ Λ࡞Ͱ͖·͢ɻ When to
use it ϫʔΫϑϩʔΛվળ͢ΔͨΊʹ ৽͍͠ϑΟʔϧυ͕ඞཁ͕ͩɺط ͷΧελϜϑΟʔϧυλΠϓͰ ར༻Ͱ͖ͳ͍߹ɺ͜ͷϞδ ϡʔϧཱ͕ͪ·͢ɻ -
Jira-Specific Modules: Issue Panel What ՝ϏϡʔͷΞΫςΟϏςΟύω ϧͷ্ʹɺݟ͍͢৽͍͠ηΫ γϣϯ͕Ճ͞Ε·͢ɻ When to
use it ͜Εɺจࣈใ͓Αͼ/·ͨ ࢹ֮ใΛϢʔβʔʹදࣔ͢Δ ͨΊʹ༻Ͱ͖Δɻ -
Jira-Specific Modules: Project Settings Page What ϓϩδΣΫτઃఆͷαΠυόʔ ʹɺΫϦοΫ͢Δͱϖʔδ͕։ ߲͘ΛՃ͠·͢ɻ When
to use it ͜ΕɺՃͷΧελϜϓϩδΣ ΫτઃఆΛ֨ೲ͢ΔͨΊʹ༻ Ͱ͖·͢ɻ -
Common Modules: Function What ͜͜ͰΞϓϦͷಈ࡞͕ఆٛ͞ Εɺࢀর͞ΕΔɻ When to use it
΄ͱΜͲͷέʔεͰ༻͞ΕΔɻ ଞͷϞδϡʔϧಛఆͷಈ࡞Λ ཁٻ͢ΔͷͰɺ΄ͱΜͲͷ ߹ɺ͜ΕΒͷϞδϡʔϧͦΕ Βͷಈ࡞Λఆٛ͢ΔؔΛࢀর ͢Δɻ -
Common Modules: Triggers What ΠϕϯτɺΞϓϦϥΠϑαΠ ΫϧΠϕϯτɺ·ͨσʔληΩ ϡϦςΟϙϦγʔΠϕϯτ͕ൃੜ ͨ͠ͱ͖ʹؔΛݺͼग़͠·͢ɻ When to
use it ͜ͷϞδϡʔϧͷҰൠతͳ༻ ྫͷ1ͭɺಈ࡞ͷࣗಈԽͰ͢ɻ -
With Forge, you can focus more on building solutions and
less on managing infrastructure