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.
- checksums.yaml +4 -4
- data/.DS_Store +0 -0
- data/.gitignore +1 -0
- data/.rspec +2 -0
- data/Gemfile +1 -0
- data/README.md +1 -1
- data/Rakefile +35 -12
- data/exe/{todo_help → my_todo} +1 -1
- data/hikis/diff_against_org-mode.hiki +34 -0
- data/hikis/tmp.org +20 -0
- data/lib/.emacs_help.rb.swp +0 -0
- data/lib/daddygongon/my_todo.yml +31 -0
- data/lib/emacs_help.rb +15 -0
- data/lib/emacs_help.rb~ +137 -0
- data/lib/my_help/test.rb +3 -0
- data/lib/my_help/version.rb +1 -1
- data/lib/my_help.rb +1 -1
- data/lib/my_todo/my_todo.rb +7 -0
- data/lib/my_todo/my_todo.rb~ +7 -0
- data/lib/specific_help.rb +42 -11
- data/lib/specific_help.rb~ +193 -0
- data/lib/todo.rb +1 -0
- data/lib/todo.rb~ +1 -0
- data/lor +0 -0
- data/my_help.gemspec +4 -2
- data/my_help.wiki/Home.md +1 -1
- data/my_help.wiki/README_ja.md +1 -1
- data/my_help_nasu/.DS_Store +0 -0
- data/my_help_nasu/.gitignore +1 -0
- data/my_help_nasu/Rakefile +422 -0
- data/my_help_nasu/code.hiki +285 -0
- data/my_help_nasu/consideration.hiki +8 -0
- data/my_help_nasu/features.hiki +185 -0
- data/my_help_nasu/figs/my_help_nasu.001.jpeg +0 -0
- data/my_help_nasu/figs/my_help_nasu.001.jpg +0 -0
- data/my_help_nasu/figs/my_help_nasu1.001.jpg +0 -0
- data/my_help_nasu/head2.tex +9 -0
- data/my_help_nasu/hiki_help.yml +53 -0
- data/my_help_nasu/introduction.hiki +29 -0
- data/my_help_nasu/key_bind_mi +1 -0
- data/my_help_nasu/latex_dir/.gitignore +1 -0
- data/my_help_nasu/latex_dir/Rakefile +420 -0
- data/my_help_nasu/latex_dir/code.aux +25 -0
- data/my_help_nasu/latex_dir/code.tex +271 -0
- data/my_help_nasu/latex_dir/consideration.aux +22 -0
- data/my_help_nasu/latex_dir/consideration.tex +9 -0
- data/my_help_nasu/latex_dir/features.aux +31 -0
- data/my_help_nasu/latex_dir/features.tex +173 -0
- data/my_help_nasu/latex_dir/head.tex +9 -0
- data/my_help_nasu/latex_dir/hiki_help.yml +53 -0
- data/my_help_nasu/latex_dir/introduction.aux +22 -0
- data/my_help_nasu/latex_dir/introduction.tex +23 -0
- data/my_help_nasu/latex_dir/jlisting.sty +216 -0
- data/my_help_nasu/latex_dir/jlisting.tex +216 -0
- data/my_help_nasu/latex_dir/latex_dir/head.tex +9 -0
- data/my_help_nasu/latex_dir/latex_dir/jlisting.tex +216 -0
- data/my_help_nasu/latex_dir/latex_dir/pre.tex +36 -0
- data/my_help_nasu/latex_dir/method_bdd.aux +26 -0
- data/my_help_nasu/latex_dir/method_bdd.tex +28 -0
- data/my_help_nasu/latex_dir/method_cucumber.aux +28 -0
- data/my_help_nasu/latex_dir/method_cucumber.log +28 -0
- data/my_help_nasu/latex_dir/method_cucumber.tex +205 -0
- data/my_help_nasu/latex_dir/method_usage.aux +28 -0
- data/my_help_nasu/latex_dir/method_usage.tex +76 -0
- data/my_help_nasu/latex_dir/my_help_nasu.aux +12 -0
- data/my_help_nasu/latex_dir/my_help_nasu.log +328 -0
- data/my_help_nasu/latex_dir/my_help_nasu.pdf +0 -0
- data/my_help_nasu/latex_dir/my_help_nasu.synctex.gz +0 -0
- data/my_help_nasu/latex_dir/my_help_nasu.tex +74 -0
- data/my_help_nasu/latex_dir/my_help_nasu.toc +32 -0
- data/my_help_nasu/latex_dir/overview.aux +21 -0
- data/my_help_nasu/latex_dir/overview.tex +12 -0
- data/my_help_nasu/latex_dir/pre.tex +36 -0
- data/my_help_nasu/method_bdd.hiki +24 -0
- data/my_help_nasu/method_cucumber.hiki +184 -0
- data/my_help_nasu/method_usage.hiki +69 -0
- data/my_help_nasu/my_help_nasu/.DS_Store +0 -0
- data/my_help_nasu/my_help_nasu/my_help_nasu.001.jpeg +0 -0
- data/my_help_nasu/my_help_nasu.hiki +32 -0
- data/my_help_nasu/my_help_nasu.key +0 -0
- data/my_help_nasu/overview.hiki +11 -0
- data/tmp.txt +2 -0
- metadata +104 -10
- data/lib/daddygongon/git_help.yml +0 -30
- data/lib/daddygongon/todo_help.yml +0 -58
@@ -0,0 +1,285 @@
|
|
1
|
+
{{toc}}
|
2
|
+
!結果
|
3
|
+
|
4
|
+
CucumberとRSpecを用いてBDDでmy_helpのテスト開発を進めて行きました.
|
5
|
+
// アプリの振る舞いを説明する
|
6
|
+
// なぜ自分が作ったかを納得してもらえないから.
|
7
|
+
// 自分の作業の目的の意義を説明するために,全体の概要を説明することは妥当
|
8
|
+
// 先行研究->先行開発,ソフト開発==研究,why!!
|
9
|
+
ここでは,焦点を合わせたmy_helpの中での一つの振る舞いである
|
10
|
+
「todoの更新」を例として詳しく見て行きます.
|
11
|
+
|
12
|
+
!!todoの更新マニュアル
|
13
|
+
最初に,todoを更新するときの手順を示します.
|
14
|
+
|
15
|
+
#my_todo --editを入力して~/.my_help/my_todo.ymlを開く
|
16
|
+
#editorでtodoを書き込む(今週やることならweeklyというitemを作ってそこに書き込む)
|
17
|
+
#保存して~/.my_help/my_todo.ymlを閉じる
|
18
|
+
#my_todoと打ち込んで更新されていたら完成
|
19
|
+
#my_todo --store [item]を入力してitemのバックアップをとる
|
20
|
+
|
21
|
+
この振る舞いがきちんとできているのかを実際にテスト構築して行きます.
|
22
|
+
|
23
|
+
!!Cucumber
|
24
|
+
|
25
|
+
以下はtodoの更新を行うときのfeatureです.
|
26
|
+
まず,適当なディレクトリにfeaturesというディレクトリを作成します.
|
27
|
+
次に先ほど作成した,featuresディレクトリにmy_todo.featureを作成します.
|
28
|
+
<<< tcsh
|
29
|
+
# language: ja
|
30
|
+
|
31
|
+
機能: todoの更新を行う
|
32
|
+
todoは更新していくものであり,新しく書いたり終わったものを
|
33
|
+
消したいのでバックアップをとって,過去のtodoを残しておく
|
34
|
+
|
35
|
+
|
36
|
+
シナリオ: コマンドを入力してtodoを更新していく
|
37
|
+
前提 todoを編集したい
|
38
|
+
もし "my_todo --edit"と入力する
|
39
|
+
ならば editが開かれる
|
40
|
+
かつ 自分のtodoを書き込む
|
41
|
+
|
42
|
+
シナリオ: コマンドを入力してバックアップをとる
|
43
|
+
前提 todoの編集が終わった
|
44
|
+
もし "my_todo --store [item]"と入力する
|
45
|
+
ならば itemのバックアップを取る
|
46
|
+
|
47
|
+
>>>
|
48
|
+
|
49
|
+
機能とは,このシステムの機能のことを記述します.ここでは,todoを更新するシステムですので,「todoの更新を行う」です.
|
50
|
+
機能の下には,機能の補足説明を記述します.機能の補足説明では,ルールがないので自分がわかりやすいように,記述するのが常識です.
|
51
|
+
シナリオは,その名の通りtodoを更新する時のユーザの行動やシステム振る舞いを前提,もし,ならば,かつ,しかしに分類して記述します.
|
52
|
+
シナリオは,一つの機能に対して複数書くことが可能です.ここでは、「todoを更新する」と「バックアップをとる」という二つの
|
53
|
+
シナリオをたてています.
|
54
|
+
|
55
|
+
ここまでfeatureが記述できたら,次はcucumberコマンドを実行してみます.
|
56
|
+
コマンドは以下の通りです.
|
57
|
+
/Users/nasubi/nasu% cucumber features/my_todo.feature
|
58
|
+
featuresディレクトリにあるmy_todo.featureファイルをcucumberで実行するという意味です.
|
59
|
+
|
60
|
+
実行すると以下のようになります.
|
61
|
+
|
62
|
+
<<< tcsh
|
63
|
+
# language: ja
|
64
|
+
機能: todoの更新を行う
|
65
|
+
todoは更新していくものであり,新しく書いたり終わったものを消したいのでバックアップをとって,過去のtodoを残しておく
|
66
|
+
|
67
|
+
シナリオ: コマンドを入力してtodoを更新していく # features/my_todo.feature:6
|
68
|
+
前提todoを編集したい # features/my_todo.feature:7
|
69
|
+
もし"my_todo --edit"と入力する # features/my_todo.feature:8
|
70
|
+
ならばeditが開かれる # features/my_todo.feature:9
|
71
|
+
かつ自分のtodoを書き込む # features/my_todo.feature:10
|
72
|
+
|
73
|
+
シナリオ: コマンドを入力してバックアップをとる # features/my_todo.feature:12
|
74
|
+
前提todoの編集が終わった # features/my_todo.feature:13
|
75
|
+
もし"my_todo --store [item]"と入力する # features/my_todo.feature:14
|
76
|
+
ならばitemのバックアップを取る # features/my_todo.feature:15
|
77
|
+
|
78
|
+
2 scenarios (2 undefined)
|
79
|
+
7 steps (7 undefined)
|
80
|
+
0m0.080s
|
81
|
+
|
82
|
+
You can implement step definitions for undefined steps with these snippets:
|
83
|
+
|
84
|
+
前提(/^todoを編集したい$/) do
|
85
|
+
pending # Write code here that turns the phrase above into concrete actions
|
86
|
+
end
|
87
|
+
|
88
|
+
もし(/^"([^"]*)"と入力する$/) do |arg1|
|
89
|
+
pending # Write code here that turns the phrase above into concrete actions
|
90
|
+
end
|
91
|
+
|
92
|
+
ならば(/^editが開かれる$/) do
|
93
|
+
pending # Write code here that turns the phrase above into concrete actions
|
94
|
+
end
|
95
|
+
|
96
|
+
ならば(/^自分のtodoを書き込む$/) do
|
97
|
+
pending # Write code here that turns the phrase above into concrete actions
|
98
|
+
end
|
99
|
+
|
100
|
+
前提(/^todoの編集が終わった$/) do
|
101
|
+
pending # Write code here that turns the phrase above into concrete actions
|
102
|
+
end
|
103
|
+
|
104
|
+
ならば(/^itemのバックアップを取る$/) do
|
105
|
+
pending # Write code here that turns the phrase above into concrete actions
|
106
|
+
end
|
107
|
+
>>>
|
108
|
+
|
109
|
+
ここでは,2つのscenarioと7つのstepが失敗しています.
|
110
|
+
まだstep定義を記述していないので当たり前です.
|
111
|
+
|
112
|
+
一度cucumberを実行したのには理由があります.
|
113
|
+
featureを書いた時点でcucumberを実行すると,ステップ定義の元となるコマンドを,cucumberが自動的に作成してくれるからです.
|
114
|
+
|
115
|
+
以下がcucumberから出力されたステップ定義の元となる部分です.
|
116
|
+
<<< tcsh
|
117
|
+
You can implement step definitions for undefined steps with these snippets:
|
118
|
+
|
119
|
+
前提(/^todoを編集したい$/) do
|
120
|
+
pending # Write code here that turns the phrase above into concrete actions
|
121
|
+
end
|
122
|
+
|
123
|
+
もし(/^"([^"]*)"と入力する$/) do |arg1|
|
124
|
+
pending # Write code here that turns the phrase above into concrete actions
|
125
|
+
end
|
126
|
+
|
127
|
+
ならば(/^editが開かれる$/) do
|
128
|
+
pending # Write code here that turns the phrase above into concrete actions
|
129
|
+
end
|
130
|
+
|
131
|
+
ならば(/^自分のtodoを書き込む$/) do
|
132
|
+
pending # Write code here that turns the phrase above into concrete actions
|
133
|
+
end
|
134
|
+
|
135
|
+
前提(/^todoの編集が終わった$/) do
|
136
|
+
pending # Write code here that turns the phrase above into concrete actions
|
137
|
+
end
|
138
|
+
|
139
|
+
ならば(/^itemのバックアップを取る$/) do
|
140
|
+
pending # Write code here that turns the phrase above into concrete actions
|
141
|
+
end
|
142
|
+
>>>
|
143
|
+
|
144
|
+
これをコピーして,featuresディレクトリの中でstep_definitionsディレクトリを作成し,その中にmy_todo_spec.rbを作成し,そこに貼付けます.
|
145
|
+
|
146
|
+
ここでもう一度cucumberを実行してみると
|
147
|
+
<<< tcsh
|
148
|
+
/Users/nasubi/nasu% cucumber features/my_todo.feature
|
149
|
+
# language: ja
|
150
|
+
機能: todoの更新を行う
|
151
|
+
todoは更新していくものであり,新しく書いたり終わったものを消したいのでバックアップをとって,過去のtodoを残しておく
|
152
|
+
|
153
|
+
シナリオ: コマンドを入力してtodoを更新していく # features/my_todo.feature:6
|
154
|
+
前提todoを編集したい # features/step_definitions/my_todo_spec.rb:1
|
155
|
+
TODO (Cucumber::Pending)
|
156
|
+
./features/step_definitions/my_todo_spec.rb:2:in `/^todoを編集したい$/'
|
157
|
+
features/my_todo.feature:7:in `前提todoを編集したい'
|
158
|
+
もし"my_todo --edit"と入力する # features/step_definitions/my_todo_spec.rb:5
|
159
|
+
ならばeditが開かれる # features/step_definitions/my_todo_spec.rb:9
|
160
|
+
かつ自分のtodoを書き込む # features/step_definitions/my_todo_spec.rb:13
|
161
|
+
|
162
|
+
シナリオ: コマンドを入力してバックアップをとる # features/my_todo.feature:12
|
163
|
+
前提todoの編集が終わった # features/step_definitions/my_todo_spec.rb:17
|
164
|
+
TODO (Cucumber::Pending)
|
165
|
+
./features/step_definitions/my_todo_spec.rb:18:in `/^todoの編集が終わった$/'
|
166
|
+
features/my_todo.feature:13:in `前提todoの編集が終わった'
|
167
|
+
もし"my_todo --store [item]"と入力する # features/step_definitions/my_todo_spec.rb:5
|
168
|
+
ならばitemのバックアップを取る # features/step_definitions/my_todo_spec.rb:21
|
169
|
+
|
170
|
+
2 scenarios (2 pending)
|
171
|
+
7 steps (5 skipped, 2 pending)
|
172
|
+
0m0.045s
|
173
|
+
|
174
|
+
>>>
|
175
|
+
と変化が出てきます.
|
176
|
+
2 scenarios (2 pending)
|
177
|
+
7 steps (5 skipped, 2 pending)
|
178
|
+
これは2つのシナリオの内2つがpendingであり,7つのstepの内2つがpendingで5つがskipしたことを表しています.
|
179
|
+
step_definitionsのmy_todo_spec.rbのpending部分を書き換えて,step_definitionsの記述を進めて行きます.
|
180
|
+
|
181
|
+
cucumberが成功すると下記のような結果となります.
|
182
|
+
|
183
|
+
<<< ruby
|
184
|
+
/Users/nasubi/my_help% cucumber features/my_todo.feature
|
185
|
+
# language: ja
|
186
|
+
機能: todoの更新を行う
|
187
|
+
todoは更新していくものであり,新しく書いたり終わったものを消したいのでバックアップをとって,過去のtodoを残しておく
|
188
|
+
|
189
|
+
シナリオ: コマンドを入力してtodoを更新していく # features/my_todo.feature:6
|
190
|
+
前提todoを編集したい # features/step_definitions/my_todo_spec.rb:2
|
191
|
+
もし"my_todo --edit"と入力する # features/step_definitions/my_todo_spec.rb:6
|
192
|
+
ならばeditが開かれる # features/step_definitions/my_todo_spec.rb:10
|
193
|
+
かつ自分のtodoを書き込む # features/step_definitions/my_todo_spec.rb:14
|
194
|
+
|
195
|
+
シナリオ: コマンドを入力してバックアップをとる # features/my_todo.feature:12
|
196
|
+
前提todoの編集が終わった # features/step_definitions/my_todo_spec.rb:18
|
197
|
+
もし"my_todo --store [item]"と入力する # features/step_definitions/my_todo_spec.rb:6
|
198
|
+
ならばitemのバックアップを取る # features/step_definitions/my_todo_spec.rb:22
|
199
|
+
|
200
|
+
2 scenarios (2 passed)
|
201
|
+
7 steps (7 passed)
|
202
|
+
0m0.030s
|
203
|
+
|
204
|
+
>>>
|
205
|
+
|
206
|
+
!!RSpec
|
207
|
+
次にRSpecを使って実際にtodoを更新する振る舞いをするコード書いていく.
|
208
|
+
|
209
|
+
そのための準備として,まずspecというディレクトリを作成し,my_todoというサブディレクトリを追加する.
|
210
|
+
次に,このサブディレクトリにtodo_spec.rbというファイルを追加する.
|
211
|
+
作業を進める過程で,lib/my_todo/my_todo.rbソースファイルとspec/my_todo/todo_spec.rbスペックファイルが1対1に対応するといった要領で,
|
212
|
+
並列のディレクトリ構造を築いていく.
|
213
|
+
この機能はmy_help --editと入力されれば,~/.my_help/my_todo.ymlが開かれるのでその振る舞いをするコードを書きます.
|
214
|
+
まずtodo_spec.rbは下記の通りになります
|
215
|
+
|
216
|
+
<<< ruby
|
217
|
+
require 'spec_helper'
|
218
|
+
|
219
|
+
|
220
|
+
module Mytodo
|
221
|
+
describe Todo do
|
222
|
+
describe "#open" do
|
223
|
+
it "open file my_todo.yml"
|
224
|
+
end
|
225
|
+
end
|
226
|
+
end
|
227
|
+
|
228
|
+
>>>
|
229
|
+
|
230
|
+
describe()メソッドは,RSpecのAPIにアクセスしてRSpec::Core::ExampleGroupのサブクラスを返します.
|
231
|
+
ExampleGroupクラスはオブジェクトに期待される振る舞いのサンプルを示すグループです.
|
232
|
+
it()メソッドはサンプルを作成します.
|
233
|
+
|
234
|
+
このスペックを実行するために,specディレクトリにspec_helper.rbを追加します.
|
235
|
+
中身は下記の通りです.
|
236
|
+
|
237
|
+
<<< ruby
|
238
|
+
$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
|
239
|
+
require 'my_help'
|
240
|
+
require 'todo'
|
241
|
+
>>>
|
242
|
+
|
243
|
+
これで事前準備は完成でコードを書いていきます.
|
244
|
+
|
245
|
+
完成したコードを下記の通りです.
|
246
|
+
|
247
|
+
<<< ruby
|
248
|
+
require 'spec_helper'
|
249
|
+
|
250
|
+
|
251
|
+
module Mytodo
|
252
|
+
describe Todo do
|
253
|
+
describe "#open" do
|
254
|
+
it "open file my_todo.yml" do
|
255
|
+
system("emacs ~/.my_help/my_todo.yml")
|
256
|
+
end
|
257
|
+
end
|
258
|
+
end
|
259
|
+
end
|
260
|
+
|
261
|
+
>>>
|
262
|
+
|
263
|
+
これでrspecを実行すると以下のような結果が表示される.
|
264
|
+
<<< tcsh
|
265
|
+
/Users/nasubi/my_help% rspec spec --color
|
266
|
+
|
267
|
+
my_help command
|
268
|
+
version option
|
269
|
+
should be successfully executed
|
270
|
+
should have output: "my_help 0.4.3"
|
271
|
+
help option
|
272
|
+
should be successfully executed
|
273
|
+
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"
|
274
|
+
|
275
|
+
Mytodo::Todo
|
276
|
+
#open
|
277
|
+
open file my_todo.yml
|
278
|
+
|
279
|
+
Finished in 3.87 seconds (files took 0.30703 seconds to load)
|
280
|
+
5 examples, 0 failures
|
281
|
+
|
282
|
+
>>>
|
283
|
+
これでtodoを更新するときの振る舞いのテストはうまく成功した.
|
284
|
+
|
285
|
+
この方法でBDDでmy_helpのテスト開発を行い,仕様を決定していった.
|
@@ -0,0 +1,8 @@
|
|
1
|
+
!考察
|
2
|
+
今回の開発において,ユーザメモソフトであるmy_helpのテスト開発は成功した.
|
3
|
+
つまり,my_helpの仕様と動作の標準が確定したことで,今後のソフトを進化させるための共同開発がスムーズにいくと推測される.
|
4
|
+
先に述べた通り,ソフト開発は一人でせず,複数人で開発することが普通である.
|
5
|
+
その時に起こる障害として,意思の疎通ができていないことがあげられる.
|
6
|
+
振る舞いが標準化されていないと,どのような振る舞いをするのかが,プログラムを見るだけでは,ずれが生じてしまう.
|
7
|
+
また,開発者の意図が読めていないと,コードの意味も変わってくるので,テスト開発をして,仕様と動作の標準を確定することは重要であった.
|
8
|
+
加えて,初めてmy_helpを使うユーザでも仕様と動作の標準がわかっていれば,短い時間でmy_helpを使いこなせるし,そのことによって,ユーザそれぞれに自分にあったmy_helpに変更することも容易になる.
|
@@ -0,0 +1,185 @@
|
|
1
|
+
{{toc}}
|
2
|
+
!!featuresでの記述とその意味
|
3
|
+
featuresでの記述は,コマンドの振る舞いを説明する自然な記述となる.
|
4
|
+
その様子をspecific_helpが用意しているデフォルトのコマンドについて
|
5
|
+
説明する.specific_helpとは,ユーザが作成するそれぞれのヘルプである.
|
6
|
+
speific_helpの--helpを表示させると,
|
7
|
+
<<<
|
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
|
+
>>>
|
16
|
+
が得られる.これらの項目について順に詳細な振る舞いとそれを記述する
|
17
|
+
シナリオを検討していく.
|
18
|
+
|
19
|
+
|
20
|
+
!!my_helpのfeatures
|
21
|
+
下記は私が作成したmy_helpの一部をfeaturesで書いたものである.
|
22
|
+
|
23
|
+
!!!--add [item]
|
24
|
+
このコマンドは新しいitemをspecific_helpに追加する.
|
25
|
+
提供される機能を
|
26
|
+
シナリオの先頭に内容をかいつまんでこの振る舞いが記述されている.
|
27
|
+
実装では,ヘルプの内容は~/.my_help/emacs_help.ymlに元dataがある
|
28
|
+
|
29
|
+
<<<
|
30
|
+
nasu% cat add.feature
|
31
|
+
#language: ja
|
32
|
+
|
33
|
+
#--add [item]
|
34
|
+
機能: 新しいitemをspecific_helpに追加する
|
35
|
+
specific_helpとは,ユーザが作成するそれぞれのヘルプである
|
36
|
+
新しいhelp画面を追加したい
|
37
|
+
|
38
|
+
シナリオ: コマンドを入力してspecific_helpにitemを追加する
|
39
|
+
前提 新たなhelpコマンドを追加したい
|
40
|
+
もし emacs_help --add[item]を入力する
|
41
|
+
ならば ~/.my_help/emacs_help.ymlに新しいitemが自動的に追加される
|
42
|
+
|
43
|
+
>>>
|
44
|
+
|
45
|
+
|
46
|
+
!!!全てのhelp画面の表示
|
47
|
+
<<< all_help.feature
|
48
|
+
|
49
|
+
#language: ja
|
50
|
+
|
51
|
+
#--all
|
52
|
+
機能: 全てのhelp画面を見る
|
53
|
+
複数のhelp画面を一度に見たい時に便利である
|
54
|
+
|
55
|
+
シナリオ: コマンドを入力してすべてのhelpを見る
|
56
|
+
前提 複数のhelp画面を表示したい
|
57
|
+
もし emacs_help --allと入力する
|
58
|
+
ならば すべてのhelp画面が表示される
|
59
|
+
>>>
|
60
|
+
シナリオ:コマンドをニュ力してすべてのhelp画面を見る
|
61
|
+
|
62
|
+
コマンド:emacs_help --all
|
63
|
+
|
64
|
+
!!!過去にバックアップしてあるitemのリストの表示
|
65
|
+
<<< backup_list.feature
|
66
|
+
#language: ja
|
67
|
+
|
68
|
+
#--backup_list
|
69
|
+
機能: 過去にバックアップしてあるitemのリストを表示させる
|
70
|
+
何をバックアップしたかの確認をしたい
|
71
|
+
|
72
|
+
シナリオ: コマンドを入力してバックアップのリストを見る
|
73
|
+
前提 バックアップのリストを見たい
|
74
|
+
もし emacs_help --backup_listを入力する
|
75
|
+
ならば バックアップしているitemのリストが表示される
|
76
|
+
|
77
|
+
>>>
|
78
|
+
シナリオ:コマンドを入力してバックアップのリストを見る
|
79
|
+
コマンド:emacs_help --backup_list
|
80
|
+
|
81
|
+
!!!helpコマンドの追加や削除,編集をするファイルの開示
|
82
|
+
<<< edit_help.feature
|
83
|
+
# language: ja
|
84
|
+
#--edit
|
85
|
+
機能: helpコマンドの追加や削除,編集をするためのeiditを開く
|
86
|
+
emacs_helpと入力したときに出てくるhelpのコマンドの追加や削除,編集ができる
|
87
|
+
|
88
|
+
シナリオ: コマンドを入力してeditを開く
|
89
|
+
前提 emacs_helpのコマンドの編集がしたい
|
90
|
+
もし emacs_help --editと入力する
|
91
|
+
ならば ~/.my_help/emacs_help.ymlがemacsで開かれる
|
92
|
+
>>>
|
93
|
+
シナリオ:コマンドを入力してeditを開く
|
94
|
+
コマンド:emacs_help --edit
|
95
|
+
|
96
|
+
元dataである~/.my_help/emacs_help.ymlを開く.
|
97
|
+
|
98
|
+
ここで編集を行い,emacsで開いているのでC-x,C-sで保存する.
|
99
|
+
|
100
|
+
!!!specific_helpのitemの消去
|
101
|
+
<<< remove.feature
|
102
|
+
#language: ja
|
103
|
+
|
104
|
+
#--remove [item]
|
105
|
+
機能: specific_helpのitemを消す
|
106
|
+
いらなくなったitemを消したいときに使う
|
107
|
+
|
108
|
+
シナリオ: コマンドを入力してitemを消す
|
109
|
+
前提 いらないitemを消したい
|
110
|
+
もし emacs_help remove [item]
|
111
|
+
ならば ~/.my_help/emacs_help.ymlからitemが消える
|
112
|
+
|
113
|
+
>>>
|
114
|
+
シナリオ:コマンドを入力してitemを消す
|
115
|
+
|
116
|
+
コマンド:emacs_help --remove
|
117
|
+
|
118
|
+
!!!itemのバックアップ
|
119
|
+
<<< store.feature
|
120
|
+
#language: ja
|
121
|
+
|
122
|
+
#--store [item]
|
123
|
+
機能: itemのバックアップを取る
|
124
|
+
バックアップとして残したいitemがあるときに使う
|
125
|
+
|
126
|
+
シナリオ: コマンドを入力してitemのバックアップをとる
|
127
|
+
前提 バックアップをとっておきたい
|
128
|
+
もし emacs_help --store [item]と入力する
|
129
|
+
ならば 入力したitemのバックアップが作られる
|
130
|
+
>>>
|
131
|
+
|
132
|
+
シナリオ:コマンドを入力してバックアップをとる
|
133
|
+
|
134
|
+
コマンド:emacs_help --store [item]
|
135
|
+
|
136
|
+
!!!hikiへのformatの変更
|
137
|
+
<<< to_hiki.feature
|
138
|
+
# language: ja
|
139
|
+
|
140
|
+
#--to_hiki
|
141
|
+
機能:formatをhikiモードに変更する
|
142
|
+
一つ一つエディタで開いて変更するのがめんどくさい時に有益である
|
143
|
+
|
144
|
+
シナリオ: コマンドを入力してformatをhikiモードに変える
|
145
|
+
前提 hikiモードに変更したい
|
146
|
+
もし emacs_help --to_hikiと入力する
|
147
|
+
ならば formatがhikiモードに変更される
|
148
|
+
>>>
|
149
|
+
シナリオ:コマンドを入力してformatをhikiモードにする
|
150
|
+
|
151
|
+
コマンド:emacs_help --to_hiki
|
152
|
+
|
153
|
+
!!!todoの更新
|
154
|
+
<<< my_todo.feature
|
155
|
+
# language: ja
|
156
|
+
|
157
|
+
機能: todoの更新を行う
|
158
|
+
todoは更新していくものであり,新しく書いたり終わったものを消したいのでバック\
|
159
|
+
アップをとって,過去のtodoを残しておく
|
160
|
+
|
161
|
+
シナリオ: コマンドを入力してtodoを更新していく
|
162
|
+
前提 todoを編集したい
|
163
|
+
もし "my_todo --edit"と入力する
|
164
|
+
ならば editが開かれる
|
165
|
+
かつ 自分のtodoを書き込む
|
166
|
+
|
167
|
+
シナリオ: コマンドを入力してバックアップをとる
|
168
|
+
前提 todoの編集が終わった
|
169
|
+
もし "my_todo --store [item]"と入力する
|
170
|
+
ならば itemのバックアップを取る
|
171
|
+
>>>
|
172
|
+
シナリオ1:コマンドを入力してtodoを更新する
|
173
|
+
シナリオ2:コマンドを入力してバックアップをとる
|
174
|
+
|
175
|
+
コマンド1:my_todo --edit
|
176
|
+
コマンド2:my_todo --store [item]
|
177
|
+
|
178
|
+
my_todo --editで~/.my_help/my_todo.ymlを開く.
|
179
|
+
|
180
|
+
ここで編集を行い,emacsで開いているのでC-x,C-sで保存する.
|
181
|
+
|
182
|
+
my_todo --store [item]でtodoのitemをバックアップとっておく.
|
183
|
+
|
184
|
+
この動作により過去のバックアップを閲覧することができ,どんどん更新することが可能である.
|
185
|
+
|
Binary file
|
Binary file
|
Binary file
|
@@ -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,29 @@
|
|
1
|
+
// 目的の前に何が問題があって,何を解決するのかが描かれるべきです.
|
2
|
+
!序論
|
3
|
+
//!!my_helpというソフト
|
4
|
+
プログラム開発では,統合開発環境がいくつも用意されているが,多くの現場では,terminal上での開発が一般的である.
|
5
|
+
ところが,プログラミング初心者はterminal上でのcharacter user interface(CUI)を苦手としている.
|
6
|
+
プログラミングのレベルが上がるに従って,
|
7
|
+
shell commandやfile directory操作, process制御にCUIを使うことが常識となる.
|
8
|
+
|
9
|
+
この不可欠なCUIスキルの習得を助けるソフトとして,ユーザメモソフトmy_helpがruby gemsに置かれている.
|
10
|
+
このcommand line interface(CLI)で動作するソフトは,helpをterminal上で簡単に提示するものである.
|
11
|
+
また,初心者が自ら編集することによって,すぐに参照できるメモとしての機能を提供している.
|
12
|
+
これによって,terminal上でちょっとした調べ物ができるため,作業や思考が中断することなく
|
13
|
+
プログラム開発に集中できることが期待でき,初心者のスキル習得が加速することが期待できる.
|
14
|
+
|
15
|
+
//!!共同開発のためには,テストが必要だが,不十分.
|
16
|
+
しかし,Ruby gemsとして提供されているこのソフトは,動作はするがテストが用意されていない.
|
17
|
+
慣れた開発者は,テストを見ることで仕様を理解するのが常識である.
|
18
|
+
今後ソフトを進化させるために共同開発を進めていくには,仕様や動作の標準となるテスト記述が不可欠となる.
|
19
|
+
|
20
|
+
|
21
|
+
//!!BDDに従ってテストを書いていく
|
22
|
+
//以下は残しておきますが,適当な時に消してください.
|
23
|
+
//本研究の目的は,ユーザメモソフトであるmy_helpのテスト開発です.
|
24
|
+
そこで,本研究では,ユーザメモソフトであるmy_helpのテストを開発することを目的とする.
|
25
|
+
本研究では、テスト駆動開発の中でも,ソフトの振る舞いを記述する
|
26
|
+
Behavior Driven Development(BDD)に基づいてテストを記述していく.
|
27
|
+
Rubyにおいて、BDD環境を提供する標準的なフレームワークであるCucumberとRSpecを用いて,
|
28
|
+
my_helpがどのような振る舞いをするのかを記述する.
|
29
|
+
Cucumberは自然言語で振る舞いを記述することができるため,ユーザにとって,わかりやすく振る舞いを確認することができる.
|
@@ -0,0 +1 @@
|
|
1
|
+
***control+A:<<<MOVECARET-STARTOFLINE>>>
|
@@ -0,0 +1 @@
|
|
1
|
+
.hikirc
|