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

明日から使いたくなる Gradle

Avatar for hideoku hideoku
June 02, 2016

明日から使いたくなる Gradle

2015年11月に社内の勉強会で Gradle を紹介するときに作った資料です。
サンプルコードは https://github.com/hideoku/GradleLabo にアップしています。

Avatar for hideoku

hideoku

June 02, 2016
Tweet

Other Decks in Programming

Transcript

  1. ΞδΣϯμ 1. Gradle ͱ͸ʁ 2. Gradle ͷجຊతͳ͜ͱ 3. Gradle Ͱศརͳ΋ͷΛ࡞Ζ͏

    4. ͜͜·ͰͰ͖Δ Gradle 5. ಋೖࣄྫͷ͝঺հ 6. ͕࣌ؒڐ͔͗͢Γখωλ 7. ͓ΘΓʹ
  2. Gradle ͱ͸ʁ • ࣗಈԽπʔϧʢϏϧυπʔϧʣ • JVMʢJavaʣ্Ͱಈ͘ • GroovyʢϓϩάϥϛϯάݴޠʣͷεΫϦϓτ • Ant

    ΍ Maven ͷ୅ΘΓʹ࢖͏͜ͱ͕Ͱ͖Δ
 
 5 最近になって、ロゴが変わりました。 ぐれいどる
  3. Groovy Θ͔Βͳ͍ͳΒ Java Ͱ • JavaϑΝΠϧʢ*.javaʣͷ֦ுࢠΛ *.groovy ʹม͑Ε͹
 ͦΕ͸Γͬͺͳ Groovy

    Ͱ͢ɻ • Ұ෦ͷϨΞέʔεΛআ͍ͯɺJava ͷίʔυ͸ͦͷ·· Groovy Ͱ΋࢖༻Ͱ͖·͢ɻ • Java Ͱ໘౗ͳίʔσΟϯάΛΒ͘ʹ͢ΔͨΊͷϥΠϒϥ Ϧͩͱࢥͬͯେৎ෉Ͱ͢ɻʢผͷϓϩάϥϛϯάݴޠͱࢥ͏ඞཁͳ͠ʣ
  4. ຊՈαΠτ͔Β pickup • Realize Build Happiness
 (ϋοϐʔͳϏϧυΛ࣮ݱ͢Δ) • Gradle makes

    the impossible possible, 
 the possible easy, the easy elegant.
 (ෆՄೳΛՄೳʹɺՄೳΛ؆୯ʹɺ؆୯Λ্඼ʹ)
  5. Why Gradleʁ • Polygot Build • Tool Integrations • Robust

    Dependency Management • Powerful Yet Concise Logic • High Performance Builds • Build Reporting 15 http://gradle.org/whygradle-build-automation/ ͔ͬ͜Α͛͞ͳݴ༿Λ ແཧ͘ΓͳΒ΂ͨײ͡…
  6. Gradle ΛΠϯετʔϧ͢Δ • Java ΛΠϯετʔϧ͢Δ • ؀ڥม਺ʹ JAVA_HOME Λ௥Ճ͢Δɻ •

    %JAVA_HOME%¥bin ʹύεΛ௨͢ɻ • $ java -version • Gradle ΛΠϯετʔϧ͢Δ • ؀ڥม਺ʹ GRADLE_HOME Λ௥Ճ͢Δɻ • %GRADLE_HOME%¥bin ʹύεΛ௨͢ɻ • $ gradle -v 20 ← ͓ͦΒ͘ඞਢ͡Όͳ͍
  7. Gradle ͕Πϯετʔϧ͞Ε͔ͨ֬ೝ͢Δ • ίϚϯυϓϩϯϓτΛ։͍ͯɺҎԼͷίϚϯυΛ࣮ߦ͢Δ $ gradle -v ------------------------------------------------------------ Gradle 2.7

    ------------------------------------------------------------ Build time: 2015-09-14 07:26:16 UTC Build number: none Revision: c41505168da69fb0650f4e31c9e01b50ffc97893 Groovy: 2.3.10 Ant: Apache Ant(TM) version 1.9.3 compiled on December 23 2013 JVM: 1.8.0_05 (Oracle Corporation 25.5-b02) OS: Mac OS X 10.10.5 x86_64 ← όʔδϣϯ৘ใ͕දࣔ͞ΕΔ ← Gradle ͕ࢀর͍ͯ͠Δ Java ͷόʔδϣϯ
  8. ᶄʰϓϩάϥϛϯά Groovyʱ • Gradle ͸ Groovy ͷεΫϦϓ τͳͷͰɺඞܞͰ͢ɻ • Groovy

    ͕Ͱ͖Δ͜ͱ͕ͨ͘͞ Μ঺հ͞Ε͍ͯ·͢ɻ
 ʮJavaͰ΍ͬͯͨ͜ͱ͕͜Μ ͳʹ؆୯ʹͰ͖Δͷ͔ʁʂʯ • ʮٯҾ͖̋̋ʯΈ͍ͨʹϦϑΝ Ϩϯεͱͯ͠຤Ӭ͘࢖͑·͢ɻ 26
  9. ଞͷϏϧυπʔϧͱͷൺֱ 28 Ant Maven Gradle ఆٛํ๏ XML XML εΫϦϓτ ґଘؔ܎ͷղܾ

    Ͱ͖ͳ͍ Ͱ͖Δ Ͱ͖Δ Eclipse ͱͷ਌࿨ੑ ˕ ૊ΈࠐΈࡁΈ ̋ ϓϥάΠϯॆ࣮ ˚ ϓϥάΠϯඍົ ͓ྡͱͷ ͓෇͖߹͍ ɾɾɾ Ant ݺ΂Δ Ant Maven ݺ΂Δ • ޙൃͷ༏Ґੑ → طଘπʔϧͷ͍͍ͱ͜ΖΛऔΓࠐΜͰΔ • ఆٛํ๏͕ʮεΫϦϓτʯͱ͍͏ͷ͕ΩϞͰ͢ ৽͍͠
  10. εΫϦϓτϕʔεͷ͍͍ͱ͜Ζ • ෳࡶͳͱ͜Ζ͸ίʔσΟϯά͢Ε͹͍͍ɻ
 ਖ਼نͷ API Λ࢖͑Δͱ͔͍͍͚ͬ͜ͲɺΘ͔Βͳ͚Ε͹ ΨϦΨϦॻ͍ͯ΋େৎ෉ɻࣗ༝Ͱ͢ɻ
 ʢAnt ΍ Maven

    ͸ఆੴ΍ܕΛ஌Βͳ͍ͱઌʹਐΊͳ͍ʣ • Gradle ͸ GroovyɺGroovy ͸ Java ͷ֦ுɻ
 Java Ͱ࣮૷Ͱ͖ΔͳΒ Java ͰίʔσΟϯάͯ͠OKɻ
 Java ͷϊ΢ϋ΢ΛҠ২Մೳɻ
  11. ϑΝΠϧίϐʔᶃ Gradle ͬΆ͘ task copyByGradle(type: Copy) {
 from "org/original1.txt"
 into

    "dest"
 } • σϑΥϧτλεΫͷ Copy λεΫΛ࢖༻͢Δ • Gradle ͷจ๏Λ஌͍ͬͯΔͱɺෳࡶͳ੍ޚ΋Մೳ • ͨͩ͠ɺ͋Δఔ౓ͷ஌͕ࣝͳ͍ͱͭΒ͍ ←ίϐʔݩͷϑΝΠϧ ←ίϐʔઌͷσΟϨΫτϦ αϯϓϧɿ02_FileCopy ★関連するサンプルがある場合、スライドの右下に明示します→
  12. ϑΝΠϧίϐʔᶄ Groovy Ͱ՚ྷʹ task copyByGroovy << {
 new File("dest/original2.txt") <<

    new File("org/original2.txt").readBytes()
 } • Gradle ஌͕ࣝͳͯ͘΋ɺ͋Δఔ౓؆ུతʹॻ͚Δɻ • ৚݅෼ذ΍܁Γฦ͠ͳͲΛۦ࢖ͯ͠ɺෳࡶͳ͜ͱΛ͢Δ ৔߹͸ Groovy ओମͰॻ͍ͨํ͕͏·͍͘͘͜ͱ΋ɻ ↑ϑΝΠϧΛόΠτετϦʔϜʹͯ͠ γϑτԋࢉࢠͰॻ͖ࠐΈˢ αϯϓϧɿ02_FileCopy
  13. ϑΝΠϧίϐʔᶅ Java Ͱ΍Ήͳ͘ buildscript {
 repositories {
 mavenCentral()
 }
 dependencies

    {
 classpath 'commons-io:commons-io:2.4'
 }
 }
 
 import org.apache.commons.io.FileUtils
 
 task copyByJava << {
 FileUtils.copyFile(new File("org/original3.txt"), new File("dest/original3.txt"))
 } • ͱ͸͍͑ɺ๛෋ͳˍ׳Ε͍ͯΔ Java ϊ΢ϋ΢Λ׆༻Ͱ͖Δ
 ϔλʹ Gradle/Groovy റΓͰ΍ΔΑΓ΋ޮՌతͳ৔߹΋͋Γ ←commons-io Λґଘؔ܎ʹ௥Ճ ←import จ ↑ FileUtils#copyFile(ίϐʔઌ, ίϐʔݩ) αϯϓϧɿ02_FileCopy
  14. build.gradle ϑΝΠϧ • ೚ҙͷ৔ॴʹ build.gradle ͱ͍͏໊લͷϑΝΠϧΛ࡞ͬ ͍ͯͩ͘͞ɻ • Maven Ͱ͍͏

    pom.xml
 Ant Ͱ͍͏ build.xml • ͜ͷϑΝΠϧʹ͢΂ͯΛॻ͍͍͖ͯ·͢ɻ
 ʢ΋ͪΖΜϑΝΠϧ෼ׂ΋Ͱ͖·͢ʣ
  15. λεΫΛ࡞Δ • build.gradle ϑΝΠϧʹҎԼͷ3ߦΛॻ͍͍ͯͩ͘͞ɻ task firstTask << { println “Hello,

    Gradle.” } ※ println “Hello” ͸ System.out.println(“Hello”) ͱಉ͡ αϯϓϧɿ01_FirstTask ★関連するサンプルがある場合、スライドの右下に明示します→
  16. λεΫΛ࣮ߦ͢Δ • build.gradle ͕ଘࡏ͢ΔϑΥϧμͰίϚϯυϓϩϯϓτ Λ։͍ͯɺҎԼͷίϚϯυΛ࣮ߦ͠·͢ɻ • $ gradle <λεΫ໊> •

    $ gradle <λεΫ໊1> <λεΫ໊2> …
 ͱ͍͏ײ͡ʹෳ਺ͷλεΫΛ࿈ଓ࣮ͯ͠ߦͰ͖Δ $ gradle firstTask :firstTask Hello, Gradle. ← firstTask λεΫΛ࣮ߦ։࢝͢Δ߹ਤ ← λεΫ಺Ͱඪ४ग़ྗͨ͠
  17. ʮ << ʯ ←͜Εॏཁ • ͜ͷ̎ͭͷλεΫ͸ࣅͯඇͳΔ΋ͷɻ • ͜ͷέʔεͰ͸ɺޙऀͷॻ͖ํ͸ؒҧ͍ʹͳΔɻ task print1

    << { println “test 1” } task print2 { println “test 2” } ◯ ❌ leftShift αϯϓϧɿ03_LeftShift
  18. λεΫ࣮ߦͯ͠ΈΔͱ… • print2 λεΫͷͳ͔Ͱॻ͍ͨʮprintln “test 2”ʯ͕
 λεΫ࣮ߦͱ͸ؔ܎ͳ࣮͘ߦ͞Ε͍ͯΔ $ gradle print1

    test 2 :print1 test 1 task print1 << { println “test 1” } task print2 { println “test 2” } $ gradle print2 test 2 :print2 αϯϓϧɿ03_LeftShift
  19. task copyByGradle(type: Copy) {
 from "org/original1.txt"
 into "dest"
 } ʮ<<ʯ༗ແͷ൑அج४

    • << ͋ΓɿλεΫͰ࣮ߦ͍ͨ͠ॲཧΛ࣮૷͢Δ • << ͳ͠ɿλεΫʢ૊ΈࠐΈλεΫʣͷఆٛ΍
 ɹɹɹɹ ύϥϝʔλΛηοτ͢Δ ←ίϐʔݩͷϑΝΠϧΛҾ਺ͬΆ͘ࢦఆ ←ίϐʔઌͷσΟϨΫτϦΛҾ਺ͬΆ͘ࢦఆ ʮ<<ʯ͕ͳ͍ύλʔϯ
  20. ࣮༻తͳͻͳܕ΋͋Γ·͢ Java ϓϩδΣΫτͷͻͳܕ͕Ͱ͖͕͋Γ·͢ɻ
 
 ଞʹ΋ଟ਺ͷͻͳܕ͕͋Γ·͢ͱ͍͍͍ͨͱ͜ΖͰ͕͢ɺ
 ͦΜͳʹ͋Γ·ͤΜɻ
 ࣗ෼Ͱθϩ͔Β࡞ͬͨํ͕͍͍͔΋ɻษڧʹͳΔ͠ɻ $ gradle init

    -- type java-library :wrapper :init BUILD SUCCESSFUL ↑ΦϓγϣϯͰͻͳܕͷύλʔϯΛࢦఆ͢Δ αϯϓϧɿ06_GradleInit src/main/java, src/test/java, src/main/resources といったディレクトリの構成にはルールがあります
 「Mavenディレクトリ構成」で検索してみてください。もちろんルールをカスタマイズできます
  21. ͔ͤͬ͘ͳͷͰɺJava ͷϏϧυ΍ͬͯΈΔ • ͖͞΄Ͳͷ Java ͻͳܕΛ࢖͍·͢ • Java ϓϩμΫτίʔυʢLibrary.javaʣ •

    Java ςετίʔυʢLibraryTest.javaʣ • Java ͷίϯύΠϧɺςετίʔυͷ࣮ߦɺjar ϑΝΠϧ Λ࡞੒͢Δ…ͱ͍ͬͨ͜ͱ͕Ͱ͖ͦ͏ͳ༧ײ αϯϓϧɿ06_GradleInit
  22. Java ΛϏϧυ͢Δ $ gradle build :compileJava :processResources :classes :jar :assemble

    :compileTestJava :processTestResources :testClasses :test :check :build BUILD SUCCESSFUL ←͜ͷลͰ Java ίʔυΛίϯύΠϧ͍ͯ͠Δ ←Jar ϑΝΠϧΛ࡞͍ͬͯΔ ←ςετίʔυͰςετ͍ͯ͠Δ ←ιʔείʔυ΍͜͜·Ͱͷ੒Ռ෺ͷݕূΛ͍ͯ͠Δ
  23. Java Λ࢖͏ͨΊͷ build.grade • ೉͍͠࿩ʹͳΔͷͰɺͪΐͬͱ͚ͩղઆ͠·͢ apply plugin: 'java'
 
 repositories

    {
 jcenter()
 }
 
 dependencies {
 compile 'org.slf4j:slf4j-api:1.7.12'
 
 testCompile 'junit:junit:4.12'
 } ← pointᶃ Java ϓϥάΠϯͷ࢖༻ ← pointᶄ ϦϙδτϦͷࢦఆ ← pointᶅ ґଘؔ܎ͷ௥Ճ αϯϓϧɿ06_GradleInit
  24. ᶃ Java ϓϥάΠϯͷ௥Ճ • apply plugin: ‘<ϓϥάΠϯID>’
 ͰɺϓϥάΠϯΛ௥ՃͰ͖·͢ɻෳ਺௥Ճ΋ͪΖΜՄɻ • ͦͷଞͷϓϥάΠϯʢͨ͘͞Μ͋Γ·͢ʣ

    • ‘war’ɹɹɹɹ ɿJava EE ΛϏϧυ͢ΔɻWar ϑΝΠϧΛ࡞Δ • ‘checkstyle’ɹɿJava ίʔυղੳ CheckStyle Λ࣮ߦ͢Δ • ‘eclipse’ɹɹ ɿEclipse ϓϩδΣΫτԽͤ͞Δ apply plugin: 'java'
  25. ᶃ Java ϓϥάΠϯͷ௥Ճ • ϓϥάΠϯΛ௥Ճ͢Δͱɺ࣮ߦͰ͖ΔλεΫ͕૿͑Δ
 
 • Java ϓϥάΠϯͷ৔߹ɺҎԼͷΑ͏ͳλεΫ͕૿͑Δ compileJava

    Java ϓϩμΫτίʔυΛίϯύΠϧ͢Δ test Java ςετίʔυͰ JUnit ςετΛ࣮ߦ͢Δ jar Java ϓϩμΫτίʔυ͔Β jar ϑΝΠϧΛ࡞Δ build jar ϑΝΠϧΛ࡞ΔɺςετΛ࣮ߦ͢Δ $ gradle tasks ←࣮ߦՄೳͳλεΫͷҰཡΛ֬ೝͰ͖Δ
  26. λεΫ͸ଞͷλεΫʹґଘ͢Δ৔߹΋ $ gradle build :compileJava :processResources :classes :jar :assemble :compileTestJava

    :processTestResources :testClasses :test :check :build ←build λεΫ͚͕࣮ͩߦ͞Ε͍ͯΔΘ͚Ͱ͸ͳ͍ ɹbuild λεΫ͕ґଘ͢ΔλεΫ΋ ɹ͍΋ͮΔࣜʹ࣮ߦ͞ΕΔ
  27. ᶄ ϦϙδτϦͷࢦఆ • ҎԼͷͲͪΒ͔Λࢦఆͯ͠΋ΒͬͨΒ͍͍Ͱ͢ɻ repositories {
 jcenter()
 } repositories {


    mavenCentral()
 } ← jar ϑΝΠϧΛ http://repo1.maven.org/maven2 ɹ͔Βऔͬͯ͘Δ ← jar ϑΝΠϧΛ http://jcenter.bintray.com ɹ͔Βऔͬͯ͘Δ
  28. ґଘؔ܎ͷॻ͖ํ ↑͸୹ॖܗͷॻ͖ํɹɹɹɹɹɹɹ୹ॖ͠ͳ͍ॻ͖ํ↓ dependencies { 
 compile 'org.slf4j:slf4j-api:1.7.12'
 
 } ίϯϑΟάϨʔγϣϯ

    άϧʔϓID ΞʔςΟϑΝΫτID όʔδϣϯ dependencies {
 compile group: ‘org.slf4j’, name: ‘slf4j-api’, version: ’1.7.12’
 }
  29. ίϯϑΟάϨʔγϣϯʁ • Java ϓϥάΠϯͷ৔߹ɺҎԼͷΑ͏ͳίϯϑΟάϨʔγϣϯʢͲ͜Ͱͦͷ jar ͕ඞཁͱ͞ΕΔ͔ʣ͕͋Δ compile ϓϩμΫτίʔυͷίϯύΠϧʹ࢖͏ testCompile ςετίʔυͷίϯύΠϧʹ࢖͏

    runtime ϓϩμΫτίʔυͷΫϥεͷ࣮ߦʹ࢖͏ testRuntime ςετίʔυͷΫϥεͷ࣮ߦʹ࢖͏ compile 'org.slf4j:slf4j-api:1.7.12' testRuntime compile runtime testCompile use use use use • ςετͰ͔͠࢖Θͳ͍ jar ͸ testCompile ʹࢦఆ͢Δ
 ʢͨͱ͑͹ɺJUnitʣ
  30. ͓͜ͱΘΓ m(_ _)m • ϏϧυπʔϧͷԦಓ͸ɺJava ͳͲͷιʔείʔυΛϏϧ υɺσϓϩΠ͢Δ͜ͱɻͦΕΛࣗಈԽ͢Δ͜ͱɻ • ϏϧυɿίϯύΠϧ͢Δɺςετ͢ΔɺWarΛ࡞Δ etc

    • σϓϩΠɿϏϧυ੒Ռ෺ΛWeb/Appαʔόʹ൓ө͢Δ • ࠓ೔͸͋͑ͯɺͦ͜ʹ͸͋·Γ৮Ε·ͤΜɻ
 Gradle ͸ ”ࣗಈԽπʔϧ”ɻ·ͣͦ͜Λ࣮ײ͍ͩ͘͞ɻ 64
  31. ͳͥ Excel ϚΫϩͳͷ͔ʁ • ΠϯϓοτͱͳΔ΋ͷ͕ɺExcel ϑΝΠϧͳ͜ͱ͕ଟ͍ • Excel ͸ɺ΋ͱ΋ͱศརͩɻίϐϖ͠΍͍͢ •

    ʮϚΫϩͷه࿥ʯ͕࠷ڧ͗͢Δ • Excel ϚΫϩ͸ Excel ϑΝΠϧʹؚ·ΕΔ
 ʢExcel͸ϓϩάϥϜίʔυͱ࣮ߦϑΝΠϧ͕ҰମԽ͍ͯ͠Δʣ • πʔϧͷGUI΋Excelγʔτ্ͰදݱͰ͖Δ 66
  32. Groovy ͔ͩΒϥΫʹͰ͖Δ͜ͱ • Gradle ͸ Groovy ͷεΫϦϓτΛ֦ுͨ͠΋ͷɻϏϧυ πʔϧͱ͸͍͑ɺϓϩάϥϛϯά͕Ͱ͖ΔΑ͏ͳ΋ͷɻ • Groovy

    ͸ศརͳ API ͕๛෋ͳͷͰɺੵۃతʹ࢖͓͏ɻ • ϑΝΠϧೖग़ྗ • HTTP ϦΫΤετૹ৴ • SQL ࣮ߦ • XML / JSON ͱͷೖग़ྗ 69
  33. CI ͱͷ࿈ܞ • ϏϧυπʔϧͰ৭ʑͳ͜ͱʢϏϧυɾςετͳͲʣΛࣗ ಈԽ͍ͯ͘͠ͱɺܧଓతΠϯςάϨʔγϣϯʢCIʣʹͭ ͳ͕͍ͬͯ͘ɻ • Gradle ͸ CI

    αʔόͷ୅ද֨ Jenkins Ͱ؆୯ʹಈ͔ͤΔ
 ʢগͳ͘ͱ΋ Maven ͱಉ͘͡Β͍ͷ༰қ͞ʣ • Jenkins Ͱ Excel ϚΫϩ͸ͦ͏؆୯ʹ͸ಈ͔ͤͳ͍Αɻ 70
  34. ᶃ Excel ಡΈࠐΈˠϑΝΠϧग़ྗ • Apache POI Λ࢖͑͹ɺExcel Λೖग़ྗͰ͖Δ
 ʢ͓ͦΒ͘ Excel

    ϚΫϩΑΓ΋؆୯ʹಡΈࠐΈͰ͖Δʣ • Excel ઃܭॻ͔ΒͷϑΝΠϧੜ੒ɹˠίʔυࣗಈੜ੒ʂ αϯϓϧɿ11_ExcelOperation
  35. ʢԠ༻ྫʣ Jenkins × Gradle × SVN 1. ఆظతʹSVN্ͷઃܭॻϑΝΠϧߋ৽ΛνΣοΫ͢Δ
 ʢJenkins Λ࢖͑͹؆୯ʹͰ͖ΔΑʣ

    2. ߋ৽͕͋ͬͨΒ࠷৽औಘͯ͠ɺGradle λεΫΛ࣮ߦ 3. ߋ৽͞ΕͨઃܭॻϑΝΠϧΛΠϯϓοτʹɺ
 Gradle λεΫͰιʔείʔυϑΝΠϧΛੜ੒͢Δ 4. ੜ੒ͨ͠ιʔείʔυϑΝΠϧΛSVNʹίϛοτ͢Δ
  36. ᶄ Redmine ͔Β৘ใΛநग़͢Δ • Redmine ʹ͸ʮREST APIʯͱ͍͏ػೳ͕͋Δ
 ࣮͸৭ʑͳ৘ใΛҾͬுͬͯ͜ΕΔ
 http://www.redmine.org/projects/redmine/wiki/Rest_api •

    Groovy ͸ HTTP ϦΫΤετΛૹΔͷ͕ͱͯ΋؆୯ • JSON΍XMLͰϨεϙϯε͕ฦͬͯ͘Δ͚Ͳɺ
 Groovy ͳΒ༨༟ͰղੳՄೳɹυϠο!!
  37. Redemine REST API Λ༗ޮʹ͢Δ • [؅ཧ] > [ઃఆ] > [ೝূ]

    λϒ
 [RESTʹΑΔWebαʔϏεΛ༗ޮʹ͢Δ] ʹνΣοΫ Redmine؅ཧऀͰͳ͍ͱ ͜ͷઃఆ͸Ͱ͖·ͤΜ
  38. Groovy Ͱ HTTP ϦΫΤετ • ͜Ε͚ͩͰ HTTP ϦΫΤετʢGETʣΛඈ͹ͤ·͢ɻ
 ฦΓ஋ʹϨεϙϯεΛจࣈྻͰड͚औΕ·͢ɻ •

    REST Ͱ৘ใΛऔಘ͢ΔΑ͏ͳ৔߹͸͜ΕͰे෼ͩͬͨΓ new URL(“ΞΫηε͢ΔURLจࣈྻ”).text new URL(“ΞΫηε͢ΔURLจࣈྻ”).getText(“UTF-8”) ↑Ϩεϙϯεͷจࣈίʔυࢦఆ͢Δ৔߹
  39. Remine REST API ΋؆୯ʹ • ͋ͱ͸ɺϨεϙϯεͱͯ͠ฦͬͯ ͖ͨ JSON ͷղੳ String

    apiKey = “720af9fb9107dffce2cb9ba3eaf25132fcdbd980” String requestUrl = “http://192.168.56.2/issues.json?key=${apiKey}” String jsonstr = new URL(requestUrl).text println jsonstr Groovy͸ʮ$ม਺໊ʯͰม਺ͷ஋ΛจࣈྻʹૠೖͰ͖Δ [issues:[[assigned_to:[id:5, name:taro], author:[id:5, name:taro], created_on:2015-11-19T16:00:15Z, description:αϯϓϧίʔυͰཧղ ͠΍͘͢͢Δɻ, done_ratio:0, due_date:2015-11-19, id:4, priority:[id:2, name:௨ৗ], project:[id:1, name:ςετϓϩδΣΫτ], start_date: 2015-11-18, status:[id:1, name:৽ن], story_points:null, subject:Gradle ͷαϯϓϧίʔυΛ࡞Δ, tracker:[id:2, name:ػೳ], updated_on: 2015-11-19T16:00:15Z], [assigned_to:[id:5, name:taro], author:[id:5, name:taro], created_on:2015-11-19T15:59:31Z, description:Θ͔Γ΍͢ ͍ࢿྉΛ࡞Γ͍ͨɻਤղ΋͍ΕΑ͏ɻ, done_ratio:20, due_date: 2015-11-20, id:3, priority:[id:3, name:ߴΊ], project:[id:1, name:ςετ ϓϩδΣΫτ], start_date:2015-11-15, status:[id:2, name:ਐߦத], story_points:null, subject:ษڧձͷࢿྉΛ࡞Δ, tracker:[id:2, name:ػ ೳ], updated_on:2015-11-19T15:59:31Z]], limit:25, offset:0, total_count:2] αϯϓϧɿ13_RedmineApi
  40. Groovy Ͱ JSON ΋؆୯ʹ͔͋ͭ͏ • groovy.json.JsonSlurper Ϋϥε
 ɹɹJSONܗࣜͷจࣈྻΛଟ֊૚ͷMapʹΦϒδΣΫτม׵ • groovy.json.JsonBuilder

    Ϋϥε
 ɹɹJSONܗࣜͰ஋Λอ͍࣋ͯ͠ΔΦϒδΣΫτΛจࣈྻʹม׵ def jsonRoot =new groovy.json.JsonSlurper().parseText(jsonstr) jsonRoot.issues.each { issue -> println "#${issue.id}:${issue.subject}(${issue.assigned_to.name})" } #4:Gradle ͷαϯϓϧίʔυΛ࡞Δ(taro) #3:ษڧձͷࢿྉΛ࡞Δ(taro) αϯϓϧɿ13_RedmineApi
  41. Groovy Ͱ JSON ΋؆୯ʹ͔͋ͭ͏ • groovy.json.JsonSlurper Ϋϥε
 ɹɹJSONܗࣜͷจࣈྻΛଟ֊૚ͷMapʹΦϒδΣΫτม׵ • groovy.json.JsonBuilder

    Ϋϥε
 ɹɹJSONܗࣜͰ஋Λอ͍࣋ͯ͠ΔΦϒδΣΫτΛจࣈྻʹม׵ def jsonRoot =new groovy.json.JsonSlurper().parseText(jsonstr) println root root.issues.each { issue -> println '#' + issue.id + ':' + issue.subject + '(' + issue.assigned_to.name + ')' } αϯϓϧɿ13_RedmineApi
  42. REST API ͸਎ۙʹ͋Δ͔΋ • Ϋϥ΢υɺαʔϏεͱ͔ݴͬͯΔ΋ͷ͸ API ͕ఏڙ͞Ε ͍ͯΔ͜ͱ͕ଟ͍ɻ • Jenkins

    ΋ API ͋ΔΑɻ • ෳࡶͳϦΫΤετΛ౤͍͛ͨ৔߹͸ URL ΫϥεͰ͸ྗ ෆ଍Ͱ͢ɻApache HttpComponents Λ࢖͏ͱ͔ɻ
  43. ᶅ DB ΞΫηεͯ͠ΈΔ • Groovy ͸؆୯ʹ SQL ΛൃߦͰ͖Δɻ • JDBCυϥΠόʔΛґଘؔ܎ʹ௥Ճ͢Δͱ͜Ζɺ஫ҙɻ

    • SQL ൃߦ͢ΔͨΊͷΠϯϓοτ৘ใ͸
 CSV ͳΓɺExcel ͳΓಡΈࠐΜͰऔಘ͠·͠ΐ͏ɻ αϯϓϧɿ14_SQL 詳しい解説はサンプルコードにて→
  44. Groovy ͰͷDBΞΫηε • groovy.sql.Sql ΫϥεΛ࢖༻͢Δ
 ࠷ॳʹDBίωΫγϣϯΛऔಘͨ͠ΠϯελϯεΛܦ༝ͯ͠
 SQLจΛൃߦ͢Δ͜ͱ͕Ͱ͖Δ def sql =

    Sql.newInstance("jdbc:h2:mem:", “org.h2.Driver") String selectSql = "SELECT E.EMP_NO, E.EMP_NAME, D.DEPT_NAME FROM EMP E, DEPT D WHERE E.DEPT_NO = D.DEPT_NO" sql.eachRow(selectSql) { row ->
 println “${row.emp_no} : ${row.emp_name} ( ${row.dept_name} )"
 } ←eachRow ͸SELECT݁ՌΛ̍ߦͣͭॲཧ͢Δϝιου DB઀ଓจࣈྻ JDBCυϥΠόʔΫϥε ※SELECT だけでなく、INSERTなども当然できます。DDL(CREATE TABLEなど)もできます。
  45. ಋೖࣄྫͰͷޮՌ • ҆ఆతͳϏϧυɾσϓϩΠͷ࣮ݱʢऴ൫͸௒ॏཁʣ • ʮͩΕͰ΋ϫϯΫϦοΫͰ̋̋Ͱ͖Δʯ͜ͱͰɺ
 ແବͳ଴ػ΍࢒ۀ͔Βղ์͞ΕΔɻʢ͜Ε΋௒ॏཁʣ • Jenkins ͷೝ஌౓UP →

    কདྷతͳ ALM ΁ͷ଍͕͔Γ
 ʢͨͩ͠ɺͳʹΛ΍Δ΋ͷ͔͸ਖ਼֬ʹ೺Ѳ͍ͯ͠ͳ͍ʣ
 ʢJenkins ͷཪͰ Gradle ͸ಈ͘ͷͰɺGradle ͸·ͬͨ͘ೝ஌͞Εͣʣ
  46. ಋೖࣄྫͷࣦഊ͔ΒֶͿ͜ͱ • Maven ͷ XML ஍ࠈΑΓ؆ܿͱ͸͍͑ɺ੒௕͖ͬͨ͠ Gradle ͷεΫϦϓτ΋ॳ৺ऀ͔ΒݟΕ͹…׬શͳຐ๏ɻ
 
 ˠ

    ং൫ઓ͔ΒϝϯςͰ͖ΔਓΛ૿΍͍ͯ͘͠౒ྗ • ຐ๏͗ͯ͢ɺڋ൱൓ԠΛࣔ͞ΕΔɻ
 ͔ͤͬࣗ͘ಈԽͨ͠ͷʹݩʹ໭͢ʗखͰ΍ΔํʹୀԽ
 
 ˠ ΍͍ͬͯΔ͜ͱͷઆ໌΍ݟ͑ΔԽΛ
  47. σʔϞϯىಈͰ speed up • Gradle ͷϓϩηεΛৗற͓ͤͯ͘͜͞ͱͰɺ2ճ໨Ҏ߱ ͷ Gradle ࣮ߦΛ଎͘͢Δɻ݁ߏ଎͘ͳΔ •

    ํ๏ᶃ
 gradle --daemon <λεΫ໊> • ํ๏ᶄ
 <ϢʔβϗʔϜσΟϨΫτϦ>¥.gradle¥gradle.properties
 ʹ1ߦ௥Ճ͢Δʮorg.gradle.daemon=trueʯ
  48. Gradle Wrapper • Gradle ΛΠϯετʔϧ͍ͯ͠ͳ͍؀ڥͰ΋ Gradle Λ࣮ ߦͰ͖ΔΑ͏ʹͰ͖Δ • ϏϧυεΫϦϓτΛ഑෍͢ΔͷʹϐολϦͳػೳ

    • ͱ͸͍͑ɺϓϩΩγઃఆ͕… • Default Task ͱ૊Έ߹ΘͤΔͱɺgradlew Λୟ͚ͩ͘ • Gradle Wrapper × JavaFX Ͱ Excel ϚΫϩΛ௒͑ΒΕΔ͔΋…
  49. IntelliJ IDEA Ͱ Gradle • Gradle ΍ Groovy ޲͚ͷ Eclipse

    ϓϥάΠϯ͸͍ͩͿॆ ࣮͖͕ͯͨ͠ɺ·ͩ·ͩ࢖͍ͮΒ͍ • IntelliJ IDEAʢhttps://www.jetbrains.com/idea/ʣ͸
 σϑΥϧτͰɺGradle, Groovy Λαϙʔτ͍ͯ͠Δ • Ultimate Editionʢ༗ঈʣͰͳ͘ͱ΋ɺ
 Community EditionʢແঈʣͰ Gradle ࢖͑Δ あいであ
  50. ͓఻͍͑ͨ͜͠ͱ • Ϗϧυπʔϧ͸औֻ͔ͬΓ͕ͳͯ͘ɺͳʹ͔ΒखΛ෇͚ͯ ͍͍ͷ͔෼͔Βͳ͍͜ͱ͕ଟ͍Ͱ͢ɻ • Gradle ͸͜Μͳ͜ͱ͕Ͱ͖Δͷͩͱ͍͏঺հͱ߹Θͤ ͯɺऔֻ͔ͬΓͱͳΔαϯϓϧΛ͓౉͠Ͱ͖ͨ͸ͣͰ͢ɻ • Jenkins

    ͱ Gradle Λ૊Έ߹ΘͤΕ͹ɺ։ൃϓϩδΣΫτ ʹ·ͭΘΔࡶ༻ʢଟ͘ͷ৔߹ɺͱͯ΋ॏཁͳࡶ༻ʣΛࣗಈԽͯ͠ɺ ௿ίετͰ҆ఆͯ͠։ൃΛճ͢͜ͱ͕Ͱ͖·͢ɻ
 ͦͯ͠ɺࡶ༻͔Βղ์͞Ε·͢ɻ