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.
- checksums.yaml +4 -4
- data/hikiutils_bob/Rakefile +3 -2
- data/hikiutils_yamane/Rakefile +148 -30
- data/hikiutils_yamane/Rakefile~ +477 -0
- data/hikiutils_yamane/command.hiki +13 -13
- data/hikiutils_yamane/compare.hiki +96 -5
- data/hikiutils_yamane/figs/hikiutils_yamane.001.jpg +0 -0
- data/hikiutils_yamane/figs/hikiutils_yamane.002.jpg +0 -0
- data/hikiutils_yamane/figs/hikiutils_yamane.003.jpg +0 -0
- data/hikiutils_yamane/figs/hikiutils_yamane.004.jpg +0 -0
- data/hikiutils_yamane/figs/hikiutils_yamane.005.jpg +0 -0
- data/hikiutils_yamane/figs/hikiutils_yamane.006.jpg +0 -0
- data/hikiutils_yamane/figs/hikiutils_yamane.007.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane/hikiutils_yamane.001.jpeg +0 -0
- data/hikiutils_yamane/hikiutils_yamane/hikiutils_yamane.002.jpeg +0 -0
- data/hikiutils_yamane/hikiutils_yamane/hikiutils_yamane.003.jpeg +0 -0
- data/hikiutils_yamane/hikiutils_yamane/hikiutils_yamane.004.jpeg +0 -0
- data/hikiutils_yamane/hikiutils_yamane/hikiutils_yamane.005.jpeg +0 -0
- data/hikiutils_yamane/hikiutils_yamane/hikiutils_yamane.006.jpeg +0 -0
- data/hikiutils_yamane/hikiutils_yamane/hikiutils_yamane.007.jpeg +0 -0
- data/hikiutils_yamane/hikiutils_yamane.hiki +6 -10
- data/hikiutils_yamane/introduction.hiki +5 -5
- data/hikiutils_yamane/latex_dir/%CA%FD/313/241.aux +21 -0
- data/hikiutils_yamane/latex_dir/abstract.aux +2 -2
- data/hikiutils_yamane/latex_dir/command.aux +15 -14
- data/hikiutils_yamane/latex_dir/command.log +0 -0
- data/hikiutils_yamane/latex_dir/command.tex +15 -14
- data/hikiutils_yamane/latex_dir/compare.aux +11 -5
- data/hikiutils_yamane/latex_dir/compare.tex +97 -5
- data/hikiutils_yamane/latex_dir/hikiutils_yamane.aux +6 -3
- data/hikiutils_yamane/latex_dir/hikiutils_yamane.log +113 -162
- data/hikiutils_yamane/latex_dir/hikiutils_yamane.pdf +0 -0
- data/hikiutils_yamane/latex_dir/hikiutils_yamane.synctex.gz +0 -0
- data/hikiutils_yamane/latex_dir/hikiutils_yamane.tex +15 -18
- data/hikiutils_yamane/latex_dir/hikiutils_yamane.toc +31 -26
- data/hikiutils_yamane/latex_dir/introduction.aux +6 -4
- data/hikiutils_yamane/latex_dir/introduction.tex +5 -4
- data/hikiutils_yamane/latex_dir/jlisting.sty +216 -0
- data/hikiutils_yamane/latex_dir/optparse.aux +11 -9
- data/hikiutils_yamane/latex_dir/optparse.tex +11 -8
- data/hikiutils_yamane/latex_dir/pre.tex +36 -0
- data/hikiutils_yamane/latex_dir/thor.aux +13 -13
- data/hikiutils_yamane/latex_dir/thor.tex +9 -11
- data/hikiutils_yamane/optparse.hiki +7 -6
- data/hikiutils_yamane/test.rb +10 -0
- data/hikiutils_yamane/thor.hiki +4 -5
- data/lib/hikiutils/version.rb +1 -1
- data/lib/hikiutils_thor.rb +39 -39
- data/lib/hikiutils_thor.rb~ +3 -4
- data/lib/templates/Rakefile_hiki_sync +3 -2
- metadata +15 -9
- data/hikiutils_yamane/hikiutils_yamane/hikiutils_yamane.001.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane/hikiutils_yamane.002.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane/hikiutils_yamane.003.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane/hikiutils_yamane.004.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane/hikiutils_yamane.005.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane/hikiutils_yamane.006.jpg +0 -0
- 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
|
-
|
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
|
-
|
23
|
-
|
24
|
-
|
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
|
2
|
+
hikiは,hiki記法を用いたwiki cloneである.wikiはウォード・カニンガムが作ったwikiwikiwebを源流とするhome page制作を容易にするシステムで,hikiもwikiの基本要求仕様を満足するシステムを提供する.wikiの特徴であるweb上で編集する機能を提供する.これを便宜上hiki web systemと呼ぶ.図にある通り,一般的な表示画面の他に,編集画面が提供されており,ユーザーはこの編集画面からコンテンツを編集することが可能である.リンクやヘッダー,リスト,引用,表,図の表示などの基本テキストフォーマットが用意されている.
|
3
3
|
|
4
|
-
hiki web systemの実際の基本動作は,hiki.cgi
|
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(
|
6
|
+
!!!caption:(fig:one)hiki web systemとhiki systemの対応関係.
|
7
|
+
{{attach_view(hikiutils_yamane.001.jpg,hikiutils_yamane)}}
|
8
8
|
|
9
|
-
研究室内の内部文書,あるいは外部への宣伝資料,さらにwikipediaのように重要な研究成果の発信などに西谷研ではこのhiki system
|
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}概要}{
|
2
|
+
\@writefile{toc}{\contentsline {section}{\numberline {1}概要}{4}}
|
3
3
|
\@setckpt{abstract}{
|
4
|
-
\setcounter{page}{
|
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}コマンドの命名原則}{
|
3
|
-
\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.1.1}hikiutilsの想定利用形態}{
|
4
|
-
\@writefile{lof}{\contentsline {figure}{\numberline {4}{\ignorespaces hikiutilsがあらかじめ想定している利用形態.}}{
|
5
|
-
\newlabel{
|
6
|
-
|
7
|
-
\@writefile{
|
8
|
-
|
9
|
-
\@writefile{
|
10
|
-
|
11
|
-
\@writefile{toc}{\contentsline {paragraph}{
|
12
|
-
\@writefile{toc}{\contentsline {paragraph}{
|
13
|
-
\@writefile{toc}{\contentsline {paragraph}{
|
14
|
-
\@writefile{toc}{\contentsline {paragraph}{
|
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}{
|
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=
|
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
|
53
|
-
|
54
|
-
0 | new_ist | /Users/bob/Sites/new_ist_data/ist_data
|
55
|
-
*1 | dmz0 | /Users/bob/Sites/nishitani0/Internal/data
|
56
|
-
2 | ist | /Users/bob/Sites/hiki-data/data
|
57
|
-
3 | new_maple | /Users/bob/Sites/new_ist_data/
|
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を変える,
|
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]
|
85
|
-
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の比較}{
|
3
|
-
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.1.1}optparse}{
|
4
|
-
\@writefile{toc}{\contentsline {
|
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}{
|
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}{
|
28
|
+
\setcounter{lstnumber}{16}
|
23
29
|
\setcounter{lstlisting}{0}
|
24
30
|
}
|
@@ -1,9 +1,11 @@
|
|
1
1
|
|
2
2
|
\subsection{optparseとthorの比較}
|
3
|
-
|
3
|
+
今回の既存システムであるhikiutilsはoptparseというコマンドライン解析ライブラリが用いられている.
|
4
|
+
本研究ではこの代替ライブラリとしてThorの採用を検討した.
|
5
|
+
本章の最初では,FizzBuzzという簡単なコードを例にoptparseとThorにより作成するコマンドライン解析コードの比較を行う.
|
4
6
|
|
5
7
|
\subsubsection{optparse}
|
6
|
-
optparseとは,getoptよりも簡便で,柔軟性に富み,かつ強力なコマンドライン解析ライブラリである.optparseでは,より宣言的なスタイルのコマンドライン解析手法,すなわちOptionParserのインスタンスでコマンドラインを解析するという手法をとっている.これを使うと,GNU/POSIX構文でオプションを指定できるだけでなく,使用法やヘルプメッセージの生成も行える[
|
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オプションを認識する[
|
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のようにサブコマンドを含むコマンドラインツールを簡単に作成することができる[
|
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
|
-
である[
|
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}方法}{
|
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}結果}{
|
7
|
+
\@writefile{toc}{\contentsline {section}{\numberline {4}結果}{15}}
|
8
8
|
\@input{command.aux}
|
9
9
|
\@input{thor.aux}
|
10
|
-
|
10
|
+
\bibcite{1-1}{1}
|
11
|
+
\bibcite{1-2}{2}
|
12
|
+
\bibcite{1-3}{3}
|
13
|
+
\bibcite{1-4}{4}
|