LoginSignup
21
11

🐟動物蚀語🐟pad_characterを『gem』で䜜っおみた🐈

Posted at

この蚘事は、ふぁ○お神様に憧れお、䞭間詊隓・PF䜜成を攟り投げおgem䜜成に勀しんだ日蚘です

gemの内容は、ずっおも簡単ですのでGitHubに飛んで内容も芋お行っお䞋さい。䞀぀のgemの内容がわかるようになるず、他のものにも応甚ができ、gemを䜿う際の手助けずなっおくれるず信じおいたす

泚意間違い等あるかもしれたせん気付かれたしたら、お手数ですが教えお䞋さい🐟

目次だにゃ🐟

  • これを䜜りたした
  • ほが、これを参考に䜜りたした🐟
  • 私の環境
  • 事前準備
  • gem䜜成の倧たかな流れ
    • 、RubyGemsで、䜜りたいgemず同じ名前がないか調べたしよう
    • 、Gemの箱雛圢を䜜りたす。
    • 、自分の思うたたに䞭身を䜜っおいきたしょう
    • 、動䜜確認をしおいきたしょう
    • 、RSpecを曞いお、ちゃんず確認しおあげたしょう
    • 、䞖に出しおあげたしょう
      - 䞊蚘以倖の参考文献
      - 公匏しか勝たん
      - 最埌に

これを䜜りたした🐟

文字を入れるず、その数だけ「🐟」が出おくるgemです。

ほが、これを参考に䜜りたした🐟

私の環境🐟

ruby -v
ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [arm64-darwin21]

bundle -v
Bundler version 2.2.22

事前準備🐟

  • Githubに今回䜜るgemの゜ヌスコヌドを眮くための新しいリポゞトリを䜜成
  • RubyGems
    • アカりント登録
    • API keysの䜜成詳しくあずで曞く
    • 仕様が倉わっおいないか調べる
  • Bundler
    • • bundle -v をしおBundler version 1.9.0未満の堎合、gem update bundlerしおください。

🐟gem䜜成の倧たかな流れ🐟

、gemの名前は、unique䞀意でなければなりたせん。RubyGemsで、䜜りたいgemず同じ名前がないか調べたしよう

、箱雛圢を䜜りたす。
gemは玠晎らしいこずに箱雛圢が甚意しおありたす。これが䞊手くむンストヌルできたら、あずは穎埋め匏に自分がしたいこずを入れおいくだけ・・・
「TODO」方匏で、曞いおあるのも分かりやすくおよかったです。党郚埋めるずちゃんずgemになっおるので䞍思議ですね

、自分の思うたたに䞭身を䜜っおいきたしょう
PFず䞀緒で、䞀旊圢にしお次に行く方がいいず思いたす
PFよりもいくぶんも実装にかかるコストが䜎いのでどんどん䞭身を点怜・修正・改善しお行った方が面癜いかなっお思いたす

、動䜜確認をしおいきたしょうたずは、gemずしお認識させおあげお、「irb」にお動かしおあげたしょう

、RSpecを曞いお、ちゃんず確認しおあげたしょう
PFでのテストの緎習にもなりたすし、いたっお簡単です。曞いおみたしょう

、䞖に出しおあげたしょう
䞖に出す際のやり方が最近倉わったようで、䞊蚘に参照しおいた蚘事が䜿えなくなっおいたしたこういう時は、公匏こそ正矩ですちゃんず公匏を読みたしょう戒め

、RubyGemsで、䜜りたいgemず同じ名前がないか調べたしよう🐟

䞊蚘のURLにお、「RubyGems」に飛んで、䜜りたいアプリの名前を入れおみたしょう
怜玢に匕っ掛からなければ、ないのでそのたた䜜っおいきたしょう
もしひっかかっおしたった堎合、䜜れたせんので名前を怜蚎したしょう・・・

、Gemの箱雛圢を䜜りたす🐟

こちらに関しおの自分のデヌタがなかったのでこちらのURLを匕甚したす

Gemのベヌスを䜜成する

Bundlerを䜿っお䜜成したす。Bundler無しでもGemの䜜成はできたすが、珟圚はBundlerを䜿うのがスタンダヌドのような雰囲気がありたす。

bundle gem gem_nameで簡単にGemのベヌスを䜜成できたす。

$ bundle gem (you_gem_name)

bundle gemコマンドを初めお䜿う堎合は、テストをRSpecずminitestどちらで曞くか、CODE_OF_CONDUCT.mdずLICENSE.txtを䜜っおいいかを確認されたす。

「テストをRSpecずminitestどちらで曞くか」は慣れおいる方を遞択すれば良いず思いたす。私はRSpecを遞択しおいたす。「CODE_OF_CONDUCT.mdずLICENSE.txtを䜜っおいいか」はYESで良いず思いたす。

CODE_OF_CONDUCT.md

  • gemぞのすべおの貢献者が埓うこずを期埅する行動芏範を提䟛したす。

LICENSE.txt

$ cd  (you_gem_name)
$ tree
.
├── CODE_OF_CONDUCT.md
├── Gemfile
├── Gemfile.lock
├── LICENSE.txt
├── README.md
├── Rakefile
├── bin
│   ├── console
│   └── setup
├── (you_gem_name).gemspec
├── lib
│   ├── (you_gem_name)
│   │   └── version.rb
│   └── (you_gem_name).rb
└── spec
    ├── (you_gem_name)_spec.rb
    └── spec_helper.rb

gem_name.gemspecにはメタデヌタが定矩されおいたす。曞き盎すべきずころは、TODOず曞かれおいるので、これを修正しおいきたす。修正しないずbundle install
をしたずきに怒られたす。

「TODO」ず、曞いおあるので曞くずころも迷わず曞けたす

(you_gem_name).gemspec


# Gemの芁玄を曞きたす
spec.summary       = %q{TODO: Write a short summary, because RubyGems requires one.}

# Gemの説明を曞きたす
spec.description   = %q{TODO: Write a longer description or delete this line.}

# ホヌムペヌゞURL or GithubのリポゞトリURLを曞きたす。
spec.homepage      = "TODO: Put your gem's website or public repo URL here."

# https://rubygems.orgを曞きたす
spec.metadata["allowed_push_host"] = "TODO: Set to 'http://mygemserver.com'"

# GithubのリポゞトリURLを曞きたす。
spec.metadata["source_code_uri"] = "TODO: Put your gem's public repo URL here."

# CHANGELOG.mdのURLを曞きたす。
spec.metadata["changelog_uri"] = "TODO: Put your gem's CHANGELOG.md URL here."

説明も英語ですが曞いおあるので、蚳しながら埋めおいっおください🐟

このファむルの䞋郚にある次のコヌドは、䟝存しおいるGemが曞かれおいたす。

これはGemfileから読み蟌たれおいたすので、Gemを远加した堎合はここに远蚘しおいたす。

(you_gem_name).gemspec

spec.add_development_dependency "bundler", "~> 2.0"
spec.add_development_dependency "rake", "~> 10.0"
spec.add_development_dependency "rspec", "~> 3.0"

修正が終わったら、䟝存gemをむンストヌルしたす。

bundle install

、自分の思うたたに䞭身を䜜っおいきたしょう🐟

ここからは、私のコヌドも䟋に挙げおいきたす。混ざっお分かりにくい堎合は教えおください・・・盎したす

libディレクトリにコヌドを曞いおいきたしょう

touch lib/(you_gem_name)/format_(you_gem_name).rb

format_(you_gem_name).rb

class String
#Stringクラスに「to_pad」メゟットを増やしおいたす。ずっおも単玔・・・もっず面癜いや぀にアップデヌトしおいく予定です。
  def to_pad
    word_count = self.size
    pad_count = "\u{1F43E}" * word_count.to_i
  end
end

(これは芋本です奜きなように定矩しおいきたしょう🐟)

次に(you_gem_name)/format_(you_gem_name).rbを読み蟌めるようにrequireしたす

# frozen_string_literal: true

require_relative "pad_character/version"
require "pad_character/format_pad_character"

module PadCharacter
  class Error < StandardError; end
  # Your code goes here...
end

、動䜜確認をしおいきたしょう🐟

䜜ったメ゜ッド定矩をgemにしお動䜜確認をしおいきたす

rake build

コマンドでpkgディレクトリにgemをbuildしたす。buildが完了したらgem installをしたす。

pad_character 0.1.0 built to pkg/pad_character-0.1.0.gem.

% gem install pkg/pad_character-0.1.0.gem  
Successfully installed pad_character-0.1.0
Parsing documentation for pad_character-0.1.0
Done installing documentation for pad_character after 0 seconds
1 gem installed

こちらのコマンドは、gemのディレクトリに倉曎した堎合郜床行っおgemにしおください。確認たでした方がいいです。

installができたら、

% bin/consoleirbでもよき

を起動しお、確認しおいきたしょう

001:0> require "Pad_character"
=> true

irb(main):002:0> "アむり゚オ".to_pad
=> "🐟🐟🐟🐟🐟"

ずっおもかわいいにくきゅう文字が出来たした🐟

、RSpecを曞いお、ちゃんず確認しおあげたしょう🐟

テストを曞いおいく

コヌドの品質を担保するためにテストを曞きたしょう。Gemずしお公開するなら、なおさら重芁ですね。

今回テストはRSpecを䜿いたす。

gemのテストは簡単に曞け・簡単に確認が取れるため、いい緎習になるず思いたす。ぜひ曞いおみたしょうしかも、RSpecで曞いおあるこずが倚いため他のgemのRSpecを芋るだけで、結構勉匷になりたす。どこにどんな感じに曞いおあるかも芋おいっおください。

spec/pad_character_spec.rb

# frozen_string_literal: true

RSpec.describe PadCharacter do
  it "入力した文字が党お🐟になる" do
    str = "あいうえお"
    expect(str.to_pad).to eql("🐟🐟🐟🐟🐟")
  end
end

曞いたら、テストを実行しおみたしょう🐟

% bundle exec rspec

PadCharacter
  入力した文字が党お🐟になる

Finished in 0.00222 seconds (files took 0.14626 seconds to load)
1 example, 0 failures

テストが、通りたした🐟

、䞖に出しおあげたしょう🐟

䞊蚘のURLに埓っお、アップロヌドしようずしたら・・・出来たせんでした・・・泣

% rake release
pad_character 0.1.0 built to pkg/pad_character-0.1.0.gem.
Tag v0.1.0 has already been created.
Enter your RubyGems.org credentials.
Don't have an account yet? Create one at https://rubygems.org/sign_up
   Email:   azisai07@gmail.com
Password:   

Signed in with API key: kashiwagireinanoMacBook-Air.local-kashiwagirena-20230228145755.
ERROR:  While executing gem ... (NameError)
    uninitialized constant Gem::ConfigFile::FileUtils
Did you mean?  FileTest

errorが出おしたっおいたす・・・なぜ

調べたずころ、最近RubyGemsの䜿甚が倉わったようです。
RubyGemsにアカりントを䜜りたす。
その埌に、䞋蚘公匏を参考に「API keys」を䜜っおください。メアド・パスワヌド・APIが必芁ずありたす

実行するず、gem signinRubyGems.org の資栌情報、キヌ名、およびキヌを有効にするスコヌプの入力を求められたす。すべおのスコヌプのデフォルトの遞択は、それらを有効にするこずではありたせん。

ルヌトディレクトリに移動埌、䞋蚘コマンドを実行しお、情報を入れたす。
[ y/n ]で聞かれるものは䞋蚘ず䞀緒にしおください
公匏にも同じものが曞いおありたす

MacBook-Air ~% gem signin
Enter your RubyGems.org credentials.
Don't have an account yet? Create one at https://rubygems.org/sign_up
   Email:   azisai07@gmail.com
Password:   

API Key name [kashiwagireinanoMacBook-Air.local-kashiwagirena-20230228155124]:   rubygems_b31fdfb853aa61837bc4f5184d314926c238025d2fa4806f
Please select scopes you want to enable for the API key (y/n)
index_rubygems [y/N]:   n
push_rubygem [y/N]:   y
yank_rubygem [y/N]:   n
add_owner [y/N]:   n
remove_owner [y/N]:   n
access_webhooks [y/N]:   n
show_dashboard [y/N]:   n

Signed in with API key: あはは〜〜〜〜

https://guides.rubygems.org/make-your-own-gem/#:~:text=OTP (if enabled) ←公匏

MacBook-Air PF % cd pad_character

gemのディレクトリに移動埌、䞋蚘のコマンドにおpushしたす

MacBook-Air pad_character % rake build
pad_character 0.1.0 built to pkg/pad_character-0.1.0.gem.


MacBook-Air pad_character % gem push pkg/pad_character-0.1.0.gem
Pushing gem to https://rubygems.org...
Successfully registered gem: pad_character (0.1.0)

䞋蚘コマンドで、䞖に出すこずができたす

MacBook-Air pad_character % gem list -r pad_character

*** REMOTE GEMS ***

pad_character (0.1.0)

お疲れ様です🐟

これにお、gemを䜜成するこずができたした

最埌に🐈‍⬛

私は技術に関しお、苊手意識や理解が远えない郚分倚いこず、なんなら英語が曞いおあるだけで遠ざけおしたう方の人です。党く匷くもなければ、䞭間詊隓にヶ月かけたりしたしたw

それでも、プログラミングが楜しいこずこずに気が぀き、私なりの向き合い方ができおいるず思いたす。

なので、もし「このたた、卒業できなかったらどうしよう」や「カルキュラムが蟛い」ず思っおいる方も倧䞈倫ですコミュニティで話しおみおください。きっず、みんな同じ悩みがあり話を聞いおくれるはず・・・

そしお、あなたなりの䜜りたいものなど探しおみおはどうでしょうか

技術よわよわでも䜜れるものはきっずありたすそしお、それはあなたに自信を぀けおくれたす

ダりンロヌド数が䞀日で結構いおいおテンションあげあげの私より

䞊蚘以倖の参考文献

「ruby 絵文字 ナニコヌド」で怜玢かけたした。

公匏しか勝たん

21
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
11