![](https://habrastorage.org/files/98d/3bb/3ae/98d3bb3aef904d32bae88c5ac4af611a.jpg)
åœé女æ§ã®æ¥ã®ããã«GitHubããŒãžã§ãµã€ããæŽæ°ããããã«å¥³ã®åã«æããã®ã¯çŸå®çã ãšæããŸããïŒïŒ Githubã§å©çšã§ããJava + FreeMarkerã§æžããããµã€ããžã§ãã¬ãŒã¿ãŒã®å©ããåããŠã©ã®ããã«ãããè¡ã£ããã説æããgitãªããžããªå ã®ã³ã³ãã³ãã®å ¬éãèªååããããšããŸããã
å æ¥ãç§ã¯èªåã®ãµã€ãã®ã€ã³ããªã¢ã§ããã¹ã¿ã€ã«ãã¶ã€ããŒã®å€¢ãå®çŸããã®ãæäŒããŸããã 圌女èªèº«ã¯ãWixã®ãã¶ã€ããŒã䜿çšããŠã¬ã€ã¢ãŠããäœæããããšããŸããã ããããæåã®wicksãµã€ãã¯ãŽããŽããšåºãŠããŠãæºåž¯é»è©±ã§ã¯æ£åžžã«è¡šç€ºãããŸããã§ãããããã«ãç¹å®ã®ãã¹ãã£ã³ã°ã«æ¥ç¶ããªãæ¹ãè¯ãã§ãããã
HTMLã§æåŸã«èªåã§äœã£ãã®ã¯ã倧åŠã§å匷ããŠãããšãã«ã¢ãŒãã£ã¹ãã®ãŠã§ããµã€ãã§ããããã®åŸãããŒãã«ã¬ã€ã¢ãŠããæµè¡ããŸããã ãŠã§ãéçºã¯ç§ã®ãã³ã§ã¯ãããŸããã ãããŠä»ãã©ãã«ã§ãã¢ãã€ã«ãã©ãŠã¶ãšãããã¯ã¬ã€ã¢ãŠãããããŸãã è¥ã女æ§ã¯åçŽãªååºãµã€ããäœãããã£ãã®ã§ããµãŒããŒäžã®ã¹ã¯ãªããã¯å¿ èŠãããŸããã åæã«ãHTMLã®ç¥èããªããç§ã®å©ããªãã§ããã®WebãªãœãŒã¹ã®åçãæŽæ°ããã»ã¯ã·ã§ã³ãç·šéããããšãçæ³çã§ãã
CMS-ã³ã³ãã³ã管çã·ã¹ãã ãã€ã³ã¹ããŒã«ãããšãWebãµã€ãã®ãã¹ãã£ã³ã°ãããé«äŸ¡ã«ãªããæ§æããã³ãã¬ãŒããããã³ã»ãã¥ãªãã£ã«æéãè²»ããå¿ èŠããããŸãã éçãªãµã€ãã«ã¯è€éãããŸãã ããã¯ãã¹ãŠããã³ãã¬ãŒããããµã€ããçæããã¿ã¹ã¯ã«éåžžã«äŒŒãŠããããã«æããŸããã æè¿ãåºåã®ãªããµã€ãã®ãã¹ãã£ã³ã°ã®å Žæãç¥ããŸããã§ããã å人ã«å°ãããªãã·ã§ã³ãèŠãŠããããã¯ãŒã¯äžã®ã¡ã¢ãèªãã åŸãGitHubããŒãžãçæ³çãªãªãã·ã§ã³ã§ãããšããçµè«ã«éããŸããã ç¡æã§ããŒãžã§ã³ç®¡çããããµã€ãã§ã®ãã¡ã€ã³åã®äœ¿çšããµããŒãããŠããŸãã
jekyllãã³ãã¬ãŒããšã³ãžã³ã¯GitHub Pagesã«æé©ã§ãããã³ã³ãã¥ãŒã¿ãŒã§Rubyãã¶ã€ããŒãšjekyll gemãæ§æããŠèšå®ããæéã¯ãããŸããã§ããã jekyllã䜿çšããŠãGitHubã®ãããžã§ã¯ãçšã®ãµã€ããå¿ èŠã«ãªãã®ã§ãå¥ã®æ©äŒã«éã³ãŸãã
ãžã£ãã¹ã¿ã«ãšã£ãŠããã³ãã¬ãŒããšã®é¢é£ä»ãã¯ãå€ãã®äººã«ãšã£ãŠäœ¿ãæ £ãããã³ãã¬ãŒããšã³ãžã³ã§ããFreeMarkerã§ãã Javaãç§ã®éåžžã®äœæ¥ããŒã«ã§ããããšãèæ ®ããŠãWebãµã€ããšãžã§ãã¬ãŒã¿ãŒãè¿ éã«éçºããå¿ èŠããããŸããã FreeMarkerãšVelocityãæ¯èŒãããšãåè ã¯ãŸã çããŠãããããæ©èœçã«èŠããŸãã
GitHubã§ãã¶ã€ããŒã®ã¢ã«ãŠã³ããäœæããããšããå§ããŸããã
![](https://habrastorage.org/files/024/ee9/766/024ee97662bd4b73bd51ec1531e83950.png)
次ã«ãèšèšãšã¬ã€ã¢ãŠãã«åãæ¿ããŸããã ããŒãã¹ãã©ããã«ã«ãŒã»ã«ã¯ãWebããŒãžã®ã¡ã€ã³ã³ã³ãã³ããããŒããã©ãªãªã®åçã§ãããããŒãžãã¢ãã€ã«ããã€ã¹ã§è¡šç€ºããããããç»åã衚瀺ããããã®åªãããœãªã¥ãŒã·ã§ã³ã§ãããšæãããŸããã
BootstrapããŒãžã«æ¥ç¶ãããšãPanelèŠçŽ ãšããã²ãŒã·ã§ã³/é£çµ¡å ã®ã¢ã€ã³ã³ã圹ç«ã¡ãŸãã ç§ã«ãšã£ãŠãã¬ã€ã¢ãŠãã¯ãµã€ããäœæããäžã§æãéå±ãªã¹ãããã§ããã è€éãã®2çªç®ã«ãã£ãã®ã¯ãäœåã®ããŒããã©ãªãªã®å€æ°ã®åçã®ãµã€ãºå€æŽãã«ã©ãŒã°ã¬ãŒãã£ã³ã°ãããã³ããªãã³ã°ã§ããã
次ã®ã¹ãããã¯ãã¬ã€ã¢ãŠãããžã§ãã¬ãŒã¿ãŒãã³ãã¬ãŒãã«å€ããããšã§ãã FreeMarkerãã³ãã¬ãŒãã§ã¯ããªããžã§ã¯ãã®ã³ã¬ã¯ã·ã§ã³ã«å¯Ÿããå埩ã¯ããã£ã¬ã¯ãã£ã<#list product as prodItem> ... </ïŒlist>ã䜿çšããŠå®è¡ãããæ¡ä»¶ã¯<#if prodItemïŒIs_first> ... </ïŒif>ã䜿çšããŠå®è¡ãããŸãã ãããã¯ããããã®ãžã§ãã¬ãŒã¿ãŒãã³ãã¬ãŒãã§äœ¿çšããããã¹ãŠã§ãã
ããŒã¿ã¹ãã¬ãŒãžã®ããŒã¿åœ¢åŒã®åºç€ãšããŠXMLããŒã¯ã¢ãããéžæããŸããã ã¬ã€ã¢ãŠãã«åºã¥ããŠãããã«æ§é ã決å®ããŸããã
<site> <text>.......</text> <product id="drapery" background-img="drapery.jpg" title-img="drapery-main.jpg"> <title>, </title> <description> ...</description> <image img="drapery/1.jpg"/> ... <image img="drapery/37.jpg"/> </product> ... <product .../> </site>
IntelliJ Idea Community Editionã®XMLãã¡ã€ã«ããXSDã¹ããŒããçæããŸããã
![](https://habrastorage.org/files/59a/8c7/24c/59a8c724ce5d4071ab65446a3eb50777.png)
ãã³ãã¬ãŒãã§äœ¿çšããJAXBã¢ãããŒã·ã§ã³ãæã€ã¯ã©ã¹ã¯ãjaxb2-maven-pluginã䜿çšããŠMavenããåçã«çæãããŸãã ãããžã§ã¯ãããã«ããããšããããã®ã¯ã©ã¹ã¯target / generated-sources / jaxbãã£ã¬ã¯ããªã«é 眮ãããŸãã
ç¹å®ã®ã«ããŽãªã®ãã¹ãŠã®ããŒããã©ãªãªç»åã衚瀺ããããã®FreeMarkerãã³ãã¬ãŒãã®ãã©ã°ã¡ã³ãã®äŸïŒ
<#list image as imageInfo> <div class="item<#if imageInfo?is_first> active</#if>"> <img src="img/${imageInfo.img}" class="img-responsive center-block"> <div class="carousel-caption"> <#if imageInfo.title??> <h3>${imageInfo.title}</h3> <p></p> </#if> </div> </div> </#list>
次ã«ãããŒãžã®çæã«åºã¥ããããŒã¿ã®äŸã瀺ããŸãã
<product id="pillow" background-img="pillow.jpg" title-img="pillow-main.jpg"> <title>, </title> <shortDescription> , , </shortDescription> <description> - , , . , , , .</description> <image img="pillow/1.jpg"/> <image img="pillow/2.jpg"/> <image img="pillow/3.jpg"/> <image img="pillow/4.jpg"/> <image img="pillow/5.jpg"/> <image img="pillow/6.jpg"/> <image img="pillow/7.jpg"/> <image img="pillow/8.jpg"/> <image img="pillow/9.jpg"/> <image img="pillow/10.jpg"/> <image img="pillow/11.jpg"/> <image img="pillow/12.jpg"/> <image img="pillow/13.jpg"/> <image img="pillow/14.jpg"/> </product>
Index.htmlã¯ã ãã³ãã¬ãŒãã䜿çšããŠã site.xmlã«ãªã¹ããããŠãããã¹ãŠã®<product ...>ã¿ã°ã«åºã¥ããŠç®æ¬¡ãçæããŸãã
ãã³ãã¬ãŒãã®ãæ¥çå€ããšããŠãã¡ã€ã³äœæ¥ã¯javaã¯ã©ã¹src / main / java / Site.javaããã³maven ãã«ãã¹ã¯ãªããã«ãã£ãŠå®è¡ãããŸã ãç»åã¯src / main / resources / imgãã£ã¬ã¯ããªããã¿ãŒã²ãã/ãµã€ãã«ã³ããŒãããJAXBã®ã¯ã©ã¹ã¯XMLã¹ããŒãããçæãããŸã泚éãä»ããŠãexec-maven-pluginã䜿çšããŠjavaã§ããã°ã©ã ãå®è¡ããŸããexec-maven-pluginã¯ãFreeMarkerãšsite.xmlã®ããŒã¿ã䜿çšããŠãµã€ããçæããŸãã jaxb2-maven-pluginãã©ã°ã€ã³ã®å ŽåãJDKã®xjcãPATHç°å¢å€æ°ã®ãã¹ã®1ã€ã§å©çšå¯èœã§ããããšãéèŠã§ãã
public class Site { public static void main(String[] args) throws Exception { File targetDirectory = getTargetDirectory(); SiteType siteModel = readSiteModel(); Configuration cfg = getTemplateConfiguration(); generateIndex(targetDirectory, siteModel, cfg); siteModel.getProduct().stream().forEach(product -> generateProduct(targetDirectory, cfg, product)); } private static void generateIndex(File targetDirectory, SiteType siteModel, Configuration cfg) { try(Writer out = new FileWriter(new File(targetDirectory, "index.html"))) { Template template = cfg.getTemplate("index-template.html"); template.process(siteModel, out); } catch (Exception e) { throw new IllegalArgumentException(e); } } private static void generateProduct(File targetDirectory, Configuration cfg, ProductType product) { try(Writer out = new FileWriter(new File(targetDirectory, product.getId() + ".html"))) { Template prodTemplate = cfg.getTemplate("product-template.html"); prodTemplate.process(product, out); } catch (Exception e) { throw new IllegalArgumentException(e); } } ... }
è¥ã女æ§ãã³ã³ãã¥ãŒã¿ãŒã«JDK以å€ã®ãã®ãã€ã³ã¹ããŒã«ããã®ãé²ãããã«ã圌ã¯mvn-classloader-1.8.jarããããžã§ã¯ãã«è¿œå ããŸããã scm-publishïŒpublish-scm "GitHub Pagesã§ãµã€ããå ¬éããŸãã Windowsäžã®ã·ã¹ãã ã§ã¯build.cmd ãLinuxã§ã¯build.shã®ãµã€ãã®çæãéå§ããŸãã ããã«ããããããžã§ã¯ãã®ã¢ã»ã³ããªãå€§å¹ ã«ç°¡çŽ åãããGradle Wrapper / Maven Wrapperãšéåžžã«ãã䌌ãŠããŸãã mavenã®ã©ã€ãã©ãªãŒã«ã¯ãJVMãšäžå€®ãªããžããªãŒãžã®ã¢ã¯ã»ã¹ãåããã€ã³ã¿ãŒãããæ¥ç¶ã®ã¿ãå¿ èŠã§ãã ããã§ã¯éé¢ããããããã¯ãŒã¯ã®å Žåã¯èæ ®ããŸãããããã®å Žåã§ãã/ .m2 / settings.xmlã®ãã©ãŒãšãããã·ã®èšå®ã¯æ©èœããŸãã æè¿ã ãOSGIãšJigsawã䜿çšããªãJavaSEã§ã®ã¢ãžã¥ãŒã«åãã§ãã®ã©ã€ãã©ãªã®ãã¹ãŠã®éæ³ã«ã€ããŠè©±ããŸããã
åŠç¿ããã»ã¹ã«é¢ããããã€ãã®èšèã ããŒãžã§ã³ç®¡çã·ã¹ãã ãšGitã®ã³ã³ãœãŒã«ã®ã³ãã³ãã«ã€ããŠè©±ãã®ã¯å°é£ã§ããã ããã¯äžå¯èœã§ã¯ãªãããããã°ã©ããŒã§ã¯ãªããæãã 圌女ããµã€ããå ¬éããããã»ã¹ã«ééããããªãããã«ãç§ã¯ããã»ã¹å šäœãèªååããæ©äŒãæ¢ãå§ããŸããã ãµã€ããçæããŠå ¬éããã«ã¯ãã¯ã³ã¯ãªãã¯ã§ã§ããŸãã githubã§ãµã€ããå ¬éããã®ãã©ãã»ã©ç°¡åããèŠã€ããŠãmaven-scm-publish-pluginãã©ã°ã€ã³ãçºèŠããŸããã Mavenã¢ã»ã³ããªã«è¿œå ãããªããžããªã¢ãã¬ã¹ã«scmpublish.pubScmUrlãæ§æããŸããã
ç§ã¯ãã¯ãããžãŒããæ°ãããããã女æ§ã®äŒæ¥ãæãåºããŸãã ãŸããŸããçŸä»£ã®å¥³ã®åãè£çž«ãšè£çž«ãèŠãããšãã§ããŸãã ãããŠãããã§ãã¶ã€ããŒã®ä»äºãšåœŒå¥³ãçž«ã£ãæ¹æ³ã芳å¯ããæ©äŒããããŸããïŒ
![](https://habrastorage.org/files/73a/b1f/967/73ab1f967f3c4cf8b00dc1ae656a4b23.jpg)
ã€ã³ããªã¢ã®ããã¹ã¿ã€ã«ãã¶ã€ã³ã®æ°ããåéã«ã€ããŠåŠã³ãŸããã ãããŠãã«ãŒãã³ãåžå°ãã³ãŒãã¹ã®çš®é¡ã¯ããã»ã©å€ããªããšæããŸããã
ãµã€ãã§ã®è©±ã®åã§ãããç§ã¯åœŒå¥³ã圌女ã®æ¯èŠªãšåœŒå¥³ã®å人ã®èªçæ¥ã«èŽãç©ãããæ¹æ³ãèŠãŸããã ãããã¯ãåç«ãšéãç¬ãšäžç·ã®é¢çœãæã«ããŒã§ããã
![](https://habrastorage.org/files/933/616/ce7/933616ce78d148f4b9bb1581983501b4.jpg)
ãããé·ãéæäœãã®ãã¬ãŒã³ããããããªãã£ãã®ã¯æ®å¿µã§ããå°ãããããŸããã£ãã§ãã
ãã¹ããŒãããŒã ãçšã®é»åã«ãŒãã³ããããšãã®èšçœ®ã®çµéšã«ã€ããŠåŠã¶ã®ã¯èå³æ·±ãããšã§ããã é»æ°ã«ãŒãã³ãè©ŠããŠãSTM32ã«åºã¥ããŠã³ã³ãããŒã©ãŒã«åºå®ããå ã»ã³ãµãŒã§ã«ãŒãã³ã®ééãèªååããããé»è©±ããã«ãŒãã³ããªã¢ãŒãã§å¶åŸ¡ããŸãã ãããã³ã«ã«å¯ŸåŠããéãé»æ°ããŒããªãã§ã³ã³ãããŒã©ãŒãçŸããæ¥ç¶ããŠãã ããïŒ ããããã©ããããjekyllãã³ãã¬ãŒããæ±ã£ãåŸã«ãªãã§ãããã ãã以åã¯ãããŒãã¹ã¿ãŒã¿ã¯ãŒã§ã®ã¿åæ§ã®èªåããŒã©ãŒãã©ã€ã³ããèŠãããŸããã
ã³ã³ãã³ãã®æŽæ°æ¹æ³ã«ã€ããŠ...ãŸããã³ãã³ããå®è¡ããå¿ èŠããããŸã
git clone https://github.com/nadinbox89/site.git
ãŸãã¯ãgithubãããããžã§ã¯ãã®zipãã¡ã€ã«ãããŠã³ããŒãããŸãã
![](https://habrastorage.org/files/33c/17b/554/33c17b5540f04a529324750ddbb40f20.png)
ãã¶ã€ããŒã¯ãããŒããã©ãªãªã®åŠçæžã¿ç»åãsrc / main / resources / imgãã£ã¬ã¯ããªã«ã³ããŒãã src / main / resources / site.xmlãã¡ã€ã«ã®<product ...>ã»ã¯ã·ã§ã³ã«ãšã³ããªãè¿œå ããŸã ã ãã®åŸãã·ã§ãŒãã«ããã䜿çšããŠbuild.cmdã¹ã¯ãªãããèµ·åããŸã ãããã«ããããã³ãã¬ãŒãããŒã¿ãããµã€ããäœæãããGitHubããŒãžã§nadinbox89.github.ioãªããžããªã«å ¬éãããŸãã git pushåŸãããã«é ããŠããµã€ãããŒãžã§ã³ã¯GitHubã®ãªããžããªåãšåãã¢ãã¬ã¹-nadinbox89.github.ioã§æŽæ°ãããŸãã ãªããžããªã®CNAMEã§ãã¡ã€ã³ã¬ã³ãŒãã䜿çšããå Žåããã®ã¢ãã¬ã¹ã«èªåçã«ãªãã€ã¬ã¯ããããŸãã ãµã€ããæŽæ°ãããšãå ¬éãã©ã°ã€ã³ããã®ã³ããããnadinbox89.github.ioãšããååã®ãªããžããªã«è¡šç€ºãããŸãã
![](https://habrastorage.org/files/c43/cef/6e1/c43cef6e19b843f4b6372b7fbd0ccc22.png)
圌女ããXMLã®äœæ¥ãå®å šã«é ãã®ã¯è¯ãããšã§ããããžã§ãã¬ãŒã¿ãŒã®UIãäœæããããšã¯ãŸã æãŸããŠããŸããã
ååºãµã€ãã¯ãã¡ã€ã³åã§é£ŸãããŠããŸããã æ°çŸã«ãŒãã«ã§ãã»ãŒãã¹ãŠã®ã¬ãžã¹ãã©ãããã¡ã€ã³ãååŸã§ããŸãã ãã®åŸãCNAMEãã¡ã€ã«ããã¡ã€ã³åãšãšãã«githubãµã€ããªããžããªã®ã«ãŒãã«è¿œå ããŸãã ãã¡ã€ã³ã¬ãžã¹ãã©ã«ç¡æã®DNSãµãŒããŒãããå Žåã«æé©ã§ãã 次ã®ããã«GitHubããŒãžçšã«æ§æããå¿ èŠããããŸãã
@ A 192.30.252.153
@ A 192.30.252.154
www CNAME * your_github_account * .github.io
ããã§ã192.30.252.153ã192.30.252.154ã¯githubã®IPã¢ãã¬ã¹ã§ãã ãã¡ã€ã³åã®èšå®ã«ã€ããŠã¯ã stackoverflowãšGitHubã®ãã«ãã§è©³ãã説æãããŠããŸã ã ãã®åŸã ã¢ãã€ã«ãã¬ã³ããªãŒãµãŒãã¹ã§ç¢ºèªããŸãããäžè¬ã«ããã®ãµã€ãã¯ã¢ãã€ã«ãã©ãŠã¶ãŒã§æ£åžžã«æ©èœããŸãã
![](https://habrastorage.org/files/4cf/8ea/021/4cf8ea021dab408593a4872403c09893.png)
ãµã€ãã®äœæãžã®ç§ã®åå ãçµäºãããµããŒãã次ãšåãã¢ãŒãã«ãªãããšãé¡ã£ãŠããŸã
å€ãè¯ããããª
ãããã«
GitHub Pagesã¯ãã·ã³ãã«ã§éçãªååºãµã€ãã®ãã¹ãã£ã³ã°ã«æé©ã§ãããè²»çšã¯ãã¹ãŠãæ°çŸã«ãŒãã«ã®ãã¡ã€ã³åãæ€åããŠè³Œå ¥ããæéã§ãã ã¢ã«ãŽãªãºã ã¯è€éã§ã¯ãªãããã®èšäºã§èª¬æãããŠããŸãã
- GitHubã§ã¢ã«ãŠã³ããç»é²ãã
- ãªããžããªã®äœæ* your_github_account * .github.io
- éçïŒhtmlãcssãç»åïŒããªããžããªã«ä¿å* your_github_account * .github.io
- ãã¡ã€ã³ãç»é²ãã3ãã€ã³ãã®ã¢ãã¬ã¹ãæãDNSãµãŒããŒã¬ã³ãŒããäœæãã
- ãã¡ã€ã³åã䜿çšããŠCNAMEãã¡ã€ã«ããªããžããªã®ã«ãŒãã«è¿œå ããŸã
GitHubã®çµã¿èŸŒã¿jekyllãã³ãã¬ãŒãã䜿çšããããFreeMarkerã®Javaããã°ã©ã ãšãã³ãã¬ãŒãã䜿çšããŠãhtmlãçæã§ããŸãã maven-scm-publish-pluginã䜿çšããŠãmavenãã«ãããçŽæ¥GitHubã«ãµã€ããå ¬éããããšã䟿å©ã§ãã å ¬éçšã®ãã©ã°ã€ã³ãgit pushãå®è¡ã§ããããã«ãã¹ã¯ãªããã§ãã°ã€ã³/ãã¹ã¯ãŒããèšå®ããã ãã§ãã 3æ8æ¥ã®ç§ã®èŽãç©ã¯æåã§ããïŒ