こんにちは、 ユーザー 。
少し前までは、1つのプロジェクトのプロトタイプを作成する仕事がありました。 Facebook Graph APIとの連携も含まれていました。 いくつかの宝石を手に入れて、私はそれらが私にとってあまり便利ではないこと、または必要な機能を実装するのが難しすぎることに気付きました。 そして、宝石を書くという古い考えが頭に浮かびました。 このトピックに関する多くのクエリをグーグルで検索しても、特にロシア語のリソースに関する完全な情報は見つかりませんでした。 これが、この記事のアイデアの由来です。 ここではすべての側面が網羅されているわけではなく、想像の産物が存在し始めるために最小限必要で望ましいものだけが網羅されているため、このマニュアルは「ほぼ完全」と呼ばれます。 カットをお願いします!
基本的なものから始めましょう(ウィキペディアのおかげです):
RubyGems(英語gem、gems-a gem)は、Rubyプログラミング言語用のパッケージ管理システムであり、Rubyプログラムおよびライブラリの標準形式(自給自足の「gems」形式)、「gems」のインストールを簡単に制御するために設計されたツール、配布用のサーバー。
注: Rails GemsやRoR GemsではなくRuby Gemsであることに注意してください!!! これは、宝石が純粋で素晴らしいRubyで直接記述されていることを意味し、 Rails Gemとしてマークされているものは単なるRuby Gemですが、 Railsを使用または補完します (ちなみに、RailsはRuby Gemでもあります)。
JetBrains- RubyMine (v6.3)の開発IDEに使用します。 主に、便利なオートコンプリートとGit、SFTP、その他の機能との統合が原因です。 したがって、このIDEですべての詐欺を表示します。 Sublime / Vim / Emacs + Terminalのファンには、コンソールからgemテンプレートを生成するための一連の指示があります。
それでは始めましょう。
湿気はあるものの、機能しているFobosヘム(現在のv0.0.6)は作成者です。 私はその開発のプロセスからすべての知識を取りました。
ステップ1:ブランクを作成する
RubyMineでは、新しいプロジェクトを作成するように見えますが、 Poject Type :Ruby Gemを選択できます。
次は、Rubyバージョンの選択です。 これは、原則として明確であり、説明を必要としません。
その結果、このような構造のプロジェクトが得られます(binおよびtestディレクトリを作成するためのボックスをオフにしました)。
構造全体を順番に検討してください。
- lib-アプリケーションのすべてのコード(まあ、またはほとんどすべて)を直接保存します。
- .gitignore-バージョン管理下にないファイルおよびフォルダーのリスト(データベースファイル、コンパイル済みアセット、ログなど)を保存します。
- Gemfile、Gemfile.lock-作業やイメージの開発に使用する他のgemのリスト。 しかし、ヘムの場合、それらは利用できません。 それらは* .gemspecファイルで指定されています。
- LICENSE.txt-使用ライセンスを保存します。 私の場合、これはMITです。
- Rakefile -Rakeタスクを保存します。 詳細はインターネットで簡単に見つけることができます。
- REAMDE、md-アプリケーションの「顔」。 GitHubおよびRubyDocの開始ページに表示されます。
- SomeCoolGem.gemspecは、アプリケーションの主要な情報と依存関係が保存されるマニフェストです。
ステップ2:動作するアプリケーションの構造を作成する
ここで、 libディレクトリを直接操作します。
SomeCoolGem.rbファイルが開始ファイルです。 理論的には、すべてのロジックをそこに保存する必要がありますが、実践が示すように、モジュールを作成し、アプリケーションを機能に応じてクラスに分割し、それらをこのファイルにロードすることをお勧めします。 C ++ / Java / C#言語に精通している人にとっては、このファイルはmain()メソッドに似ています。
HelloWorldモジュールをすぐに作成します。 そして、その中にアロハクラスを作成します。
実際、gem全体がモジュールであるため、次のコードは既にSomeCoolGem.rbファイルにあります。
require "SomeCoolGem/version" module SomeCoolGem # Your code goes here... end
これは、プロジェクトの構造が変更された方法です。
Allohaクラスは次のとおりです。
module SomeCoolGem module HelloWorld class Alloha end end end
ステップ3:目的の機能を実行する
以下を示すために、フィールド、コンストラクター、およびいくつかのメソッドをAllohaクラスに追加します。
module SomeCoolGem module HelloWorld class Alloha attr_accessor :name def initialize(name) @name = name end def generate_alloha "Alloha, #{@name}, from SomeCoolGem!" end def say_alloha puts generate_alloha end end end end
ステップ4:パフォーマンスを確認する
gemはモジュールであるため、モジュールとしても使用できます。 検証には、通常IRBを使用します。
以下に例を示します。
2.1.2 :001 > load 'alloha.rb' => true 2.1.2 :002 > object = SomeCoolGem::HelloWorld::Alloha.new('User') => #<SomeCoolGem::HelloWorld::Alloha:0x00000000e7f950 @name="User"> 2.1.2 :003 > object.generate_alloha => "Alloha, User, from SomeCoolGem!" 2.1.2 :004 > object.say_alloha Alloha, User, from SomeCoolGem! => nil 2.1.2 :005 >
ご覧のとおり、通常のプロジェクトの作業と大差はありません。 大まかに言えば、gemを使用する場合、アプリケーションはネストされたモジュール/クラスを使用してモジュールをプラグインするだけで、通常のRubyモジュール/クラスのように使用できます。
ステップ5:すべてをメインファイルに接続する
これを行うには、開始ファイルSomeCoolGem.rbをわずかに変更する必要があります。
require "SomeCoolGem/version" module SomeCoolGem require 'SomeCoolGem/hello_world/alloha' end
これで、アプリケーションのGemfileでgemを指定するときに、通常のRubyモジュールとして使用できます。
ステップ6:gemをビルドしてバージョン管理する
version.rbファイルには、gemの現在のバージョンが含まれています。
module SomeCoolGem VERSION = "0.0.1" end
各リリースの前に、この値を変更する必要があります。
新しいコミットを行う場合、バージョンを変更する必要はないとすぐに言わなければなりません。 ただし、プログラムのロジックが変更された場合は、リリースすることをお勧めします。
gemバージョンをビルドするには、次のコマンドを実行する必要があります。
gem build SomeCoolGem.gemspec
ファイルSomeCoolGem-0.0.1.gemがプロジェクトルートに表示されます。
おめでとうございます gemの最初のバージョンが収集されました!
ステップ7:宝石を食べる
詳細で新鮮な指示は常にここにあります 。
同じ一連の指示がここにあります 。
すべてがそこにあり、詳細です。
ステップ8:啓発
今、私は多くの人が興味を持っているいくつかのグッズについてお話ししたいと思います。
1. RubyGemsでgemプロファイルを更新できます。 説明、リンクなどを追加できる設定があります。
2.バッジ。 バッジは別の小さなトピックに値します。 しかし、一言で言えば-これらはREADMEファイルにハングアップする普通の写真です。 さまざまなサービスに合格したテストのステータスを表示します。 たとえば、コードの純度を確認します。 詳細はこちらをご覧ください 。
3.自分で作成する必要のあるREADMEファイル。 どのバージョンに互換性があるかどうかを示すようにしてください。 グローバルな変更が行われた場合、または古い機能の一部が閉じられた場合は、変更のグローバルな性質に応じて、マイナーバージョンではなく古いバージョンを変更してください。
4.品質の文書を説明します。 多くの場合、あなたの営業時間を使いたいかどうかに依存します。
5.他のgemへの依存関係を最小限に抑えて機能を実装し、作業で必ず新しいバージョンを使用してください。
おそらくそれだけです。 この方向に旅を始めるすべての人に幸運を。 私は批判と説明に喜んでいるでしょう。
UPD:
* .gemspecおよびREADMEファイルを使用してさらに時間をかけます。
* .gemspecファイルを編集するには、 こちらの記事をご覧ください。
また、アプリケーションで使用するすべてのgemは* .gemspecファイルでも指定する必要があることに注意してください。