さようならXMLビルド... Hello Rake

はじめに





今日 2010幎4月26日月曜日8:54 amおよそTransl。 私はもう䞀床、私はXMLベヌスのプロゞェクト構築システムのファンではないこずをツむヌトしたした。 はい、なぜ必芁なのか理解しおいたす。 はい、圌らは圓時良かった。 そしお、はい、私はただそれらを毎日䜿甚しおいたす。 しかし、これらすべおにもかかわらず、この問題を解決するより䟿利な方法があるず思いたす。 私のツむヌトに察する最も䞀般的な回答は、「たあ、どのような遞択肢ですか」でした。人生で私が教えおくれた最も重芁なこずの1぀は、芋返りを埗るたで䜕も䞍平を蚀うべきではないずいうこずです。 そこで、ここでそしお今、私は代替゜リュヌションを提案したす...



問題





議論に入る前に、質問をさせおください...開発者 プログラマヌ、玄Transl。 が䜕をしお最善を尜くしおいたすか 私はこのように答えたす コヌドを曞きたす 。 この堎合、「耇数文字」を巚倧なXMLファむルにプッシュするこずで頭をひねる必芁があるのはなぜですか なぜコヌドを曞けないのですか 圌らは通垞、XMLベヌスのアプリケヌションを䜿甚するず、再コンパむルせずに倉曎を行いやすくなり、柔軟性が高たり、ツヌルの䜜成が容易になるず蚀いたす。 それらは誰もが理解できる圢匏に基づいおいたす。 しかし、個人的には、このツヌルはそれほど䟡倀があるずは思いたせん。 私にずっお、これはすぐに、数幎前にプログラミングの䞖界で起こったXMLに関する過去のヒステリヌの名残です。 このような組み立おシステムを数幎間䜿甚しおきた人は、最初は面癜くお銬鹿げたこずを確認できたす。

人々はXMLの栄光に倢䞭になり、XMLでコヌドを曞き始めるこずで倱うものを指摘するのを忘れおいたす。 たずえば、業界が改善に倚くの時間を費やしたすべおのツヌルに぀いおはどうでしょうか。 通垞の゚ディタヌ、デバッガヌ、ラむブラリヌ、およびその他のツヌルは、XMLのいく぀かの小さな利点を掻甚するためだけに倱われたす。 すべおのタスクをXMLで蚘述できるわけではありたせん。 結局のずころ、XMLファむルは、バックグラりンドで実行されるコヌドの構成システムにすぎたせん。 最終的に、XMLの構成を実行するスクリプトの蚘述に戻りたす。

それでは、XMLの利点は䜕ですか 簡単に解析できたすか しかし、コレクタヌファむルのパヌサヌをどのくらいの頻床で蚘述したすか XML configを蚘述し、NAntにフィヌドするだけです。 自分で䜕かを解析する必芁はありたせん。 コンパむルは必芁ありたせんか さお、プロゞェクト自䜓をビルドする前にビルドスクリプトをビルドしたくないので、最初の議論に倀したす。 そうでない堎合は、ビルドスクリプト甚のビルドスクリプト甚のビルドスクリプトを蚘述する必芁がありたす...など。 「ニワトリ、満足の卵」 translate.google.comによる問題「ニワトリ<->卵」の翻蚳に満足しおいたす。玄Transl。  結局のずころ、これは䞀郚の蚀語の制限です。 コンパむルを必芁ずしない蚀語はどうでしょうか。NAntやMSBuildず同様に、解釈された蚀語ぞのリンクを実行可胜ファむルに枡すこずで実行できたすか あなたは私がリヌドしおいるこずを理解しおいたす。 このように機胜する蚀語は倚数あり、そのうちのいく぀かは.Netプラットフォヌムで実行されたす。

あなたが私のブログをフォロヌしおいるなら、あなたはおそらく私がRubyのファンであるこずに気づいおいるでしょう そしお私はおよそTransl。です 。 私は圌ず専門的に仕事をしおいないずいう事実にもかかわらず、私はこの蚀語のシンプルさず矎しさを絶えず賞賛しおいたす。 コンパむルはRubyの䞖界ではめったに䜿甚されない手順ですが、静的にコンパむルされた蚀語の䞖界ず同様に、プロゞェクトのビルドプロセスの必芁性も倧きいです。 ずころで、人々、そしお皆さんは、.Netの䞖界でのアセンブリに関する䞀般的な誀解の1぀は、アセンブリはコンパむルにのみ必芁であるずいうこずを知っおいたす うヌん Cのような蚀語では、もちろん、コンパむル時に最初にコンパむルが行われたすが、その埌はただ倚くの䜜業が残っおいたす。 倚くの堎合、アセンブラヌは単䜓テストを準備しお実行し、ファむルをコピヌし、配垃パッケヌゞをパッケヌゞ化し、堎合によっおはデプロむメントに出荷する必芁がありたす。 コレクタヌは、繰り返し繰り返される耇雑なプロセスが構築される岩です。

それで、Rubyがありたす。 より正確には、IronRuby 1.0翻蚳の執筆時点では、バヌゞョン1.1が関連しおいたす。 そしお、それを䜿甚しお、簡単で快適なコレクタヌを䜜成できたす だから もちろんです。



IronRubyむンストヌルの抂芁



たず、公匏Webサむトhttp://ironruby.net/からディストリビュヌションをダりンロヌドしたす 。 そこで、.Net 2.0ず.Net 4.0の䞡方のディストリビュヌションをダりンロヌドできたす。 むンストヌルプロセスは、特定の遞択に䟝存するべきではありたせん。

zipファむルをダりンロヌドするこずにより......

***翻蚳者から

サむトには自動むンストヌラヌが既に甚意されおおり、システムを構成するために必芁な操䜜を実行したす。 たた、アプリケヌションに埋め蟌むためのむンタヌプリタヌやラむブラリの゜ヌスコヌドをダりンロヌドするこずもできたす。 したがっお、䞍必芁な手動むンストヌルの説明は省略したす。





むンタヌプリタヌを正垞にむンストヌルした埌、コマンドラむンから察話型むンタヌプリタヌコマンド「ir」を起動し、Rubyで遊ぶ機䌚を埗るこずができたす。

puts "CodeThinked.com is awesome!!"
      
      







レヌキを実行



Rakeは䞊蚘で説明したツヌルです。 XMLは䜿甚したせん。 これは、完党にRubyで蚘述された単なるスクリプトです。 むンタヌプリタヌ蚀語で蚘述する堎合、理論的にはビルドの問題を解決するためにXMLを䜿甚する必芁はありたせん。 コヌドを曞くだけです 。 IronRubyには独自のバヌゞョンのRakeが付属しおいたす。すべおが正しくセットアップされおいるこずを確認するには、コマンドラむンで「rake」ず入力するだけです。 数秒埌に、単䞀のrakeファむルが芋぀からなかったこずを瀺すメッセヌゞが衚瀺されたす。 それでは、プロゞェクトずそのための簡単なrakeファむルを䜜成したしょう。

最初に行うこずは、プロゞェクトのディレクトリを䜜成するこずですc\ development \ RakeTestずしたす。 指定したディレクトリで、Rakefile.rbファむルを䜜成したす。 次に、お気に入りのテキスト゚ディタヌ たずえば、NotePad ++、玄Transl。 で開き、次のコヌドを挿入したす。

 require 'rake' task :default => [:congratulate_me] desc "Tells you that you are awesome" task :congratulate_me do puts "Congrats, you have rake running. Wasn't that easy?" end
      
      





その埌、コマンドラむンでこのファむルがあるディレクトリに移動し、「rake」ず入力するだけです。 応答ずしお、「おめでずう、rakeを実行しおいたす。 簡単ではなかったですか」

そしお、それは本圓に簡単ですよね これで、完党なコレクタヌを自由に䜿甚できたす。 䞊蚘のコヌドでは、Rakeラむブラリの接続、「congratulate_me」タスク起動のデフォルトのむンストヌル、およびタスク自䜓の定矩ずその説明を確認できたす。 単玔なナントスクリプトのように芋えたすが、ハリネズミの猫であるため、コヌドを䜜成したした。

次に、タスクを远加しお1぀のタスクに結合するか、既定のタスクからではなく他のタスクからアセンブリを開始するのにかかるコストを芋おみたしょう。 そのため、スクリプトにいく぀かのタスクを远加したす。

 task :congratulate_team do puts "Congrats to the team!" end task :congratulate_everyone => [:congratulate_me,:congratulate_team] do puts "Phew, that was a lot of congrats" end
      
      





物事がもう少し耇雑になったこずがわかりたす。 コン゜ヌルに文字列をポップするだけのタスクず、名前の埌に䜕らかの配列を持぀別のタスクがありたす。 これは、特定のタスクの䟝存関係を他のタスクに割り圓おるこずができるNAnt機胜の類䌌物です。 これにより、このタスクを完了する前に他のナヌザヌを実行できたす。 ここで、Rakefile.rbでデフォルトタスクの名前を「congratulate_everyone」に倉曎するず、ビルドスクリプトの実行時に、他の2぀のタスクが正垞に完了した埌にcongratulate_everyoneタスクが実行されるこずがわかりたす。 ずころで、デフォルトのタスクを指定する必芁はありたせん。 特定のタスクを名前で呌び出すこずができたす。 これは、「rake congratulate_team」のように行われたす。

NAntたたはMSBuildフレヌムワヌクでできるこずの倚くは既に゚ミュレヌトしおいたす。 これは、これらのフレヌムワヌクを䜿甚するず、特定のアクションを実行するために耇数のタスクをシヌケンス内で単玔に結合できるためです。 たた、スクリプトには䞀連のタスクがあり、特定の順序でタスクを実行できたす。 そしお、特別な蚭定は必芁ありたせん。 スクリプトで倉数を宣蚀するか、どこからでもデヌタを読み取るこずができたす。 さらに、他のルビヌファむルをスクリプトに接続しお、さたざたな堎所から蚭定、コヌド、タスクにアクセスできたす。 XMLでできるこずの倚くを、無料で実行できたようです。

残っおいる問題は1぀だけです-圌らが知っおいる方法ず同じこずをするこずですよね 結局のずころ、スタゞオ゜リュヌションの構築、テストの実行、バヌゞョン管理システムの掻甚、ファむルのコピヌず圧瞮、FTPぞのファむルのアップロヌドなどの機䌚が欲しいのです。 たぶん私たちは䜕かを芋逃したしたか それでは、MSbuildずNAntに远い぀くこずができるでしょうか たあそれは尋ねた。



Friends Rakeおよび.Net



䞍思議に思われるかもしれたせんが、これらのスクリプトタスクをすべお実行するにはどうすればよいでしょうか。 偶然、私はそれらをすべお手で打぀必芁がありたすか この問題はすでに解決できたすか そしお、私があなたに答えるだろうず思いたす もちろん、この問題はすでに解決されおいたす。 頭痛薬は「 アルバコア 」ず呌ばれたす。 これはGitHubの小さなプロゞェクトです。 急いでむンストヌルしないでください。 これを2぀の方法で行う方法を説明したす。

IronRubyには、特別なigemツヌルMRI Rubyのgemの類䌌物が付属しおいたす。 このツヌルを䜿甚するず、远加のIronRubyパッケヌゞをマシンにむンストヌルできたす。 このツヌル自䜓は、パッケヌゞをリポゞトリからマシンに䟝存関係ずずもにコピヌしたす。 そのため、1぀のigem install albacoreコマンドで、Albacoreが機胜するために必芁なすべおがコン゜ヌルにむンストヌルされたす。 rake-fileに1行だけ远加する必芁がありたす。

 require 'albacore'
      
      





次に、コン゜ヌル.Netアプリケヌション「RakeTestApp」甚の単玔なプロゞェクトを䜜成し、Albacoreを介したアセンブリがその䟋でどのように機胜するかを確認したす。 「AutomatedRelease」などの名前のプロゞェクトに構成を远加するこずから始め、゜リュヌションの各プロゞェクトでアセンブリの䜜業ディレクトリを「../build_output」に倉曎したす。 このようにしお、Albacoreが自由に䜿える特別なmsbuildタスクを実行しお、.slnファむルを凊理し、゜リュヌションをコンパむルできたす。

最初に、残りのすべおを順番に実行するタスクを䜜成したす。

 task :full => [:clean,:build_release,:run_tests]
      
      





次に、アセンブリ「build_output」の䜜業ディレクトリを削陀するタスクを䜜成したす。 クリヌニングを行いたす。

 task :clean do FileUtils.rm_rf 'build_output' end
      
      





ご芧のずおり、ファむルを削陀するだけの特別なタスクは必芁ありたせん。 必芁な機胜は、暙準のRubyラむブラリに既に実装されおいたす。 次に、Albacoreタスクから継承した最初のタスクを䜜成したす。 このタスクは゜リュヌションをコンパむルしたす

 msbuild :build_release do |msb| msb.properties :configuration => :AutomatedRelease msb.targets :Build msb.solution = "RakeTestApp/RakeTestApp.sln" end
      
      





そのため、「task」の代わりに「msbuild」を䜿甚し、タスクに「build_release」ずいう名前を付けたした。 このタスクは1぀のパラメヌタヌ-構成を取りたす。 ここでは、「AutomatedRelease」で構成を蚭定し、収集する必芁のある目的の目暙ず゜リュヌション蚘述子ぞのパスを指定したす。 たた、アセンブリ䞭に実行する必芁があるテストもありたす。 AlbacoreのNUnitタスクからタスクを継承できたす。 次のようになりたす。

 nunit :run_tests do |nunit| nunit.path_to_command = "tools/nunit/nunit-console.exe" nunit.assemblies "build_output/RakeTestAppTests.dll" end
      
      





繰り返しになりたすが、このタスクは1぀の匕数を取りたす。この匕数を䜿甚しお、タスクのいく぀かのパラメヌタヌを蚭定できたす。 ここでは、実行可胜ファむルずテスト付きアセンブリのリストを指定したす区切り文字-コンマ。



今、すべお䞀緒に



 require 'rake' require 'albacore' task :default => [:full] task :full => [:clean,:build_release,:run_tests] task :clean do FileUtils.rm_rf 'build_output' end msbuild :build_release do |msb| msb.properties :configuration => :AutomatedRelease msb.targets :Build msb.solution = "RakeTestApp/RakeTestApp.sln" end nunit :run_tests do |nunit| nunit.path_to_command = "tools/nunit/nunit-console.exe" nunit.assemblies "build_output/RakeTestAppTests.dll" end
      
      







以䞊です IronRuby、Rake、およびAlbacoreを䜿甚しお簡単なビルドツヌルを䜜成したした。 しかし、これはAlbacoreでできるこずのほんの䞀郚です。 このラむブラリを䜿甚するず、ndepend、ncover、sftp、sqlコマンド、zipを䜿甚したディレクトリのアヌカむブ、sshの呌び出し、unzipなどを䜿甚できたす。 これらのレゎアクションはすべおAlbacoreで実行されたす。



おわりに



私がXML-configsを䜿甚しおアセンブリにうんざりしおいる堎合は、IronRuby、Rake、およびAlbacoreを詊しおみるこずをお勧めしたす。 最悪のシナリオでは、これはわずかな時間になりたす。 しかし、その埌、燃え尜きた堎合、XML構成のタタヌル語-モンゎル語むグテ抑圧から氞遠に自由になりたす。 楜しんでいただけたしたでしょうか



䞊べ替えぞのリンクはこちらです。



All Articles