hikiutils 0.2.3.12 → 0.2.3.13

Sign up to get free protection for your applications and to get access to all the features.
Files changed (58) hide show
  1. checksums.yaml +4 -4
  2. data/hikiutils_bob/Rakefile +3 -2
  3. data/hikiutils_yamane/Rakefile +148 -30
  4. data/hikiutils_yamane/Rakefile~ +477 -0
  5. data/hikiutils_yamane/command.hiki +13 -13
  6. data/hikiutils_yamane/compare.hiki +96 -5
  7. data/hikiutils_yamane/figs/hikiutils_yamane.001.jpg +0 -0
  8. data/hikiutils_yamane/figs/hikiutils_yamane.002.jpg +0 -0
  9. data/hikiutils_yamane/figs/hikiutils_yamane.003.jpg +0 -0
  10. data/hikiutils_yamane/figs/hikiutils_yamane.004.jpg +0 -0
  11. data/hikiutils_yamane/figs/hikiutils_yamane.005.jpg +0 -0
  12. data/hikiutils_yamane/figs/hikiutils_yamane.006.jpg +0 -0
  13. data/hikiutils_yamane/figs/hikiutils_yamane.007.jpg +0 -0
  14. data/hikiutils_yamane/hikiutils_yamane/hikiutils_yamane.001.jpeg +0 -0
  15. data/hikiutils_yamane/hikiutils_yamane/hikiutils_yamane.002.jpeg +0 -0
  16. data/hikiutils_yamane/hikiutils_yamane/hikiutils_yamane.003.jpeg +0 -0
  17. data/hikiutils_yamane/hikiutils_yamane/hikiutils_yamane.004.jpeg +0 -0
  18. data/hikiutils_yamane/hikiutils_yamane/hikiutils_yamane.005.jpeg +0 -0
  19. data/hikiutils_yamane/hikiutils_yamane/hikiutils_yamane.006.jpeg +0 -0
  20. data/hikiutils_yamane/hikiutils_yamane/hikiutils_yamane.007.jpeg +0 -0
  21. data/hikiutils_yamane/hikiutils_yamane.hiki +6 -10
  22. data/hikiutils_yamane/introduction.hiki +5 -5
  23. data/hikiutils_yamane/latex_dir/%CA%FD/313/241.aux +21 -0
  24. data/hikiutils_yamane/latex_dir/abstract.aux +2 -2
  25. data/hikiutils_yamane/latex_dir/command.aux +15 -14
  26. data/hikiutils_yamane/latex_dir/command.log +0 -0
  27. data/hikiutils_yamane/latex_dir/command.tex +15 -14
  28. data/hikiutils_yamane/latex_dir/compare.aux +11 -5
  29. data/hikiutils_yamane/latex_dir/compare.tex +97 -5
  30. data/hikiutils_yamane/latex_dir/hikiutils_yamane.aux +6 -3
  31. data/hikiutils_yamane/latex_dir/hikiutils_yamane.log +113 -162
  32. data/hikiutils_yamane/latex_dir/hikiutils_yamane.pdf +0 -0
  33. data/hikiutils_yamane/latex_dir/hikiutils_yamane.synctex.gz +0 -0
  34. data/hikiutils_yamane/latex_dir/hikiutils_yamane.tex +15 -18
  35. data/hikiutils_yamane/latex_dir/hikiutils_yamane.toc +31 -26
  36. data/hikiutils_yamane/latex_dir/introduction.aux +6 -4
  37. data/hikiutils_yamane/latex_dir/introduction.tex +5 -4
  38. data/hikiutils_yamane/latex_dir/jlisting.sty +216 -0
  39. data/hikiutils_yamane/latex_dir/optparse.aux +11 -9
  40. data/hikiutils_yamane/latex_dir/optparse.tex +11 -8
  41. data/hikiutils_yamane/latex_dir/pre.tex +36 -0
  42. data/hikiutils_yamane/latex_dir/thor.aux +13 -13
  43. data/hikiutils_yamane/latex_dir/thor.tex +9 -11
  44. data/hikiutils_yamane/optparse.hiki +7 -6
  45. data/hikiutils_yamane/test.rb +10 -0
  46. data/hikiutils_yamane/thor.hiki +4 -5
  47. data/lib/hikiutils/version.rb +1 -1
  48. data/lib/hikiutils_thor.rb +39 -39
  49. data/lib/hikiutils_thor.rb~ +3 -4
  50. data/lib/templates/Rakefile_hiki_sync +3 -2
  51. metadata +15 -9
  52. data/hikiutils_yamane/hikiutils_yamane/hikiutils_yamane.001.jpg +0 -0
  53. data/hikiutils_yamane/hikiutils_yamane/hikiutils_yamane.002.jpg +0 -0
  54. data/hikiutils_yamane/hikiutils_yamane/hikiutils_yamane.003.jpg +0 -0
  55. data/hikiutils_yamane/hikiutils_yamane/hikiutils_yamane.004.jpg +0 -0
  56. data/hikiutils_yamane/hikiutils_yamane/hikiutils_yamane.005.jpg +0 -0
  57. data/hikiutils_yamane/hikiutils_yamane/hikiutils_yamane.006.jpg +0 -0
  58. data/hikiutils_yamane/hikiutils_yamane/hikiutils_yamane.007.jpg +0 -0
@@ -6,24 +6,20 @@
6
6
  ![[序論|hikiutils_yamane_introduction]]
7
7
  !方法
8
8
  //他人の仕事,あるものを探す
9
- !![[hikiutils_yamane_compare]]
9
+ !![[optparseとthorの比較|hikiutils_yamane_compare]]
10
10
  !![[既存のhikiutilsのコマンド解説|hikiutils_yamane_optparse]]
11
11
  !結果
12
12
  //自分の仕事,ないものをつくる
13
13
  !![[コマンドの命名原則|hikiutils_yamane_command]]
14
14
  !![[hikiutilsのthorのコード解説|hikiutils_yamane_thor]]
15
15
 
16
- !参考文献
17
- [1-1] hikidoc, https://rubygems.org/gems/hikidoc/versions/0.1.0, https://github.com/hiki/hikidoc,2017/1/30 アクセス.
18
-
16
+ !reference:
17
+ :1-1: hikidoc, https://rubygems.org/gems/hikidoc/versions/0.1.0, https://github.com/hiki/hikidoc,2017/1/30 アクセス.
19
18
  // 「hiki」,hikiwiki.org/ja/about.html ,2017/1/30 アクセス.
20
19
  // 「hikiutils」,https://rubygems.org/gems/hikiutils ,2017/1/30 アクセス.
21
20
  // 「The Ruby Toolbox」, CLI Option Parsers,https://www.ruby-toolbox.com/categories/CLI_Option_Parsers ,2017/1/30 アクセス.
22
- [1-2] 「Thorの使い方まとめ」, http://qiita.com/succi0303/items/32560103190436c9435b ,2017/1/30 アクセス.
23
-
24
- [1-3]15.5. optparse - コマンドラインオプション解析器」, http://docs.python.jp/2/library/optparse.html ,2017/1/30 アクセス.
25
-
26
- [1-4] 「library optparse」, https://docs.ruby-lang.org/ja/latest/library/optparse.html ,2017/1/30 アクセス.
27
-
21
+ :1-2: 「Thorの使い方まとめ」, http://qiita.com/succi0303/items/32560103190436c9435b ,2017/1/30 アクセス.
22
+ :1-3: 「15.5. optparse - コマンドラインオプション解析器」, http://docs.python.jp/2/library/optparse.html ,2017/1/30 アクセス.
23
+ :1-4:library optparse」, https://docs.ruby-lang.org/ja/latest/library/optparse.html ,2017/1/30 アクセス.
28
24
 
29
25
 
@@ -1,10 +1,10 @@
1
1
  !序論
2
- hikiは,hiki記法を用いたwiki cloneです.wikiはウォード・カニンガムが作ったwikiwikiwebを源流とするhome page制作を容易にするシステムで,hikiもwikiの基本要求仕様を満足するシステムを提供しています.wikiの特徴であるweb上で編集する機能を提供しています.これを便宜上hiki web systemと呼びます.図にある通り,一般的な表示画面の他に,編集画面が提供されており,ユーザーはこの編集画面からコンテンツを編集することが可能です.リンクやヘッダー,リスト,引用,表,図の表示などの基本テキストフォーマットが用意されています.
2
+ hikiは,hiki記法を用いたwiki cloneである.wikiはウォード・カニンガムが作ったwikiwikiwebを源流とするhome page制作を容易にするシステムで,hikiもwikiの基本要求仕様を満足するシステムを提供する.wikiの特徴であるweb上で編集する機能を提供する.これを便宜上hiki web systemと呼ぶ.図にある通り,一般的な表示画面の他に,編集画面が提供されており,ユーザーはこの編集画面からコンテンツを編集することが可能である.リンクやヘッダー,リスト,引用,表,図の表示などの基本テキストフォーマットが用意されている.
3
3
 
4
- hiki web systemの実際の基本動作は,hiki.cgiプログラムを介して行われています.こちらを便宜上hiki systemと呼びます.図に従ってhiki systemの動作概要を説明します.hiki systemは,data/textに置かれた書かれたプレーンテキストをhtmlへ変換します.この変換はhikidoc[1-1]というhikiフォーマットconverterを使っています.また,添付書類はcache/attachに,一度フォーマットしたhtmlはparserに置かれており,それらを参照してhtmlを表示する画面をhiki.cgiは作っています.さらにhiki systemでは検索機能,自動リンク作成などが提供されています
4
+ hiki web systemの実際の基本動作は,hiki.cgiプログラムを介して行われている.こちらを便宜上hiki systemと呼ぶ.図{{ref(fig:one)}}に従ってhiki systemの動作概要を説明する.hiki systemは,data/textに置かれた書かれたプレーンテキストをhtmlへ変換する.この変換はhikidoc{{cite(1-1)}}というhikiフォーマットconverterを使っている.また,添付書類はcache/attachに,一度フォーマットしたhtmlはparserに置かれており,それらを参照してhtmlを表示する画面をhiki.cgiは作っている.さらにhiki systemでは検索機能,自動リンク作成などが提供されている
5
5
 
6
- !!!caption:hiki web systemとhiki systemの対応関係.
7
- {{attach_view(hikiutils_yamane_09_copy.001.jpg,hikiutils_yamane)}}
6
+ !!!caption:(fig:one)hiki web systemとhiki systemの対応関係.
7
+ {{attach_view(hikiutils_yamane.001.jpg,hikiutils_yamane)}}
8
8
 
9
- 研究室内の内部文書,あるいは外部への宣伝資料,さらにwikipediaのように重要な研究成果の発信などに西谷研ではこのhiki systemを利用しています.初心者にも覚えやすい直感的な操作です.しかし,慣れてくるとテキスト編集や画面更新にいちいちweb画面へ移行せねばならず,編集の思考が停止します.そこで,テキスト編集に優れたeditorとの連携や,terminal上のshell commandと連携しやすいようにhikiutilsというcli(command line interface)を作成して運用しています.しかし,そのユーザインタフェースにはコマンドが直感的でないという問題点がある.そこで,Thorというコマンドラインツール作成ライブラリを用いる.hikiutilsでは,optparseというコマンドライン解析ライブラリを使用しているが,新たなライブラリThorを使用してコマンドを書き換え,より直感的なコマンドに変更する.
9
+ 研究室内の内部文書,あるいは外部への宣伝資料,さらにwikipediaのように重要な研究成果の発信などに西谷研ではこのhiki systemを利用している.初心者にも覚えやすい直感的な操作である.しかし,慣れてくるとテキスト編集や画面更新にいちいちweb画面へ移行せねばならず,編集の思考が停止する.そこで,テキスト編集に優れたeditorとの連携や,terminal上のshell commandと連携しやすいようにhikiutilsというCLI(Command Line Interface)を作成して運用している.しかし,そのユーザインタフェースにはコマンドが直感的でないという問題点がある.そこで,Thorというコマンドラインツール作成ライブラリを用いる.hikiutilsでは,optparseというコマンドライン解析ライブラリを使用しているが,新たなライブラリThorを使用してコマンドを書き換え,より直感的なコマンドに変更する.
10
10
 
@@ -0,0 +1,21 @@
1
+ \relax
2
+ \@setckpt{方法}{
3
+ \setcounter{page}{6}
4
+ \setcounter{equation}{0}
5
+ \setcounter{enumi}{0}
6
+ \setcounter{enumii}{0}
7
+ \setcounter{enumiii}{0}
8
+ \setcounter{enumiv}{0}
9
+ \setcounter{footnote}{0}
10
+ \setcounter{mpfootnote}{0}
11
+ \setcounter{part}{0}
12
+ \setcounter{section}{2}
13
+ \setcounter{subsection}{0}
14
+ \setcounter{subsubsection}{0}
15
+ \setcounter{paragraph}{0}
16
+ \setcounter{subparagraph}{0}
17
+ \setcounter{figure}{1}
18
+ \setcounter{table}{0}
19
+ \setcounter{lstnumber}{1}
20
+ \setcounter{lstlisting}{0}
21
+ }
@@ -1,7 +1,7 @@
1
1
  \relax
2
- \@writefile{toc}{\contentsline {section}{\numberline {1}概要}{3}}
2
+ \@writefile{toc}{\contentsline {section}{\numberline {1}概要}{4}}
3
3
  \@setckpt{abstract}{
4
- \setcounter{page}{4}
4
+ \setcounter{page}{5}
5
5
  \setcounter{equation}{0}
6
6
  \setcounter{enumi}{0}
7
7
  \setcounter{enumii}{0}
@@ -1,19 +1,20 @@
1
1
  \relax
2
- \@writefile{toc}{\contentsline {subsection}{\numberline {4.1}コマンドの命名原則}{14}}
3
- \@writefile{toc}{\contentsline {subsubsection}{\numberline {4.1.1}hikiutilsの想定利用形態}{14}}
4
- \@writefile{lof}{\contentsline {figure}{\numberline {4}{\ignorespaces hikiutilsがあらかじめ想定している利用形態.}}{14}}
5
- \newlabel{default}{{4}{14}}
6
- \@writefile{toc}{\contentsline {subsubsection}{\numberline {4.1.2}コメンド名と振る舞いの詳細}{16}}
7
- \@writefile{lot}{\contentsline {table}{\numberline {1}{\ignorespaces }}{16}}
8
- \newlabel{default}{{1}{16}}
9
- \@writefile{toc}{\contentsline {paragraph}{open FILE}{16}}
10
- \@writefile{toc}{\contentsline {paragraph}{ls [FILE]}{17}}
11
- \@writefile{toc}{\contentsline {paragraph}{rsync}{17}}
12
- \@writefile{toc}{\contentsline {paragraph}{touch FILE}{17}}
13
- \@writefile{toc}{\contentsline {paragraph}{pwd}{17}}
14
- \@writefile{toc}{\contentsline {paragraph}{cd VAL}{17}}
2
+ \@writefile{toc}{\contentsline {subsection}{\numberline {4.1}コマンドの命名原則}{16}}
3
+ \@writefile{toc}{\contentsline {subsubsection}{\numberline {4.1.1}hikiutilsの想定利用形態}{16}}
4
+ \@writefile{lof}{\contentsline {figure}{\numberline {4}{\ignorespaces hikiutilsがあらかじめ想定している利用形態.}}{16}}
5
+ \newlabel{fig:002}{{4}{16}}
6
+ \newlabel{default}{{4}{16}}
7
+ \@writefile{toc}{\contentsline {subsubsection}{\numberline {4.1.2}コメンド名と振る舞いの詳細}{17}}
8
+ \@writefile{toc}{\contentsline {paragraph}{open FILE}{17}}
9
+ \@writefile{lot}{\contentsline {table}{\numberline {1}{\ignorespaces }}{18}}
10
+ \newlabel{default}{{1}{18}}
11
+ \@writefile{toc}{\contentsline {paragraph}{ls [FILE]}{18}}
12
+ \@writefile{toc}{\contentsline {paragraph}{rsync}{18}}
13
+ \@writefile{toc}{\contentsline {paragraph}{touch FILE}{18}}
14
+ \@writefile{toc}{\contentsline {paragraph}{pwd}{19}}
15
+ \@writefile{toc}{\contentsline {paragraph}{cd VAL}{19}}
15
16
  \@setckpt{command}{
16
- \setcounter{page}{18}
17
+ \setcounter{page}{20}
17
18
  \setcounter{equation}{0}
18
19
  \setcounter{enumi}{2}
19
20
  \setcounter{enumii}{0}
File without changes
@@ -13,8 +13,9 @@ hikiutilsの振る舞いを予測できるシェルコマンドと同じ名前
13
13
  ここでhikiutilsがあらかじめ想定している利用形態を解説しておきます.
14
14
 
15
15
  \begin{figure}[htbp]\begin{center}
16
- \includegraphics[width=6cm,bb=0 0 442 432]{../figs/./hikiutils_yamane_09_copy.002.jpg}
16
+ \includegraphics[width=10cm,bb= 0 0 737 553]{../figs/./hikiutils_yamane.002.jpg}
17
17
  \caption{hikiutilsがあらかじめ想定している利用形態.}
18
+ \label{fig:002}
18
19
  \label{default}\end{center}\end{figure}
19
20
  hikiutilsは,
20
21
 
@@ -27,7 +28,7 @@ hikiutilsは,
27
28
  どちらもが何かあった時のバックアップともなって,ミスによる手戻りを防いでいます.
28
29
 
29
30
  これらの設定は,~/.hikircにyaml形式で記述・保存されています.
30
- \begin{lstlisting}[style=]
31
+ \begin{lstlisting}[style=,basicstyle={\scriptsize\ttfamily}]
31
32
  bob% cat ~/.hikirc
32
33
  :srcs:
33
34
  - :nick_name: new_ist
@@ -43,18 +44,18 @@ bob% cat ~/.hikirc
43
44
  \end{lstlisting}
44
45
  また,一般的に一人のユーザがいくつものまとまりとしてのlocal-globalペアを
45
46
  保持して管理することが普通です.それぞれにnicke\_nameをつけて管理しています.
46
- \begin{lstlisting}[style=]
47
+ \begin{lstlisting}[style=,basicstyle={\scriptsize\ttfamily}]
47
48
  bob% hiki -s
48
49
  hikiutils: provide utilities for helping hiki editing.
49
50
  "open -a mi"
50
51
  target_no:1
51
52
  editor_command:open -a mi
52
- id | name | local directory | global uri
53
- ---------------------------------------------------------------------------------
54
- 0 | new_ist | /Users/bob/Sites/new_ist_data/ist_data | http://ist.ksc.k
55
- *1 | dmz0 | /Users/bob/Sites/nishitani0/Internal/data | http://nishitani
56
- 2 | ist | /Users/bob/Sites/hiki-data/data | http://ist.ksc.k
57
- 3 | new_maple | /Users/bob/Sites/new_ist_data/maple_hiki_data | http://ist.ksc.k
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
58
59
  \end{lstlisting}
59
60
  とすると,それらの一覧と,いまtargetにしているnick\_nameディレクリが表示されます.
60
61
 
@@ -72,17 +73,17 @@ list [FILE] &ls &list files \\
72
73
  rsync &rsync &rsync files \\
73
74
  update FILE &touch &update file \\
74
75
  show &pwd &show nick\_names \\
75
- target VAL &cd &targetを変える,change directoryとのメタファ \\
76
+ target VAL &cd &targetを変える,cdとのメタファ \\
76
77
  & \\
77
78
  move [FILE] &mv &move file \\
78
79
  remove [FILE] &rm &remove files \\
79
80
  add & &add sources info \\
80
81
  checkdb & &check database file \\
81
- datebase FILE & &read datebase file \\
82
- display FILE & &display converted hikifile \\
82
+ datebase FILE &db &read datebase file \\
83
+ display FILE &show &display converted hikifile \\
83
84
  euc FILE & &translate file to euc \\
84
- help [COMMAND] & &Describe available commands or one specific command \\
85
- version & &show program version \\
85
+ help [COMMAND] &-h &Describe available commands \\
86
+ version &-v &show program version \\
86
87
  \hline
87
88
  \end{tabular}
88
89
  \label{default}
@@ -1,9 +1,15 @@
1
1
  \relax
2
- \@writefile{toc}{\contentsline {subsection}{\numberline {3.1}optparseとthorの比較}{7}}
3
- \@writefile{toc}{\contentsline {subsubsection}{\numberline {3.1.1}optparse}{7}}
4
- \@writefile{toc}{\contentsline {subsubsection}{\numberline {3.1.2}Thor}{7}}
2
+ \@writefile{toc}{\contentsline {subsection}{\numberline {3.1}optparseとthorの比較}{8}}
3
+ \@writefile{toc}{\contentsline {subsubsection}{\numberline {3.1.1}optparse}{8}}
4
+ \@writefile{toc}{\contentsline {paragraph}{runメソッド}{9}}
5
+ \@writefile{toc}{\contentsline {paragraph}{initializeメソッド}{9}}
6
+ \@writefile{toc}{\contentsline {paragraph}{executeメソッド}{9}}
7
+ \@writefile{toc}{\contentsline {paragraph}{fizzbuzzメソッド}{10}}
8
+ \@writefile{toc}{\contentsline {paragraph}{versionメソッド}{10}}
9
+ \@writefile{toc}{\contentsline {subsubsection}{\numberline {3.1.2}Thor}{10}}
10
+ \@writefile{toc}{\contentsline {paragraph}{fizzbuzzメソッド,versionメソッド}{10}}
5
11
  \@setckpt{compare}{
6
- \setcounter{page}{9}
12
+ \setcounter{page}{11}
7
13
  \setcounter{equation}{0}
8
14
  \setcounter{enumi}{2}
9
15
  \setcounter{enumii}{0}
@@ -19,6 +25,6 @@
19
25
  \setcounter{subparagraph}{0}
20
26
  \setcounter{figure}{1}
21
27
  \setcounter{table}{0}
22
- \setcounter{lstnumber}{1}
28
+ \setcounter{lstnumber}{16}
23
29
  \setcounter{lstlisting}{0}
24
30
  }
@@ -1,9 +1,11 @@
1
1
 
2
2
  \subsection{optparseとthorの比較}
3
- ここでは,FizzBuzzという単純なコードを例にoptparseとCLIのコードの比較を行う.
3
+ 今回の既存システムであるhikiutilsはoptparseというコマンドライン解析ライブラリが用いられている.
4
+ 本研究ではこの代替ライブラリとしてThorの採用を検討した.
5
+ 本章の最初では,FizzBuzzという簡単なコードを例にoptparseとThorにより作成するコマンドライン解析コードの比較を行う.
4
6
 
5
7
  \subsubsection{optparse}
6
- optparseとは,getoptよりも簡便で,柔軟性に富み,かつ強力なコマンドライン解析ライブラリである.optparseでは,より宣言的なスタイルのコマンドライン解析手法,すなわちOptionParserのインスタンスでコマンドラインを解析するという手法をとっている.これを使うと,GNU/POSIX構文でオプションを指定できるだけでなく,使用法やヘルプメッセージの生成も行える[1-3].利用頻度はあまり高くないが古くから開発され,使用例が広く紹介されている.
8
+ optparseとは,getoptよりも簡便で,柔軟性に富み,かつ強力なコマンドライン解析ライブラリである.optparseでは,より宣言的なスタイルのコマンドライン解析手法,すなわちOptionParserのインスタンスでコマンドラインを解析するという手法をとっている.これを使うと,GNU/POSIX構文でオプションを指定できるだけでなく,使用法やヘルプメッセージの生成も行える[2].利用頻度はあまり高くないが古くから開発され,使用例が広く紹介されている.
7
9
 
8
10
  optparseの基本的な流れとしては
9
11
 
@@ -14,10 +16,75 @@ optparseの基本的な流れとしては
14
16
  \end{enumerate}
15
17
  である.
16
18
 
17
- OptionParserはコマンドラインのオプション取り扱うためのクラスであるためオブジェクトoptを生成されopt.onにコマンドを登録することができる.しかし,OptionParser\#onにはコマンドが登録されているだけであるため,OptionParser\#parseが呼ばれた時,コマンドラインにオプションが指定されていれば実行される.optparseにはデフォルトとして--helpと--versionオプションを認識する[1-4].
19
+ OptionParserはコマンドラインのオプション取り扱うためのクラスであるためオブジェクトoptを生成されopt.onにコマンドを登録することができる.しかし,OptionParser\#onにはコマンドが登録されているだけであるため,OptionParser\#parseが呼ばれた時,コマンドラインにオプションが指定されていれば実行される.optparseにはデフォルトとして--helpと--versionオプションを認識する[3].
20
+
21
+ 以下に示したコードがoptparseで記述されたfizzbuzzである.
22
+ \begin{lstlisting}[style=customRuby,basicstyle={\scriptsize\ttfamily}]
23
+ module Fizzbuzz
24
+ class Command
25
+
26
+ def self.run(argv)
27
+ new(argv).execute
28
+ end
29
+
30
+ def initialize(argv)
31
+ @argv = argv
32
+ end
33
+
34
+ def execute
35
+ options = Options.parse!(@argv)
36
+ sub_command = options.delete(:command)
37
+ case sub_command
38
+ when 'fizzbuzz'
39
+ fizzbuzz(options[:id])
40
+ when 'version'
41
+ version
42
+ end
43
+ end
44
+
45
+ def fizzbuzz(limit_number)
46
+ (0..limit_number).map do |num|
47
+ if (num % 15).zero? then print 'FizzBuzz'
48
+ elsif (num % 5).zero? then print 'Buzz'
49
+ elsif (num % 3).zero? then print 'Fizz'
50
+ else print num.to_s
51
+ end
52
+ print ' '
53
+ end
54
+ end
55
+
56
+ def version
57
+ puts Fizzbuzz::VERSION
58
+ exit
59
+ end
60
+ end
61
+ end
62
+ \end{lstlisting}
63
+ このコードはfizzbuzzとversionのコマンドを実行させる.
64
+
65
+ \paragraph{runメソッド}
66
+ コマンド実行を行うためのメソッドであり,argv配列を代入することでexecuteメソッドを実行する.
67
+
68
+ \paragraph{initializeメソッド}
69
+ 初期化を行うメソッドである.
70
+ \begin{quote}\begin{verbatim}
71
+ @argv = argv
72
+ \end{verbatim}\end{quote}
73
+ こうすることでargvをクラス内で利用できるようにする.
74
+
75
+ \paragraph{executeメソッド}
76
+ 上記でoptparseではopt.onにコマンドを登録する必要があると説明したが,opt.onで登録できるものはハイフンがついたコマンドだけであり,ハイフンなしのコマンドの登録はこのようになる.
77
+
78
+ argv配列の解析を行うOptions.parse!(@argv)をoptionsに代入して解析を行いsub\_commandに代入する.sub\_commandがfizzbuzzであればfizzbuzz(options[:id])メソッドを実行,versionであればversionメソッドを実行する.
79
+
80
+ \paragraph{fizzbuzzメソッド}
81
+ 引数としてlimit\_numberを受け取り,0〜limit\_numberまでの数字を繰り返す.numが15であればFizzbuzzを表示,5であればBuzzを表示,3であればFizzを表示,それ以外は数字を表示し,その後に空白を表示する.
82
+
83
+ \paragraph{versionメソッド}
84
+ fizzbuzzのバージョンを表示する.
18
85
 
19
86
  \subsubsection{Thor}
20
- Thorとは,コマンドラインツールの作成を支援するライブラリのことである.gitやbundlerのようにサブコマンドを含むコマンドラインツールを簡単に作成することができる[1-2].
87
+ Thorとは,コマンドラインツールの作成を支援するライブラリのことである.gitやbundlerのようにサブコマンドを含むコマンドラインツールを簡単に作成することができる[4].
21
88
 
22
89
  Thorの基本的な流れとしては
23
90
 
@@ -25,7 +92,32 @@ Thorの基本的な流れとしては
25
92
  \item Thorを継承したクラスのパブリックメソッドがコマンドになる
26
93
  \item クラス.start(ARGV)でコマンドラインの処理をスタートする
27
94
  \end{enumerate}
28
- である[1-2].
95
+ である[4].
29
96
 
30
97
  startに渡す引数が空の場合,Thorはクラスのヘルプリストを出力する.また,Thorはサブコマンドやサブサブコマンドも容易に作ることができる.
31
98
 
99
+ 以下に示したコードがThorで記述されたfizzbuzzである.
100
+ \begin{lstlisting}[style=customRuby,basicstyle={\scriptsize\ttfamily}]
101
+ module Fizzbuzz
102
+ class CLI < Thor
103
+
104
+ desc 'fizzbuzz', 'Get fizzbuzz result from limit number'
105
+ def fizzbuzz(limit)
106
+ print Fizzbuzz.fizzbuzz(limit).join(',')
107
+ exit
108
+ end
109
+
110
+ desc 'version', 'version'
111
+ def version
112
+ puts Fizzbuzz::VERSION
113
+ end
114
+ end
115
+ end
116
+ \end{lstlisting}
117
+ このコードもoptparseのfizzbuzzと同様fizzbuzzとversionのコマンドを実行させる.
118
+
119
+ \paragraph{fizzbuzzメソッド,versionメソッド}
120
+ descでコマンド一覧で表示させるコマンド名と説明を書く.
121
+
122
+ メソッド内ではそれぞれのコマンドの処理内容が書かれている.
123
+
@@ -1,10 +1,13 @@
1
1
  \relax
2
2
  \@input{abstract.aux}
3
3
  \@input{introduction.aux}
4
- \@writefile{toc}{\contentsline {section}{\numberline {3}方法}{6}}
4
+ \@writefile{toc}{\contentsline {section}{\numberline {3}方法}{7}}
5
5
  \@input{compare.aux}
6
6
  \@input{optparse.aux}
7
- \@writefile{toc}{\contentsline {section}{\numberline {4}結果}{13}}
7
+ \@writefile{toc}{\contentsline {section}{\numberline {4}結果}{15}}
8
8
  \@input{command.aux}
9
9
  \@input{thor.aux}
10
- \@writefile{toc}{\contentsline {section}{\numberline {5}参考文献}{23}}
10
+ \bibcite{1-1}{1}
11
+ \bibcite{1-2}{2}
12
+ \bibcite{1-3}{3}
13
+ \bibcite{1-4}{4}