Type de graphique ruby-appendix-IV (rake)

!Mac OS X-10.15.7!ruby-2.7.1p83

version rubis de marque, fourmi

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

Type de graphique ruby-appendix-IV (rake)
Type de graphique Rubis
Type de graphique ruby-appendix-III (bundler)
Type de graphique ruby-I (met)
Type de graphique ruby-appendix-V (rubular)
Type de graphique ruby-appendix-VI (thor, rubocop)
Type de graphique ruby-appendix-I (bash + emacs)