web-dev-qa-db-ja.com

Rubyを使用してすべてを自動化できますか?

さまざまなプラットフォーム(Windows、Linuxなど)でさまざまな種類のアプリケーション(Webベース、GUIベース、コマンドラインなど)に直面し、日常的に動作しています。スクリプトによってタスクを自動化する絶好の機会があります。しかし、ほとんどすべての種類のアプリケーションとプラットフォームには、ネイティブスクリプト言語またはツール( VBScript および PowerShellなど)があります。 Windowsの場合はBashスクリプト、Linuxの場合は Selenium 、Webアプリケーションの場合は AutoIt GUIアプリケーションの場合など)。非常に多くのスクリプト言語を学び、維持することは私を殺します。

Rubyはさまざまなプラットフォームと簡単に相互運用でき、非常に表現力があると感じています。したがって、私の質問は次のとおりです。

  1. Rubyを使用してすべてをスクリプト化することは可能ですか?

  2. もしそうなら、各プラットフォームのnativeスクリプト言語と比較して主な欠点は何ですか?

11
TomCaps

Linux、OS Xなどの汎用スクリプト言語にはRubyが適しています。しかし最近、2000から7までのすべてのバージョンのWindowsで動作するスクリプトをいくつか作成する必要がありました。VBScriptには必要な機能がありませんでした( SOAP Webサービスなど)と話し、PowerShellがWindows 2000で利用できないため、Microsoftツールキットの外を見て、Rubyを試してみることにしました(過去にLinuxで使用したことがありました。決定を後悔しているわけではありませんが、もっと良い選択があったのではないかと思います。Windowsでの主な不満はRuby=だった:

  • 64ビットRuby for Windows(私が知る限り))がないため、c:\ windows\system32のようなシステムの仮想化領域にアクセスするのは簡単ではありませんでした。いくつかのVBScriptについては、私が理解しなかったより良い方法があるかもしれません。
  • 遅いです。クアッドコアCPUと6GB RAMがあり、irbのロードに2秒以上かかります。
  • レジストリアクセスやWMIなどのWindows固有のライブラリはありますが、思ったほど簡単ではありません。ドキュメントが比較的少ないため、試行錯誤が繰り返されます。

それでも、基本的には期待どおりに機能し、RubyはOSに組み込まれているものよりも約1000倍優れています。したがって、少なくとも、 RubyよりもWindowsでの汎用スクリプトの場合)。

6
Martin

Rubyは、プラットフォーム(Windows、Linux、MAC)間の移植性、およびさまざまな種類のアプリケーションを自動化する機能に関して、要件に適合しているようです。私の知る限り、Rubyライブラリを使用してブラウザとコマンドラインアプリを自動化できますが、GUIベースのツールについてはわかりません(.NETなどの一部のプラットフォームでは、Rubyバインディングがこの点で役立ちます)。

Rubyには多数のライブラリーがあるため、スクリプトに適した多くのタスクを自動化できるはずです。たとえば、さまざまなテキスト形式のファイルを操作したり、ネットワークやデータベースにアクセスしたりできます。ただし、一部のタスクをネイティブRuby-たとえばビデオをエンコードする)で実行するのは最善ではない場合があります(ただし、Rubyを使用して他のツールをいつでも呼び出すことができますそれ)。

バッチおよびシェルスクリプトと比較する場合、Rubyを使用して、これらのスクリプトが実行できるほとんどすべてのタスクを実行できます。欠点は次のとおりです。

  • 追加のインストールが必要になる場合があります。
  • 他の人はあなたのスクリプトを維持するためにRubyを学ぶ必要があるかもしれません。
  • ツールが他のスクリプト言語とバインドしている場合、Rubyは、パフォーマンスや機能へのアクセス能力の点で、それと一致しない場合があります。たとえば、 Rubyを介して自動化する場合、ブラウザー内からJavaScriptを介して実行できるすべてのこと。
2
Satyajit

上記のすべての回答に同意しますが、WindowsとPOSIXにはプラットフォーム固有の違いがあるため、プラットフォーム固有のものを使用している場合にスクリプトを再利用できるとは保証できません。

Rubyは一般的なスクリプトには適していますが、パフォーマンスにはそれほど優れていません。とにかく、スクリプト内のプラットフォームを識別し、外部コマンドとスクリプトを実行することができます。

0
A B