Ruby
 Computer >> コンピューター >  >> プログラミング >> Ruby

Devise徹底解説 第2回:DeviseInvitableでユーザー招待機能を実装しよう

はじめに

前回のチュートリアルでは、DeviseをRailsアプリケーションにインストールし、初期設定を行う方法を学びました。今回はその続編として、DeviseInvitableをアプリケーションに統合する手順を詳しく解説していきます。

DeviseInvitableはDeviseと連携して動作する拡張gemです。これを導入すると、ユーザーがメール経由で友人や同僚をアプリケーションに招待できるようになります。特にコラボレーション型のアプリを開発している場合には、非常に有用な機能と言えるでしょう。

DeviseInvitableのセットアップ

まずはGemfileを開き、以下のgemを追加します。

次のコマンドで依存関係をインストールします。

続いて、ジェネレーターコマンドを実行し、DeviseInvitableの設定オプションをDeviseの設定ファイルに追加しましょう。

テキストエディタでconfig/initializers/devise.rbを確認すると、新しく追加された設定内容をチェックできます。

次に、UserモデルへDeviseInvitableを追加します。

このコマンドにより、モデルに:invitableフラグが追加され、Userモデルは以下のようになります。

同時に、以下のようなマイグレーションファイルも自動生成されます。

rake db:migrateを実行して、データベースに変更を反映させましょう。これで招待トークンや招待者情報など、招待機能に必要なカラムがusersテーブルに追加されます。

DeviseInvitable用のコントローラー設定

DeviseInvitableで招待メールを送信する際には、いくつかのパラメーターを受け渡す必要があります。そのため、使用するパラメーターを事前に許可(ホワイトリスト化)しておく必要があります。app/controllers/application_controller.rbをテキストエディタで開き、以下のように編集してください。

上記のコードでは、DeviseInvitable向けに:emailが許可されているのが分かりますね。

それでは、コンソールから実際の動作を確認してみましょう。ターミナルでrails consoleを実行し、以下のように入力します。

環境によって差異はありますが、以下のような出力が得られるはずです。

想定どおり、問題なく動作しましたね。招待メールには、受信者が招待を承諾するためのリンクが含まれています。

とはいえ、実際のユーザーにコマンドラインから招待を送らせるわけにはいきません。そこで、DeviseInvitableをフロントエンド側でも使えるように設定することが重要です。手順はとてもシンプルで、ジェネレーターコマンドを実行してビューを生成するだけです。

さらに、招待送信用ページ(app/views/users/invitations/new.html.erb)へのリンクを、アプリケーション内のどこかに設置する必要があります。

本アプリケーションでは、ナビゲーションファイルにリンクを追加することにしましょう。筆者の実装例は以下のとおりです。

DeviseInvitableによって利用可能になったルートを確認したい場合は、rake routes | grep invitコマンドを実行してください。出力は以下のようになります。

それでは、現時点での動作を確認してみましょう。rails serverコマンドでサーバーを起動します。

ブラウザでhttps://localhost:3000/users/invitation/newにアクセスし、表示されたフォームにメールアドレスを入力してボタンをクリックしてください。これで正常に動作するはずです。サーバーのログを見ると、招待を送信した際の出力が記録されており、その中に招待承諾用のリンクが含まれていることを確認できます。

ただ、送信したメールをブラウザ上で直接プレビューできたほうが便利ですよね。次はその方法を見ていきましょう。

Letter_Openerの導入

Letter Openerを使うと、開発環境で送信したメールをデフォルトブラウザでプレビューできます。これにより、開発中にメール配信システムを構築する必要がなくなります。

Gemfileを開き、以下のgemを追加してください。

bundle installを実行します。

次に、テキストエディタでconfig/environments/development.rbを開き、以下の行を追加します。

Railsサーバーを再起動し、再びhttps://localhost:3000/users/invitation/newにアクセスしてフォームを送信してみてください。今度は新しいページがポップアップ表示され、送信された招待メールの内容をその場で確認できるはずです。

サインイン・サインアウトのデフォルトルートを変更する

Deviseを使用した場合、デフォルトではsign_insign_outのルートは以下のようになっています。

  • sign_in: https://localhost:3000/users/sign_in
  • sign_out: https://localhost:3000/users/sign_out

これを変更したい場合は、config/routes.rbに以下を追記します。

これで、https://localhost:3000/signinとしてアクセスできるようになりました。

まとめ

今回は、DeviseInvitableを使ったユーザー招待機能の実装方法を学びました。あわせて、開発環境でメールを手軽にプレビューできるletter_openerというgemについても紹介しました。Deviseにはまだまだ便利な機能がたくさんありますので、興味のある方は公式Wikiもぜひ参照してみてください。最後までお読みいただき、ありがとうございました。

  1. Rubyの内部構造に迫る:オブジェクトのメモリレイアウトを徹底解説

    Rubyの内部構造をちょっと覗いてみませんか? それなら、この記事はきっとお役に立ちます。 なぜなら… この記事では、Rubyオブジェクトがメモリ上でどのように配置されているのか、そして内部データ構造を操作してクールなことを実現する方法を、一緒に探検していきます。 シートベルトを締めて、Rubyインタプリタの深淵への旅に出かけましょう! 配列(Array)のメモリレイアウト 配列を作成すると、Rubyはそのデータを保持するためにシステムメモリと、少しのメタデータを確保します。 メタデータには以下が含まれます: 配列のサイズ(要素数) 配列の容量(capacity) クラス情報 オブジェクトの

  2. Ruby MRIのソースコードを読んで内部構造を学ぶ方法

    Rubyを使い込んでいると、その裏側でどのように動作しているのか気になったことはありませんか? Rubyの内部に深く踏み込む方法の一つが、それを実現しているソースコードを読むことです。C言語がわからなくても、興味深い発見はたくさんあります。 ソースコードはRubyのGitHubリポジトリで公開されています。 理想を言えば、クラス名やメソッド名を簡単に検索できるCodequeryのようなツールを使うのがおすすめです。 コアクラスを探検する 調査のほとんどはルートフォルダで行うことになります。ここには、object.cにあるObjectや、array.cにあるArrayなど、すべてのコアクラスのソ