とあるローテク企業・・・
A課長
「最近は暑い日が続くし、ぱぁっと課のみんなで暑気払いの会でもしたいね。やる夫君、セッティングを頼むよ。」
やる夫
「はい、喜んで!」
・・・
やる夫
「参加者もとりまとめて、お店も予約したお」
「あとは皆に案内をしないといけないお。一応、課の行事だしワードで案内状を作るお!」
「ポチポチ(会社PCで食べログにアクセス)」
---(アクセス禁止:グルメサイト)管理者にレポートを送信しました。---
やる夫
「(ク○仕様だお)」
「しょうがないから、自前のスマホで食べログ゙掲載情報をワードにコピペして案内状を作るお。ワードに、お店の名前をコピペ、お店の住所をコピペ、電話番号をコピペ……と。後は地図も添付しないといけないお。グーグルマップからスクリーンショットして、ペイントに貼り付け保存して、おっと地図pngのサイズが700KBだお。200MBしか個人メールボックス容量が与えられていないク○仕様だから、このまま送信すると皆に迷惑がかかるお。画像はPDFに変換してサイズを落としてと……。」
・・・
「(ワード案内状完成)ポチッ、送信」
・・・
参加者
「やる夫から届いた案内状を印刷したけど、地図の縮尺が大きいし白黒印刷だから参考にならないな(ポイッ)。しょうがないから自分のスマホで食べログ検索して地図を見るか。(ポチポチ)」
作ったもの
後付け理由ですが、そんな飲み会情報の案内・共有の苦労を少しでも解消したくて、飲み会案内状の作成・共有ページを作成しました。
→飲み会案内状等作成・共有ページ
仕組みは、
STEP1:開催する店名を検索 → (店名、住所、電話番号、ホームページ、地図を抽出入力。)
STEP2:会の名称、開催日時等の情報を入力送信 → (案内状を作成。)
STEP3:作成した案内ページのURLを参加者と共有すれば、誰でも必要な情報を確認できる。
というものです。コードはとりあえずは動くものですが、冗長・不正確な部分があるかもしれません、ご容赦ください。
STEP1:開催する店名を検索

<%= text_field_tag :name %>
STEP2:会の名称、開催日時等の情報を入力送信

def annaiw
@model = Model.find_by(id: params[:id])
@radio = true
if params[:placeid] != @model.placeid
redirect_to("/annai")
end
end
・controller側では、URL送信されたplaceidと、データベースに保存されたplaceidが一致しない場合は、検索ページへリダイレクトするように設定しています。
◎加えて案内ページは検索避けの設定をしています。
<meta name="robots" content="noindex,nofollow,noarchive" />
・朝日新聞の電子版が不都合な記事に設定していたことで話題(問題)になり、こういう手法があるんだ!と知りました。コードをヘッダーに埋め込めば、Googleではインデックス(検索)されなくなります。
STEP3:作成した案内ページのURLを参加者と共有すれば、誰でも必要な情報を確認できる。

◎案内の情報をrtf形式でダウンロードする機能を付けました。
◆view側
<%= link_to(
'この会の情報をrtfファイルでDL',msword_path(
id:params[:id],comment:[params:@model.comment]
),
method: :post
) %>
・リンクをクリックした際に、idをコントローラー側に定義したmswordメソッド(rtfダウンロードを定義したメソッド)に渡します。
・commentはデータベースに登録されていない情報を、リンクをクリックした際に一緒に飛ばすため記述しています(mswordメソッドはidからデータベースの登録情報を読み出しますが、commentはデータベースに登録されていない情報のためリンクをクリックした際に一緒にmswordメソッドに飛ばす必要がありました。)
(参考)link_toでPOSTする際にパラメータを渡す方法
◆controller側
def msword
@model = Model.find_by(id: params[:id])
@comment = params[:comment][0]["params"]
f = File.open("./public/template/template.rtf","r")
fr = f.read
frr = fr.sub("@model.kainame",@model.kainame) #<後略>
f.close
f = File.open("./public/template/#{@with.id}.rtf", "w")
f.write(frr)
f.close
filepath = Rails.root.join('public', 'template', "#{@model.id}.rtf")
stat = File::stat(filepath)
send_file(filepath, :filename => "#{@model.id}.rtf", :length => stat.size)
end
・まず、public/templateフォルダ内に事前に用意したtemplate.rtfを読み込みます。次にtemplate.rtfの内容をデータベースに登録された情報へとsubメソッドで書き換え、内容を変数frrに代入します。そしてpublic/templateフォルダ内に新たにid.rtfファイルを作成し、frrの内容を書き込み保存します。
・最後にsend_fileメソッドが指定されたパスに存在するファイルを読み込み、その内容をクライアントに送信します。
(encodingがutf-8のため、閲覧ソフトによっては文字化けすることがあります。エンコーディング難しい…。)
◎URLで共有することを前提としているため、以下を参考にURLコピーポタンを設置しました。
→クリック一つでクリップボードにコピーする機能(HTMLとJavaScriptのみで実現)
◎SNSボタンも以下を参考に簡単設置しました。
→SNS(Twitter/Facebook/LINE)シェアボタンを超簡単に設置する方法
最後に
以上、素人が拙いコードで失礼しました。最初は観光地紹介サイトを作っていたのですが、Railsを触っているうち、こんなこともできるんじゃない?と思って作りました。独学で学習していると、こんなコードで大丈夫だろうか?とか、こんな方法でエンジニアの現場で通用するだろうか?など、不安は尽きないですがRailsを触っているのは楽しいのでアウトプットを続けていきたいです。使ってもらえるとモチベーションになりますし、少しでも参考になれば嬉しいです!