Madogiwa Blog

主に技術系の学習メモに使っていきます。

感想:ストレングス・ファインダーで自分の才能に目覚めてみた

最近、転職活動を始めて、色々と自分のキャリアを考える機会が多いのですが、そもそも、、、

自分に向いていることはなんなのか
自分に出来るのことはなんなのか

適切に自己評価が出来なくなっている気がしたので、下記書籍を購入してみました。

この書籍にはストレングス・ファインダーというWebテストの意義と結果を解説したものになります。
ストレングスファインダーは下記の通り、自分の才能を知れるWebテストで、企業にも導入されている実績のあるもののようです。

ストレングスファインダー®とは、米国ギャラップ社の開発したオンライン「才能診断」ツールです。Webサイト上で177個の質問に答えることで、自分の才能(=強みの元)が導き出されます。
出典:ストレングスファインダー®とは | ストレングスファインダーで強みを活かす 株式会社ハート・ラボ・ジャパン

書籍にはWebテストのアクセスコードが付いているため、本を買えばWebテストの受けて、自分の才能Top5を検査することが出来ます。 ちなみにストレングス・ファインダーの公式ページでもアクセスコードコードを購入することが出来ますが、$19.99なので書籍を購入した方がお得だと思いました。。。

私の才能

受験してみたので、私の結果を書いてみましたφ(..)

1.未来志向

未来志向という資質を持つ人は、未来がどのようなものかについて考え、そこからアイデアを得ます。未来についてのビジョンを語ることで、人々を高揚させます。

確かに新しいモノ・価値について、考えたり話したりするのは好きだな、と感じました!そういうことを日々行いたいものですね(._.)

2.戦略性

戦略性という資質を持つ人は、目的に向かうための選択肢を想定することができます。いかなる想定に直面しようとも、適切なパターンと問題点を直ちに予測することができます。

目標を達成するために、どのような手段が合って、どれを選ぶべきか考えるのは確かに結構好きな気がします・・・! また、今の仕事で保守や不具合対応を行うことが多かったので、事象に関して原因や対応策を考えるといったことが鍛えられたのかも知れないですね。

3.着想

着想という資質を持つ人は、新しいアイデアを考えるのが大好きです。全く異なる現象に見えるものの間に、関連性を見出すことができます。

新しいアイデアを考えるのは、とでも好きですね!アイデア思考とか、いつかきちんと学んでみたいです。ちなみに過去に下記のようなWebサービスを作ったりもしました・・・!

キーワードミキサー

github.com

4.個別化

個別化という資質を持つ人は、一人一人が持つユニークな個性に興味をひかれます。異なるタイプの人たちの集団をまとめ、生産性の高いチームを作ることに長けています。

あまり人の好き嫌いは無くて、個人個人で価値観が違うのが当たり前で、魅力的だと感じることが多い気がします。

5.親密性

親密性という資質を持つ人は、他人との緊密な関係を楽しみます。目標達成のために友人と努力することから、大きな満足感を得ます。

広く浅くよりも、狭く深くの人間関係の方が、価値を感じる方だと思いますね!(..)

おわりに

自分の才能に目覚められたかどうかは正直わかりませんが、結果を元に自分のキャリアや自己評価を見直すのにはいいきっかけになったと思います。
これからのキャリアの中で今回私の才能として挙げられたものを大事にしていきたいと感じました。

  1. 未来志向
  2. 戦略性
  3. 着想
  4. 個別化
  5. 親密性

以上です。

Ruby on Rails:自作アプリをTwitterカードに対応させる

Railsで作ったアプリケーションをTwitterカード対応させる手順をメモしておきますφ(..)

Twitterカードとは下記のようなものです:D

twitter.com

単純にURLリンクを貼る貼るよりも、より多くの情報を伝えることが出来ますね!

手順

前提

今回は、詳細ページでは各ページに対応したTwitterカードを、その他ではサービスを紹介するTwitterカードを表示させるような対応を想定していますφ(..)

詳細ページ moook.herokuapp.com

サービス紹介 moook.herokuapp.com

実装メモ

概要

Twitterカードに対応させるには、ページのhead内にmetaタグを埋め込む必要があります。各metaタグの意味については、下記のサイトが参考になりました!

saruwakakun.com

実装手順

metaタグを各ページに埋め込む

Twitterカードに対応するのは、各ページにTwitterカード用のmetaタグを埋め込む必要があるため、今回はapplication.html.erbに埋め込むことにしました。

<!DOCTYPE html>
<html>
  <head>
    <!-- 省略 -->
    <% twitter_card = get_twitter_card_info(@page ? @page : nil) %>
    <meta name="twitter:card" content=<%=twitter_card[:card]%> />
    <meta name="twitter:site" content=<%=twitter_card[:site]%> /> 
    <meta property="og:url" content=<%=twitter_card[:url]%> />
    <meta property="og:title" content=<%=twitter_card[:title]%> />
    <meta property="og:description" content=<%=twitter_card[:description]%> />
    <meta property="og:image" content=<%=twitter_card[:image]%> />
    <meta name="viewport" content="width=device-width, initial-scale=1">
  </head>
  <body>
  <!-- 省略 -->

metaタグに設定する情報を取得するメソッド

metaタグに埋め込む値はapplication.html.erbに直接記述しても良いのですが、今回はページ詳細とその他でmetaタグに設定する値を変更するので、application_helper.rbで設定値を取得するようにしてみました。

ページ詳細画面(pageに値が設定されていれば)であれば、pageに値が設定され、それ以外ではnilとなるようにapplication.html.erbので実装しているため、Twitterカードの出し分けが出来るようになっていますφ(..)

  def get_twitter_card_info(page)
    twitter_card = {}
    if page
      twitter_card[:url] = page.url
      twitter_card[:title] = 'Moookからオススメページのお知らせ'
      twitter_card[:description] = "タイトル:#{page.name}、タグ:#{page.tag_list.join(',')}"
      twitter_card[:image] = set_page_img(page.image_src)
    else
      twitter_card[:url] = 'https://moook.herokuapp.com/pages'
      twitter_card[:title] = 'Webページ更新管理ツール「Moook」'
      twitter_card[:description] = 'いつもの更新いつもの更新確認、Moookを使えばお気に入りのページの更新を見逃しません。'
      twitter_card[:image] = 'https://raw.githubusercontent.com/Madogiwa0124/Moook/master/app/assets/images/favicon.png'
    end
    twitter_card[:card] = 'summary'
    twitter_card[:site] = '@Madogiwa_Boy'
    twitter_card
  end 

以上ですφ(..)

Ruby on Rails:Rails5でtwitter-bootstrap-railsで導入したBootstrapをちゃんと使えるようにする

自分の作っているサービスで、ずっとbootstrapが上手く反映されてくれずハマっていたけど、解消できたのでメモφ(..)

github.com

前提

事象

発生していた事象は下記の通りです。

  • ナビバーのドロップダウンリストが開かない
  • スマホでアクセスしてもナビバーがハンバーガーメニューにならない

環境

私のサービスの環境情報を下記に記載しておきます。

gem version
rails 5.1.2
twitter-bootstrap-rails 4.0.0

手順

jQueryを導入する

Bootstrap3はjQueryに依存していますが、Rails5からjQueryが依存から除外されたので、明示的にGemfileに記述する必要があります。
下記をGemfileに追記し、bundle installを実行します。

gem 'jquery-rails'

application.jsの修正

jQueryの導入が出来たらapplication.jsに追記し、Asset管理対象に追加します。
twitter/bootstrapが記載されていない場合は、合わせて追記します。

//= require jquery
//= require twitter/bootstrap

この時点で、ナビバーのドロップダウンリストが開かないは解消するはずです!

viewportの設定

application.html.erbに下記を追記します。

<meta name="viewport" content="width=device-width, initial-scale=1">

これで、スマホでアクセスしてもナビバーがハンバーガーメニューにならないが解消されるはずです!

※viewportについては下記が参考になると思います。

qiita.com

おわりに

Rails5では、jQueryの依存がなくなってフロントエンド界隈が盛り上がっていますが、Rails4以前でBootstrapを使っているサービスは数多くあると思うので、Railsのバージョンアップの際に参考になればと思いますφ(..)
大きなバージョンアップの際には依存するライブラリへの影響も気をつける必要がありますね・・・!

参考

www.bountysource.com

Ruby on Rails:複数のForm項目の値を配列形式でコントローラーに渡す

Viewの項目の値を配列形式でparamsに設定し、Controllerで使用する方法をメモしておきますφ(..)

手順

前提

今回は、下記のように複数のレコードに設定したCheckBoxの値を配列形式で設定し、Controller側で処理するケースを想定してます。
さらに具体的にいうと、スケジュールが設定されたレコードが複数あって、それに対してそれぞれCheckBoxで承認していく仕様を実装していきます。

f:id:madogiwa0124:20171231212613p:plain

手順

まず、複数のフォーム項目を配列形式でparamsに設定するには下記の形式でView側に記載します。ポイントは、要素名を要素名[]のように設定することです。

<%= tag_name 'hoge[]' %>

今回はForm内にある複数のCheckBoxの値を配列で渡すので、Viewの実装は下記のようになります。

<%= form_tag approve_interviews_path, { method: :put } do %>
<table border='1'style="border-collapse:collapse">
  <thead>
    <tr>
      <% if params[:action] = 'select' %>
        <th>Approve</th>
      <% end %>
      <th>Title</th>
      <th>Schedule</th>
      <th>User</th>
    </tr>
  </thead>
  <tbody>
    <% @interviews.each do |interview| %>
      <tr>
        <% # 配列 approved にinterview.idを追加 %>
        <td><%= check_box_tag('approved[]', interview.id)%></td>
        <td><%= interview.title %></td>
        <td><%= format_datetime_string interview.schedule %></td>
        <td><%= interview.user.user_name %></td>
      </tr>
    <% end %>
  </tbody>
</table>
<%= submit_tag :approved %>
<% end %>

Contollerで下記のように配列形式で受け取ることが出来ます。

  def approve
    @interviews = Interview.where("id in (?)", params[:approved])
    @interviews.each do |interview|
      interview.status = Interview::statuses[:approved]
      interview.save
    end
    redirect_to interviews_path
  end

参考

check_box - リファレンス - - Railsドキュメント

Rails のフォームで配列形式のデータを扱う方法 - WebOS Goodies

Git:cherry-pickを使って特定のコミットだけをブランチに反映する

ブランチを切り忘れて、複数の対応が含まれてしまったブランチから特定の対応を含んだブランチを作成してプルリクを作りたくてcherry-pickについて調べてのでメモφ(..)

やりかた

前提

今回は下記のようなdevelopブランチに下記のようなコミットログがあった際にead2ed604e6e14を指定して、reviewブランチに反映させmasterブランチにプルリクを出すケースを想定して手順をやってみますφ(..)

f:id:madogiwa0124:20171228093635j:plain

特定のコミットをreviewブランチに反映してみる

特定のコミットをreviewブランチに反映するまでの手順概要は下記のとおりです。

  1. masterをチェックアウト
  2. reviewブランチをmasterから作成
  3. cherry-pickを使って特定のコミットを反映

ポイントは、cherry-pickです。cherry-pickを使うことでコミットを指定し、反映することが出来ます!

git cherry-pick コミットハッシュ

実際に私が作業したコンソールのログが下記です。

$ git cherry-pick ead2ed6
[review 67bbc40] rename snake_case username,schoolname
 Date: Mon Dec 25 22:39:46 2017 +0900
 5 files changed, 17 insertions(+), 11 deletions(-)
 create mode 100644 db/migrate/20171225133337_change_clumn_name_to_users.rb
$ git cherry-pick 04e6e14
 Date: Tue Dec 26 22:30:30 2017 +0900
 1 file changed, 1 insertion(+), 1 deletion(-)

masterにプルリクを出してみる

先程作成したreviewブランチをgit pushし、masterにプルリクを出してみます!

f:id:madogiwa0124:20171228092954p:plain

特定のコミットのみを含んだプルリクが作成できました(._.)

おわりに

cherry-pickを使うと特定のコミットを反映することが出来るので、コードレビューの際に主要なコミットだけを含んだブランチを作成してプルリクを出す等、色々とはかどりそうだなと思いましたφ(..)!

参考

backlog.com

Ruby on Rails:ModelのプロパティにEnumを使う※おまけ:ラジオボタンでEnumを扱う

Railsでステータス等の特定の値のリストを用いて値設定を行う場合にはEnumを使うと便利なので、手順をメモしておきますφ(..)

ちなみにEnumはRails4.1から導入されたActiveRecordの機能なので、Ruby単独では使えない点に注意してください(._.)
RubyEnumっぽいことやるには下記に手順をまとめているので、参考にしてください:D

madogiwa0124.hatenablog.com

手順

テーマ:性別(男女)をEnumで設定する

今回は、性別というプロパティについて男と女という値をEnumで管理するケースを想定しました。
既存のUserモデルについて、性別のプロパティを追加し、それをEnumで管理出来るようにします:D

実装

テーブル定義の変更

まずは既存のUserモデルについて性別(sex)プロパティを追加します。ポイントはInteger型でプロパティを定義することですφ(..)

rails g migration add_sex_to_users sex:integer
class AddPropertiesToUsers < ActiveRecord::Migration[5.1]
  def change
    add_column :users, :sex, :integer
  end
end

実装

テーブル定義を変更後、Enumをモデルに定義していきます。今回は1:男2:女という定数をEnumで管理していきます。
Enumは、enum プロパティ名: { 値1: 1, 値2: 2 }という形でモデルに定義します(._.)

class User < ApplicationRecord
  
  # 省略

  enum sex: { man: 1, woman: 2 }
  
  # 省略
  
end

実際に登録されたデータを見てみると男は1女は2で表示されます。

# DB上は、モデルで定義した数字で設定される
e-navigator_development=# select id,username,sex from users;
 id | username | sex
----+----------+-----
  1 | hogehoge |   2
  3 | fuga_1   |   1
(2 rows)

登録したデータをアプリケーション上で確認してみると、モデルで定義した値womanとなります。

irb(main):001:0> user.id
=> 1
# モデルで定義された値"woman"が表示される。
irb(main):002:0> user.sex
=> "woman"
# Enumの一覧を確認
irb(main):003:0> User.sexes
=> {"man"=>1, "woman"=>2}

おまけ:Enumのプロパティをラジオボタンとして表示する

Enumで定義したプロパティはテキストボックスではなく、ラジオボタンやセレクトボックスで定義したいので、今回はラジオボタンで表示するコードを下記に示しましたφ(..)

  <div class="field">
    <%= f.label :sex %><br />
    <%= f.label :man %>
    <%= f.radio_button :sex, :man %>
    <%= f.label :woman %>
    <%= f.radio_button :sex, :woman %>
  </div>

Enumを使うとマジックナンバーソースコードに記述しなくても良くなるので、可読性があがるので定数のリストを扱うプロパティには積極的にEnumを活用していきたいですね!

参考

qiita.com

Ruby on Rails:モデルに独自のバリデーションを実装する

Railsはvalidationを使って必須等の色々なデータの制約を付与することが出来ますが、それらに該当しない独自のvalidationを付与する方法をメモφ(..)

手順

テーマ:生年月日の過去日を不可にする

今回は、生年月日に過去日が入力された際にエラーとなるように独自のvalidationを追加していきます。

f:id:madogiwa0124:20171224162947p:plain

前提条件

生年月日はUserモデルに属し、データ構造は下記となっていることを想定します。

論理名 物理名
生年月日 birthday date

独自のバリデーションを実装する

独自のバリデーションを追加するのは意外と簡単でした!Userモデルにメソッドを定義し、それをvalidateで設定するだけです:D

class User < ApplicationRecord

  # 省略

  # validateに定義したメソッドを設定
  validate :birthday_cannot_be_in_the_future
  
  # 生年月日の未来日のチェックメソッド
  def birthday_cannot_be_in_the_future
    # 生年月日が入力済かつ未来日(現在日付より未来)
    if birthday.present? && birthday > Date.today
      # エラー対象とするプロパティ(birthday)とエラーメッセージを設定
      errors.add(:birthday, "can not specify your future date as your birth date.")
    end
  end

end

参考

railsguides.jp

以上