!Mac OS X-10.15.7!ruby-2.7.1p83
Rappelez-vous le dernier bundler pendant un moment.
rake install:local
Ensuite, hogehoge a été automatiquement installé, non? La commande rake utilisée ici est le sujet d'aujourd'hui.
rake est une version rubis de make and ant. Il est conçu pour être pratique pour faire un peu de travail. Un exemple typique est
task :default do
system 'rake -T'
exit
end
desc 'hello NAME'
task :hello do
name = ARGV[1]
puts "Hello #{name}!"
exit
end
est. Mettez ceci dans un Rakefile
> rake
S'il vous plaît. La tâche préparée par Rakefile s'affiche. C'est très similaire à l'explication en frappant avec qiita ou mon \ _help sans option.
Jetons maintenant un œil au contenu du fichier Rake que je viens d'écrire.
--desc suivi de rake -T -: Le comportement par défaut est le comportement lorsque rake est appelé sans argument, --Autre que cela, le nom de la tâche appelée par option --Dans la tâche, décrivez l'opération dans le langage ruby standard.
est. Les variables qui commencent par «:» sont des classes appelées symboles qui remplacent les noms. Quel est le problème maintenant, mais je l'utiliserai beaucoup tôt ou tard.
rake est DSL (Domain Specific Language), c'est-à-dire l'idée de créer un langage unique à l'endroit. Par conséquent, ce n'est pas une véritable langue rubis, mais elle a été étendue pour faciliter l'utilisation d'une petite tâche. La syntaxe de rake est utilisée dans Thor etc. qui sera introduite plus tard.
system call
La fonction la plus souvent décrite dans Rakefile est system, I. C'est la fonction qui appelle la commande système. La raison en est que le travail à faire à la main est décrit tel quel. Par exemple, n'est-il pas difficile de se souvenir de la commande en donnant (push) ou en tirant (pull) avec git? Jusqu'à ce que vous vous y habituiez, lancez le Web, recherchez, lisez le site avec différentes couleurs, puis répétez jusqu'à la fin et tapez la commande. Je pensais que c'était normal. Mais les programmeurs experts sont différents. Il n'est pas bon de se souvenir, mais c'est une bonne note de choses que vous pourriez oublier. Par exemple, dans Rakefile
desc 'git pull'
task :pull do
p comm = "git pull origin main"
system comm
exit
end
Si vous écrivez, cela seul le rendra beaucoup plus facile à utiliser.
De plus, même si pull échoue, vous pouvez bien le faire avec push, donc
desc 'git push'
task :push do
p comm = "git add -A"
system comm
p comm = "git commit -m \'hoge\'"
system comm
p comm = "git pull origin main"
system comm
p comm = "git push origin main"
system comm
exit
end
Au lieu de vous souvenir du travail que vous faites toujours, laissez Rakefile s'en souvenir. L'astuce consiste à indiquer quelle est la commande.
De plus, je cache de nombreuses copies car mes amis me méprisent quand je me fais prendre.
desc 'git push'
task :push2 do
["git add -A",
"git commit -m \'hoge\'",
"git pull origin main",
"git push origin main"].each do |comm|
p comm #puts comm.green after require 'colorize'
system comm
end
exit
end
De plus, comme vous ne saurez pas où est écrit comm, il sera plus facile de voir si vous utilisez colorize, ce qui est fait dans la conférence. En attendant, je me souviens aussi des subtilités de git.
command_line
Les commandes externes qui peuvent être utilisées avec le système sont lentes, elles sont donc généralement fournies dans les fonctions intégrées de ruby afin qu'elles puissent être exécutées plus rapidement. Par exemple, appeler ls avec un caractère générique peut être remplacé par Dir.glob. La bonne chose à ce sujet est que vous pouvez faire des choses comme "essayer avec les 5 premiers".
desc 'make list'
task :mk_list do
# system 'ls -1 ../members/*/README.org'
Dir.glob('../members/*/README.org')[0..4].each do |file|
p file
system "grep qiita_id #{file}"
end
exit
end
J'essaie de créer une table d'organisation ici, mais la question est de savoir si la valeur de retour du système n'est pas la sortie, mais si la commande a réussi.
Au fait, pour extraire la sortie standard (stdout) etc., utilisez la gemme appelée commande \ _line. Comme d'habitude,
gem install command_line
S'il vous plaît. Cela ne fonctionne qu'avec ruby 2.4 et supérieur.
require 'command_line/global'
desc 'make list'
task :mk_list do
targets = "../members/*/README.org"
# system "ls -1 #{targets}"
Dir.glob(targets)[0..5].each do |file|
p file
res = command_line "grep qiita_id #{file}"
p res.stdout
end
exit
end
Ensuite, vous pouvez le retirer.
Maintenant, retirez les informations d'ici
# input
"../members/daddygongon/README.org"
"#+qiita_id: daddygongon\n"
=> # output
| daddygongon | daddygongon|
La conversion est effectuée comme suit.
Enfin, avec quelques ajouts
require 'command_line/global'
desc 'make list'
task :mk_list do
targets = "../members/*/README.org"
i = 0
Dir.glob(targets).each do |file|
member = file.split('/')[2]
dd = {}
%i{qiita_id qiita_private}.each do |name|
res = command_line "grep #{name.to_s} #{file}"
res.stdout =~ /:\s*(.+)/ # regexp
dd[name] = $1.to_s
end
next if dd[:qiita_id] == ''
print " | [[https://qiita.com/#{dd[:qiita_id]}/private/#{dd[:qiita_private]}][#{member]}]]"
i += 1
puts "" if (i+1)%6==0
end
exit
end
C'est dit. De cette manière, les informations sont automatiquement extraites des fichiers.
J'expliquerai l'endroit où j'ai écrit l'expression rationnelle et la méthode d'extraction de données plus générale la semaine prochaine.
org to_html, to_platex
J'ai introduit le mode org emacs dans mon \ _help. Dans qiita \ _org, il a été envoyé vers qiita à partir de la ligne de commande, mais plus généralement, une commande de sortie vers html ou latex est préparée.
c-c c-e ho # export as [h]tml, [o]ut
c-c c-e ll # export [l]atex, [l]atex
Vous pouvez convertir vers ces formats avec. Comprenez-vous que c-c signifie une commande en mode majeur?
Cependant, il est difficile de voir avec la sortie telle quelle. Par conséquent, pour html, nous recommandons un format appelé readtheorg. Pour latex, réécrivez l'en-tête pour en faire le format requis.
html
Pour afficher en html, reportez-vous à https://github.com/fniessen/org-html-themes. Je recommande readtheorg. Le fichier theme-readtheorg.setup suivant
# -*- mode: org; -*-
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="https://fniessen.github.io/org-html-themes/styles/readtheorg/css/htmlize.css"/>
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="https://fniessen.github.io/org-html-themes/styles/readtheorg/css/readtheorg.css"/>
#+HTML_HEAD: <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
#+HTML_HEAD: <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
#+HTML_HEAD: <script type="text/javascript" src="https://fniessen.github.io/org-html-themes/styles/lib/js/jquery.stickytableheaders.min.js"></script>
#+HTML_HEAD: <script type="text/javascript" src="https://fniessen.github.io/org-html-themes/styles/readtheorg/js/readtheorg.js"></script>
Dans ~ / .emacs.d / org-mode /.
#+SETUPFILE: ~/.emacs.d/org-mode/theme-readtheorg.setup
Veuillez ajouter à l'en-tête du fichier org que vous allez écrire. Après cela, exportez ho et c'est fait.
latex
Pour le latex, seuls ceux qui en ont besoin doivent essayer les étapes ci-dessous.
Vous pouvez faire des choses assez compliquées avec lisp fourni par org-mode. Cependant, c'est un peu gênant car j'ai besoin d'apprendre le lisp. Par conséquent, ajoutez une instruction pour remplacer l'en-tête dans le Rakefile introduit précédemment. Par exemple, il existe un exemple dans docs / okamoto qui utilise le fichier latex pour l'examen intermédiaire.
L'avantage de rake est que vous pouvez exécuter ces commandes répétitives d'un seul coup. Essayez d'économiser le coût de la mémorisation du codage et des commandes, plutôt que de vous soucier du temps qu'il faut pour le faire. Surtout pour les thèses de fin d'études, de nombreux laboratoires utiliseront du latex, alors essayez-le. De plus, étant donné qu'il a été fabriqué à l'origine par Nishitani Lab, merci de me faire savoir s'il existe un meilleur moyen.
Recommended Posts