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年は割りと早い段階から寄付を行っていたので、年末に冷蔵庫がパンクすることは回避できました。
寄付を行った自治体は以下の通りです。
- 山形県 天童市 ラ・フランス&サンふじ詰合せ 寄付1万円
- 岩手県 花巻市 花巻産とれたてアスパラガス宅配便 寄付5000円
- 岩手県 花巻市 早池峰飲むヨーグルト詰め合わせ 寄付5000円
- 山形県 河北町 【先行予約のみ限定50セット】秘伝豆(えだまめ)約5kg! 寄付1万円
- 山梨県 甲府市 シャインマスカット2kg(3~4房入り) 寄付1万円
- 佐賀県 上峰町 佐賀県産豚モモしゃぶしゃぶ用4000g 寄付1万円
- 北海道 幕別町 北海道十勝牛手ごねハンバーグ200g×10個 寄付1万円
- 茨城県 結城市 黒毛和牛切落し1.5kg 寄付1万円
枝豆、ラフランス、豚肉が特に良かったのでまた今年も寄付しようと思います。
上峰町の豚肉はかなり美味しくて、我が家の豚肉は常にこれにしようかと思っているほどです。
さいごに
今年もなんとか利益を出すことができました。
2017年は多少リスクを取って海外通貨建ての投資もやってみたいなと考えています。
file_get_contents() 互換の高速関数を書いたが使わなかったので供養する
とあるプロジェクトの一括処理系のチューニングを行った際に、file_get_contents()でのリモート画像の読み込みがの計算量で実行されてる箇所があったので、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年は限度額の引き上げと、確定申告が不要になったことでさらに人気が出てきました。
寄付を行った自治体は以下の通りです。
- 岡山県 総社市 そうじゃの新米 20kg 寄付1万円
- 北海道 浦幌町 ジンギスカンとウインナーのセット 1.7kg 寄付5000円
- 兵庫県 宍粟市 宍粟牛スライス詰め合わせ(800g)+地酒セット【冷蔵発送】 寄付1万円
- 佐賀県 伊万里市 伊万里牛ハンバーグステーキ160g×12個(月200セット限定) 寄付1万円
- 長崎県 佐世保市 訳あり干物セット4kg 寄付1万円
- 宮崎県 都城市 クイーンハーブ豚4kgセット 寄付1万円
我が家ではふるさと納税とクロス取引のおかげで米、豚肉、トイレットペーパー、洗剤の類はまったく買う必要がなくなりました。
反省点としてはお礼品の到着が年の後半に集中してしまったので、今年は定期的に注文して冷蔵庫に入りきらない状況を作らないようにしたいです。
さいごに
今年も大きな利益はなくとも全ての手段で利益を出すことができました。
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年からは確定申告が不要、かつ限度額の引き上げが予定されているのでより過熱しそうです。 寄付を行った自治体は以下の通りです。
- 宮崎県東諸県郡綾町 綾ぶどう豚食べ尽くしセット2.55kg 寄付2万円
- 島根県浜田市 浜田漁港発 鮮魚直送便2.5~3.5kg 寄付1万円
さいごに
ローリスクの名の通り、大きな利益はなくとも全ての手段で利益を出すことができました。 2015年も欲張らず着々と資産を増やして行きたいと思います。
Rails初心者がNokogiriを使ってbotを作るためにやったこと
タイトルの通りです。
ことの発端は、株主優待の改廃をいち早く知るにはどうしたらいいだろうと悩んだ結果、一番早い情報を得るにはどうしてもスクレイピングが必要だったので自分でbotを作ってしまおうと思ったのがきっかけです。
使ったもの
Railsアプリケーションの作成
sqaleに申し込んでアプリケーションを作成します。 Getting Startedのマニュアルを元にRailsinstallerを使ってruby、Railsのインストール、公開鍵の登録、アプリケーションの作成を済ませます。今回は 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
に以下の追記を行います。これでgmailのsmtpサーバーを拝借してメール送信ができるようになります。
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サービスを多く手がける会社に努めていますが、著名なソーシャルネットワーキングでこの誰役感を充足させるような仕組みがまだ出てきていないのはこれからのサービス設計のヒントになるかもしれないなあと思っています。
誰役感が足りないと感じたら
生きていればさまざまな理由で誰役感が不足する状況が発生します。 入院中で衣食住すべて面倒を見てもらわないといけなくなったり、慣れない環境で自分の実力が発揮できなかったり、「ひょっとして自分は誰からも必要とされてないのでは」と不安に駆られる時があります。 そんな時は友達の誕生日をお祝いするとか親に電話して声を聞かせるとか、小さな事でもいいので誰役感を満たすための行動を取ってほしいと思います。
また、「まわりによくしてもらうばっかりで自分は何もお返しできない」という思考パターンに入ってしまった場合は、自分は周りに誰役感を与えている、という事実にも気がついてほしいと思います。 必要でない人などどこにもいないのですから。