LoginSignup
9
5

Rails Tutorial を忍者系 SNS に拡張した

Last updated at Posted at 2023-05-30

経緯

会社の研修で Rails Tutorial をやっているのですが、余った時間でサンプルアプリこと Microblog service を拡張して遊んで勉強していました

個人的にダミーデータを生成できる Faker がツボだったので、これを拡張し、さらに Chat GPT の恩恵を受けることによって、サンプルアプリを忍者系 SNS に拡張しました

完成したもの

早速ですが完成したアプリはこちらです
image.png

特徴としては

  1. Faker による NARUTO のキャラクターの名前・セリフの搭載
  2. Open AI API による投稿の自動変換機能(NARUTOっぽいセリフに変換してくれます)
  3. アイコンを忍者にする(いらすとや)

の3点です

1の過程で Faker を拡張したので、拡張後の gem を以下に置いておきます

変更点としてはNARUTOっぽいセリフを生成できるように quote method を naruto.rb に追加したところです

元となるセリフは Chat GPT に以下のプロンプトで NARUTO っぽいセリフを考えてもらうことで数を増やしました

Untitled (1).png

UI としてペパボの ai-assistant を活用させてもらっています

投稿の自動変換の部分については ruby-openai gem を使って以下のように実装しています

micropost_controller.rb
def create
  prompt = "あなたはNARUTOが大好きなオタクです。以下の文章をNARUTOのセリフ風に変換してください。文章:#{micropost_params["content"]}"
  client = OpenAI::Client.new(access_token: ENV['OPENAI_API_KEY'])
  response = client.chat(
    parameters: {
      model: "gpt-3.5-turbo",
      messages: [{ role: "user", content: prompt}],
      temperature: 0.7,
    }
  )
  revised_content = response.dig("choices", 0, "message", "content")
  revised_content = revised_content.delete('「」”')
  @micropost = current_user.microposts.build(content: revised_content[0..139])
  @micropost.image.attach(params[:micropost][:image])

これによって一見当たり障りのない投稿が NARUTO っぽいセリフに変換されて投稿されます

忍者変換.gif

アイコンの変更部分については users_helper.rb の gravatar method を以下で置き換えることで実現しました

users_helper.rb
def ninja_icon(user, size: 80)
  icon_no = (user.id % 8) + 1
  image_tag(image_path("ninja/ninja#{icon_no}.png"), alt: user.name, size: "#{size}x#{size}", class: "gravatar")
end

いらすとやの忍者のイラストが8体あったので、ユーザーIDに合わせてバリエーションをつけるようにしています

あとがき

二週間の Ruby Tutorial 研修の集大成がこれってどうなの?という気もしますが、かなり楽しめたので OK かなと思っています

(matzさんも ruby はプログラミングを楽しむための言語だと言っている……ボソッ)

またNARUTOっぽいセリフへの変換の部分はプロンプトを改良すればもっとクオリティが上がりそうです

それではよき Ruby Life を!!

2023/06/07追記

なんとRails チュートリアル本家の @yasulab さんに取り上げていただきました
チュートリアル本体にも組み込んでいただいて嬉しいです!

9
5
2

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