hikiutils 0.2.3.17 → 0.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (251) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/Rakefile +76 -8
  4. data/exe/hiki +2 -3
  5. data/hikiutils.gemspec +1 -1
  6. data/lib/hikiutils.rb +9 -9
  7. data/lib/hikiutils/version.rb +1 -1
  8. data/lib/hikiutils_thor.rb +73 -61
  9. data/lib/templates/Rakefile_hiki_sync +96 -56
  10. data/{hikiutils_yamane/Rakefile → lib/templates/Rakefile_hiki_sync_new} +97 -57
  11. data/lib/templates/hiki_help.yml +48 -8
  12. metadata +6 -248
  13. data/abst/#testhiki# +0 -0
  14. data/abst/.DS_Store +0 -0
  15. data/abst/out2.pdf +0 -0
  16. data/abst/out3.aux +0 -15
  17. data/abst/out3.log +0 -193
  18. data/abst/out3.pdf +0 -0
  19. data/abst/out3.synctex.gz +0 -0
  20. data/abst/out3.tex +0 -106
  21. data/abst/out4.aux +0 -13
  22. data/abst/out4.log +0 -190
  23. data/abst/out4.pdf +0 -0
  24. data/abst/out4.synctex.gz +0 -0
  25. data/abst/out4.tex +0 -75
  26. data/abst/speed.png +0 -0
  27. data/abst/testhiki +0 -26
  28. data/abst/testhiki2 +0 -106
  29. data/abst/tmp.hiki +0 -14
  30. data/abst/tmp.html +0 -16
  31. data/abst/work.png +0 -0
  32. data/abst/yamane_abst.pdf +0 -0
  33. data/abst/yamane_abst.tex +0 -59
  34. data/abst/yamane_abst_new.pdf +0 -0
  35. data/abst/yamane_powerpoint.key +0 -0
  36. data/abst/yamane_powerpoint.pptx/.DS_Store +0 -0
  37. data/abst/yamane_powerpoint.pptx/Data/PresetImageFill0-1.jpg +0 -0
  38. data/abst/yamane_powerpoint.pptx/Data/PresetImageFill1-2.jpg +0 -0
  39. data/abst/yamane_powerpoint.pptx/Data/PresetImageFill2-3.jpg +0 -0
  40. data/abst/yamane_powerpoint.pptx/Data/PresetImageFill3-4.jpg +0 -0
  41. data/abst/yamane_powerpoint.pptx/Data/PresetImageFill4-5.jpg +0 -0
  42. data/abst/yamane_powerpoint.pptx/Data/PresetImageFill5-6.jpg +0 -0
  43. data/abst/yamane_powerpoint.pptx/Data/image1-12.png +0 -0
  44. data/abst/yamane_powerpoint.pptx/Data/image1-9.png +0 -0
  45. data/abst/yamane_powerpoint.pptx/Data/mt0@2x-13.jpg +0 -0
  46. data/abst/yamane_powerpoint.pptx/Data/mt10@2x-22.jpg +0 -0
  47. data/abst/yamane_powerpoint.pptx/Data/mt1@2x-14.jpg +0 -0
  48. data/abst/yamane_powerpoint.pptx/Data/mt2@2x-15.jpg +0 -0
  49. data/abst/yamane_powerpoint.pptx/Data/mt3@2x-16.jpg +0 -0
  50. data/abst/yamane_powerpoint.pptx/Data/mt4@2x-17.png +0 -0
  51. data/abst/yamane_powerpoint.pptx/Data/mt5@2x-18.jpg +0 -0
  52. data/abst/yamane_powerpoint.pptx/Data/mt6@2x-19.jpg +0 -0
  53. data/abst/yamane_powerpoint.pptx/Data/mt7@2x-20.png +0 -0
  54. data/abst/yamane_powerpoint.pptx/Data/mt8@2x-21.jpg +0 -0
  55. data/abst/yamane_powerpoint.pptx/Data/st0-23.jpg +0 -0
  56. data/abst/yamane_powerpoint.pptx/Data/st1-24.jpg +0 -0
  57. data/abst/yamane_powerpoint.pptx/Data/st2-25.jpg +0 -0
  58. data/abst/yamane_powerpoint.pptx/Data/st3-26.jpg +0 -0
  59. data/abst/yamane_powerpoint.pptx/Data/st4-276.jpg +0 -0
  60. data/abst/yamane_powerpoint.pptx/Data/st5-279.jpg +0 -0
  61. data/abst/yamane_powerpoint.pptx/Index.zip +0 -0
  62. data/abst/yamane_powerpoint.pptx/Metadata/BuildVersionHistory.plist +0 -8
  63. data/abst/yamane_powerpoint.pptx/Metadata/DocumentIdentifier +0 -1
  64. data/abst/yamane_powerpoint.pptx/Metadata/Properties.plist +0 -0
  65. data/abst/yamane_powerpoint.pptx/preview-micro.jpg +0 -0
  66. data/abst/yamane_powerpoint.pptx/preview-web.jpg +0 -0
  67. data/abst/yamane_powerpoint.pptx/preview.jpg +0 -0
  68. data/abst/yamane_powerpoint_new.key/Data/PresetImageFill0-1.jpg +0 -0
  69. data/abst/yamane_powerpoint_new.key/Data/PresetImageFill1-2.jpg +0 -0
  70. data/abst/yamane_powerpoint_new.key/Data/PresetImageFill2-3.jpg +0 -0
  71. data/abst/yamane_powerpoint_new.key/Data/PresetImageFill3-4.jpg +0 -0
  72. data/abst/yamane_powerpoint_new.key/Data/PresetImageFill4-5.jpg +0 -0
  73. data/abst/yamane_powerpoint_new.key/Data/PresetImageFill5-6.jpg +0 -0
  74. data/abst/yamane_powerpoint_new.key/Data/image1-12.png +0 -0
  75. data/abst/yamane_powerpoint_new.key/Data/image1-9.png +0 -0
  76. data/abst/yamane_powerpoint_new.key/Data/mt0@2x-13.jpg +0 -0
  77. data/abst/yamane_powerpoint_new.key/Data/mt10@2x-22.jpg +0 -0
  78. data/abst/yamane_powerpoint_new.key/Data/mt1@2x-14.jpg +0 -0
  79. data/abst/yamane_powerpoint_new.key/Data/mt2@2x-15.jpg +0 -0
  80. data/abst/yamane_powerpoint_new.key/Data/mt3@2x-16.jpg +0 -0
  81. data/abst/yamane_powerpoint_new.key/Data/mt4@2x-17.png +0 -0
  82. data/abst/yamane_powerpoint_new.key/Data/mt5@2x-18.jpg +0 -0
  83. data/abst/yamane_powerpoint_new.key/Data/mt6@2x-19.jpg +0 -0
  84. data/abst/yamane_powerpoint_new.key/Data/mt7@2x-20.png +0 -0
  85. data/abst/yamane_powerpoint_new.key/Data/mt8@2x-21.jpg +0 -0
  86. data/abst/yamane_powerpoint_new.key/Data/st0-381.jpg +0 -0
  87. data/abst/yamane_powerpoint_new.key/Data/st1-493.jpg +0 -0
  88. data/abst/yamane_powerpoint_new.key/Data/st2-495.jpg +0 -0
  89. data/abst/yamane_powerpoint_new.key/Data/st3-481.jpg +0 -0
  90. data/abst/yamane_powerpoint_new.key/Data/st4-485.jpg +0 -0
  91. data/abst/yamane_powerpoint_new.key/Data/st5-372.jpg +0 -0
  92. data/abst/yamane_powerpoint_new.key/Index.zip +0 -0
  93. data/abst/yamane_powerpoint_new.key/Metadata/BuildVersionHistory.plist +0 -8
  94. data/abst/yamane_powerpoint_new.key/Metadata/DocumentIdentifier +0 -1
  95. data/abst/yamane_powerpoint_new.key/Metadata/Properties.plist +0 -0
  96. data/abst/yamane_powerpoint_new.key/preview-micro.jpg +0 -0
  97. data/abst/yamane_powerpoint_new.key/preview-web.jpg +0 -0
  98. data/abst/yamane_powerpoint_new.key/preview.jpg +0 -0
  99. data/exe/hiki_thor +0 -5
  100. data/exe/hiki_thor~ +0 -8
  101. data/exe/hiki~ +0 -8
  102. data/hikis/README.hiki +0 -64
  103. data/hikis/README.hiki.html +0 -55
  104. data/hikis/README_ja.hiki +0 -67
  105. data/hikis/README_ja.hiki.html +0 -59
  106. data/hikis/yamane.hiki +0 -36
  107. data/hikiutils.wiki/Home.md +0 -68
  108. data/hikiutils.wiki/README.md +0 -65
  109. data/hikiutils.wiki/README_ja.md +0 -68
  110. data/hikiutils.wiki/yamane.md +0 -42
  111. data/hikiutils_bob/.gitignore +0 -1
  112. data/hikiutils_bob/Rakefile +0 -488
  113. data/hikiutils_bob/code.hiki +0 -31
  114. data/hikiutils_bob/figs/calphad_bob.pdf +0 -0
  115. data/hikiutils_bob/figs/hikiutils_bob.001.bb +0 -5
  116. data/hikiutils_bob/figs/hikiutils_bob.001.jpeg +0 -0
  117. data/hikiutils_bob/figs/hikiutils_bob.002.bb +0 -5
  118. data/hikiutils_bob/figs/hikiutils_bob.002.jpeg +0 -0
  119. data/hikiutils_bob/figs/hikiutils_bob.003.jpeg +0 -0
  120. data/hikiutils_bob/figs/hikiutils_bob.004.jpeg +0 -0
  121. data/hikiutils_bob/figs/hikiutils_bob.005.jpeg +0 -0
  122. data/hikiutils_bob/figs/hikiutils_bob.006.jpeg +0 -0
  123. data/hikiutils_bob/figs/hikiutils_bob.007.jpeg +0 -0
  124. data/hikiutils_bob/figs/hikiutils_bob.pdf +0 -0
  125. data/hikiutils_bob/figs/sync.pdf +0 -0
  126. data/hikiutils_bob/hiki_help.yml +0 -53
  127. data/hikiutils_bob/hikiutils_bob.graffle +0 -1195
  128. data/hikiutils_bob/hikiutils_bob.hiki +0 -6
  129. data/hikiutils_bob/hikiutils_bob.key +0 -0
  130. data/hikiutils_bob/hikiutils_bob/hikiutils_bob.001.jpeg +0 -0
  131. data/hikiutils_bob/hikiutils_bob/hikiutils_bob.002.jpeg +0 -0
  132. data/hikiutils_bob/hikiutils_bob/hikiutils_bob.003.jpeg +0 -0
  133. data/hikiutils_bob/hikiutils_bob/hikiutils_bob.004.jpeg +0 -0
  134. data/hikiutils_bob/hikiutils_bob/hikiutils_bob.005.jpeg +0 -0
  135. data/hikiutils_bob/hikiutils_bob/hikiutils_bob.006.jpeg +0 -0
  136. data/hikiutils_bob/hikiutils_bob/hikiutils_bob.007.jpeg +0 -0
  137. data/hikiutils_bob/latex_all.hiki +0 -230
  138. data/hikiutils_bob/latex_dir/code.aux +0 -26
  139. data/hikiutils_bob/latex_dir/code.log +0 -28
  140. data/hikiutils_bob/latex_dir/code.tex +0 -39
  141. data/hikiutils_bob/latex_dir/head.tex +0 -10
  142. data/hikiutils_bob/latex_dir/hikiutils_bob.aux +0 -4
  143. data/hikiutils_bob/latex_dir/hikiutils_bob.log +0 -345
  144. data/hikiutils_bob/latex_dir/hikiutils_bob.pdf +0 -0
  145. data/hikiutils_bob/latex_dir/hikiutils_bob.synctex.gz +0 -0
  146. data/hikiutils_bob/latex_dir/hikiutils_bob.tex +0 -55
  147. data/hikiutils_bob/latex_dir/hikiutils_bob.toc +0 -41
  148. data/hikiutils_bob/latex_dir/jlisting.sty +0 -216
  149. data/hikiutils_bob/latex_dir/jlisting.tex +0 -216
  150. data/hikiutils_bob/latex_dir/latex2hiki.aux +0 -28
  151. data/hikiutils_bob/latex_dir/latex2hiki.tex +0 -43
  152. data/hikiutils_bob/latex_dir/latex_all.aux +0 -37
  153. data/hikiutils_bob/latex_dir/latex_all.log +0 -28
  154. data/hikiutils_bob/latex_dir/latex_all.tex +0 -249
  155. data/hikiutils_bob/latex_dir/pre.tex +0 -36
  156. data/hikiutils_bob/latex_dir/references.tex +0 -4
  157. data/hikiutils_bob/latex_dir/sync.aux +0 -54
  158. data/hikiutils_bob/latex_dir/sync.tex +0 -262
  159. data/hikiutils_bob/references.hiki +0 -3
  160. data/hikiutils_bob/sync.hiki +0 -220
  161. data/hikiutils_bob/tmp1.txt +0 -32
  162. data/hikiutils_bob/toc.hiki +0 -32
  163. data/hikiutils_yamane/.gitignore +0 -1
  164. data/hikiutils_yamane/abstract.hiki +0 -8
  165. data/hikiutils_yamane/backup/hikiutils%28optparse%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%29 +0 -309
  166. data/hikiutils_yamane/backup/hikiutils%28thor%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%29 +0 -1
  167. data/hikiutils_yamane/backup/hikiutils_yamane +0 -703
  168. data/hikiutils_yamane/backup/hikiutils_yamane.hiki +0 -0
  169. data/hikiutils_yamane/backup/hikiutils_yamane_#hikiutils_yamane +0 -1
  170. data/hikiutils_yamane/backup/hikiutils_yamane_command_table +0 -19
  171. data/hikiutils_yamane/backup/hikiutils_yamane_introduction +0 -7
  172. data/hikiutils_yamane/discussion.hiki +0 -9
  173. data/hikiutils_yamane/figs/hikiutils_yamane.001.jpg +0 -0
  174. data/hikiutils_yamane/figs/hikiutils_yamane.002.bb +0 -5
  175. data/hikiutils_yamane/figs/hikiutils_yamane.002.jpg +0 -0
  176. data/hikiutils_yamane/figs/hikiutils_yamane.003.jpg +0 -0
  177. data/hikiutils_yamane/figs/hikiutils_yamane.004.jpg +0 -0
  178. data/hikiutils_yamane/figs/hikiutils_yamane.005.jpg +0 -0
  179. data/hikiutils_yamane/figs/hikiutils_yamane.006.jpg +0 -0
  180. data/hikiutils_yamane/figs/hikiutils_yamane.007.jpg +0 -0
  181. data/hikiutils_yamane/hiki_help.yml +0 -53
  182. data/hikiutils_yamane/hikiutils_yamane.hiki +0 -23
  183. data/hikiutils_yamane/hikiutils_yamane.key/Data/110809_FamilyChineseOahu_EN_00317_2040x1360-small-12.jpg +0 -0
  184. data/hikiutils_yamane/hikiutils_yamane.key/Data/110809_FamilyChineseOahu_EN_02016_981x654-small-14.jpg +0 -0
  185. data/hikiutils_yamane/hikiutils_yamane.key/Data/110809_familychineseoahu_en_00317_2040x1360-96.jpeg +0 -0
  186. data/hikiutils_yamane/hikiutils_yamane.key/Data/110809_familychineseoahu_en_02016_981x654-97.jpeg +0 -0
  187. data/hikiutils_yamane/hikiutils_yamane.key/Data/110809_familychineseoahu_en_02390_2880x1921-94.jpeg +0 -0
  188. data/hikiutils_yamane/hikiutils_yamane.key/Data/110809_familychineseoahu_en_02390_2880x1921-small-95.jpg +0 -0
  189. data/hikiutils_yamane/hikiutils_yamane.key/Data/mt0@2x-102.jpg +0 -0
  190. data/hikiutils_yamane/hikiutils_yamane.key/Data/mt10@2x-112.jpg +0 -0
  191. data/hikiutils_yamane/hikiutils_yamane.key/Data/mt1@2x-103.jpg +0 -0
  192. data/hikiutils_yamane/hikiutils_yamane.key/Data/mt2@2x-104.jpg +0 -0
  193. data/hikiutils_yamane/hikiutils_yamane.key/Data/mt3@2x-105.jpg +0 -0
  194. data/hikiutils_yamane/hikiutils_yamane.key/Data/mt4@2x-106.jpg +0 -0
  195. data/hikiutils_yamane/hikiutils_yamane.key/Data/mt5@2x-107.jpg +0 -0
  196. data/hikiutils_yamane/hikiutils_yamane.key/Data/mt6@2x-108.jpg +0 -0
  197. data/hikiutils_yamane/hikiutils_yamane.key/Data/mt7@2x-109.jpg +0 -0
  198. data/hikiutils_yamane/hikiutils_yamane.key/Data/mt8@2x-110.jpg +0 -0
  199. data/hikiutils_yamane/hikiutils_yamane.key/Data/mt9@2x-111.jpg +0 -0
  200. data/hikiutils_yamane/hikiutils_yamane.key/Data/pasted-image-100.tiff +0 -0
  201. data/hikiutils_yamane/hikiutils_yamane.key/Data/pasted-image-98.tiff +0 -0
  202. data/hikiutils_yamane/hikiutils_yamane.key/Data/pasted-image-small-101.png +0 -0
  203. data/hikiutils_yamane/hikiutils_yamane.key/Data/pasted-image-small-99.png +0 -0
  204. data/hikiutils_yamane/hikiutils_yamane.key/Data/st0-113.jpg +0 -0
  205. data/hikiutils_yamane/hikiutils_yamane.key/Data/st1-114.jpg +0 -0
  206. data/hikiutils_yamane/hikiutils_yamane.key/Data/st2-115.jpg +0 -0
  207. data/hikiutils_yamane/hikiutils_yamane.key/Data/st3-116.jpg +0 -0
  208. data/hikiutils_yamane/hikiutils_yamane.key/Data/st4-117.jpg +0 -0
  209. data/hikiutils_yamane/hikiutils_yamane.key/Data/st5-118.jpg +0 -0
  210. data/hikiutils_yamane/hikiutils_yamane.key/Data/st6-119.jpg +0 -0
  211. data/hikiutils_yamane/hikiutils_yamane.key/Data/tile_paper_medgray-93.jpg +0 -0
  212. data/hikiutils_yamane/hikiutils_yamane.key/Index.zip +0 -0
  213. data/hikiutils_yamane/hikiutils_yamane.key/Metadata/BuildVersionHistory.plist +0 -8
  214. data/hikiutils_yamane/hikiutils_yamane.key/Metadata/DocumentIdentifier +0 -1
  215. data/hikiutils_yamane/hikiutils_yamane.key/Metadata/Properties.plist +0 -0
  216. data/hikiutils_yamane/hikiutils_yamane.key/preview-micro.jpg +0 -0
  217. data/hikiutils_yamane/hikiutils_yamane.key/preview-web.jpg +0 -0
  218. data/hikiutils_yamane/hikiutils_yamane.key/preview.jpg +0 -0
  219. data/hikiutils_yamane/hikiutils_yamane/hikiutils_yamane.001.jpeg +0 -0
  220. data/hikiutils_yamane/hikiutils_yamane/hikiutils_yamane.002.jpeg +0 -0
  221. data/hikiutils_yamane/hikiutils_yamane/hikiutils_yamane.003.jpeg +0 -0
  222. data/hikiutils_yamane/hikiutils_yamane/hikiutils_yamane.004.jpeg +0 -0
  223. data/hikiutils_yamane/hikiutils_yamane/hikiutils_yamane.005.jpeg +0 -0
  224. data/hikiutils_yamane/hikiutils_yamane/hikiutils_yamane.006.jpeg +0 -0
  225. data/hikiutils_yamane/hikiutils_yamane/hikiutils_yamane.007.jpeg +0 -0
  226. data/hikiutils_yamane/introduction.hiki +0 -10
  227. data/hikiutils_yamane/latex_dir/abstract.aux +0 -22
  228. data/hikiutils_yamane/latex_dir/abstract.tex +0 -9
  229. data/hikiutils_yamane/latex_dir/discussion.aux +0 -22
  230. data/hikiutils_yamane/latex_dir/discussion.tex +0 -9
  231. data/hikiutils_yamane/latex_dir/head.tex +0 -10
  232. data/hikiutils_yamane/latex_dir/hikiutils_yamane.aux +0 -10
  233. data/hikiutils_yamane/latex_dir/hikiutils_yamane.log +0 -344
  234. data/hikiutils_yamane/latex_dir/hikiutils_yamane.pdf +0 -0
  235. data/hikiutils_yamane/latex_dir/hikiutils_yamane.synctex.gz +0 -0
  236. data/hikiutils_yamane/latex_dir/hikiutils_yamane.tex +0 -62
  237. data/hikiutils_yamane/latex_dir/hikiutils_yamane.toc +0 -31
  238. data/hikiutils_yamane/latex_dir/introduction.aux +0 -26
  239. data/hikiutils_yamane/latex_dir/introduction.tex +0 -12
  240. data/hikiutils_yamane/latex_dir/jlisting.sty +0 -216
  241. data/hikiutils_yamane/latex_dir/method.aux +0 -46
  242. data/hikiutils_yamane/latex_dir/method.tex +0 -253
  243. data/hikiutils_yamane/latex_dir/pre.tex +0 -36
  244. data/hikiutils_yamane/latex_dir/results.aux +0 -50
  245. data/hikiutils_yamane/latex_dir/results.tex +0 -257
  246. data/hikiutils_yamane/method.hiki +0 -238
  247. data/hikiutils_yamane/results.hiki +0 -228
  248. data/hikiutils_yamane/test.rb +0 -10
  249. data/hikiutils_yamane/toc.hiki +0 -19
  250. data/lib/hikiutils.rb~ +0 -389
  251. data/lib/hikiutils_thor.rb~ +0 -323
@@ -1,36 +0,0 @@
1
- \documentclass[10pt,a4j]{article}
2
-
3
- \def\Vec#1{\mbox{\boldmath $#1$}}
4
- \usepackage[dvipdfmx]{graphicx}
5
-
6
- \setlength{\textheight}{275mm}
7
- \headheight 5mm
8
- \topmargin -20mm
9
- \textwidth 160mm
10
- \textheight 250mm
11
- \oddsidemargin -0mm
12
- \evensidemargin -5mm
13
-
14
- \pagestyle{empty}
15
- \makeatletter
16
- \def\@maketitle{%
17
- \newpage\null
18
- \vskip 2em%
19
- \begin{center}%
20
- \let\footnote\thanks
21
- {\large\bf \@title \par}%
22
- \vskip 1.5em%
23
- {\large\bf \@author \par}%
24
- \vskip 1.5em%
25
- {\small \@date}%
26
- \end{center}%
27
- }
28
- \makeatother
29
-
30
- %\documentclass[10pt, a4j]{article}
31
- %%\usepackage{citesort}
32
- \usepackage{amssymb}
33
- \usepackage[dvipdfmx]{graphicx}% 図を入れるときに使用
34
- \usepackage{wrapfig}% 図の周りに本文を流し込みたいときに使用
35
- \usepackage{subfigure}
36
- \usepackage{here}
@@ -1,50 +0,0 @@
1
- \relax
2
- \@writefile{toc}{\contentsline {section}{\numberline {4}結果}{15}}
3
- \@writefile{toc}{\contentsline {subsection}{\numberline {4.1}コマンドの命名原則}{15}}
4
- \@writefile{toc}{\contentsline {subsubsection}{\numberline {4.1.1}hikiutilsの想定利用形態}{15}}
5
- \@writefile{lof}{\contentsline {figure}{\numberline {4}{\ignorespaces hikiutilsがあらかじめ想定している利用形態.}}{16}}
6
- \newlabel{fig:002}{{4}{16}}
7
- \newlabel{default}{{4}{16}}
8
- \@writefile{toc}{\contentsline {subsubsection}{\numberline {4.1.2}コメンド名と振る舞いの詳細}{16}}
9
- \@writefile{lot}{\contentsline {table}{\numberline {1}{\ignorespaces コマンドオプションとshellコマンドの対応.}}{17}}
10
- \newlabel{table:ShellOption}{{1}{17}}
11
- \newlabel{default}{{1}{17}}
12
- \@writefile{toc}{\contentsline {paragraph}{open FILE}{17}}
13
- \@writefile{toc}{\contentsline {paragraph}{ls [FILE]}{17}}
14
- \@writefile{toc}{\contentsline {paragraph}{rsync}{17}}
15
- \@writefile{toc}{\contentsline {paragraph}{touch FILE}{18}}
16
- \@writefile{toc}{\contentsline {paragraph}{pwd}{18}}
17
- \@writefile{toc}{\contentsline {paragraph}{cd VAL}{18}}
18
- \@writefile{toc}{\contentsline {subsection}{\numberline {4.2}Thorによる実装}{18}}
19
- \@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.1}クラス初期化}{18}}
20
- \@writefile{lof}{\contentsline {figure}{\numberline {5}{\ignorespaces Thorのinitializeでのコード.}}{19}}
21
- \newlabel{fig:003}{{5}{19}}
22
- \newlabel{default}{{5}{19}}
23
- \@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2}コマンド定義}{20}}
24
- \@writefile{lof}{\contentsline {figure}{\numberline {6}{\ignorespaces Thorにおけるコマンド記述のひな形.}}{20}}
25
- \newlabel{fig:004}{{6}{20}}
26
- \newlabel{default}{{6}{20}}
27
- \@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.3}CLIの実行プロセス}{21}}
28
- \@writefile{lof}{\contentsline {figure}{\numberline {7}{\ignorespaces CLIの実行プロセス.}}{22}}
29
- \newlabel{fig:006}{{7}{22}}
30
- \newlabel{default}{{7}{22}}
31
- \@setckpt{results}{
32
- \setcounter{page}{24}
33
- \setcounter{equation}{0}
34
- \setcounter{enumi}{2}
35
- \setcounter{enumii}{0}
36
- \setcounter{enumiii}{0}
37
- \setcounter{enumiv}{0}
38
- \setcounter{footnote}{0}
39
- \setcounter{mpfootnote}{0}
40
- \setcounter{part}{0}
41
- \setcounter{section}{4}
42
- \setcounter{subsection}{2}
43
- \setcounter{subsubsection}{3}
44
- \setcounter{paragraph}{0}
45
- \setcounter{subparagraph}{0}
46
- \setcounter{figure}{7}
47
- \setcounter{table}{1}
48
- \setcounter{lstnumber}{14}
49
- \setcounter{lstlisting}{0}
50
- }
@@ -1,257 +0,0 @@
1
-
2
- \section{結果}
3
- \subsection{コマンドの命名原則}
4
- 機能ごとの動作はコマンドのオプションによって指定される.
5
- このオプションにどのような名前をつけるかは,どれだけコマンドを覚えやすいかという
6
- 意味で重要である.コマンドの振る舞いを的確に表す名称をつける必要がある.
7
-
8
- この振る舞いとしてもっとも受け入れやすいのがshellで用意されているコマンドである.
9
- pwd, ls, rm, touch, openなどはもっとも直感的に動作がわかるコマンドである.
10
- hikiutilsの振る舞いを予測できるシェルコマンドと同じ名前でオプションを提供する.
11
-
12
- \subsubsection{hikiutilsの想定利用形態}
13
- ここでhikiutilsがあらかじめ想定している利用形態を解説する.
14
-
15
- \begin{figure}[htbp]\begin{center}
16
- \includegraphics[width=12cm,bb= 0 0 937 753]{../figs/./hikiutils_yamane.002.jpg}
17
- \caption{hikiutilsがあらかじめ想定している利用形態.}
18
- \label{fig:002}
19
- \label{default}\end{center}\end{figure}
20
- hikiutilsは,
21
-
22
- \begin{itemize}
23
- \item local PCとglobal serverとが用意されており,
24
- \item それらのデータをrsyncで同期する
25
- \end{itemize}
26
- ことで動作することを想定される.これは,ネットに繋がっていないオフラインの状況でも
27
- テキストなどの編集が可能で,さらに不用意な書き換えを防ぐための機構である.さらに,
28
- どちらもが何かあった時のバックアップともなって,ミスによる手戻りを防いでいる.
29
-
30
- これらの設定は,~/.hikircにyaml形式で記述・保存されている.
31
- \begin{lstlisting}[style=,basicstyle={\scriptsize\ttfamily}]
32
- bob% cat ~/.hikirc
33
- :srcs:
34
- - :nick_name: new_ist
35
- :local_dir: "/Users/bob/Sites/new_ist_data/ist_data"
36
- :local_uri: http://localhost/ist
37
- :global_dir: nishitani@ist.ksc.kwansei.ac.jp:/home/nishitani/new_ist_data/ist_data
38
- :global_uri: http://ist.ksc.kwansei.ac.jp/~nishitani/
39
- - :nick_name: dmz0
40
- :local_dir: "/Users/bob/Sites/nishitani0/Internal/data"
41
- :local_uri: http://localhost/~bob/nishitani0/Internal
42
- :global_dir: bob@dmz0:/Users/bob/Sites/nishitani0/Internal/data
43
- :global_uri: http://nishitani0.kwansei.ac.jp/~bob/nishitani0/Internal
44
- \end{lstlisting}
45
- また,一般的に一人のユーザがいくつものまとまりとしてのlocal-globalペアを
46
- 保持して管理することが普通である.それぞれにnicke\_nameをつけて管理している.
47
- \begin{lstlisting}[style=,basicstyle={\scriptsize\ttfamily}]
48
- bob% hiki -s
49
- hikiutils: provide utilities for helping hiki editing.
50
- "open -a mi"
51
- target_no:1
52
- editor_command:open -a mi
53
- id | name | local directory | global uri
54
- -----------------------------------------------------------------------------
55
- 0 | new_ist | /Users/bob/Sites/new_ist_data/ist_data | http://ist.ksc.k
56
- *1 | dmz0 | /Users/bob/Sites/nishitani0/Internal/data | http://nishitani
57
- 2 | ist | /Users/bob/Sites/hiki-data/data | http://ist.ksc.k
58
- 3 | new_maple | /Users/bob/Sites/new_ist_data/maple_hiki_d| http://ist.ksc.k
59
- \end{lstlisting}
60
- とすると,それらの一覧と,いまtargetにしているnick\_nameディレクリが表示される.
61
-
62
- \subsubsection{コメンド名と振る舞いの詳細}
63
- 検討の結果コマンドを以下の表\ref{table:ShellOption}のとおり書き換えることとする.
64
- 上部に記した,特によく使うコマンドに関しては,shellでよく使われるコマンド名と一致するにようにした.
65
-
66
- \begin{table}[htbp]\begin{center}
67
- \caption{コマンドオプションとshellコマンドの対応.}
68
- \label{table:ShellOption}
69
- \begin{tabular}{llll}
70
- \hline
71
- 変更前 &変更後 &動作の解説 \\ \hline
72
- edit FILE &open &open file \\
73
- list [FILE] &ls &list files \\
74
- rsync &rsync &rsync files \\
75
- update FILE &touch &update file \\
76
- show &pwd &show nick\_names \\
77
- target VAL &cd &targetを変える,cdとのメタファ \\
78
- & \\
79
- move [FILE] &mv &move file \\
80
- remove [FILE] &rm &remove files \\
81
- add & &add sources info \\
82
- checkdb & &check database file \\
83
- datebase FILE &db &read datebase file \\
84
- display FILE &show &display converted hikifile \\
85
- euc FILE & &translate file to euc \\
86
- help [COMMAND] &-h &Describe available commands \\
87
- version &-v &show program version \\
88
- \hline
89
- \end{tabular}
90
- \label{default}
91
- \end{center}\end{table}
92
- %for inserting separate lines, use \hline, \cline{2-3} etc.
93
-
94
- それぞれの意図を動作の解説として記述する.
95
-
96
- \paragraph{open FILE}
97
- ファイルを編集のためにeditorでopen.Editorは~/.hikircに
98
- \begin{quote}\begin{verbatim}
99
- :editor_command: open -a mi
100
- \end{verbatim}\end{quote}
101
- として保存されている.open -a miをemacsなどに適宜変更して使用.
102
-
103
- \paragraph{ls [FILE]}
104
- local\_dirにあるファイル名を[FILE*]として表示.例えば,hikiutils\_yamane以下の拡張子が
105
- ついたファイルを表示.hikiシステムではtextディレクトリーは階層構造を取ることができない.
106
- 西谷研ではdirectoryの代わりにスネーク表記で階層構造を表している.
107
-
108
- \paragraph{rsync}
109
- local\_dirの内容をglobal\_dirにrsyncする.逆方向は同期に誤差が生じたり,permissionが
110
- おかしくなるので,現在のところ一方向の同期のみとしている.したがって,作業手順としては
111
- テキストの変更はlocal\_dirで読み行うようにしている.
112
-
113
- \paragraph{touch FILE}
114
- loccal\_dirで書き換えたFILEの内容をlocal\_uriに反映させ,ブラウザで表示.シェルコマンドの
115
- touchによって,変更時間を現在に変え,最新状態とするのに似せてコマンド名をtouchとしている.
116
-
117
- \paragraph{pwd}
118
- nick\_nameの一覧とtargetを表示,current targetをcurrent dirとみなして,
119
- コマンド名をpwdとした.
120
-
121
- \paragraph{cd VAL}
122
- targetを変える,change directoryとのメタファ.ただし,いまのところnick\_nameでは
123
- 対応しておらず,nick\_nameの番号をVAL入力することで変更する.
124
-
125
- \subsection{Thorによる実装}
126
- 手法のところで概観した通り,Thorを用いることで記述の簡略化が期待できる.ここでは,実際に書き換える前後,すなわちoptparse版とThor版の対応するコードを比較することで,以下の具体的な違い
127
-
128
- \begin{itemize}
129
- \item クラス初期化
130
- \item コマンド定義
131
- \item CLIの実行プロセス
132
- \end{itemize}
133
- について詳しく検討を行う.
134
-
135
- \subsubsection{クラス初期化}
136
- Thorのinitializeでのコードの呼び出し関係は図\ref{fig:003}の通りである.
137
-
138
- \begin{figure}[htbp]\begin{center}
139
- \includegraphics[width=12cm,bb= 0 0 937 753]{../figs/./hikiutils_yamane.003.jpg}
140
- \caption{Thorのinitializeでのコード.}
141
- \label{fig:003}
142
- \label{default}\end{center}\end{figure}
143
- この動きを順を追って説明すると
144
-
145
- \begin{enumerate}
146
- \item Hikithor::CLI.start(ARGV)が呼ばれる
147
- \item initializeメソッドが呼ばれる
148
- \item これではThorのinitializeメソッドが呼ばれない
149
- \item superを書くことでThorのinitializeメソッドが呼ばれる
150
- \end{enumerate}
151
- となる.
152
-
153
- この実装コードは次の通りである.
154
- \begin{lstlisting}[style=customRuby,basicstyle={\scriptsize\ttfamily}]
155
-
156
- module Hikithor
157
-
158
- DATA_FILE=File.join(ENV['HOME'],'.hikirc')
159
- attr_accessor :src, :target, :editor_command, :browser, :data_name, :l_dir
160
-
161
- class CLI < Thor
162
- def initialize(*args)
163
- super
164
- @data_name=['nick_name','local_dir','local_uri','global_dir','global_uri']
165
- data_path = File.join(ENV['HOME'], '.hikirc')
166
- DataFiles.prepare(data_path)
167
-
168
- ...以下略...
169
- end
170
- \end{lstlisting}
171
- optparseではrequireでoptparseを呼びoptparseのinitializeを定義する必要はないが,Thorはinitializeを定義する必要がある.Thorの定義方法はrequireでThorを呼びCLIクラスで継承し,initializeメソッドにsuperを書くことでThorのinitializeが呼ばれる.initializeメソッド内ではThorの初期設定がされていないため,スーパークラスのメソッドを読み出してくれるsuperを書き加えることで図のようにinitializeメソッド内でThorのinitilalizeメソッドが呼ばれ定義される.
172
-
173
- \subsubsection{コマンド定義}
174
- Thorではoptparseのような登録処理はない.コマンド記述のひな形は図\ref{fig:004}の通りである.
175
-
176
- \begin{figure}[htbp]\begin{center}
177
- \includegraphics[width=12cm,bb= 0 0 937 753]{../figs/./hikiutils_yamane.004.jpg}
178
- \caption{Thorにおけるコマンド記述のひな形.}
179
- \label{fig:004}
180
- \label{default}\end{center}\end{figure}
181
- このひな形を順を追って説明する.
182
-
183
- \begin{enumerate}
184
- \item desc以降にコマンド名と,その説明が記述される.これらはコマンドhelpで一覧として表示させる
185
- \item mapによって別のコマンド名でも実行できるように定義される.
186
- \item defで定義されたメソッドの実行コード
187
- \end{enumerate}
188
- この実装コードは次の通りである.
189
- \begin{lstlisting}[style=customRuby,basicstyle={\scriptsize\ttfamily}]
190
- desc 'show,--show', 'show sources'
191
- map "--show" => "show"
192
- def show
193
- printf("target_no:%i\n",@src[:target])
194
- printf("editor_command:%s\n",@src[:editor_command])
195
- ,,,以下略...
196
- end
197
- \end{lstlisting}
198
- Thorではdescで一覧を表示されるコマンド名,コマンドの説明を登録する.しかし,ここで記述したコマンドは単に一覧で表示させるためのものであり,実際に実行される時に呼び出すコマンド名は,defで定義された名前である.Thorでは処理実行を行うメソッド名がコマンド名となり,コマンド名1つが対応する.
199
-
200
- これに別名を与えるために利用されるキーワードがmapである.
201
- \begin{quote}\begin{verbatim}
202
- map A => B
203
- \end{verbatim}\end{quote}
204
- mapとはBと呼ばれるメソッドをAでも呼べるようにしてくれるものである.
205
- よって,これを使うことでコマンドの別名を指定することができる.
206
-
207
- 以上より,Thorではコマンドの指定と処理にはdesc,map,処理メソッドだけで済む.optparseではコマンドを登録するためのメソッドと処理メソッドの両方が必要になっていた.一方Thorでは,処理メソッドが直接コマンド名となるため記述が簡潔になる.
208
-
209
- \subsubsection{CLIの実行プロセス}
210
- CLIの実行プロセスは図\ref{fig:006}の通りである.
211
-
212
- \begin{figure}[htbp]\begin{center}
213
- \includegraphics[width=12cm,bb= 0 0 937 753]{../figs/./hikiutils_yamane.006.jpg}
214
- \caption{CLIの実行プロセス.}
215
- \label{fig:006}
216
- \label{default}\end{center}\end{figure}
217
- ThorにおけるCLIの実行プロセスは次の通りである.
218
-
219
- \begin{enumerate}
220
- \item hiki\_thorのHikithor::CLI.start(ARGV)でhikiutils\_thor.rbのCLIクラスを呼ぶ
221
- \item hikiutils\_thor.rbのCLIクラスのメソッドを順に実行していく
222
- \end{enumerate}
223
- Thorではstart(ARGV)を呼び出すことでCLIを開始する.Hikithor::CLI.start(ARGV)を実行されることによりrequireで呼ばれているhikiutils\_thor.rbのCLIコマンドを順に実行する.そして,入力されたコマンドと一致するメソッドを探し,そのコマンドの処理が実行される.
224
-
225
- exe/hiki\_thorの具体的な記述は次の通りである.
226
- \begin{lstlisting}[style=customRuby,basicstyle={\scriptsize\ttfamily}]
227
- #!/usr/bin/env ruby
228
-
229
- require "hikiutils_thor"
230
-
231
- Hikithor::CLI.start(ARGV)
232
- \end{lstlisting}
233
- hikiutilsのoptparseバージョンと同様に「require "hikituils\_thor"」ではlib/hikiutils\_thor.rbを読み出してくることを期待している.
234
- ここでもgemspecファイルでlibへのロードパスの記述がされているため,hikiutils\_thor.rbを参照することができる.
235
- 「Hikithor::CLI.start(ARGV)」ではlib/hikiutils\_thor.rbのHikithorモジュールCommandクラスを実行する記述が成されている.
236
-
237
- 呼び出される側のlib/hikiutils\_thor.rbの具体的な記述は次の通りである.
238
- \begin{lstlisting}[style=customRuby,basicstyle={\scriptsize\ttfamily}]
239
-
240
- module Hikithor
241
-
242
- DATA_FILE=File.join(ENV['HOME'],'.hikirc')
243
- attr_accessor :src, :target, :editor_command, :browser, :data_name, :l_dir
244
-
245
- class CLI < Thor
246
- def initialize(*args)
247
- super
248
- @data_name=['nick_name','local_dir','local_uri','global_dir','global_uri']
249
- data_path = File.join(ENV['HOME'], '.hikirc')
250
- DataFiles.prepare(data_path)
251
- ...以下略...
252
- \end{lstlisting}
253
- 通常のclass呼び出しで生成されるようになっている.
254
- rubyにおいても通常のclassからの実行では,newした後にexeする.
255
- しかし,Thorにおいてはstartという関数名で初期化・実行される.
256
- これは,rubyに付属しているRakefileの実行方法とよく似た構文となっている.
257
-
@@ -1,238 +0,0 @@
1
- {{toc}}
2
- !方法
3
- !!optparseとThorの比較
4
- 今回の研究対象のhikiutilsは,optparseというコマンドライン解析ライブラリで実装されている.
5
- 本研究ではこの代替ライブラリとしてThorの採用を検討した.
6
- 本章の最初では,FizzBuzzという簡単なコードを例にoptparseとThorにより作成するコマンドライン解析コードの比較を行う.FizzBuzzはThorの使い方を解説した記事{{cite(1-2)}}で紹介されている.比較しやすくするためoptparseでFizzBuzzを新たに実装した.
7
-
8
- !!!Thor
9
- Thorとは,コマンドラインツールの作成を支援するライブラリのことである.gitやbundlerのようにサブコマンドを含むコマンドラインツールを簡単に作成することができる{{cite(1-2)}}.
10
-
11
- Thorの基本的な流れとしては
12
- #Thorを継承したクラスのメソッドがコマンドになる
13
- #クラス.start(ARGV)でコマンドラインの処理をスタートする
14
- である{{cite(1-2)}}.
15
-
16
- startに渡す引数が空の場合,Thorはクラスのヘルプリストを出力する.また,Thorはサブコマンドやサブサブコマンドも容易に作ることができる.
17
-
18
- 以下に示したコードがThorで記述されたfizzbuzzである.
19
-
20
- <<< ruby
21
- module Fizzbuzz
22
- class CLI < Thor
23
-
24
- desc 'fizzbuzz', 'Get fizzbuzz result from limit number'
25
- def fizzbuzz(limit)
26
- print Fizzbuzz.fizzbuzz(limit).join(',')
27
- exit
28
- end
29
-
30
- desc 'version', 'version'
31
- def version
32
- puts Fizzbuzz::VERSION
33
- end
34
- end
35
- end
36
- >>>
37
-
38
- このコードもoptparseのfizzbuzzと同様fizzbuzzとversionのコマンドを実行させる.
39
- !!!!fizzbuzzメソッド,versionメソッド
40
- descでコマンド一覧で表示させるコマンド名と説明を書く.メソッド内ではそれぞれのコマンドの処理内容が書かれている.
41
-
42
- !!!optparse
43
- optparseとは,getoptよりも簡便で,柔軟性に富み,かつ強力なコマンドライン解析ライブラリである.optparseでは,より宣言的なスタイルのコマンドライン解析手法,すなわちOptionParserのインスタンスでコマンドラインを解析するという手法をとっている.これを使うと,GNU/POSIX構文でオプションを指定できるだけでなく,使用法やヘルプメッセージの生成も行える{{cite(1-3)}}.利用頻度はあまり高くないが古くから開発され,使用例が広く紹介されている.
44
-
45
- optparseの基本的な流れとしては
46
- #OptionParserオブジェクトoptを生成する
47
- #オプションを取り扱うブロックをopt.onに登録する
48
- #opt.parse(ARGV)でコマンドラインを実際にparseする
49
- である.
50
-
51
- OptionParserはコマンドラインのオプション取り扱うためのクラスであるためオブジェクトoptを生成されopt.onにコマンドを登録することができる.しかし,OptionParser\#onにはコマンドが登録されているだけであるため,OptionParser\#parseが呼ばれた時,コマンドラインにオプションが指定されていれば実行される.optparseにはデフォルトとして--helpと--versionオプションを認識する{{cite(1-4)}}.
52
-
53
- 以下に示したコードがoptparseで記述したfizzbuzzである.
54
-
55
- <<< ruby
56
- module Fizzbuzz
57
- class Command
58
-
59
- def self.run(argv)
60
- new(argv).execute
61
- end
62
-
63
- def initialize(argv)
64
- @argv = argv
65
- end
66
-
67
- def execute
68
- options = Options.parse!(@argv)
69
- sub_command = options.delete(:command)
70
- case sub_command
71
- when 'fizzbuzz'
72
- fizzbuzz(options[:id])
73
- when 'version'
74
- version
75
- end
76
- end
77
-
78
- def fizzbuzz(limit_number)
79
- (0..limit_number).map do |num|
80
- if (num % 15).zero? then print 'FizzBuzz'
81
- elsif (num % 5).zero? then print 'Buzz'
82
- elsif (num % 3).zero? then print 'Fizz'
83
- else print num.to_s
84
- end
85
- print ' '
86
- end
87
- end
88
-
89
- def version
90
- puts Fizzbuzz::VERSION
91
- exit
92
- end
93
- end
94
- end
95
- >>>
96
-
97
- このコードはfizzbuzzとversionをコマンドとして実行できる.
98
- !!!!runメソッド
99
- コマンド実行を行うためのメソッドであり,argv配列を代入することでexecuteメソッドを実行する.
100
- !!!!initializeメソッド
101
- 初期化を行うメソッドである.
102
- <<<
103
- @argv = argv
104
- >>>
105
- こうすることでargvをクラス内で利用できるようにする.
106
- !!!!executeメソッド
107
- 上記でoptparseではopt.onにコマンドを登録する必要があると説明したが,opt.onで登録できるものはハイフンがついたコマンドだけであり,ハイフンなしのコマンドの登録はこのようになる.
108
-
109
- argv配列の解析を行うOptions.parse!(@argv)をoptionsに代入して解析を行いsub_commandに代入する.sub_commandがfizzbuzzであればfizzbuzz(options[:id])メソッドを実行,versionであればversionメソッドを実行する.
110
- !!!!fizzbuzzメソッド
111
- 引数としてlimit_numberを受け取り,0〜limit_numberまでの数字を繰り返す.numが15であればFizzbuzzを表示,5であればBuzzを表示,3であればFizzを表示,それ以外は数字を表示し,その後に空白を表示する.
112
- !!!!versionメソッド
113
- fizzbuzzのバージョンを表示する.
114
-
115
-
116
- !!既存のhikiutilsのコマンド解説
117
- 既存のhikiutilsはコマンド解析ライブラリのoptparseを用いて,コマンドの処理を行っている.
118
- optparseの特徴は,「コマンドの登録,実行method」に分けて記述することが期待されている.
119
- また,CLIの起動の仕方が特徴的である.この二つを取り出して,動作とコードを説明する.
120
-
121
- !!!コマンドの登録と実行メソッド
122
- optparseのコマンド登録と実行メソッドの呼び出し関係は図{{ref(fig:005)}}の通りである.
123
-
124
- !!!!caption:(fig:005)コマンドの登録と実行メソッドの対応.
125
- {{attach_view(hikiutils_yamane.005.jpg,hikiutils_yamane)}}
126
-
127
- optparseでは以下の通り,コマンドの登録と実行が行われる.
128
- #OptionParserオブジェクトoptを生成
129
- #optにコマンドを登録
130
- #入力されたコマンドの処理のメソッドへ移動
131
-
132
- この実装コードは次の通りである.
133
- <<< ruby
134
- def execute
135
- @argv << '--help' if @argv.size==0
136
- command_parser = OptionParser.new do |opt|
137
- opt.on('-v', '--version','show program Version.') { |v|
138
- opt.version = HikiUtils::VERSION
139
- puts opt.ver
140
- }
141
- opt.on('-s', '--show','show sources') {show_sources}
142
- opt.on('-a', '--add','add sources info') {add_sources }
143
- opt.on('-t', '--target VAL','set target id') {|val| set_target(val)}
144
- opt.on('-e', '--edit FILE','open file') {|file| edit_file(file) }
145
-
146
- ...省略...
147
-
148
- end
149
- begin
150
- command_parser.parse!(@argv)
151
- rescue=> eval
152
- p eval
153
- end
154
- dump_sources
155
- exit
156
- end
157
-
158
- def show_sources()
159
- printf("target_no:%i\n",@src[:target])
160
- printf("editor_command:%s\n",@src[:editor_command])
161
-
162
- ...省略...
163
-
164
- end
165
-
166
- 以下略
167
-
168
- >>>
169
- optparseではOptionParserオブジェクトoptの生成を行い,コマンドをoptに登録することでコマンドを作成することができる.しかし,これはコマンドを登録しているだけでコマンドの一覧ではこれを表示することができるが,コマンドの実行を行うためには実行を行うためのメソッドを作成する必要がある.optparseでのコマンドの実行はoptで登録されたコマンドが入力されることでそれぞれのコマンドの処理を行うメソッドに移動し処理を行う.しかし,このコマンド登録はハイフンを付けたコマンドしか登録ができず,ハイフンなしのコマンド登録はまた別の手段でやらなくてはいけない.
170
-
171
- !!!CLIの実行プロセス
172
- optparseを用いた場合のCLIの実行プロセスは図{{ref(fig:007)}}の通りとなる.
173
-
174
- !!!!caption:(fig:007)CLIの実行プロセス.
175
- {{attach_view(hikiutils_yamane.007.jpg,hikiutils_yamane)}}
176
-
177
- CLIの実行プロセスは次の通りとなる.
178
- #HikiのHikiUtils::Command.run(ARGV)でhikiutils.rbのrunメソッドを呼ぶ
179
- #new(argv).executeでexecuteメソッドが実行される
180
-
181
- optparseではHikiutils::Command.run(ARGV)で実行され,requireで呼び出されたhikiutils.rbのrunメソッドが実行される.そこでコマンドを登録しているexecuteメソッドへ移動し入力したコマンドと対応させる.そして,対応したコマンドの処理が行われるメソッドに移動することで実行される.このようにoptparseでは実行を行うためのメソッドが必要である.
182
- !!!コード
183
-
184
- optparseの呼び出し側のexe/hikiのコードは次の通りである.
185
- <<< ruby
186
- #!/usr/bin/env ruby
187
-
188
- require "hikiutils"
189
-
190
- HikiUtils::Command.run(ARGV)
191
- >>>
192
- 「require "hikituils"」ではlib/hikiutils.rbを読み出してくることを期待している.
193
- これはgemspecファイルでlibへのロードパスの記述がされているため,hikiutils.rbを参照することができる.
194
- 「Hikiuils::Command.run(ARGV)」ではlib/hikiutils.rbのHikiUtilsモジュールCommandクラスのrunメソッドを実行する記述が成されている.
195
-
196
-
197
- また呼び出される側のlib/hikiutils.rbのrunおよびexecute部のコードは次の通りとなる.
198
- <<< ruby
199
- def self.run(argv=[])
200
- print "hikiutils: provide utilities for helping hiki editing.\n"
201
- new(argv).execute
202
- end
203
-
204
- def execute
205
- @argv << '--help' if @argv.size==0
206
- command_parser = OptionParser.new do |opt|
207
- opt.on('-v', '--version','show program Version.') { |v|
208
- opt.version = HikiUtils::VERSION
209
- puts opt.ver
210
- }
211
- opt.on('-s', '--show','show sources') {show_sources}
212
- opt.on('-a', '--add','add sources info') {add_sources }
213
- opt.on('-t', '--target VAL','set target id') {|val| set_target(val) }
214
- opt.on('-e', '--edit FILE','open file') {|file| edit_file(file) }
215
- opt.on('-l', '--list [FILE]','list files') {|file| list_files(file) }
216
- opt.on('-u', '--update FILE','update file') {|file| update_file(file) }
217
- opt.on('-r', '--rsync','rsync files') {rsync_files}
218
- opt.on('--database FILE','read database file') {|file| db_file(file)}
219
- opt.on('--display FILE','display converted hikifile') {|file| display(f\
220
- ile)}
221
- opt.on('-c', '--checkdb','check database file') {check_db}
222
- opt.on('--remove FILE','remove file') {|file| remove_file(file)}
223
- opt.on('--move FILES','move file1,file2',Array) {|files| move_file(file\
224
- s)}
225
- opt.on('--euc FILE','translate file to euc') {|file| euc_file(file) }
226
- opt.on('--initialize','initialize source directory') {dir_init() }
227
- end
228
- begin
229
- command_parser.parse!(@argv)
230
- rescue=> eval
231
- p eval
232
- end
233
- dump_sources
234
- exit
235
- end
236
- >>>
237
- runメソッドでは「hikiutils: provide utilities for helping hiki editing.」を表示させ,executeメソッドを実行させる.
238
- executeメソッドでは最初に「@argv << '--help' if @argv.size==0」と記述する.これはもしargv配列の中身が空であればargv配列に'--help'を代入する.「command_parser = OptionParser.new do |opt|」ではOptionParserオブジェクトがoptを生成しコマンドを登録していき,command_parserに代入する.そして,「command_parser.parse!(@argv)」では@argvにある文字列をcommand_parserでparseする.つまり,ここでは入力されたコマンドを解析し,登録されたコマンドと一致すればその処理が行われる.もし,一致しなければevalメソッドで表示する.