my_help 0.4.3 → 0.4.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (85) hide show
  1. checksums.yaml +4 -4
  2. data/.DS_Store +0 -0
  3. data/.gitignore +1 -0
  4. data/.rspec +2 -0
  5. data/Gemfile +1 -0
  6. data/README.md +1 -1
  7. data/Rakefile +35 -12
  8. data/exe/{todo_help → my_todo} +1 -1
  9. data/hikis/diff_against_org-mode.hiki +34 -0
  10. data/hikis/tmp.org +20 -0
  11. data/lib/.emacs_help.rb.swp +0 -0
  12. data/lib/daddygongon/my_todo.yml +31 -0
  13. data/lib/emacs_help.rb +15 -0
  14. data/lib/emacs_help.rb~ +137 -0
  15. data/lib/my_help/test.rb +3 -0
  16. data/lib/my_help/version.rb +1 -1
  17. data/lib/my_help.rb +1 -1
  18. data/lib/my_todo/my_todo.rb +7 -0
  19. data/lib/my_todo/my_todo.rb~ +7 -0
  20. data/lib/specific_help.rb +42 -11
  21. data/lib/specific_help.rb~ +193 -0
  22. data/lib/todo.rb +1 -0
  23. data/lib/todo.rb~ +1 -0
  24. data/lor +0 -0
  25. data/my_help.gemspec +4 -2
  26. data/my_help.wiki/Home.md +1 -1
  27. data/my_help.wiki/README_ja.md +1 -1
  28. data/my_help_nasu/.DS_Store +0 -0
  29. data/my_help_nasu/.gitignore +1 -0
  30. data/my_help_nasu/Rakefile +422 -0
  31. data/my_help_nasu/code.hiki +285 -0
  32. data/my_help_nasu/consideration.hiki +8 -0
  33. data/my_help_nasu/features.hiki +185 -0
  34. data/my_help_nasu/figs/my_help_nasu.001.jpeg +0 -0
  35. data/my_help_nasu/figs/my_help_nasu.001.jpg +0 -0
  36. data/my_help_nasu/figs/my_help_nasu1.001.jpg +0 -0
  37. data/my_help_nasu/head2.tex +9 -0
  38. data/my_help_nasu/hiki_help.yml +53 -0
  39. data/my_help_nasu/introduction.hiki +29 -0
  40. data/my_help_nasu/key_bind_mi +1 -0
  41. data/my_help_nasu/latex_dir/.gitignore +1 -0
  42. data/my_help_nasu/latex_dir/Rakefile +420 -0
  43. data/my_help_nasu/latex_dir/code.aux +25 -0
  44. data/my_help_nasu/latex_dir/code.tex +271 -0
  45. data/my_help_nasu/latex_dir/consideration.aux +22 -0
  46. data/my_help_nasu/latex_dir/consideration.tex +9 -0
  47. data/my_help_nasu/latex_dir/features.aux +31 -0
  48. data/my_help_nasu/latex_dir/features.tex +173 -0
  49. data/my_help_nasu/latex_dir/head.tex +9 -0
  50. data/my_help_nasu/latex_dir/hiki_help.yml +53 -0
  51. data/my_help_nasu/latex_dir/introduction.aux +22 -0
  52. data/my_help_nasu/latex_dir/introduction.tex +23 -0
  53. data/my_help_nasu/latex_dir/jlisting.sty +216 -0
  54. data/my_help_nasu/latex_dir/jlisting.tex +216 -0
  55. data/my_help_nasu/latex_dir/latex_dir/head.tex +9 -0
  56. data/my_help_nasu/latex_dir/latex_dir/jlisting.tex +216 -0
  57. data/my_help_nasu/latex_dir/latex_dir/pre.tex +36 -0
  58. data/my_help_nasu/latex_dir/method_bdd.aux +26 -0
  59. data/my_help_nasu/latex_dir/method_bdd.tex +28 -0
  60. data/my_help_nasu/latex_dir/method_cucumber.aux +28 -0
  61. data/my_help_nasu/latex_dir/method_cucumber.log +28 -0
  62. data/my_help_nasu/latex_dir/method_cucumber.tex +205 -0
  63. data/my_help_nasu/latex_dir/method_usage.aux +28 -0
  64. data/my_help_nasu/latex_dir/method_usage.tex +76 -0
  65. data/my_help_nasu/latex_dir/my_help_nasu.aux +12 -0
  66. data/my_help_nasu/latex_dir/my_help_nasu.log +328 -0
  67. data/my_help_nasu/latex_dir/my_help_nasu.pdf +0 -0
  68. data/my_help_nasu/latex_dir/my_help_nasu.synctex.gz +0 -0
  69. data/my_help_nasu/latex_dir/my_help_nasu.tex +74 -0
  70. data/my_help_nasu/latex_dir/my_help_nasu.toc +32 -0
  71. data/my_help_nasu/latex_dir/overview.aux +21 -0
  72. data/my_help_nasu/latex_dir/overview.tex +12 -0
  73. data/my_help_nasu/latex_dir/pre.tex +36 -0
  74. data/my_help_nasu/method_bdd.hiki +24 -0
  75. data/my_help_nasu/method_cucumber.hiki +184 -0
  76. data/my_help_nasu/method_usage.hiki +69 -0
  77. data/my_help_nasu/my_help_nasu/.DS_Store +0 -0
  78. data/my_help_nasu/my_help_nasu/my_help_nasu.001.jpeg +0 -0
  79. data/my_help_nasu/my_help_nasu.hiki +32 -0
  80. data/my_help_nasu/my_help_nasu.key +0 -0
  81. data/my_help_nasu/overview.hiki +11 -0
  82. data/tmp.txt +2 -0
  83. metadata +104 -10
  84. data/lib/daddygongon/git_help.yml +0 -30
  85. data/lib/daddygongon/todo_help.yml +0 -58
@@ -0,0 +1,271 @@
1
+
2
+ \section{結果}
3
+ CucumberとRSpecを用いてBDDでmy\_helpのテスト開発を進めて行きました.
4
+ ここでは,焦点を合わせたmy\_helpの中での一つの振る舞いである
5
+ 「todoの更新」を例として詳しく見て行きます.
6
+
7
+ \subsection{todoの更新マニュアル}
8
+ 最初に,todoを更新するときの手順を示します.
9
+
10
+ \begin{enumerate}
11
+ \item my\_todo --editを入力して~/.my\_help/my\_todo.ymlを開く
12
+ \item editorでtodoを書き込む(今週やることならweeklyというitemを作ってそこに書き込む)
13
+ \item 保存して~/.my\_help/my\_todo.ymlを閉じる
14
+ \item my\_todoと打ち込んで更新されていたら完成
15
+ \item my\_todo --store [item]を入力してitemのバックアップをとる
16
+ \end{enumerate}
17
+ この振る舞いがきちんとできているのかを実際にテスト構築して行きます.
18
+
19
+ \subsection{Cucumber}
20
+ 以下はtodoの更新を行うときのfeatureです.
21
+ まず,適当なディレクトリにfeaturesというディレクトリを作成します.
22
+ 次に先ほど作成した,featuresディレクトリにmy\_todo.featureを作成します.
23
+ \begin{lstlisting}[style=customCsh,basicstyle={\scriptsize\ttfamily}]
24
+ # language: ja
25
+
26
+ 機能: todoの更新を行う
27
+ todoは更新していくものであり,新しく書いたり終わったものを
28
+ 消したいのでバックアップをとって,過去のtodoを残しておく
29
+
30
+
31
+ シナリオ: コマンドを入力してtodoを更新していく
32
+ 前提 todoを編集したい
33
+ もし "my_todo --edit"と入力する
34
+ ならば editが開かれる
35
+ かつ 自分のtodoを書き込む
36
+
37
+ シナリオ: コマンドを入力してバックアップをとる
38
+ 前提 todoの編集が終わった
39
+ もし "my_todo --store [item]"と入力する
40
+ ならば itemのバックアップを取る
41
+
42
+ \end{lstlisting}
43
+ 機能とは,このシステムの機能のことを記述します.ここでは,todoを更新するシステムですので,「todoの更新を行う」です.
44
+ 機能の下には,機能の補足説明を記述します.機能の補足説明では,ルールがないので自分がわかりやすいように,記述するのが常識です.
45
+ シナリオは,その名の通りtodoを更新する時のユーザの行動やシステム振る舞いを前提,もし,ならば,かつ,しかしに分類して記述します.
46
+ シナリオは,一つの機能に対して複数書くことが可能です.ここでは、「todoを更新する」と「バックアップをとる」という二つの
47
+ シナリオをたてています.
48
+
49
+ ここまでfeatureが記述できたら,次はcucumberコマンドを実行してみます.
50
+ コマンドは以下の通りです.
51
+  /Users/nasubi/nasu% cucumber features/my\_todo.feature
52
+ featuresディレクトリにあるmy\_todo.featureファイルをcucumberで実行するという意味です.
53
+
54
+ 実行すると以下のようになります.
55
+ \begin{lstlisting}[style=customCsh,basicstyle={\scriptsize\ttfamily}]
56
+ # language: ja
57
+ 機能: todoの更新を行う
58
+ todoは更新していくものであり,新しく書いたり終わったものを消したいのでバックアップをとって,過去のtodoを残しておく
59
+
60
+ シナリオ: コマンドを入力してtodoを更新していく # features/my_todo.feature:6
61
+ 前提todoを編集したい # features/my_todo.feature:7
62
+ もし"my_todo --edit"と入力する # features/my_todo.feature:8
63
+ ならばeditが開かれる # features/my_todo.feature:9
64
+ かつ自分のtodoを書き込む # features/my_todo.feature:10
65
+
66
+ シナリオ: コマンドを入力してバックアップをとる # features/my_todo.feature:12
67
+ 前提todoの編集が終わった # features/my_todo.feature:13
68
+ もし"my_todo --store [item]"と入力する # features/my_todo.feature:14
69
+ ならばitemのバックアップを取る # features/my_todo.feature:15
70
+
71
+ 2 scenarios (2 undefined)
72
+ 7 steps (7 undefined)
73
+ 0m0.080s
74
+
75
+ You can implement step definitions for undefined steps with these snippets:
76
+
77
+ 前提(/^todoを編集したい$/) do
78
+ pending # Write code here that turns the phrase above into concrete actions
79
+ end
80
+
81
+ もし(/^"([^"]*)"と入力する$/) do |arg1|
82
+ pending # Write code here that turns the phrase above into concrete actions
83
+ end
84
+
85
+ ならば(/^editが開かれる$/) do
86
+ pending # Write code here that turns the phrase above into concrete actions
87
+ end
88
+
89
+ ならば(/^自分のtodoを書き込む$/) do
90
+ pending # Write code here that turns the phrase above into concrete actions
91
+ end
92
+
93
+ 前提(/^todoの編集が終わった$/) do
94
+ pending # Write code here that turns the phrase above into concrete actions
95
+ end
96
+
97
+ ならば(/^itemのバックアップを取る$/) do
98
+ pending # Write code here that turns the phrase above into concrete actions
99
+ end
100
+ \end{lstlisting}
101
+ ここでは,2つのscenarioと7つのstepが失敗しています.
102
+ まだstep定義を記述していないので当たり前です.
103
+
104
+ 一度cucumberを実行したのには理由があります.
105
+ featureを書いた時点でcucumberを実行すると,ステップ定義の元となるコマンドを,cucumberが自動的に作成してくれるからです.
106
+
107
+ 以下がcucumberから出力されたステップ定義の元となる部分です.
108
+ \begin{lstlisting}[style=customCsh,basicstyle={\scriptsize\ttfamily}]
109
+ You can implement step definitions for undefined steps with these snippets:
110
+
111
+ 前提(/^todoを編集したい$/) do
112
+ pending # Write code here that turns the phrase above into concrete actions
113
+ end
114
+
115
+ もし(/^"([^"]*)"と入力する$/) do |arg1|
116
+ pending # Write code here that turns the phrase above into concrete actions
117
+ end
118
+
119
+ ならば(/^editが開かれる$/) do
120
+ pending # Write code here that turns the phrase above into concrete actions
121
+ end
122
+
123
+ ならば(/^自分のtodoを書き込む$/) do
124
+ pending # Write code here that turns the phrase above into concrete actions
125
+ end
126
+
127
+ 前提(/^todoの編集が終わった$/) do
128
+ pending # Write code here that turns the phrase above into concrete actions
129
+ end
130
+
131
+ ならば(/^itemのバックアップを取る$/) do
132
+ pending # Write code here that turns the phrase above into concrete actions
133
+ end
134
+ \end{lstlisting}
135
+ これをコピーして,featuresディレクトリの中でstep\_definitionsディレクトリを作成し,その中にmy\_todo\_spec.rbを作成し,そこに貼付けます.
136
+
137
+ ここでもう一度cucumberを実行してみると
138
+ \begin{lstlisting}[style=customCsh,basicstyle={\scriptsize\ttfamily}]
139
+ /Users/nasubi/nasu% cucumber features/my_todo.feature
140
+ # language: ja
141
+ 機能: todoの更新を行う
142
+ todoは更新していくものであり,新しく書いたり終わったものを消したいのでバックアップをとって,過去のtodoを残しておく
143
+
144
+ シナリオ: コマンドを入力してtodoを更新していく # features/my_todo.feature:6
145
+ 前提todoを編集したい # features/step_definitions/my_todo_spec.rb:1
146
+ TODO (Cucumber::Pending)
147
+ ./features/step_definitions/my_todo_spec.rb:2:in `/^todoを編集したい$/'
148
+ features/my_todo.feature:7:in `前提todoを編集したい'
149
+ もし"my_todo --edit"と入力する # features/step_definitions/my_todo_spec.rb:5
150
+ ならばeditが開かれる # features/step_definitions/my_todo_spec.rb:9
151
+ かつ自分のtodoを書き込む # features/step_definitions/my_todo_spec.rb:13
152
+
153
+ シナリオ: コマンドを入力してバックアップをとる # features/my_todo.feature:12
154
+ 前提todoの編集が終わった # features/step_definitions/my_todo_spec.rb:17
155
+ TODO (Cucumber::Pending)
156
+ ./features/step_definitions/my_todo_spec.rb:18:in `/^todoの編集が終わった$/'
157
+ features/my_todo.feature:13:in `前提todoの編集が終わった'
158
+ もし"my_todo --store [item]"と入力する # features/step_definitions/my_todo_spec.rb:5
159
+ ならばitemのバックアップを取る # features/step_definitions/my_todo_spec.rb:21
160
+
161
+ 2 scenarios (2 pending)
162
+ 7 steps (5 skipped, 2 pending)
163
+ 0m0.045s
164
+
165
+ \end{lstlisting}
166
+ と変化が出てきます.
167
+ \begin{quote}\begin{verbatim}
168
+ 2 scenarios (2 pending)
169
+ 7 steps (5 skipped, 2 pending)
170
+ \end{verbatim}\end{quote}
171
+ これは2つのシナリオの内2つがpendingであり,7つのstepの内2つがpendingで5つがskipしたことを表しています.
172
+ step\_definitionsのmy\_todo\_spec.rbのpending部分を書き換えて,step\_definitionsの記述を進めて行きます.
173
+
174
+ cucumberが成功すると下記のような結果となります.
175
+ \begin{lstlisting}[style=customRuby,basicstyle={\scriptsize\ttfamily}]
176
+ /Users/nasubi/my_help% cucumber features/my_todo.feature
177
+ # language: ja
178
+ 機能: todoの更新を行う
179
+ todoは更新していくものであり,新しく書いたり終わったものを消したいのでバックアップをとって,過去のtodoを残しておく
180
+
181
+ シナリオ: コマンドを入力してtodoを更新していく # features/my_todo.feature:6
182
+ 前提todoを編集したい # features/step_definitions/my_todo_spec.rb:2
183
+ もし"my_todo --edit"と入力する # features/step_definitions/my_todo_spec.rb:6
184
+ ならばeditが開かれる # features/step_definitions/my_todo_spec.rb:10
185
+ かつ自分のtodoを書き込む # features/step_definitions/my_todo_spec.rb:14
186
+
187
+ シナリオ: コマンドを入力してバックアップをとる # features/my_todo.feature:12
188
+ 前提todoの編集が終わった # features/step_definitions/my_todo_spec.rb:18
189
+ もし"my_todo --store [item]"と入力する # features/step_definitions/my_todo_spec.rb:6
190
+ ならばitemのバックアップを取る # features/step_definitions/my_todo_spec.rb:22
191
+
192
+ 2 scenarios (2 passed)
193
+ 7 steps (7 passed)
194
+ 0m0.030s
195
+
196
+ \end{lstlisting}
197
+ \subsection{RSpec}
198
+ 次にRSpecを使って実際にtodoを更新する振る舞いをするコード書いていく.
199
+
200
+ そのための準備として,まずspecというディレクトリを作成し,my\_todoというサブディレクトリを追加する.
201
+ 次に,このサブディレクトリにtodo\_spec.rbというファイルを追加する.
202
+ 作業を進める過程で,lib/my\_todo/my\_todo.rbソースファイルとspec/my\_todo/todo\_spec.rbスペックファイルが1対1に対応するといった要領で,
203
+ 並列のディレクトリ構造を築いていく.
204
+ この機能はmy\_help --editと入力されれば,~/.my\_help/my\_todo.ymlが開かれるのでその振る舞いをするコードを書きます.
205
+ まずtodo\_spec.rbは下記の通りになります
206
+ \begin{lstlisting}[style=customRuby,basicstyle={\scriptsize\ttfamily}]
207
+ require 'spec_helper'
208
+
209
+
210
+ module Mytodo
211
+ describe Todo do
212
+ describe "#open" do
213
+ it "open file my_todo.yml"
214
+ end
215
+ end
216
+ end
217
+
218
+ \end{lstlisting}
219
+ describe()メソッドは,RSpecのAPIにアクセスしてRSpec::Core::ExampleGroupのサブクラスを返します.
220
+ ExampleGroupクラスはオブジェクトに期待される振る舞いのサンプルを示すグループです.
221
+ it()メソッドはサンプルを作成します.
222
+
223
+ このスペックを実行するために,specディレクトリにspec\_helper.rbを追加します.
224
+ 中身は下記の通りです.
225
+ \begin{lstlisting}[style=customRuby,basicstyle={\scriptsize\ttfamily}]
226
+ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
227
+ require 'my_help'
228
+ require 'todo'
229
+ \end{lstlisting}
230
+ これで事前準備は完成でコードを書いていきます.
231
+
232
+ 完成したコードを下記の通りです.
233
+ \begin{lstlisting}[style=customRuby,basicstyle={\scriptsize\ttfamily}]
234
+ require 'spec_helper'
235
+
236
+
237
+ module Mytodo
238
+ describe Todo do
239
+ describe "#open" do
240
+ it "open file my_todo.yml" do
241
+ system("emacs ~/.my_help/my_todo.yml")
242
+ end
243
+ end
244
+ end
245
+ end
246
+
247
+ \end{lstlisting}
248
+ これでrspecを実行すると以下のような結果が表示される.
249
+ \begin{lstlisting}[style=customCsh,basicstyle={\scriptsize\ttfamily}]
250
+ /Users/nasubi/my_help% rspec spec --color
251
+
252
+ my_help command
253
+ version option
254
+ should be successfully executed
255
+ should have output: "my_help 0.4.3"
256
+ help option
257
+ should be successfully executed
258
+ should have output: "Usage: my_help [options]\n -v, --version show program Version.\n -l, --list... install local after edit helps\n --delete NAME delete NAME help"
259
+
260
+ Mytodo::Todo
261
+ #open
262
+ open file my_todo.yml
263
+
264
+ Finished in 3.87 seconds (files took 0.30703 seconds to load)
265
+ 5 examples, 0 failures
266
+
267
+ \end{lstlisting}
268
+ これでtodoを更新するときの振る舞いのテストはうまく成功した.
269
+
270
+ この方法でBDDでmy\_helpのテスト開発を行い,仕様を決定していった.
271
+
@@ -0,0 +1,22 @@
1
+ \relax
2
+ \@writefile{toc}{\contentsline {section}{\numberline {4}考察}{27}}
3
+ \@setckpt{consideration}{
4
+ \setcounter{page}{28}
5
+ \setcounter{equation}{0}
6
+ \setcounter{enumi}{5}
7
+ \setcounter{enumii}{0}
8
+ \setcounter{enumiii}{0}
9
+ \setcounter{enumiv}{0}
10
+ \setcounter{footnote}{0}
11
+ \setcounter{mpfootnote}{0}
12
+ \setcounter{part}{0}
13
+ \setcounter{section}{4}
14
+ \setcounter{subsection}{0}
15
+ \setcounter{subsubsection}{0}
16
+ \setcounter{paragraph}{0}
17
+ \setcounter{subparagraph}{0}
18
+ \setcounter{figure}{2}
19
+ \setcounter{table}{1}
20
+ \setcounter{lstnumber}{17}
21
+ \setcounter{lstlisting}{0}
22
+ }
@@ -0,0 +1,9 @@
1
+ \section{考察}
2
+  今回の開発において,ユーザメモソフトであるmy\_helpのテスト開発は成功した.
3
+ つまり,my\_helpの仕様と動作の標準が確定したことで,今後のソフトを進化させるための共同開発がスムーズにいくと推測される.
4
+ 先に述べた通り,ソフト開発は一人でせず,複数人で開発することが普通である.
5
+ その時に起こる障害として,意思の疎通ができていないことがあげられる.
6
+ 振る舞いが標準化されていないと,どのような振る舞いをするのかが,プログラムを見るだけでは,ずれが生じてしまう.
7
+ また,開発者の意図が読めていないと,コードの意味も変わってくるので,テスト開発をして,仕様と動作の標準を確定することは重要であった.
8
+ 加えて,初めてmy\_helpを使うユーザでも仕様と動作の標準がわかっていれば,短い時間でmy\_helpを使いこなせるし,そのことによって,ユーザそれぞれに自分にあったmy\_helpに変更することも容易になる.
9
+
@@ -0,0 +1,31 @@
1
+ \relax
2
+ \@writefile{toc}{\contentsline {subsubsection}{\numberline {3.3.1}featuresでの記述とその意味}{23}}
3
+ \@writefile{toc}{\contentsline {subsubsection}{\numberline {3.3.2}my\_helpのfeatures}{23}}
4
+ \@writefile{toc}{\contentsline {paragraph}{--add [item]}{23}}
5
+ \@writefile{toc}{\contentsline {paragraph}{全てのhelp画面の表示}{24}}
6
+ \@writefile{toc}{\contentsline {paragraph}{過去にバックアップしてあるitemのリストの表示}{24}}
7
+ \@writefile{toc}{\contentsline {paragraph}{helpコマンドの追加や削除,編集をするファイルの開示}{24}}
8
+ \@writefile{toc}{\contentsline {paragraph}{specific\_helpのitemの消去}{25}}
9
+ \@writefile{toc}{\contentsline {paragraph}{itemのバックアップ}{25}}
10
+ \@writefile{toc}{\contentsline {paragraph}{hikiへのformatの変更}{25}}
11
+ \@writefile{toc}{\contentsline {paragraph}{todoの更新}{25}}
12
+ \@setckpt{features}{
13
+ \setcounter{page}{27}
14
+ \setcounter{equation}{0}
15
+ \setcounter{enumi}{5}
16
+ \setcounter{enumii}{0}
17
+ \setcounter{enumiii}{0}
18
+ \setcounter{enumiv}{0}
19
+ \setcounter{footnote}{0}
20
+ \setcounter{mpfootnote}{0}
21
+ \setcounter{part}{0}
22
+ \setcounter{section}{3}
23
+ \setcounter{subsection}{3}
24
+ \setcounter{subsubsection}{2}
25
+ \setcounter{paragraph}{0}
26
+ \setcounter{subparagraph}{0}
27
+ \setcounter{figure}{2}
28
+ \setcounter{table}{1}
29
+ \setcounter{lstnumber}{17}
30
+ \setcounter{lstlisting}{0}
31
+ }
@@ -0,0 +1,173 @@
1
+
2
+ \subsubsection{featuresでの記述とその意味}
3
+ featuresでの記述は,コマンドの振る舞いを説明する自然な記述となる.
4
+ その様子をspecific\_helpが用意しているデフォルトのコマンドについて
5
+ 説明する.specific\_helpとは,ユーザが作成するそれぞれのヘルプである.
6
+ speific\_helpの--helpを表示させると,
7
+ \begin{quote}\begin{verbatim}
8
+ --edit edit help contentsを開く
9
+ --to_hiki hikiのformatに変更する
10
+ --all すべてのhelp画面を表示させる
11
+ --store [item] store [item] でback upをとる
12
+ --remove [item] remove [item] back upしてるlistを消去する
13
+ --add [item] add new [item]で新しいhelpを作る
14
+ --backup_list [val] back upしているlistを表示させる
15
+ \end{verbatim}\end{quote}
16
+ が得られる.これらの項目について順に詳細な振る舞いとそれを記述する
17
+ シナリオを検討していく.
18
+
19
+ \subsubsection{my\_helpのfeatures}
20
+ 下記は私が作成したmy\_helpの一部をfeaturesで書いたものである.
21
+
22
+ \paragraph{--add [item]}
23
+ このコマンドは新しいitemをspecific\_helpに追加する.
24
+ 提供される機能を
25
+ シナリオの先頭に内容をかいつまんでこの振る舞いが記述されている.
26
+ 実装では,ヘルプの内容は~/.my\_help/emacs\_help.ymlに元dataがある
27
+ \begin{quote}\begin{verbatim}
28
+ nasu% cat add.feature
29
+ #language: ja
30
+
31
+ #--add [item]
32
+ 機能: 新しいitemをspecific_helpに追加する
33
+ specific_helpとは,ユーザが作成するそれぞれのヘルプである
34
+ 新しいhelp画面を追加したい
35
+
36
+ シナリオ: コマンドを入力してspecific_helpにitemを追加する
37
+ 前提 新たなhelpコマンドを追加したい
38
+ もし emacs_help --add[item]を入力する
39
+ ならば ~/.my_help/emacs_help.ymlに新しいitemが自動的に追加される
40
+
41
+ \end{verbatim}\end{quote}
42
+ \paragraph{全てのhelp画面の表示}\begin{lstlisting}[style=,basicstyle={\scriptsize\ttfamily}]
43
+
44
+ #language: ja
45
+
46
+ #--all
47
+ 機能: 全てのhelp画面を見る
48
+ 複数のhelp画面を一度に見たい時に便利である
49
+
50
+ シナリオ: コマンドを入力してすべてのhelpを見る
51
+ 前提 複数のhelp画面を表示したい
52
+ もし emacs_help --allと入力する
53
+ ならば すべてのhelp画面が表示される
54
+ \end{lstlisting}
55
+ シナリオ:コマンドをニュ力してすべてのhelp画面を見る
56
+
57
+ コマンド:emacs\_help --all
58
+
59
+ \paragraph{過去にバックアップしてあるitemのリストの表示}\begin{lstlisting}[style=,basicstyle={\scriptsize\ttfamily}]
60
+ #language: ja
61
+
62
+ #--backup_list
63
+ 機能: 過去にバックアップしてあるitemのリストを表示させる
64
+ 何をバックアップしたかの確認をしたい
65
+
66
+ シナリオ: コマンドを入力してバックアップのリストを見る
67
+ 前提 バックアップのリストを見たい
68
+ もし emacs_help --backup_listを入力する
69
+ ならば バックアップしているitemのリストが表示される
70
+
71
+ \end{lstlisting}
72
+ シナリオ:コマンドを入力してバックアップのリストを見る
73
+ コマンド:emacs\_help --backup\_list
74
+
75
+ \paragraph{helpコマンドの追加や削除,編集をするファイルの開示}\begin{lstlisting}[style=,basicstyle={\scriptsize\ttfamily}]
76
+ # language: ja
77
+ #--edit
78
+ 機能: helpコマンドの追加や削除,編集をするためのeiditを開く
79
+ emacs_helpと入力したときに出てくるhelpのコマンドの追加や削除,編集ができる
80
+
81
+ シナリオ: コマンドを入力してeditを開く
82
+ 前提 emacs_helpのコマンドの編集がしたい
83
+ もし emacs_help --editと入力する
84
+ ならば ~/.my_help/emacs_help.ymlがemacsで開かれる
85
+ \end{lstlisting}
86
+ シナリオ:コマンドを入力してeditを開く
87
+ コマンド:emacs\_help --edit
88
+
89
+ 元dataである~/.my\_help/emacs\_help.ymlを開く.
90
+
91
+ ここで編集を行い,emacsで開いているのでC-x,C-sで保存する.
92
+
93
+ \paragraph{specific\_helpのitemの消去}\begin{lstlisting}[style=,basicstyle={\scriptsize\ttfamily}]
94
+ #language: ja
95
+
96
+ #--remove [item]
97
+ 機能: specific_helpのitemを消す
98
+ いらなくなったitemを消したいときに使う
99
+
100
+ シナリオ: コマンドを入力してitemを消す
101
+ 前提 いらないitemを消したい
102
+ もし emacs_help remove [item]
103
+ ならば ~/.my_help/emacs_help.ymlからitemが消える
104
+
105
+ \end{lstlisting}
106
+ シナリオ:コマンドを入力してitemを消す
107
+
108
+ コマンド:emacs\_help --remove
109
+
110
+ \paragraph{itemのバックアップ}\begin{lstlisting}[style=,basicstyle={\scriptsize\ttfamily}]
111
+ #language: ja
112
+
113
+ #--store [item]
114
+ 機能: itemのバックアップを取る
115
+ バックアップとして残したいitemがあるときに使う
116
+
117
+ シナリオ: コマンドを入力してitemのバックアップをとる
118
+ 前提 バックアップをとっておきたい
119
+ もし emacs_help --store [item]と入力する
120
+ ならば 入力したitemのバックアップが作られる
121
+ \end{lstlisting}
122
+ シナリオ:コマンドを入力してバックアップをとる
123
+
124
+ コマンド:emacs\_help --store [item]
125
+
126
+ \paragraph{hikiへのformatの変更}\begin{lstlisting}[style=,basicstyle={\scriptsize\ttfamily}]
127
+ # language: ja
128
+
129
+ #--to_hiki
130
+ 機能:formatをhikiモードに変更する
131
+ 一つ一つエディタで開いて変更するのがめんどくさい時に有益である
132
+
133
+ シナリオ: コマンドを入力してformatをhikiモードに変える
134
+ 前提 hikiモードに変更したい
135
+ もし emacs_help --to_hikiと入力する
136
+ ならば formatがhikiモードに変更される
137
+ \end{lstlisting}
138
+ シナリオ:コマンドを入力してformatをhikiモードにする
139
+
140
+ コマンド:emacs\_help --to\_hiki
141
+
142
+ \paragraph{todoの更新}\begin{lstlisting}[style=,basicstyle={\scriptsize\ttfamily}]
143
+ # language: ja
144
+
145
+ 機能: todoの更新を行う
146
+ todoは更新していくものであり,新しく書いたり終わったものを消したいのでバック\
147
+ アップをとって,過去のtodoを残しておく
148
+
149
+ シナリオ: コマンドを入力してtodoを更新していく
150
+ 前提 todoを編集したい
151
+ もし "my_todo --edit"と入力する
152
+ ならば editが開かれる
153
+ かつ 自分のtodoを書き込む
154
+
155
+ シナリオ: コマンドを入力してバックアップをとる
156
+ 前提 todoの編集が終わった
157
+ もし "my_todo --store [item]"と入力する
158
+ ならば itemのバックアップを取る
159
+ \end{lstlisting}
160
+ シナリオ1:コマンドを入力してtodoを更新する
161
+ シナリオ2:コマンドを入力してバックアップをとる
162
+
163
+ コマンド1:my\_todo --edit
164
+ コマンド2:my\_todo --store [item]
165
+
166
+ my\_todo --editで~/.my\_help/my\_todo.ymlを開く.
167
+
168
+ ここで編集を行い,emacsで開いているのでC-x,C-sで保存する.
169
+
170
+ my\_todo --store [item]でtodoのitemをバックアップとっておく.
171
+
172
+ この動作により過去のバックアップを閲覧することができ,どんどん更新することが可能である.
173
+
@@ -0,0 +1,9 @@
1
+ \title{卒業論文\\
2
+ \vspace{4cm} ユーザメモソフトmy\_helpの開発}
3
+ \author{ 関西学院大学 理工学部 情報科学科\\\\2535 那須比呂貴}
4
+ \date{\vspace{3cm} 2017年 3月\\
5
+ \vspace{3cm} 指導教員  西谷 滋人 教授}
6
+ \maketitle
7
+ \setcounter{tocdepth}{4}
8
+ \tableofcontents
9
+
@@ -0,0 +1,53 @@
1
+ # -*- coding: utf-8 -*-
2
+ ---
3
+ :head:
4
+ - hikiutil関連のヘルプ
5
+ :initialize:
6
+ :opts:
7
+ :short: "-i"
8
+ :long: "--initialize"
9
+ :desc: hikiで卒論を書くときの初期化と掟
10
+ :title: hikiで卒論を書くときの初期化と掟
11
+ :cont:
12
+ - 開発メモ:figs,dataも作成
13
+ - 目的:西谷が後で迷わないように決まったファイル構造を堅持すべし
14
+ - 文書:hikiで書く.のちには,latexに変換するプログラムを提供します
15
+ - 図表:すべての図表をkeynoteにまとめる,タイトルを分かりやすく書く
16
+ - データ:dataディレクトリにまとめる.ファイル名をkeynoteの対応する図表中に記す
17
+ - hiki --initializeで初期ファイル(Rakefile, ./.hikirc, hiki_help.yml)がcopyされる
18
+ - hiki_help.ymlを適宜~/.my_helpにcopyしてhiki_helpとして利用,(my_help参照)
19
+ - Errno::EACCESやpermission errorがでたときはrake chenvを試してみる(報告して)
20
+ - rake syncによってhikiディレクトリーと同期が取られる
21
+ - hiki -u TARGETによってブラウザー表示される
22
+ - テキストの拡張子は'.hiki'
23
+ - hikiでのurlはテキスト名とディレクトリーから自動生成される
24
+ - 例えば,hiki2latex_saki/introduciton.hikiはhiki2latex_saki_introducitonと変換される
25
+ :error:
26
+ :opts:
27
+ :short: "-e"
28
+ :long: "--error"
29
+ :desc: error対応
30
+ :title: error対応
31
+ :cont:
32
+ - Permission denied - ./data/text/boundary_narita (Errno::EACCES)->テキストにhikiが書き込めない,chmod
33
+ a+w FILE
34
+ :figs:
35
+ :opts:
36
+ :short: "-f"
37
+ :long: "--figs"
38
+ :desc: 図表:すべての図表をkeynoteにまとめる,タイトルを分かりやすく書く
39
+ :title: 図表:すべての図表をkeynoteにまとめる,タイトルを分かりやすく書く
40
+ :cont:
41
+ - keynoteに書いたスライドはイメージに書き出して,rake convert 80 TARGET_DIRでfigsに変換
42
+ - rake syncでfigsにあるfilesはhiki/target_dirにcpされる
43
+ - 'convert #{source} -resize 20% #{target}によって,target=figs/TAERGET.pngに20%に縮小して保存される'
44
+ - convert -density 300 view.svg view.pngで300dpiで変換
45
+ - |
46
+ attach_anchorでは
47
+ '{{attach_anchor(test.png, hiki2latex_saki)}}'
48
+ と,directory指定しなければならない.
49
+ - keynoteであとで図を挿入して番号が変わった時の原稿の一括変換
50
+ - rake increment 2 boundary_bob.hiki boundary_bob > tmp.hiki
51
+ - rake convert 60 boundary_bob
52
+ - rake sync
53
+ - hiki -u boundary_bob_tmp
@@ -0,0 +1,22 @@
1
+ \relax
2
+ \@writefile{toc}{\contentsline {section}{\numberline {1}序論}{5}}
3
+ \@setckpt{introduction}{
4
+ \setcounter{page}{6}
5
+ \setcounter{equation}{0}
6
+ \setcounter{enumi}{0}
7
+ \setcounter{enumii}{0}
8
+ \setcounter{enumiii}{0}
9
+ \setcounter{enumiv}{0}
10
+ \setcounter{footnote}{0}
11
+ \setcounter{mpfootnote}{0}
12
+ \setcounter{part}{0}
13
+ \setcounter{section}{1}
14
+ \setcounter{subsection}{0}
15
+ \setcounter{subsubsection}{0}
16
+ \setcounter{paragraph}{0}
17
+ \setcounter{subparagraph}{0}
18
+ \setcounter{figure}{0}
19
+ \setcounter{table}{0}
20
+ \setcounter{lstnumber}{1}
21
+ \setcounter{lstlisting}{0}
22
+ }
@@ -0,0 +1,23 @@
1
+ \section{序論}
2
+ プログラム開発では,統合開発環境がいくつも用意されているが,多くの現場では,terminal上での開発が一般的である.
3
+ ところが,プログラミング初心者はterminal上でのcharacter user interface(CUI)を苦手としている.
4
+ プログラミングのレベルが上がるに従って,
5
+ shell commandやfile directory操作, process制御にCUIを使うことが常識となる.
6
+
7
+ この不可欠なCUIスキルの習得を助けるソフトとして,ユーザメモソフトmy\_helpがruby gemsに置かれている.
8
+ このcommand line interface(CLI)で動作するソフトは,helpをterminal上で簡単に提示するものである.
9
+ また,初心者が自ら編集することによって,すぐに参照できるメモとしての機能を提供している.
10
+ これによって,terminal上でちょっとした調べ物ができるため,作業や思考が中断することなく
11
+ プログラム開発に集中できることが期待でき,初心者のスキル習得が加速することが期待できる.
12
+
13
+ しかし,Ruby gemsとして提供されているこのソフトは,動作はするがテストが用意されていない.
14
+ 慣れた開発者は,テストを見ることで仕様を理解するのが常識である.
15
+ 今後ソフトを進化させるために共同開発を進めていくには,仕様や動作の標準となるテスト記述が不可欠となる.
16
+
17
+ そこで,本研究では,ユーザメモソフトであるmy\_helpのテストを開発することを目的とする.
18
+ 本研究では、テスト駆動開発の中でも,ソフトの振る舞いを記述する
19
+ Behavior Driven Development(BDD)に基づいてテストを記述していく.
20
+ Rubyにおいて、BDD環境を提供する標準的なフレームワークであるCucumberとRSpecを用いて,
21
+ my\_helpがどのような振る舞いをするのかを記述する.
22
+ Cucumberは自然言語で振る舞いを記述することができるため,ユーザにとって,わかりやすく振る舞いを確認することができる.
23
+