こんにちは。ベトナム人エンジニアのホアンクアンです。
もう5年ぐらい日本で働いているんですが、私にとって、最も面倒なのは… 日報です。もちろん、管理に関する多くの知識と経験がある今、日報の重要性を理解しています。しかし、外国語、特に漢字で日報を書くのに1〜2時間かかることがよくありました。こんなに時間をかけても、結局クレームを付けられてしまった。ですから、SCANDALの「本を読む」曲の歌詞を引用して、私の困ったことを綴ります:
漢字も苦手 見たこともない単語が
ぐるぐるぐる 目が回りそうだ
ですから、日報を書く作業をより簡単にするために、プロジェクトのタスク、進捗状況、明日の予定作業などを取得するだけで、自動的に日報を生成できるようにしたいと考えています。私は Ruby が大好きで、最新の生成AI技術を適用したいと思い、新しいプロジェクトを始めました。
Google Gemini(旧:Google Bard)は、2023年12月に発表されました。Googleが「最も強力で汎用的なAIモデル」と呼ぶGeminiは、OpenAIのGPT-4など、他の大規模言語モデルを凌駕する多くの能力を備えています。Googleの様々なサービスと連携しているため、ユーザーはより深い知識や情報を簡単に得ることができます。
以前は、OpenAIアカウントを登録するのが難しく、多くの制約があったため、簡単な登録条件のGoogle Bardを使用していました。 GmailアカウントまたはGoogleアカウントがあればすぐに使用できます。 そのため、BardがGeminiになった今でも、これは私のお気に入りの生成AIツールです。
Google Gemini API キーを取得する方法:


このようなツールをPython、Javascript、TypeScript、またはシェルスクリプトで書くと、多くのサポートがあり、作業が簡単すぎるという結果になります。私はRubyプログラミング言語が好きで、「RubyはRailsだけではない」ことを証明したいとも思っています。そのため、今回はRubyを言語として選びました。
gemini-aiというgemを使用gemini-aiとは、Vertex AI、Generative Language API、AI Studio、その他のGoogleの生成AIサービスを介してGeminiと対話するためのRuby gemです。
これはgemのGithubです: https://github.com/gbaptista/gemini-ai
gemのドキュメントから、Googleのサービスを呼び出すための様々な方法があります。上記のようにGoogle Gemini APIを取得したから、次のようにコードを書きます:
client = Gemini.new(
credentials: {
service: 'generative-language-api',
api_key: ENV['GOOGLE_GEMINI_TOKEN']
},
options: { model: 'gemini-pro', server_sent_events: true }
)
まずはフォルダを作成する必要があります。その中に Gemfile, Gemfile.lock, .gitignore ファイルを入れます。こちらが私のフォルダ構造の画像です。

このプロジェクトでは、.gitignore に GitHub の標準的なテンプレートを使用しています: https://github.com/github/gitignore/blob/main/Ruby.gitignore。そして、このルールを追加します。
/result/*
!/result/.keep
/input/*
!/input/.keep
Gemfile:
# frozen_string_literal: true
source 'https://rubygems.org'
gem 'gemini-ai', '~> 4.2.0'
gem 'dotenv'
空のGemfile.lockを作って、bundle installを実行するのは、環境設定は完了です。
lib/main.rbに、必要なgemを呼びます。
# frozen_string_literal: true
require 'dotenv/load'
require 'gemini-ai'
Geminiのinputを1つ作成します。この入力テキストは、メールテンプレートの部分と、ファイルを読み込む部分の2つの部分で構成されます。
メールテンプレートの部分はこのようなです。
text_request = <<-TEXT
この日報フォーマットに情報を追加てください。
"A様
お疲れ様です。ホアンクアンです。
本日の業務内容を報告していたします。
業務内容:
1. プロジェクト1
- タスク1:
進捗状況: %
課題
明日の予定
1. プロジェクト1
プロジェクト1の予定
以上、本日の報告とさせていただきます。"
TEXT
テンプレートがなかったら、
text_request = '日報メールを書いてください。'
ファイルを読み込む部分:
Dir.glob('./input/*.txt').each do |file_name|
text_request += File.read(file_name)
end
Geminiにinputを入れます。
temperatureを設定する。result = client.stream_generate_content({
contents: { role: 'user', parts: { text: text_request } },
generationConfig: { temperature: 0 }
})
temperatureを設定しない。result = client.stream_generate_content({
contents: { role: 'user', parts: { text: text_request } }
})
出力結果はデータの形式です。各テキスト部分を抽出したいので、以下を追加する必要があります。
mail_template = result
.map { |response| response.dig('candidates', 0, 'content', 'parts') }
.map { |parts| parts.map { |part| part['text'] }.join }
.join
puts mail_template
便利になるために、run.shを書く:
echo "Job starts"
sleep .5
echo "Processing..."
ruby lib/main.rb > result/out.md
echo "Done"
READMEを書くのも面倒なので、AIを使って簡単に生成します。

ソースコード: https://github.com/BlazingRockStorm/genai-daily-report-generator
例ファイルを3つを作成する:
プロジェクト1:
タスク1:
進捗状況: 40%
タスク2:
進捗状況: 30%。
課題/問題ない
タスク2の優先度が高いので、明日このタスク続きます
プロジェクト2:
タスク1:
進捗状況: 100%
課題/問題ない
プロジェクト完了
プロジェクト3:
進捗状況:0%
課題/問題:まだ設計中
明日設計続く
実行の結果:

結果を見ると、日報として使えると思います。
.docに変更する。このツールのおかげで、プロジェクトをファイルにまとめるのに5分、レポートを作成するのに1分、レビューするのに5分しかかかりませんでした。レポートを書く時間を費やす代わりに、コーディングやインフラなどの知識を学ぶことに集中する時間ができました。
最近、私は sentiment-ai というgemを開発しました。これはテキストの感情分析を簡単に行うためのツールです。Rubyが新しい技術、例えば生成AI(GenAI)ともうまく連携できることを示すために、このgemを作成しました。ぜひご覧ください。
最後までお読みいただき、ありがとうございます。
ホアン・クアン (@BlazingRockStorm)。ベトナムのハノイから出身。5年ぐらい日本に住んでいる。エンジニア、ドラマー・パーカッショニスト、折り紙のインスタグラマー。