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,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
+
@@ -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,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