Boost」など、さまざまなカンファレンスを企画・運営しています。BOOKS(コードジン・ブックス)は、CodeZineの連載からカットアップした、開発現場の課題解決に役立つ書籍シリーズです。発言にユーザーIDを保存してユーザー名を表示する最後に、発言と併せてユーザーIDもデータベースに保存するようにします。そのためには、クライアント側とサーバー側(チャネル)でコネクションごとにユーザーを識別できるようにする必要があります。データベースに発言を保存する処理とブロードキャスト後にクライアント側で発言を表示する処理に、ユーザー名を追加する必要があります。Cableのコネクションを確立する段階でユーザーを識別できるようにするため、リスト10の通りにコネクションを修正します。endendidentified_byメソッドは、WebSocketのコネクションを識別するために提供されており、current_userを識別子として指定しています。接続するクライアント側のユーザーIDを取得するには、find_verified_userメソッド内のコードの通り、ブラウザのクッキーを用います。ログイン時点で、サーバー側からクッキーをクライアント側に発行した、暗号化されたuser_idをcookies.signed[:user_id]として取得して、ユーザーIDがデータベースに登録されている場合は、current_userにセットされ、これを識別子として用います。ユーザーIDがデータベースに登録されていない場合には、reject_unauthorized_connectionメソッドが呼び出されます。reject_unauthorized_connectionメソッドは、WebSocket通信を拒否するために提供されているメソッドです。セッションヘルパーの修正セッションヘルパーのlog_inメソッドで、暗号化されたユーザーIDをクッキーとして発行するコードをリスト11の通りに追加しましょう。end...(中略)...コードのpermanentは、発行したクッキーを永続化するためのものです。signedを指定することでクッキーに格納されるユーザーIDが暗号化されます。チャネルの修正チャネルのspeakメソッドでモデルを生成する箇所に、ユーザーIDをリスト12の通りに追加します。endendモデルの修正ChatMessage、Userモデルの関連とビュー側で使用するuser_nameメソッドを、リスト13、リスト14の通りに追加します。:chat_messagesendChatMessageモデルのuser_nameメソッドは、これまでのテストでchat_messagesテーブルのuser_idにNullのデータが入っているための措置で、user_idが空だった場合にはユーザー名を「名無しさん」と表示するようにしています。ジョブの修正ジョブでブロードキャストする処理に、ユーザー名をリスト15の通り追加します。endendユーザー名の取得には、ChatMessageモデルに定義したuser_nameメソッドを使っています。CoffeeScriptの修正ブロードキャストされた場合、クライアント側で発言を受け取ってhtmlとして表示する箇所を、リスト16の通りに修正します。'</div>'data['user_name']でブロードキャストされた発言のユーザー名を取得しています。最後にブロードキャストした場合と同様、リスト17の通り発言の表示にユーザー名を加えましょう。%></div>動作確認これで、発言にユーザーIDを保存してユーザー名を表示する修正が完了しました。「http://localhost:3000/chat_messages/index」にアクセスして動作確認をしてみましょう。user2としてログインして動作確認した結果です。Cableのサンプルアプリを拡張して、発言をデータベースに保存できるようにし、会員登録機能と関連付けを行いました。5のもう1つの目玉機能であるAPIモードで別のRailsアプリケーションを立ち上げ、今回開発したチャットアプリに機能を追加します。NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Technologies。執筆コミュニティ「WINGSプロジェクト」代表。NEW1DMM.comの施策から見る、事業をむしばむ「技術負債」への処方箋──リファクタリングの「言語化」でインシデントを予防2企業の7割超が「2025年の崖」を理解していないことが明らかに。NEW1DMM.comの施策から見る、事業をむしばむ「技術負債」への処方箋──リファクタリングの「言語化」でインシデントを予防2企業の7割超が「2025年の崖」を理解していないことが明らかに。NEW1DMM.comの施策から見る、事業をむしばむ「技術負債」への処方箋──リファクタリングの「言語化」でインシデントを予防2企業の7割超が「2025年の崖」を理解していないことが明らかに。12:00法務担当者、6割超が今後業務で「生成AIを使用したい」と回答。NEW新着記事一覧を見るイベント今後の予定を見るCodeZineは、株式会社翔泳社が運営するソフトウェア開発者向けのWebメディアです。「デベロッパーの成長と課題解決に貢献するメディア」をコンセプトに、現場で役立つ最新情報を日々お届けします。イラストの無断転載を禁じます。記載されているロゴ、システム名、製品名は各社及び商標権者の登録商標あるいは商標です。