5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

RubyとElixirの兄弟船:闘魂で切り拓く技術の旅 〜素のRubyプロジェクトでrails cのようなことをしたい〜

Last updated at Posted at 2024-11-06
defmodule FightingSpirit do
  def shout do
    IO.puts "元氣ですかーーーッ!!!"
    IO.puts "元氣があればなんでもできる!"
    IO.puts "闘魂とは己に打ち克つこと。"
    IO.puts "そして闘いを通じて己の魂を磨いていく"
    IO.puts "ことだと思います。"
  end
end

FightingSpirit.shout()

$\huge{元氣ですかーーーッ!!!}$
$\huge{元氣があればなんでもできる!}$

$\huge{闘魂とは己に打ち克つこと。}$
$\huge{そして闘いを通じて己の魂を磨いていく}$
$\huge{ことだと思います。}$


はじめに

今日は兄貴の話を書きたいと思います。
兄貴というのは、Elixirの兄貴筋にあたるRuby兄さんの話を書きます。

RailsじゃないRubyのプロジェクトでrails c的なことをしたい

RailsじゃないRubyのプロジェクトでrails c的なことをして、一部のクラスの機能をIRB上で動かしたいといことがついさっきありました。

Gemの依存関係を解決しつつ、自作のクラスを動かしたいわけです。単にディレクトリでirbとやってもうまくいきません。

Rubyのプロジェクトはこんなディレクトリで構成しています。

.
├── Gemfile
├── Gemfile.lock
├── lib
│   ├── awesome
│   │   ├── gmail.rb
│   │   └── slack.rb
│   └── main.rb
└── README.md

動かしたいのは、lib/awesome/slack.rbにあるAwesome::Slackクラスにあるクラスメソッドpostです。

lib/awesome/slack.rb
require 'net/http'
require 'uri'
require 'json'

URL = ENV['GMAIL_TO_SLACK_WEB_HOOK_URL']
CHANNEL = ENV['GMAIL_TO_SLACK_CHANNEL']

module Awesome
  class Slack
    class << self
      def post(text)
        uri = URI.parse(URL)
        https = Net::HTTP.new(uri.host, uri.port)

        https.use_ssl = true
        req = Net::HTTP::Post.new(uri.request_uri)

        req['Content-Type'] = 'application/json'
        payload = {
          text: text,
          channel: CHANNEL,
          username: 'awesome_bot',
          icon_emoji: ':telephone:',
          link_names: 1
        }.to_json
        req.body = payload
        res = https.request(req)

      end
    end
  end
end

以前も同じことをしたことがありましたが、ど忘れしました。

ChatGPT Plusに聞いたらけっこうごついやり方の提案をしてきました。それはそれでありな気がしましたが、前にやったときはそんな大掛かりなことをやったはずはないなあ、と。それでチャットしていたら思い出した次第です。

ちなみに私が所属しているハウインターナショナルでは、ChatGPT Plusの利用料を会社が支払ってくれます。

bundle exec irb -I. -Ilib

として、IRBを立ち上げまして

irb> require 'lib/awesome/slack'

irb> text = 'We are the Alchemists, my friends!!!'

irb> Awesome::Slack.post(text)
=> #<Net::HTTPOK 200 OK readbody=true>

無事実行できました :tada::tada::tada:


どうしてQiitaに書いたの?

こうしてQiitaに書くことで私の脳が覚えるわけです。重要な情報だと分類されるわけです。
逆にこれまで記事にしていないから覚えられないわけです。

自分の記事として公開しておけばQiitaで検索しやすいですし、同じことで困っている他の人の助けにもなります。Qiitaは外部記憶装置です。

さらには昨今ではQiitaに投稿(闘魂)した記事は、それを学習したAIモデルの改善にもきっと繋がります。それは、世界文化の向上発展に寄与し、人類全体の能力向上につながること間違いなしです。行き着く先は、アントニオ猪木さんが夢見た「本当の世界平和の実現」です。


なぜRubyがElixirの兄貴筋にあたるのですか?

Elixirの作者José Valimさんはかつてこう述べました。

The main, the top three influences are Erlang, Ruby, and Clojure.

(Elixirが)主に影響を受けたトップ3は、ErlangとRubyそしてClojureです。

José Valim - Cognicast Episode 120

José Valimさんは、Rubyを使っている人なら一度は使ったことがあるでしょうdeviseの第一コミッターです。

José ValimさんはElixirを作る前は、Ruby界で活躍されていました。
ElixirRubyの影響を受けているとのさきほど引用したご自身の発言もあります。

ここからは私の持論です。ElixirRubyから一番色濃く影響を受けているのは、A PROGRAMMER'S BEST FRIENDなところだと思います。
コミュニティはあたたかで、海外との距離も近いです。
それで、私はRubyを兄貴と呼んでいます。
語感がいいのでそう私が呼んだにすぎません。
兄弟船です。鳥羽一郎さんと山川豊さんです。

父がErlangで母がRubyという説もあります。

さいごに

私たちエンジニアの旅路は、日々の挑戦と学びの連続です。RubyとElixirのように、技術は互いに影響を与え合いながら進化し、私たちの創造力を広げてくれます。この記事で共有したRubyプロジェクトでのIRBの活用法も、その小さな一歩に過ぎません。

なにか困難にぶつかり、解決策を見つけ、そしてそれを世界と共有する。このサイクルが、私たちの知識を深め、コミュニティを豊かにします。Qiitaに記事を投稿(闘魂)することは、自分自身の理解を深めるだけでなく、誰かの「できた!」を助ける光ともなるのです。

これからも、闘魂を胸に新たな技術と向き合い続けましょう。一歩ずつ進むその先には、今は想像もつかないような成長と発見が待っています。そして、その積み重ねが、私たちエンジニアとしての真の力となり、やがて世界を少しでも良い方向へと導くことを信じています。

一緒に学び、一緒に成長し、一緒に「本当の世界平和の実現」に向けて歩んでいきましょう!

$\huge{迷わず行けよ、行けばわかるさ!}$
$\huge{ありがとうーーーッ!!!}$

5
3
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
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?