2016年のローリスク投資成績まとめ

あけましておめでとうございます。2017年になったので、普段自分が実践している投資のもろもろの成績をまとめます。
なお普段やっているのは株主優待、クロス取り、IPOふるさと納税などで、以下の資料にやり方など全て掲載しています。(内容はちょっと古いです)

株の成績

  • 売買差益 -37万円
  • 配当金 +1.6万円
  • 優待品 +8.2万円相当

今年は任天堂で大敗を喫したため、売買差益が大きくマイナスになってしまいました…
ローリスクといいつつリスクを取りに行ってしまったのが敗因です。
反省して次に活かしたいと思います。

クロス取引の成績

  • 優待品 +19.7万円相当(手数料差引後)

軍資金も増えてきたので徐々に約定代金の大きい銘柄が取れるようになってきました。
クロス取引のおかげで2日に1つは何かしらの株主優待が家に届く状態になりました。
楽天証券でも一般信用売りが始まり、今後もクロス取りは激戦が予想されます。

IPOの成績

  • 利益 +40.7万円
  • 落選 207回
  • 当選 4回
  • 繰り上げ当選 2回

12月までずっとマイナスだったのですが、最後の1ヶ月で一気にプラスになりました。やはりIPOは諦めずにコツコツと応募し続けるのが大事です。繰り上げ当選が2回あったのも驚きでした。(ただし利益には結びつかず)

次に当選した銘柄の一覧です。

銘柄 当選数 公募価格
(万円)
初値
(万円)
利益
(万円)
ラサールロジポート投資法人 1 10.0 11.5 +1.5
フィット 3 18.9 16.8 -6.3
コメダホールディングス 1 19.6 19.6 +0.0
三井不動産ロジスティクスパーク投資法人 1 27.0 27.2 +0.2
サムティ・レジデンシャル投資法人 1 10.2 9.9 -0.3
イントラスト 2 6.3 8.8 +5.1
グレイステクノロジー 1 31.0 71.3 +40.3

グレイステクノロジーが本当に頑張ってくれました。これが当選してなかったら2016年のIPOは散々でした。
なおIPOで得た利益は通常20%の譲渡税がかかりますが、任天堂などのマイナスと損益通算することで源泉徴収された譲渡税が還付されます。

ふるさと納税の成績

2015年の反省を活かしつつ2016年は割りと早い段階から寄付を行っていたので、年末に冷蔵庫がパンクすることは回避できました。

寄付を行った自治体は以下の通りです。

枝豆、ラフランス、豚肉が特に良かったのでまた今年も寄付しようと思います。
上峰町の豚肉はかなり美味しくて、我が家の豚肉は常にこれにしようかと思っているほどです。

さいごに

今年もなんとか利益を出すことができました。
2017年は多少リスクを取って海外通貨建ての投資もやってみたいなと考えています。

file_get_contents() 互換の高速関数を書いたが使わなかったので供養する

とあるプロジェクトの一括処理系のチューニングを行った際に、file_get_contents()でのリモート画像の読み込みが O ( n ) の計算量で実行されてる箇所があったので、file_get_contents()互換の高速な関数を作成しました。

こちらのサイトによるとfsockopen()が一番速いらしいので、cURLバージョンとfsockopen()バージョンの2つを作成してみました。

cURLを使ったバージョン

  • file_get_contents()比で処理時間20%減
  • メモリ使用量は変わらず
//********************************
//   CURLを使ったfile_get_contents
//   file_get_contentsと同様に読み込んだデータを返す
//   file_get_contentsと同様に失敗した場合はWarningを発生しfalseを返す
//********************************
function curl_get_contents($url, array $setoptArray = null)
{
    $ch = curl_init($url);
    $options = $setoptArray;
    if ($options === null) {
        // デフォルトオプション
        $options = array(
            CURLOPT_HEADER         => false, // HTTPヘッダを出力しない
            CURLOPT_RETURNTRANSFER => true,  // curl_exec()の戻り値として受け取る
            CURLOPT_SSL_VERIFYPEER => false, // 証明書を検証しない
            CURLOPT_SSL_VERIFYHOST => false, // ホストを検証しない
            CURLOPT_TIMEOUT        => 3,     // cURLの最大実行時間(秒)
            CURLOPT_CONNECTTIMEOUT => 3,     // HTTP接続の最大実行時間(秒)
        );
    }
    curl_setopt_array($ch, $options);

    $result = curl_exec($ch);

    if (curl_errno($ch)) {
        trigger_error("curl_get_contents error: " . curl_errno($ch), E_USER_WARNING);
        return false;
    }
    curl_close($ch);

    return $result;
}

fsockを使ったバージョン

  • file_get_contents()比で処理時間37%減!
  • メモリ使用量は変わらず
//********************************
//   fsockを使ったfile_get_contents
//   file_get_contentsと同様に読み込んだデータを返す
//   file_get_contentsと同様に失敗した場合はWarningを発生しfalseを返す
//********************************
function fsock_get_contents($url) {
    $timeout = 3;
    if (!$purl = parse_url($url)) {
        trigger_error("Invalid URL: $url", E_USER_WARNING);
        return false;
    }
    if (empty($purl['port'])) {
        $purl['port'] = 80;
    }
    if ($purl['scheme'] == 'https') {
        $purl['port'] = 443;
        $fp = fsockopen('tls://' . $purl['host'], $purl['port'], $errNo, $errStr, $timeout);
    } else {
        $fp = fsockopen($purl['host'], $purl['port'], $errNo, $errStr, $timeout);
    }

    if (!$fp) {
        trigger_error("$errStr ($errNo)", E_USER_WARNING);
        return false;
    }
    socket_set_timeout($fp, $timeout);

    if (!empty($purl['query'])) {
       $purl['path'] .= '?' . $purl['query'];
    }
    if (substr($purl['path'], 0, 1) !== '/') {
        $purl['path'] = '/' . $purl['path'];
    }
    $request = "GET {$purl['path']} HTTP/1.1\r\n"
             . "Host: {$purl['host']}\r\n"
             . "User-Agent: PHP-Script/1.0\r\n"
             . "Content-Type: application/x-www-form-urlencoded\r\n"
             . "Connection: Close\r\n\r\n";
    fwrite($fp, $request);

    $response = '';
    while (!feof($fp)) {
        $response .= fgets($fp);
    }

    fclose($fp);

    list($head, $body) = explode("\r\n\r\n", $response, 2);
    // リダイレクトがあれば追跡する
    if (preg_match('/location\: (.*)\r\n/i', $head, $matches)) {
        return fsock_get_contents($matches[1]);
    }

    return $body;
}

開発環境ではかなり速くなったのですが、production環境で試すとなぜか速くならなかったので実際にはproductionに投入していません。 おそらくCPUやディスクの状況が開発環境とは違うのでしょう。

せっかく書いたのでまたいつかどこかのプロジェクトで役に立ってくれるといいなと思いつつここに供養しようと思います。

2015年のローリスク投資成績まとめ

2016年になったので、普段自分が実践している投資のもろもろの成績をまとめます。 なお普段やっているのは株主優待、クロス取り、IPOふるさと納税などで、以下の資料にやり方など全て掲載しています。(内容はちょっと古いです)

株の成績

  • 売買差益 +103万円
  • 配当金 +5.5万円
  • 優待品 +8.3万円相当

やはり優待目当ての銘柄なので配当より優待の利益のほうが大きいですね。
売買差益の103万は、おもに8月に起きた世界同時株安での利確売りによるものです。
なお株主優待に関しては後述するクロス取引のおかげであまりポジションを持つことがなくなったので含み益はほとんど増えていません。

クロス取引の成績

  • 優待品 +32.8万円相当(手数料差引後)

2014年末から始めたクロス取引がようやく実を結び始めました。
クロス取引のおかげで3日に1回は何かしらの株主優待が家に届く状態になりました。
2015年2月からSBIの一般信用も始まり、世間での認知も増えてきたように思います。
ただしクロス取り対策なのか長期保有の優遇制度を導入する企業も増えてきているので、端株保有作戦なども平行して実践していきたいと思います。

IPOの成績

  • 利益 +73.5万円
  • 落選 213回
  • 当選 18回
  • 繰り上げ当選 0回

今年は日本郵政があったので結構な利益になりましたが、郵政を差し引いても+50万くらいなので大体予想通りの結果となりました。
次に当選した銘柄の一覧です。

銘柄 当選数 公募価格
(万円)
初値
(万円)
利益
(万円)
ケネディクス商業リート投資法人 1 23.0 26.1 +3.1
ヘルスケア&メディカル投資法人 1 11.0 16.0 +5.0
レントラックス 1 17.5 27.1 +9.6
ヘリオス 1 12.0 14.7 +2.7
サムティ・レジデンシャル投資法人 1 10.2 9.9 -0.3
デクセリアルズ 2 16.0 15.5 -1.0
パルマ 1 13.5 21.6 +8.1
パートナーエージェント 1 12.6 38.25 +25.65
ゆうちょ銀行 5 14.5 16.8 +11.5
日本郵政 4 14.0 16.3 +9.2

日本郵政の上場以来、IPO人口が増えているのかぱったりと当選しなくなってしまいました。
2016年はしばらく落選が続きそうな気がしてますが、前年同様100社近くが上場すると言われているので30万くらい利益が出たらいいなと思っています。

ふるさと納税の成績

ふるさと納税は2015年は限度額の引き上げと、確定申告が不要になったことでさらに人気が出てきました。
寄付を行った自治体は以下の通りです。

我が家ではふるさと納税クロス取引のおかげで米、豚肉、トイレットペーパー、洗剤の類はまったく買う必要がなくなりました。
反省点としてはお礼品の到着が年の後半に集中してしまったので、今年は定期的に注文して冷蔵庫に入りきらない状況を作らないようにしたいです。

さいごに

今年も大きな利益はなくとも全ての手段で利益を出すことができました。
2016年も欲張らず着々と資産を増やして行きたいと思います。

PHPでアクセス元IPから国を判別する方法いろいろ

表題の通りです。

PHPで実装されたサービスで、アクセス元の国によって動作を変えたいという要件が発生したため調べた結果をメモ。

DNSサービスを使う

今回一番関心したのがこれ。 [調べたいIP].cc.wariate.jp の TXT レコードで国コードを返してくれるDNSサービス。 詳細はこちら

$ dig 10.121.33.27.cc.wariate.jp txt +short                                                          
"AU"
  • メリット
    • 高負荷や一時的なネットワーク障害のリスクをDNSが担保してくれる
  • デメリット
    • 個人が立てているサービスなので提供停止リスクはある
    • 国コードが2文字(ISO 3166-1 alpha-2)でしか返ってこない

APIサービスを使う

IPinfoDBというサービスを使うとAPI経由でIPから国コードを取得できる。

  • メリット
    • APIなのでクライアントサイドにも流用しやすい
  • デメリット
    • クリティカルな要件ならローカルキャッシュの仕組みが必要(1秒間に2リクエストの制限あり)
    • 国コードが2文字(ISO 3166-1 alpha-2)でしか返ってこない

PECLモジュールを使う

PECL::GeoIPというモジュールを使うとIPから国だけでなく地域名、緯度、タイムゾーンなど色々調べられる。

  • メリット
    • 返り値のバリエーションが多い(US、USA、United States)
    • 名前解決がローカルで完結するので外部サービスの死活に依存しない
  • デメリット
    • 国コードが知りたいだけなら高級過ぎる気がする
    • バイナリデータを定期的にUPDATEする必要がある

他にもあれば追記する予定です。

社内で発表したローリスク投資勉強会の資料と2014年の成績

普段自分が実践している投資のもろもろを先日社内で発表する機会に恵まれたので、せっかくなので資料を公開します。 それから、この資料の内容を元に私が実践した2014年の成績をまとめてみようと思います。

株主優待の成績

  • 売買差益 +143万円
  • 配当金 +2.3万円
  • 優待品 +10万円相当

優待目的で保有していた銘柄がアベノミクスで思わぬ利益となりました。 純粋にインカムゲインで考えるとまあこんなもんかという感じです。

クロス取引の成績

  • 優待品 +1.8万円相当(手数料差引後)

まだ始めて1ヶ月しか経ってないのでこの程度ですが、1年まじめに実践すれば単純計算でこの12倍の利益になります。 ちなみに12月にクロスで取得したものは以下になります。

  • 鳥越製粉 / 4000円相当のそうめん1箱 / 取得コスト461円
  • コカ・コーラウエスト / 1800円相当のジュース / 取得コスト430円
  • ヒューリック / 3000円相当のカタログギフト / 取得コスト1052円
  • ミルボン / 8000円相当のヘアケアセット / 取得コスト961円
  • トラスコ中山 / 5000円相当のカタログギフト / 取得コスト896円

まだ私はカブドットコムの一般信用しか使ってないですが、松井証券SBI証券、制度信用もうまく使い分ければ さらに伸びる余地がありますね。ただ本業も忙しいので全部マスターするのは当分先になりそうです。

IPOの成績

  • 落選 246回
  • 当選 7回
  • 繰り上げ当選 2回

IPOはなかなか当たらないけど、当たれば大きいので夢があります。 注目すべきは落選回数です。IPOのよいところは宝くじと違って落選しても何も失わないところです。 落選しても気にせずコツコツと応募を重ねることが大事です。 次に当選した銘柄の一覧です。

銘柄 当選数 公募価格
(万円)
初値
(万円)
利益
(万円)
リクルートホールディングス 2 31.0 31.7 +1.4
トーセイ・リート投資法人 2 10.3 11.5 +2.4
積水ハウス・リート投資法人 1 11.0 13.5 +2.5
U-NEXT 1 30.0 39.5 +9.5
gumi 1 33.0 33.0 0
メタウォーター 1 24.0 22.6 -1.4
イーレックス 1 11.7 13.0 +1.3

意外と大したことなかった! ただIPOは9月からの参戦だったので今年はもっといけると目論んでいます。 マイナー証券会社なども口座開設してさらに勝率を上げていきたいです。

ふるさと納税の成績

ふるさと納税は限度額があるので大きく利益は出ませんが、特産品を選ぶ楽しみと手軽さが良いですね。 2015年からは確定申告が不要、かつ限度額の引き上げが予定されているのでより過熱しそうです。 寄付を行った自治体は以下の通りです。

さいごに

ローリスクの名の通り、大きな利益はなくとも全ての手段で利益を出すことができました。 2015年も欲張らず着々と資産を増やして行きたいと思います。

Rails初心者がNokogiriを使ってbotを作るためにやったこと

タイトルの通りです。

ことの発端は、株主優待の改廃をいち早く知るにはどうしたらいいだろうと悩んだ結果、一番早い情報を得るにはどうしてもスクレイピングが必要だったので自分でbotを作ってしまおうと思ったのがきっかけです。

使ったもの

Railsアプリケーションの作成

sqaleに申し込んでアプリケーションを作成します。 Getting Startedのマニュアルを元にRailsinstallerを使ってrubyRailsのインストール、公開鍵の登録、アプリケーションの作成を済ませます。今回は kabunews というアプリケーション名にしました。

Nokogiriのインストール

Nokogiriはruby製の有名なスクレイピングツールです。 以下の記事が参考になりました。

Nokogiri を使った Rubyスクレイピング [初心者向けチュートリアル]

ローカル環境でrails new .したあと、Gemfileに以下の1行を追加します。

gem 'nokogiri'

Gemfileに追加したら以下のコマンドを実行すればNokogiriが使えるようになります。

$ bundle install

モデルの作成

スクレイピングして新着情報を検知するためには「前回どこまで調べたか」を保存する必要があります。 今回はRSSの出力も行いたいので、RSSフィードの形式に沿ってテーブルを作成します。

  • feedテーブルの定義(案)
id           int   プライマリキー
feed_id      str   feedを識別するためのユニーク値
title        str   タイトル
description  text  本文
link         str   リンク先URL

テーブル定義を考えたら以下のコマンドでModelを作成します。

$ rails generate model テーブル名 [フィールド名:型] [フィールド名:型]...
$ rails generate model feed feed_id:string title:string description:text link:string

Modelを作成するとdb/migrate/以下にマイグレーションファイルも自動的に作成されます。

class CreateFeeds < ActiveRecord::Migration
  def change
    create_table :feeds do |t|
      t.string :feed_id
      t.string :title
      t.text   :description
      t.string :link

      t.timestamps
    end
  end
end

アプリケーションのルートでrake db:migrateと実行すると、マイグレーションファイルを元にテーブルが作成されます。

コントローラーの作成

テーブルが作成できたら次はスクレイピングを実行しDBに保存するためのコントローラーを作成します。 以下のコマンドでコントローラーの雛形を作成します。

$ rails generate controller コントローラー名 [アクション名]
$ rails generate controller fetch

次にRailsではどのURLパスにアクセスがきた時どのアクション・コントローラーを起動するかのマッピングconfig/routes.rbというファイルで管理しているので、routes.rbに以下の1行を追加しておきます

get ':controller(/:action(/:id(.:format)))'

これでhttp://mysite.com/fetchにリクエストが来た時にfetchコントローラーのindexアクションが起動するようになります。

あとはapp/controllers/fetch_controller.rbに処理を書いていく訳ですが、こんな感じに書きました。 NokogiriはCSSセレクタが使えるのでjQueryを書いたことのある人なら何も考えずに使えると思います。

class FetchController < ApplicationController

  require 'open-uri' # URLアクセス
  require 'kconv'    # 文字コード変換
  require 'nokogiri' # スクレイピング

  def index

    # スクレイピング先のURL
    url = 'http://example.com/news/index.html'

    html = open(url) do |f|
      f.read # htmlを読み込んで変数htmlに渡す
    end

    # htmlをパース(解析)してオブジェクトを生成(utf-8に変換)
    doc = Nokogiri::HTML.parse(html.toutf8, nil, 'utf-8')

    latest_id = get_latest_id()

    # 新着情報ごとにループ
    doc.css('#contents a').each do |content|

      # <a name="news123"> の123の部分を取得
      feed_id          = content["name"].sub(/news/, "").to_i

      if latest_id < feed_id
        # DBに未登録の情報があったらDBに保存
        title            = content.css('h1').to_html
        description      = content.to_html
        link             = url + '#news' + feed_id.to_s
        insert_feed(feed_id, title, description, link)
      end
    end

    render :text => "Done!"
  end

  private
  # feedsテーブルに1件INSERT
  def insert_feed(feed_id, title, description, link)
    feed = Feed.new(
      :feed_id          => feed_id,
      :title            => title,
      :description      => description,
      :link             => link
    )
    feed.save
  end

  # DBに保存されている最新のfeed_idを取得
  def get_latest_id()
    row = Feed.order("feed_id desc").first
    if row.nil?
      return 0
    end
    latest_id = row["feed_id"].to_i
    return latest_id
  end

なお、insert_feed()とget_latest_id()というメソッドの中ではActiveRecordを使ってDB操作を行っていますがActiveRecordについてはググってください。

メールを送信する

新着情報があったらいち早く知りたいので、DBに保存するタイミングで自分にメールを送るようにします。 方法は色々あるようですが、Railsに標準で搭載されているActionMailerという機能を使います。

$ rails generate mailer メーラー名
$ rails generate mailer NoticeMailer

上記コマンドを実行するとapp/mailers/notice_mailer.rbというファイルが作成されるので、メールを送るためのメソッドを定義します。

# -*- coding: utf-8 -*-
class NoticeMailer < ActionMailer::Base
  default from: "hoge@gmail.com"

  def send_gmail(to, title, description)
    @description = description

    mail(:to => to, :subject => title)
  end
end

宛先と件名をmail()メソッドに渡すとviews/notice_mailer/send_gmail.text.erbに置かれたテンプレートを元に本文が組み立てられ、メール送信が実行されます。今回は受け取った本文をそのまま送信するのでsend_gmail.text.erbの中身はこれだけです。

<%= @description %>

メールを実際に送信するためにはsmtpサーバーの指定が必要になるので、config/environments/development.rbに以下の追記を行います。これでgmailsmtpサーバーを拝借してメール送信ができるようになります。

config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
  :enable_starttls_auto => true,
  :address => 'smtp.gmail.com',
  :port => 587,
  :domain => 'gmail.com',
  :authentication => 'plain',
  :user_name => 'hoge@gmail.com',
  :password => 'xxxxxxxxx'
}

最後に、作成したsend_gmail()をコントローラーの中で呼び出せば完成です。

  # DBに保存
  insert_feed(feed_id, title, description, link)
+ # メール送信
+ NoticeMailer.send_gmail('hoge@gmail.com', title, description).deliver

本番デプロイ&cronの設置

ここまでできたらいよいよsqaleにデプロイしていきます。 ローカルに貯めたコミットをsqaleにpushすれば勝手にサーバーへのデプロイからビルドまで行ってくれます。

$ git push origin master

なお初回は本番環境にまだテーブルがないのでdb:migrateを実行してテーブルを作成しておきます。

$ ssh -p 2222 sqale@gateway.sqale.jp
Last login: Sun Apr 20 16:57:28 2014 from xxx.xxx.xxx.xxx
sqale@kabunews-kazsix-1:~$ cd current/ && bundle exec rake db:migrate

railsアプリケーションを定期実行させるにはwheneverというgemを使う方法やrails runnerを使う方法など色々あるようですが、今回は単純にhttp://mysite.com/fetchを叩ければよいので以下のようにcrontabを編集しました。

sqale@kabunews-kazsix-1:~$ crontab -e
*/5 * * * * wget --spider "http://mysite.com/fetch" >/dev/null 2>&1

ちなみにHerokuでは無料枠で実行できるcronは1日1回までですが、sqaleは無制限です。ありがたいですね。

おまけ:RSSフィードを生成する

せっかくなのでお知らせをRSSでも受け取れるようにします。 xmlファイルを定期的に生成して静的ファイルとして設置することも可能ですが、http://mysite.com/rssにリクエストが来た時に動的にDBの情報からフィードを生成したいと思います。静的ファイル(状態)を持たないことでアプリケーションサーバーをステートレスに保つ事にもなります。

まず以下のコマンドでコントローラーとアクションを作成します。

rails generate controller コントローラー名 [アクション名]
rails generate controller fetch index

次に生成されたapp/controllers/rss_controller.rbに処理を記述していきます。
feedsテーブルから最新5件を取得し、テンプレートを呼び出すだけです。

class RssController < ApplicationController
  def index
    @entries = Feed.order('created_at DESC').limit(5).all
    render :template => 'rss/index.builder', :layout => false
  end
end

テンプレートはviews/rss/index.builderというファイル名で以下のように作成します。

xml.instruct! :xml, :version => "1.0"
xml.rss :version => "2.0" do
  xml.channel do
    xml.title "HPタイトル"
    xml.description "HPの説明"
    xml.link "http://example.com/news/index.html" # HPのURL

    for e in @entries
      xml.item do
        xml.title       e.title # 記事のタイトル
        xml.description e.description_html # 記事の本文
        xml.pubDate     e.created_at.to_s(:rfc822) # 記事の作成日
        xml.link        e.link # 記事のURL
        xml.guid        e.link
      end
    end
  end
end

これでhttp://mysite.com/rssにアクセスすると最新5件のフィード情報がRSS形式で表示されるようになりました。

完成したもの

という訳で作成したアプリケーションがこちらになります。

株主優待新着お知らせ君
http://kabunews-kazsix.sqale.jp/

株主優待新着お知らせ君を利用すると以下の様なメリットがあります。

  • 自分の持ってる銘柄が優待廃止・改悪された時、値崩れする前に売れる
  • 優待が新設・改良された時、値上がりする前に買える
  • 自分的には魅力がない優待でも、キャピタルゲイン狙いで売り買いできる

Railsは学習コストはそれなりに高いけど、覚えてしまえば強力なフレームワークだなーという印象です。 業務アプリだとさらにテストやらチューニングやら考える必要があるけど、自分用のツールとして使う分にはこれで十分かと思います。

「誰かの役にたっている感」という必須アミノ酸

誰かのためということ

人間が体内で合成できない、外部からの摂取が必要なアミノ酸のことを必須アミノ酸といいますが、最近メンタルにおいても外部からの摂取が必須となる感覚があると気が付きました。

それは「誰かの役にたっている」という実感です。

まあこの感覚が大事というのは周知の話であって、取り立てて扱うものではないのかもしれませんが、外部から定期的に摂取が必要なところや不足すると心に支障をきたすあたりが「栄養素」のモデルに近いなという気付きです。

この、誰かの役にたっているという実感(以下 誰役感)を軸に日々の生活を眺めてみると色々な事が分かります。

  • 奉仕活動とは、奉仕する側が直接的に誰役感を得る行為
  • ビリオネアが慈善活動をするのは物質的・社会的に満たされた後の誰役感への渇望
  • 意味のない作業を延々させられると辛いのは誰役感を絶たれるから
  • 企業がやりがいをアピールするのは定期的に誰役感が得られる職場と思わせたいから
  • ダメ男にばっかりハマってしまうのは誰役感の供給を男に依存しているから(あるいは人一倍誰役感が必要な体質だから)
  • 子供にとって親が大切なのは「あんたが生きてるだけで嬉しい」と無制限に誰役感を供給してくれるから
  • SEXが満たされるのは相手の事を気持よくさせているという誰役感をお互いに感じているから

誰役感はゼロサム

栄養素のような物だと言いましたが、誰役感をもらった分相手の誰役感が減るという事はありません。 奢ってもらった方は多少申し訳ない気持ちにはなりますが、別の形でお返しすることで2人の誰役感の総量は増えます。 誰役感は他者と交流すればするほどプラムサム・ゲームで増えていきます。 積極的に他者と交流できる場といえば、インターネット上のソーシャル(SNS)です。

ソーシャルにおける誰役感

他者との交流で切っても切れないのはソーシャル(SNS)との関係です。 ソーシャル疲れなどという言葉がありますが、今のソーシャルは誰役感を満たすための仕組みが弱いと感じています。

例えばいいね!ボタンですが、いいね!は最小の労力で最大の承認欲求を満たすよう設計されています。 AさんがBさんの投稿にいいね!をした場合、Bさんは他人に認められたと感じることができますが、AさんはただクリックしただけなのでBさんの役にたったと感じるのは難しい。 コメント機能を使えば困っている友達を励ますことができますが、ソーシャルに書けない悩みなどたくさんあります。 誰役感という意味ではまだオンラインゲームの方が優れていて、僧侶は戦士と組むことでパーティーになくてはならない存在になることができます。

自分はWebサービスを多く手がける会社に努めていますが、著名なソーシャルネットワーキングでこの誰役感を充足させるような仕組みがまだ出てきていないのはこれからのサービス設計のヒントになるかもしれないなあと思っています。

誰役感が足りないと感じたら

生きていればさまざまな理由で誰役感が不足する状況が発生します。 入院中で衣食住すべて面倒を見てもらわないといけなくなったり、慣れない環境で自分の実力が発揮できなかったり、「ひょっとして自分は誰からも必要とされてないのでは」と不安に駆られる時があります。 そんな時は友達の誕生日をお祝いするとか親に電話して声を聞かせるとか、小さな事でもいいので誰役感を満たすための行動を取ってほしいと思います。

また、「まわりによくしてもらうばっかりで自分は何もお返しできない」という思考パターンに入ってしまった場合は、自分は周りに誰役感を与えている、という事実にも気がついてほしいと思います。 必要でない人などどこにもいないのですから。