
ãµãŒãããŒãã£ã®ããŒãµãŒã䜿çšããªãã£ãçç±
ããŒãµãŒãRubyã®æåã®OOXMLããŒãµãŒã§ã¯ãªãããšã¯ç§å¯ã§ã¯ãããŸããã ãµãŒãããŒãã£è£œåã䜿çšããããšãã§ããŸããã䜿çšããªãããšã«ããŸããã ç§ãã¡ãèŠã€ãã解決çã«ã¯ãããã€ãã®åé¡ããããŸãã
aïŒéçºè ã«ãã£ãŠé·ãéæŸæ£ãããŠããã
bïŒåºæ¬çãªæ©èœã®ã¿ããµããŒãããŸãã
cïŒéåžžã3ã€ã®åå¥ã®ã©ã€ãã©ãªãšããŠé åžãããŸãã å€ãã®å ŽåãdocxããŒãµãŒãšxlsxããŒãµãŒã¯ç°ãªã人ã ã«ãã£ãŠäœæãããããããããã®ã€ã³ã¿ãŒãã§ãŒã¹ã¯åçã«ç°ãªãå¯èœæ§ããããŸãã åæããŸããããã¯äžäŸ¿ã§ãã
ããŒãµãŒã®éãã¯äœã§ãã
ç§ãã¡ã¯èªåèªèº«ãšç§ãã¡ã®ã¿ã¹ã¯ïŒããã¥ã¡ã³ããšãã£ã¿ã®ãã¹ãïŒã®ããã«æžããŸãããããã®åŸãããããä»ã®Rubyéçºè ãå©ããããšãã§ããããšã«æ°ä»ããŸããã
aïŒç©æ¥µçã«éçºäžã§ãã
bïŒãšãã£ã¿ãŒã®ãã¹ãŠã®æ©èœããµããŒãããŠãããããã¯ãããããããŸãã ããã§èªãããšãã§ããŸãã
cïŒdocxãxlsxãpptxã§åäœãããããOOXMLããŒãµãŒãåŒã³åºããŸããã
æ©èœbïŒ-æ©èœã«ã€ããŠèª¬æããŸãã æšæºã®å¯èœãªæ©èœããã¹ãŠå®è£ ããŠããŸããïŒ ããã ECMA-376æšæºã¯4ããªã¥ãŒã ã§ãåèš9000ããŒãžãè¶ ããŠããŸãïŒãããïŒã å®éãçŽ7000ã§ãã æ¯ãåãããšãã§ããŸãã

äžè¬çã«ãããªãèªèº«ãç解ããŠããŸãããã¹ãŠãç§ãã¡ãšäžç·ã«å®è£ ãããããã§ã¯ãããŸããã ããããå¿ èŠãªãã®ã¯ãã¹ãŠãããŸãã段èœãè¡šãèªåæ°å€ãèªèãããŸãã ã®ãããªè€éãªãã®ã®ãµããŒãããããŸã
- ã«ã©ãŒã¹ããŒã ;
- 段èœãšè¡šã®ã¹ã¿ã€ã«ã
- çµã¿èŸŒã¿ã®ã°ã©ãã
- èªåå³åœ¢ã®ããããã£;
- ã¹ããŒã«ãŒ;
- ãªã¹ãã
ãªãããŒãµãŒãå¿ èŠãªã®ã§ãã
ãã¿ãã¬-ãªãããŒãµãŒãå¿ èŠãªã®ã§ããïŒ
圌ã¯ãã¹ãéšéã§çãŸããŸããã
èªåãã¹ãã®æåãããæ©èœãã¹ããšããåäžã®ã³ã³ã»ãããæ¡çšããŸããã
æãç°¡åãªãã¹ããå®æœããŠãã ããã
1.æ°ããããã¥ã¡ã³ããäœæããŸãã
2.ããã¹ããå°å·ãããã®å€ªåããããã£ãèšå®ããŸãã
3.倪åãèšå®ãããŠããããšã確èªããŸãã
ONLYOFFICEãšãã£ã¿ãŒã¯Canvasã§èšè¿°ãããŠããŸããã€ãŸããææžå ã®ããã¹ãã¯ç»åã§ãã ç»åå ã®ãã©ã³ãã®å€ªãã確èªããããšã¯éåžžã«å°é£ã§ãã ãã ããä»»æã®ãã©ã³ãã«å€ªåãé©çšã§ããŸãïŒ


äžéšã®ãã©ã³ãïŒArial Blackãªã©ïŒã§ã¯ãããŒã«ããèŠèŠçã«ãŸã£ãã衚瀺ãããªãå ŽåããããŸãã ç»åãimagemagickãšæ¯èŒããããšã¯æè¯ã®éžæè¢ã§ã¯ãªãããšã«åæããŸãã
ãããã£ãŠããã¹ãã®æ€èšŒæé ã¯å¥ã®æ®µèœã§åŒ·èª¿è¡šç€ºãããŸãããã€ãŸãã
4.çµæã®ãã¡ã€ã«ãdocx圢åŒã§ããŠã³ããŒãããããã¹ãã«å€ªåãã©ã¡ãŒã¿ãŒãèšå®ãããŠããããšã確èªããŸãã
ãã®ãããªãã©ã¡ãŒã¿ãŒã¯æ°çŸãããŸãã åæã«ãæ¢åã®ãœãªã¥ãŒã·ã§ã³ã¯ã©ãããããã¹ããããŒãã«ãããã³ãã®ä»ã®ããã€ãã®æãåçŽãªã°ã©ã以å€ã®ãã®ããµããŒãããŠããŸããã§ããã ããã§ãç¬èªã®ã©ã€ãã©ãªãäœæããããšã«ããŸããã
ãããã®ãã©ãŒãããããã¹ãŠç·šéçšã«éãããšãã§ããããã¥ã¡ã³ããšãã£ã¿ãŒãéçºããŠããŸãã ãšãã£ã¿ãŒããæ¢è£œã®ãœãªã¥ãŒã·ã§ã³ã䜿çšããŠããããéããŠãã¹ããæ€èšŒããŠã¿ãŸãããïŒ
ã©ãããŠïŒ
1.ãšãã£ã¿ãŒã®ãµãŒããŒåŽã§ã¯ãããŒãµãŒã¯C ++ã§èšè¿°ãããŠãããèªåãã¹ãã®ããã»ã¹å šäœãRubyã§æ§ç¯ãããŠããŸãã 移åäžãããããã¹ãŠçµã³ä»ããæ¹æ³ã¯å®å šã«ã¯æ確ã§ã¯ãããŸããã§ããã
2.çŸåšãLinuxçšã®ããŒãžã§ã³ããããŸãïŒãããã¡ã€ã³ã§ãïŒãããã¹ãçšã®ã€ã³ãã©ã¹ãã©ã¯ãã£å šäœã®çµ±åãéå§ãããæç¹ã§ãããã¥ã¡ã³ãã®ãµãŒããŒéšåã¯ãã©ãããã©ãŒã ãšããŠWindowsã®ã¿ããµããŒãããŠããŸããã åæã«ããã¹ãã§ã¯åžžã«UbuntuãšæŽŸçç©ã䜿çšããŸããã ããããã¹ãŠæ¥çããã«ã¯ãããªãããŒãªã¹ããŒã ãèãåºãå¿ èŠããããŸãã
3.ãµãŒããŒããŒãµãŒãæšæºãšèŠãªãããšã¯å¯èœã§ããïŒ è£œåèªäœã䜿çšããŠè£œåã®çµæãæ€èšŒããŸããïŒ çãããã¢ã€ãã¢ã
ããŒãµãŒã®ä»çµã¿
docxãã¡ã€ã«ãã¢ãŒã«ã€ãããããšããããšãããå Žåãå§çž®çãéåžžã«å°ããããšã«æ°ã¥ãããããããŸããã ãªããã ç°¡åã§ããooxmlãã¡ã€ã«ã¯ãxmlãã¡ã€ã«ã®ã¢ãŒã«ã€ãã»ããã«ãããŸããã ãããã®æ§é ã¯éåžžã«ç°¡åã§ãã

ããšãã°ãONLYOFFICEãšãã£ã¿ãŒã§ç°¡åãªã°ãªãŒãã£ã³ã°ãã¡ã€ã«ãäœæããdocxã§ããŠã³ããŒãããŸãã 次ã«ããããzipãã¡ã€ã«ãšããŠè§£åãããã®ããã¥ã¡ã³ãã®éèŠãªéšåãä¿åãããŠããå Žæã確èªããŸãã
次ã®æ§é ã衚瀺ãããŸãã
#tree âââ [Content_Types].xml âââ docProps â âââ app.xml â âââ core.xml âââ _rels âââ word âââ document.xml âââ fontTable.xml âââ _rels â âââ document.xml.rels âââ settings.xml âââ styles.xml âââ theme â âââ _rels â â âââ theme1.xml.rels â âââ theme1.xml âââ webSettings.xml
ç§ãã¡ã¯å éšãæãäžãå§ããŸãã é çªã«ã
[Content_Types] .xml-ããã¥ã¡ã³ãå ã®MIMEã¿ã€ãã®ãªã¹ãã å¯ãã§ãã
app.xml-ããã¥ã¡ã³ãã®ã¡ã¿ããŒã¿ãäœæè ã¢ããªã±ãŒã·ã§ã³ãçµ±èšã ãã§ã«æãããæ å ±ã¯èå³æ·±ãæçšã§ãã
core.xml-ææ°ã®å€æŽã«é¢ããã¡ã¿ããŒã¿ã
document.xml-ãããããã¯ãã³ãŽã§ãã ããã¥ã¡ã³ãã®ã³ã³ãã³ãã¯ãã®ãã¡ã€ã«ã«é ãããŠããŸããåŸã§æ€èšããŸãã
fontTable.xml-ããã¥ã¡ã³ãå ã®ãã©ã³ãã®è¡šã 䟿å©ã§ãã
document.xml.rels-ã¢ãŒã«ã€ãå ã®ãã¹ãŠã®ãã¡ã€ã«ã®ãªã¹ãããã®ãªã¹ãã¯ãåçãã°ã©ããå«ãè€éãªããã¥ã¡ã³ãã®å Žåã«éåžžã«åœ¹ç«ã¡ãŸãã
settings.xml-ååãããããã©ã«ãã®ãºãŒã ãæ°åã®åºåããªã©ãããŸããŸãªããã¥ã¡ã³ããã©ã¡ãŒã¿ãããã«ä¿åãããŠããããšãæããã§ãã
styles.xmlãtheme1.xmlãããã³theme1.xml.relsã¯ãããã¥ã¡ã³ãã®ã¹ã¿ã€ã«ãšããŒãã®ãã©ã¡ãŒã¿ãŒãå«ãéåžžã«ããã°ãéåžžã«è©³çŽ°ãªãã¡ã€ã«ã§ãã ãããã®ããã¥ã¡ã³ããç解ããæ©èœã¯ã補åã®éèŠãªæ©èœã®1ã€ã§ãã
webSettings.xml-ããã¥ã¡ã³ãã®WebããŒãžã§ã³ã«é¢ããèšå®ã docxã®æãäžè¬çãªæ©èœã§ã¯ãããŸãããçç¥ããŠãã ããã
ãã®ãããåçŽãªããã¥ã¡ã³ãã§ã¯ã word / document.xmlãèå³æ·±ãããšãããããŸããã

ã·ã³ãã«ãªxmlã 幞ããªããšã«ãRubyã§ã®xmlã®è§£æã«åé¡ã¯ãããŸããã ã®ããããåããDOMããªãŒãååŸããŸãã ããŠãããã¯æè¡ã®åé¡ã§ãããæšæºãèªãã§ãã ããïŒæ notã§ã¯ãªãå Žåãããã¥ã¡ã³ãã¯éåžžã«å€§ããã§ãïŒããŸãã¯å€ãè¯ããªããŒã¹ãšã³ãžãã¢ãªã³ã°ã§å¿ èŠãªãã©ã¡ãŒã¿ãŒãããã¥ã¡ã³ãã®ã©ãã«é ããŠããããç解ããã ãã§ãã
ããŒãµãŒã®èšè¿°æ¹æ³
äœæ¥ã®æåã«ãç§ãã¡ã¯å€ãã®ééããç¯ããŸãããããã¯ãæèãé«ãŸãã«ã€ããŠèªåèªèº«ãä¿®æ£ããŸããã 2ã€ã®æãé倧ãªèª€ãã以äžã«èª¬æããŸã-ãããã¯éå»ã«è¯ãããšã§ãããç§ãã¡ã¯ãã¯ãæ¥ãããããããŸããã ç§ãã¡ã®çµéšããåãã¬ãŒããè¶ããªãããã«ä»ã®äººãå©ããããšãé¡ã£ãŠããŸãã
巚倧ãªãã¡ã€ã«
ãããã£ãŠã3ã€ã®ç°ãªãããã¥ã¡ã³ã圢åŒãåŠçããã¿ã¹ã¯ããããŸãã ãã®ã³ãŒããã©ã®ããã«æŽçããŸããïŒ ãã¡ããã4000è¡ã®ã³ãŒãã®3ã€ã®ãã¡ã€ã«ïŒå®éã«ã¯ã圢åŒã®äžè¬çãªæ¹æ³ãããããã4000è¡ã®ã³ãŒãã®4ã€ã®ãã¡ã€ã«ã§ãããïŒã
åé¡ã®è§£æ±ºã«æãæéãããã£ãã ç§ã¯ãã®ãã¹ãŠã®çµæžããã¡ããšãã圢ã«ããªããã°ãªããŸããã§ããïŒãã ãã300è¡ã®ãã¡ã€ã«ããŸã ãããã¢ããããããšããããŸãïŒããã¡ããšããã¯ã©ã¹ã®ã¡ãœãããéžæãããªã©ã çŸåšã4ã€ã§ã¯ãªã200以äžã®ãœãŒã¹ãã¡ã€ã«ããããŸãã ãã°ãä¿®æ£ããã®ã¯ç°¡åã§ãã
ãã¹ãã®æ¬ åŠ
ããžãã¯ã¯æ¬¡ã®ãšããã§ããã¡ã€ã³è£œåã®ONLYOFFICE Document Serverããã¹ãããããã®ããŒãµãŒãäœæããŠããŸããããªãããŒãµãŒèªäœããã¹ãããå¿ èŠãããã®ã§ããïŒ
ãã ãã ããã!!!
ç掻ã·ãŒã³ïŒ
-ããã§äœããä¿®æ£ããå¿ èŠããããŸããå³ã®è²ãééã£ãŠæ±ºå®ãããŠããŸãã
-ã¯ããä»ãããã«ã¿ã€ããã¹ãããã1ã€ã®æåãä¿®æ£ããã³ãããããŸããã
çµæïŒ
ãã¹ãŠãèœã¡ãŸããã ããŒãµãŒããšãã£ã¿ãŒããã«çºæ¿ã¬ãŒãããã³ããã£ãã³ããã£ãèªå°å¿ã
ããªããããªããã°ãªããªãã£ãã®ã¯ã `spec`ãã©ã«ããäœæããããã«æ°çŸã®ãã¡ã€ã«ã眮ããå€ã«éãã«ç ãããã«ããããã®ãã©ã¡ãŒã¿ããã§ãã¯ããä»äºãé¢ããåã«è¡ã£ãã³ããããã¡ãã¥ãŒã§èšå®ããããªãã·ã§ã³ã®æ€èšŒãå£ããªãããšãç¥ã£ãŠããããšã§ãããã¹ãã®ç¬¬3ã¬ãã«ã ãå·ŠåŽã®3çªç®ã®æããšåŒã³ãŸãã
ããããç®ã现ããã ãã§ã¯ãããŸããã ãŸããå¥å šãªèãããããŸããã æãã¯ãŒã«ãªãã®ïŒ
RuboCopã䜿çšãã
RuboCopã¯Rubyçšã®éçã³ãŒãã¢ãã©ã€ã¶ãŒã§ããããããæ°ã«å ¥ã£ãŠããŸãã æ¬åœã«ãæ¬åœã«ã ãããŠãç§ãã¡ã¯åžžã«åœŒã®æèŠã«è³ãåŸããŸãã ã³ãŒããé©åãªç¶æ ã«ä¿ã¡ãæããªééããé¿ãã次ã®ã³ãããåŸã«ã³ãŒããæ±ãããæªåãããããªãããã«å³å¯ã«ç£èŠããã®ã«åœ¹ç«ã¡ãŸãïŒ overcommitã«ããçµ±åã®ãããïŒã
圌ã®ä»äºã¯æ¬¡ã®ããã«ãªããŸããèŠåŽããŠäžæ¥ãéãããåŸãRubyã®å€æ°ã¯é垞倧æåã§å§ãŸãããšãå¿ããŠã次ã®åœ¢åŒã®ã³ãŒããã³ãããããããšããŸãã
-path_to_zip_file = copy_file_and_rename_to_zipïŒpath_to_fileïŒ
+ ZIP_file = copy_file_and_rename_to_zipïŒpath_to_fileïŒ
ãã®å Žåããšã©ãŒãçºçããŸãã
RuboCopã§åæ........................................ [RuboCop]ã倱æããŸãã
å€æŽãããè¡ã®ãšã©ãŒïŒ
ooxml_parser / lib / ooxml_parser / common_parser / parser.rbïŒ8ïŒ7ïŒEïŒåçå®æ°ã®å²ãåœãŠ
è¿œå ã®æäœãªãã§ãã®ã³ãŒããã³ãããããããšã¯ã§ããŸããïŒ `SKIP = RuboCop git commit -av`ïŒã ããã¯æãè ã«å¯Ÿãã倧ããªé²åŸ¡ã§ãã
ãªãŒãã³ãœãŒã¹ãããžã§ã¯ãã®ãªãªãšã³ããŒã·ã§ã³
ããŒãµãŒéçºã®ã»ãŒæåãããä»ã®ãªãŒãã³ãœãŒã¹ãããžã§ã¯ãã«çŠç¹ãåœãŠãŸããã ç§ãã¡ã®ã³ãŒãããªãŒãã³ãœãŒã¹ã§ã¬ã€ã¢ãŠãããããã©ããã¯ããããŸããã§ããããç§ãã¡ã¯åžžã«ãã®æºåãã§ããŠããŸããã ãLay outãã³ãã³ããå°çããããGitHubã®ãmake publicããã¿ã³ãã¯ãªãã¯ããã ãã§ãè¿œå ã®ã³ãŒãã³ã°ããã®ä»ã®æäœã¯äžåå¿ èŠãããŸããã
ããã¯åãRuboCopã®å€§ããªã¡ãªããã§ããå€æŽãã°ãgemæ§é ãªã©ã®ç¹å®ã®ãããã¯ãã©ã®ããã«æŽçããã®ãæåããèããªãããã³ãŒããããèŠããŸããã ããã«ããã¹ãŠã®éçºãã³ããããå€æŽã®å±¥æŽãªã©ã¯ãæåã¯è±èªã§è¡ãããŸããã
ããã¥ã¡ã³ãã®ããŒã¿ããŒã¹ã䜿çšãã
ããŒãµãŒããã¹ããããšãã以åã®ææã¯åœ¹ã«ç«ã¡ãŸããã3ã€ã®åœ¢åŒã®ããããçš®é¡ã®å¥åŠã§å·šå€§ã§ç解ã§ããªããã¡ã€ã«ãå«ã倧èŠæš¡ãªããŒã¿ããŒã¹ã§ãã
æã ãONLYOFFICEãšãã£ã¿ãŒã®éçºã®åæ段éã§ããããã®ãã¡ã€ã«ãã€ã³ã¿ãŒãããäžã§åéããŸããã圌ãã¯è€éã§éæšæºã®ããã¥ã¡ã³ãã®ã¬ã³ããªã³ã°ããã§ãã¯ããŸããã æ°å¹ŽåŸãããŒãµãŒã¯åãããã¥ã¡ã³ãããŒã¹ã§å®è¡ãããŸããã ãã®çµæãé£æ床ã®ç°ãªãããŸããŸãªåé¡ãçºçãããããã解決ããããã«æ°é±éãè²»ãããåŸãåªãã補åãåŸãããŸããã

åèš
ã ããããã¹ãŠãå©çšå¯èœã§ããããRubyã¢ããªã±ãŒã·ã§ã³ã«è¿œå ããdocxã解æãããããã®çµ±èšãæ§ç¯ããxlsxãã¡ã€ã«ã®ã¢ã«ãŠã³ãã£ã³ã°ãã©ã®ããã«æ©èœããããåæãã4çªç®ã®ã¹ã©ã€ãã®è£œåãã¬ãŒã³ããŒã·ã§ã³ã§ã©ã®memesikãPMãé ãããã調ã¹ãŸãã ãããŠãããã¯ãã¹ãŠç¡æã§ãã
GitHubã§åé¡ã®ãããã¡ã€ã«ãèŠã€ããŠåé¡ãäœæããããšãã§ããŸããããã¯è§£æ±ºããŸãã èªåã§ç·šéããŠãã«ãªã¯ãšã¹ããéä¿¡ããããšãã§ããŸãã