HPでもWebサービスでもお問い合わせフォームは必須な機能だと思います。
今回はお問い合わせフォームからのお問い合わせ内容をGitHubのissueにする方法を紹介します。
事前準備
Gemをインストールする
Gemfile
gem 'octokit'
GitHubでアクセストークンを作成する
ここからアクセストークンを作成します。
Issues
の項目だけ、 Read and write
を許可します。
作成したアクセストークンは1度しか表示されないので、忘れずコピーしましょう
アクセストークンをcredentialsに追加する
rails credentials:edit -e development
を実行し、以下のようにアクセストークンを追加します。
github: access_token: github_~~~~
実装する
ルーティングを設定する
config/routes.rb
resources :inquiries, only: [:new, :create, :index]
Formを実装する
今回はDBに保存しないため、Formオブジェクトを使用します。
app/forms/create_inquiry_form.rb
class CreateInquiryForm include ActiveModel::Model include ActiveModel::Attributes attribute :email, :string attribute :name, :string attribute :title, :string attribute :body, :string def save return false if invalid? ActiveRecord::Base.transaction do client = Octokit::Client.new(access_token: Rails.application.credentials.dig(:github, :access_token)) client.create_issue( "kanahebi/inquiry", # issueを作成するリポジトリを指定します。 title, issue_body, labels: [ "未対応", "お問い合わせ" ], assignees: [ "kanahebi" # 担当者をアサインしたい場合はここにGitHubのアカウント名を指定します。 ] ) end rescue ActiveRecord::RecordInvalid false end private def issue_body <<-"BODY" ## お名前 #{name} ## メールアドレス #{email} ## お問い合わせ内容 #{body} BODY end end
コントローラーを実装する
app/controllers/inquiries_controller.rb
class InquiriesController < ApplicationController def new @inquiry = CreateInquiryForm.new end def create @inquiry = CreateInquiryForm.new(inquiry_params) if @inquiry.save redirect_to inquiries_url else render 'new', status: :unprocessable_entity end end def index; end private def inquiry_params params.fetch(:inquiry, {}).permit(:email, :name, :title, :body) end end
viewsを実装する
app/views/inquiries/new.html.erb
<%= form_with model: @inquiry, scope: :inquiry, url: inquiries_path, local: true do |f| %> <div> <label> お名前 </label> <%= f.text_field :name, required: true %> </div> <div> <label> メールアドレス </label> <%= f.email_field :email, required: true %> </div> <div> <label> タイトル </label> <%= f.text_field :title, required: true %> </div> <div> <label> 詳しい内容 </label> <%= f.text_area :body, required: true %> </div> <div> <%= f.submit "送信する" %> </div> <% end %>
app/views/inquiries/index.html.erb
<div>お問い合わせありがとうございました</div>
動作確認
このような内容でお問い合わせしてみると
GitHub上に以下のようなissueが作成されました!
終わり
カテゴリを追加して、カテゴリごとに担当者を変更するようにするのも便利だと思います!
issue内でお問い合わせ内容についてのディスカッションをしたり、対応状況について記録をするのがおすすめです!