কম্পিউটার টিউটোরিয়াল

RubyGems-এর ভিতরে: ক্লাসিক ইনস্টলেশন থেকে আধুনিক ডেভেলপমেন্ট

খান্না, বাচ্চারা জমে যাও, এবং দাদা পুরনো দিনের কথা বলবেন যখন জীবন কঠিন ছিল, এবং জেম ইনস্টল করা একটি মাথাব্যথা, চুল টানুন, দাঁত কাঁটাই যেন যেন অর্থহীন.'

আমি রুবিতে নতুন ছিলাম তখন বান্ডলার (Bundler) ছিল না এবং জেমগুলো হার্ড ওয়ে ইনস্টল করতে হত। রেইলসে, এর মানে rake gems:install লাখ লাখ বার চালাতে হত, উপস্থিত বাগ ফিক্স করতে হত, যতক্ষণ না কমান্ডটি কোনো এরর ছাড়া পাস করে। আজ, আমরা পুরোনো পদ্ধতিতে একটি জেম তৈরি করব, জেমগুলো কী এবং কীভাবে কাজ করে তা দেখে।

জেমস, সেগুলো কী?

RubyGems আপনার নিজস্ব কোডকে অন্য লোকের লেখা ফাংশনালিটির সাথে এক্সটেন্ড করার একটি সহজ উপায়। উদাহরণস্বরূপ, আপনি নিজের অথেন্টিকেশন/অথরাইজেশন কোড লিখার বদলে Devise ব্যবহার করতে পারেন, অথবা আপলোড করা ইমেজ রিসাইজ করতে চাইলে CarrierWave ব্যবহার করতে পারেন। এটি আপনাকে পুনঃব্যবহারযোগ্য কোড লিখতে দেয় যা আপনি অন্যদের সাথে শেয়ার করতে পারেন।

কিন্তু সেগুলো কীভাবে কাজ করে?

এটির সবচেয়ে বেসিক ফর্মে, একটি জেম কোনো কিছু নয় বরং একটি জিপ-আপ ডিরেক্টরি যেটি কোড এবং একটি <name>.gemspec ফাইল ধারণ করে। এই .gemspec ফাইলটি জেমের মেটাডেটা ধারণ করে যেমন এর নাম, কোন ফাইলগুলো লোড করা উচিত এবং এর ডিপেন্ডেন্সি।

gem install বা bundle কমান্ড সোর্স থেকে জিপ ফাইল ডাউনলোড করে এবং আপনার হার্ড ড্রাইভে এক্সট্র্যাক্ট করে। আপনি কোথায় একটি জেম অবস্থিত তা জানতে পারেন bundle info <gem name> চালিয়ে অথবা সরাসরি জেম ডিরেক্টরি খুলতে পারেন bundle open <gem name> চালিয়ে।

জেমটি আপনার অ্যাপ্লিকেশনে লোড করতে, RubyGems Kernel ক্লাসের require ফাংশনকে মन्कি-প্যাচ করে। এটি প্রথমে ডিস্ক থেকে ফাইল পড়তে চেয়ে, এবং যদি সেটি কাজ না করে, তবে আপনার সিস্টেমের প্রতিটি জেমে ফাইলটি রিজলভ করার চেষ্টা করে। একবার এটি একটি জেমে ফাইলটি পেলে, এটি জেমটি "অ্যাক্টিভেট" করে লোড পাথে যোগ করে।

আপনি যদি Bundler ব্যবহার করেন, তবে এটি সেটআপ কল время প্রতিটি স্পেসিফিক জেমকে লোড পাথে যোগ করে। এটি RubyGems-কে পাথ রিজলভ করার ঝামেলা থেকে বাঁচায়। এটি Ruby-কে Gemfile(.lock)-এ সিলেক্ট করা জেমের একটি ভিন্ন ভার্সন লোড করার থেকেও বাঁচায়।

আমি কীভাবে একটি তৈরি করব?

আপনার নিজস্ব জেম তৈরি করার সবচেয়ে সহজ উপায় হল Bundler ব্যবহার করে একটি জেম স্ক্যাফোল্ড জেনারেট করা। এতে একটি প্রপার ডিরেক্টরি স্ট্রাকচার, লাইসেন্স, কোড অফ কন্ডাক্ট এবং জেমের জন্য একটি টেস্ট এনভায়রনমেন্ট থাকে।

তবে, আজ আমরা আমাদের নিজস্ব মিনিমালিস্টিক জেম তৈরি করব শুধু দুটি ফাইল দিয়ে, একটি কোড ধারণকারী এবং একটি gemspec ফাইল যেটি মেটাডেটা ধারণ করে। আমাদের জেম কল করলে ইউজারকে গ্রিট করবে। চলুন আমাদের জেমের জন্য একটি ডিরেক্টরি তৈরি করি।

mkdir howdy cd howdy

এই ডিরেক্টরিতে, আমরা একটি lib ফোল্ডার তৈরি করব যেটি কোড ধারণ করবে এবং একটি howdy.gemspec ফাইল যেটি মেটাডেটা ধারণ করবে। সেটি এরকম দেখাবে:

tree . ├── howdy.gemspec └── lib └── howdy.rb

আমাদের howdy জেমের কোডটি নিচের মতো:

lib/howdy.rb

class Howdy def greet "howdy!" end end

একটি মিনিমালিস্টিক howdy.gemspec ফাইল ভার্সন, লেখক ইত্যাদি সম্পর্কে তথ্য ধারণ করে। এটিও স্পেসিফাই করে জেম বিল্ড করার সময় কোন ফাইলগুলো রাখা হবে। এটি জেমের ব্যবহারকারীদের অপ্রয়োজনীয় ফাইল যেমন টেস্ট এবং অন্যান্য ফাইল যা জেম কোড চালানোর জন্য প্রয়োজন নয় সেগুলো ডাউনলোড করতে বাধ্য হয় না।

Gem::Specification.new do |spec| spec.name = "howdy" spec.version = "0.0.1" spec.authors = ["Robert Beekman"] spec.email = ["robert@example.com"] spec.summary = %(Greets the user) spec.description = %(Howdy is a gem that greets the user when called) spec.license = "MIT" spec.files = ["lib/howdy.rb"] end

জেম বিল্ড করতে আমরা gem build howdy.gemspec কমান্ড ব্যবহার করতে পারি। এটি একটি howdy-0.0.1.gem ফাইল জেনারেট করে যেটি আপনার কোড ধারণ করে। জেমটি অন্যদের কাছে উপলব্ধ করতে, আপনি এটিকে rubygems.org-এ gem publish কমান্ড দিয়ে পাবলিশ করতে পারেন।

রিক্যাপ

এই ধাপগুলো হল একটি খুব বেসিক জেম তৈরি এবং পাবলিশ করার জন্য প্রয়োজনীয়। আশা করি আপনি জেমের আর্কিয়োলজি এবং পুরোনো পদ্ধতিতে সেগুলো বানানো নিয়ে আমাদের গভীরে যাওয়াটি উপভোগ করেছেন। 앞서 বলা হয়েছে, এটি শিক্ষামূলক উদ্দেশ্যে; আজকের বিশ্বে আমরা Bundler ব্যবহার করে জেম স্ক্যাফোল্ড জেনারেট করার পরামর্শ দিই।

শান্তি বানিয়ে রাখুন, যুবকদের! আপনার যেকোনো আইডিয়া, প্রশ্ন বা মন্তব্য থাকলে, দয়া করে আমাদের জানাতে সংকোচ করবেন না।


  1. প্রোডাকশনে RubyGems.org-এ নির্ভর করার চেয়ে স্বয়ং হোস্ট করা Ruby Gems কেন আরও নিরাপদ

  2. রুবি অন রেলসে এনভায়রনমেন্ট ভেরিয়েবল মাস্টার করুন: একটি সম্পূর্ণ গাইড

  3. রুবিতে VCR মাস্টার করুন: টেস্ট পারফরম্যান্স ও নির্ভরযোগ্যতা বাড়ান

  4. AASM দিয়ে রুবিতে স্টেট মেশিন মাস্টার করুন: একটি প্র্যাক্টিক্যাল গাইড