hikiutils 0.2.3.7 → 0.2.3.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/hikiutils_bob/Rakefile +146 -38
- data/hikiutils_bob/figs/calphad_bob.pdf +0 -0
- data/hikiutils_bob/figs/hikiutils_bob.001.bb +5 -0
- data/hikiutils_bob/figs/hikiutils_bob.002.jpeg +0 -0
- data/hikiutils_bob/figs/hikiutils_bob.004.jpeg +0 -0
- data/hikiutils_bob/figs/hikiutils_bob.005.jpeg +0 -0
- data/hikiutils_bob/hikiutils_bob/hikiutils_bob.002.jpeg +0 -0
- data/hikiutils_bob/hikiutils_bob/hikiutils_bob.004.jpeg +0 -0
- data/hikiutils_bob/hikiutils_bob/hikiutils_bob.005.jpeg +0 -0
- data/hikiutils_bob/hikiutils_bob.hiki +3 -3
- data/hikiutils_bob/hikiutils_bob.key +0 -0
- data/hikiutils_bob/latex2hiki.hiki +3 -0
- data/hikiutils_bob/latex_all.hiki +51 -14
- data/hikiutils_bob/latex_dir/head.tex +2 -0
- data/hikiutils_bob/latex_dir/hikiutils_bob.aux +1 -0
- data/hikiutils_bob/latex_dir/hikiutils_bob.log +75 -35
- data/hikiutils_bob/latex_dir/hikiutils_bob.pdf +0 -0
- data/hikiutils_bob/latex_dir/hikiutils_bob.synctex.gz +0 -0
- data/hikiutils_bob/latex_dir/hikiutils_bob.tex +3 -0
- data/hikiutils_bob/latex_dir/hikiutils_bob.toc +34 -25
- data/hikiutils_bob/latex_dir/latex2hiki.aux +23 -0
- data/hikiutils_bob/latex_dir/latex2hiki.tex +4 -0
- data/hikiutils_bob/latex_dir/latex_all.aux +16 -13
- data/hikiutils_bob/latex_dir/latex_all.tex +51 -10
- data/hikiutils_bob/latex_dir/sync.aux +33 -27
- data/hikiutils_bob/latex_dir/sync.log +18 -188
- data/hikiutils_bob/latex_dir/sync.tex +54 -23
- data/hikiutils_bob/sync.hiki +49 -21
- data/hikiutils_bob/toc.hiki +28 -0
- data/hikiutils_yamane/Rakefile +67 -15
- data/hikiutils_yamane/abstract.hiki +7 -0
- data/hikiutils_yamane/clidescription.hiki +4 -4
- data/hikiutils_yamane/figs/hikiutils_yamane_09_copy.001.jpg +0 -0
- data/hikiutils_yamane/figs/hikiutils_yamane_09_copy.002.jpg +0 -0
- data/hikiutils_yamane/figs/hikiutils_yamane_09_copy.003.jpg +0 -0
- data/hikiutils_yamane/figs/hikiutils_yamane_09_copy.004.jpg +0 -0
- data/hikiutils_yamane/figs/hikiutils_yamane_09_copy.005.jpg +0 -0
- data/hikiutils_yamane/figs/hikiutils_yamane_09_copy.006.jpg +0 -0
- data/hikiutils_yamane/figs/hikiutils_yamane_09_copy.007.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane.hiki +6 -7
- data/hikiutils_yamane/latex_dir/abstract.aux +2 -2
- data/hikiutils_yamane/latex_dir/abstract.tex +8 -0
- data/hikiutils_yamane/latex_dir/clidescription.aux +9 -10
- data/hikiutils_yamane/latex_dir/clidescription.tex +4 -5
- data/hikiutils_yamane/latex_dir/code.aux +25 -25
- data/hikiutils_yamane/latex_dir/code.tex +15 -15
- data/hikiutils_yamane/latex_dir/compare.tex +4 -4
- data/hikiutils_yamane/latex_dir/head.tex +1 -0
- data/hikiutils_yamane/latex_dir/hikiutils_yamane.aux +3 -6
- data/hikiutils_yamane/latex_dir/hikiutils_yamane.log +78 -117
- 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 +3 -6
- data/hikiutils_yamane/latex_dir/hikiutils_yamane.toc +22 -48
- data/hikiutils_yamane/latex_dir/method.aux +25 -0
- data/hikiutils_yamane/latex_dir/method.tex +14 -0
- data/hikiutils_yamane/latex_dir/purpose.aux +6 -9
- data/hikiutils_yamane/latex_dir/purpose.tex +1 -14
- data/hikiutils_yamane/latex_dir/results.aux +11 -19
- data/hikiutils_yamane/latex_dir/results.tex +22 -12
- data/hikiutils_yamane/method.hiki +12 -0
- data/hikiutils_yamane/purpose.hiki +1 -12
- data/hikiutils_yamane/results.hiki +15 -12
- data/hikiutils_yamane/toc.hiki +22 -0
- data/lib/hikiutils/version.rb +1 -1
- data/lib/templates/Rakefile_hiki_sync +102 -21
- metadata +14 -38
- data/hikiutils.gemspec~ +0 -43
- data/hikiutils_bob/latex_dir/hikiutils_bob +0 -243
- data/hikiutils_bob/latex_dir/hikiutils_bob.001.bb +0 -5
- data/hikiutils_bob/latex_dir/hikiutils_bob.001.jpeg +0 -0
- data/hikiutils_bob/latex_dir/hikiutils_bob.002.bb +0 -5
- data/hikiutils_bob/latex_dir/hikiutils_bob.002.jpeg +0 -0
- data/hikiutils_bob/latex_dir/hikiutils_bob.003.bb +0 -5
- data/hikiutils_bob/latex_dir/hikiutils_bob.003.jpeg +0 -0
- data/hikiutils_bob/latex_dir/latex_all).aux +0 -21
- data/hikiutils_bob/latex_dir/sync).aux +0 -21
- data/hikiutils_bob/latex_dir/sync.pdf +0 -0
- data/hikiutils_bob/latex_dir/sync.synctex.gz +0 -0
- data/hikiutils_bob/latex_dir/sync.toc +0 -17
- data/hikiutils_bob/latex_dir/to_latex.tex +0 -44
- data/hikiutils_yamane/hikiutils_yamane_09 /343/201/256/343/202/263/343/203/222/343/202/232/343/203/274/hikiutils_yamane_09 /343/201/256/343/202/263/343/203/222/343/202/232/343/203/274.001.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09 /343/201/256/343/202/263/343/203/222/343/202/232/343/203/274/hikiutils_yamane_09 /343/201/256/343/202/263/343/203/222/343/202/232/343/203/274.002.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09 /343/201/256/343/202/263/343/203/222/343/202/232/343/203/274/hikiutils_yamane_09 /343/201/256/343/202/263/343/203/222/343/202/232/343/203/274.003.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09 /343/201/256/343/202/263/343/203/222/343/202/232/343/203/274/hikiutils_yamane_09 /343/201/256/343/202/263/343/203/222/343/202/232/343/203/274.004.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09 /343/201/256/343/202/263/343/203/222/343/202/232/343/203/274/hikiutils_yamane_09 /343/201/256/343/202/263/343/203/222/343/202/232/343/203/274.005.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09 /343/201/256/343/202/263/343/203/222/343/202/232/343/203/274/hikiutils_yamane_09 /343/201/256/343/202/263/343/203/222/343/202/232/343/203/274.006.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09 /343/201/256/343/202/263/343/203/222/343/202/232/343/203/274/hikiutils_yamane_09 /343/201/256/343/202/263/343/203/222/343/202/232/343/203/274.007.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09 /343/201/256/343/202/263/343/203/224/343/203/274/hikiutils_yamane_09 /343/201/256/343/202/263/343/203/224/343/203/274.001.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09 /343/201/256/343/202/263/343/203/224/343/203/274/hikiutils_yamane_09 /343/201/256/343/202/263/343/203/224/343/203/274.002.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09 /343/201/256/343/202/263/343/203/224/343/203/274/hikiutils_yamane_09 /343/201/256/343/202/263/343/203/224/343/203/274.003.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09 /343/201/256/343/202/263/343/203/224/343/203/274/hikiutils_yamane_09 /343/201/256/343/202/263/343/203/224/343/203/274.004.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09 /343/201/256/343/202/263/343/203/224/343/203/274/hikiutils_yamane_09 /343/201/256/343/202/263/343/203/224/343/203/274.005.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09 /343/201/256/343/202/263/343/203/224/343/203/274/hikiutils_yamane_09 /343/201/256/343/202/263/343/203/224/343/203/274.006.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09 /343/201/256/343/202/263/343/203/224/343/203/274/hikiutils_yamane_09 /343/201/256/343/202/263/343/203/224/343/203/274.007.jpg +0 -0
- data/hikiutils_yamane/hikiutils_yamane_09.key +0 -0
- data/hikiutils_yamane/latex_dir/command_table.aux +0 -4
- data/hikiutils_yamane/latex_dir/command_table.log +0 -152
- data/hikiutils_yamane/latex_dir/command_table.pdf +0 -0
- data/hikiutils_yamane/latex_dir/command_table.synctex.gz +0 -0
- data/hikiutils_yamane/latex_dir/compare.aux +0 -40
- data/hikiutils_yamane/latex_dir/introduction.aux +0 -26
- data/hikiutils_yamane/latex_dir/pre.tex +0 -36
data/hikiutils_yamane/Rakefile
CHANGED
|
@@ -13,22 +13,70 @@ $basename = (dirnames[-1]=='hikis')? dirnames[-2] : dirnames[-1]
|
|
|
13
13
|
$latex_dir= 'latex_dir'
|
|
14
14
|
$section_layer = {}
|
|
15
15
|
|
|
16
|
+
task :default do
|
|
17
|
+
system 'rake -T'
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
desc "Githubのdirをsafariでopen"
|
|
16
21
|
task :github do
|
|
17
22
|
status, stdout, stderr = systemu %q( git remote -v |grep origin )
|
|
18
23
|
p github_dir=stdout.match(/(.+):(.+) \(push\)/)[2]
|
|
19
24
|
system "open https://github.com/#{github_dir}"
|
|
20
25
|
end
|
|
21
26
|
|
|
22
|
-
|
|
23
|
-
|
|
27
|
+
desc "latex_dirのゴミを掃除"
|
|
28
|
+
task :reset_latex_dir do
|
|
29
|
+
system "mv latex_dir/head.tex ."
|
|
30
|
+
system "rm -rf latex_dir"
|
|
31
|
+
system "mkdir latex_dir"
|
|
32
|
+
system "mv head.tex latex_dir/"
|
|
33
|
+
system "rake latex_all"
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
desc "toc.hikiの作成"
|
|
37
|
+
task :mk_toc do
|
|
38
|
+
p target = $basename+'.toc'
|
|
39
|
+
cont=""
|
|
40
|
+
File.readlines(File.join('latex_dir',target)).each{|line|
|
|
41
|
+
if m=line.match(/\\contentsline \{(.+)\}\{\\numberline \{([\d|\.]+)\}(.+)\}\{\d+\}/)
|
|
42
|
+
layer,sec_no,title=m[1],m[2],m[3]
|
|
43
|
+
d = case m[1]
|
|
44
|
+
when 'section'
|
|
45
|
+
1
|
|
46
|
+
when 'subsection'
|
|
47
|
+
2
|
|
48
|
+
when 'subsubsection'
|
|
49
|
+
3
|
|
50
|
+
else
|
|
51
|
+
4
|
|
52
|
+
end
|
|
53
|
+
layer = "!"*d
|
|
54
|
+
title.gsub!('\_','_')
|
|
55
|
+
cont << "#{layer}#{sec_no}:#{title}\n"
|
|
56
|
+
end
|
|
57
|
+
}
|
|
58
|
+
print cont
|
|
59
|
+
File.open("toc.hiki",'w'){|file| file.print cont}
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
desc "hikiシステムを最新状態に更新"
|
|
63
|
+
task :touch do
|
|
64
|
+
Dir.entries('.').each{|file|
|
|
65
|
+
file_split=file.split(".")
|
|
66
|
+
if file_split[1]=='hiki'
|
|
67
|
+
next if file_split[0]==$basename
|
|
68
|
+
p target = $basename+"_"+file_split[0]
|
|
69
|
+
system "hiki -u #{target}"
|
|
70
|
+
end
|
|
71
|
+
}
|
|
24
72
|
end
|
|
25
73
|
|
|
26
|
-
desc "latex
|
|
74
|
+
desc "FILE1をlatexに変換"
|
|
27
75
|
task :latex => [:latex_base] do
|
|
28
76
|
exit
|
|
29
77
|
end
|
|
30
78
|
|
|
31
|
-
desc "
|
|
79
|
+
desc "FILE1をwrap formatでlatexに変換"
|
|
32
80
|
task :latex_wrap => [:latex_base, :change_wrap] do
|
|
33
81
|
exit
|
|
34
82
|
end
|
|
@@ -38,6 +86,7 @@ def latex_loop(entries,opts={})
|
|
|
38
86
|
entries.each{|file|
|
|
39
87
|
options={:latex_all=>true}
|
|
40
88
|
next unless file.split('.')[1]=='hiki'
|
|
89
|
+
next if file=='toc.hiki'
|
|
41
90
|
next if file.include?('.hikirc')
|
|
42
91
|
f_name =File.basename(file,'.hiki')
|
|
43
92
|
if opts[:main]
|
|
@@ -71,14 +120,21 @@ def check_section_layers(lines)
|
|
|
71
120
|
p $section_layer
|
|
72
121
|
end
|
|
73
122
|
|
|
74
|
-
desc "latex
|
|
123
|
+
desc "すべてのhikiファイルをlatex変換"
|
|
75
124
|
task :latex_all do
|
|
76
125
|
p entries=Dir.entries('.')
|
|
77
126
|
main_file = latex_loop(entries,opts={:main=>true})
|
|
78
127
|
latex_loop(entries)
|
|
79
128
|
cont=""
|
|
80
129
|
p reg_exp = Regexp.new("#{$basename}_(.+)")
|
|
130
|
+
toc = false
|
|
81
131
|
File.readlines(File.join($latex_dir,"#{main_file}.tex")).each{|line|
|
|
132
|
+
if line.match(/\\tableofcontents/)
|
|
133
|
+
p line
|
|
134
|
+
line = "" if toc== true
|
|
135
|
+
toc = true if toc == false
|
|
136
|
+
end
|
|
137
|
+
|
|
82
138
|
if line.match(/section{(.+)}/)
|
|
83
139
|
if m=line.match(/\\verb\|(.+)\((.+)\)\|/)
|
|
84
140
|
p m
|
|
@@ -99,7 +155,6 @@ task :latex_all do
|
|
|
99
155
|
exit
|
|
100
156
|
end
|
|
101
157
|
|
|
102
|
-
desc "latex conversion FILE1(hiki) to FILE2(latex)"
|
|
103
158
|
task :latex_base do
|
|
104
159
|
Dir.mkdir($latex_dir) unless Dir.exist?($latex_dir)
|
|
105
160
|
convert_to_latex(ARGV[1])
|
|
@@ -115,11 +170,11 @@ def convert_to_latex(file_name, options={})
|
|
|
115
170
|
lines = File.readlines(file_name)
|
|
116
171
|
check_section_layers(lines) if options[:main]
|
|
117
172
|
cont = ""
|
|
118
|
-
lines.
|
|
173
|
+
lines.each_with_index{|line,i|
|
|
119
174
|
if m=line.match(/\{\{attach_view\((.*),(.*)\)\}\}/)
|
|
120
175
|
p line="\{\{attach_view\(#{m[1]}\)\}\}\n"
|
|
121
|
-
elsif options[:latex_all]
|
|
122
|
-
line="" if line.match(
|
|
176
|
+
elsif options[:latex_all] and i<5
|
|
177
|
+
line="" if line.match(/^!title:|^!author:|^!date:/)
|
|
123
178
|
end
|
|
124
179
|
cont << line
|
|
125
180
|
}
|
|
@@ -131,7 +186,7 @@ def convert_to_latex(file_name, options={})
|
|
|
131
186
|
cont = ""
|
|
132
187
|
lines.each{|line|
|
|
133
188
|
if m=line.match(/\\includegraphics\[width=6cm\]\{(.+)\}/)
|
|
134
|
-
p line="\\includegraphics\[width=6cm,bb=0 0 442
|
|
189
|
+
p line="\\includegraphics\[width=6cm,bb=0 0 442 432\]\{../figs/#{m[1]}\}\n"
|
|
135
190
|
cont << line
|
|
136
191
|
else
|
|
137
192
|
cont << line
|
|
@@ -140,7 +195,6 @@ def convert_to_latex(file_name, options={})
|
|
|
140
195
|
File.open($save_name,'w'){|file| file.print cont }
|
|
141
196
|
end
|
|
142
197
|
|
|
143
|
-
desc "change latex figures to wrap format"
|
|
144
198
|
task :change_wrap do
|
|
145
199
|
lines = File.readlines($save_name)
|
|
146
200
|
|
|
@@ -222,14 +276,13 @@ task :convert do
|
|
|
222
276
|
exit
|
|
223
277
|
end
|
|
224
278
|
|
|
225
|
-
desc "
|
|
279
|
+
desc "hikiの同期"
|
|
226
280
|
task :sync => [:check_previous,:sync0]
|
|
227
281
|
|
|
228
282
|
|
|
229
|
-
desc "
|
|
283
|
+
desc "hikiの強制同期"
|
|
230
284
|
task :force_sync => [:sync0]
|
|
231
285
|
|
|
232
|
-
desc "sync0 hikis and figs to hiki directory"
|
|
233
286
|
task :sync0 do
|
|
234
287
|
entries=Dir.entries('.')
|
|
235
288
|
entries[2..-1].each{|source| #cp *.hiki
|
|
@@ -276,7 +329,6 @@ task :self_copy do
|
|
|
276
329
|
}
|
|
277
330
|
end
|
|
278
331
|
|
|
279
|
-
desc "check previou and current sync"
|
|
280
332
|
task :check_previous do
|
|
281
333
|
current={}
|
|
282
334
|
print "current hiki dir\n"
|
|
@@ -1 +1,8 @@
|
|
|
1
1
|
!概要
|
|
2
|
+
研究室内の内部文書,あるいは外部への宣伝資料,さらにwikipediaのように重要な研究成果の発信などに西谷研ではhiki systemを利用しています.
|
|
3
|
+
これは初心者にも覚えやすい直感的な操作であるが,慣れてくるとテキスト編集や画面更新にいちいちweb画面へ移行せねばならず,編集の思考が停止する.
|
|
4
|
+
そこで,編集操作がCUIで完結させるためにテキスト編集に優れたeditorとの連携や,terminal上のshell commandと連携しやすいhikiutilsが開発された.
|
|
5
|
+
しかし,そのユーザーインターフェースにはコマンドが直感的でないという問題がある.
|
|
6
|
+
そこで,本研究ではコマンドラインツール作成ライブラリを変更することでコマンドを実装し直し直感的なコマンドにすることを目的とした.
|
|
7
|
+
optparseで作成されているhikiutilsをthorで作成し,そして2つのコマンドラインツール作成ライブラリで作成されたhikiutilsを比較する.
|
|
8
|
+
研究結果は,thorのほうがコマンドを簡単に定義することができ,またコードも短くできた.
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{{toc}}
|
|
2
|
-
|
|
2
|
+
//!CLIのコード
|
|
3
3
|
hikiutilsのコマンドライン解析ツールをoptparseからthorに換えることでコマンドの書き換えを行うことができた.
|
|
4
4
|
また,thorで書かれたhikiutilsはoptparseで書かれたものよりもコードが短くなり,コマンドの解析も簡単に行えることができた.
|
|
5
5
|
ここではthorとoptparseのコードを比較しthorの良さを確認する.
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
!CLIの解説
|
|
7
|
+
!!Thor
|
|
8
8
|
Thorとは,コマンドラインツールの作成を支援するライブラリのことである.
|
|
9
9
|
gitやbundlerのようにサブコマンドを含むコマンドラインツールを簡単に作成することができる[1-2].
|
|
10
10
|
|
|
@@ -16,7 +16,7 @@ Thorの基本的な流れとしては
|
|
|
16
16
|
|
|
17
17
|
startに渡す引数が空の場合,Thorはクラスのヘルプリストを出力する.
|
|
18
18
|
また,Thorはサブコマンドやサブサブコマンドも作ることができる.
|
|
19
|
-
|
|
19
|
+
!!optparse
|
|
20
20
|
optparseとは,getoptよりも簡便で,柔軟性に富み,かつ強力なコマンドライン解析ライブラリである.
|
|
21
21
|
optparseでは,より宣言的なスタイルのコマンドライン解析手法,すなわちOptionParserのインスタンスでコマンドラインを解析するという手法をとっている.
|
|
22
22
|
これを使うと,GNU/POSIX構文でオプションを指定できるだけでなく,使用法やヘルプメッセージの生成も行える[1-3].
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -3,15 +3,14 @@
|
|
|
3
3
|
!author:関西学院大学理工学部情報科学科 27013554 山根亮太
|
|
4
4
|
|
|
5
5
|
![[概要|hikiutils_yamane_abstract]]
|
|
6
|
-
|
|
7
|
-
![[
|
|
8
|
-
!![[hikiutils_yamane_purpose]]
|
|
9
|
-
!方法
|
|
6
|
+
![[序論|hikiutils_yamane_purpose]]
|
|
7
|
+
![[方法|hikiutils_yamane_method]]
|
|
10
8
|
!結果
|
|
11
9
|
!![[hikiutils_yamane_results]]
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
10
|
+
//!![[hikiutils_yamane_compare]]
|
|
11
|
+
//!本論
|
|
12
|
+
!![[hikiutils_yamane_clidescription]]
|
|
13
|
+
!![[hikiutils_yamane_code]]
|
|
15
14
|
|
|
16
15
|
!参考文献
|
|
17
16
|
[1-1] hikidoc, https://rubygems.org/gems/hikidoc/versions/0.1.0, https://github.com/hiki/hikidoc,2017/1/30 アクセス.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
\relax
|
|
2
|
-
\@writefile{toc}{\contentsline {section}{\numberline {1}概要}{
|
|
2
|
+
\@writefile{toc}{\contentsline {section}{\numberline {1}概要}{3}}
|
|
3
3
|
\@setckpt{abstract}{
|
|
4
|
-
\setcounter{page}{
|
|
4
|
+
\setcounter{page}{4}
|
|
5
5
|
\setcounter{equation}{0}
|
|
6
6
|
\setcounter{enumi}{0}
|
|
7
7
|
\setcounter{enumii}{0}
|
|
@@ -1 +1,9 @@
|
|
|
1
1
|
\section{概要}
|
|
2
|
+
研究室内の内部文書,あるいは外部への宣伝資料,さらにwikipediaのように重要な研究成果の発信などに西谷研ではhiki systemを利用しています.
|
|
3
|
+
これは初心者にも覚えやすい直感的な操作であるが,慣れてくるとテキスト編集や画面更新にいちいちweb画面へ移行せねばならず,編集の思考が停止する.
|
|
4
|
+
そこで,編集操作がCUIで完結させるためにテキスト編集に優れたeditorとの連携や,terminal上のshell commandと連携しやすいhikiutilsが開発された.
|
|
5
|
+
しかし,そのユーザーインターフェースにはコマンドが直感的でないという問題がある.
|
|
6
|
+
そこで,本研究ではコマンドラインツール作成ライブラリを変更することでコマンドを実装し直し直感的なコマンドにすることを目的とした.
|
|
7
|
+
optparseで作成されているhikiutilsをthorで作成し,そして2つのコマンドラインツール作成ライブラリで作成されたhikiutilsを比較する.
|
|
8
|
+
研究結果は,thorのほうがコマンドを簡単に定義することができ,またコードも短くできた.
|
|
9
|
+
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
\relax
|
|
2
|
-
\@writefile{toc}{\contentsline {
|
|
3
|
-
\@writefile{toc}{\contentsline {
|
|
4
|
-
\@writefile{toc}{\contentsline {
|
|
5
|
-
\@writefile{toc}{\contentsline {paragraph}{optparse}{26}}
|
|
2
|
+
\@writefile{toc}{\contentsline {subsection}{\numberline {4.4}CLIの解説}{12}}
|
|
3
|
+
\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.4.1}Thor}{12}}
|
|
4
|
+
\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.4.2}optparse}{12}}
|
|
6
5
|
\@setckpt{clidescription}{
|
|
7
|
-
\setcounter{page}{
|
|
6
|
+
\setcounter{page}{14}
|
|
8
7
|
\setcounter{equation}{0}
|
|
9
8
|
\setcounter{enumi}{3}
|
|
10
9
|
\setcounter{enumii}{0}
|
|
@@ -13,13 +12,13 @@
|
|
|
13
12
|
\setcounter{footnote}{0}
|
|
14
13
|
\setcounter{mpfootnote}{0}
|
|
15
14
|
\setcounter{part}{0}
|
|
16
|
-
\setcounter{section}{
|
|
17
|
-
\setcounter{subsection}{
|
|
18
|
-
\setcounter{subsubsection}{
|
|
15
|
+
\setcounter{section}{4}
|
|
16
|
+
\setcounter{subsection}{4}
|
|
17
|
+
\setcounter{subsubsection}{2}
|
|
19
18
|
\setcounter{paragraph}{0}
|
|
20
19
|
\setcounter{subparagraph}{0}
|
|
21
|
-
\setcounter{figure}{
|
|
20
|
+
\setcounter{figure}{2}
|
|
22
21
|
\setcounter{table}{1}
|
|
23
|
-
\setcounter{lstnumber}{
|
|
22
|
+
\setcounter{lstnumber}{12}
|
|
24
23
|
\setcounter{lstlisting}{0}
|
|
25
24
|
}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
\subsubsection{CLIのコード}
|
|
1
|
+
\verb|{{toc}}|
|
|
3
2
|
hikiutilsのコマンドライン解析ツールをoptparseからthorに換えることでコマンドの書き換えを行うことができた.
|
|
4
3
|
また,thorで書かれたhikiutilsはoptparseで書かれたものよりもコードが短くなり,コマンドの解析も簡単に行えることができた.
|
|
5
4
|
ここではthorとoptparseのコードを比較しthorの良さを確認する.
|
|
6
5
|
|
|
7
|
-
\
|
|
8
|
-
\
|
|
6
|
+
\subsection{CLIの解説}
|
|
7
|
+
\subsubsection{Thor}
|
|
9
8
|
Thorとは,コマンドラインツールの作成を支援するライブラリのことである.
|
|
10
9
|
gitやbundlerのようにサブコマンドを含むコマンドラインツールを簡単に作成することができる[1-2].
|
|
11
10
|
|
|
@@ -20,7 +19,7 @@ Thorの基本的な流れとしては
|
|
|
20
19
|
startに渡す引数が空の場合,Thorはクラスのヘルプリストを出力する.
|
|
21
20
|
また,Thorはサブコマンドやサブサブコマンドも作ることができる.
|
|
22
21
|
|
|
23
|
-
\
|
|
22
|
+
\subsubsection{optparse}
|
|
24
23
|
optparseとは,getoptよりも簡便で,柔軟性に富み,かつ強力なコマンドライン解析ライブラリである.
|
|
25
24
|
optparseでは,より宣言的なスタイルのコマンドライン解析手法,すなわちOptionParserのインスタンスでコマンドラインを解析するという手法をとっている.
|
|
26
25
|
これを使うと,GNU/POSIX構文でオプションを指定できるだけでなく,使用法やヘルプメッセージの生成も行える[1-3].
|
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
\relax
|
|
2
|
-
\@writefile{toc}{\contentsline {
|
|
3
|
-
\@writefile{lof}{\contentsline {figure}{\numberline {
|
|
4
|
-
\newlabel{default}{{
|
|
5
|
-
\@writefile{toc}{\contentsline {
|
|
6
|
-
\@writefile{toc}{\contentsline {
|
|
7
|
-
\@writefile{toc}{\contentsline {
|
|
8
|
-
\@writefile{lof}{\contentsline {figure}{\numberline {
|
|
9
|
-
\newlabel{default}{{
|
|
10
|
-
\@writefile{toc}{\contentsline {
|
|
11
|
-
\@writefile{lof}{\contentsline {figure}{\numberline {
|
|
12
|
-
\newlabel{default}{{
|
|
13
|
-
\@writefile{toc}{\contentsline {
|
|
14
|
-
\@writefile{toc}{\contentsline {
|
|
15
|
-
\@writefile{
|
|
16
|
-
\
|
|
17
|
-
|
|
18
|
-
\@writefile{
|
|
19
|
-
\
|
|
20
|
-
|
|
21
|
-
\@writefile{toc}{\contentsline {
|
|
2
|
+
\@writefile{toc}{\contentsline {subsection}{\numberline {4.5}Thorの初期化}{14}}
|
|
3
|
+
\@writefile{lof}{\contentsline {figure}{\numberline {3}{\ignorespaces }}{14}}
|
|
4
|
+
\newlabel{default}{{3}{14}}
|
|
5
|
+
\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.5.1}コード}{14}}
|
|
6
|
+
\@writefile{toc}{\contentsline {subsection}{\numberline {4.6}コマンド表示と処理}{15}}
|
|
7
|
+
\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.6.1}Thor}{15}}
|
|
8
|
+
\@writefile{lof}{\contentsline {figure}{\numberline {4}{\ignorespaces }}{16}}
|
|
9
|
+
\newlabel{default}{{4}{16}}
|
|
10
|
+
\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.6.2}optparse}{16}}
|
|
11
|
+
\@writefile{lof}{\contentsline {figure}{\numberline {5}{\ignorespaces }}{17}}
|
|
12
|
+
\newlabel{default}{{5}{17}}
|
|
13
|
+
\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.6.3}コード}{17}}
|
|
14
|
+
\@writefile{toc}{\contentsline {subsection}{\numberline {4.7}CLIの実行}{20}}
|
|
15
|
+
\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.7.1}Thor}{20}}
|
|
16
|
+
\@writefile{lof}{\contentsline {figure}{\numberline {6}{\ignorespaces }}{20}}
|
|
17
|
+
\newlabel{default}{{6}{20}}
|
|
18
|
+
\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.7.2}optparse}{20}}
|
|
19
|
+
\@writefile{lof}{\contentsline {figure}{\numberline {7}{\ignorespaces }}{21}}
|
|
20
|
+
\newlabel{default}{{7}{21}}
|
|
21
|
+
\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.7.3}コード}{21}}
|
|
22
22
|
\@setckpt{code}{
|
|
23
|
-
\setcounter{page}{
|
|
23
|
+
\setcounter{page}{25}
|
|
24
24
|
\setcounter{equation}{0}
|
|
25
25
|
\setcounter{enumi}{2}
|
|
26
26
|
\setcounter{enumii}{0}
|
|
@@ -29,12 +29,12 @@
|
|
|
29
29
|
\setcounter{footnote}{0}
|
|
30
30
|
\setcounter{mpfootnote}{0}
|
|
31
31
|
\setcounter{part}{0}
|
|
32
|
-
\setcounter{section}{
|
|
33
|
-
\setcounter{subsection}{
|
|
34
|
-
\setcounter{subsubsection}{
|
|
32
|
+
\setcounter{section}{4}
|
|
33
|
+
\setcounter{subsection}{7}
|
|
34
|
+
\setcounter{subsubsection}{3}
|
|
35
35
|
\setcounter{paragraph}{0}
|
|
36
36
|
\setcounter{subparagraph}{0}
|
|
37
|
-
\setcounter{figure}{
|
|
37
|
+
\setcounter{figure}{7}
|
|
38
38
|
\setcounter{table}{1}
|
|
39
39
|
\setcounter{lstnumber}{38}
|
|
40
40
|
\setcounter{lstlisting}{0}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
|
|
2
|
-
\
|
|
2
|
+
\subsection{Thorの初期化}
|
|
3
3
|
\begin{figure}[htbp]\begin{center}
|
|
4
|
-
\includegraphics[width=6cm,bb=0 0 442
|
|
4
|
+
\includegraphics[width=6cm,bb=0 0 442 432]{../figs/./hikiutils_yamane_09_copy.003.jpg}
|
|
5
5
|
\caption{}
|
|
6
6
|
\label{default}\end{center}\end{figure}
|
|
7
7
|
\begin{itemize}
|
|
@@ -18,7 +18,7 @@ Thorの定義方法はrequireでThorを呼びCLIクラスで継承し,initiali
|
|
|
18
18
|
initializeメソッド内ではThorの初期設定がされていないため,スーパークラスのメソッドを読み出してくれるsuperを書き加えることで図のようにinitializeメソッド内でThorのinitilalizeメソッドが
|
|
19
19
|
呼ばれ定義される.
|
|
20
20
|
|
|
21
|
-
\
|
|
21
|
+
\subsubsection{コード}\begin{lstlisting}[style=customRuby]
|
|
22
22
|
# -*- coding: utf-8 -*-
|
|
23
23
|
require 'thor'
|
|
24
24
|
require 'kconv'
|
|
@@ -55,10 +55,10 @@ module Hikithor
|
|
|
55
55
|
@editor_command = (editor_command==nil) ? 'open -a mi' : editor_command
|
|
56
56
|
end
|
|
57
57
|
\end{lstlisting}
|
|
58
|
-
\
|
|
59
|
-
\
|
|
58
|
+
\subsection{コマンド表示と処理}
|
|
59
|
+
\subsubsection{Thor}
|
|
60
60
|
\begin{figure}[htbp]\begin{center}
|
|
61
|
-
\includegraphics[width=6cm,bb=0 0 442
|
|
61
|
+
\includegraphics[width=6cm,bb=0 0 442 432]{../figs/./hikiutils_yamane_09_copy.004.jpg}
|
|
62
62
|
\caption{}
|
|
63
63
|
\label{default}\end{center}\end{figure}
|
|
64
64
|
\begin{enumerate}
|
|
@@ -75,9 +75,9 @@ map A => B
|
|
|
75
75
|
mapとはBでしか読めないものをAでも読めるようにしてくれるものである.
|
|
76
76
|
よって,これを使うことで別のコマンドも指定することができる.
|
|
77
77
|
|
|
78
|
-
\
|
|
78
|
+
\subsubsection{optparse}
|
|
79
79
|
\begin{figure}[htbp]\begin{center}
|
|
80
|
-
\includegraphics[width=6cm,bb=0 0 442
|
|
80
|
+
\includegraphics[width=6cm,bb=0 0 442 432]{../figs/./hikiutils_yamane_09_copy.005.jpg}
|
|
81
81
|
\caption{}
|
|
82
82
|
\label{default}\end{center}\end{figure}
|
|
83
83
|
\begin{enumerate}
|
|
@@ -92,7 +92,7 @@ optparseではOptionParserオブジェクトoptの生成を行い,コマンド
|
|
|
92
92
|
以上より,Thorではコマンドの指定と処理にはdesc,map,処理メソッドだけで済むが,optparseではコマンドを登録するためのメソッドと処理メソッドが必要になってくる.
|
|
93
93
|
また,コマンドはThorでは処理メソッドがコマンド名になるが,optparseではコマンドを登録するための処理も必要となってくる.
|
|
94
94
|
|
|
95
|
-
\
|
|
95
|
+
\subsubsection{コード}
|
|
96
96
|
\begin{itemize}
|
|
97
97
|
\item Thor
|
|
98
98
|
\end{itemize}\begin{lstlisting}[style=customRuby]
|
|
@@ -188,10 +188,10 @@ optparseではOptionParserオブジェクトoptの生成を行い,コマンド
|
|
|
188
188
|
show_sources
|
|
189
189
|
end
|
|
190
190
|
\end{lstlisting}
|
|
191
|
-
\
|
|
192
|
-
\
|
|
191
|
+
\subsection{CLIの実行}
|
|
192
|
+
\subsubsection{Thor}
|
|
193
193
|
\begin{figure}[htbp]\begin{center}
|
|
194
|
-
\includegraphics[width=6cm,bb=0 0 442
|
|
194
|
+
\includegraphics[width=6cm,bb=0 0 442 432]{../figs/./hikiutils_yamane_09_copy.006.jpg}
|
|
195
195
|
\caption{}
|
|
196
196
|
\label{default}\end{center}\end{figure}
|
|
197
197
|
\begin{itemize}
|
|
@@ -204,9 +204,9 @@ optparseではOptionParserオブジェクトoptの生成を行い,コマンド
|
|
|
204
204
|
Thorではstart(ARGV)を呼び出すことでCLIを開始する.Hikithor::CLI.start(ARGV)を実行されることによりrequireで呼ばれているhikiutils\_thor.rbのCLIコマンドを順に実行する.
|
|
205
205
|
そして,入力されたコマンドと一致するメソッドを探し,そのコマンドの処理が実行される.
|
|
206
206
|
|
|
207
|
-
\
|
|
207
|
+
\subsubsection{optparse}
|
|
208
208
|
\begin{figure}[htbp]\begin{center}
|
|
209
|
-
\includegraphics[width=6cm,bb=0 0 442
|
|
209
|
+
\includegraphics[width=6cm,bb=0 0 442 432]{../figs/./hikiutils_yamane_09_copy.007.jpg}
|
|
210
210
|
\caption{}
|
|
211
211
|
\label{default}\end{center}\end{figure}
|
|
212
212
|
\begin{itemize}
|
|
@@ -221,7 +221,7 @@ Thorではstart(ARGV)を呼び出すことでCLIを開始する.Hikithor::CLI.
|
|
|
221
221
|
このようにoptparseでは実行を行うためのメソッドが必要であるが,Thorではクラスのメソッドを順に実行していくため
|
|
222
222
|
runメソッドとexecuteメソッドは必要ない.また,optparseでの実行手順はメソッドの移動回数が多く複雑であるが,Thorは単純で分かりやすいものとなっている.
|
|
223
223
|
|
|
224
|
-
\
|
|
224
|
+
\subsubsection{コード}
|
|
225
225
|
\begin{itemize}
|
|
226
226
|
\item Thor
|
|
227
227
|
\end{itemize}\begin{lstlisting}[style=customRuby]
|
|
@@ -98,7 +98,7 @@ module Hikithor
|
|
|
98
98
|
\item Thor
|
|
99
99
|
\end{itemize}
|
|
100
100
|
\begin{figure}[htbp]\begin{center}
|
|
101
|
-
\includegraphics[width=6cm,bb=0 0 442
|
|
101
|
+
\includegraphics[width=6cm,bb=0 0 442 432]{../figs/./hikiutils_yamane.004.jpg}
|
|
102
102
|
\caption{}
|
|
103
103
|
\label{default}\end{center}\end{figure}
|
|
104
104
|
\begin{enumerate}
|
|
@@ -111,7 +111,7 @@ module Hikithor
|
|
|
111
111
|
\item optparse
|
|
112
112
|
\end{itemize}
|
|
113
113
|
\begin{figure}[htbp]\begin{center}
|
|
114
|
-
\includegraphics[width=6cm,bb=0 0 442
|
|
114
|
+
\includegraphics[width=6cm,bb=0 0 442 432]{../figs/./hikiutils_yamane.001.jpg}
|
|
115
115
|
\caption{}
|
|
116
116
|
\label{default}\end{center}\end{figure}
|
|
117
117
|
\begin{enumerate}
|
|
@@ -217,7 +217,7 @@ s)}
|
|
|
217
217
|
\item Thor
|
|
218
218
|
\end{itemize}
|
|
219
219
|
\begin{figure}[htbp]\begin{center}
|
|
220
|
-
\includegraphics[width=6cm,bb=0 0 442
|
|
220
|
+
\includegraphics[width=6cm,bb=0 0 442 432]{../figs/./hikiutils_yamane.002.jpg}
|
|
221
221
|
\caption{}
|
|
222
222
|
\label{default}\end{center}\end{figure}
|
|
223
223
|
\begin{enumerate}
|
|
@@ -233,7 +233,7 @@ Thorでは処理実行を行うメソッドがコマンドとなる.しかし
|
|
|
233
233
|
\item optparse
|
|
234
234
|
\end{itemize}
|
|
235
235
|
\begin{figure}[htbp]\begin{center}
|
|
236
|
-
\includegraphics[width=6cm,bb=0 0 442
|
|
236
|
+
\includegraphics[width=6cm,bb=0 0 442 432]{../figs/./hikiutils_yamane.005.jpg}
|
|
237
237
|
\caption{}
|
|
238
238
|
\label{default}\end{center}\end{figure}
|
|
239
239
|
\begin{enumerate}
|
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
\relax
|
|
2
2
|
\@input{abstract.aux}
|
|
3
|
-
\@writefile{toc}{\contentsline {section}{\numberline {2}序論}{5}}
|
|
4
|
-
\@input{introduction.aux}
|
|
5
3
|
\@input{purpose.aux}
|
|
6
|
-
\@
|
|
7
|
-
\@writefile{toc}{\contentsline {section}{\numberline {
|
|
4
|
+
\@input{method.aux}
|
|
5
|
+
\@writefile{toc}{\contentsline {section}{\numberline {4}結果}{7}}
|
|
8
6
|
\@input{results.aux}
|
|
9
|
-
\@input{compare.aux}
|
|
10
7
|
\@input{clidescription.aux}
|
|
11
8
|
\@input{code.aux}
|
|
12
|
-
\@writefile{toc}{\contentsline {section}{\numberline {
|
|
9
|
+
\@writefile{toc}{\contentsline {section}{\numberline {5}参考文献}{25}}
|