#FJMK blog citrus+というバンドをやってます。 http://citrusplus.jp 平日昼間はインターネットの会社@紀尾井町でエンジニアやってます。 2017-08-15T23:09:19+09:00 sfjmk Hatena::Blog hatenablog://blog/11696248318757941307 PCとスマホ間でちょっとしたメモや画像を送りたい時のための、Facebook Messenger便利技 hatenablog://entry/8599973812289012467 2017-08-15T23:09:19+09:00 2017-08-15T23:30:54+09:00 27歳になるまであと2時間ですが、ブログを書こう書こうと思いながらなかなか書けていなかったのが心残りなので、26歳のうちにとりあえず一記事書いてみる。 一年くらい前からこちらのブログを書いていたのですが、 fjmk.jp あまり続かなかったので、今後ははてなブログのほうでぼちぼち書いていきたいと思います。 以前、 fjmk.hatenablog.com こんな記事を書いておきながら、しれっとWordpressに浮気してしまっていましたが、運用するのが面倒(気がついたらエラーになってることがあったり...)なので、やはりはてなブログのほうが良さそうという結論になりました。 前記事の更新日時を見た… <p><img class="hatena-fotolife" title="f:id:sfjmk:20170815230742j:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170815/20170815230742.jpg" alt="f:id:sfjmk:20170815230742j:plain" /></p> <p> </p> <p>27歳になるまであと2時間ですが、ブログを書こう書こうと思いながらなかなか書けていなかったのが心残りなので、26歳のうちにとりあえず一記事書いてみる。</p> <p> </p> <p>一年くらい前からこちらのブログを書いていたのですが、</p> <p><iframe class="embed-card embed-webcard" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" title="FJMK.jp" src="https://hatenablog-parts.com/embed?url=http%3A%2F%2Ffjmk.jp%2F" frameborder="0" scrolling="no"></iframe><cite class="hatena-citation"><a href="http://fjmk.jp/">fjmk.jp</a></cite></p> <p> </p> <p>あまり続かなかったので、今後は<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A4%CF%A4%C6%A4%CA%A5%D6%A5%ED%A5%B0">はてなブログ</a>のほうでぼちぼち書いていきたいと思います。</p> <p> </p> <p>以前、</p> <p><iframe class="embed-card embed-blogcard" style="display: block; width: 100%; height: 190px; max-width: 500px; margin: 10px 0px;" title="Wordpressや無料ブログサービスを比較して、はてなブログを選んだ理由 - #FJMK blog" src="https://hatenablog-parts.com/embed?url=http%3A%2F%2Ffjmk.hatenablog.com%2Fentry%2F2013%2F09%2F22%2F234833" frameborder="0" scrolling="no"></iframe><cite class="hatena-citation"><a href="http://fjmk.hatenablog.com/entry/2013/09/22/234833">fjmk.hatenablog.com</a></cite></p> <p> </p> <p>こんな記事を書いておきながら、しれっと<a class="keyword" href="http://d.hatena.ne.jp/keyword/Wordpress">Wordpress</a>に浮気してしまっていましたが、運用するのが面倒(気がついたらエラーになってることがあったり...)なので、やはり<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A4%CF%A4%C6%A4%CA%A5%D6%A5%ED%A5%B0">はてなブログ</a>のほうが良さそうという結論になりました。</p> <p> </p> <p>前記事の更新日時を見たところ、このブログを書くのは実に3年8ヶ月ぶり。。。時が経つのは早いですね。</p> <p> </p> <p>とりあえず、気張らず適当に書いていきたいと思います。</p> <p> </p> <p> </p> <h4 class="entry-title" style="margin: 0px; padding: 10px 0px 0px; line-height: 1.2; color: #444444; font-family: arial, 游ゴシック, YuGothic, 'ヒラギノ角ゴ ProN W3', 'Hiragino Kaku Gothic ProN', メイリオ, Meiryo, 'MS Pゴシック', sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial;"><a href="http://fjmk.hatenablog.com/entry/2017/08/15/230919" class="entry-title-link bookmark" style="color: #222222; font-size: 26px; letter-spacing: 1px; text-decoration: none;">PCとスマホ間でちょっとしたメモや画像を送りたい時のための、Facebook Messenger便利技</a></h4> <p>今回は自分が普段使ってる、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Facebook">Facebook</a> MessengerのTipsをご紹介しようと思います。</p> <p> </p> <ul> <li>PCから<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%DE%A5%DB">スマホ</a>にちょっとしたメモを送りたい時</li> <li>PCから<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%DE%A5%DB">スマホ</a>に地図や店情報のリンクを送りたい時</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%DE%A5%DB">スマホ</a>で撮った写真/映像/スクショをPCに送りたい時 </li> </ul> <p> </p> <p>等々、PCと<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%DE%A5%DB">スマホ</a>間でデータを共有したい時、皆さんどうしてますか?</p> <p>いちいち打ち直したり、メールで送ったりしてませんか?</p> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Facebook">Facebook</a> Messengerを使えば簡単に共有できるので、やり方をご紹介します。</p> <p> </p> <h3><a class="keyword" href="http://d.hatena.ne.jp/keyword/Facebook">Facebook</a> Messengerは、自分宛てに送れる</h3> <p> </p> <p>実は<a class="keyword" href="http://d.hatena.ne.jp/keyword/Facebook">Facebook</a> Messenger、自分のアカウントを相手にチャットをすることができます。</p> <p> </p> <p>Faceook Messengerのページに飛んで、</p> <p><iframe class="embed-card embed-webcard" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" title="Messenger" src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fwww.messenger.com%2F" frameborder="0" scrolling="no"></iframe><cite class="hatena-citation"><a href="https://www.messenger.com/">www.messenger.com</a></cite></p> <p> </p> <p>自分の名前を検索してみてください。</p> <p><img class="hatena-fotolife" title="f:id:sfjmk:20170815210842p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170815/20170815210842.png" alt="f:id:sfjmk:20170815210842p:plain" /></p> <p> </p> <p>もし出なかったら、自分のプロフィールページのURLにある、ID(ここでいうとsotaro.fujimaki)を</p> <p><img class="hatena-fotolife" title="f:id:sfjmk:20170815211000p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170815/20170815211000.png" alt="f:id:sfjmk:20170815211000p:plain" width="331" /></p> <p> </p> <p>こんな風に、<a href="https://www.messenger.com/t/sotaro.fujimaki">https://www.messenger.com/t/sotaro.fujimaki</a> という形で打ち込んでみてください。</p> <p><img class="hatena-fotolife" title="f:id:sfjmk:20170815211048p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170815/20170815211048.png" alt="f:id:sfjmk:20170815211048p:plain" /></p> <p> </p> <p>そうすると、自分と対話ができるようになります。</p> <p> </p> <p>要するに、</p> <p><strong>”自分のPCと<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%DE%A5%DB">スマホ</a>の間で、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Facebook">Facebook</a> Messengerでチャットをすることができる”</strong></p> <p>ということです。</p> <p> </p> <p>なので、</p> <p> </p> <h4>例えば、ちょっとしたメモを<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%DE%A5%DB">スマホ</a>に送りたい時</h4> <p> </p> <p> こんな風に出かける前にペタッと貼ってあげるだけで</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:sfjmk:20170815224823p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170815/20170815224823.png" alt="f:id:sfjmk:20170815224823p:plain" width="358" /></p> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%DE%A5%DB">スマホ</a>に送れるので、出先ですぐに確認することができますし、</p> <p><img class="hatena-fotolife" title="f:id:sfjmk:20170815224558p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170815/20170815224558.png" alt="f:id:sfjmk:20170815224558p:plain" width="269" /></p> <p> </p> <h4>例えば、お店の情報を<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%DE%A5%DB">スマホ</a>に送りたい時</h4> <p> </p> <p>PCからURLを送ると </p> <p><img class="hatena-fotolife" title="f:id:sfjmk:20170815224841p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170815/20170815224841.png" alt="f:id:sfjmk:20170815224841p:plain" width="385" /></p> <p> </p> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%DE%A5%DB">スマホ</a>でパッと確認できるので、出先でいちいち検索せずにすみます。</p> <p><img class="hatena-fotolife" title="f:id:sfjmk:20170815224859p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170815/20170815224859.png" alt="f:id:sfjmk:20170815224859p:plain" width="269" /></p> <p> </p> <p> </p> <h4>逆に、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%DE%A5%DB">スマホ</a>で撮った画像/映像をPCに送りたい時も、</h4> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%DE%A5%DB">スマホ</a>で撮ってそのまま送信してしまえば</p> <p><img class="hatena-fotolife" title="f:id:sfjmk:20170815225359p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170815/20170815225359.png" alt="f:id:sfjmk:20170815225359p:plain" width="267" /></p> <p> </p> <p> </p> <p> サクッとPC側で使えます。</p> <p><img class="hatena-fotolife" title="f:id:sfjmk:20170815225023p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170815/20170815225023.png" alt="f:id:sfjmk:20170815225023p:plain" width="330" /></p> <p> </p> <p> </p> <p>  </p> <p>記事でスクショを使いたい場合も同様です。</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:sfjmk:20170815225511p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170815/20170815225511.png" alt="f:id:sfjmk:20170815225511p:plain" width="232" /></p> <p> </p> <p> <img class="hatena-fotolife" title="f:id:sfjmk:20170815225006p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170815/20170815225006.png" alt="f:id:sfjmk:20170815225006p:plain" width="355" /></p> <p> </p> <p> </p> <p> </p> <p>また、一度メッセージを送ってしまえば、Messenger.comを使わなくても、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Facebook">Facebook</a>の画面上から送受信できます。</p> <p> </p> <p><img class="hatena-fotolife" title="f:id:sfjmk:20170815222207p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170815/20170815222207.png" alt="f:id:sfjmk:20170815222207p:plain" /></p> <p> </p> <p> </p> <p>使ってみるとわかりますが、これ、滅茶苦茶便利です。</p> <p>PCと<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%DE%A5%DB">スマホ</a>間で何かを共有したい時は是非使ってみてください!</p> <p> </p> <h3> ※LINEでもできます</h3> <p>自分の場合、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Facebook">Facebook</a> Messengerのほうが利用頻度が高い&amp;履歴がずっと保持されるので、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Facebook">Facebook</a> Messengerを使っていますが、LINEでも同様のことができます。</p> <p> </p> <p>LINEも、自分だけがメンバーのグループを作ることができるので、</p> <p>このようにグループを作ると</p> <p><img class="hatena-fotolife" title="f:id:sfjmk:20170815221457p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170815/20170815221457.png" alt="f:id:sfjmk:20170815221457p:plain" width="193" /></p> <p> </p> <p>グループに投稿することで、PC<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%DE%A5%DB">スマホ</a>間で文字/画像/映像/その他ファイルの共有をすることができます。</p> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%DE%A5%DB">スマホ</a>画面 </p> <p><img class="hatena-fotolife" title="f:id:sfjmk:20170815221503p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170815/20170815221503.png" alt="f:id:sfjmk:20170815221503p:plain" width="193" /></p> <p><img class="hatena-fotolife" title="f:id:sfjmk:20170815221512p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170815/20170815221512.png" alt="f:id:sfjmk:20170815221512p:plain" width="191" /></p> <p> </p> <p>PC画面</p> <p><img class="hatena-fotolife" title="f:id:sfjmk:20170815221555p:plain" src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170815/20170815221555.png" alt="f:id:sfjmk:20170815221555p:plain" width="249" /></p> <p> </p> <p> </p> <p>便利なので是非使ってみてください!</p> <p> </p> <p> </p> sfjmk rmagickがうまく入らないときの解決方法メモ hatenablog://entry/8599973812294654083 2017-01-27T00:00:00+09:00 2017-09-03T19:02:35+09:00 Railsでbundle installする際、rmagickのインストールに失敗したので、解消方法をメモ。 ちなみにMac環境です。(他のOSでも同様の現象が置きた場合は似たような解決方法でいけると思います) bundle installしたところ、以下のようなエラーが出た。 $ bundle install Fetching gem metadata from https://rubygems.org/.......... Fetching version metadata from https://rubygems.org/.. Fetching dependency metadata … <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Rails">Rails</a>でbundle installする際、rmagickのインストールに失敗したので、解消方法をメモ。   ちなみに<a class="keyword" href="http://d.hatena.ne.jp/keyword/Mac">Mac</a>環境です。(他のOSでも同様の現象が置きた場合は似たような解決方法でいけると思います)</p> <p>bundle installしたところ、以下のようなエラーが出た。</p> <pre class="code" data-lang="" data-unlink>$ bundle install Fetching gem metadata from https://rubygems.org/.......... Fetching version metadata from https://rubygems.org/.. Fetching dependency metadata from https://rubygems.org/. Using rake 11.3.0 Using i18n 0.7.0 Using json 1.8.3 Using minitest 5.10.1 Using thread_safe 0.3.5 Using builder 3.2.2 Using erubis 2.7.0 Using mini_portile2 2.1.0 Using rack 1.6.5 Using mime-types-data 3.2016.0521 Using arel 6.0.3 Using debug_inspector 0.0.2 Using byebug 9.0.6 Using mimemagic 0.3.2 Using coderay 1.1.1 Using coffee-script-source 1.11.1 Using execjs 2.7.0 Using thor 0.19.4 Using concurrent-ruby 1.0.2 Using multi_json 1.12.1 Using method_source 0.8.2 Using mysql2 0.4.5 Using slop 3.6.0 Using bundler 1.14.3 Using rdoc 4.3.0 Your user account isn&#39;t allowed to install to the system RubyGems. You can cancel this installation and run: bundle install --path vendor/bundle to install the gems into ./vendor/bundle/, or you can enter your password and install the bundled gems to RubyGems using sudo. Password: Installing rmagick 2.16.0 with native extensions Using sass 3.4.22 Using tilt 2.0.5 Using tzinfo 1.2.2 Using nokogiri 1.6.8.1 Using rack-test 0.6.3 Using mime-types 3.1 Using binding_of_caller 0.7.2 Using coffee-script 2.4.1 Using uglifier 3.0.4 Using figaro 1.1.1 Using sprockets 3.7.0 Using pry 0.10.4 Using sdoc 0.4.2 Gem::Ext::BuildError: ERROR: Failed to build gem native extension. current directory: /private/var/folders/_1/ymtjc6z928g75q5f7s6qtzfc0000gn/T/bundler20170125-72556-zs166vrmagick-2.16.0/gems/rmagick-2.16.0/ext/RMagick /Users/sotarofujimaki/.rbenv/versions/2.3.1/bin/ruby -r ./siteconf20170125-72556-abxlfk.rb extconf.rb --with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include checking for clang... yes checking for Magick-config... no checking for pkg-config... yes checking for outdated ImageMagick version (&lt;= 6.4.9)... no checking for presence of MagickWand API (ImageMagick version &gt;= 6.9.0)... no checking for Ruby version &gt;= 1.8.5... yes checking for stdint.h... yes checking for sys/types.h... yes checking for wand/MagickWand.h... no Can&#39;t install RMagick 2.16.0. Can&#39;t find MagickWand.h. *** extconf.rb failed *** Could not create Makefile due to some reason, probably lack of necessary libraries and/or headers. Check the mkmf.log file for more details. You may need configuration options. Provided configuration options: --with-opt-dir --without-opt-dir --with-opt-include --without-opt-include=${opt-dir}/include --with-opt-lib --without-opt-lib=${opt-dir}/lib --with-make-prog --without-make-prog --srcdir=. --curdir --ruby=/Users/sotarofujimaki/.rbenv/versions/2.3.1/bin/$(RUBY_BASE_NAME) To see why this extension failed to compile, please check the mkmf.log which can be found here: /var/folders/_1/ymtjc6z928g75q5f7s6qtzfc0000gn/T/bundler20170125-72556-zs166vrmagick-2.16.0/extensions/x86_64-darwin-16/2.3.0-static/rmagick-2.16.0/mkmf.log extconf failed, exit code 1 Gem files will remain installed in /var/folders/_1/ymtjc6z928g75q5f7s6qtzfc0000gn/T/bundler20170125-72556-zs166vrmagick-2.16.0/gems/rmagick-2.16.0 for inspection. Results logged to /var/folders/_1/ymtjc6z928g75q5f7s6qtzfc0000gn/T/bundler20170125-72556-zs166vrmagick-2.16.0/extensions/x86_64-darwin-16/2.3.0-static/rmagick-2.16.0/gem_make.out An error occurred while installing rmagick (2.16.0), and Bundler cannot continue. Make sure that `gem install rmagick -v &#39;2.16.0&#39;` succeeds before bundling. </pre> <p>エラーをみるに、rmagickのインストールに失敗してる模様。 rmagickだけ入れようとしてみたり、<a class="keyword" href="http://d.hatena.ne.jp/keyword/imagemagick">imagemagick</a>入れ直したりしてみたけど上手く行かず色々試していた所、以下のページに到達。 <a href="http://kappa-game.hatenadiary.jp/entry/2017/01/25/Rails_%E3%81%AB_ImageMagick_%E3%81%8C%E5%85%A5%E3%82%89%E3%81%9A%E3%81%AB%E7%92%B0%E5%A2%83%E3%81%8C%E5%AE%8C%E5%85%A8%E3%81%AB%E5%A3%8A%E3%82%8C%E3%81%9F%E5%A0%B4%E5%90%88%E3%81%AE%E5%AF%BE%E5%87%A6">Rails に ImageMagick が入らずに環境が完全に壊れた場合の対処法 - カッパでも分かるiOSアプリゲーム開発</a> (とても參考になりました。ありがとうございます。)</p> <p>この方も色々試したみたいだけど、imagemagick7 と imagemagick6のファイルパス混同を解消したところ解決したよう。</p> <p>自分も同様に</p> <pre class="code" data-lang="" data-unlink>brew tap homebrew/versions brew install imagemagick@6 PKG_CONFIG_PATH=/usr/local/opt/imagemagick@6/lib/pkgconfig gem install rmagick</pre> <p>してimagemagick6を入れて、bundle installを再度おこなったところ、うまくインストールできた。</p> sfjmk 読書ノートのとり方とか hatenablog://entry/8599973812294653752 2017-01-10T00:00:00+09:00 2017-09-03T19:01:16+09:00 本を読んでも結構内容を忘れてしまうので、読書ノートでもとろうかなと。 とはいえやり方がよくわからない(純粋に、本読みながらメモとるって難しそう)ので、 參考になりそうなページをメモがてらピックアップしていきます。 読書ノートの作り方・書き方【実例紹介】 - ブックオフオンラインコラム 本の感想のまとめかた~読書ノートを作って、まとめる - ぐるりみち。 本を読みながらメモを取るということ | ビジネス読書会ブログ 学びを豊かにする大学生のための読書メモ - NAVER まとめ 読書ノートを作る手順と読書ノートがもたらす多くの効果。作り込んだ読書ノートはもはや作品となる > 大和屋文庫 <p>本を読んでも結構内容を忘れてしまうので、読書ノートでもとろうかなと。 とはいえやり方がよくわからない(純粋に、本読みながらメモとるって難しそう)ので、 參考になりそうなページをメモがてらピックアップしていきます。</p> <ul> <li><a href="http://pro.bookoffonline.co.jp/book-enjoy/reading-skills/20160604-dokushonote-jitsurei.html">読書ノートの作り方・書き方【実例紹介】 - ブックオフオンラインコラム</a></li> <li><a href="http://yamayoshi.hatenablog.com/entry/2014/02/27/192149">本の感想のまとめかた~読書ノートを作って、まとめる - ぐるりみち。</a></li> <li><a href="http://business-study.com/%E6%9C%AC%E3%82%92%E8%AA%AD%E3%81%BF%E3%81%AA%E3%81%8C%E3%82%89%E3%83%A1%E3%83%A2%E3%82%92%E5%8F%96%E3%82%8B%E3%81%A8%E3%81%84%E3%81%86%E3%81%93%E3%81%A8/">本を読みながらメモを取るということ | ビジネス読書会ブログ</a></li> <li><a href="https://matome.naver.jp/odai/2138698766910883201">学びを豊かにする大学生のための読書メモ - NAVER まとめ</a></li> <li><a href="http://musakuna.com/mk2/?p=2188">読書ノートを作る手順と読書ノートがもたらす多くの効果。作り込んだ読書ノートはもはや作品となる > 大和屋文庫</a></li> </ul> sfjmk スルメを大量購入したらダイエットが捗った hatenablog://entry/8599973812294653190 2017-01-09T07:42:00+09:00 2017-09-03T18:59:35+09:00 1日1記事書くという年初の目標が、既にビハインド状態になってしまってますが、ちゃんと溜めた分を返していきたいと思います笑 学生時代の宿題を思い出してしまいますが…慣れるまで頑張りたいところです。 1日1記事はちょっと無理がある気がしたので、2月はもうちょっとペースダウンさせようと思います。 タイトルについてですが、2016年の12月に入るか入らないかくらいの頃から減量を開始していて、スルメが大いに役立ってます。 まだまだ目標には程遠いのですが、1ヶ月強で5~6kg減ってるので戦果としては悪くないかと。 無事減量目標達成したら、スルメ以外の施策についてもまとめようと思います。 スルメはこの業務用… <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170903/20170903185857.jpg" alt="f:id:sfjmk:20170903185857j:plain" title="f:id:sfjmk:20170903185857j:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>1日1記事書くという年初の目標が、既にビハインド状態になってしまってますが、ちゃんと溜めた分を返していきたいと思います笑 学生時代の宿題を思い出してしまいますが&hellip;慣れるまで頑張りたいところです。 1日1記事はちょっと無理がある気がしたので、2月はもうちょっとペースダウンさせようと思います。</p> <p>タイトルについてですが、2016年の12月に入るか入らないかくらいの頃から減量を開始していて、スルメが大いに役立ってます。 まだまだ目標には程遠いのですが、1ヶ月強で5~6kg減ってるので戦果としては悪くないかと。 無事減量目標達成したら、スルメ以外の施策についてもまとめようと思います。</p> <p>スルメはこの業務用スルメ(あたりめ)を買っていて、既に4パック買ってます。1〜2週間に1パックくらいのペースですね。</p> <iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=70b9-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=B00H99CLKW&linkId=ceca44cdbf2bff9139e1f7913d046608"></iframe> <p>どう役立ってるかというと、空腹を紛らわすのに役立っています。</p> <p>夜(夜じゃなくてもいいですが)、小腹が空いたタイミングでスルメを食べるだけで、空腹感がなくなります。 夕食の量を以前より減らしているのですが、おかげで特に苦痛に感じません。 なんなら夕食がスルメだけでも大丈夫なくらいになりました。</p> <p>普通に深夜にも食べてますが、体重は減ってるので多分問題ないのかなと。</p> <p>調べてみましたが、スルメは低カロリー高タンパクな食材らしいですね。 <a href="https://www.google.co.jp/search?q=%E3%82%B9%E3%83%AB%E3%83%A1+%E3%83%80%E3%82%A4%E3%82%A8%E3%83%83%E3%83%88&amp;oq=%E3%82%B9%E3%83%AB%E3%83%A1%E3%80%80%E3%83%80%E3%82%A4%E3%82%A8%E3%83%83%E3%83%88&amp;aqs=chrome..69i57j0l5.4868j0j4&amp;sourceid=chrome&amp;ie=UTF-8">スルメ ダイエット - Google 検索</a></p> <p>検索結果の中には怪しげなサイトもありますが、一応信憑性がありそうなソースは↓こちら(<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CA%B8%C9%F4%B2%CA%B3%D8%BE%CA">文部科学省</a>の食品成分データベース) <a href="http://fooddb.mext.go.jp/details/details.pl?ITEM_NO=10_10353_6">魚介類/(いか類)/加工品/するめ - 一般成分-無機質-ビタミン類-アミノ酸-脂肪酸-炭水化物-有機酸等</a></p> <p>100gあたり334キロカロリー&タンパク質が69.2gとのこと。</p> <p>買ってみるとわかりますが、100キログラムってかなりの量です。 自分の感覚では、10~20gくらい食べればそれなりに満腹感を得られています。つまり、50カロリー程度。かなり<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%B9%A5%D1">コスパ</a>いいですね。</p> <p>イカ特有の臭いがあるので会社等で食べるのは憚られますが、家に一パック常備しておけば、夜食の誘惑に打ち勝つことができます。 ぜひ試してみてはいかがでしょうか。</p> <iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=70b9-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=B00H99CLKW&linkId=ceca44cdbf2bff9139e1f7913d046608"></iframe> <p>なんか買い物記事が多くなってしまってますが、ちゃんと他のことも書いていこうと思います笑</p> sfjmk 段ボール製の45Lゴミ箱を買った hatenablog://entry/8599973812294684196 2017-01-09T00:00:00+09:00 2017-09-03T20:44:20+09:00 ゴミ出し、面倒くさいですよね。 小まめにゴミ出しができればいいのですが、自分は面倒くさがりなので、普通のゴミ箱だとすぐ満杯になってしまいます。 ゴミ出しの為にゴミを袋に移し替えるのすら面倒なので、45リットルのゴミ袋を床に直置きしてゴミ箱代わりにしたりもしていたのですが、破ける&かさ張ってなかなか微妙です。 45リットルのゴミ箱があれば、いちいち移し替えをしなくていいから楽なんだけどなーと思っていた所、45リットルのダンボール製のゴミ箱を見つけました。 買ってみた所、良い感じだったので紹介します。 4枚入りでこんな感じ。畳むと結構コンパクトです。 この説明書通りにやれば、1個30秒くらいで簡単… <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170903/20170903202006.jpg" alt="f:id:sfjmk:20170903202006j:plain" title="f:id:sfjmk:20170903202006j:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>ゴミ出し、面倒くさいですよね。  </p> <p>小まめにゴミ出しができればいいのですが、自分は面倒くさがりなので、普通のゴミ箱だとすぐ満杯になってしまいます。</p> <p>ゴミ出しの為にゴミを袋に移し替えるのすら面倒なので、45リットルのゴミ袋を床に直置きしてゴミ箱代わりにしたりもしていたのですが、破ける&かさ張ってなかなか微妙です。</p> <p>45リットルのゴミ箱があれば、いちいち移し替えをしなくていいから楽なんだけどなーと思っていた所、45リットルの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C0%A5%F3%A5%DC%A1%BC">ダンボー</a>ル製のゴミ箱を見つけました。</p> <iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=70b9-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=B005417QD4&linkId=dad490d35847d7a7f1f96433154546e1"></iframe> <p>買ってみた所、良い感じだったので紹介します。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20161231/20161231191212.jpg" alt="f:id:sfjmk:20161231191212j:plain" title="f:id:sfjmk:20161231191212j:plain" class="hatena-fotolife" itemprop="image"></span> 4枚入りでこんな感じ。畳むと結構コンパクトです。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170903/20170903204311.jpg" alt="f:id:sfjmk:20170903204311j:plain" title="f:id:sfjmk:20170903204311j:plain" class="hatena-fotolife" itemprop="image"></span> この説明書通りにやれば、1個30秒くらいで簡単に組み立てられます。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20161231/20161231191801.jpg" alt="f:id:sfjmk:20161231191801j:plain" title="f:id:sfjmk:20161231191801j:plain" class="hatena-fotolife" itemprop="image"></span> 組み立てるとこんな感じ。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C0%A5%F3%A5%DC%A1%BC">ダンボー</a>ル製なので、使わなくなったら畳んでしまっておけますし、なんなら簡単に捨てられます。しかも安い。 ゴミ箱にそんなに強度求めてないですし、段ボールで十分です。</p> <p>調べてみたら、<a href="https://www.google.co.jp/search?sourceid=chrome-psyapi2&amp;ion=1&amp;espv=2&amp;ie=UTF-8&amp;q=%E6%AE%B5%E3%83%9C%E3%83%BC%E3%83%AB%E5%AE%B6%E5%85%B7&amp;oq=%E3%83%80%E3%83%B3%E3%83%9C%E3%83%BC%E3%83%ABkagu&amp;aqs=chrome.1.69i57j0l5.4233j0j4">段ボール家具</a>とかいうジャンルがあるのですね。 こういったかさ張る家具(?)はいざ処分するとなったら粗大ごみに出さなきゃいけなかったりと、面倒なので、段ボールで機能が果たせるものは段ボール製のものに置き換えていくのもアリな気がしました。 <span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170109/20170109060454.jpg" alt="f:id:sfjmk:20170109060454j:plain" title="f:id:sfjmk:20170109060454j:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>まあ、分別用に複数置くとスペースはそれなりに食ってしまうのですが、僕みたいな面倒くさがりの人にはおすすめです。</p> <iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=70b9-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=B005417QD4&linkId=dad490d35847d7a7f1f96433154546e1"></iframe> sfjmk すべり止めテープで机の前進を阻止する hatenablog://entry/8599973812294676826 2017-01-02T00:00:00+09:00 2017-09-03T20:22:27+09:00 GERTON テーブル - IKEA IKEAのこういう机を使っていて、壁に寄せずに部屋の真ん中に配置しているのですが、 脚にすべり止めがついておらず、気がついたら机がどんどん前にいってしまっていっていました。 なので、この滑り止めテープを購入。 説明見る感じだとカーペット用っぽいですが、幅が3cmなので、長さ3cmくらいで切れば机の脚にもフィット。 まだ使い始めて数日ですが、いまのところ机は前進せず良い感じです。少し押したくらいでは動きません。 机がどんどん前に行っちゃう人は是非使ってみてはいかがでしょうか。 <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170903/20170903201949.jpg" alt="f:id:sfjmk:20170903201949j:plain" title="f:id:sfjmk:20170903201949j:plain" class="hatena-fotolife" itemprop="image"></span> <a href="http://www.ikea.com/jp/ja/catalog/products/S99046438/">GERTON テーブル - IKEA</a></p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/IKEA">IKEA</a>のこういう机を使っていて、壁に寄せずに部屋の真ん中に配置しているのですが、 脚にすべり止めがついておらず、気がついたら机がどんどん前にいってしまっていっていました。</p> <p>なので、この滑り止めテープを購入。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170903/20170903202012.jpg" alt="f:id:sfjmk:20170903202012j:plain" title="f:id:sfjmk:20170903202012j:plain" class="hatena-fotolife" itemprop="image"></span></p> <iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=70b9-22&o=9&p=8&l=as4&m=amazon&f=ifr&ref=as_ss_li_til&asins=B0091GLJFY&linkId=f312d9c9a44ca38bad2e8f02585e9e5f"></iframe> <p>説明見る感じだとカーペット用っぽいですが、幅が3cmなので、長さ3cmくらいで切れば机の脚にもフィット。 まだ使い始めて数日ですが、いまのところ机は前進せず良い感じです。少し押したくらいでは動きません。 机がどんどん前に行っちゃう人は是非使ってみてはいかがでしょうか。</p> sfjmk 2017年 あけましておめでとうございます hatenablog://entry/8599973812294652748 2017-01-01T00:00:00+09:00 2017-09-03T18:57:16+09:00 このブログを読んでくださってる方がどれくらいいるか分かりませんが、今年もどうぞよろしくお願いいたします。 昨年は気がついたら一年が終わってしまっていた気がするので、ちゃんと今年は目標を立てつつ生きていきたいと思います。 仕事でも痛感しますが、マイルストーンを置くって大事ですね。。。 今年の目標はこんな感じ。具体的な実行計画はこれから立てていこうと思います。 (ここに書いたの以外にも色々あったりはしますが、それはブログに書かずにノートに留めておきます。) 音楽活動を軌道にのせる ・・・去年の暮れあたりから音楽活動を再開してみました。 Tokyo Effectという名前でやってます。 https:… <p>このブログを読んでくださってる方がどれくらいいるか分かりませんが、今年もどうぞよろしくお願いいたします。<br/> 昨年は気がついたら一年が終わってしまっていた気がするので、ちゃんと今年は目標を立てつつ生きていきたいと思います。 <br> 仕事でも痛感しますが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DE%A5%A4%A5%EB%A5%B9%A5%C8%A1%BC%A5%F3">マイルストーン</a>を置くって大事ですね。。。<br/> <br> 今年の目標はこんな感じ。具体的な実行計画はこれから立てていこうと思います。 <br/> (ここに書いたの以外にも色々あったりはしますが、それはブログに書かずにノートに留めておきます。)</p> <ul> <li><p>音楽活動を軌道にのせる ・・・去年の暮れあたりから音楽活動を再開してみました。 Tokyo Effectという名前でやってます。 <a href="https://www.facebook.com/tokyoeffect/">https://www.facebook.com/tokyoeffect/</a> 再開と言っても時々遊びでピアノを弾いたりすることはありましたが、ちゃんと曲を練ってレコーディングまでするのは結構久しぶりです。 割ける時間には限りがありますが、やるからには少しでも多くの人に届くように頑張りたいと思います。</p></li> <li><p>今作ってる<a class="keyword" href="http://d.hatena.ne.jp/keyword/WEB%A5%B5%A1%BC%A5%D3%A5%B9">WEBサービス</a>を軌道に載せる ・・・あんまり言ってませんが一個プレリリースをしているサービスがあるので、こちらも軌道に乗ったと言える状態に持っていきたいです。</p></li> <li><p>アプリをリリースする ・・・昨年末あたりに<a class="keyword" href="http://d.hatena.ne.jp/keyword/iPhone%A5%A2%A5%D7%A5%EA">iPhoneアプリ</a>を作りかけたものの、他のことで忙しくなって中断してしまったので、今年はクソアプリでもいいので何かしら出したいと思います。やっぱ熱量があるうちに一気に作らないとだめですねこういうのは。。。</p></li> <li><p>他にも<a class="keyword" href="http://d.hatena.ne.jp/keyword/WEB%A5%B5%A1%BC%A5%D3%A5%B9">WEBサービス</a>をいくつか作る。 ・・・0から1を作ることから少し遠ざかってしまっていたので、しょぼいサービスでもいいのでどんどん出していく癖を作りたいと思います。</p></li> <li><p>英語上達</p></li> <li><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/WEB%A5%B5%A1%BC%A5%D3%A5%B9">WEBサービス</a>/アプリを色々みるようにする。 ・・・去年のはじめのころまでは、それなりにアンテナを張っていましたが、去年の後半は摂取する情報が減ってしまった気がして反省してます。今年はもうちょっと新し情報に触れるようにしていきたい。</p></li> <li><p>健康的になる ・・・まあ主に減量ですね。最近順調に減ってきてはいますが、体力不足も感じる今日この頃なので、体力もつけていきたいと思います。</p></li> <li><p>部屋を綺麗な状態に保つ</p></li> <li><p>ブログを書く頻度を上げる。 ブログは去年全然書けていなかったので、1月中はどんなショボい記事でもいいので毎日書くようにしたいと思います。(ただ、突発的な用事が入ったりすることもあると思うので、日付またぎ&amp;少し溜めてしまうのはOKとしたい)</p></li> </ul> <p>後から足していくかもしれませんが、とりあえずこんな感じで。<br/> 今年もよろしくお願いいたします!</p> sfjmk MacのSayコマンドを使ってPPAPを演奏してみた hatenablog://entry/8599973812294652434 2016-12-08T00:00:00+09:00 2017-09-03T18:55:44+09:00 この記事は macOS Advent Calendar 2016 - Qiita 8日目の記事です。 みなさん、MacのSayコマンド、使ってますか? 使い道がいまいち謎な機能ですが、最近Sayコマンドを使った演奏動画を撮ったところ、このように記事に取り上げていただきました。 カッコいい!「MacのSayコマンドを使ってPPAPを演奏してみた」動画が凄い | 男子ハックカッコいい!「MacのSayコマンドを使ってPPAPを演奏してみた」動画が凄い | 男子ハック PPAP をMac (ターミナル ) リミックスPPAP をMac (ターミナル ) リミックス 今回の演奏を通してSayコマンドの… <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170903/20170903185522.jpg" alt="f:id:sfjmk:20170903185522j:plain" title="f:id:sfjmk:20170903185522j:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>この記事は <a href="http://qiita.com/advent-calendar/2016/mac">macOS Advent Calendar 2016 - Qiita</a> 8日目の記事です。</p> <p>みなさん、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Mac">Mac</a>のSayコマンド、使ってますか? 使い道がいまいち謎な機能ですが、最近Sayコマンドを使った演奏動画を撮ったところ、このように記事に取り上げていただきました。</p> <blockquote class="embedly-card" data-card-align="left" data-card-type="article" data-card-controls="0" data-card-key="766026660f3b4bc99ee26b68e3777147"><h4><a href="http://www.danshihack.com/2016/11/30/junp/ppap-say-command.html">カッコいい!「MacのSayコマンドを使ってPPAPを演奏してみた」動画が凄い | 男子ハック</a><h4><p>カッコいい!「<a class="keyword" href="http://d.hatena.ne.jp/keyword/Mac">Mac</a>のSayコマンドを使って<a class="keyword" href="http://d.hatena.ne.jp/keyword/PPAP">PPAP</a>を演奏してみた」動画が凄い | 男子ハック</p></blockquote> <script async src="//cdn.embedly.com/widgets/platform.js" charset="UTF-8"></script> <blockquote class="embedly-card" data-card-align="left" data-card-type="article" data-card-controls="0" data-card-key="766026660f3b4bc99ee26b68e3777147"><h4><a href="http://attrip.jp/182938/">PPAP をMac (ターミナル ) リミックス</a><h4><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/PPAP">PPAP</a> を<a class="keyword" href="http://d.hatena.ne.jp/keyword/Mac">Mac</a> (ターミナル ) リミックス</p></blockquote> <p> <script async src="//cdn.embedly.com/widgets/platform.js" charset="UTF-8"></script>今回の演奏を通してSayコマンドの可能性を感じたので、作ったプロセスを公開してみます。</p> <p>完成した動画はこちら。</p> <iframe width="560" height="315" src="https://www.youtube.com/embed/WR66XA5v4yI" frameborder="0" allowfullscreen></iframe> <h2>Sayコマンドとは</h2> <p>Sayコマンドは、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Mac">Mac</a>に標準でついている機能で、ターミナル等から</p> <pre class="code" data-lang="" data-unlink>$ say &#39;PPAP&#39;</pre> <p>のように打つと、</p> <iframe width="560" height="315" src="https://www.youtube.com/embed/d4p_csXjqdg" frameborder="0" allowfullscreen></iframe> <p>このように喋ります。</p> <p>これだけならまだ分かるのですが、この機能、無駄に無駄に10種類も言葉があります。</p> <p>詳しくはこちらをご覧ください。</p> <blockquote class="embedly-card" data-card-align="left" data-card-type="article" data-card-controls="0" data-card-key="766026660f3b4bc99ee26b68e3777147"><h4><a href="http://qiita.com/zakuroishikuro/items/0c17acb21f119647c205">Macのsayコマンドの使い方 - Qiita</a><h4><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Mac">Mac</a>のsayコマンドの使い方 - Qiita</p></blockquote> <p> <script async src="//cdn.embedly.com/widgets/platform.js" charset="UTF-8"></script></p> <p>なんでこんなにバリエーションがあるのかイマイチ謎ですが謎ですが、、、</p> <p><strong>とりあえず楽器にしちゃえばいい</strong></p> <p>ということで、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Mac">Mac</a>のSayコマンドを楽器にして演奏してみました。</p> <h2>メンバー</h2> <p>最近よく一緒にスタジオにいってる以下のメンバーで一緒に演奏しました。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Mac">Mac</a> <img src="https://i.gyazo.com/4b2d1b5bf36e673bca7db83c0c66119e.png" height="100" width="100"/> <strong>Bob</strong> (<a href="https://www.facebook.com/takayuki.onuki?fref=ts">Facebook</a>) <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D5%A5%EA%A1%BC%A5%E9%A5%F3%A5%B9">フリーランス</a>エンジニア(楽器未経験!)</p> <p>Drums <img src="https://i.gyazo.com/8ef28addd555dfdc935c6f9ee6d25e7b.png" height="100" width="100"/> <strong>Junpei Mori</strong> (<a href="https://www.facebook.com/jumpeimori1112?fref=ts">Facebook</a>) ヒカリエの営業マン</p> <p>Keyboard <img src="https://i.gyazo.com/bd6db3de6bbeaaafaa43e33b51897bbc.png" height="100" width="100"/> <strong>Sotaro Fujimaki</strong> (自分) (<a href="https://www.facebook.com/sotaro.fujimaki">Facebook</a>, <a href="https://twitter.com/macky256">Twitter</a>) <a class="keyword" href="http://d.hatena.ne.jp/keyword/%B5%AA%C8%F8%B0%E6%C4%AE">紀尾井町</a>のエンジニア</p> <p>最近一緒に演奏した動画を上げてるのでよかったら見てみてください↓</p> <iframe width="560" height="315" src="https://www.youtube.com/embed/h6aySdaou88" frameborder="0" allowfullscreen></iframe> <h2>準備</h2> <p>この準備の部分が一番重要です。 Say Commandを使って演奏することが決まったのはいいものの、毎回律儀に</p> <pre class="code" data-lang="" data-unlink>$say -v say -v Fred &#39;PPAP&#39; -r 150</pre> <p>とターミナル上で打っていては当然演奏が間に合いません。 <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AF%A5%EA%A5%C3%A5%D7%A5%DC%A1%BC%A5%C9">クリップボード</a>を使ったり<a class="keyword" href="http://d.hatena.ne.jp/keyword/history">history</a>からコマンドを拾って打っても安定した演奏をするので難しかったです。</p> <p>が、こんな時に役立つのがalias機能です。 こんなzshrcにこんな記述をして、sayコマンドにaliasを貼ってみました。</p> <pre class="code" data-lang="" data-unlink>say_message () { if [ -z $2 ]; then speed=150 else speed=$2 fi echo &#34;say -v Fred &#39;$1&#39; -r ${speed}&#34; say -v Fred $1 -r ${speed}&amp; } alias 0=&#34;say_message &#39;P P A P&#39;&#34; alias 1=&#34;say_message &#39;I have a pen.&#39;&#34; alias 2=&#34;say_message &#39;I have an apple&#39;&#34; alias 3=&#34;say_message &#39;Unn&#39;&#34; alias 4=&#34;say_message &#39;Apple pen&#39;&#34; alias 5=&#34;say_message &#39;I have a pen.&#39;&#34; alias 6=&#34;say_message &#39;I have pineapple&#39;&#34; alias 7=&#34;say_message &#39;Unn&#39;&#34; alias 8=&#34;say_message &#39;Pineapple pen&#39;&#34; alias 9=&#34;say_message &#39;Apple pen&#39;&#34; alias q=&#34;say_message &#39;Pineapple pen&#39;&#34; alias w=&#34;say_message &#39;Unn&#39;&#34; alias e=&#34;say_message &#39;Pen pinapple apple pen&#39; 200&#34; alias r=&#34;say_message &#39;Pen pinapple apple pen&#39; 100&#34; alias a=&#34;say_message &#39;Pen&#39;&#34; alias s=&#34;say_message &#39;Pai napple Pen&#39;&#34; alias d=&#34;say_message &#39;Apple Pen&#39;&#34; alias f=&#34;say_message &#39;Pen&#39;&#34; alias z=&#34;say_message &#39;Newton discovered the law when he saw an apple fall from a tree.&#39;&#34; alias x=&#34;say_message &#39;PINEAPPLE CUTTER AND PINEAPPLE CUTTER DEVICE&#39;&#34; alias c=&#34;say_message &#39;The pai napple is a tropical American plant bearing a large fleshy edible fruit with a terminal tuft of stiff leaves&#39;&#34; alias v=&#34;say_message &#39;The apple is the pomaceous fruit of the apple tree, species Malus domestica in the rose family.It is one of the most cultivated tree fruits, and the most widely known of the many members of genus Malus that are used by humans.&#39;&#34;</pre> <p>これをセットしておくと、キーボード1文字打ってenterを押すだけで、Fredに任意の言葉を喋らせることができます。 (say_massege内のechoがなくても喋ってくはくれますが、演出上コマンドが出てたほうが映像映えするのでechoさせました)</p> <p>また、</p> <pre class="code" data-lang="" data-unlink>say -v Fred $1 -r ${speed}&amp;</pre> <p>このように最後に&amp;をつけてバックグラウンド実行させることで、コマンド連打も可能です。(これをつけないと、喋り終わるまで次のコマンドを打てません)</p> <p>声は10種類ある中でも、Fredのシブさが気に入ったのでFredをチョイスしました。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Mac">Mac</a>の奏法問題が解決したので、あとは良い感じのリフを考えて良い感じの演奏をするだけです。</p> <p>演奏渋い声に合わせて大人っぽいアレンジがいいかなーと思ったので、まずピアノと<a class="keyword" href="http://d.hatena.ne.jp/keyword/Mac">Mac</a>でざっくりとしたデモを作りました。</p> <iframe width="100%" height="166" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/296123892&amp;color=ff5500&amp;auto_play=false&amp;hide_related=false&amp;show_comments=true&amp;show_user=true&amp;show_reposts=false"></iframe> <p>こんな感じ</p> <p>これで事前準備は完了です。</p> <h2>スタジオへ</h2> <p>そして、メンバーとスタジオへ行って演奏と撮影をします。</p> <h3>1度目のスタジオ</h3> <p>使ったスタジオはサウンドスタジオ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%CE%A5%A2">ノア</a>です。バンドマンには定番ですね。 <img src="https://i.gyazo.com/4ac0b33a568320627082eecd349df3f1.png" alt="" /> <img src="https://i.gyazo.com/810282e63042c420502f4db9fcf211db.png" alt="" /> <img src="https://i.gyazo.com/44d92efbaad98f0493d9b37f1f6d5b01.png" alt="" /> スタジオ自体は2~3時間とってたものの、他の曲を録ったりもしてたので、<a class="keyword" href="http://d.hatena.ne.jp/keyword/PPAP">PPAP</a>に関しては1時間くらい使って練習&amp;撮影。 デモを元に、演奏しながらアレンジを作り込んでいきました。</p> <p>まあ、それっぽくはなりましたが、「もっといけるよね」感があったので、もう一回スタジオをとって撮り直すことにしました。</p> <p>ちなみに1回目はこんな感じ</p> <iframe width="560" height="315" src="https://www.youtube.com/embed/iHS6qOD7B4A" frameborder="0" allowfullscreen></iframe> <h3>2度目のスタジオ</h3> <p>2度目も同じく<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%CE%A5%A2">ノア</a>を利用。 <img src="https://i.gyazo.com/9dff8389a03059e3e25150cb05cec1b9.png" alt="" /></p> <p>最近色々動画を撮ってたカット割りがないと とはいいつつも、そんなに良いカメラを持ってるわけではないので、 <img src="https://i.gyazo.com/3db0252e3dbaab1c01b1e4f7a066b4aa.png" alt="" /> こんな風に各自の<a class="keyword" href="http://d.hatena.ne.jp/keyword/iPhone">iPhone</a>/<a class="keyword" href="http://d.hatena.ne.jp/keyword/iPod%20Touch">iPod Touch</a>をマイクスタンドにしてみました。 マイクスタンドは自由自在に位置を調整できますし、<a class="keyword" href="http://d.hatena.ne.jp/keyword/iPhone">iPhone</a>なら画質もそれなりですし、結構使えると思うので今度スタジオに入る時は是非試してみてください。</p> <p>そして再度撮影。 <img src="https://i.gyazo.com/bdd287326f26e071d923023dfac6d4d7.png" alt="" /> 二回目はキメの部分をいくつか用意したり、Keyboardのソロのときには長文を喋らせる(超暇な人は文章の内容調べてみてください笑)等、色々と手を加えてみました。</p> <p>今度は結構良い感じになったと思います。</p> <h2>編集作業</h2> <p>動画は撮れたのであとは編集するだけです。 <img src="https://i.gyazo.com/18243e459df36464300d248d84ecfbef.png" alt="" /> <a class="keyword" href="http://d.hatena.ne.jp/keyword/iMovie">iMovie</a>はどうやら2トラックしか編集できないようなので、Junpei moriが気合で編集してましたw (Final Cutを使えば複数トラックの映像も簡単に編集できるっぽいですがw)</p> <p>最初にこんな感じでテキストベースでざっくりタイムラインを作っておくとイメージの共有がしやすいです。</p> <pre class="code" data-lang="" data-unlink>最初にボブのシーン 0:00 全体 0:08 ピアノ 0:13 (イントロ)全体 0:29 (ドラムだけ) ボブ 0:33 (1ループ目開始) 全体 -- ボブをところどころはさんでいく 0:51 (2ループ目開始) ピアノ 0:57 (Un*3+Apple Pen)ボブ 1:01 全体 1:10 (3ループ目開始) 1:28 (ドラムキメ開始) ピアノ 1:30 全体 -- 適当に割る 1:44 (キメラスト&amp;ピアノソロ開始) ピアノ 1:50 (セリフ開始) ボブ 1:50 全体 -- 適当に割る 2:20 ソロラスト ピアノとボブ交互 2:22(ラストループ) 全体 </pre> <p>いきなり演奏動画に入ってもよくわからない思うので、Sayコマンドの意味が分かるような描写も最初に軽く入れてみました。</p> <h2>公開</h2> <iframe width="560" height="315" src="https://www.youtube.com/embed/WR66XA5v4yI" frameborder="0" allowfullscreen></iframe> <p>編集も無事終わったので公開。</p> <p>シェアしてくださった皆さんありがとうございました。 というわけで、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Mac">Mac</a>のSayコマンド、地味に演奏に使えそうなので、皆さんも使ってみてはいかがでしょうか!</p> <p>↓<a class="keyword" href="http://d.hatena.ne.jp/keyword/YouTube">YouTube</a>チャンネル作ってみました。最近の演奏動画色々載せてます。 色々と面白い音楽作っていこうと思ってるので、よかったらチャンネル登録お願いします!</p> <script src="https://apis.google.com/js/platform.js"></script> <div class="g-ytsubscribe" data-channelid="UCnYC0T8KKK1ZuUqj-1yJIAw" data-layout="full" data-count="hidden"></div> sfjmk Herokuでmasterではないブランチの中身をデプロイする方法 hatenablog://entry/8599973812294652015 2016-12-07T00:00:00+09:00 2017-09-03T18:53:34+09:00 Herokuの使い方で少しハマったのでメモ。 my-branchというブランチの中身をHerokuにpushしたいとする。 普通にremoteのmasterブランチにpushする感覚で $ git push heroku master したところ、反映されなかった。(masterが反映される) $ git push heroku my-branch:master すると、my-branchの中身が反映されるっぽい。 <p>Herokuの使い方で少しハマったのでメモ。</p> <p>my-branchというブランチの中身をHerokuにpushしたいとする。</p> <p>普通にremoteのmasterブランチにpushする感覚で</p> <pre class="code" data-lang="" data-unlink>$ git push heroku master</pre> <p>したところ、反映されなかった。(masterが反映される)</p> <pre class="code" data-lang="" data-unlink>$ git push heroku my-branch:master</pre> <p>すると、my-branchの中身が反映されるっぽい。</p> sfjmk Macでsedコマンドが思うように動かなくてハマった hatenablog://entry/8599973812294651725 2016-12-01T00:00:00+09:00 2017-09-03T18:52:18+09:00 というメモ。 とあるディレクトリ以下の.gitディレクトリを除いた全ファイル内の stringA という文字列を stringB という文字列に置換したい場合、 Linuxだと $grep -lr stringA * | grep -v '.git' | xargs sed -i 's/stringA/stringB/g' のようにすれば置換できるはずだが、Mac上で打ったら $ grep -lr stringA * | grep -v '.git' | xargs sed -i 's/stringA/stringB/g' sed: 1: "testfile": undefined label… <p>というメモ。</p> <p>とある<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リ以下の.git<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リを除いた全ファイル内の<br/> stringA<br/> という文字列を<br/> stringB<br/> という文字列に置換したい場合、<br/> <a class="keyword" href="http://d.hatena.ne.jp/keyword/Linux">Linux</a>だと</p> <pre class="code" data-lang="" data-unlink>$grep -lr stringA * | grep -v &#39;.git&#39; | xargs sed -i &#39;s/stringA/stringB/g&#39;</pre> <p>のようにすれば置換できるはずだが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Mac">Mac</a>上で打ったら</p> <pre class="code" data-lang="" data-unlink>$ grep -lr stringA * | grep -v &#39;.git&#39; | xargs sed -i &#39;s/stringA/stringB/g&#39; sed: 1: &#34;testfile&#34;: undefined label &#39;estfile&#39;</pre> <p>こんな風にエラーが出てうまくいかなかった。</p> <p>しばらくハマったが、</p> <pre class="code" data-lang="" data-unlink>$grep -lr stringA * | grep -v &#39;.git&#39; | xargs sed -i &#34;&#34; &#39;s/stringA/stringB/g&#39;</pre> <p>このように -i の後に &ldquo;&rdquo; を入れるとちゃんと動作した。</p> <p><a href="http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230879/?rt=nocnt">Linuxコマンド集 - 【 sed 】 文字列の置換,行の削除を行う:ITpro</a></p> sfjmk LINE Notifyでコードから通知してみた hatenablog://entry/8599973812294695835 2016-10-07T00:00:00+09:00 2017-09-03T21:17:18+09:00 以前からLINEではMessaging APIが提供されてましたが、最近また新たにLINE Notifyとかいうのが出たみたいです。 【LINE】chatbotの開発・普及に向けて新たな展開を発表、新たなMessaging APIを公開し、開発者への正式提供を開始 | LINE Corporation | ニュース LINE、外部との通知連携サービス「LINE Notify」発表 GitHub、IFTTT、Mackerelと連携 - ITmedia ニュース Messaging APIが出た時も一通り触ってみたりして、その時は結構使うの(というか使うまでの準備が)面倒だなーという印象があったの… <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170903/20170903211709.png" alt="f:id:sfjmk:20170903211709p:plain" title="f:id:sfjmk:20170903211709p:plain" class="hatena-fotolife" itemprop="image"></span> 以前からLINEではMessaging <a class="keyword" href="http://d.hatena.ne.jp/keyword/API">API</a>が提供されてましたが、最近また新たにLINE Notifyとかいうのが出たみたいです。<br/> <a href="https://linecorp.com/ja/pr/news/ja/2016/1516">【LINE】chatbotの開発・普及に向けて新たな展開を発表、新たなMessaging APIを公開し、開発者への正式提供を開始 | LINE Corporation | ニュース</a></p> <p><a href="http://www.itmedia.co.jp/news/articles/1609/29/news112.html">LINE、外部との通知連携サービス「LINE Notify」発表 GitHub、IFTTT、Mackerelと連携 - ITmedia ニュース</a></p> <p>Messaging <a class="keyword" href="http://d.hatena.ne.jp/keyword/API">API</a>が出た時も一通り触ってみたりして、その時は結構使うの(というか使うまでの準備が)面倒だなーという印象があったのですが、今回は簡単に使えるようです。<br/> LINEの<a class="keyword" href="http://d.hatena.ne.jp/keyword/API">API</a>はツール用途というかあくまでビジネス用途がメインのイメージがあったのですが、いきなりハッカブルなものを出してきて驚きました。</p> <p>面白そうなのでちょっといじってみます。</p> <h2>できること</h2> <p>LINE Notifyアカウントを友だち追加/グループ追加するだけで、<a class="keyword" href="http://d.hatena.ne.jp/keyword/API">API</a>経由でスレッド内にLINE Notifyアカウントが投稿できるようになります。<br/> まあ要するにSlack <a class="keyword" href="http://d.hatena.ne.jp/keyword/Bot">Bot</a>みたいなものが簡単に作れます。</p> <p>以前から提供されていたMesseging <a class="keyword" href="http://d.hatena.ne.jp/keyword/API">API</a>とは別物なのかなーと思いましたが、以下のページをみてみると、どうやらMesseging <a class="keyword" href="http://d.hatena.ne.jp/keyword/API">API</a>を利用した一機能のようです。</p> <p><a href="https://business.line.me/ja/services/bot">Messaging APIのご紹介 | LINE Business Center</a></p> <p>Messaging <a class="keyword" href="http://d.hatena.ne.jp/keyword/API">API</a>を使って<a class="keyword" href="http://d.hatena.ne.jp/keyword/Bot">Bot</a>を作ろうとすると、自前でサーバー用意して、コールバックURLを指定する必要があったり、証明書を用意する必要があったりと何かと面倒でした。</p> <p>が、LINE Notifyだとこの辺の準備をする必要がなく、tokenをつけてメッセージ内容をpostするだけで、LINEに投稿することができます。<br/> (ただし、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Bot">Bot</a>→ユーザーへの一方通行で、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Bot">Bot</a>側への問いかけとかはできさそう)</p> <h2>この記事のゴール</h2> <p>こんな風に、コードの中から通知するところまでやってみます。</p> <p>こんな感じ<br/> <img src="https://gyazo.com/f5a72262c60c0d9cd228869c35338227.png" alt="" /></p> <h2>準備</h2> <p>(一通りいじった後に手順確認したので、もしかしたら1回目だと手順が違うかもしれません。ただ、大まかな流れは変わらないはずです。もしかしたら事前に <a href="https://notify-bot.line.me/ja/">LINE Notify</a> でLINE Notifyを友達追加する必要があったかも。)</p> <p>LINE Notifyのページにアクセス<br/> <a href="https://notify-bot.line.me/ja/">LINE Notify</a> <span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170903/20170903205613.png" alt="f:id:sfjmk:20170903205613p:plain" title="f:id:sfjmk:20170903205613p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>ログインします<br/> <span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170903/20170903205633.png" alt="f:id:sfjmk:20170903205633p:plain" title="f:id:sfjmk:20170903205633p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>こんなページに遷移しますしますがが、通知するだけならサービスの登録は必要ないので、右上のメニューから、「マイページ」へ<br/> <span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170903/20170903205626.png" alt="f:id:sfjmk:20170903205626p:plain" title="f:id:sfjmk:20170903205626p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>アクセス<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C8%A1%BC%A5%AF">トーク</a>ンの発行をします。<br/> <span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170903/20170903205622.png" alt="f:id:sfjmk:20170903205622p:plain" title="f:id:sfjmk:20170903205622p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>送信対象のグループを選択<br/> <img src="https://i.gyazo.com/5889c3cabbbb1ae385d4fcc051cdd706.png" alt="" /></p> <p>これで発行されたので、コピーしておいてください。<br/> <img src="https://i.gyazo.com/6fa9a3656ea05d78de89237f1a9feb30.png" alt="" /></p> <p>(確かこの辺で)LINE Notifyからメッセージが届きます。<br/> <img src="https://i.gyazo.com/8f01a4588cffdc09fd11a3f94ce876a1.png" alt="" /></p> <p>通知したいグループにLINE Notifyを招待しましょう。(LINE Notifyからの1対1の通知ならこの手順はいらないはずです)<br/> <img src="https://i.gyazo.com/25daca19129f6febd57f286026631014.png" alt="" /></p> <p>これで準備はOKです。</p> <h2>使ってみる</h2> <h3>とりあえず<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%DE%A5%F3%A5%C9%A5%E9%A5%A4%A5%F3">コマンドライン</a>からメッセージを送って確認</h3> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/API">API</a>のドキュメントははこちら<br/> <a href="https://notify-bot.line.me/static/pdf/line-notify-api.pdf">line-notify-api.pdf</a></p> <p>今回使うパラメータはこのへんです。<br/> <span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170903/20170903205719.png" alt="f:id:sfjmk:20170903205719p:plain" title="f:id:sfjmk:20170903205719p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>まず<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B3%A5%DE%A5%F3%A5%C9%A5%E9%A5%A4%A5%F3">コマンドライン</a>から試してみます。</p> <p>XXXXXXXXXXとなってるとこを<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C8%A1%BC%A5%AF">トーク</a>ンに置き換えてください。</p> <p>こう叩くと、</p> <pre class="code" data-lang="" data-unlink>$ curl -X POST -H &#39;Authorization: Bearer XXXXXXXXXX&#39; -F &#39;message=テスト通知だよー&#39; https://notify-api.line.me/api/notify</pre> <p>こんな風にメッセージを送れます。</p> <p><img src="https://i.gyazo.com/a28adaacd6f55948491f7e68756baf47.png" alt="" /></p> <p>画像つきでメッセージを送る場合はこう。</p> <pre class="code" data-lang="" data-unlink>$ curl -X POST -H &#39;Authorization: Bearer XXXXXXXXXX&#39; -F &#39;message=テスト通知だよー&#39; -F &#39;imageThumbnail=https://i.gyazo.com/16cb870aba18e192d158dc085bba53d1.png&#39; -F &#39;imageFullsize=https://i.gyazo.com/16cb870aba18e192d158dc085bba53d1.png&#39; https://notify-api.line.me/api/notify</pre> <p>imageThumbnailとimageFullsizeに画像URLを渡します。</p> <p><img src="https://i.gyazo.com/f5a72262c60c0d9cd228869c35338227.png" alt="" /></p> <p>ソースの中からだとこんな感じ。</p> <pre class="code" data-lang="" data-unlink># ruby require &#39;net/http&#39; require &#39;uri&#39; require &#39;json&#39; token = &#39;XXXXXXXXXX&#39; uri = URI.parse(&#39;https://notify-api.line.me/api/notify&#39;) http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true http.start do header = {} header[&#34;Authorization&#34;] = &#39;Bearer &#39; + token header[&#34;Content-Type&#34;] = &#39;application/x-www-form-urlencoded;charset=UTF-8&#39; request = Net::HTTP::Post.new(uri.path, header) request.set_form_data({message: &#39;テスト通知だよー&#39;, imageThumbnail: &#39;https://i.gyazo.com/16cb870aba18e192d158dc085bba53d1.png&#39;, imageFullsize: &#39;https://i.gyazo.com/16cb870aba18e192d158dc085bba53d1.p ng&#39;}) response = http.request(request) puts response.body end</pre> <p>こうすると、先ほどの例と同様にこんな感じで通知がきます。<br/> <img src="https://i.gyazo.com/f5a72262c60c0d9cd228869c35338227.png" alt="" /></p> <p>サービス提供というよりかは、自分用の便利ツールと言うか立ちにはなると思いますが、色々できそうですね。<br/> コンバージョンの通知だったり、ユーザーからの問い合わせの通知だったり、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B4%A5%B5%A1%BC%A5%C1">エゴサーチ</a>結果の通知だったり、アラート通知だったり、、、</p> <p>まあ、Slack使えばいいという感じもしますが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AE%A1%BC%A5%AF">ギーク</a>じゃないコミュニティとかで使うときにはLINEでこういう通知をするのもいいかもしれません。</p> <p>他サービスとの連携とか簡単にもできるっぽいのでIFTTTとかと組み合わせたら、プログラム書かなくても色々試せるので(例えば雨が降りそうな日は通知するとか、キーワードに引っかかったニュースを通知するとか?)、IFTTTとの連携も試してみると良いかもしれません。</p> sfjmk YouTubeをラジオ化するChrome Extensionを作りました hatenablog://entry/8599973812294702495 2016-09-25T17:50:00+09:00 2017-09-03T21:39:51+09:00 YouTubeをラジオ化するChrome Extension(拡張機能) 「Listen Tube」 を作ってみたので、その流れを書こうと思います。 こんな風にYouTubeで動画を表示させずに音だけを流せるようになります。 公開したChrome Extensionはこちら。 Listen Tube - Chrome ウェブストア 作業用BGMを聴くためにYouTubeを開いたのに、気がついたら関係ない動画を観ちゃってる問題 作業中にBGMを聴きたい時はYouTubeをよく利用する方は結構多いと思います。 簡単に曲が探せますし、勝手に次の曲が流れてくれますし便利ですよね。 ただ、使う上で一個問… <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170903/20170903205756.png" alt="f:id:sfjmk:20170903205756p:plain" title="f:id:sfjmk:20170903205756p:plain" class="hatena-fotolife" itemprop="image"></span> <a class="keyword" href="http://d.hatena.ne.jp/keyword/YouTube">YouTube</a>をラジオ化する<a class="keyword" href="http://d.hatena.ne.jp/keyword/Chrome">Chrome</a> Extension(<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B3%C8%C4%A5%B5%A1%C7%BD">拡張機能</a>) 「Listen Tube」 を作ってみたので、その流れを書こうと思います。</p> <p><br/><br/> こんな風に<a class="keyword" href="http://d.hatena.ne.jp/keyword/YouTube">YouTube</a>で動画を表示させずに音だけを流せるようになります。<br/> <span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170903/20170903205737.png" alt="f:id:sfjmk:20170903205737p:plain" title="f:id:sfjmk:20170903205737p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p><br /> <br /> <br /> <br /> <br /> 公開した<a class="keyword" href="http://d.hatena.ne.jp/keyword/Chrome">Chrome</a> Extensionはこちら。</p> <blockquote class="embedly-card" data-card-align="left" data-card-type="article" data-card-controls="0" data-card-key="766026660f3b4bc99ee26b68e3777147"><a href="https://chrome.google.com/webstore/detail/listen-tube/aaapecfpngjkkaejbamifadogdaljlgl">Listen Tube - Chrome ウェブストア</a></blockquote> <p> <script async src="//cdn.embedly.com/widgets/platform.js" charset="UTF-8"></script></p> <h2>作業用BGMを聴くために<a class="keyword" href="http://d.hatena.ne.jp/keyword/YouTube">YouTube</a>を開いたのに、気がついたら関係ない動画を観ちゃってる問題</h2> <p>作業中にBGMを聴きたい時は<a class="keyword" href="http://d.hatena.ne.jp/keyword/YouTube">YouTube</a>をよく利用する方は結構多いと思います。 <br/> 簡単に曲が探せますし、勝手に次の曲が流れてくれますし便利ですよね。</p> <p>ただ、使う上で一個問題が&hellip;<br/> それは、</p> <p>_人人人人人人人人人人_<br/> > 気が散ってしまう <<br/>  ̄Y<sup>Y</sup><sup>Y</sup><sup>Y</sup><sup>Y</sup><sup>Y</sup><sup>Y</sup><sup>Y</sup><sup>Y</sup> ̄</p> <p>ということ。</p> <p>BGMを探しに<a class="keyword" href="http://d.hatena.ne.jp/keyword/YouTube">YouTube</a>を開いたつもりが、ちょっと気が緩んでプロモーションビデオやバラエティ番組の動画を開いてそのまま鑑賞してしまい、気がついたら◯時間経っていたという経験があるのは僕だけじゃないはずです。</p> <p>あと、これは気が散るとは別の話ですが、BGMを聴くつもりでも、動画が大きく表示されてしまうので、会社で開くのは若干憚られるという場合もあるかもしれません。</p> <p><strong>動画を見られない(=音だけ聞こえる)<a class="keyword" href="http://d.hatena.ne.jp/keyword/YouTube">YouTube</a>、欲しいですよね。</strong></p> <p>調べてみた所、<br/> <a href="http://soundyouneed.com/">SoundYouNeed.com - Music search engine &amp; player</a><br/> こんなサービスがあったので、しばらく使っていましたが、連続再生機能が微妙だったり、ちょいちょい挙動がおかしくなるので、自分で作る必要があると感じました。</p> <p>最初はYoutubeAPI使って<a class="keyword" href="http://d.hatena.ne.jp/keyword/WEB%A5%B5%A1%BC%A5%D3%A5%B9">WEBサービス</a>的な感じにしようと思いましたが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/API">API</a>リク<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>ト回数制限が結構厳し目で、作った所であまりスケールしなさそうだったので、本家<a class="keyword" href="http://d.hatena.ne.jp/keyword/YouTube">YouTube</a>のインターフェース自体をいじる<a class="keyword" href="http://d.hatena.ne.jp/keyword/Chrome">Chrome</a> Extensionを作ることにしました。<br/> (<a class="keyword" href="http://d.hatena.ne.jp/keyword/YouTube">YouTube</a>の<a class="keyword" href="http://d.hatena.ne.jp/keyword/API">API</a>の上限リク<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>ト数って申請すれば簡単に緩めてもらえるんでしょうかね? ご存知の方いたら教えてください)</p> <h2><a class="keyword" href="http://d.hatena.ne.jp/keyword/Chrome">Chrome</a> Extensionの作り方</h2> <p>今回、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Chrome">Chrome</a> Extensionを作ったのは初めてですが、かなり簡単に作ることができました。</p> <p>今回の記事では細かくは説明しませんが、作り方とかは以下のページが參考になると思います。</p> <p>公式はこの辺</p> <ul> <li><a href="https://developer.chrome.com/extensions">What are extensions? - Google Chrome</a></li> <li><a href="https://support.google.com/chrome/a/answer/2714278?hl=ja">チュートリアル: Chrome アプリを作成する - Chrome for Work ヘルプ</a><br/> (<a class="keyword" href="http://d.hatena.ne.jp/keyword/Chrome">Chrome</a> for workと書いてありますが、流れとしては一緒だと思います)</li> </ul> <p>ブログとかだとこの辺</p> <ul> <li><a href="https://liginc.co.jp/web/tool/browser/163575">Chromeのオリジナル拡張機能を開発しよう(ソースコードあり) | 株式会社LIG</a></li> <li><a href="http://oxynotes.com/?p=8983">デベロッパー登録してChromeストアに機能拡張を公開する方法 | OXY NOTES</a></li> <li><a href="http://wryoku.com/howto-chrome_extension-release/">Chrome拡張機能を開発・公開する方法!javascriptができれば誰でもできる! | wryoku</a></li> <li><a href="http://qiita.com/mdstoy/items/9866544e37987337dc79">Chrome 拡張機能のマニフェストファイルの書き方 - Qiita</a></li> </ul> <p>やることは単純で、今回くらい簡単なExtensionでしたら、</p> <ul> <li>manifest.<a class="keyword" href="http://d.hatena.ne.jp/keyword/json">json</a>という名前の設定ファイル (<a class="keyword" href="http://d.hatena.ne.jp/keyword/Chrome">Chrome</a> Extension説明だったり設定を記述します)</li> <li>ア<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A4%A5%B3%A5%F3%B2%E8">イコン画</a>像のファイル</li> <li>実装した<a class="keyword" href="http://d.hatena.ne.jp/keyword/css">css</a>ファイル</li> <li>実装したjsファイル</li> </ul> <p>を用意して、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%D9%A5%ED%A5%C3%A5%D1">デベロッパ</a>ー登録(US$5.00が必要)して、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Chrome">Chrome</a> ウェブストアにアップロードすればもう公開が完了します。<br/> <a class="keyword" href="http://d.hatena.ne.jp/keyword/Chrome">Chrome</a> ウェブストアで公開せず自分だけが使う場合はには<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%D9%A5%ED%A5%C3%A5%D1">デベロッパ</a>ー登録する必要すらありません。</p> <h2>作ってみた</h2> <p>というわけで早速<a class="keyword" href="http://d.hatena.ne.jp/keyword/Chrome">Chrome</a> Extensionを作っていきます。<br/> まず、manifest.<a class="keyword" href="http://d.hatena.ne.jp/keyword/json">json</a>ファイルを用意します。</p> <pre class="code" data-lang="" data-unlink>{ &#34;manifest_version&#34;: 2, &#34;name&#34;: &#34;Listen Tube&#34;, &#34;version&#34;: &#34;0.1.1&#34;, &#34;description&#34;: &#34;YouTubeをラジオ化する(=動画を表示させず音だけ流す)Chrome Extensionです。詳しくはこちら → http://fjmk.jp/blog/839&#34;, &#34;icons&#34;: { &#34;16&#34;: &#34;icons/icon16.png&#34;, &#34;48&#34;: &#34;icons/icon48.png&#34;, &#34;128&#34;: &#34;icons/icon128.png&#34; }, &#34;content_scripts&#34;: [ { &#34;css&#34;: [&#34;style.css&#34;], &#34;js&#34;: [&#34;main.js&#34;], &#34;matches&#34;: [&#34;https://*.youtube.com/*&#34;] } ] }</pre> <p>設定・説明や読み込みファイルを記述するだけです。<br/> content_scriptsのmatchesを指定することで、<a class="keyword" href="http://d.hatena.ne.jp/keyword/youtube">youtube</a>内でのみ動作するようになっています。</p> <p>ここから<a class="keyword" href="http://d.hatena.ne.jp/keyword/CSS">CSS</a>と<a class="keyword" href="http://d.hatena.ne.jp/keyword/JavaScript">JavaScript</a>を書いていくわけですが、始めに作る上で最低限のものしか作らないというルールを決めました。</p> <p>意識したのは↓この辺です。</p> <h3>意識したこと</h3> <h4>対象ページを絞る</h4> <p>あくまで<a class="keyword" href="http://d.hatena.ne.jp/keyword/YouTube">YouTube</a>をBGMプレイヤーとして使うという<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E6%A1%BC%A5%B9%A5%B1%A1%BC%A5%B9">ユースケース</a>を想定しています。<br/> 僕の場合、BGMを探すときはほとんど 検索→検索一覧→動画ページ という動線なので、通らないページ(チェンネルページとか)はそのままで問題ありません。埋込み機能にも対応しないことにしました。</p> <h4>デザイン面は多少妥協する</h4> <p>今回は元の<a class="keyword" href="http://d.hatena.ne.jp/keyword/YouTube">YouTube</a>で<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DE%A1%BC%A5%AF%A5%A2%A5%C3%A5%D7">マークアップ</a>されているid,classを利用して見た目をいじるので、挙動が<a class="keyword" href="http://d.hatena.ne.jp/keyword/YouTube">YouTube</a>側の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DE%A1%BC%A5%AF%A5%A2%A5%C3%A5%D7">マークアップ</a>に依存してしてしまいます。<br/> 最初はミュージックプレイヤーっぽい見た目にしようかなとか思ってましたが、関係するclassが増えてしまうと保守性が著しく下がるので、あくまで気が散る要因を除外できれば良しとしました。</p> <p>とはいいつつも、まあレイアウトがガタガタになってはテンションが下がるので、そのへんはバランスを考えつつという感じで。</p> <h3>作業の流れ</h3> <p>では何が我々の集中力を削いでいるんでしょう。<br/> 上でも書きましたが、自分がBGMを探す際は、</p> <p>トップページを開く<br/> ↓<br/> 検索ボックスにキーワード入力して検索<br/> ↓<br/> 検索結果一覧で観たい動画(聴きたいBGM)を選ぶ<br/> ↓<br/> 動画ページで動画を再生する</p> <p>という順序の場合が殆どなので、上から順を追って対処していきます。<br/> また、この時点で、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%D9%A5%ED%A5%C3%A5%D1">デベロッパ</a>ーモードでExtensionを読みこみ、以降ソースに変更がある度にリロードをして動作確認をしています。</p> <p>※<a class="keyword" href="http://d.hatena.ne.jp/keyword/CSS">CSS</a>を幾つかに分けて書いていますが、ファイルとしては1つです。<br/> ソースは<a class="keyword" href="http://d.hatena.ne.jp/keyword/GitHub">GitHub</a>に上げてあります→ <a href="https://github.com/sfujimaki/ListenTube">sfujimaki/ListenTube</a></p> <h3>トップページ</h3> <p>まず、トップページの「おすすめ」エリア。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170903/20170903205649.png" alt="f:id:sfjmk:20170903205649p:plain" title="f:id:sfjmk:20170903205649p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>BGMを探すために<a class="keyword" href="http://d.hatena.ne.jp/keyword/YouTube">YouTube</a>を開いたのに、楽しげな動画を沢山出してきて、我々の集中力を削ごうとしてきます。 ここで動画をポチったら最期。そのまま数時間を失ってしまいます。</p> <p>ということで、</p> <p><strong>消します。</strong></p> <pre class="code lang-css" data-lang="css" data-unlink><span class="synIdentifier">#page.home</span> <span class="synIdentifier">#header</span><span class="synSpecial">,</span> <span class="synIdentifier">#page.home</span> <span class="synIdentifier">#content</span> <span class="synIdentifier">{</span> <span class="synType">display</span>: <span class="synConstant">none</span>; <span class="synIdentifier">}</span> </pre> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170903/20170903205447.png" alt="f:id:sfjmk:20170903205447p:plain" title="f:id:sfjmk:20170903205447p:plain" class="hatena-fotolife" itemprop="image"></span> これですっきりしました。気を散らさずに検索アクションに入ることができそうです。</p> <h3>検索結果一覧ページ</h3> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170903/20170903205438.png" alt="f:id:sfjmk:20170903205438p:plain" title="f:id:sfjmk:20170903205438p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>観たい動画を選ぶページですので、ここは消すわけにはいきません。<br/> 正直画像を小さくしたりしたいところではありますが&hellip;拘るとキリがないので、このままでよしとします。</p> <h3>動画ページ</h3> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170903/20170903205544.png" alt="f:id:sfjmk:20170903205544p:plain" title="f:id:sfjmk:20170903205544p:plain" class="hatena-fotolife" itemprop="image"></span> 問題はこのページです。気が散る要素で満ち溢れています。</p> <h4>関連動画</h4> <p>まず、問題はこのサイドバーです。<br/> <span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170903/20170903205443.png" alt="f:id:sfjmk:20170903205443p:plain" title="f:id:sfjmk:20170903205443p:plain" class="hatena-fotolife" itemprop="image"></span> トップページと同じく、楽しげな関連動画を表示して、我々の回遊率を高めようとしてきます。<br/> 無意識のうちに目に飛び込んでくるので、気を許すといつのまにか動画を楽しんでいる自分がいます。<br/> 削除&hellip;しようかと思いましたが、一応次のBGM選ぶときにあったほうがいい気がしたので、あまり目につかないページの下に追いやります。</p> <pre class="code" data-lang="" data-unlink>/* メインカラム幅を100%にして中央寄せ*/ #page.watch .watch-main-col { width:100%; float: none; } /* サイドバー */ #page.watch .watch-sidebar { margin: 0 auto; top: 10px; }</pre> <p>このように<a class="keyword" href="http://d.hatena.ne.jp/keyword/CSS">CSS</a>を当ててあげて、1カラムレイアウトにします。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170903/20170903205702.png" alt="f:id:sfjmk:20170903205702p:plain" title="f:id:sfjmk:20170903205702p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>うん。気が散りづらくなった気がします。</p> <h4>コメント</h4> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170903/20170903205715.png" alt="f:id:sfjmk:20170903205715p:plain" title="f:id:sfjmk:20170903205715p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>コメントもBGMを聴く上では必要ありませんね。 気が散るというほどのものでもないかもしれませんが、まあどちらかといえば気が散る要因になるので消しましょう。</p> <pre class="code" data-lang="" data-unlink>/* コメント部分を隠す */ #page.watch #watch-discussion { display: none; }</pre> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170903/20170903205432.png" alt="f:id:sfjmk:20170903205432p:plain" title="f:id:sfjmk:20170903205432p:plain" class="hatena-fotolife" itemprop="image"></span></p> <h4>動画説明</h4> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170903/20170903205616.png" alt="f:id:sfjmk:20170903205616p:plain" title="f:id:sfjmk:20170903205616p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>動画説明は&hellip;まあいいか。そのまま残しましょう。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170903/20170903205702.png" alt="f:id:sfjmk:20170903205702p:plain" title="f:id:sfjmk:20170903205702p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>これでだいぶすっきりしました。</p> <h4>動画プレイヤー部分</h4> <p>最後に動画プレイヤー部分に手を加えます。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170903/20170903205644.png" alt="f:id:sfjmk:20170903205644p:plain" title="f:id:sfjmk:20170903205644p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>まず最初に<a class="keyword" href="http://d.hatena.ne.jp/keyword/CSS">CSS</a>を貼っちゃいます。</p> <pre class="code" data-lang="" data-unlink>/* プレイヤーの高さを設定 */ #page.watch .player-height { height: 150px; } /* 広告表示エリアの高さを設定 */ #page.watch .ad-container-single-media-element-annotations { height: 150px !important; } /* ビデオのシークバー&amp;ボタン群を常に表示させる */ #page.watch .ytp-chrome-bottom { opacity: 1; } /* ビデオの中身を消す */ #page.watch .video-stream { display: none; }</pre> <p>やってることはコメントに書いてある通りです。要するにプレイヤーの面積を小さくした上で、動画が表示されないようにしています。<br/> プレイヤーを小さくしただけだと、広告動画が出た時に広告スキップボタンが押せなくなってしまうので、広告表示エリアも高さを合わせます。<br/> (そういえば、<a href="https://chrome.google.com/webstore/detail/adblock-for-youtube/cmedhionkhpnakcndndgjdbohmhepckk">広告ブロックするExtension</a>とかもあるらしいですよ。)</p> <p>これでほぼ出来上がりました。<br/> <span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170903/20170903205453.png" alt="f:id:sfjmk:20170903205453p:plain" title="f:id:sfjmk:20170903205453p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>ウィンドウ幅を変えても崩れなさそうです。<br/> <span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170903/20170903205558.png" alt="f:id:sfjmk:20170903205558p:plain" title="f:id:sfjmk:20170903205558p:plain" class="hatena-fotolife" itemprop="image"></span></p> <h5>サムネイルの挿入</h5> <p>ただ、このままではサムネイルが表示されません。<br/> 今回は最低限の物だけを作るポリシーで進めてきましたが、真っ黒のプレイヤーではちょっと寂しいので、サムネイルを表示する処理を書きます。</p> <p>最初、「JSでog:imageを取得して表示すればいいかー」と思ってましたが、ここで罠が。<br/> <a class="keyword" href="http://d.hatena.ne.jp/keyword/YouTube">YouTube</a>、動画間の遷移でPjax的なことをしているので、動画ページ内で別の動画をクリックして遷移した場合、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Chrome">Chrome</a> ExtensionのJSを再読込してくれません。<br/> なので、JSで普通にog:imageをサムネイル試してみたところ、別の動画に飛んでも最初に取得したサムネイルがそのまま残ってしまいました。<br/> ソース上のog:image自体も書き換わらない模樣。</p> <p>なので、何かしらの方法でページが遷移したことを検知して、画像URLを取得する必要があります。</p> <p>今回はDOMの変更を検知できるMutationObserverを使って、head内の変化を検知し、変化があったら画像を取得&amp;挿入することにしました。</p> <p>MutationObserverの説明はこちら。<br/> <a href="https://developer.mozilla.org/ja/docs/Web/API/MutationObserver">MutationObserver - Web API インターフェイス | MDN</a></p> <p>タイトル等どこか一箇所の変更を検知するようにしたかったのですが、なんかうまくいかなかったので、ちょっと雑ですがhead全体をみてます。<br/> ちょっと強引な気もしますが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3">プラグイン</a>読み込んだりするのは面倒なので、あくまで素のJSぱぱっと書ける範囲に留めておきます。</p> <p>遷移の度に何回か検知してしまうので厳密には「遷移を検知」とは違いますが&hellip;いいやり方ご存知でしたら教えてください。</p> <p>画像はog:imageを取得しようと思ってましたが、どうやら変わらないようなので、開いている動画ページのURLから動画IDを抜き出して、画像URL(<a href="https://i.ytimg.com/vi/">https://i.ytimg.com/vi/</a>動画ID/hqdefault.jpg)を取得します。<br/> 遷移の度に、ビデオプレイヤー内にサムネイルを挿入します。</p> <p>また、Pjaxではなく普通にページを開いた時も、DOM生成のタイミングのズレでうまくサムネイルが挿入されてくれなかったりするので、setIntervalを使って、サムネイルが取得できるまで取得をし続けるようにしました。</p> <p>コードとしてはこんな感じです。</p> <pre class="code" data-lang="" data-unlink>// サムネイル画像の作成 var image = new Image(); image.height = 100; image.style.float = &#34;left&#34;; // サムネイルが取得できるまで取得し続ける var timer = setInterval(function(){ insertThumbnail(); if (image.src) { clearInterval(timer); } }, 1000); // オブザーバインスタンスを作成 var observer = new MutationObserver(function(mutations) { insertThumbnail(); }); // 対象ノードとオブザーバの設定を渡す observer.observe(document.querySelector(&#39;head&#39;), {childList: true, subtree: true}); /** * 引数としてパラメータの名前を渡すと、URLのパラメータから値を取得して返す * * @param {string} name パラメータの名前 */ function getParamValueByName(name) { var query = window.location.search.substring(1); var vars = query.split(&#34;&amp;&#34;); for (var i=0; i&lt;vars.length; i++) { var pair = vars[i].split(&#34;=&#34;); if (pair[0] == name) { return pair[1]; } } } /** * サムネイル画像のURLを取得して挿入 */ function insertThumbnail() { image.src = &#39;https://i.ytimg.com/vi/&#39;+getParamValueByName(&#39;v&#39;)+&#39;/hqdefault.jpg&#39;; var playerContainerElement = document.getElementById(&#34;movie_player&#34;); console.log(playerContainerElement); playerContainerElement.insertBefore(image, playerContainerElement.firstChild); }</pre> <p>これでサムネイルが表示されます。<br/> <span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170903/20170903205607.png" alt="f:id:sfjmk:20170903205607p:plain" title="f:id:sfjmk:20170903205607p:plain" class="hatena-fotolife" itemprop="image"></span> バランス等ちょっと惜しい感が否めませんが、その辺を解消しようとしたらコードが膨らんできてしまったので、一旦これで完成とします。</p> <p>(一応)ミックスリストでも崩れません。<br/> <span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170903/20170903205728.png" alt="f:id:sfjmk:20170903205728p:plain" title="f:id:sfjmk:20170903205728p:plain" class="hatena-fotolife" itemprop="image"></span></p> <h3>アイコンの準備</h3> <p>最後に、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Chrome">Chrome</a> ウェブストアに登録する際に必要なアイコンを用意します。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/YouTube">YouTube</a>カラーの背景に、適当に見つけてきたフリー素材のヘッドフォン画像を組み合わせました。<br/> <span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170903/20170903205638.png" alt="f:id:sfjmk:20170903205638p:plain" title="f:id:sfjmk:20170903205638p:plain" class="hatena-fotolife" itemprop="image"></span></p> <h2>公開</h2> <p>あとは、<br/> <a href="https://chrome.google.com/webstore/developer/dashboard">デベロッパー ダッシュボード - Chrome ウェブストア</a><br/> こちらから公開するだけです。</p> <p>公開の仕方は、この辺を參考にしてみてください。</p> <ul> <li><a href="https://developer.chrome.com/extensions">What are extensions? - Google Chrome</a></li> <li><a href="https://liginc.co.jp/web/tool/browser/163575">Chromeのオリジナル拡張機能を開発しよう(ソースコードあり) | 株式会社LIG</a></li> <li><a href="http://oxynotes.com/?p=8983">デベロッパー登録してChromeストアに機能拡張を公開する方法 | OXY NOTES</a></li> </ul> <p>基本的に、作業フォルダをzipに固めてアップロードして、幾つか情報を入力するだけで公開できます。 どれくらい情報を作り込むかにもよりますが、今回は最低限の項目だけ埋めたので、10分もかからず公開まで完了しました。(後からいつでも編集できるっぽいです)</p> <p>今回作った<a class="keyword" href="http://d.hatena.ne.jp/keyword/Chrome">Chrome</a> Extensionはこちらで公開されてるので是非使ってみて下さい。</p> <blockquote class="embedly-card" data-card-align="left" data-card-type="article" data-card-controls="0" data-card-key="766026660f3b4bc99ee26b68e3777147"><a href="https://chrome.google.com/webstore/detail/listen-tube/aaapecfpngjkkaejbamifadogdaljlgl">Listen Tube - Chrome ウェブストア</a></blockquote> <p> <script async src="//cdn.embedly.com/widgets/platform.js" charset="UTF-8"></script></p> <p>※<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B3%C8%C4%A5%B5%A1%C7%BD">拡張機能</a>管理ページに行かないとOn/Offできませんが、どうしても動画を観たい時はシークレットウィンドウで観るか別ブラウザで観るといいと思います。</p> <p>あと、自分でも登録してみましたが、特にデータ吸い上げたりしてなくてもこんな表示がでちゃうんですね&hellip;これは紛らわしい気が。</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170903/20170903205707.png" alt="f:id:sfjmk:20170903205707p:plain" title="f:id:sfjmk:20170903205707p:plain" class="hatena-fotolife" itemprop="image"></span> データ吸い上げたりしてないので、安心してください。</p> <h2>最後に</h2> <p>実際に書いたコードは大した量じゃありませんが、一応<a class="keyword" href="http://d.hatena.ne.jp/keyword/GitHub">GitHub</a>にも置いておきました。<br/> <a href="https://github.com/sfujimaki/ListenTube">sfujimaki/ListenTube</a></p> <p>以上、いかがでしたでしょうか。<br/> 作ったばかりなので僕自身まだそんなに使っていませんが、今のところ結構便利な気がしているので、皆さん是非使ってみてください。<br/> 使っていて、不具合とか、「こうしたらいいんじゃない?」というのがあったら<a href="https://twitter.com/macky256">@macky256</a>宛に是非お知らせください!</p> <p>こういう、「実装は楽だけど結構便利」的なものはどんどんつくっていきたいですね。</p> sfjmk 映画『ほしのこえ』(新海誠) を観て hatenablog://entry/8599973812294644615 2016-09-20T00:00:00+09:00 2017-09-03T18:25:30+09:00 ※一応ネタバレ注意 先日「君の名は」で初めて新海誠作品を鑑賞しました。 恥ずかしながら、新海誠作品を観るのはこれが初めてだったので、もっと色々観てみたいと思いTwitterで聞いてみたところ、「ほしのこえ」から観るのが良いのではとの声をいただきました。 @macky256 ほしのこえ→秒速(→言の葉)→新作 星を追う子どもは……ちょっと異端ちっくだから新海誠ワールドって意味では上記がいいのでは — ころぼ らす/koro borası/ (@choir_tempest) August 28, 2016 Amazonビデオだと200円だったので、Amazonビデオで鑑賞。 「君の名は」の感想が上… <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170903/20170903182435.jpg" alt="f:id:sfjmk:20170903182435j:plain" title="f:id:sfjmk:20170903182435j:plain" class="hatena-fotolife" itemprop="image"></span></p> <p><strong>※一応ネタバレ注意</strong></p> <p>先日「君の名は」で初めて<a class="keyword" href="http://d.hatena.ne.jp/keyword/%BF%B7%B3%A4%C0%BF">新海誠</a>作品を鑑賞しました。 恥ずかしながら、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%BF%B7%B3%A4%C0%BF">新海誠</a>作品を観るのはこれが初めてだったので、もっと色々観てみたいと思い<a class="keyword" href="http://d.hatena.ne.jp/keyword/Twitter">Twitter</a>で聞いてみたところ、「<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A4%DB%A4%B7%A4%CE%A4%B3%A4%A8">ほしのこえ</a>」から観るのが良いのではとの声をいただきました。</p> <blockquote class="twitter-tweet"> <p dir="ltr" lang="ja"><a href="https://twitter.com/macky256">@macky256</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A4%DB%A4%B7%A4%CE%A4%B3%A4%A8">ほしのこえ</a>→秒速(→言の葉)→新作 <a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%B1%A4%F2%C4%C9%A4%A6%BB%D2%A4%C9%A4%E2">星を追う子ども</a>は……ちょっと異端ちっくだから<a class="keyword" href="http://d.hatena.ne.jp/keyword/%BF%B7%B3%A4%C0%BF">新海誠</a>ワールドって意味では上記がいいのでは</p> — ころぼ らす/koro borası/ (@choir_tempest) <a href="https://twitter.com/choir_tempest/status/769887443608756224">August 28, 2016</a></blockquote> <p>&nbsp;</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Amazon">Amazon</a>ビデオだと200円だったので、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Amazon">Amazon</a>ビデオで鑑賞。</p> <iframe style="width: 120px; height: 240px;" src="//rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=70b9-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=as_ss_li_til&amp;asins=B00UY3Z7H4&amp;linkId=c84d1d517948a65302cecaca20625fdc" width="300" height="150" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe> <p>「君の名は」の感想が上手く言語化できなくてちょっと悔しかったので(近々また観たい)、「<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A4%DB%A4%B7%A4%CE%A4%B3%A4%A8">ほしのこえ</a>」の感想を書いてみたいと思います。</p> <p>どんな作品かというと</p> <blockquote><p>携帯メールをモチーフに、宇宙と地上にわかたれた少年少女の超<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B1%F3%B5%F7%CE%A5%CE%F8%B0%A6">遠距離恋愛</a>を描いたSFロボットアニメ作品 <a href="http://shinkaimakoto.jp/distantstar">Other voices-遠い声- » 「ほしのこえ」</a></p></blockquote> <p>という感じなのですが、なかな<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A4%AB%A4%D6">かぶ</a>っとんだストーリーなので多分観てみないと分からないと思います笑</p> <p>予告編はこちら</p> <iframe src="https://www.youtube.com/embed/lBZHyvSYF4w" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen"></iframe> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Amazon">Amazon</a>ビデオ版では最初は短編「<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C8%E0%BD%F7%A4%C8%C8%E0%BD%F7%A4%CE%C7%AD">彼女と彼女の猫</a>」が流れて、その後に「<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A4%DB%A4%B7%A4%CE%A4%B3%A4%A8">ほしのこえ</a>」がはじまります。</p> <p>新海さん自身が</p> <blockquote><p>「一人で作った」等の話題性からか思惑をはるかに超えるヒットとなりましたが、今となっては自分では見返すのも忍びないとても稚拙な作品です。 <a href="http://shinkaimakoto.jp/distantstar">Other voices-遠い声- » 「ほしのこえ」</a></p></blockquote> <p>と述べている通り、画は「君の名は」等最近のアニメに比べると粗い感じはしますが、背景は今と比べても劣らない美しさで、このときから既に自身の世界観をを確立していたんだなぁーと驚かされます。</p> <p>ストーリーはこちらにある通りです。 <a href="https://ja.wikipedia.org/wiki/%E3%81%BB%E3%81%97%E3%81%AE%E3%81%93%E3%81%88">ほしのこえ - Wikipedia</a></p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/2047%C7%AF">2047年</a>の話だけど<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AC%A5%E9%A5%B1%A1%BC">ガラケー</a>を使っていたり、いきなり戦闘シーンになったり、戦闘シーンで制服を着ていたり、ストーリーについてはかなり突っ込みどころがあったのですが、所々での「切なさ」の描写が上手いなぁーと思いました。</p> <p>自分的には以下の2つが切なさのハイライト。</p> <h5>ミカコが宇宙に旅立ってしまうところ。</h5> <p>主な登場人物は中学の同級生のミカコとノボルで、中学生の頃からお互い淡い恋心を抱いていたものの、高校進学を機に、ミカコは宇宙軍の選抜メンバー。ノボルは普通の高校生としての道を歩みます。 これにより、2人は立場的にも物理的にも離れてしまいました。切ない。 女の子のほうだけエリートコースを進んでいくという作品は少し珍しい気もしますが、これにより、ノボルの葛藤に感情移入しやすくなったように思います。 そして、物理的な距離が離れる度に、メールの通信にかかる時間も長くなり、お互いの時間軸にもズレが生じ、さらに2人の距離は離れてしまいます。 観てる側としては、このままどちらかの心が離れてしまうのではないかとハラハラしました。(ノボルの心は離れかけていそうな描写でしたね)</p> <h5>8光年ワープし、更に離れ離れになってしまうところ</h5> <p>その前にもワープによって1光年離れてしまうタイミングがあり、2人の時間軸も1年離れてしまっていましたが(メール送信に1年かかる)、 2度めのワープによって、地球と8光年離れてしまったことにより、2人は完全にバラバラになってしまいました。 1年の時間のズレならまだギリギリ相手の存在を意識できるような気もしますが、8年もズレてしまうと、相手はいなくなってしまった(≒死んでしまった)と近い感覚なのかなぁと。 その絶望感を考えると切なすぎます。</p> <p>8年の月日を超えて最終的にノボルにそのメールは届きますが、ノボルの気持ちはその時までミカコに向いていたのか、作品中では明かされていなかったので、答えが非常に気になります。(携帯を持ち続けていたのが答えだったのかな)</p> <p>「君の名は」でも感じましたが、新海タッチの美しい風景とポエム調で語りかける登場人物の少々クサいナレーションが切なさを加速させます。</p> <p>そして最後に、何よりすごいのはこの作品を<a class="keyword" href="http://d.hatena.ne.jp/keyword/%BF%B7%B3%A4%C0%BF">新海誠</a>さんが一人で作り上げたということです。</p> <blockquote><p>25分のフル<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%B8%A5%BF%A5%EB%A5%A2%A5%CB%A5%E1">デジタルアニメ</a>ーションの監督・脚本・演出・作画・美術・編集のほとんどを、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%BF%B7%B3%A4%C0%BF">新海誠</a>監督が一人で行なった。制作環境は<a class="keyword" href="http://d.hatena.ne.jp/keyword/Power%20Mac">Power Mac</a> G4 400MHz、使用されたソフトは<a class="keyword" href="http://d.hatena.ne.jp/keyword/Adobe%20Photoshop">Adobe Photoshop</a> 5.0・<a class="keyword" href="http://d.hatena.ne.jp/keyword/Adobe">Adobe</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/After%20Effects">After Effects</a> 4.1・<a class="keyword" href="http://d.hatena.ne.jp/keyword/LightWave">LightWave</a> 6.5など。 <a href="https://ja.wikipedia.org/wiki/%E3%81%BB%E3%81%97%E3%81%AE%E3%81%93%E3%81%88">ほしのこえ - Wikipedia</a></p></blockquote> <p>すごい… 最近知ったのですが、新海さんはサラリーマン(といっても全く関係ない所でもなさそうですが)やりながら初期のアニメーションを作っていたとのこと。 <a href="https://ja.wikipedia.org/wiki/%E6%96%B0%E6%B5%B7%E8%AA%A0">新海誠 - Wikipedia</a> このバイタリティは今の自分に欠けているので、もっと頑張らないとなーと思いました。</p> <p>色々書きましたが、なんていうか、「これを一人で作ったのか!」と感じるだけでも観る価値はあるような気がします。レビュー観ても賛否両論はあるようですが、この少し浮遊感のある切なさはこの人以外の作品だとなかなか感じたことがないひょうな気がします。</p> <p>うーん、やっぱり感想が書きづらい。 他の新海作品も観て、もっとその世界観に触れたいと思います。</p> sfjmk Eloquent / idiorm メモ hatenablog://entry/8599973812294670074 2016-07-30T00:00:00+09:00 2017-09-03T20:00:37+09:00 クエリービルダーとEloquent Eloquentに惚れちゃう便利な機能 - Qiita Eloquent ORMやIdiormなるものがある | サラリーマンのすらすらIT日記 illuminate/database - 脳みそスワップアウト SlimフレームワークでLaravel’s Eloquent ORMを用いたデータベーストランザクション処理 | るとるのITぶろぐ お使いのフレームワークのお供に Illuminate - Qiita PHPのORM「Idiorm」とActiveRecord「Paris」を使ってみた感じ - Qiita クエリービルダーとEloquent Eloq… <p><a href="https://kore1server.com/236">クエリービルダーとEloquent</a></p> <p><a href="http://qiita.com/henriquebremenkanp/items/e21de43e4b9079265d7f">Eloquentに惚れちゃう便利な機能 - Qiita</a> <a href="http://sookibizviz.blog81.fc2.com/blog-entry-1896.html">Eloquent ORMやIdiormなるものがある | サラリーマンのすらすらIT日記</a></p> <p><a href="http://iamapen.hatenablog.com/entry/2016/01/25/135524">illuminate/database - 脳みそスワップアウト</a></p> <p><a href="http://blog.rutoru.com/2014/05/15/slim-eloquent-transaction/">SlimフレームワークでLaravel’s Eloquent ORMを用いたデータベーストランザクション処理 | るとるのITぶろぐ</a></p> <p><a href="http://qiita.com/ytake/items/072566f49000f42fa095">お使いのフレームワークのお供に Illuminate - Qiita</a></p> <p><a href="http://qiita.com/shunhikita/items/f1bd91b43307492097fe">PHPのORM「Idiorm」とActiveRecord「Paris」を使ってみた感じ - Qiita</a></p> <p><a href="https://kore1server.com/236">クエリービルダーとEloquent</a></p> <p><a href="https://readouble.com/laravel/5/1/ja/eloquent.html">Eloquent:利用の開始 5.1 Laravel</a></p> <p><a href="http://blog.fagai.net/2013/09/08/laravel-eloquent-orm-primary-key/">LaravelのEloquent ORMは複合主キーに対応していなかった - 新人Webエンジニアの記録。</a></p> <p><a href="http://qiita.com/shunhikita/items/f1bd91b43307492097fe">PHPのORM「Idiorm」とActiveRecord「Paris」を使ってみた感じ - Qiita</a></p> <p><a href="http://blog.orepedia.com/entry/2015/12/05/000000">PHPでの開発におけるライブラリやツールの選択 - 俺 Pedia</a></p> <p><a href="http://blog.orepedia.com/entry/2015/12/05/000000">PHPでの開発におけるライブラリやツールの選択 - 俺 Pedia</a> <a href="http://iamapen.hatenablog.com/entry/2016/01/25/135524">illuminate/database - 脳みそスワップアウト</a></p> <p><a href="http://leko.jp/archives/846">5分で作るPHPフレームワーク(技術調査、設計編) | WEB EGG</a></p> <p><a href="http://qiita.com/ichi944/items/f4134dd27a3057d359b0">php軽量フレームワークslimでちょっとしたアプリケーションを作る - Qiita</a></p> <p><a href="http://www.slimframework.com/docs/cookbook/database-eloquent.html"> illuminate/database &ldquo;~5.1&rdquo;</a></p> <p><a href="https://github.com/xsanisty/SlimStarter">xsanisty/SlimStarter: Starter Application built on Slim Framework in MVC (and HMVC) environment</a></p> <p><a href="https://github.com/acoustep/slim-twig-eloquent">acoustep/slim-twig-eloquent: This is a very bare bones template for using the following Slim, Twig and Eloquent</a></p> <p><a href="https://github.com/kladd/slim-eloquent">kladd/slim-eloquent: The Slim PHP micro framework paired with Laravel&rsquo;s Illuminate Database toolkit.</a></p> <p><a href="http://qiita.com/ponko2/items/f2f59b43dae1561ceb50">Laravelでプロジェクトを作成したらまずやることメモ - Qiita</a></p> sfjmk ポケモンGO周辺サービスのレッドオーシャン感 hatenablog://entry/8599973812294649342 2016-07-20T00:00:00+09:00 2017-09-03T18:45:20+09:00 ポケモンGoの攻略サイトやら掲示板やら作ればお小遣い稼ぎできるかなーと思って、調べてみたらもう既にかなりあった。 まあ、そりゃそうなるか。 やっぱりみんな考えることは一緒&こういう時に早く動くのは大事だなーと <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170903/20170903184454.jpg" alt="f:id:sfjmk:20170903184454j:plain" title="f:id:sfjmk:20170903184454j:plain" class="hatena-fotolife" itemprop="image"></span></p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DD%A5%B1%A5%E2%A5%F3Go">ポケモンGo</a>の攻略サイトやら掲示板やら作ればお小遣い稼ぎできるかなーと思って、調べてみたらもう既にかなりあった。</p> <p><img src="https://i.gyazo.com/ae798f8b846b580e0d6f271c86b3ef51.png" alt="ポケモンGO 攻略" /></p> <p><img src="https://i.gyazo.com/fba4a19bc44f4e813827f5acc9c6d755.png" alt="ポケモンGO 速報" /></p> <p><img src="https://i.gyazo.com/eb838c83e6bf712ccf11d1eef39d811f.png" alt="ポケモンGO App Store" /></p> <p>まあ、そりゃそうなるか。 やっぱりみんな考えることは一緒&amp;こういう時に早く動くのは大事だなーと</p> sfjmk 設計について參考にしたページ hatenablog://entry/8599973812294672526 2016-06-26T00:00:00+09:00 2017-09-03T20:07:41+09:00 自分用にメモ。 fivestar/php-rentacar: http://gihyo.jp/book/2012/978-4-7741-5082-6 レイヤー設計とか、オブジェクト指向とか、DDDとか、その辺 - まっつんの日記 ぶいてく: 【雑記】 そろそろMVCモデルについて一言いっておくか PHP Mentors -> DDD アンチパターン:賢すぎるエンティティ モデルとはなんなのかって話 | polidog lab++ Symfony2でビジネスロジックを大量にコントローラに書かない構成 - tarhashiの日記 PHP Mentors -> Kata #1 - サービス(SERV… <p>自分用にメモ。</p> <p><a href="https://github.com/fivestar/php-rentacar">fivestar/php-rentacar: http://gihyo.jp/book/2012/978-4-7741-5082-6</a></p> <p><a href="http://mattun.hatenablog.com/entry/2014/07/19/135320">レイヤー設計とか、オブジェクト指向とか、DDDとか、その辺 - まっつんの日記</a></p> <p><a href="http://blog.virtual-tech.net/2009/10/mvc.html">ぶいてく: 【雑記】 そろそろMVCモデルについて一言いっておくか</a></p> <p><a href="http://phpmentors.jp/post/37071280207/ddd-%E3%82%A2%E3%83%B3%E3%83%81%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%E8%B3%A2%E3%81%99%E3%81%8E%E3%82%8B%E3%82%A8%E3%83%B3%E3%83%86%E3%82%A3%E3%83%86%E3%82%A3">PHP Mentors -> DDD アンチパターン:賢すぎるエンティティ</a> <a href="http://polidog.jp/2014/02/12/model/">モデルとはなんなのかって話 | polidog lab++</a></p> <p><a href="http://tarhashi.hatenablog.com/entry/2012/06/08/154238">Symfony2でビジネスロジックを大量にコントローラに書かない構成 - tarhashiの日記</a></p> <p><a href="http://phpmentors.jp/post/42882171878/kata-1-%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9services">PHP Mentors -> Kata #1 - サービス(SERVICES)</a></p> <p><a href="https://terasolunaorg.github.io/guideline/public_review/ImplementationAtEachLayer/DomainLayer.html">4.1. ドメイン層の実装 — TERASOLUNA Global Framework Development Guideline 1.0.0.publicreview documentation</a></p> <p><a href="http://www.casleyconsulting.co.jp/blog-engineer/%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E8%A8%AD%E8%A8%88/%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E9%A7%86%E5%8B%95%E9%96%8B%E7%99%BA%E5%85%A5%E9%96%80/">Domain駆動開発入門 | キャスレーコンサルティング 技術ブログ</a></p> <p><a href="http://qiita.com/okeyaki/items/37eb4b66bd8ef62c1fe8">Webアプリケーションの構成に関する予備知識 - Qiita</a></p> sfjmk Slim(PHP)を使う時のリサーチメモ hatenablog://entry/8599973812294648590 2016-06-19T00:00:00+09:00 2017-09-03T18:42:57+09:00 Slimを使う時に調べたページのメモ 公式 Slim Framework - Slim Framework 作ってみた系記事 SlimでシンプルなIT勉強会が探せるサービスを開発してみた【シンプルIT勉強会リスト】 - プログラミングは芸術だ! その他色々 [php] フロントエンドな人だって開発用のREST APIサーバーをPHP+Slimで作ってみたい « きんくまデザイン SPA(Single Page Application)の開発だったり、JavaScriptのフレームワークを学習するときに、サーバーとの通信のやりとりをチェックをしたいなと思うことがあります。 だけどなんだかサーバー… <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170903/20170903184151.png" alt="f:id:sfjmk:20170903184151p:plain" title="f:id:sfjmk:20170903184151p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>Slimを使う時に調べたページのメモ</p> <ul> <li>公式 <a href="http://www.slimframework.com/">Slim Framework - Slim Framework</a></li> </ul> <h2>作ってみた系記事</h2> <ul> <li><a href="http://charlie1012.hatenablog.jp/entry/2015/07/26/180000">SlimでシンプルなIT勉強会が探せるサービスを開発してみた【シンプルIT勉強会リスト】 - プログラミングは芸術だ!</a></li> </ul> <h2>その他色々</h2> <ul> <li><a href="http://www.kuma-de.com/blog/2015-06-01/6915">[php] フロントエンドな人だって開発用のREST APIサーバーをPHP+Slimで作ってみたい « きんくまデザイン</a> <blockquote> SPA(Single Page Application)の開発だったり、<a class="keyword" href="http://d.hatena.ne.jp/keyword/JavaScript">JavaScript</a>の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D5%A5%EC%A1%BC%A5%E0%A5%EF%A1%BC%A5%AF">フレームワーク</a>を学習するときに、サーバーとの通信のやりとりをチェックをしたいなと思うことがあります。 だけどなんだかサーバー側の人は忙しそうだし、もし自前で簡単な開発用のサーバーを作ってしまえれば、いろいろと実験できて便利そうです。 なので今回は本番用ではなく、動作チェックするための開発用<a class="keyword" href="http://d.hatena.ne.jp/keyword/REST%20API">REST API</a>サーバーをどうやって作るのか調べて、作ってみたメモです。 </blockquote></li> <li><a href="http://qiita.com/ichi944/items/f4134dd27a3057d359b0">php軽量フレームワークslimでちょっとしたアプリケーションを作る - Qiita</a></p></li> <li><p><a href="http://blog.orepedia.com/entry/2015/12/07/000000">Slimフレームワークの利用(基本的な処理) - 俺 Pedia</a></p></li> <li><p><a href="http://k-holy.hatenablog.com/entry/2012/02/01/195254">Silex製アプリケーションをSlimフレームワークで書き換えてみた - k-holyのPHPとか諸々メモ</a></p></li> <li><p><a href="http://qiita.com/meets/items/bfe1269d034a424837d6">Slim(PHP)メモ - Qiita</a></p></li> <li><p><a href="http://qiita.com/asaokamei/items/f915a625cb4d3f9b38de">Slim 3 Frameworkリリースされたので、ざっと紹介 - Qiita</a></p></li> <li><p><a href="http://busypeoples.github.io/post/slim-doctrine/">Combining Slim with Doctrine 2</a></p></li> <li><p><a href="http://blog.sub85.com/slim-3-with-doctrine-2.html">Slim 3 with Doctrine 2</a></p></li> <li><p><a href="http://nplll.com/archives/2015/06/phpslim.php">PHPマイクロフレームワーク「Slim」を使ってみた | mutter</a></p></li> <li><p><a href="http://qiita.com/ichi944/items/f4134dd27a3057d359b0">php軽量フレームワークslimでちょっとしたアプリケーションを作る - Qiita</a></p></li> <li><p><a href="http://www.90zbear.com/web-develop/649/">PHPマイクロフレームワークのSlimがなかなかいい感じ。 | 90zbear.com</a></p></li> <li><p><a href="http://d.hatena.ne.jp/brtRiver/20120729/1343573858">フラットなPHPからSlimへ - ぷぎがぽぎ</a></p></li> <li><p><a href="http://docs.symfony.gr.jp/symfony2/best_practices/">Symfony 公式ベストプラクティス | Symfony2日本語ドキュメント</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/Symfony">Symfony</a>ですが、Slimで<a class="keyword" href="http://d.hatena.ne.jp/keyword/MVC">MVC</a>したい場合のベストプラクティス的なものがちょっと見当たらなかったのでこの辺を參考にするといいのかなぁと。。</p></li> <li><p><a href="http://wsnippets.com/cli-for-slimframework/">CLI for Slimframework | WSnippets</a></p></li> <li><p><a href="http://log.deprode.net/logs/2015-10-01/">2015 10 01 Slim(php)3でCSRF対策 - log</a></p></li> <li><p><a href="http://am1tanaka.hatenablog.com/entry/2016/02/16/225309">SlimPHP:Slim マイクロフレームワークで REST アプリケーションを作成する(1)GET - tanaka's Programming Memo</a></p></li> <li><p><a href="http://tayu08.hatenadiary.jp/entry/2015/12/01/205649">slim framework part.1 - ソースコードを読もう</a></p></li> </ul> <h2>參考になりそうな<a class="keyword" href="http://d.hatena.ne.jp/keyword/GitHub">GitHub</a> Repository</h2> <p><p>このへんを一通り眺めれば使い方とかが何となく分かると思います。 色々まとめてみましたが、↓の検索結果を一通り眺めるとかでも良さそう。 <a href="https://github.com/search?l=PHP&amp;q=slim+&amp;type=Repositories&amp;utf8=%E2%9C%93">Search · slim</a></p> <p><ul> <li><p><a href="https://github.com/slimphp/Slim-Skeleton">slimphp/Slim-Skeleton: Slim Framework 3 skeleton application</a> 公式のス<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B1%A5%EB%A5%C8">ケルト</a>ン</p></li> <li><p><a href="https://github.com/slimphp/Slim/graphs/contributors">Contributors to slimphp/Slim</a> 書き方に迷ったらこの辺の人たちのRepositoriesを見るとよさそう</p></li> <li><p><a href="https://github.com/akrabat/slim3-skeleton">akrabat/slim3-skeleton: Simple Slim Framework 3 skeleton with Twig &amp; Monolog</a> 作成者の次にSlimにcommitしているakrabat氏作のス<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B1%A5%EB%A5%C8">ケルト</a>ン</p></li> <li><p><a href="https://github.com/akrabat/slim-bookshelf">akrabat/slim-bookshelf: Exploratory Slim Framework 3 application.</a> 同じくakrabat氏作のサンプルアプリケーション。ブックリストの作成ができるWEBアプリ。構成とか參考になりそう。 他にもこの方のRepositoriesを見ると參考になりそうなものが多い。→ <a href="https://github.com/akrabat?tab=repositories">akrabat (Rob Allen)</a></p></li> <li><p><a href="https://github.com/xsanisty/SlimStarter">xsanisty/SlimStarter: Starter Application built on Slim Framework in MVC (and HMVC) environment</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/MVC">MVC</a>で作られているサンプルアプリケーション。starが269と結構多い(2016/06/25 時点)</p></li> <li><p><a href="https://github.com/revuls/SlimMVC">revuls/SlimMVC: MVC Schema for Slim Framework applications</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/MVC">MVC</a>になってるス<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B1%A5%EB%A5%C8">ケルト</a>ン。starが136(2016/06/25 時点)</p></li> <li><p><a href="https://github.com/zacao/slimvc">zacao/slimvc: MVC Skeleton for PHP Slim Framwork</a></p></li> <li><p><a href="https://github.com/shameerc/slim-skeleton">shameerc/slim-skeleton: A Slim 3 skeleton project to easily bootstrap MVC applications using Slim Framework 3</a></p></li> <li><p><a href="https://github.com/teefax/slim-skeleton">teefax/slim-skeleton: Slim framework skeleton with Twig, Idiorm, Compass/Sass and Bootstrap</a></p></li> <li><p><a href="https://github.com/vhchung/slim3-skeleton-mvc">vhchung/slim3-skeleton-mvc: This is a simple skeleton project for Slim 3 that includes Doctrine, Twig, Flash messages and Monolog.</a></p></li> <li><p><a href="https://github.com/hak2c/slim-doctrine-mvc">hak2c/slim-doctrine-mvc: Demo MVC with Slim Framework and Doctrine ORM</a></p></li> <li><p><a href="https://github.com/necatikartal/slim-rest-api">necatikartal/slim-rest-api: This is a JSON REST API build with the use of Slim Framework and Doctrine DBAL over MVC Structure.</a></p></li> <li><p><a href="https://github.com/maxkirchoff/Slim-Doctrine2">maxkirchoff/Slim-Doctrine2: Slime PHP framework with Doctrine2 ORM</a> <a href="https://github.com/jeroenweustink/slim-rest-api">jeroenweustink/slim-rest-api: This is a JSON REST API build with the use of Slim Framework and Doctrine.</a></p></li> <li><p><a href="https://github.com/matthewfedak/slim-3-doctrine-2">matthewfedak/slim-3-doctrine-2: Example of Slim 3 and Doctrine 2 to accompany a blog post.</a></p></li> </ul></p> sfjmk Doctrineを使う時に參考にしたページのメモ hatenablog://entry/8599973812294647836 2016-06-19T00:00:00+09:00 2017-09-03T18:40:45+09:00 Doctrineを使う時に調べたページのメモ。 使い方 公式チュートリアル Getting Started with Doctrine — Doctrine 2 ORM 2 documentation Getting Started with Doctrine ↑の翻訳記事 Doctrine ORMのチュートリアル(1) - tom__bo’s Blog 2. Installation and Configuration — Doctrine 2 ORM 2 documentation Databases and Doctrine (The Symfony Book) Doctrine ORM… <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170903/20170903184003.png" alt="f:id:sfjmk:20170903184003p:plain" title="f:id:sfjmk:20170903184003p:plain" class="hatena-fotolife" itemprop="image"></span> Doctrineを使う時に調べたページのメモ。</p> <h2>使い方</h2> <ul> <li>公式<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C1%A5%E5%A1%BC%A5%C8%A5%EA%A5%A2%A5%EB">チュートリアル</a> <a href="http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/tutorials/getting-started.html">Getting Started with Doctrine — Doctrine 2 ORM 2 documentation</a></li> <li><p><a href="http://doctrine-orm.readthedocs.io/projects/doctrine-orm/en/latest/tutorials/getting-started.html">Getting Started with Doctrine</a></p></li> <li><p>↑の翻訳記事 <a href="http://tombo2.hatenablog.com/entry/2015/02/10/163910">Doctrine ORMのチュートリアル(1) - tom__bo’s Blog</a></p></li> <li><p><a href="http://doctrine-orm.readthedocs.io/projects/doctrine-orm/en/latest/reference/configuration.html">2. Installation and Configuration — Doctrine 2 ORM 2 documentation</a></p></li> <li><p><a href="http://symfony.com/doc/current/book/doctrine.html">Databases and Doctrine (The Symfony Book)</a></p></li> <li><p><a href="http://tombo2.hatenablog.com/entry/2015/02/10/163910">Doctrine ORMのチュートリアル(1) - tom__bo’s Blog</a></p></li> </ul> <blockquote><p>最近<a class="keyword" href="http://d.hatena.ne.jp/keyword/PHP">PHP</a>のマイクロ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D5%A5%EC%A1%BC%A5%E0%A5%EF%A1%BC%A5%AF">フレームワーク</a>であるsilexを使っていて、そろそろORMも使っていきたいので、<a class="keyword" href="http://d.hatena.ne.jp/keyword/symfony">symfony</a>でもおなじみのDoctrine ORMの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C1%A5%E5%A1%BC%A5%C8%A5%EA%A5%A2%A5%EB">チュートリアル</a>を英語の勉強も兼ねて和訳・実行していくことにしました。</p></blockquote> <ul> <li><p>テーブルの作り方 <a href="http://taka512.hatenablog.com/entry/20110727/1311771377">10分ぐらいで学べるSymfony2 〜Doctrineテーブル作成編〜 - taka512&rsquo;s blog</a></p></li> <li><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/ENUM">ENUM</a>使いたい時 <a href="https://github.com/fre5h/DoctrineEnumBundle">fre5h/DoctrineEnumBundle: Provides support of ENUM type for Doctrine in Symfony applications.</a></p></li> <li><p><a href="http://www.omnioo.com/record/phpframework/symfony2_doctrine_db/">omnioo lab. record | オムニオラボ WEB, ITのお話 Homepageを作る</a></p></li> </ul> <h2>Slim×Doctrine</h2> <ul> <li><a href="http://busypeoples.github.io/post/slim-doctrine/">Combining Slim with Doctrine 2</a></li> </ul> <blockquote><p>Provides support of <a class="keyword" href="http://d.hatena.ne.jp/keyword/ENUM">ENUM</a> type for Doctrine in <a class="keyword" href="http://d.hatena.ne.jp/keyword/Symfony">Symfony</a> applications.<a href="http://blog.sub85.com/slim-3-with-doctrine-2.html">Slim 3 with Doctrine 2</a> I have recently started looking at using a <a class="keyword" href="http://d.hatena.ne.jp/keyword/PHP">PHP</a> microframework to build a simple <a class="keyword" href="http://d.hatena.ne.jp/keyword/REST%20API">REST API</a> for an app I’m working on. I was looking for something well supported/documented which would be easy to integrate with Doctrine 2. I’d heard good things about Slim 2 so thought I would check out the new version and maybe write a bit about it.</p></blockquote> <h2>型の設定とか</h2> <ul> <li><p><a href="http://doctrine-orm.readthedocs.io/projects/doctrine-dbal/en/latest/reference/types.html">8. Types — Doctrine DBAL 2 documentation</a></p></li> <li><p><a href="http://doctrine-orm.readthedocs.io/projects/doctrine-orm/en/latest/reference/basic-mapping.html">4. Basic Mapping — Doctrine 2 ORM 2 documentation</a></p></li> </ul> <h2>その他色々</h2> <ul> <li><p><a href="http://blog.sarabande.jp/post/27990682613">Composer で Doctrine2 をセットアップする - Sarabande.jp</a></p></li> <li><p><a href="http://blog.a-way-out.net/blog/2014/07/11/bear-sunday-doctrine/">BEAR.SundayでDoctrine2のORMを使ってみた(改) — A Day in Serenity (Reloaded) — PHP, FuelPHP, Linux or something</a></p></li> <li><p><a href="http://doctrine-orm.readthedocs.io/projects/doctrine-orm/en/latest/reference/tools.html">25. Tools — Doctrine 2 ORM 2 documentation</a></p></li> <li><p><a href="http://symblog.ganchiku.com/">Symfony2 でブログを作ろう — symblog - A Symfony2 Tutorial</a> Part3,4あたりでDoctrineについて触れられてる。実際の使用例が載ってる記事はなかなかないので參考になる。</p></li> <li><p><a href="http://tech.quartetcom.co.jp/2015/08/04/knp-doctrine-behavior-tree/">Doctrine2でツリー構造を扱う方法 | QUARTETCOM TECH BLOG</a></p> <blockquote><p>Doctrine2を使ってアプリケーションを開発していると、単なる一対多ではない階層構造(ツリー構造)を表すエンティティ(カテゴリや擬似フォルダなど)を使いたいケースが出てくることがあります。 そんな場合に便利なライブラリの一つ、 KnpDoctrineBehaviors の Tree を紹介します。(他にも同様の機能を別の実装で実現しているライブラリがいくつかあります)</p></blockquote></li> <li><p><a href="http://qiita.com/tarokamikaze/items/b6cb73be0294fe6b14c1">Symfony初心者がつまづきがちな22個のポイント - Qiita</a></p></li> <li><p><a href="http://symblog.ganchiku.com/docs/extending-the-model-blog-comments.html">[パート4] - コメントモデル: コメントの追加、 Doctrine リポジトリとマイグレーション — symblog - A Symfony2 Tutorial</a></p></li> <li><p><a href="http://soudai1025.blogspot.jp/2014/05/symfony2doctrine2entitydoctrine2.html">そーだいなるらくがき帳: Symfony2でDoctrine2使う時によく使うEntityのアノテーション一覧とDoctrine2のコマンド一覧</a></p></li> <li><p><a href="http://stackoverflow.com/questions/29007625/doctrine-2-3-6-with-slim-framework-where-to-create-doctrine-cli-php">Doctrine 2.3.6 with Slim Framework : where to create doctrine_cli.php - Stack Overflow</a></p></li> <li><p><a href="http://doctrine-orm.readthedocs.io/en/latest/reference/configuration.html#setting-up-the-commandline-tool">2. Installation and Configuration — Doctrine 2 ORM 2 documentation</a></p></li> <li><p><a href="http://doctrine-orm.readthedocs.io/en/latest/reference/tools.html">25. Tools — Doctrine 2 ORM 2 documentation</a></p></li> <li><p><a href="http://docs.symfony.gr.jp/symfony2/book/doctrine.html">データベースと Doctrine (“The Model”) | Symfony2日本語ドキュメント</a></p></li> <li><p><a href="http://tech.kayac.com/archive/symfony-doctrine.html">初心者による初心者のためのdoctrine | tech.kayac.com - KAYAC engineers' blog</a></p></li> <li><p><a href="http://www.objective-php.net/">PHPのオブジェクト指向入門 | オブジェクト指向PHP.NET</a></p></li> <li><p><a href="http://blog.sub85.com/slim-3-with-doctrine-2.html">Slim 3 with Doctrine 2</a></p></li> <li><p><a href="http://qiita.com/urapico/items/a31f770586c38b9038a7">Symfony2+Doctrine2でEntityを操作するのは、Repositoryのお仕事 - Qiita</a></p></li> <li><p><a href="https://terasolunaorg.github.io/guideline/public_review/ImplementationAtEachLayer/DomainLayer.html">4.1. ドメイン層の実装 — TERASOLUNA Global Framework Development Guideline 1.0.0.publicreview documentation</a></p></li> <li><p>ページネーション <a href="http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/tutorials/pagination.html">29. Pagination — Doctrine 2 ORM 2 documentation</a></p></li> <li><p><a href="http://satellite7.hatenablog.com/entry/2013/07/26/183230">【Symfony】【Doctrine】getRepository() の使い方 - SatelliteSeven</a></p></li> </ul> <h2>參考になりそうな<a class="keyword" href="http://d.hatena.ne.jp/keyword/GitHub">GitHub</a> Repository</h2> <ul> <li><p><a href="https://github.com/matthewfedak/slim-3-doctrine-2">matthewfedak/slim-3-doctrine-2: Example of Slim 3 and Doctrine 2 to accompany a blog post.</a></p></li> <li><p><a href="https://github.com/jeroenweustink/slim-rest-api">jeroenweustink/slim-rest-api: This is a JSON REST API build with the use of Slim Framework and Doctrine.</a></p></li> <li><p><a href="https://github.com/maxkirchoff/Slim-Doctrine2">maxkirchoff/Slim-Doctrine2: Slime PHP framework with Doctrine2 ORM</a></p></li> <li><p><a href="https://github.com/necatikartal/slim-rest-api">necatikartal/slim-rest-api: This is a JSON REST API build with the use of Slim Framework and Doctrine DBAL over MVC Structure.</a></p></li> <li><p><a href="https://github.com/hak2c/slim-doctrine-mvc">hak2c/slim-doctrine-mvc: Demo MVC with Slim Framework and Doctrine ORM</a></p></li> <li><p><a href="https://github.com/vhchung/slim3-skeleton-mvc">vhchung/slim3-skeleton-mvc: This is a simple skeleton project for Slim 3 that includes Doctrine, Twig, Flash messages and Monolog.</a></p></li> <li><p><a href="https://github.com/xsanisty/SlimStarter">xsanisty/SlimStarter: Starter Application built on Slim Framework in MVC (and HMVC) environment</a></p></li> <li><p><a href="https://github.com/zacao/slimvc">zacao/slimvc: MVC Skeleton for PHP Slim Framwork</a></p></li> <li><a href="https://github.com/revuls/SlimMVC">revuls/SlimMVC: MVC Schema for Slim Framework applications</a></li> </ul> sfjmk ユーザーテストの見学会に参加して知った、テストの一連の流れ・コツをまとめました hatenablog://entry/8599973812294641536 2016-05-29T00:00:00+09:00 2017-09-03T18:12:51+09:00 先日、友人に誘われてこのイベントに行ってきました。 【5席増席】ユーザーテストLive! 2周年記念「UTライブの『舞台裏』ライブ見学会」 | Peatix イベントの趣旨はこういったものになります。(イベントページから引用) ユーザーテストLive! 見学会』は、仕事帰りに・手軽に・気軽にユーザーテストを体験できる機会を提供して、製品/サービス開発の現場にもっとテストを普及させることを目的にしています。そのため、専用の施設と特殊な機材を使った立派なテストではなく、普通のオフィス環境と身近にある機材を活用したDIY方式のテストをお見せしています。 では、どのようにして、普通の会議室をUXラボに… <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170903/20170903181239.jpg" alt="f:id:sfjmk:20170903181239j:plain" title="f:id:sfjmk:20170903181239j:plain" class="hatena-fotolife" itemprop="image"></span> 先日、友人に誘われてこのイベントに行ってきました。</p> <blockquote class="embedly-card" data-card-align="left" data-card-type="article" data-card-controls="0" data-card-key="766026660f3b4bc99ee26b68e3777147"><h4><a href="http://uxlive10.peatix.com/view">【5席増席】ユーザーテストLive! 2周年記念「UTライブの『舞台裏』ライブ見学会」 | Peatix</a><h4><p></p></blockquote> <p> <script async src="//cdn.embedly.com/widgets/platform.js" charset="UTF-8"></script></p> <p>イベントの趣旨はこういったものになります。(イベントページから引用)</p> <blockquote><p>ユーザーテストLive! 見学会』は、仕事帰りに・手軽に・気軽にユーザーテストを体験できる機会を提供して、製品/サービス開発の現場にもっとテストを普及させることを目的にしています。そのため、専用の施設と特殊な機材を使った立派なテストではなく、普通のオフィス環境と身近にある機材を活用した<a class="keyword" href="http://d.hatena.ne.jp/keyword/DIY">DIY</a>方式のテストをお見せしています。</p> <p>では、どのようにして、普通の会議室をUXラボに仕立て上げ、身近な機材を使ってユーザーテストを実施しているのか?---2周年記念の今回は、普段の見学会の会場では目にすることがない、「控室」や「テスト室」で行われている『舞台裏』の活動を実際にお見せしようと思います。</p></blockquote> <p>要するに、実際に存在するアプリのユーザーテストを第三者視点で見学してみようという会です。場所は<a class="keyword" href="http://d.hatena.ne.jp/keyword/mixi">mixi</a>社でした。</p> <p>ユーザーテスト自体に凄く興味がある!というわけではないのですが、人にインタビューするとき(「こういうサービス考えてるんだけどどう思う?」みたいなやつ)のテンションやら質問内容がいつも定まらないので、何かしら參考になるかなーと思い参加してみました。</p> <p>ユーザーテストの一連の流れを第三者視点で見学できる機会はなかなかないですし、気づきも多かったので、その内容をブログに残しておきます。 (有料イベントですが、主催者の方からOKはいただいています)</p> <p>恐らくユーザーテストにも色々なやり方があると思うので、他のやり方も調べてみたほうが良いとは思いますが、実際にやったことがないと気付けないようなノウハウ(机にガムテで<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%DE%A5%DB">スマホ</a>操作位置をマーキングしたほうが良い・画面ロックは解除したほうがいい等々)も結構あったので、これからユーザーテストをされる方の參考になればと思います。</p> <p>※ ちなみに今回の話に出てくる"ユーザーテスト"はコンセプト検証のためのテストではなく、UI/UXの検証のためのテストです</p> <p>最初の30分くらいはこのイベント立ち上げの経緯等や、これまでのイベント内容のご紹介をされていましたが、そのへんはメモってなかったので、実際にユーザーテストの流れについての部分のみ書きます。</p> <p>それではどうぞ。</p> <h2>ユーザーテスト環境の準備</h2> <p>控室・テスト室(被験者にアプリを触ってもらう部屋)・観察室(被験者の様子を観察する部屋)の3つが必要なようですが、今回はデモ用に仕切りを設けず以下のようなレイアウトで行っていました。(超ざっくりですが)</p> <p><img src="https://gyazo.com/37899ec9b1a1bef0933ca70ace331b49.png" alt="" /></p> <p>ユーザーテストのためには主に以下の準備が必要です。</p> <ul> <li>手元を写す<a class="keyword" href="http://d.hatena.ne.jp/keyword/WEB%A5%AB%A5%E1%A5%E9">WEBカメラ</a>&amp;スタンドを用意する</li> <li>別室でやるので、観察室とテスト室で<a class="keyword" href="http://d.hatena.ne.jp/keyword/Skype">Skype</a>をつないだりしている。</li> <li>部屋が近ければ<a class="keyword" href="http://d.hatena.ne.jp/keyword/Skype">Skype</a>等を使わず有線でOK</li> <li><p>観察室側のPCは基本マイクとカメラをオフにしておく。 (観察者のリアクションが被験者に伝わると、自然な動きがだしづらくなる。同様の理由で被験者と観察者があまり会わないないようにする)</p></li> <li><p>テストをしていると被験者が使っている<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%DE%A5%DB">スマホ</a>とカメラの位置関係がずれてしまうので、ガムテープをテーブルに貼り付けたりして、操作位置をマーキングする</p></li> <li>被験者が他の被験者の様子・リアクションを見なくて済むよう導線を考える</li> <li>控室にお茶とかお菓子とかも置いておくと良い</li> <li>(当たり前ですが) ユーザーテスト時のシチュエーションとタスクの準備</li> <li>例えばECアプリの場合だと「夏で暑くなったのでハーフパンツがほしくなりました - このアプリでハーフパンツを探してください」というようなもの。</li> <li>口頭で被験者に伝えてもテスト中に忘れてしまうので、紙に印刷しておく。</li> </ul> <p>今回のテスト室はこんな感じになっていました。 <img src="https://gyazo.com/4eb3cc924f777d0e5c0d82df6c03a9a6.png" alt="" /> <img src="https://gyazo.com/8003c2eacec95ebbd66c2a1bfcef4a45.png" alt="" /> (写真もっ撮っとけばよかった&hellip;)</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Skype">Skype</a>を活用するのは面白いなーと思いました。部屋が離れていても見学ができるので便利ですね。</p> <p>カメラを固定するスタンドは、</p> <blockquote class="embedly-card" data-card-align="left" data-card-type="article" data-card-controls="0" data-card-key="766026660f3b4bc99ee26b68e3777147"><a href="http://www.amazon.co.jp/gp/product/B002BZ9NNW/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=B002BZ9NNW&linkCode=as2&tag=70b9-22"></a></blockquote> <p> <script async src="//cdn.embedly.com/widgets/platform.js" charset="UTF-8"></script> こういうアームクリップを使うと良いとのことです。</p> <h2>被験者のリクルーティング条件</h2> <p>今回は</p> <blockquote class="embedly-card" data-card-align="left" data-card-type="article" data-card-controls="0" data-card-key="766026660f3b4bc99ee26b68e3777147"><h4><a href="https://itunes.apple.com/jp/app/shufu-chirashiapuri/id373909230">シュフーチラシアプリでお買い物 お得で便利を App Store で</a><h4><p></p></blockquote> <p> <script async src="//cdn.embedly.com/widgets/platform.js" charset="UTF-8"></script></p> <p>こちらのシュフーというアプリのテストを観察したのですが、デモなので被験者を参加者の中から募っていました。 その際の募集条件として挙げていたのがこちらです。 * <a class="keyword" href="http://d.hatena.ne.jp/keyword/iPhone">iPhone</a>もしくは<a class="keyword" href="http://d.hatena.ne.jp/keyword/Android">Android</a>を今日もっている * 普段スーパーやドラッグストアで自分で食料品等を購入している人 * 新聞の折込チラシを利用している・利用していた * シュフーというアプリ(今回のテスト対象のアプリ)を使ったことがない</p> <p>ちなみに、ユーザーテストにおいてある程度重要な項目を判定するには被験者が5人は必要だそうです。 (主催者の経験則ではそれより多いと項目が被ってくるとのこと)</p> <p>ここから実際のユーザーテストの流れに入っていきます。</p> <h2>控室にて</h2> <p>リクルーティングした被験者に会場に来てもらったら、まず控室に入ってもらい以下のことをします。</p> <ul> <li>簡単なアイスブレイクを行う — 被験者は慣れていないのでいきなり思考を口に出すことがが難しい。なので口ならしが必要。</li> <li>(必要があれば)<a class="keyword" href="http://d.hatena.ne.jp/keyword/NDA">NDA</a>署名してもらう</li> <li><p>アプリのインストールをしてもらう — 端末の設定のところで、自動ロックがかかってしまうことが多いので、ユーザーテスト中にロックがかかると面倒なので、自動ロックの解除をしてもらっている。 — 被験者端末が<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C4%CC%BF%AE%C0%A9">通信制</a>限かかってることがあるからW-iFiをつなげるようにしておいたほうが良い。</p></li> <li><p>ユーザーテストの説明 — ユーザーテスト被験者の経験はありますか? — 何のためにするかしってますか? — 一般ユーザーに使ってもらって改善をするために行う(= 変な用途に使うものではない)ということを理解してもらう</p></li> <li><p>テスト中は5~10秒以上沈黙が続かないように、考えていることを声に出すようにして欲しいと伝える</p></li> <li>イメージがわきづいらい人もいるので、お手本の動画(他のアプリver.)があると良い — シチュエーション・タスクの読み上げ(ECアプリの場合「夏で暑くなったのでハーフパンツがほしくなりました - アプリ上でハーフパンツ探してください」)の正しい例や、思ったことを口に出しながらタスクを実行する様子を見せてあげる</li> <li><p>よくあるNGも見せてあげると良い</p></li> <li><p>他のアプリでその場でちょっと発話デモとかもしてもらう。 (「いつも使っているブラウザで明日の天気をしらべてください」みたいな感じで) → 発話が足りなかったり違ってたりしたら本番テストに入る前に指摘する。</p></li> <li><p>LINEとかSlackの通知がテスト中に表示されると気になるので、通知をオフにしてもらう。</p></li> <li>テストの流れでカメラロールを開く必要がある場合は事前に伝えて、プライベートな写真がみえないようにする(被験者が気にしてしまう)</li> <li>始める前に、不明点がないか聞く。不明点があれば解消する。</li> </ul> <p>以上が完了したら、テストルームに入ってもらいます。 (テストルームのセッティングはここまでに完了させておく) ケースにもよりますが、控室での談話はだいたい10-15分とのとです。</p> <h2>テストルームにて</h2> <p>テストルームに入ったら、被験者に椅子に座ってもらいます。 ※ タスク(テスト時にやってもらう内容)は口頭での説明だけだと忘れてしまうので、紙に印刷して被験者の手元においておきます</p> <h3>被験者に質問</h3> <p>タスク実施に入る前にデモではこんな質問を最初にしていました。</p> <ul> <li>どんな時買い物しますか?</li> <li>どれくらいの頻度でいきますか?</li> <li>普段からつかっていると。</li> <li>新聞の折込とかご覧になりますか</li> <li>どれくらいの頻度で</li> <li>どういったチラシを読みますか</li> <li>だいたい毎回みるチラシは同じですか?</li> <li>チラシを見たあとはどういう風にしていますか?</li> </ul> <p>この辺の質問も事前に用意しておいたほうがよさそうです。</p> <h3>被験者にタスクを実施してもらう</h3> <p>ここからタスク実施に入っていきます。 被験者にシチュエーションとタスクを書いた紙を渡し、声にだして読んでもらいます。 不明点ないか確認し、実際にタスクを開始します。 (ここで被験者が<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%DE%A5%DB">スマホ</a>上で行っている動作を、カメラ越しに別室で観察するイメージです) タスクの回数分だけ、 タスク読み上げ→タスク実行 を繰り返し、テストを終了します。</p> <h3>事後インタビュー</h3> <p>これも内容についてはケースによると思いますが、今回はテスト後にこのようなことを被験者に質問していました。</p> <ul> <li>率直なアプリの感想を教えてください</li> <li>今日アプリを利用して、このアプリに対しての評価は<a class="keyword" href="http://d.hatena.ne.jp/keyword/App%20Store">App Store</a> or <a class="keyword" href="http://d.hatena.ne.jp/keyword/Google%20Play">Google Play</a> Storeの5段階評価だといくつですか?</li> <li>このテストが終わってからアプリをどうしようと思ういますか?(プッシュ通知設定を切る・アプリ削除するかetc.)</li> <li>その理由は?</li> <li>例えば新聞がこなくなって、チラシがこなくなったらこれを使いますか?</li> <li>本日のテストとインタビューは以上です。ありがとうございました。</li> </ul> <p>という形でユーザーテストは終了。 その後被験者に謝礼を渡しますが、相場は1時間で交通費込で4000円とかが多いようです。</p> <h2>Q&amp;A</h2> <p>ユーザーテストの後に、主催者と参加者間のQ&Aがあったので、そちらのメモも書いておきます。</p> <ul> <li><p>タスクの設定の仕方はどうしてるか? →内部で<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D1%A5%A4%A5%ED">パイロ</a>ットテストをして精査する。</p></li> <li><p>アプリを使うのを放棄する(離脱)という選択肢を許すかどうか? → タスクの完遂を目標におく。普段だったらやめるというタイミングで言ってもらうようにするのもあり。</p></li> <li><p>ユーザーが迷ってどうしようもなくなったらどうするか? → 制限時間をもうけて、終わらなかったらヒントをあげて次に進んでもらう</p></li> <li><p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E9%A5%DD%A1%BC%A5%EB">ラポール</a>(相互信頼)形成・アイスブレイクのこつは? → 被験者は意外と頑張ってくれるから(謝礼もあるし)、あまり気にしなくても大抵問題ない。 ビジネスの関係であることはお互い分かっているので、仲良くならなくても大丈夫。(大人の場合はまず大丈夫だが、子供の場合は大変)</p></li> <li><p>テスト時の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%DE%A5%DB">スマホ</a>の持ち方は考える必要があるか? → 電車内で使うもの(つり革を掴んでいて片手しか使えない)等、特定の利用シチュエーションを想定していた片手制約を設けたりするが、だいたいは机に固定でOK</p></li> <li><p>被験者が緊張しそうな気がするが、どうなのか? → 意外とみんなフランク。観察されていることを忘れて素直にアプリをdisる人もいる。</p></li> <li><p>プロトタイピング段階のテストでもいいか → プロトタイピングとしての評価はできるので、コンセプトの検証としては良い。ただ、非アクティブな導線(押せないボタンがあったり等)が多くなるので、モデレータが逐一説明する必要がでてきてしまう。 — ただ、サンプル数を増やしたほうがいい。5人だと少ない。 — 一般的に質的な調査は10~15人。そのくらいになると飽和してくる。(<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C5%FD%B7%D7%B3%D8">統計学</a>的な話ではなく、経験則) — 10-15人にきいて、1人くらいしか良いといってなければ多分それはうまくいかないプロダクト — 謝礼を払うのはある意味リスク、ネガティブな意見が出づらい。 本当にコンセプトを検証したければ、対象となる人をみつけて、お金を払わず検証。(ただ、人が集まらずそうはいってられないことも多いのでその場合は仕方ない) — コンセプト検証ではなく、ユーザーテストに関しては謝礼を払って全然構わない。お金を払ったからといって上手く操作できるわけではない。 — ユーザーテストで評価するのは離脱とかではなく、インタラクション(ユーザーとコンピュータの対話)なので、そこを見誤らないように。統計的な信頼性はないが、質的なものとして大事。離脱についてはは計測でわかる。</p></li> </ul> <h2>最後に</h2> <p>全部がっつりメモをとったわけではないので抜け漏れもあるかもしれませんが、内容としては大体こんな感じでした。 ユーザーテストの流れやインタビュー方法は本やWEBにも載っているとは思いますが、「じゃあどんなテンションで話しかければいいの?」という点は結構気になっていたので、今回第三者の視点で生のユーザーテストを観ることができて良かったです。 また、第三者の視点で見ていると、質問が誘導的だなーと感じてしまうところも所々あったので、その辺も気をつける必要がありそうです。</p> <p>イベントの最後に主催者の方が告知をしていたのですが、、見学会でアプリのテストをしてほしい企業(無料。4週間くらいで実施までもっていけるそうです)・また会場提供スポンサーは随時募集しているとのことなので、興味がある方はこちらから主催者の方にご連絡してみてはいかがでしょうか。</p> <blockquote class="embedly-card" data-card-align="left" data-card-type="article" data-card-controls="0" data-card-key="766026660f3b4bc99ee26b68e3777147"><h4><a href="http://uxlive10.peatix.com/view">【5席増席】ユーザーテストLive! 2周年記念「UTライブの『舞台裏』ライブ見学会」 | Peatix</a><h4><p></p></blockquote> <p> <script async src="//cdn.embedly.com/widgets/platform.js" charset="UTF-8"></script></p> <p>また、今回の内容に興味をお持ちでしたら、主催者の方が執筆された本を読むと理解が進むと思いますので、ご紹介しておきます。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Kindle">Kindle</a>版</p> <blockquote class="embedly-card" data-card-align="left" data-card-type="article" data-card-controls="0" data-card-key="766026660f3b4bc99ee26b68e3777147"><a href="http://www.amazon.co.jp/gp/product/B00KV84VXS/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=B00KV84VXS&linkCode=as2&tag=70b9-222"></a></blockquote> <p> <script async src="//cdn.embedly.com/widgets/platform.js" charset="UTF-8"></script></p> <p>単行本版</p> <blockquote class="embedly-card" data-card-align="left" data-card-type="article" data-card-controls="0" data-card-key="766026660f3b4bc99ee26b68e3777147"><a href="http://www.amazon.co.jp/gp/product/4274214834/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=4274214834&linkCode=as2&tag=70b9-22"></a></blockquote> <p> <script async src="//cdn.embedly.com/widgets/platform.js" charset="UTF-8"></script></p> <p>それでは。</p> sfjmk 【エンジニアじゃなくてもできる】一切お金をかけずにブラウザ上で10分でFacebook Messenger Botを作る方法 hatenablog://entry/8599973812294640296 2016-05-01T00:00:00+09:00 2017-09-03T18:06:45+09:00 はじめに Facebook Messenger Apiが開放されて、Bot作ってみた系を沢山見かけるようになりましたが、作り方がよくわからないという方も結構らっしゃるのではないでしょうかでしょうか。 Messenger Botを動かすには、プログラムを書く必要があるのは勿論のことながら、 サーバーを用意しなきゃだったり、 SSL証明書を用意しなきゃだったり、 等々色々やることがあり、この辺の知識がない状態で必要な環境を自分で用意するとなると結構骨が折れます。(とはいっても調べながらやればなんとななるとは思いますが!) 色々調べてみたところ、技術的な前提知識がなくてもとりあえずMessenger… <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170903/20170903180610.png" alt="f:id:sfjmk:20170903180610p:plain" title="f:id:sfjmk:20170903180610p:plain" class="hatena-fotolife" itemprop="image"></span></p> <h2>はじめに</h2> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Facebook">Facebook</a> Messenger <a class="keyword" href="http://d.hatena.ne.jp/keyword/Api">Api</a>が開放されて、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Bot">Bot</a>作ってみた系を沢山見かけるようになりましたが、作り方がよくわからないという方も結構らっしゃるのではないでしょうかでしょうか。 Messenger <a class="keyword" href="http://d.hatena.ne.jp/keyword/Bot">Bot</a>を動かすには、プログラムを書く必要があるのは勿論のことながら、 サーバーを用意しなきゃだったり、 <a class="keyword" href="http://d.hatena.ne.jp/keyword/SSL%BE%DA%CC%C0%BD%F1">SSL証明書</a>を用意しなきゃだったり、 等々色々やることがあり、この辺の知識がない状態で必要な環境を自分で用意するとなると結構骨が折れます。(とはいっても調べながらやればなんとななるとは思いますが!) 色々調べてみたところ、技術的な前提知識がなくてもとりあえずMessengerで遊べる方法があったので、まとめてみました。 実現したいゴールは先日書いたこちらのLINE版の記事と一緒ですが、</p> <blockquote class="embedly-card" data-card-align="left" data-card-type="article" data-card-controls="0" data-card-key="766026660f3b4bc99ee26b68e3777147"><h4><a href="http://fjmk.jp/blog/310">【エンジニアじゃなくてもできる】一切お金をかけずにブラウザ上で10分でLINE BOTを作る方法 – FJMK.jp</a><h4><p></p></blockquote> <p> <script async src="//cdn.embedly.com/widgets/platform.js" charset="UTF-8"></script></p> <p>【宣伝】<a class="keyword" href="http://d.hatena.ne.jp/keyword/Bot">Bot</a>に関する情報共有用の<a class="keyword" href="http://d.hatena.ne.jp/keyword/Facebook">Facebook</a>グループを作ってみました。 記事の内容についてや<a class="keyword" href="http://d.hatena.ne.jp/keyword/Bot">Bot</a>についての質問があれば、ここに書いていただければ分かる範囲でお答えするので、興味がある方は是非入って下さい! こちらです ↓↓↓</p> <div class="fb-post" data-href="https://www.facebook.com/permalink.php?story_fbid=621051801377077&amp;id=136969053118690" data-width="300" data-show-text="true"><div class="fb-xfbml-parse-ignore"><blockquote cite="https://www.facebook.com/permalink.php?story_fbid=621051801377077&amp;id=136969053118690">Posted by <a href="https://www.facebook.com/fjmkjp-136969053118690/">fjmk.jp</a> on&nbsp;<a href="https://www.facebook.com/permalink.php?story_fbid=621051801377077&amp;id=136969053118690">Sunday, April 17, 2016</a></blockquote></div></div> <h2>この記事で目指すゴール</h2> <p>プログラミング未経験/初心者の方でも、お金をかけずに最短距離でとりあえず動く<a class="keyword" href="http://d.hatena.ne.jp/keyword/Facebook">Facebook</a> Messenger <a class="keyword" href="http://d.hatena.ne.jp/keyword/Bot">Bot</a>を作って遊ぶことをゴールとして記事を書きました。 こんな風に、ある文字列を送信したら、予め決めておいた返事が返ってくるような<a class="keyword" href="http://d.hatena.ne.jp/keyword/Bot">Bot</a>を作ります。</p> <p><img src="https://media.giphy.com/media/10vGV41a2DK4lq/giphy.gif" alt="動作画面" /></p> <p>利用するサービスの都合上、マイナーな言語を使うので正直ベストな方法ではありませんが、難しいことをしなくてもこの通りやればMessenger <a class="keyword" href="http://d.hatena.ne.jp/keyword/Bot">Bot</a>をすぐに作れるよくらいに考えていただければと思います。 ※ 無料サービスを使うので、7日間しか動かないです (作りなおせばまた7日間使えます) ※ エンジニアじゃなくても分かるとかいたものの、多少はITの前提知識がないと厳しいかもしれないです…笑</p> <h2><a class="keyword" href="http://d.hatena.ne.jp/keyword/Facebook">Facebook</a> Messenger <a class="keyword" href="http://d.hatena.ne.jp/keyword/API">API</a>でできること</h2> <p>この記事を見ておけば、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Facebook">Facebook</a> Messenger <a class="keyword" href="http://d.hatena.ne.jp/keyword/API">API</a>でできることを一通り把握できると思います。今回はこの辺を読まなくても作れますが、時間があるときにでも読んでみてください。</p> <blockquote class="embedly-card" data-card-align="left" data-card-type="article" data-card-controls="0" data-card-key="766026660f3b4bc99ee26b68e3777147"><h4><a href="http://qiita.com/betchi/items/539f5e32cd9a9c8d2db4">Facebook Messenger Platform BETAでできる全ての事を試してみた(LINE BOT APIとの比較あり) - Qiita</a><h4><p></p></blockquote> <p> <script async src="//cdn.embedly.com/widgets/platform.js" charset="UTF-8"></script></p> <blockquote class="embedly-card" data-card-align="left" data-card-type="article" data-card-controls="0" data-card-key="766026660f3b4bc99ee26b68e3777147"><h4><a href="https://developers.facebook.com/docs/messenger-platform">Messenger Platform</a><h4><p></p></blockquote> <p> <script async src="//cdn.embedly.com/widgets/platform.js" charset="UTF-8"></script></p> <h2>作り方</h2> <p>それでは順を追って説明していきます。 <a class="keyword" href="http://d.hatena.ne.jp/keyword/Facebook">Facebook</a> Pageの作成と、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Facebook">Facebook</a> Appの作成、そしてWebscriptというサービスにコードを書いて<a class="keyword" href="http://d.hatena.ne.jp/keyword/API">API</a>を作成します。</p> <h3>WebScript登録</h3> <p>上記の通り、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Facebook">Facebook</a> Messenger <a class="keyword" href="http://d.hatena.ne.jp/keyword/Bot">Bot</a>を動かすには、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Bot">Bot</a>の<a class="keyword" href="http://d.hatena.ne.jp/keyword/API">API</a>を用意する必要があります。 普通にやろうとすると自分でサーバーを立てたり環境構築をしたり<a class="keyword" href="http://d.hatena.ne.jp/keyword/SSL%BE%DA%CC%C0%BD%F1">SSL証明書</a>を取得したりと面倒なので、今回はWebScriptというサービスを使います。 <a href="https://www.webscript.io/">webscript - scripting on the web</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/Lua">Lua</a>言語というあまり使われない言語ですが、基本的な書き方については他の言語と大して変わりません。 まず、webscriptにアクセスしてください。</p> <blockquote class="embedly-card" data-card-align="left" data-card-type="article" data-card-controls="0" data-card-key="766026660f3b4bc99ee26b68e3777147"><h4><a href="https://www.webscript.io/">webscript - scripting on the web</a><h4><p></p></blockquote> <p> <script async src="//cdn.embedly.com/widgets/platform.js" charset="UTF-8"></script></p> <p><img src="https://gyazo.com/3a4d235e9484a39969fc286db8333490.png" alt="enter image description here" /></p> <p>右上のlogin/signupをクリック</p> <p><img src="https://gyazo.com/9a19eb3e559fc424b09900ab0796eaf0.png" alt="enter image description here" /></p> <p>sign up for free を押します。</p> <p><img src="https://gyazo.com/34b4744b3380580c21d0e88f4a59dc3d.png" alt="enter image description here" /></p> <p>メールアドレスとパスワードを入力して Sign Upをクリック</p> <p><img src="https://gyazo.com/3c0d843113f848f6b72492028b38b71c.png" alt="enter image description here" /></p> <p>これでwebscriptにアカウント登録がされました。右上のLogin/Signupを押してログインに進みます。 (正しく入力しててもこんな風にエラーがでてしまうことがあるのですが、気にせずログインできるか試してみてください。)</p> <p><img src="https://gyazo.com/14c944040973c5db82f8c53437ee542d.png" alt="enter image description here" /></p> <p><img src="https://gyazo.com/73121f0e9e48b1f1f39ad31cc25cb425.png" alt="enter image description here" /></p> <p>ログインしたら<a class="keyword" href="http://d.hatena.ne.jp/keyword/%CD%F8%CD%D1%B5%AC%CC%F3">利用規約</a>確認画面が出るのでAcceptをクリック。 それでは実装に入っていきます。 `</p> <p><img src="https://gyazo.com/fa174752c5077b2290369d7a8a0dd4fd.png" alt="enter image description here" /></p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%CD%F8%CD%D1%B5%AC%CC%F3">利用規約</a>を承諾するとこの画面になると思うので(なってなかったらScriptと書いてある上部のタブを押してください)、左側にある &ldquo;Create New Script"をクリックします。</p> <p><img src="https://gyazo.com/b3c874a2f1fd3c6e273d0d8cd98a09f9.png" alt="enter image description here" /></p> <p>するとこんなポップアップが出るので、お好きなアルファベット文字列を入力してください 。ここではmessenger-exampleとしています。(他の人と被った文字列は使えません) これが今回作る<a class="keyword" href="http://d.hatena.ne.jp/keyword/API">API</a>のURLになります。 入力したら"Create"を押して下さい。</p> <p><img src="https://gyazo.com/1548ac2f14df1fa9b2d881e297299f64.png" alt="enter image description here" /></p> <p>こちらのコードを入力して、saveを押してください。</p> <pre class="code" data-lang="" data-unlink> -- 認証情報 設定内容に応じて書き換えてください。 messenger_token = &#39;tokenexample&#39; -- Facebookとの疎通確認時に使うトークン(webhookで設定したものです) access_token = &#39;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&#39; -- 利用するFacebookページのアクセストークン -- GETリクエストがきたら、疎通確認を実行 if request.method == &#39;GET&#39; then -- 自分で設定したtokenとFacebookからリクエストされたtokenが一致していたら、hub.challengeパラメータに入っている値を返す(これが返されてるかどうかで疎通確認が行われます) if request.query[&#39;hub.verify_token&#39;] == messenger_token then return request.query[&#39;hub.challenge&#39;] else return false end -- POSTリクエストがきたら、メッセージを返す処理を実行 elseif request.method == &#39;POST&#39; then -- 受信したリクエストの中の、メッセージに関する情報をmessaging変数に代入 messaging = json.parse(request.body).entry[1].messaging[1] -- messagging内にmessageというパラメータとmessage.testというパラメータが入っていたらメッセージ解析処理に入る if messaging.message and messaging.message.text then -- 変数received_messageに空欄を一旦代入(メッセージ) received_message = messaging.message.text -- 変数received_messageに受信したメッセージ内容を代入 --- メッセージを決める処理 if received_message == &#39;おはよう&#39; then response_message = &#39;おはようございます!今日もがんばりましょう!&#39; --- 変数received_messageの中身が「おはよう」だったら、「おはようございます!今日もがんばりましょう!」を変数response_messageに代入 (以下コピペで条件を追加していけます) elseif received_message == &#39;おやすみ&#39; then response_message = &#39;今日も一日お疲れ様でした&#39; elseif received_message == &#39;やられたらやり返す&#39; then response_message = &#39;倍返しだ!&#39; else --- 上のどの条件にも該当しなかったら、変数response_messageに「[送信内容]? ちょっとなに言ってるかわからない」を代入 \n は改行するコードです。 response_message = received_message .. &#39;? \nちょっとなに言ってるかわかんない&#39; end else -- messagging内にmessageというパラメータとmessage.testというパラメータが入っていなかったら(=スタンプや位置情報だったら)以下のメッセージを代入 response_message = &#39;正しく入力して下さい!&#39; end -- Facebook側に返すデータ作成 data = { [&#39;recipient&#39;] = { [&#39;id&#39;] = messaging.sender.id }, [&#39;message&#39;] = { [&#39;text&#39;] = response_message }, } -- メッセージ送信処理 local response = http.request { method = &#39;POST&#39;, url = &#39;https://graph.facebook.com/v2.6/me/messages?access_token=&#39; .. access_token, data = json.stringify(data), headers = { [&#39;Content-Type&#39;] = &#39;application/json; charser=UTF-8&#39;, } } end</pre> <pre class="code" data-lang="" data-unlink>-- 変数received_messageに受信したメッセージ内容を代入</pre> <p>こんな風に所々解説を書いていますが、&ndash; (ハイフン2個)に続く文字列は"コメント"といってプログラム上では無視されます。 (<a class="keyword" href="http://d.hatena.ne.jp/keyword/Lua">Lua</a>言語では &ndash; ですが、他の言語では // や # や /<em> </em>/ が使われることが多いです)</p> <h3><a class="keyword" href="http://d.hatena.ne.jp/keyword/Facebook">Facebook</a> Page作成</h3> <p>まず以下のリンクに飛んで<a class="keyword" href="http://d.hatena.ne.jp/keyword/Facebook">Facebook</a>ページを作ります。</p> <blockquote class="embedly-card" data-card-align="left" data-card-type="article" data-card-controls="0" data-card-key="766026660f3b4bc99ee26b68e3777147"><h4><a href="https://www.facebook.com/pages/create">Facebookページを作成</a><h4><p></p></blockquote> <p> <script async src="//cdn.embedly.com/widgets/platform.js" charset="UTF-8"></script> <img src="https://gyazo.com/b94b4f24841806569c07ac6fd6a43dbb.png" alt="Facebook Page新規作成" /></p> <p>ページの種類はどれでもいいのですが、今回はBrand or Productを選択します。 (記事を書いてから、MessnegerではなくMessngerになってることに気づきました笑)</p> <p><img src="https://gyazo.com/ce003820849ecf0db2a66a167e438e16.png" alt="Facebook Page新規作成" /></p> <p>ページのタイプ(ここではApp Pageを選択)とページ名(ここでは Messenger <a class="keyword" href="http://d.hatena.ne.jp/keyword/Bot">Bot</a> Test に)を選択し、Get Startedを押します。</p> <p><img src="https://gyazo.com/ec787a4fb017d8425eb8e9ada3e1a0f2.png" alt="Facebook Page About設定" /></p> <p>入力してもいいですが、今回はテストなのでSkipします。</p> <p><img src="https://gyazo.com/e3ecfbd1fb35fb84527052337562b957.png" alt="Facebook Page アイコン選択" /></p> <p>アイコン選択も同様にSkip。 ちなみに、ここで選択した画像が<a class="keyword" href="http://d.hatena.ne.jp/keyword/Bot">Bot</a>のアイコンになるので、設定したい方は設定してください。</p> <p><img src="https://gyazo.com/61445db8f3e533893743e83a42c56921.png" alt="Facebook Page お気に入り追加" /></p> <p>お気に入り追加するかどうか設定。こちらはお好きにどうぞ。</p> <p><img src="https://gyazo.com/c925f0c0d3f7269695c105c97eef2eda.png" alt="Facebook Page Audience" /></p> <p>対象ユーザーの設定。入力してもいいですが、今回はスキップします。</p> <p><img src="https://i.gyazo.com/962d86af6c04843bee0e82eab6f2ef90.png" alt="Facebook Page 作成完了" /></p> <p>これで<a class="keyword" href="http://d.hatena.ne.jp/keyword/Facebook">Facebook</a>ページができました。</p> <hr /> <h3>FB App登録</h3> <p>次に<a class="keyword" href="http://d.hatena.ne.jp/keyword/Facebook">Facebook</a>アプリを作成します。 まず、こちらのページにアクセスしてください。</p> <blockquote class="embedly-card" data-card-align="left" data-card-type="article" data-card-controls="0" data-card-key="766026660f3b4bc99ee26b68e3777147"><h4><a href="https://developers.facebook.com/quickstarts/">Quick Starts - 開発者向けFacebook</a><h4><p></p></blockquote> <p> <script async src="//cdn.embedly.com/widgets/platform.js" charset="UTF-8"></script></p> <p><img src="https://gyazo.com/a8f2915c070853a6d8546b29cbe47a63.png" alt="FB App作成初期画面" /></p> <p>どのプラットフォーム上での<a class="keyword" href="http://d.hatena.ne.jp/keyword/Facebook">Facebook</a>のアプリを作るかきかれるので、wwwを選択してください。(どれでも大丈夫といえば大丈夫ですが、今回はこれでいきます)</p> <p><img src="https://gyazo.com/d4e31b065e42f85e7ec2ff4035c01948.png" alt="FB App名前設定画面" /></p> <p>アプリ名を適当に入力してCreate New <a class="keyword" href="http://d.hatena.ne.jp/keyword/Facebook">Facebook</a> App IDをクリック。</p> <p><img src="https://gyazo.com/db3045269df8446e9959aa8bcc29cb72.png" alt="FB App連絡先Page登録画面" /></p> <p>メールアドレスを入力して、Categoryを選択。 どれでもいいですが、今回はApps for Pagesを選択しました。 Create App IDをクリック。。</p> <p><img src="https://gyazo.com/c998dc742ac0ea90c1652f6f43884bcf.png" alt="" /></p> <p>こんな画面に遷移するので、下にスクロールしてください。</p> <p><img src="https://gyazo.com/6c01ae1c936f649bb299be131bd67487.png" alt="" /></p> <p>webサイトのURLを聞かれるので、URLを入力します。 自分のサイトを持っていたら自分のサイトのURLで。なければ適当なURLでも大丈夫です。</p> <p><img src="https://gyazo.com/741422f5a42cc6a66d9882749c813f10.png" alt="FB App 初期設定完了画面" /></p> <p>これで<a class="keyword" href="http://d.hatena.ne.jp/keyword/Facebook">Facebook</a>アプリができたので、Skip To Developer <a class="keyword" href="http://d.hatena.ne.jp/keyword/Dashboard">Dashboard</a>をクリックすると、アプリのダッシュボードに飛びます。</p> <p><img src="https://gyazo.com/055c38a99c0e805d7cec0525c6acd61d.png" alt="FB App ダッシュボード" /></p> <p>これで<a class="keyword" href="http://d.hatena.ne.jp/keyword/Facebook">Facebook</a> Appができました。 ダッシュボードはこちらから飛べるので、見失ったらこちらをクリックしてください。 <br/> <a href="https://developers.facebook.com/apps">All Apps - Facebook for Developers</a>- - -</p> <h3>疎通確認</h3> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Bot">Bot</a>を使うには<a class="keyword" href="http://d.hatena.ne.jp/keyword/Facebook">Facebook</a> Appと自作<a class="keyword" href="http://d.hatena.ne.jp/keyword/API">API</a>の間でリク<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>トが通るかどうかチェックする必要があるので、その作業を行います。</p> <p><img src="https://gyazo.com/055c38a99c0e805d7cec0525c6acd61d.png" alt="" /></p> <p>まず、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Facebook">Facebook</a> Appのダッシュボードでmessengerタブを開く(左下のMessengerを押して下さい)</p> <p><img src="https://gyazo.com/5013d9112ee176f7f6af10d4ad3af855.png" alt="" /></p> <p>Get Startedをクリック</p> <p><img src="https://gyazo.com/65b31783c1abf3e1c80b15bfb5554092.png" alt="" /></p> <p>webhooksをクリックします。</p> <p><img src="https://gyazo.com/8d069b626f3209dfade766344d722e56.png" alt="" /></p> <p>webscriptで設定したURLと、tokenとして適当な文字列(ここではtokenexample)を入力し、messagesにチェックを入れVerify and Saveを押します。 もしここでtokenexampleから他の文字列に変えていたら、webscript上の</p> <pre><code>-- 認証情報 設定内容に応じて書き換えてください。 messenger_token = 'tokenexample' -- Facebookとの疎通確認時に使うトークン(webhookで設定したものです) access_token = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' -- 利用するFacebookページのアクセストークン </code></pre> <p>ここでtokenexampleとなっているところも変更してください。 この時に裏で設定したCallback URLに対してGETリク<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>トが飛ばせれ、webscriptに入力した</p> <pre><code>-- GETリクエストがきたら、疎通確認を実行 if request.method == 'GET' then -- 自分で設定したtokenとFacebookからリクエストされたtokenが一致していたら、hub.challengeパラメータに入っている値を返す(これが返されてるかどうかで疎通確認が行われます) if request.query['hub.verify_token'] == messenger_token then return request.query['hub.challenge'] else return false end </code></pre> <p>この部分が呼ばれ、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Facebook">Facebook</a>と自作の<a class="keyword" href="http://d.hatena.ne.jp/keyword/API">API</a>が正しく疎通できているか確認されます。</p> <p><img src="https://gyazo.com/8328e88f90d0f46e626a34e45fd5a15a.png" alt="" /></p> <p>問題なく疎通確認できたらこの通りCmpleteが表示されるので、次はその下のSelect a Pageで今回作った<a class="keyword" href="http://d.hatena.ne.jp/keyword/Facebook">Facebook</a> Pageを選択</p> <p><img src="https://gyazo.com/c9b3c1493b608063395799842e61456e.png" alt="" /></p> <p>こんなダイアログがでるのでOkayをクリック。</p> <p><img src="https://gyazo.com/9608c06a79e272eb0bc1c91a727a92bf.png" alt="" /></p> <p>次もOkayをクリック。</p> <p><img src="https://gyazo.com/84f90cf93c5b29482c362e07bc6de1da.png" alt="" /></p> <p>ページが選択されたので、Subscribeをクリックします。</p> <p><img src="https://gyazo.com/3aa05bfcac21e34711ed4c327ed9e780.png" alt="" /></p> <p>最後に、ダッシュボード上部のToken Generationの欄の Select a Pageで今回作った<a class="keyword" href="http://d.hatena.ne.jp/keyword/Facebook">Facebook</a>ページを選択し、表示された長い文字列をコピーします。(クリックするとコピーされます。) そして、webscriptの編集画面で</p> <pre class="code" data-lang="" data-unlink> -- 認証情報 設定内容に応じて書き換えてください。 messenger_token = &#39;tokenexample&#39; -- Facebookとの疎通確認時に使うトークン(webhookで設定したものです) access_token = &#39;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&#39; -- 利用するFacebookページのアクセストークン</pre> <p>ここのXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXとなっているところに貼り付けてください。 そして、Saveを押します。</p> <h3>動作確認</h3> <p>ここまで上手くいっていれば<a class="keyword" href="http://d.hatena.ne.jp/keyword/Bot">Bot</a>動くはずなので、動作確認をしようと思います。 まず今回作った<a class="keyword" href="http://d.hatena.ne.jp/keyword/Facebook">Facebook</a> ページにアクセスしてください。</p> <p><img src="https://gyazo.com/d93b663e48e7984192abb2fcf6f100af.png" alt="Facebookページ" /></p> <p>Messageをクリック</p> <p><img src="https://gyazo.com/07ff3254c2538f99d5e40305042402db.png" alt="メッセージ" /></p> <p>チャットボックスが表示されるので何か文字を入力してください。</p> <h3>完成</h3> <p>返事がきたら成功です!</p> <p><img src="https://gyazo.com/89df73296abb7274aac21019337ef77d.png" alt="動作画面" /></p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%DE%A5%DB">スマホ</a>でも勿論動作します。</p> <p><img src="https://media.giphy.com/media/10vGV41a2DK4lq/giphy.gif" alt="動作画面" /></p> <pre class="code" data-lang="" data-unlink> if messaging.message and messaging.message.text then -- 変数received_messageに空欄を一旦代入(メッセージ) received_message = messaging.message.text -- 変数received_messageに受信したメッセージ内容を代入 --- メッセージを決める処理 if received_message == &#39;おはよう&#39; then response_message = &#39;おはようございます!今日もがんばりましょう!&#39; --- 変数received_messageの中身が「おはよう」だったら、「おはようございます!今日もがんばりましょう!」を変数response_messageに代入 (以下コピペで条件を追加していけます) elseif received_message == &#39;おやすみ&#39; then response_message = &#39;今日も一日お疲れ様でした&#39; elseif received_message == &#39;やられたらやり返す&#39; then response_message = &#39;倍返しだ!&#39; else --- 上のどの条件にも該当しなかったら、変数response_messageに「[送信内容]? ちょっとなに言ってるかわからない」を代入 \n は改行するコードです。 response_message = received_message .. &#39;? \nちょっとなに言ってるかわかんない&#39; end else -- messagging内にmessageというパラメータとmessage.testというパラメータが入っていなかったら(=スタンプや位置情報だったら)以下のメッセージを代入 response_message = &#39;正しく入力して下さい!&#39; end</pre> <p>コードのこの辺をいじるとメッセージの条件を変えられるので色々いじって遊んでみましょう (変更したらsaveを押すのを忘れずに!)</p> <h3>最後に</h3> <p>作った<a class="keyword" href="http://d.hatena.ne.jp/keyword/Bot">Bot</a>はちゃんと動きましたでしょうか? webscriptはあくまでプロトタイプ用なので、これが上手くうごいたら次はサーバーを用意するなりして他の言語 (<a class="keyword" href="http://d.hatena.ne.jp/keyword/ruby">ruby</a>とか<a class="keyword" href="http://d.hatena.ne.jp/keyword/php">php</a>だと情報源が多そうです)でもうちょっと高度な<a class="keyword" href="http://d.hatena.ne.jp/keyword/Bot">Bot</a>作成も試してみてください。 また、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Bot">Bot</a>に関する情報共有用の<a class="keyword" href="http://d.hatena.ne.jp/keyword/Facebook">Facebook</a>グループを作ってみました。 記事の内容についてや<a class="keyword" href="http://d.hatena.ne.jp/keyword/Bot">Bot</a>についての質問があれば、ここに書いていただければ分かる範囲でお答えするので、興味がある方は是非入って下さい! こちらです ↓↓↓</p> <div class="fb-post" data-href="https://www.facebook.com/permalink.php?story_fbid=621051801377077&amp;id=136969053118690" data-width="300" data-show-text="true"><div class="fb-xfbml-parse-ignore"><blockquote cite="https://www.facebook.com/permalink.php?story_fbid=621051801377077&amp;id=136969053118690">Posted by <a href="https://www.facebook.com/fjmkjp-136969053118690/">fjmk.jp</a> on&nbsp;<a href="https://www.facebook.com/permalink.php?story_fbid=621051801377077&amp;id=136969053118690">Sunday, April 17, 2016</a></blockquote></div></div> sfjmk 【エンジニアじゃなくてもできる】一切お金をかけずにブラウザ上で10分でLINE BOTを作る方法 hatenablog://entry/8599973812294639339 2016-04-13T00:00:00+09:00 2017-09-03T18:03:28+09:00 LINE Bot Trial Apiが開放されて、Bot作ってみた系を沢山見かけるようになりましたが、「1万人限定らしいからアカウントとってみたけど、BOTの作り方とかよくわかんない」という方も結構いるんじゃないでしょうか。 LINE BOTを動かすには、プログラムを書く必要があるのは勿論のことながら、 サーバーを用意しなきゃだったり、 SSL証明書を用意しなきゃだったり、 固定IPを用意しなきゃいけなかったり 等々色々やることがあり、この辺の知識がない状態で必要な環境を自分で用意するとなると結構骨が折れます。(とはいっても調べながらやればなんとななるとは思いますが!) 色々調べてみたところ、… <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170903/20170903180145.png" alt="f:id:sfjmk:20170903180145p:plain" title="f:id:sfjmk:20170903180145p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>LINE <a class="keyword" href="http://d.hatena.ne.jp/keyword/Bot">Bot</a> Trial <a class="keyword" href="http://d.hatena.ne.jp/keyword/Api">Api</a>が開放されて、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Bot">Bot</a>作ってみた系を沢山見かけるようになりましたが、「1万人限定らしいからアカウントとってみたけど、<a class="keyword" href="http://d.hatena.ne.jp/keyword/BOT">BOT</a>の作り方とかよくわかんない」という方も結構いるんじゃないでしょうか。</p> <p>LINE <a class="keyword" href="http://d.hatena.ne.jp/keyword/BOT">BOT</a>を動かすには、プログラムを書く必要があるのは勿論のことながら、</p> <ul> <li>サーバーを用意しなきゃだったり、</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/SSL%BE%DA%CC%C0%BD%F1">SSL証明書</a>を用意しなきゃだったり、</li> <li>固定IPを用意しなきゃいけなかったり</li> </ul> <p>等々色々やることがあり、この辺の知識がない状態で必要な環境を自分で用意するとなると結構骨が折れます。(とはいっても調べながらやればなんとななるとは思いますが!)</p> <p>色々調べてみたところ、技術的な前提知識がなくてもとりあえずLINE <a class="keyword" href="http://d.hatena.ne.jp/keyword/BOT">BOT</a>で遊べる方法があったので、まとめてみました。</p> <hr /> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Bot">Bot</a>に関する情報共有用の<a class="keyword" href="http://d.hatena.ne.jp/keyword/Facebook">Facebook</a>グループを作ってみました。 記事の内容についてや<a class="keyword" href="http://d.hatena.ne.jp/keyword/Bot">Bot</a>についての質問があれば、ここに書いていただければ分かる範囲でお答えするので、興味がある方は是非入って下さい!</p> <p>こちらです ↓↓↓</p> <p><a href="https://www.facebook.com/groups/261695480833292/">Bot Developers</a></p> <div class="fb-post" data-href="https://www.facebook.com/permalink.php?story_fbid=621051801377077&amp;id=136969053118690" data-width="500" data-show-text="true"> <div class="fb-xfbml-parse-ignore"> <blockquote cite="https://www.facebook.com/permalink.php?story_fbid=621051801377077&amp;id=136969053118690">Posted by <a href="https://www.facebook.com/fjmkjp-136969053118690/">fjmk.jp</a> on <a href="https://www.facebook.com/permalink.php?story_fbid=621051801377077&amp;id=136969053118690">Sunday, April 17, 2016</a></blockquote> </div> </div> <hr /> <h2>この記事で目指すゴール</h2> <p>プログラミング未経験/初心者の方でも、お金をかけずに最短距離でとりあえず動くLINE <a class="keyword" href="http://d.hatena.ne.jp/keyword/BOT">BOT</a>を作って遊ぶことをゴールとして記事を書きました。</p> <p>こんな風に、ある文字列を送信したら、予め決めておいた返事が返ってくるような<a class="keyword" href="http://d.hatena.ne.jp/keyword/Bot">Bot</a>を作ります。 <img src="https://gyazo.com/db2099d69c3dc937091b34c67cf8e31a.png" alt="enter image description here" /> (本当はアイドルの画像とかにするとだいぶテンションが上がるのですが、肖像権的なアレがあるので一応フリー素材のロボットにしました笑)</p> <p>利用するサービスの都合上、マイナーな言語を使うので正直ベストな方法ではありませんが、難しいことをしなくてもこの通りやればLINE <a class="keyword" href="http://d.hatena.ne.jp/keyword/BOT">BOT</a>をすぐに作れるよくらいに考えていただければと思います。</p> <p>※ 無料サービスを使うので、7日間しか動かないです (作りなおせばまた7日間使えます) ※ 作業自体は10分程度でできますが、LINEに諸々の設定が反映されるのに時間がかかる場合があるので、実際に<a class="keyword" href="http://d.hatena.ne.jp/keyword/Bot">Bot</a>が動くまではもっと時間がかかる可能性があります。 ※ エンジニアじゃなくても分かるとかいたものの、多少はITの前提知識がないと厳しいかもしれないです&hellip;笑</p> <h2>LINE Trial <a class="keyword" href="http://d.hatena.ne.jp/keyword/Bot">Bot</a>でできること</h2> <p>この記事を見ておけば、LINE Trial <a class="keyword" href="http://d.hatena.ne.jp/keyword/Bot">Bot</a>でできることを一通り把握できると思います。今回はこの辺を読まなくても作れますが、時間があるときにでも読んでみてください。</p> <blockquote class="embedly-card" data-card-align="left" data-card-type="article" data-card-controls="0" data-card-key="766026660f3b4bc99ee26b68e3777147"><a href="http://qiita.com/betchi/items/8e5417dbf20a62f2239d">LINE BOT API Trialでできる全ての事を試してみた - Qiita</a></blockquote> <script src="//cdn.embedly.com/widgets/platform.js" async="" charset="UTF-8"></script> <p>公式ドキュメント (英語)</p> <blockquote class="embedly-card" data-card-align="left" data-card-type="article" data-card-controls="0" data-card-key="766026660f3b4bc99ee26b68e3777147"> <a href="https://developers.line.me/bot-api/overview">LINE Developers - BOT API - Overview</a> </blockquote> <script src="//cdn.embedly.com/widgets/platform.js" async="" charset="UTF-8"></script> <h2>作り方</h2> <p>それでは作り方について順を追って説明していきます。</p> <h3>LINE developerに登録</h3> <blockquote class="embedly-card" data-card-align="left" data-card-type="article" data-card-controls="0" data-card-key="766026660f3b4bc99ee26b68e3777147"><a href="https://business.line.me/ja/">LINE BUSINESS CENTER</a></blockquote> <script src="//cdn.embedly.com/widgets/platform.js" async="" charset="UTF-8"></script> <p>こちらのページにアクセスしてLINE developerアカウントを作ります。</p> <p>こちらで<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A1%BC%A5%F3%A5%B7%A5%E7%A5%C3%A5%C8">スクリーンショット</a>付きで詳しく解説されていますのでアカウント作成の流れはこちらの記事をご覧ください。</p> <blockquote class="embedly-card" data-card-align="left" data-card-type="article" data-card-controls="0" data-card-key="766026660f3b4bc99ee26b68e3777147"> <a href="http://qiita.com/Yuki_BB3/items/5c18073181b5eea94164">【LINE BOT】 アカウント設定の仕方 〜アカウントを取ってみた!〜 - Qiita</a> </blockquote> <script src="//cdn.embedly.com/widgets/platform.js" async="" charset="UTF-8"></script> <h3>WebScriptに登録</h3> <p>LINE <a class="keyword" href="http://d.hatena.ne.jp/keyword/BOT">BOT</a>を動かすには、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Bot">Bot</a>の<a class="keyword" href="http://d.hatena.ne.jp/keyword/API">API</a>を用意する必要があります。 普通にやろうとすると自分でサーバーを立てたり環境構築をしたり<a class="keyword" href="http://d.hatena.ne.jp/keyword/SSL%BE%DA%CC%C0%BD%F1">SSL証明書</a>を取得したりと面倒なので、今回はWebScriptというサービスを使います。 <a href="https://www.webscript.io/">webscript - scripting on the web</a></p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Lua">Lua</a>言語というあまり使われない言語ですが、基本的な書き方については他の言語と大して変わりません。</p> <p>WebScriptはこちらの記事で知りました (コードもかなり參考にさせていただいてます&hellip;) <a href="http://yamamotomanabu.hatenablog.com/entry/2016/04/08/webscript.io%E3%81%A7LINE_BOT_API%E3%81%AE%E4%BA%8B%E5%A7%8B%E3%82%81">webscript.ioでLINE BOT APIの事始め - No Regret No Life</a></p> <p>まず、webscriptにアクセスしてください。</p> <blockquote class="embedly-card" data-card-align="left" data-card-type="article" data-card-controls="0" data-card-key="766026660f3b4bc99ee26b68e3777147"><a href="https://www.webscript.io/">webscript - scripting on the web</a></blockquote> <script src="//cdn.embedly.com/widgets/platform.js" async="" charset="UTF-8"></script> <p><img src="https://gyazo.com/3a4d235e9484a39969fc286db8333490.png" alt="enter image description here" /> 右上のlogin/signupをクリック <img src="https://gyazo.com/9a19eb3e559fc424b09900ab0796eaf0.png" alt="enter image description here" /> sign up for free を押します。 <img src="https://gyazo.com/34b4744b3380580c21d0e88f4a59dc3d.png" alt="enter image description here" /> メールアドレスとパスワードを入力して Sign Upをクリック <img src="https://gyazo.com/3c0d843113f848f6b72492028b38b71c.png" alt="enter image description here" /> これでwebscriptにアカウント登録がされました。右上のLogin/Signupを押してログインに進みます。 (正しく入力しててもこんな風にエラーがでてしまうことがあるのですが、気にせずログインできるか試してみてください。) <img src="https://gyazo.com/14c944040973c5db82f8c53437ee542d.png" alt="enter image description here" /> <img src="https://gyazo.com/73121f0e9e48b1f1f39ad31cc25cb425.png" alt="enter image description here" /></p> <h3>実装</h3> <p>それでは実装に入っていきます。 ` <img src="https://gyazo.com/fa174752c5077b2290369d7a8a0dd4fd.png" alt="enter image description here" /> <a class="keyword" href="http://d.hatena.ne.jp/keyword/%CD%F8%CD%D1%B5%AC%CC%F3">利用規約</a>を承諾するとこの画面になると思うので(なってなかったらScriptと書いてある上部のタブを押してください)、左側にある &ldquo;Create New Script"をクリックします。</p> <p><img src="https://gyazo.com/7c1f94a8696aeba3808cfbc2063adcfe.png" alt="enter image description here" /> するとこんなポップアップが出るので、お好きなアルファベット文字列を入力してください 。(他の人と被った文字列は使えません) これが今回作る<a class="keyword" href="http://d.hatena.ne.jp/keyword/API">API</a>のURLになります。 入力したら"Create"を押して下さい。 <img src="https://gyazo.com/3bf43bd8390a197ea89a2abb8c755a85.png" alt="enter image description here" /></p> <p>ここに、以下の内容をコピペします。認証情報のところだけ自分の情報に書き換えてください。</p> <p><a href="https://developers.line.me/channels">https://developers.line.me/channels</a> こちらで設定されているChannel ID, Channel Secret, MIDをそれぞれ入れてください。</p> <pre class="code" data-lang="" data-unlink>-- 認証情報 -- 以下の3つを書き換える。今は適当な文字列が入ってます。 line_channel_id = &#39;1234566789&#39; line_channel_secret = &#39;abcdefghijklmnopqrstuvwsyz123456789&#39; line_mid = &#39;qwertyuiopas1234&#39; --以下の2つはこのままで大丈夫です line_to_channel = &#39;1383378250&#39; line_event_type = &#39;138311608800106203&#39; -- 受信したデータを整形して、変数request_bodyに代入 request_body = json.parse(request.body) --- 変数received_messageに受信したメッセージ内容を代入 received_message = request_body.result[1].content.text --- 変数reply_toに受信元情報(BOTに対してメッセージを送った人のID)を代入 reply_to = request_body.result[1].content.from --- メッセージを決める処理 if received_message == &#39;おはよう&#39; then response_message = &#39;おはようございます!今日もがんばりましょう!&#39; --- 変数received_messageの中身が「おはよう」だったら、「おはようございます!今日もがんばりましょう!」を変数response_messageに代入 (以下コピペで条件を追加していけます) elseif received_message == &#39;おやすみ&#39; then response_message = &#39;今日も一日お疲れ様でした&#39; elseif received_message == &#39;やられたらやり返す&#39; then response_message = &#39;倍返しだ!&#39; else --- 上のどの条件にも該当しなかったら、変数response_messageに「[送信内容]? ちょっとなに言ってるかわからない」を代入 \n は改行するコードです。 response_message = received_message .. &#39;? \nちょっとなに言ってるかわかんない&#39; end -- メッセージを送るためにデータを整形 data = { [&#39;to&#39;] = {reply_to}, [&#39;toChannel&#39;] = line_to_channel, [&#39;eventType&#39;] = line_event_type, [&#39;content&#39;] = { [&#39;contentType&#39;] = 1, [&#39;toType&#39;] = 1, [&#39;text&#39;] = response_message } } -- メッセージ送信 local response = http.request { method = &#39;POST&#39;, url = &#39;https://trialbot-api.line.me/v1/events&#39;, data = json.stringify(data), headers = { [&#39;Content-Type&#39;] = &#39;application/json; charser=UTF-8&#39;, [&#39;X-Line-ChannelID&#39;] = line_channel_id, [&#39;X-Line-ChannelSecret&#39;] = line_channel_secret, [&#39;X-Line-Trusted-User-With-ACL&#39;] = line_mid } } return true</pre> <p>また、</p> <pre class="code" data-lang="" data-unlink>-- 変数received_messageに受信したメッセージ内容を代入</pre> <p>こんな風に所々解説を書いていますが、&ndash; (ハイフン2個)に続く文字列は"コメント"といってプログラム上では無視されます。 (<a class="keyword" href="http://d.hatena.ne.jp/keyword/Lua">Lua</a>言語では &ndash; ですが、他の言語では // や # や /<em> </em>/ が使われることが多いです)</p> <h3>callback URLと<a class="keyword" href="http://d.hatena.ne.jp/keyword/IP%A5%A2%A5%C9%A5%EC%A5%B9">IPアドレス</a>をLINEに登録。</h3> <p>今回<a class="keyword" href="http://d.hatena.ne.jp/keyword/API">API</a>を利用するにあたって、 「LINE側からリク<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>トを飛ばされるURL(callback URL)」と「LINE側にリク<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>トを飛ばす元の<a class="keyword" href="http://d.hatena.ne.jp/keyword/IP%A5%A2%A5%C9%A5%EC%A5%B9">IPアドレス</a>(サーバーの住所のようなもの)」を設定する必要があります。</p> <p>「LINE側からリク<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>トを飛ばされるURL(callback URL)」については ダッシュボード ( <a href="https://developers.line.me/channels">https://developers.line.me/channels</a> )に行き</p> <p>Basic Information を選択し、webscriptで設定したurlの最後に:443 (<a class="keyword" href="http://d.hatena.ne.jp/keyword/SSL">SSL</a>のポート番号)をつけて、 <img src="https://gyazo.com/ddfedff484f1d31ad8833b5d3c37aebb.png" alt="" /> 入力して保存します。</p> <p>また 「LINE側にリク<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>トを飛ばす元の<a class="keyword" href="http://d.hatena.ne.jp/keyword/IP%A5%A2%A5%C9%A5%EC%A5%B9">IPアドレス</a>」 については Server IP Whitelist を選択し、<a class="keyword" href="http://d.hatena.ne.jp/keyword/IP%A5%A2%A5%C9%A5%EC%A5%B9">IPアドレス</a>を入力します。 利用するサーバーやサービスによって違うのですが、webscriptの場合から1つに固定されてないようなので <img src="https://gyazo.com/b749df920daf75d26ebb653bfea281cb.png" alt="" /></p> <p>54.159.34.187 54.235.119.11 23.23.140.37 この3つを入力しておいてください。</p> <p>以上で設定は完了です。</p> <h3>設定が反映されるまで待つ。</h3> <p>これらの設定が反映されるまで時間が 人によってはすぐに反映されるようですが、自分の場合30時間ほどかかったので気長に待ちましょう。 反映されたら連絡がくるわけではないので、時々<a class="keyword" href="http://d.hatena.ne.jp/keyword/Bot">Bot</a>にLINEして返事がくるか確認します。</p> <h3>完成</h3> <p>しばらくして返事がきたら完成です!</p> <p>コードのこの辺をいじるとメッセージの条件を変えられるので色々いじって遊んでみましょう (変更したらsaveを押すのを忘れずに!)</p> <pre class="code" data-lang="" data-unlink>if received_message == &#39;おはよう&#39; then response_message = &#39;おはようございます!今日もがんばりましょう!&#39; --- 変数received_messageの中身が「おはよう」だったら、「おはようございます!今日もがんばりましょう!」を変数response_messageに代入 (以下コピペで条件を追加していけます) elseif received_message == &#39;おやすみ&#39; then response_message = &#39;今日も一日お疲れ様でした&#39; elseif received_message == &#39;やられたらやり返す&#39; then response_message = &#39;倍返しだ!&#39; else --- 上のどの条件にも該当しなかったら、変数response_messageに「[送信内容]? ちょっとなに言ってるかわからない」を代入 \n は改行するコードです。 response_message = received_message .. &#39;? \nちょっとなに言ってるかわかんない&#39; end</pre> <h2>最後に</h2> <p>作った<a class="keyword" href="http://d.hatena.ne.jp/keyword/Bot">Bot</a>はちゃんと動きましたでしょうか? webscriptはあくまでプロトタイプ用なので、これが上手くうごいたら次はサーバーを用意するなりして他の言語 (<a class="keyword" href="http://d.hatena.ne.jp/keyword/ruby">ruby</a>とか<a class="keyword" href="http://d.hatena.ne.jp/keyword/php">php</a>だと情報源が多そうです)でもうちょっと高度な<a class="keyword" href="http://d.hatena.ne.jp/keyword/Bot">Bot</a>作成も試してみてください。</p> <p>また、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Bot">Bot</a>に関する情報共有用の<a class="keyword" href="http://d.hatena.ne.jp/keyword/Facebook">Facebook</a>グループを作ってみました。 記事の内容についてや<a class="keyword" href="http://d.hatena.ne.jp/keyword/Bot">Bot</a>についての質問があれば、ここに書いていただければ分かる範囲でお答えするので、興味がある方は是非入って下さい!</p> <p>こちらです ↓↓↓ <a href="https://www.facebook.com/groups/261695480833292/">Bot Developers</a></p> <div class="fb-post" data-href="https://www.facebook.com/permalink.php?story_fbid=621051801377077&amp;id=136969053118690" data-width="500" data-show-text="true"> <div class="fb-xfbml-parse-ignore"> <blockquote cite="https://www.facebook.com/permalink.php?story_fbid=621051801377077&amp;id=136969053118690">Posted by <a href="https://www.facebook.com/fjmkjp-136969053118690/">fjmk.jp</a> on <a href="https://www.facebook.com/permalink.php?story_fbid=621051801377077&amp;id=136969053118690">Sunday, April 17, 2016</a></blockquote> </div> </div> sfjmk 写真で振り返る 海南鶏飯食堂六本木店 hatenablog://entry/8599973812294619261 2016-03-13T00:00:00+09:00 2017-09-03T16:45:38+09:00 六本木で働くようになってから高頻度で通っていた海南鶏飯食堂六本木店が、2016年3月11日をもって閉店してしまいました。 <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170903/20170903164515.png" alt="f:id:sfjmk:20170903164515p:plain" title="f:id:sfjmk:20170903164515p:plain" class="hatena-fotolife" itemprop="image"></span> 六本木で働くようになってから高頻度で通っていた<a class="keyword" href="http://d.hatena.ne.jp/keyword/%B3%A4%C6%EE%B7%DC%C8%D3%BF%A9%C6%B2">海南鶏飯食堂</a>六本木店が、2016年3月11日をもって閉店してしまいました。</p> <blockquote class="embedly-card" data-card-align="left" data-card-type="article" data-card-controls="0" data-card-key="766026660f3b4bc99ee26b68e3777147"><a href="http://tabelog.com/tokyo/A1307/A130701/13160501/" target="_blank">海南鶏飯食堂M (海南鶏飯食堂M/PARLOUR) - 乃木坂/東南アジア料理(その他) [食べログ]</a></blockquote> <p> <script async src="//cdn.embedly.com/widgets/platform.js" charset="UTF-8"></script></p> <p>昼メニューはチキンライスとカレーしかないという潔さ・ごはんがおかわり自由なところ・そして何と言っても味がとても好きだったのでとても残念&hellip;(チキンも然ることながらライスがとにかく美味しい。ライスだけでも全然いけるくらい。)</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Instagram">Instagram</a>で写真をいっぱい撮ってたので振り返ってみたいと思います。今数えた限りだと25回投稿してますが、多分もっと行ってるかも。 (<a class="keyword" href="http://d.hatena.ne.jp/keyword/Instagram">Instagram</a>の埋込み機能使いづらい&hellip;)</p> <blockquote class="instagram-media" data-instgrm-captioned data-instgrm-version="6" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"><div style="padding:8px;"> <div style=" background:#F8F8F8; line-height:0; margin-top:40px; padding:50% 0; text-align:center; width:100%;"> <div style=" background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAAGFBMVEUiIiI9PT0eHh4gIB4hIBkcHBwcHBwcHBydr+JQAAAACHRSTlMABA4YHyQsM5jtaMwAAADfSURBVDjL7ZVBEgMhCAQBAf//42xcNbpAqakcM0ftUmFAAIBE81IqBJdS3lS6zs3bIpB9WED3YYXFPmHRfT8sgyrCP1x8uEUxLMzNWElFOYCV6mHWWwMzdPEKHlhLw7NWJqkHc4uIZphavDzA2JPzUDsBZziNae2S6owH8xPmX8G7zzgKEOPUoYHvGz1TBCxMkd3kwNVbU0gKHkx+iZILf77IofhrY1nYFnB/lQPb79drWOyJVa/DAvg9B/rLB4cC+Nqgdz/TvBbBnr6GBReqn/nRmDgaQEej7WhonozjF+Y2I/fZou/qAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;"></div></div> <p style=" margin:8px 0 0 0; padding:0 4px;"> <a href="https://www.instagram.com/p/vpWuZWiQwH/" style=" color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;" target="_blank">久々の</a></p> <p style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;">Sotaro Fujimakiさん(@macky256)が投稿した写真 - <time style=" font-family:Arial,sans-serif; font-size:14px; line-height:17px;" datetime="2014-11-21T03:09:59+00:00">2014 11月 20 7:09午後 PST</time></p></div></blockquote> <script async defer src="//platform.instagram.com/en_US/embeds.js"></script> <p>初投稿。最初に行ったのはこれの一年前くらいだった気がする。当時は六本木のIT界隈で結構話題になっていたような。<br> <br></p> <blockquote class="instagram-media" data-instgrm-version="6" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"><div style="padding:8px;"> <div style=" background:#F8F8F8; line-height:0; margin-top:40px; padding:50% 0; text-align:center; width:100%;"> <div style=" background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAAGFBMVEUiIiI9PT0eHh4gIB4hIBkcHBwcHBwcHBydr+JQAAAACHRSTlMABA4YHyQsM5jtaMwAAADfSURBVDjL7ZVBEgMhCAQBAf//42xcNbpAqakcM0ftUmFAAIBE81IqBJdS3lS6zs3bIpB9WED3YYXFPmHRfT8sgyrCP1x8uEUxLMzNWElFOYCV6mHWWwMzdPEKHlhLw7NWJqkHc4uIZphavDzA2JPzUDsBZziNae2S6owH8xPmX8G7zzgKEOPUoYHvGz1TBCxMkd3kwNVbU0gKHkx+iZILf77IofhrY1nYFnB/lQPb79drWOyJVa/DAvg9B/rLB4cC+Nqgdz/TvBbBnr6GBReqn/nRmDgaQEej7WhonozjF+Y2I/fZou/qAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;"></div></div><p style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;"><a href="https://www.instagram.com/p/1esKCECQzu/" style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none;" target="_blank">Sotaro Fujimakiさん(@macky256)が投稿した写真</a> - <time style=" font-family:Arial,sans-serif; font-size:14px; line-height:17px;" datetime="2015-04-15T02:53:58+00:00">2015 4月 14 7:53午後 PDT</time></p></div></blockquote> <script async defer src="//platform.instagram.com/en_US/embeds.js"></script> <blockquote class="instagram-media" data-instgrm-captioned data-instgrm-version="6" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"><div style="padding:8px;"> <div style=" background:#F8F8F8; line-height:0; margin-top:40px; padding:50% 0; text-align:center; width:100%;"> <div style=" background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAAGFBMVEUiIiI9PT0eHh4gIB4hIBkcHBwcHBwcHBydr+JQAAAACHRSTlMABA4YHyQsM5jtaMwAAADfSURBVDjL7ZVBEgMhCAQBAf//42xcNbpAqakcM0ftUmFAAIBE81IqBJdS3lS6zs3bIpB9WED3YYXFPmHRfT8sgyrCP1x8uEUxLMzNWElFOYCV6mHWWwMzdPEKHlhLw7NWJqkHc4uIZphavDzA2JPzUDsBZziNae2S6owH8xPmX8G7zzgKEOPUoYHvGz1TBCxMkd3kwNVbU0gKHkx+iZILf77IofhrY1nYFnB/lQPb79drWOyJVa/DAvg9B/rLB4cC+Nqgdz/TvBbBnr6GBReqn/nRmDgaQEej7WhonozjF+Y2I/fZou/qAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;"></div></div> <p style=" margin:8px 0 0 0; padding:0 4px;"> <a href="https://www.instagram.com/p/1uUfbKiQ8Z/" style=" color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;" target="_blank">#again</a></p> <p style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;">Sotaro Fujimakiさん(@macky256)が投稿した写真 - <time style=" font-family:Arial,sans-serif; font-size:14px; line-height:17px;" datetime="2015-04-21T04:35:02+00:00">2015 4月 20 9:35午後 PDT</time></p></div></blockquote> <script async defer src="//platform.instagram.com/en_US/embeds.js"></script> <p>カレーもあります。</p> <blockquote class="instagram-media" data-instgrm-captioned data-instgrm-version="6" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"><div style="padding:8px;"> <div style=" background:#F8F8F8; line-height:0; margin-top:40px; padding:50% 0; text-align:center; width:100%;"> <div style=" background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAAGFBMVEUiIiI9PT0eHh4gIB4hIBkcHBwcHBwcHBydr+JQAAAACHRSTlMABA4YHyQsM5jtaMwAAADfSURBVDjL7ZVBEgMhCAQBAf//42xcNbpAqakcM0ftUmFAAIBE81IqBJdS3lS6zs3bIpB9WED3YYXFPmHRfT8sgyrCP1x8uEUxLMzNWElFOYCV6mHWWwMzdPEKHlhLw7NWJqkHc4uIZphavDzA2JPzUDsBZziNae2S6owH8xPmX8G7zzgKEOPUoYHvGz1TBCxMkd3kwNVbU0gKHkx+iZILf77IofhrY1nYFnB/lQPb79drWOyJVa/DAvg9B/rLB4cC+Nqgdz/TvBbBnr6GBReqn/nRmDgaQEej7WhonozjF+Y2I/fZou/qAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;"></div></div> <p style=" margin:8px 0 0 0; padding:0 4px;"> <a href="https://www.instagram.com/p/2H-GuUiQ03/" style=" color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;" target="_blank">2週間で4回来てる。</a></p> <p style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;">Sotaro Fujimakiさん(@macky256)が投稿した写真 - <time style=" font-family:Arial,sans-serif; font-size:14px; line-height:17px;" datetime="2015-05-01T03:39:40+00:00">2015 4月 30 8:39午後 PDT</time></p></div></blockquote> <script async defer src="//platform.instagram.com/en_US/embeds.js"></script> <blockquote class="instagram-media" data-instgrm-version="6" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"><div style="padding:8px;"> <div style=" background:#F8F8F8; line-height:0; margin-top:40px; padding:50% 0; text-align:center; width:100%;"> <div style=" background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAAGFBMVEUiIiI9PT0eHh4gIB4hIBkcHBwcHBwcHBydr+JQAAAACHRSTlMABA4YHyQsM5jtaMwAAADfSURBVDjL7ZVBEgMhCAQBAf//42xcNbpAqakcM0ftUmFAAIBE81IqBJdS3lS6zs3bIpB9WED3YYXFPmHRfT8sgyrCP1x8uEUxLMzNWElFOYCV6mHWWwMzdPEKHlhLw7NWJqkHc4uIZphavDzA2JPzUDsBZziNae2S6owH8xPmX8G7zzgKEOPUoYHvGz1TBCxMkd3kwNVbU0gKHkx+iZILf77IofhrY1nYFnB/lQPb79drWOyJVa/DAvg9B/rLB4cC+Nqgdz/TvBbBnr6GBReqn/nRmDgaQEej7WhonozjF+Y2I/fZou/qAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;"></div></div><p style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;"><a href="https://www.instagram.com/p/2qJddsCQx2/" style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none;" target="_blank">Sotaro Fujimakiさん(@macky256)が投稿した写真</a> - <time style=" font-family:Arial,sans-serif; font-size:14px; line-height:17px;" datetime="2015-05-14T10:13:04+00:00">2015 5月 14 3:13午前 PDT</time></p></div></blockquote> <script async defer src="//platform.instagram.com/en_US/embeds.js"></script> <blockquote class="instagram-media" data-instgrm-version="6" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"><div style="padding:8px;"> <div style=" background:#F8F8F8; line-height:0; margin-top:40px; padding:50% 0; text-align:center; width:100%;"> <div style=" background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAAGFBMVEUiIiI9PT0eHh4gIB4hIBkcHBwcHBwcHBydr+JQAAAACHRSTlMABA4YHyQsM5jtaMwAAADfSURBVDjL7ZVBEgMhCAQBAf//42xcNbpAqakcM0ftUmFAAIBE81IqBJdS3lS6zs3bIpB9WED3YYXFPmHRfT8sgyrCP1x8uEUxLMzNWElFOYCV6mHWWwMzdPEKHlhLw7NWJqkHc4uIZphavDzA2JPzUDsBZziNae2S6owH8xPmX8G7zzgKEOPUoYHvGz1TBCxMkd3kwNVbU0gKHkx+iZILf77IofhrY1nYFnB/lQPb79drWOyJVa/DAvg9B/rLB4cC+Nqgdz/TvBbBnr6GBReqn/nRmDgaQEej7WhonozjF+Y2I/fZou/qAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;"></div></div><p style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;"><a href="https://www.instagram.com/p/22S2EdiQ9T/" style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none;" target="_blank">Sotaro Fujimakiさん(@macky256)が投稿した写真</a> - <time style=" font-family:Arial,sans-serif; font-size:14px; line-height:17px;" datetime="2015-05-19T03:25:58+00:00">2015 5月 18 8:25午後 PDT</time></p></div></blockquote> <script async defer src="//platform.instagram.com/en_US/embeds.js"></script> <blockquote class="instagram-media" data-instgrm-captioned data-instgrm-version="6" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"><div style="padding:8px;"> <div style=" background:#F8F8F8; line-height:0; margin-top:40px; padding:50% 0; text-align:center; width:100%;"> <div style=" background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAAGFBMVEUiIiI9PT0eHh4gIB4hIBkcHBwcHBwcHBydr+JQAAAACHRSTlMABA4YHyQsM5jtaMwAAADfSURBVDjL7ZVBEgMhCAQBAf//42xcNbpAqakcM0ftUmFAAIBE81IqBJdS3lS6zs3bIpB9WED3YYXFPmHRfT8sgyrCP1x8uEUxLMzNWElFOYCV6mHWWwMzdPEKHlhLw7NWJqkHc4uIZphavDzA2JPzUDsBZziNae2S6owH8xPmX8G7zzgKEOPUoYHvGz1TBCxMkd3kwNVbU0gKHkx+iZILf77IofhrY1nYFnB/lQPb79drWOyJVa/DAvg9B/rLB4cC+Nqgdz/TvBbBnr6GBReqn/nRmDgaQEej7WhonozjF+Y2I/fZou/qAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;"></div></div> <p style=" margin:8px 0 0 0; padding:0 4px;"> <a href="https://www.instagram.com/p/3FvrAuiQ7j/" style=" color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;" target="_blank">#今日のシンガポール</a></p> <p style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;">Sotaro Fujimakiさん(@macky256)が投稿した写真 - <time style=" font-family:Arial,sans-serif; font-size:14px; line-height:17px;" datetime="2015-05-25T03:26:28+00:00">2015 5月 24 8:26午後 PDT</time></p></div></blockquote> <script async defer src="//platform.instagram.com/en_US/embeds.js"></script> <blockquote class="instagram-media" data-instgrm-version="6" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"><div style="padding:8px;"> <div style=" background:#F8F8F8; line-height:0; margin-top:40px; padding:50.0% 0; text-align:center; width:100%;"> <div style=" background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAAGFBMVEUiIiI9PT0eHh4gIB4hIBkcHBwcHBwcHBydr+JQAAAACHRSTlMABA4YHyQsM5jtaMwAAADfSURBVDjL7ZVBEgMhCAQBAf//42xcNbpAqakcM0ftUmFAAIBE81IqBJdS3lS6zs3bIpB9WED3YYXFPmHRfT8sgyrCP1x8uEUxLMzNWElFOYCV6mHWWwMzdPEKHlhLw7NWJqkHc4uIZphavDzA2JPzUDsBZziNae2S6owH8xPmX8G7zzgKEOPUoYHvGz1TBCxMkd3kwNVbU0gKHkx+iZILf77IofhrY1nYFnB/lQPb79drWOyJVa/DAvg9B/rLB4cC+Nqgdz/TvBbBnr6GBReqn/nRmDgaQEej7WhonozjF+Y2I/fZou/qAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;"></div></div><p style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;"><a href="https://www.instagram.com/p/3adA3QiQ1n/" style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none;" target="_blank">Sotaro Fujimakiさん(@macky256)が投稿した写真</a> - <time style=" font-family:Arial,sans-serif; font-size:14px; line-height:17px;" datetime="2015-06-02T04:27:29+00:00">2015 6月 1 9:27午後 PDT</time></p></div></blockquote> <script async defer src="//platform.instagram.com/en_US/embeds.js"></script> <blockquote class="instagram-media" data-instgrm-version="6" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"><div style="padding:8px;"> <div style=" background:#F8F8F8; line-height:0; margin-top:40px; padding:50.0% 0; text-align:center; width:100%;"> <div style=" background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAAGFBMVEUiIiI9PT0eHh4gIB4hIBkcHBwcHBwcHBydr+JQAAAACHRSTlMABA4YHyQsM5jtaMwAAADfSURBVDjL7ZVBEgMhCAQBAf//42xcNbpAqakcM0ftUmFAAIBE81IqBJdS3lS6zs3bIpB9WED3YYXFPmHRfT8sgyrCP1x8uEUxLMzNWElFOYCV6mHWWwMzdPEKHlhLw7NWJqkHc4uIZphavDzA2JPzUDsBZziNae2S6owH8xPmX8G7zzgKEOPUoYHvGz1TBCxMkd3kwNVbU0gKHkx+iZILf77IofhrY1nYFnB/lQPb79drWOyJVa/DAvg9B/rLB4cC+Nqgdz/TvBbBnr6GBReqn/nRmDgaQEej7WhonozjF+Y2I/fZou/qAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;"></div></div><p style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;"><a href="https://www.instagram.com/p/3iEDlYiQzl/" style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none;" target="_blank">Sotaro Fujimakiさん(@macky256)が投稿した写真</a> - <time style=" font-family:Arial,sans-serif; font-size:14px; line-height:17px;" datetime="2015-06-05T03:23:19+00:00">2015 6月 4 8:23午後 PDT</time></p></div></blockquote> <script async defer src="//platform.instagram.com/en_US/embeds.js"></script> <blockquote class="instagram-media" data-instgrm-captioned data-instgrm-version="6" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"><div style="padding:8px;"> <div style=" background:#F8F8F8; line-height:0; margin-top:40px; padding:50.0% 0; text-align:center; width:100%;"> <div style=" background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAAGFBMVEUiIiI9PT0eHh4gIB4hIBkcHBwcHBwcHBydr+JQAAAACHRSTlMABA4YHyQsM5jtaMwAAADfSURBVDjL7ZVBEgMhCAQBAf//42xcNbpAqakcM0ftUmFAAIBE81IqBJdS3lS6zs3bIpB9WED3YYXFPmHRfT8sgyrCP1x8uEUxLMzNWElFOYCV6mHWWwMzdPEKHlhLw7NWJqkHc4uIZphavDzA2JPzUDsBZziNae2S6owH8xPmX8G7zzgKEOPUoYHvGz1TBCxMkd3kwNVbU0gKHkx+iZILf77IofhrY1nYFnB/lQPb79drWOyJVa/DAvg9B/rLB4cC+Nqgdz/TvBbBnr6GBReqn/nRmDgaQEej7WhonozjF+Y2I/fZou/qAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;"></div></div> <p style=" margin:8px 0 0 0; padding:0 4px;"> <a href="https://www.instagram.com/p/3kkBc3CQ8D/" style=" color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;" target="_blank">#今週3回目</a></p> <p style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;">Sotaro Fujimakiさん(@macky256)が投稿した写真 - <time style=" font-family:Arial,sans-serif; font-size:14px; line-height:17px;" datetime="2015-06-06T02:41:08+00:00">2015 6月 5 7:41午後 PDT</time></p></div></blockquote> <script async defer src="//platform.instagram.com/en_US/embeds.js"></script> <blockquote class="instagram-media" data-instgrm-version="6" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"><div style="padding:8px;"> <div style=" background:#F8F8F8; line-height:0; margin-top:40px; padding:50.0% 0; text-align:center; width:100%;"> <div style=" background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAAGFBMVEUiIiI9PT0eHh4gIB4hIBkcHBwcHBwcHBydr+JQAAAACHRSTlMABA4YHyQsM5jtaMwAAADfSURBVDjL7ZVBEgMhCAQBAf//42xcNbpAqakcM0ftUmFAAIBE81IqBJdS3lS6zs3bIpB9WED3YYXFPmHRfT8sgyrCP1x8uEUxLMzNWElFOYCV6mHWWwMzdPEKHlhLw7NWJqkHc4uIZphavDzA2JPzUDsBZziNae2S6owH8xPmX8G7zzgKEOPUoYHvGz1TBCxMkd3kwNVbU0gKHkx+iZILf77IofhrY1nYFnB/lQPb79drWOyJVa/DAvg9B/rLB4cC+Nqgdz/TvBbBnr6GBReqn/nRmDgaQEej7WhonozjF+Y2I/fZou/qAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;"></div></div><p style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;"><a href="https://www.instagram.com/p/3xlBgmiQzT/" style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none;" target="_blank">Sotaro Fujimakiさん(@macky256)が投稿した写真</a> - <time style=" font-family:Arial,sans-serif; font-size:14px; line-height:17px;" datetime="2015-06-11T04:00:00+00:00">2015 6月 10 9:00午後 PDT</time></p></div></blockquote> <script async defer src="//platform.instagram.com/en_US/embeds.js"></script> <blockquote class="instagram-media" data-instgrm-version="6" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"><div style="padding:8px;"> <div style=" background:#F8F8F8; line-height:0; margin-top:40px; padding:50.0% 0; text-align:center; width:100%;"> <div style=" background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAAGFBMVEUiIiI9PT0eHh4gIB4hIBkcHBwcHBwcHBydr+JQAAAACHRSTlMABA4YHyQsM5jtaMwAAADfSURBVDjL7ZVBEgMhCAQBAf//42xcNbpAqakcM0ftUmFAAIBE81IqBJdS3lS6zs3bIpB9WED3YYXFPmHRfT8sgyrCP1x8uEUxLMzNWElFOYCV6mHWWwMzdPEKHlhLw7NWJqkHc4uIZphavDzA2JPzUDsBZziNae2S6owH8xPmX8G7zzgKEOPUoYHvGz1TBCxMkd3kwNVbU0gKHkx+iZILf77IofhrY1nYFnB/lQPb79drWOyJVa/DAvg9B/rLB4cC+Nqgdz/TvBbBnr6GBReqn/nRmDgaQEej7WhonozjF+Y2I/fZou/qAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;"></div></div><p style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;"><a href="https://www.instagram.com/p/3-ZaBFCQ9s/" style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none;" target="_blank">Sotaro Fujimakiさん(@macky256)が投稿した写真</a> - <time style=" font-family:Arial,sans-serif; font-size:14px; line-height:17px;" datetime="2015-06-16T03:28:37+00:00">2015 6月 15 8:28午後 PDT</time></p></div></blockquote> <script async defer src="//platform.instagram.com/en_US/embeds.js"></script> <blockquote class="instagram-media" data-instgrm-captioned data-instgrm-version="6" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"><div style="padding:8px;"> <div style=" background:#F8F8F8; line-height:0; margin-top:40px; padding:50.0% 0; text-align:center; width:100%;"> <div style=" background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAAGFBMVEUiIiI9PT0eHh4gIB4hIBkcHBwcHBwcHBydr+JQAAAACHRSTlMABA4YHyQsM5jtaMwAAADfSURBVDjL7ZVBEgMhCAQBAf//42xcNbpAqakcM0ftUmFAAIBE81IqBJdS3lS6zs3bIpB9WED3YYXFPmHRfT8sgyrCP1x8uEUxLMzNWElFOYCV6mHWWwMzdPEKHlhLw7NWJqkHc4uIZphavDzA2JPzUDsBZziNae2S6owH8xPmX8G7zzgKEOPUoYHvGz1TBCxMkd3kwNVbU0gKHkx+iZILf77IofhrY1nYFnB/lQPb79drWOyJVa/DAvg9B/rLB4cC+Nqgdz/TvBbBnr6GBReqn/nRmDgaQEej7WhonozjF+Y2I/fZou/qAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;"></div></div> <p style=" margin:8px 0 0 0; padding:0 4px;"> <a href="https://www.instagram.com/p/4YKkGRiQ4j/" style=" color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;" target="_blank">割と久々に来た。</a></p> <p style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;">Sotaro Fujimakiさん(@macky256)が投稿した写真 - <time style=" font-family:Arial,sans-serif; font-size:14px; line-height:17px;" datetime="2015-06-26T03:39:10+00:00">2015 6月 25 8:39午後 PDT</time></p></div></blockquote> <script async defer src="//platform.instagram.com/en_US/embeds.js"></script> <blockquote class="instagram-media" data-instgrm-captioned data-instgrm-version="6" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"><div style="padding:8px;"> <div style=" background:#F8F8F8; line-height:0; margin-top:40px; padding:50.0% 0; text-align:center; width:100%;"> <div style=" background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAAGFBMVEUiIiI9PT0eHh4gIB4hIBkcHBwcHBwcHBydr+JQAAAACHRSTlMABA4YHyQsM5jtaMwAAADfSURBVDjL7ZVBEgMhCAQBAf//42xcNbpAqakcM0ftUmFAAIBE81IqBJdS3lS6zs3bIpB9WED3YYXFPmHRfT8sgyrCP1x8uEUxLMzNWElFOYCV6mHWWwMzdPEKHlhLw7NWJqkHc4uIZphavDzA2JPzUDsBZziNae2S6owH8xPmX8G7zzgKEOPUoYHvGz1TBCxMkd3kwNVbU0gKHkx+iZILf77IofhrY1nYFnB/lQPb79drWOyJVa/DAvg9B/rLB4cC+Nqgdz/TvBbBnr6GBReqn/nRmDgaQEej7WhonozjF+Y2I/fZou/qAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;"></div></div> <p style=" margin:8px 0 0 0; padding:0 4px;"> <a href="https://www.instagram.com/p/4f7EsLCQ27/" style=" color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;" target="_blank">昼飯はいくら食べても太らないって聞いたけど本当なのかなー。</a></p> <p style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;">Sotaro Fujimakiさん(@macky256)が投稿した写真 - <time style=" font-family:Arial,sans-serif; font-size:14px; line-height:17px;" datetime="2015-06-29T03:57:44+00:00">2015 6月 28 8:57午後 PDT</time></p></div></blockquote> <script async defer src="//platform.instagram.com/en_US/embeds.js"></script> <blockquote class="instagram-media" data-instgrm-version="6" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"><div style="padding:8px;"> <div style=" background:#F8F8F8; line-height:0; margin-top:40px; padding:50.0% 0; text-align:center; width:100%;"> <div style=" background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAAGFBMVEUiIiI9PT0eHh4gIB4hIBkcHBwcHBwcHBydr+JQAAAACHRSTlMABA4YHyQsM5jtaMwAAADfSURBVDjL7ZVBEgMhCAQBAf//42xcNbpAqakcM0ftUmFAAIBE81IqBJdS3lS6zs3bIpB9WED3YYXFPmHRfT8sgyrCP1x8uEUxLMzNWElFOYCV6mHWWwMzdPEKHlhLw7NWJqkHc4uIZphavDzA2JPzUDsBZziNae2S6owH8xPmX8G7zzgKEOPUoYHvGz1TBCxMkd3kwNVbU0gKHkx+iZILf77IofhrY1nYFnB/lQPb79drWOyJVa/DAvg9B/rLB4cC+Nqgdz/TvBbBnr6GBReqn/nRmDgaQEej7WhonozjF+Y2I/fZou/qAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;"></div></div><p style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;"><a href="https://www.instagram.com/p/45tejqCQ5h/" style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none;" target="_blank">Sotaro Fujimakiさん(@macky256)が投稿した写真</a> - <time style=" font-family:Arial,sans-serif; font-size:14px; line-height:17px;" datetime="2015-07-09T04:19:11+00:00">2015 7月 8 9:19午後 PDT</time></p></div></blockquote> <script async defer src="//platform.instagram.com/en_US/embeds.js"></script> <blockquote class="instagram-media" data-instgrm-captioned data-instgrm-version="6" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"><div style="padding:8px;"> <div style=" background:#F8F8F8; line-height:0; margin-top:40px; padding:50.0% 0; text-align:center; width:100%;"> <div style=" background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAAGFBMVEUiIiI9PT0eHh4gIB4hIBkcHBwcHBwcHBydr+JQAAAACHRSTlMABA4YHyQsM5jtaMwAAADfSURBVDjL7ZVBEgMhCAQBAf//42xcNbpAqakcM0ftUmFAAIBE81IqBJdS3lS6zs3bIpB9WED3YYXFPmHRfT8sgyrCP1x8uEUxLMzNWElFOYCV6mHWWwMzdPEKHlhLw7NWJqkHc4uIZphavDzA2JPzUDsBZziNae2S6owH8xPmX8G7zzgKEOPUoYHvGz1TBCxMkd3kwNVbU0gKHkx+iZILf77IofhrY1nYFnB/lQPb79drWOyJVa/DAvg9B/rLB4cC+Nqgdz/TvBbBnr6GBReqn/nRmDgaQEej7WhonozjF+Y2I/fZou/qAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;"></div></div> <p style=" margin:8px 0 0 0; padding:0 4px;"> <a href="https://www.instagram.com/p/48Ktf_CQ-4/" style=" color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;" target="_blank">二日連続なので今日はカレー そろそろ店開拓したい笑</a></p> <p style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;">Sotaro Fujimakiさん(@macky256)が投稿した写真 - <time style=" font-family:Arial,sans-serif; font-size:14px; line-height:17px;" datetime="2015-07-10T03:13:07+00:00">2015 7月 9 8:13午後 PDT</time></p></div></blockquote> <script async defer src="//platform.instagram.com/en_US/embeds.js"></script> <blockquote class="instagram-media" data-instgrm-captioned data-instgrm-version="6" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"><div style="padding:8px;"> <div style=" background:#F8F8F8; line-height:0; margin-top:40px; padding:50.0% 0; text-align:center; width:100%;"> <div style=" background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAAGFBMVEUiIiI9PT0eHh4gIB4hIBkcHBwcHBwcHBydr+JQAAAACHRSTlMABA4YHyQsM5jtaMwAAADfSURBVDjL7ZVBEgMhCAQBAf//42xcNbpAqakcM0ftUmFAAIBE81IqBJdS3lS6zs3bIpB9WED3YYXFPmHRfT8sgyrCP1x8uEUxLMzNWElFOYCV6mHWWwMzdPEKHlhLw7NWJqkHc4uIZphavDzA2JPzUDsBZziNae2S6owH8xPmX8G7zzgKEOPUoYHvGz1TBCxMkd3kwNVbU0gKHkx+iZILf77IofhrY1nYFnB/lQPb79drWOyJVa/DAvg9B/rLB4cC+Nqgdz/TvBbBnr6GBReqn/nRmDgaQEej7WhonozjF+Y2I/fZou/qAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;"></div></div> <p style=" margin:8px 0 0 0; padding:0 4px;"> <a href="https://www.instagram.com/p/6lxdAqCQ5d/" style=" color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;" target="_blank">超久々に来た。</a></p> <p style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;">Sotaro Fujimakiさん(@macky256)が投稿した写真 - <time style=" font-family:Arial,sans-serif; font-size:14px; line-height:17px;" datetime="2015-08-20T03:31:55+00:00">2015 8月 19 8:31午後 PDT</time></p></div></blockquote> <script async defer src="//platform.instagram.com/en_US/embeds.js"></script> <blockquote class="instagram-media" data-instgrm-captioned data-instgrm-version="6" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"><div style="padding:8px;"> <div style=" background:#F8F8F8; line-height:0; margin-top:40px; padding:50.0% 0; text-align:center; width:100%;"> <div style=" background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAAGFBMVEUiIiI9PT0eHh4gIB4hIBkcHBwcHBwcHBydr+JQAAAACHRSTlMABA4YHyQsM5jtaMwAAADfSURBVDjL7ZVBEgMhCAQBAf//42xcNbpAqakcM0ftUmFAAIBE81IqBJdS3lS6zs3bIpB9WED3YYXFPmHRfT8sgyrCP1x8uEUxLMzNWElFOYCV6mHWWwMzdPEKHlhLw7NWJqkHc4uIZphavDzA2JPzUDsBZziNae2S6owH8xPmX8G7zzgKEOPUoYHvGz1TBCxMkd3kwNVbU0gKHkx+iZILf77IofhrY1nYFnB/lQPb79drWOyJVa/DAvg9B/rLB4cC+Nqgdz/TvBbBnr6GBReqn/nRmDgaQEej7WhonozjF+Y2I/fZou/qAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;"></div></div> <p style=" margin:8px 0 0 0; padding:0 4px;"> <a href="https://www.instagram.com/p/8cLNVMCQ3E/" style=" color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;" target="_blank">超久々に。</a></p> <p style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;">Sotaro Fujimakiさん(@macky256)が投稿した写真 - <time style=" font-family:Arial,sans-serif; font-size:14px; line-height:17px;" datetime="2015-10-05T03:07:21+00:00">2015 10月 4 8:07午後 PDT</time></p></div></blockquote> <script async defer src="//platform.instagram.com/en_US/embeds.js"></script> <blockquote class="instagram-media" data-instgrm-version="6" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"><div style="padding:8px;"> <div style=" background:#F8F8F8; line-height:0; margin-top:40px; padding:50.0% 0; text-align:center; width:100%;"> <div style=" background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAAGFBMVEUiIiI9PT0eHh4gIB4hIBkcHBwcHBwcHBydr+JQAAAACHRSTlMABA4YHyQsM5jtaMwAAADfSURBVDjL7ZVBEgMhCAQBAf//42xcNbpAqakcM0ftUmFAAIBE81IqBJdS3lS6zs3bIpB9WED3YYXFPmHRfT8sgyrCP1x8uEUxLMzNWElFOYCV6mHWWwMzdPEKHlhLw7NWJqkHc4uIZphavDzA2JPzUDsBZziNae2S6owH8xPmX8G7zzgKEOPUoYHvGz1TBCxMkd3kwNVbU0gKHkx+iZILf77IofhrY1nYFnB/lQPb79drWOyJVa/DAvg9B/rLB4cC+Nqgdz/TvBbBnr6GBReqn/nRmDgaQEej7WhonozjF+Y2I/fZou/qAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;"></div></div><p style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;"><a href="https://www.instagram.com/p/-AojCtiQwA/" style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none;" target="_blank">Sotaro Fujimakiさん(@macky256)が投稿した写真</a> - <time style=" font-family:Arial,sans-serif; font-size:14px; line-height:17px;" datetime="2015-11-13T03:27:46+00:00">2015 11月 12 7:27午後 PST</time></p></div></blockquote> <script async defer src="//platform.instagram.com/en_US/embeds.js"></script> <blockquote class="instagram-media" data-instgrm-version="6" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"><div style="padding:8px;"> <div style=" background:#F8F8F8; line-height:0; margin-top:40px; padding:50.0% 0; text-align:center; width:100%;"> <div style=" background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAAGFBMVEUiIiI9PT0eHh4gIB4hIBkcHBwcHBwcHBydr+JQAAAACHRSTlMABA4YHyQsM5jtaMwAAADfSURBVDjL7ZVBEgMhCAQBAf//42xcNbpAqakcM0ftUmFAAIBE81IqBJdS3lS6zs3bIpB9WED3YYXFPmHRfT8sgyrCP1x8uEUxLMzNWElFOYCV6mHWWwMzdPEKHlhLw7NWJqkHc4uIZphavDzA2JPzUDsBZziNae2S6owH8xPmX8G7zzgKEOPUoYHvGz1TBCxMkd3kwNVbU0gKHkx+iZILf77IofhrY1nYFnB/lQPb79drWOyJVa/DAvg9B/rLB4cC+Nqgdz/TvBbBnr6GBReqn/nRmDgaQEej7WhonozjF+Y2I/fZou/qAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;"></div></div><p style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;"><a href="https://www.instagram.com/p/-SrScTCQ2L/" style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none;" target="_blank">Sotaro Fujimakiさん(@macky256)が投稿した写真</a> - <time style=" font-family:Arial,sans-serif; font-size:14px; line-height:17px;" datetime="2015-11-20T03:38:03+00:00">2015 11月 19 7:38午後 PST</time></p></div></blockquote> <script async defer src="//platform.instagram.com/en_US/embeds.js"></script> <blockquote class="instagram-media" data-instgrm-captioned data-instgrm-version="6" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"><div style="padding:8px;"> <div style=" background:#F8F8F8; line-height:0; margin-top:40px; padding:50.0% 0; text-align:center; width:100%;"> <div style=" background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAAGFBMVEUiIiI9PT0eHh4gIB4hIBkcHBwcHBwcHBydr+JQAAAACHRSTlMABA4YHyQsM5jtaMwAAADfSURBVDjL7ZVBEgMhCAQBAf//42xcNbpAqakcM0ftUmFAAIBE81IqBJdS3lS6zs3bIpB9WED3YYXFPmHRfT8sgyrCP1x8uEUxLMzNWElFOYCV6mHWWwMzdPEKHlhLw7NWJqkHc4uIZphavDzA2JPzUDsBZziNae2S6owH8xPmX8G7zzgKEOPUoYHvGz1TBCxMkd3kwNVbU0gKHkx+iZILf77IofhrY1nYFnB/lQPb79drWOyJVa/DAvg9B/rLB4cC+Nqgdz/TvBbBnr6GBReqn/nRmDgaQEej7WhonozjF+Y2I/fZou/qAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;"></div></div> <p style=" margin:8px 0 0 0; padding:0 4px;"> <a href="https://www.instagram.com/p/-iEfbaCQyc/" style=" color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;" target="_blank">久々の</a></p> <p style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;">Sotaro Fujimakiさん(@macky256)が投稿した写真 - <time style=" font-family:Arial,sans-serif; font-size:14px; line-height:17px;" datetime="2015-11-26T03:06:53+00:00">2015 11月 25 7:06午後 PST</time></p></div></blockquote> <script async defer src="//platform.instagram.com/en_US/embeds.js"></script> <blockquote class="instagram-media" data-instgrm-captioned data-instgrm-version="6" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"><div style="padding:8px;"> <div style=" background:#F8F8F8; line-height:0; margin-top:40px; padding:50.0% 0; text-align:center; width:100%;"> <div style=" background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAAGFBMVEUiIiI9PT0eHh4gIB4hIBkcHBwcHBwcHBydr+JQAAAACHRSTlMABA4YHyQsM5jtaMwAAADfSURBVDjL7ZVBEgMhCAQBAf//42xcNbpAqakcM0ftUmFAAIBE81IqBJdS3lS6zs3bIpB9WED3YYXFPmHRfT8sgyrCP1x8uEUxLMzNWElFOYCV6mHWWwMzdPEKHlhLw7NWJqkHc4uIZphavDzA2JPzUDsBZziNae2S6owH8xPmX8G7zzgKEOPUoYHvGz1TBCxMkd3kwNVbU0gKHkx+iZILf77IofhrY1nYFnB/lQPb79drWOyJVa/DAvg9B/rLB4cC+Nqgdz/TvBbBnr6GBReqn/nRmDgaQEej7WhonozjF+Y2I/fZou/qAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;"></div></div> <p style=" margin:8px 0 0 0; padding:0 4px;"> <a href="https://www.instagram.com/p/_lOgtSiQxz/" style=" color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;" target="_blank">海南鶏飯納め</a></p> <p style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;">Sotaro Fujimakiさん(@macky256)が投稿した写真 - <time style=" font-family:Arial,sans-serif; font-size:14px; line-height:17px;" datetime="2015-12-22T05:03:33+00:00">2015 12月 21 9:03午後 PST</time></p></div></blockquote> <script async defer src="//platform.instagram.com/en_US/embeds.js"></script> <blockquote class="instagram-media" data-instgrm-captioned data-instgrm-version="6" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"><div style="padding:8px;"> <div style=" background:#F8F8F8; line-height:0; margin-top:40px; padding:50.0% 0; text-align:center; width:100%;"> <div style=" background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAAGFBMVEUiIiI9PT0eHh4gIB4hIBkcHBwcHBwcHBydr+JQAAAACHRSTlMABA4YHyQsM5jtaMwAAADfSURBVDjL7ZVBEgMhCAQBAf//42xcNbpAqakcM0ftUmFAAIBE81IqBJdS3lS6zs3bIpB9WED3YYXFPmHRfT8sgyrCP1x8uEUxLMzNWElFOYCV6mHWWwMzdPEKHlhLw7NWJqkHc4uIZphavDzA2JPzUDsBZziNae2S6owH8xPmX8G7zzgKEOPUoYHvGz1TBCxMkd3kwNVbU0gKHkx+iZILf77IofhrY1nYFnB/lQPb79drWOyJVa/DAvg9B/rLB4cC+Nqgdz/TvBbBnr6GBReqn/nRmDgaQEej7WhonozjF+Y2I/fZou/qAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;"></div></div> <p style=" margin:8px 0 0 0; padding:0 4px;"> <a href="https://www.instagram.com/p/BB1SJn4iQ0-/" style=" color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;" target="_blank">#六本木 #roppongi #tokyo</a></p> <p style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;">Sotaro Fujimakiさん(@macky256)が投稿した写真 - <time style=" font-family:Arial,sans-serif; font-size:14px; line-height:17px;" datetime="2016-02-16T03:45:59+00:00">2016 2月 15 7:45午後 PST</time></p></div></blockquote> <script async defer src="//platform.instagram.com/en_US/embeds.js"></script> <blockquote class="instagram-media" data-instgrm-captioned data-instgrm-version="6" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"><div style="padding:8px;"> <div style=" background:#F8F8F8; line-height:0; margin-top:40px; padding:50.0% 0; text-align:center; width:100%;"> <div style=" background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAAGFBMVEUiIiI9PT0eHh4gIB4hIBkcHBwcHBwcHBydr+JQAAAACHRSTlMABA4YHyQsM5jtaMwAAADfSURBVDjL7ZVBEgMhCAQBAf//42xcNbpAqakcM0ftUmFAAIBE81IqBJdS3lS6zs3bIpB9WED3YYXFPmHRfT8sgyrCP1x8uEUxLMzNWElFOYCV6mHWWwMzdPEKHlhLw7NWJqkHc4uIZphavDzA2JPzUDsBZziNae2S6owH8xPmX8G7zzgKEOPUoYHvGz1TBCxMkd3kwNVbU0gKHkx+iZILf77IofhrY1nYFnB/lQPb79drWOyJVa/DAvg9B/rLB4cC+Nqgdz/TvBbBnr6GBReqn/nRmDgaQEej7WhonozjF+Y2I/fZou/qAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;"></div></div> <p style=" margin:8px 0 0 0; padding:0 4px;"> <a href="https://www.instagram.com/p/BChD24TCQxs/" style=" color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;" target="_blank">来週閉店なので来た</a></p> <p style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;">Sotaro Fujimakiさん(@macky256)が投稿した写真 - <time style=" font-family:Arial,sans-serif; font-size:14px; line-height:17px;" datetime="2016-03-04T03:47:41+00:00">2016 3月 3 7:47午後 PST</time></p></div></blockquote> <script async defer src="//platform.instagram.com/en_US/embeds.js"></script> <blockquote class="instagram-media" data-instgrm-captioned data-instgrm-version="6" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"><div style="padding:8px;"> <div style=" background:#F8F8F8; line-height:0; margin-top:40px; padding:50.0% 0; text-align:center; width:100%;"> <div style=" background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAAGFBMVEUiIiI9PT0eHh4gIB4hIBkcHBwcHBwcHBydr+JQAAAACHRSTlMABA4YHyQsM5jtaMwAAADfSURBVDjL7ZVBEgMhCAQBAf//42xcNbpAqakcM0ftUmFAAIBE81IqBJdS3lS6zs3bIpB9WED3YYXFPmHRfT8sgyrCP1x8uEUxLMzNWElFOYCV6mHWWwMzdPEKHlhLw7NWJqkHc4uIZphavDzA2JPzUDsBZziNae2S6owH8xPmX8G7zzgKEOPUoYHvGz1TBCxMkd3kwNVbU0gKHkx+iZILf77IofhrY1nYFnB/lQPb79drWOyJVa/DAvg9B/rLB4cC+Nqgdz/TvBbBnr6GBReqn/nRmDgaQEej7WhonozjF+Y2I/fZou/qAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;"></div></div> <p style=" margin:8px 0 0 0; padding:0 4px;"> <a href="https://www.instagram.com/p/BCwbsPoCQ-B/" style=" color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;" target="_blank">明日までです。</a></p> <p style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;">Sotaro Fujimakiさん(@macky256)が投稿した写真 - <time style=" font-family:Arial,sans-serif; font-size:14px; line-height:17px;" datetime="2016-03-10T03:04:33+00:00">2016 3月 9 7:04午後 PST</time></p></div></blockquote> <script async defer src="//platform.instagram.com/en_US/embeds.js"></script> <p>段々写真が上達している気がする笑 六本木店は閉店してしまいましたが、恵比寿店と麻布店もあるようなのでいつか行ってみようと思います。</p> <p><a href="http://www.route9g.com/" target="_blank">海南鶏飯食堂 HAINAN JEEFAN SHOKUDO | 海南鶏飯食堂 HAINAN JEEFAN SHOKUDO シンガポールチキンライス</a></p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Facebook">Facebook</a>ページ <a href="https://www.facebook.com/%E6%B5%B7%E5%8D%97%E9%B6%8F%E9%A3%AF%E9%A3%9F%E5%A0%82-102577019793609/" target="_blank">海南鶏飯食堂</a></p> sfjmk MSQRDがリリース4ヶ月でFacebookに買収されるまでの軌跡 hatenablog://entry/8599973812294617694 2016-03-11T08:53:00+09:00 2017-09-03T16:39:37+09:00 2016/3/10にFacebookに買収されたMSQRD。 InstagramとかFacebookでちょいちょい見かけるな−と思い、最近やっとDLして使ってみたのですが、いきなりでFBに買収されて驚きました。 そしてどうやらリリースから4ヶ月くらいしか経ってないようで更にびっくり。 買収の概要はTechCrunchとかでみていただければと思いますが、この記事ではリリース〜買収までの流れを追ってみたいと思います。 <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170903/20170903163530.png" alt="f:id:sfjmk:20170903163530p:plain" title="f:id:sfjmk:20170903163530p:plain" class="hatena-fotolife" itemprop="image"></span> 2016/3/10に<a class="keyword" href="http://d.hatena.ne.jp/keyword/Facebook">Facebook</a>に買収されたMSQRD。 <a class="keyword" href="http://d.hatena.ne.jp/keyword/Instagram">Instagram</a>とか<a class="keyword" href="http://d.hatena.ne.jp/keyword/Facebook">Facebook</a>でちょいちょい見かけるな−と思い、最近やっとDLして使ってみたのですが、いきなりでFBに買収されて驚きました。</p> <p>そしてどうやらリリースから4ヶ月くらいしか経ってないようで更にびっくり。</p> <p>買収の概要はTechCrunchとかでみていただければと思いますが、この記事ではリリース〜買収までの流れを追ってみたいと思います。</p> <blockquote class="embedly-card" data-card-align="left" data-card-type="article" data-card-controls="0" data-card-key="766026660f3b4bc99ee26b68e3777147"><a href="http://jp.techcrunch.com/2016/03/10/20160309facebook-acquires-video-filter-app-msqrd-to-square-up-to-snapchat/">FacebookがSnapchatと対抗するため、動画フィルターアプリのMSQRDを買収 | TechCrunch Japan</a></blockquote> <script src="//cdn.embedly.com/widgets/platform.js" async="" charset="UTF-8"></script> <h3>MSQRDとは</h3> <p> 自撮り(アウトカムもできますが)をすると、リアルタイムで顔を解析して、用意されたマスク(人だったり動物だったり)と合成してくれる動画アプリです。 動画でみたほうがイメージ湧きやすいと思いますが、こういうやつです。</p> <blockquote class="twitter-video" data-lang="ja"> &#x1f3c6;&#x1f3c6; <a href="https://twitter.com/hashtag/giveleoanoscar?src=hash">#giveleoanoscar</a> <a href="https://twitter.com/hashtag/msqrd?src=hash">#msqrd</a> <a href="https://t.co/VNshzgnEN0">pic.twitter.com/VNshzgnEN0</a> — MSQRD (@msqrdme) <a href="https://twitter.com/msqrdme/status/701698183555104769">2016年2月22日</a> </blockquote> <script src="//platform.twitter.com/widgets.js" async="" charset="utf-8"></script> <p>(ちなみにこのディカプリオの顔はリアルタイムで合成されてます)</p> <blockquote class="twitter-tweet" data-lang="ja"> <p dir="ltr" lang="en">Do you want a banana?&#x1f34c; <a href="https://t.co/9ZQlEXvjtH">pic.twitter.com/9ZQlEXvjtH</a></p> — MSQRD (@msqrdme) <a href="https://twitter.com/msqrdme/status/683278892547883008">2016年1月2日</a></blockquote> <script src="//platform.twitter.com/widgets.js" async="" charset="utf-8"></script> <p>映像は保存して、各<a class="keyword" href="http://d.hatena.ne.jp/keyword/SNS">SNS</a>にシェアできます。<a class="keyword" href="http://d.hatena.ne.jp/keyword/Instagram">Instagram</a>とか<a class="keyword" href="http://d.hatena.ne.jp/keyword/Facebook">Facebook</a>で最近よく見かけますね。</p> <p>公式サイト</p> <blockquote class="embedly-card" data-card-align="left" data-card-type="article" data-card-controls="0" data-card-key="766026660f3b4bc99ee26b68e3777147"> <a href="http://msqrd.me/">Home | Masquerade</a> </blockquote> <script src="//cdn.embedly.com/widgets/platform.js" async="" charset="UTF-8"></script> <p>一度使ってみるとわかりますが、結構自撮りへのハードルが下がります。</p> <p>自撮動画や写真のアップだったり、ビデオ通話には結構抵抗があったのですが、これなら気にせずできるかも。</p> <p>CrunchBaseをみると、会社自体は2010年からあるみたいです。</p> <blockquote class="embedly-card" data-card-align="left" data-card-type="article" data-card-controls="0" data-card-key="766026660f3b4bc99ee26b68e3777147"><a href="https://www.crunchbase.com/organization/masquerade#/entity">Masquerade | CrunchBase</a></blockquote> <script src="//cdn.embedly.com/widgets/platform.js" async="" charset="UTF-8"></script> <h3>チーム構成</h3> <p>CrunchBaseには CEO, Co-<a class="keyword" href="http://d.hatena.ne.jp/keyword/Founder">Founder</a>: Eugene Nevgen Co-<a class="keyword" href="http://d.hatena.ne.jp/keyword/Founder">Founder</a>, CTO: Sergey Gonchar <a class="keyword" href="http://d.hatena.ne.jp/keyword/iOS">iOS</a> Developer: Dmitry Kurilo の3名が載っていますが、 この投稿を見る感じ、10名前後の構成のようですね。 </p> <blockquote class="twitter-tweet" data-lang="ja"> Masquerade Team&#x1f44b;&#x1f3fc; <a href="https://t.co/xnQsjFdETO">pic.twitter.com/xnQsjFdETO</a> — MSQRD (@msqrdme) <a href="https://twitter.com/msqrdme/status/695346056444260352">2016年2月4日</a> </blockquote> <script src="//platform.twitter.com/widgets.js" async="" charset="utf-8"></script> <p>このツイートを見たかんじだと10名前後という感じでしょうか。</p> <p>オフィスも超スタートアップって感じですね。</p> <blockquote class="twitter-tweet" data-lang="ja"> <p dir="ltr" lang="en">2AM: working to deliver the best <a href="https://twitter.com/msqrdme">@msqrdme</a> update ever @ MSQRD HQ <a href="https://t.co/qC09FsbRn6">pic.twitter.com/qC09FsbRn6</a></p> — Dmitry Kurilo (@dmitry_kurilo) <a href="https://twitter.com/dmitry_kurilo/status/697206750492127233">2016, 2月 9</a></blockquote> <script src="//platform.twitter.com/widgets.js" async="" charset="utf-8"></script> <p>CEOはデザイン畑の人のようで、SplitMetricsというABテストツールの会社CEO &amp; Design, Co‑<a class="keyword" href="http://d.hatena.ne.jp/keyword/founder">founder</a>も務めているみたいです。</p> <blockquote class="embedly-card" data-card-align="left" data-card-type="article" data-card-controls="0" data-card-key="766026660f3b4bc99ee26b68e3777147"> <a href="https://splitmetrics.com/">Mobile A/B testing for App Store Optimization (ASO) - iOS, Android - App Store, Google Play Store</a> </blockquote> <script src="//cdn.embedly.com/widgets/platform.js" async="" charset="UTF-8"></script> <h2>リリースから買収までの軌跡</h2> <p>それでは公式アカウントや関係者のツイートで振り返ってみましょう。</p> <p>こちらが公式アカウント</p> <blockquote class="embedly-card" data-card-align="left" data-card-type="article" data-card-controls="0" data-card-key="766026660f3b4bc99ee26b68e3777147"><a href="https://twitter.com/msqrdme">MSQRD(@msqrdme)さん | Twitter</a></blockquote> <script src="//cdn.embedly.com/widgets/platform.js" async="" charset="UTF-8"></script> <h4>2015/11/30 公式アカウント初Tweet</h4> <blockquote class="twitter-tweet" data-lang="ja"> <a href="https://t.co/lXFBcJovTn">pic.twitter.com/lXFBcJovTn</a> — MSQRD (@msqrdme) <a href="https://twitter.com/msqrdme/status/671287557490139136">2015年11月30日</a> </blockquote> <script src="//platform.twitter.com/widgets.js" async="" charset="utf-8"></script> <h4>2015/12/11 リリース前のテスト動画 (最初から高クオリティ!)</h4> <blockquote class="twitter-tweet" data-lang="ja"> <p dir="ltr" lang="en">Final <a href="https://twitter.com/msqrdme">@msqrdme</a> testing <a href="https://t.co/UMFycdhtcV">pic.twitter.com/UMFycdhtcV</a></p> — Dmitry Kurilo (@dmitry_kurilo) <a href="https://twitter.com/dmitry_kurilo/status/675025137402568705">2015年12月10日</a></blockquote> <script src="//platform.twitter.com/widgets.js" async="" charset="utf-8"></script> <h4>2015/12/13 <a class="keyword" href="http://d.hatena.ne.jp/keyword/App%20Store">App Store</a>申請</h4> <blockquote class="twitter-tweet" data-lang="ja"> We've just submitted our <a href="https://twitter.com/msqrdme">@msqrdme</a> app to the store. <a href="https://t.co/nIQAc3qff7">https://t.co/nIQAc3qff7</a> Awesome team! Brilliant results! Incredible speed! Happy people! — Sergey Gonchar (@UnknownFlasher) <a href="https://twitter.com/UnknownFlasher/status/675817861047263232">2015年12月12日</a> </blockquote> <script src="//platform.twitter.com/widgets.js" async="" charset="utf-8"></script> <h4>2015/12/18 <a class="keyword" href="http://d.hatena.ne.jp/keyword/iOS">iOS</a>版リリース!(AppStore審査通過)</h4> <blockquote class="twitter-tweet" data-lang="ja"> <p dir="ltr" lang="en">The app is live and ready to download! <a href="https://t.co/5i6SPKb3fl">https://t.co/5i6SPKb3fl</a> Tears of joy &#x1f602; <a href="https://t.co/IfmUHDccEn">pic.twitter.com/IfmUHDccEn</a></p> — MSQRD (@msqrdme) <a href="https://twitter.com/msqrdme/status/677618857750736896">2015年12月17日</a></blockquote> <script src="//platform.twitter.com/widgets.js" async="" charset="utf-8"></script> <h4>2016/1/9 リリース3週間で10万ユーザー突破</h4> <blockquote class="twitter-tweet" data-lang="ja"> 100000 users in last 3 weeks! Thank you so much! &#x1f389;&#x1f389;&#x1f389; <a href="https://twitter.com/hashtag/msqrd?src=hash">#msqrd</a> <a href="https://t.co/jx3ZWznEpa">pic.twitter.com/jx3ZWznEpa</a> — MSQRD (@msqrdme) <a href="https://twitter.com/msqrdme/status/685572159016714240">2016年1月8日</a> </blockquote> <script src="//platform.twitter.com/widgets.js" async="" charset="utf-8"></script> <h4>2016/1/11 同時起動者数2017人。 これを見ると最初はロシア〜東ヨーロッパから流行っていったようですね。</h4> <blockquote class="twitter-tweet" data-lang="ja"> <p dir="ltr" lang="en">2017 Active users right now! &#x1f389;&#x1f60d; <a href="https://t.co/87frgNqsRV">https://t.co/87frgNqsRV</a> <a href="https://t.co/VmS5E9Lu8o">pic.twitter.com/VmS5E9Lu8o</a></p> — MSQRD (@msqrdme) <a href="https://twitter.com/msqrdme/status/686230117954285568">2016年1月10日</a></blockquote> <script src="//platform.twitter.com/widgets.js" async="" charset="utf-8"></script> <h3>2016/1/11 ロシアでAppStore無料アプリランキング1位</h3> <blockquote class="twitter-tweet" data-lang="ja"> Top 1 in Russian store! &#x1f389;&#x1f64f;&#x1f3fc; <a href="https://twitter.com/hashtag/msqrd?src=hash">#msqrd</a> <a href="https://t.co/vDoQfoDohS">pic.twitter.com/vDoQfoDohS</a> — MSQRD (@msqrdme) <a href="https://twitter.com/msqrdme/status/686253940044902401">2016年1月10日</a> </blockquote> <script src="//platform.twitter.com/widgets.js" async="" charset="utf-8"></script> <h3>2016/1/15 50万ユーザー突破&amp;同時起動者数5000人</h3> <p>先週は10万ユーザーだったのに&hellip;</p> <blockquote class="twitter-tweet" data-lang="ja"> <p dir="ltr" lang="en"><a class="keyword" href="http://d.hatena.ne.jp/keyword/Unreal">Unreal</a>. <a href="https://twitter.com/msqrdme">@msqrdme</a> <a class="keyword" href="http://d.hatena.ne.jp/keyword/iOS">iOS</a> app will reach half-million users today. Up to 5000 active right now.</p> Next milestone: 1 million! — Dmitry Kurilo (@dmitry_kurilo) <a href="https://twitter.com/dmitry_kurilo/status/687692395249577984">2016年1月14日</a></blockquote> <script src="//platform.twitter.com/widgets.js" async="" charset="utf-8"></script> <h3>2016/1/22 100万ユーザー突破</h3> <p> この段階でリリースから約1ヶ月</p> <blockquote class="twitter-tweet" data-lang="ja"> Amazing! 1 million users&#x1f631; Thank you!!!&#x1f389; <a href="https://t.co/inM9xW6bpk">pic.twitter.com/inM9xW6bpk</a> — MSQRD (@msqrdme) <a href="https://twitter.com/msqrdme/status/690288913429192704">2016年1月21日</a> </blockquote> <script src="//platform.twitter.com/widgets.js" async="" charset="utf-8"></script> <h3>2016/1/29 120カ国以上で<a class="keyword" href="http://d.hatena.ne.jp/keyword/App%20Store">App Store</a>のFeaturedに掲載</h3> <blockquote class="twitter-tweet" data-lang="ja"> <p dir="ltr" lang="en">We've just got features in 120+ countries. Bummer. (<a href="https://twitter.com/msqrdme">@msqrdme</a>) <a href="https://t.co/dlFW4i5bpR">pic.twitter.com/dlFW4i5bpR</a></p> — Dmitry Kurilo (@dmitry_kurilo) <a href="https://twitter.com/dmitry_kurilo/status/692821330002059264">2016年1月28日</a></blockquote> <script src="//platform.twitter.com/widgets.js" async="" charset="utf-8"></script> <h3>2016/1/30 イタリアでAppStore無料アプリランキング1位</h3> <blockquote class="twitter-tweet" data-lang="ja"> Top 1 in Mexico and Italy store! &#x1f389; <a href="https://twitter.com/hashtag/msqrd?src=hash">#msqrd</a> <a href="https://t.co/wPy7Av3oER">pic.twitter.com/wPy7Av3oER</a> — MSQRD (@msqrdme) <a href="https://twitter.com/msqrdme/status/693375004428406784">2016年1月30日</a> </blockquote> <script src="//platform.twitter.com/widgets.js" async="" charset="utf-8"></script> <h3>2016/1/30 メキシコでAppStore無料アプリランキング1位</h3> <blockquote class="twitter-tweet" data-lang="ja"> <p dir="ltr" lang="en">Top 1 app in Mexico! The first epic win in North America <a href="https://twitter.com/hashtag/msqrd?src=hash">#msqrd</a> &#x1f1f2;&#x1f1fd;&#x1f1fa;&#x1f1f8; <a href="https://t.co/1lTUf66Hjv">pic.twitter.com/1lTUf66Hjv</a></p> — Eugene Nevgen (@e_nevgen) <a href="https://twitter.com/e_nevgen/status/693382424173109248">2016年1月30日</a></blockquote> <script src="//platform.twitter.com/widgets.js" async="" charset="utf-8"></script> <h3>2016/2/12 TechCrunchに掲載</h3> <blockquote class="twitter-tweet" data-lang="ja"> Transform your selfies with the MSQRD app <a href="https://t.co/8PCnQmYvgc">https://t.co/8PCnQmYvgc</a> <a href="https://t.co/unFnloTTYs">https://t.co/unFnloTTYs</a> — TechCrunch (@TechCrunch) <a href="https://twitter.com/TechCrunch/status/697837514510303232">2016年2月11日</a> </blockquote> <script src="//platform.twitter.com/widgets.js" async="" charset="utf-8"></script> <h3>2016/2/13 アメリカでAppStore無料アプリランキング10位</h3> <blockquote class="twitter-tweet" data-lang="ja"> <p dir="ltr" lang="en"><a href="https://twitter.com/hashtag/MSQRD?src=hash">#MSQRD</a> TOP10 USA!! Gogo team!! <a href="https://twitter.com/msqrdme">@msqrdme</a> <a href="https://t.co/etL13KLp1L">pic.twitter.com/etL13KLp1L</a></p> — Nick Davidov (@Neverwhine) <a href="https://twitter.com/Neverwhine/status/698439637371498497">2016年2月13日</a></blockquote> <script src="//platform.twitter.com/widgets.js" async="" charset="utf-8"></script> <h3>2016/2/16 アップデートと共に最近よく見かけるディカプリオのマスク出現!笑</h3> <blockquote class="twitter-tweet" data-lang="ja"> New masks available in <a href="https://twitter.com/msqrdme">@msqrdme</a> app - update now! <a href="https://twitter.com/hashtag/MSQRD?src=hash">#MSQRD</a><a href="https://t.co/5i6SPKb3fl">https://t.co/5i6SPKb3fl</a> <a href="https://t.co/KNV2Y7uuxf">pic.twitter.com/KNV2Y7uuxf</a> — MSQRD (@msqrdme) <a href="https://twitter.com/msqrdme/status/699325402704175104">2016年2月15日</a> </blockquote> <script src="//platform.twitter.com/widgets.js" async="" charset="utf-8"></script> <h3>2016/02/21 <a class="keyword" href="http://d.hatena.ne.jp/keyword/Android">Android</a> Betaがでますよーの告知</h3> <blockquote class="twitter-tweet" data-lang="ja"> <p dir="ltr" lang="en">MSQRD <a class="keyword" href="http://d.hatena.ne.jp/keyword/Android">Android</a> Beta will be available soon! <a href="https://twitter.com/hashtag/msqrd?src=hash">#msqrd</a> <a href="https://t.co/m6sXCGXwQn">pic.twitter.com/m6sXCGXwQn</a></p> — MSQRD (@msqrdme) <a href="https://twitter.com/msqrdme/status/701140043730128897">2016年2月20日</a></blockquote> <script src="//platform.twitter.com/widgets.js" async="" charset="utf-8"></script> <h3>2016/02/23 アメリカでAppStore無料アプリランキング4位に。他にも50カ国以上でランキングトップ圏内に。</h3> <blockquote class="twitter-tweet" data-lang="ja"> MSQRD is the top free <a class="keyword" href="http://d.hatena.ne.jp/keyword/iOS">iOS</a> app in the USA. The TOP-1 app in 50+ countries! <a href="https://twitter.com/hashtag/msqrd?src=hash">#msqrd</a><a href="https://t.co/5i6SPKb3fl">https://t.co/5i6SPKb3fl</a> <a href="https://t.co/sWLUfzP843">pic.twitter.com/sWLUfzP843</a> — MSQRD (@msqrdme) <a href="https://twitter.com/msqrdme/status/701904748497207296">2016年2月22日</a> </blockquote> <script src="//platform.twitter.com/widgets.js" async="" charset="utf-8"></script> <h3>2016/03/05 <a class="keyword" href="http://d.hatena.ne.jp/keyword/Android">Android</a>版がリリースされたと思ったら&hellip;</h3> <blockquote class="twitter-tweet" data-lang="ja"> <p dir="ltr" lang="en">MSQRD is available on <a class="keyword" href="http://d.hatena.ne.jp/keyword/Android">Android</a>! Download now! <a href="https://twitter.com/hashtag/msqrd?src=hash">#msqrd</a><a href="https://t.co/2Ef4tiCIxj">https://t.co/2Ef4tiCIxj</a> <a href="https://t.co/ewCAGjHy05">pic.twitter.com/ewCAGjHy05</a></p> — MSQRD (@msqrdme) <a href="https://twitter.com/msqrdme/status/706022994133524480">2016年3月5日</a></blockquote> <script src="//platform.twitter.com/widgets.js" async="" charset="utf-8"></script> <h3>2016/03/09 <a class="keyword" href="http://d.hatena.ne.jp/keyword/Facebook">Facebook</a>に買収されました! めでたしめでたし。</h3> <blockquote class="twitter-tweet" data-lang="ja"> We,re joining <a class="keyword" href="http://d.hatena.ne.jp/keyword/Facebook">Facebook</a>!&#x1f389; <a href="https://twitter.com/hashtag/msqrd?src=hash">#msqrd</a><a href="https://t.co/Ozmivzd9gL">https://t.co/Ozmivzd9gL</a> <a href="https://t.co/C84ayShUXM">pic.twitter.com/C84ayShUXM</a> — MSQRD (@msqrdme) <a href="https://twitter.com/msqrdme/status/707610310484557824">2016年3月9日</a> </blockquote> <script src="//platform.twitter.com/widgets.js" async="" charset="utf-8"></script> <p>ちなみにAppAnniesのRankHistoryを見るとこんな感じです。一気に駆け上がってますね。 <span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170903/20170903163715.png" alt="f:id:sfjmk:20170903163715p:plain" title="f:id:sfjmk:20170903163715p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p>技術的に結構エグそうなのでなかなか真似できませんが、4ヶ月で買収ってドリーム感すごいなーと。</p> <p>似たようなアプリは<a href="http://facestealer.yahoo-labs.jp/" title="怪人百面相">国内にもありましたが</a>、爆発的にヒットするにはやっぱりタイミングとか見せ方とか大事なんだなぁと…</p> <p>MSQRD、なかなか衝撃的な体験なので1回使ってみてください。</p> <p>公式サイト</p> <blockquote class="embedly-card" data-card-align="left" data-card-type="article" data-card-controls="0" data-card-key="766026660f3b4bc99ee26b68e3777147"><a href="http://msqrd.me/">Home | Masquerade</a></blockquote> <script src="//cdn.embedly.com/widgets/platform.js" async="" charset="UTF-8"></script> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/App%20Store">App Store</a></p> <blockquote class="embedly-card" data-card-align="left" data-card-type="article" data-card-controls="0" data-card-key="766026660f3b4bc99ee26b68e3777147"> <a href="https://itunes.apple.com/jp/app/msqrd-zi-cuoribideo-yongnoraibufirutatofeisusuwappu/id1065249424?mt=8&amp;ign-mpt=uo%3D4">MSQRD — 自撮りビデオ用のライブフィルターとフェイススワップを App Store で</a> </blockquote> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Google%20Play">Google Play</a></p> <script src="//cdn.embedly.com/widgets/platform.js" async="" charset="UTF-8"></script> <blockquote class="embedly-card" data-card-align="left" data-card-type="article" data-card-controls="0" data-card-key="766026660f3b4bc99ee26b68e3777147"><a href="https://play.google.com/store/apps/details?id=me.msqrd.android">MSQRD - Google Play の Android アプリ</a></blockquote> <script src="//cdn.embedly.com/widgets/platform.js" async="" charset="UTF-8"></script> sfjmk Hack Day 2016の振り返りとハッカソン駆動学習のすゝめ hatenablog://entry/8599973812294608471 2016-02-22T21:53:00+09:00 2017-09-03T15:55:45+09:00 先日(2/13-14) Hack Day2016に参加したので簡単に振り返ろうと思います。 若干時間が経ってしまいましたが、反省等色々あったので、備忘録的に書き残しておきます。 <p>先日(2/13-14) Hack Day2016に参加したので簡単に振り返ろうと思います。 若干時間が経ってしまいましたが、反省等色々あったので、備忘録的に書き残しておきます。</p> <h2>Hack Dayとは</h2> <p>ヤフーが主催する<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%CF%A5%C3%A5%AB%A5%BD%A5%F3">ハッカソン</a>です。 フリーテーマ&amp;開発期間は24時間という条件の中で何かを作って90秒でプレゼンするというなかなかストイックな感じです。</p> <p>詳しくはこちら</p> <blockquote class="embedly-card" data-card-align="left" data-card-type="article"><a href="http://hackday.jp/">Hack Day 2016 : ヤフー主催の日本最大級ハッカソンイベント@秋葉原、2/14(日)の一般公開ステージは観覧自由!ぶっとんだアイディアを見にいこう #hackdayjp</a></blockquote> <script src="//cdn.embedly.com/widgets/platform.js" async="" charset="UTF-8"></script> <p>エンジニア×3、デザイナー×2の5人チームで参加しました。</p> <h2>作ったもの</h2> <p>作ったものはこんなやつです。タイトルは「Happy Valentine?」</p> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170903/20170903153939.jpg" alt="f:id:sfjmk:20170903153939j:plain" title="f:id:sfjmk:20170903153939j:plain" class="hatena-fotolife" itemprop="image"></span> (写真全然撮ってなかったので素材がこれくらいしかなかった&hellip;笑)</p> <p>簡単に説明すると、 ・前面にくっついている<a class="keyword" href="http://d.hatena.ne.jp/keyword/iPhone">iPhone</a>カメラで男女2人で写真を撮ると ・写真から2人の相性を診断し ・診断の結果をもとにした味のチョコレートが生成される というバレンタイン感満載のデ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D0%A5%A4%A5%B9">バイス</a>です笑</p> <p>プレゼン映像は自分の滑舌が悪すぎて引いたので紹介を控えますがw、この中のどこかにいます。 <iframe width="560" height="315" src="https://www.youtube.com/embed/lsujyuPHnxE" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p> <h3>仕組み</h3> <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170903/20170903154305.png" alt="f:id:sfjmk:20170903154305p:plain" title="f:id:sfjmk:20170903154305p:plain" class="hatena-fotolife" itemprop="image"></span></p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/iOS">iOS</a>アプリを作成し、カメラ機能を実装。カメラで写真を撮ると、まずGyazoAPIを叩いて<a class="keyword" href="http://d.hatena.ne.jp/keyword/Gyazo">Gyazo</a>に画像アップロードします。</p> <p>こういうプロトタイピング時にちょっと画像をどこかに置きたい時は<a class="keyword" href="http://d.hatena.ne.jp/keyword/Gyazo">Gyazo</a>が超便利ですね。</p> <blockquote class="embedly-card" data-card-align="left" data-card-type="article"> <a href="https://gyazo.com/api?lang=ja">Gyazo</a> </blockquote> <script src="//cdn.embedly.com/widgets/platform.js" async="" charset="UTF-8"></script> <p>その後、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Gyazo">Gyazo</a>に上げた画像のURLをパラメータに付けて<a class="keyword" href="http://d.hatena.ne.jp/keyword/Microsoft">Microsoft</a> Project OxfordのEmotion <a class="keyword" href="http://d.hatena.ne.jp/keyword/API">API</a>を叩き、画像に写っている人物の"感情"をデータとして取得します。</p> <blockquote class="embedly-card" data-card-align="left" data-card-type="article"><a href="https://www.projectoxford.ai/emotion">Microsoft Project Oxford Emotion API</a></blockquote> <script src="//cdn.embedly.com/widgets/platform.js" async="" charset="UTF-8"></script> <p>Emotion <a class="keyword" href="http://d.hatena.ne.jp/keyword/API">API</a>は写っている人物の顔の位置(Topからの距離,Leftからの距離,幅,高さ)と感情(anger, <a class="keyword" href="http://d.hatena.ne.jp/keyword/contempt">contempt</a>, disgust, fear, happiness, neutral, sadness, surprise)を取得できる<a class="keyword" href="http://d.hatena.ne.jp/keyword/API">API</a>です。</p> <p>公式のLive Demoはこちら</p> <blockquote class="embedly-card" data-card-align="left" data-card-type="article"> <a href="https://www.projectoxford.ai/demo/Emotion">Microsoft Project Oxford Emotion Demo</a> </blockquote> <script src="//cdn.embedly.com/widgets/platform.js" async="" charset="UTF-8"></script> <p>そして、そのデータをWEB&amp;DBサーバー(node.js×MongoDB)に渡して、DBに保存。</p> <p>その後、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Arduino">Arduino</a>を接続している<a class="keyword" href="http://d.hatena.ne.jp/keyword/Mac">Mac</a>からサーバーにリク<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>トし、感情データを取得。 happiness, sadness, angerの値をちょっと調理してシリアル通信で<a class="keyword" href="http://d.hatena.ne.jp/keyword/Arduino">Arduino</a>にデータを渡し(この辺は<a class="keyword" href="http://d.hatena.ne.jp/keyword/Python">Python</a>で実装しました)、その値を元に3つの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B5%A1%BC%A5%DC%A5%E2%A1%BC%A5%BF">サーボモータ</a>ーを動かし、それぞれ注射器を押し出してチョコレートを調合しています。</p> <p>Happinessの値は甘いチョコレートの量に、sadnessの値は苦いチョコレートの量に、 angerの値はタバスコ入りチョコレートの量に反映されています。</p> <p>(PC側でどうやって検知してるかですが、10秒に1回リク<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>トしました!笑) 気合実装感が半端ないですが… まあ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%CF%A5%C3%A5%AB%A5%BD%A5%F3">ハッカソン</a>あるあるということで笑</p> <p>一応チョコレートを温めておくとチョコレートが出るには出るのですが… このようになかなか際どい感じです笑</p> <iframe src="http://gifs.com/embed/J6Yq6K" frameborder="0" scrolling="no" width='480' height='270' style="-webkit-backface-visibility: hidden;-webkit-transform: scale(1);" ></iframe> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B5%A1%BC%A5%DC%A5%E2%A1%BC%A5%BF">サーボモータ</a>ーでチョコレートの量を制御するのが思いの外難しかった… 本当はチョコレートをずっと温めておける機構をつけたかったり、見た目をもうちょっと綺麗にしたかったり、他にももっと何とかしたいなーとは皆思ってたものの、時間切れになってしまいました。</p> <h2>結果</h2> <p>何も賞にひっかからず… という悲しい結果で悔しさに打ちひしがれました笑 完成度的に賞はちょっと厳しいだろうなーというのは薄々感じていたのですが、上位の作品をみるとやはり自分達の作品と比べて完成度が高く、もっと頑張らねばなーと思いました。</p> <p>以下上位入賞作品のプレゼンを貼っておきます。</p> <h3>GRAND PRIX</h3> <p>グルメスパイ - チーム名: AdriaBlue <iframe width="560" height="315" src="https://www.youtube.com/embed/lsujyuPHnxE?start=6840" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p> <h3>GOLD</h3> <p>ぬるぬる動く<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%E1%A5%D3%A5%A6%A5%B9">メビウス</a>変換 - チーム名: リーマンズ <iframe width="560" height="315" src="https://www.youtube.com/embed/lsujyuPHnxE?start=2290" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p> <h3>SILVER</h3> <p>IoP - チーム名: fujikkys fujikkys <iframe width="560" height="315" src="https://www.youtube.com/embed/lsujyuPHnxE?start=12038" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p> <h3>BRONZE</h3> <p>BATAMU - チーム名: 部屋の済に落ちている靴下 <iframe width="560" height="315" src="https://www.youtube.com/embed/lsujyuPHnxE?start=9700" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p> <p>他の作品も面白いものが多く、見ていて楽しかったです。(量が多くて流石に見切れなかったですが)</p> <h2><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%CF%A5%C3%A5%AB%A5%BD%A5%F3">ハッカソン</a>駆動学習(HDL - <a class="keyword" href="http://d.hatena.ne.jp/keyword/Hackathon">Hackathon</a> Driven Learning)</h2> <p><strong><strong>なんとなく興味はあるけど、日頃なかなか学習する機会がないもの</strong></strong></p> <p>こういうものって、皆さんにもいくつかあるんじゃないでしょうか。</p> <p>僕の場合電子工作がその一つでした。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Arduino">Arduino</a>を数年前に買ったものの、"<a class="keyword" href="http://d.hatena.ne.jp/keyword/Mac">Mac</a>に繋いでLEDを光らす"とか、"センサーを繋いで値を表示する"くらいしかやったことがなかったので、 もうちょっと何かできるようになりたいなーと思っていました。</p> <p>(別の<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%CF%A5%C3%A5%AB%A5%BD%A5%F3">ハッカソン</a>で電子工作的なことをしたことはありましたが、電子工作の部分は詳しいメンバーにやってもらっていました)</p> <p>何かを学ぶには、それを使わなければいけない環境に身を置くのが一番の近道であると個人的には思っているのですが、短い時間の中で開発を完了する必要がある<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%CF%A5%C3%A5%AB%A5%BD%A5%F3">ハッカソン</a>の場は学習にはもってこいです。</p> <p>というわけで、今回は"電子工作系を絡めた何かをやる"というのも頭の片隅におきつつ作品を考えました。 (「どうしても電子工作がやりたい!」というわけではなく、Unityとかにも興味があったので、「3D使った何かをやろうかー」という話も出てました。)</p> <p>今回の実装に関しての前提知識はほぼありませんでしたが、</p> <blockquote class="embedly-card" data-card-align="left" data-card-type="article"><a href="http://qiita.com/1000ch/items/93841f76ea52551b6a97">pyenvを使ってMacにPythonの環境を構築する - Qiita</a></blockquote> <script src="//cdn.embedly.com/widgets/platform.js" async="" charset="UTF-8"></script> <blockquote class="embedly-card" data-card-align="left" data-card-type="article"> <a href="http://denshi.blog.jp/arduino/RC%E3%82%B5%E3%83%BC%E3%83%9C%E3%82%92PWM%E5%88%B6%E5%BE%A1">【Arduino】サーボモータをPWM制御</a> </blockquote> <script src="//cdn.embedly.com/widgets/platform.js" async="" charset="UTF-8"></script> <blockquote class="embedly-card" data-card-align="left" data-card-type="article"><a href="http://denshi.blog.jp/arduino/python%E3%81%AE%E3%82%B7%E3%83%AA%E3%82%A2%E3%83%AB%E9%80%9A%E4%BF%A1%E3%81%A7%E3%82%B5%E3%83%BC%E3%83%9C%E5%88%B6%E5%BE%A1">PythonとArduinoでサーボモータを制御</a></blockquote> <script src="//cdn.embedly.com/widgets/platform.js" async="" charset="UTF-8"></script> <p>この辺の記事を読みながら、24時間で &ldquo;WEBサーバーから数値を受け取ってシリアル通信で<a class="keyword" href="http://d.hatena.ne.jp/keyword/Arduino">Arduino</a>に値を渡して<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B5%A1%BC%A5%DC%A5%E2%A1%BC%A5%BF">サーボモータ</a>ーを動かす&rdquo; ところまでできるようになりました。 まあ、そこまで難しくもないんですけどねw そのうち勉強しようと思ってもなかなかやらないので大きな一歩です。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%CF%A5%C3%A5%AB%A5%BD%A5%F3">ハッカソン</a>に参加をされてる方の中にはこういった思想で取り組んでる方も結構いらっしゃるかもしれませんが、これまで参加したことがない方も半分学習目的で<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%CF%A5%C3%A5%AB%A5%BD%A5%F3">ハッカソン</a>に参加してみてはいかがでしょうか。</p> <p>(ちなみに、サーボ動かすところはまあちょっと調べれば何とかできるだろうと思っていたものの、"サーボが動いたからといってチョコレートが出てくれるわけではない"という点については大きな誤算でした笑)</p> <h2>感想とか学んだこととか反省とかその他色々</h2> <p>以下箇条書きで。</p> <ul> <li>今回使った<a class="keyword" href="http://d.hatena.ne.jp/keyword/Microsoft">Microsoft</a> Project Oxfordの<a class="keyword" href="http://d.hatena.ne.jp/keyword/API">API</a>群が結構面白そうなので、これを使って色々やってみたい。</li> </ul> <blockquote class="embedly-card" data-card-align="left" data-card-type="article"> <a href="https://www.projectoxford.ai/">Microsoft Project Oxford Home</a> </blockquote> <script src="//cdn.embedly.com/widgets/platform.js" async="" charset="UTF-8"></script> <ul> <li><p>ア<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A4%A5%C7%A5%A2">イデア</a>は事前ブレストで考えたが、"面白プロダクト"を作ろうと意識しすぎて、Hack感がなくなってしまった気もする。面白いものを作るというところはゴールにせず、日頃感じている課題等を持ち寄ってそれをどう解決するか考えたほうが開発の熱量も上がったかもしれない。やり方にもよるのかもしれないけど、最初からみんなでブレストすると中庸なア<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A4%A5%C7%A5%A2">イデア</a>になりがちな気がする。</p></li> <li><p>一応ネタは事前にブレストして用意していたものの、チョコレートの量の調整方法等は当日に考えたのでバタバタしてしまった。(<a class="keyword" href="http://d.hatena.ne.jp/keyword/%BD%A9%CD%D5%B8%B6">秋葉原</a>の部品屋は18時頃に閉まってしまうので結構焦った) 実装方法は大枠だけでも決めておけばよかった。</p></li> <li><p>慣れないことをしたので実装において不確定要素を作ってしまった。それによりスケジューリングに甘さが出て結果的に完成度を下げてしまったので、慣れないことをするなら事前に多少のインプットなり検証なりをしておいたほうがよかった。</p></li> <li><p>デモ展示の時に「食べられるんですか?」という質問を結構いただいたが、衛生面で不安があったので見ていただくだけにした。このやりとりで多少のがっかり感はでてしまうので食品系はやめたほうがいいのかなーと思った。</p></li> <li><p>開発に熱中して写真も動画も全然撮ってなかったので、いざブログとかで書こうと思ったら素材が全然なかった笑 時々写真はとっときましょう。</p></li> <li><p>VR<a class="keyword" href="http://d.hatena.ne.jp/keyword/%BC%C4%BA%EA%B0%A6">篠崎愛</a>の整理券配布が初日受付の先着順だと知らず、自分たちが行った頃には整理券がなくなっていた。参加動機の9割はこれだったと言っても過言ではなかったので非常につらい。参加要項はしっかり読もう。</p></li> </ul> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%CF%A5%C3%A5%AB%A5%BD%A5%F3">ハッカソン</a>に出たのは数回目で、いつも締切間近になると体力的にもきつくなって「なんで出たんだろう…」と後悔するのですが、終わるとまた出たくなるので不思議なものですね。</p> <p>次はもっと良い物を作ろう。</p> sfjmk WEBブラウザでイベントに合わせて音を鳴らしたい時はhowler.jsが便利 hatenablog://entry/8599973812294594368 2016-01-31T23:01:00+09:00 2017-09-03T15:58:24+09:00 先日某ハッカソンでWEBアプリケーションを作った時に、アニメーションに合わせて音を鳴らしたりしたのですが、 イベントに合わせて音を慣らすのにhowler.jsというjsライブラリが便利だったので簡単に紹介します。 <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170903/20170903155804.png" alt="f:id:sfjmk:20170903155804p:plain" title="f:id:sfjmk:20170903155804p:plain" class="hatena-fotolife" itemprop="image"></span> 先日某<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%CF%A5%C3%A5%AB%A5%BD%A5%F3">ハッカソン</a>でWEBアプリケーションを作った時に、アニメーションに合わせて音を鳴らしたりしたのですが、 イベントに合わせて音を慣らすのにhowler.jsというjsライブラリが便利だったので簡単に紹介します。</p> <p>公式ページ</p> <blockquote class="embedly-card" data-card-key="766026660f3b4bc99ee26b68e3777147" data-card-controls="0" data-card-type="article" data-card-align="left"> <h4><a href="http://goldfirestudios.com/blog/104/howler.js-Modern-Web-Audio-Javascript-Library">howler.js - Modern Web Audio Javascript Library</a></h4> Browsers have come a long way over the years, and we are now able to achieve amazing results using all of the great new technologies often referred to as <a class="keyword" href="http://d.hatena.ne.jp/keyword/HTML5">HTML5</a>. However, generally speaking, audio...</blockquote> <script src="//cdn.embedly.com/widgets/platform.js" async="" charset="UTF-8"></script> <p>サムネが謎&hellip;goldfireっていうゲーム会社がゲームで音を鳴らす用につくったライブラリのようです。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/GitHub">GitHub</a>はこちら</p> <blockquote class="embedly-card" data-card-key="766026660f3b4bc99ee26b68e3777147" data-card-controls="0" data-card-type="article" data-card-align="left"> <h4><a href="https://github.com/goldfire/howler.js">goldfire/howler.js</a></h4> howler.js - <a class="keyword" href="http://d.hatena.ne.jp/keyword/Javascript">Javascript</a> audio library for the modern web. </blockquote> <script src="//cdn.embedly.com/widgets/platform.js" async="" charset="UTF-8"></script> <p><a href="https://github.com/goldfire/howler.js">https://github.com/goldfire/howler.js</a></p> <p>使い方はリンク先の通りですが、 howler.jsを読み込んだ上で</p> <pre class="code" data-lang="" data-unlink>var sound = new Howl({ urls: [&#39;sound.mp3&#39;] // 音声ファイルを置いてあるパス }).play(); </pre> <p>こんな風に書くと音声ファイル(ここだとsound.mp3)が鳴ります。</p> <pre class="code" data-lang="" data-unlink>var sound = new Howl({ urls: [&#39;sound.mp3&#39;] }); $(&#34;.js-slidein”).on(&#39;webkitAnimationEnd&#39;, function(){ sound.play(); });</pre> <p>こんな風にすると、アニメーション等に合わせて音を鳴らせるわけですね。</p> <pre class="code" data-lang="" data-unlink>var sound = new Howl({ urls: [&#39;sound.mp3&#39;, &#39;sound.ogg&#39;, &#39;sound.wav&#39;], autoplay: true, loop: true, volume: 0.5, onend: function() { alert(&#39;Finished!&#39;); } });</pre> <p>onendを使うと再生終了イベントもとることができます。</p> <p>再生に加えて停止・フェードインやアウト・ループ等のメソッドも用意されてるようです。</p> <p>他にも</p> <pre class="code" data-lang="" data-unlink>var sound = new Howl({ urls: [&#39;sounds.mp3&#39;, &#39;sounds.ogg&#39;], sprite: { blast: [0, 2000], laser: [3000, 700], winner: [5000, 9000] } }); // shoot the laser! sound.play(&#39;laser&#39;);</pre> <p>こんな風にスプライト機能も用意されていて、1つの音声ファイルを秒ごとに区切って音を呼び出すこともできます。</p> <p>遊びでちょっと使っただけなので、音鳴らす系jsライブラリの中でこれがベストなのかは何とも言えませんが、簡単に使えるのでWEBブラウザで音を鳴らしたい時には試してみるといいんじゃないでしょうか。</p> <p>今年はブログ書こうと思いつつ1月から挫折気味…(何か書かなきゃと思ってこの記事も滑り込みで書いた笑) こういうメモみたいな感じでもいいからコンスタントに書きたいなー</p> sfjmk 書き初め hatenablog://entry/8599973812294594099 2016-01-11T20:18:00+09:00 2017-09-03T16:06:17+09:00 書き初めしました! #JAPANESECALLIGRAPHY #kakizome #書 Sotaro Fujimakiさん(@macky256)が投稿した写真 - 2016 1月 11 6:15午前 PST 久しぶりに書いてみた。 書道は昔習ってたけど、日が空くとだいぶ腕が落ちますね… <blockquote class="instagram-media" style="background: #FFF; border: 0; border-radius: 3px; box-shadow: 0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width: 658px; padding: 0; width: calc(100% - 2px);" data-instgrm-captioned="" data-instgrm-version="6"> <div style="padding: 8px;"> <div style="background: #F8F8F8; line-height: 0; margin-top: 40px; padding: 50.0% 0; text-align: center; width: 100%;"></div> <p style="margin: 8px 0 0 0; padding: 0 4px;"><a style="color: #000; font-family: Arial,sans-serif; font-size: 14px; font-style: normal; font-weight: normal; line-height: 17px; text-decoration: none; word-wrap: break-word;" href="https://www.instagram.com/p/BAZti9XCQ35/" target="_blank">書き初めしました! #JAPANESECALLIGRAPHY #kakizome #書</a></p> <p style="color: #c9c8cd; font-family: Arial,sans-serif; font-size: 14px; line-height: 17px; margin-bottom: 0; margin-top: 8px; overflow: hidden; padding: 8px 0 7px; text-align: center; text-overflow: ellipsis; white-space: nowrap;">Sotaro Fujimakiさん(@macky256)が投稿した写真 - <time style="font-family: Arial,sans-serif; font-size: 14px; line-height: 17px;" datetime="2016-01-11T14:15:15+00:00">2016 1月 11 6:15午前 PST</time></p> </div></blockquote> <script src="//platform.instagram.com/en_US/embeds.js" async="" defer="defer"></script> <p>久しぶりに書いてみた。 書道は昔習ってたけど、日が空くとだいぶ腕が落ちますね&hellip;</p> sfjmk AnsibleでLinux × nginx × MySQL × PHP × WordPress環境を構築してみた hatenablog://entry/8599973812294591342 2015-12-29T17:30:00+09:00 2017-09-03T16:01:11+09:00 ブログは以前はてなブログで書いていたのですが、前回の更新からだいぶ日が空いてしまったので、年が変わる前に心機一転新しいブログをWordPressで作ってみました。 WordPressテーマはとりあえずSimplicityをそのまま使ってるので殺風景ですが、気が向いたらかっこ良くしたり細かい設定をいじったりしていきたいと思います笑 <p><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20170903/20170903160059.jpg" alt="f:id:sfjmk:20170903160059j:plain" title="f:id:sfjmk:20170903160059j:plain" class="hatena-fotolife" itemprop="image"></span> ブログは以前<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A4%CF%A4%C6%A4%CA%A5%D6%A5%ED%A5%B0">はてなブログ</a>で書いていたのですが、前回の更新からだいぶ日が空いてしまったので、年が変わる前に心機一転新しいブログを<a class="keyword" href="http://d.hatena.ne.jp/keyword/WordPress">WordPress</a>で作ってみました。 <a class="keyword" href="http://d.hatena.ne.jp/keyword/WordPress">WordPress</a>テーマはとりあえず<a href="http://wp-simplicity.com/">Simplicity</a>をそのまま使ってるので殺風景ですが、気が向いたらかっこ良くしたり細かい設定をいじったりしていきたいと思います笑</p> <p>久しぶりなのでなかなか筆が進みませんが、徐々に慣れていければなと。</p> <p>以前のブログはこちら (といってもそんなに記事ないですが&hellip;)</p> <blockquote class="embedly-card" data-card-key="766026660f3b4bc99ee26b68e3777147" data-card-controls="0" data-card-type="article" data-card-align="left"> <h4><a href="http://fjmk.hatenablog.com/">fjmk blog</a></h4> 都内の大学生エンジニアのブログ。プログラミングのことや日々感じていることを書いていきます。</blockquote> <script src="//cdn.embedly.com/widgets/platform.js" async="" charset="UTF-8"></script> <p>今回ブログを作るにあたって、Ansibleを初めて使って環境構築をしたので、まずはその方法を書いてみます。</p> <p>サーバーはカ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B4%A5%E4">ゴヤ</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/VPS">VPS</a>を借りました。</p> <blockquote class="embedly-card" data-card-key="766026660f3b4bc99ee26b68e3777147" data-card-type="article" data-card-align="left"> <h4><a href="http://www.kagoya.jp/cloud/vps/">VPS(仮想専用サーバー)|カゴヤ・クラウド/VPS|レンタルサーバーのカゴヤ・ジャパン</a></h4> 「カ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B4%A5%E4">ゴヤ</a>・<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%AF%A5%E9%A5%A6%A5%C9">クラウド</a>/<a class="keyword" href="http://d.hatena.ne.jp/keyword/VPS">VPS</a>」は、日額31円〜、月額864円〜のお手軽な価格で高性能・セキュリティも万全です。「Open VZ」を最の利点大限に活用した軽快な仮想専用サーバーです。 </blockquote> <script src="//cdn.embedly.com/widgets/platform.js" async="" charset="UTF-8"></script> <p>これまでさくら<a class="keyword" href="http://d.hatena.ne.jp/keyword/VPS">VPS</a>を3年くらい契約してたのですが、</p> <ul> <li>料金に対してのスペックがそんなに変わらない</li> <li>スケールアップが簡単にできる</li> <li>利用料が日割り計算(重要!)</li> </ul> <p>という理由でカ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B4%A5%E4">ゴヤ</a>に乗り換えました。</p> <p>一応<a href="http://www.kagoya.jp/cloud/vps/app.html">アプリケーションパック</a>というものが用意されていて、<a class="keyword" href="http://d.hatena.ne.jp/keyword/WordPress">WordPress</a>環境はクリックだけで作れるようになっているのですが、1つのサーバーに他のWebアプリケーションも載せたかったので、ちゃんと環境を把握できるようAnsibleを使ってみることにしました。</p> <p>今回作ったファイルは<a class="keyword" href="http://d.hatena.ne.jp/keyword/GitHub">GitHub</a>に置きました。 <a href="https://github.com/sfujimaki/ansible-playbooks">https://github.com/sfujimaki/ansible-playbooks</a></p> <blockquote class="embedly-card" data-card-key="766026660f3b4bc99ee26b68e3777147" data-card-align="left"> <h4><a href="https://github.com/sfujimaki/ansible-playbooks">sfujimaki/ansible-playbooks</a></h4> Contribute to ansible-playbooks development by creating an account on <a class="keyword" href="http://d.hatena.ne.jp/keyword/GitHub">GitHub</a>.</blockquote> <script src="//cdn.embedly.com/widgets/platform.js" async="" charset="UTF-8"></script> <h2>Ansibleとは?</h2> <p> ここまで読んでいる方は恐らくご存知かとは思いますが、最近(でもないか)流行りの構成管理ツールです。 この記事では説明を割愛しますが、この辺とかを見ておくと概要が分かるんじゃないでしょうか。</p> <blockquote class="embedly-card" data-card-key="766026660f3b4bc99ee26b68e3777147" data-card-controls="0" data-card-type="article" data-card-align="left"> <h4><a href="http://qiita.com/ArimaRyunosuke/items/1f9d840311584d8160bc">Ansible 入門 - Qiita</a></h4> Ansible 入門 社内勉強会で Ansible の初歩的な発表をしたのでその資料を公開します。 間違い等あるとおもいますが、指摘して頂ければ幸いです。 Ansible とは? 構成管理ツールです。Chef とか Puppet とかああいうののお仲間です。 Puppet は知りませんが、Chef は少し使って嫌気が差して止めました。 理由は 特殊なことをしようとすると <a class="keyword" href="http://d.hatena.ne.jp/keyword/Ruby">Ruby</a> の知識が必要になる 構成管理「される側」にも Chef が必要(エージェント... </blockquote> <script src="//cdn.embedly.com/widgets/platform.js" async="" charset="UTF-8"></script> <blockquote class="embedly-card" data-card-key="766026660f3b4bc99ee26b68e3777147" data-card-controls="0" data-card-type="article" data-card-align="left"> <h4><a href="http://knowledge.sakura.ad.jp/tech/3124/">エージェントレスでシンプルな構成管理ツール「Ansible」入門</a></h4> 近年、ChefやPuppetなどの構成管理ツールが人気だが、新たに注目されつつある構成管理ツールとして「Ansible」がある。Ansibleは設定ファイルがシンプルで、管理対象サーバーに特別なソフトウェアをインストールすることなく利用できるなど、最小限の手間で各種設定を自動化できるのが特徴だ。今回はこのAnsibleについてその基本的な使い方を紹介する。</blockquote> <script src="//cdn.embedly.com/widgets/platform.js" async="" charset="UTF-8"></script> <h2>LEMP環境構築方法</h2> <p> <a class="keyword" href="http://d.hatena.ne.jp/keyword/Linux">Linux</a> × <a class="keyword" href="http://d.hatena.ne.jp/keyword/Apache">Apache</a> × <a class="keyword" href="http://d.hatena.ne.jp/keyword/MySQL">MySQL</a> × <a class="keyword" href="http://d.hatena.ne.jp/keyword/PHP">PHP</a>を使う時は<a class="keyword" href="http://d.hatena.ne.jp/keyword/LAMP">LAMP</a>環境だけどNginxの場合なんて略すんだろうと思ってたら、どうやらLEMPというようです。 <a href="https://www.google.co.jp/search?q=LEMP&amp;amp;oq=LEMP&amp;amp;aqs=chrome..69i57j69i60l3j0l2.522j0j4&amp;amp;sourceid=chrome&amp;amp;es_sm=119&amp;amp;ie=UTF-8">LEMP - Google 検索</a></p> <p>この<a class="keyword" href="http://d.hatena.ne.jp/keyword/VPS">VPS</a>に<a class="keyword" href="http://d.hatena.ne.jp/keyword/Rails">Rails</a>等のアプリケーションを載せたかったというのもあり(別に<a class="keyword" href="http://d.hatena.ne.jp/keyword/Apache">Apache</a>でもできますが笑)、Webサーバソフトは何となくNginxを使おうと思いました。 ただ、途中で気づいたのですが<a class="keyword" href="http://d.hatena.ne.jp/keyword/WordPress">WordPress</a>には<a class="keyword" href="http://d.hatena.ne.jp/keyword/Apache">Apache</a>を使うのが一般的のようで、<a class="keyword" href="http://d.hatena.ne.jp/keyword/WordPress">WordPress</a>×<a class="keyword" href="http://d.hatena.ne.jp/keyword/Apache">Apache</a>の記事数に比べると<a class="keyword" href="http://d.hatena.ne.jp/keyword/WordPress">WordPress</a>×Nginxの記事はかなり少なかったので特にこだわりがなければ<a class="keyword" href="http://d.hatena.ne.jp/keyword/Apache">Apache</a>がいいかも&hellip;</p> <p>nginx×<a class="keyword" href="http://d.hatena.ne.jp/keyword/wordpress">wordpress</a>の構築方法はブログ等に幾つか上がっていますが、Ansibleの公式<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EA%A5%DD%A5%B8%A5%C8%A5%EA">リポジトリ</a>にもサンプルが上がっているので、こちらをベースに作りました。</p> <blockquote class="embedly-card" data-card-key="766026660f3b4bc99ee26b68e3777147" data-card-type="article" data-card-align="left"> <h4><a href="https://github.com/ansible/ansible-examples/tree/master/wordpress-nginx">ansible/ansible-examples</a></h4> ansible-examples - A few starter examples of ansible playbooks, to show features and how they work together. See <a href="http://galaxy.ansible.com">http://galaxy.ansible.com</a> for example roles from the Ansible community for deploying many popular applications. </blockquote> <script src="//cdn.embedly.com/widgets/platform.js" async="" charset="UTF-8"></script> <p>また、公式のベストプラクティスはこんな感じみたいです(今回は少し崩しています)</p> <blockquote class="embedly-card" data-card-key="766026660f3b4bc99ee26b68e3777147" data-card-controls="0" data-card-type="article" data-card-align="left"> <h4><a href="http://docs.ansible.com/ansible/playbooks_best_practices.html">Best Practices - Ansible Documentation</a></h4> Here are some tips for making the most of Ansible and Ansible playbooks. You can find some example playbooks illustrating these best practices in our ansible-examples repository. (NOTE: These may not use all of the features in the latest release, but are still an excellent reference!).</blockquote> <script src="//cdn.embedly.com/widgets/platform.js" async="" charset="UTF-8"></script> <p>他にも幾つか參考にしたページがあるので、そちらは記事の最後に追記します。</p> <p>本来であればベストプラクティスのように要素ごとにRoleを分けるべきですが、今回は見通しを良くするためにRoleは分けずに作りました。 また、多くのサンプルではルート<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リに<a class="keyword" href="http://d.hatena.ne.jp/keyword/WordPress">WordPress</a>をインストールしていますが、今回は<a class="keyword" href="http://d.hatena.ne.jp/keyword/WordPress">WordPress</a>を専用<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リ(今回の場合は/wp<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リ)に配置したかったので、その前提で作っています。</p> <p><a href="https://wpdocs.osdn.jp/WordPress_%E3%82%92%E5%B0%82%E7%94%A8%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%81%AB%E9%85%8D%E7%BD%AE%E3%81%99%E3%82%8B">WordPress を専用ディレクトリに配置する - WordPress Codex 日本語版</a></p> <p>Nginxの設定等は、サンプルや他の解説記事と異なってると思うのでご注意ください。</p> <p>一通り触った今となってはRoleを分けたほうが分かりやすいですが、最初は全容が把握しづらかったので1ファイルにまとめたほうが分かりやすかったです。 また、備忘録も兼ねてコード内にコメントも書いておきました。</p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リ(playbook)は以下の2つに分けました。</p> <ul> <li>setup ・・・ ユーザー作成,<a class="keyword" href="http://d.hatena.ne.jp/keyword/ssh">ssh</a>設定,ポート設定等、サーバー立ち上げ時に必要な設定</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/wordpress">wordpress</a>-nginx ・・・<a class="keyword" href="http://d.hatena.ne.jp/keyword/PHP">PHP</a>, Nginx, <a class="keyword" href="http://d.hatena.ne.jp/keyword/MySQL">MySQL</a>, <a class="keyword" href="http://d.hatena.ne.jp/keyword/WordPress">WordPress</a>のインストール&amp;各種設定</li> </ul> <p>内容については以下で説明していきます。</p> <h3>setup</h3> <p> こちらのplaybookでは、</p> <ul> <li>ユーザー作成</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/ssh">ssh</a>設定</li> <li>ポート設定</li> </ul> <p>といった、サーバーを立てたら最初にするべきことを実施します。</p> <p>ポート等の設定と<a class="keyword" href="http://d.hatena.ne.jp/keyword/WordPress">WordPress</a>インストール等を一気にやろうとすると、ポート設定タスク実行後に接続が切れてしまうので、playbookを分けました。</p> <p>ファイル構造はこのようになっています。</p> <pre class="code" data-lang="" data-unlink> $ tree ./setup ./setup ├── group_vars │   └── all ├── hosts ├── roles │   └── setup │   ├── files │   │   ├── authorized_keys_for_admin │   │   └── authorized_keys_for_fujimaki │   ├── handlers │   │   └── main.yml │   ├── tasks │   │   └── main.yml │   └── templates │   └── iptables └── site.yml </pre> <p>環境に依存するファイルは<a class="keyword" href="http://d.hatena.ne.jp/keyword/github">github</a>では.exampleをつけていますが、使用時は外してよしなに設定してください。</p> <p>ベストプラクティスに沿うとすればrolesが</p> <ul> <li>common</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/sshd">sshd</a></li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/iptables">iptables</a></li> </ul> <p>みたいになるところを、setup roleにまとめているという感じです。</p> <p>taskはこちら。 <a href="https://github.com/sfujimaki/ansible-playbooks/blob/master/setup/roles/setup/tasks/main.yml">https://github.com/sfujimaki/ansible-playbooks/blob/master/setup/roles/setup/tasks/main.yml</a></p> <script src="http://gist-it.appspot.com/github/sfujimaki/ansible-playbooks/blob/master/setup/roles/setup/tasks/main.yml"></script> <p>hostsは</p> <script src="http://gist-it.appspot.com/github/sfujimaki/ansible-playbooks/blob/master/setup/hosts"></script> <p> と設定して以下のようにコマンドを実行します。 <code> $ ansible-playbook -i setup/hosts setup/site.yml -u root --private-key=~/.ssh/kagoya_vps_key_01.key (~/.ssh/kagoya_vps_key_01.keyはサーバーに登録した秘密鍵のパス) </code> 検証したのはカ<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B4%A5%E4">ゴヤ</a><a class="keyword" href="http://d.hatena.ne.jp/keyword/VPS">VPS</a>だけですが、以下のように実行すれば ユーザーが追加され、<a class="keyword" href="http://d.hatena.ne.jp/keyword/ssh">ssh</a>もできるようになり、10022ポートだけが開かれた環境ができるはずです。(どのポートを開くかはgroup_vars/all で定義)</p> <h3><a class="keyword" href="http://d.hatena.ne.jp/keyword/wordpress">wordpress</a>-nginx</h3> <p> 続いては、<a class="keyword" href="http://d.hatena.ne.jp/keyword/WordPress">WordPress</a>が動く環境を作るplaybookです。</p> <ul> <li>nginx</li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/MySQL">MySQL</a></li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/PHP">PHP</a></li> <li><a class="keyword" href="http://d.hatena.ne.jp/keyword/WordPress">WordPress</a> をインストールし、</li> </ul> <p>こちらのファイル構成はこんな感じです。</p> <pre class="code" data-lang="" data-unlink> $ tree ./wordpress-nginx ./wordpress-nginx ├── group_vars │   └── all ├── hosts ├── roles │   └── wordpress-nginx │   ├── handlers │   │   └── main.yml │   ├── tasks │   │   └── main.yml │   └── templates │   ├── my.cnf │   ├── nginx-wordpress.conf │   ├── php-fpm-wordpress.conf │   └── wp-config.php └── site.yml </pre> <p><a href="https://github.com/ansible/ansible-examples/tree/master/wordpress-nginx/roles">サンプル</a>と比べるとだいぶシンプルになったんじゃないでしょうか。(その後の管理を考えるとrole分けるのが理想ですが)</p> <p>こちらでもtaskを貼っておきます。 <a href="https://github.com/sfujimaki/ansible-playbooks/blob/master/wordpress-nginx/roles/wordpress-nginx/tasks/main.yml">https://github.com/sfujimaki/ansible-playbooks/blob/master/wordpress-nginx/roles/wordpress-nginx/tasks/main.yml</a></p> <script src="http://gist-it.appspot.com/github/sfujimaki/ansible-playbooks/blob/master/wordpress-nginx/roles/wordpress-nginx/tasks/main.yml"></script> <p>Ansibleの<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%EA%A5%DD%A5%B8%A5%C8%A5%EA">リポジトリ</a>にあるコードだと、<a class="keyword" href="http://d.hatena.ne.jp/keyword/SELinux">SELinux</a> が有効でないとエラーになってしまうので、こちらにあるコードを足しています。 <a href="http://akiyoko.hatenablog.jp/entry/2014/06/05/221618">Ansibleで WordPress日本語版(3.9.1) を楽々インストール - akiyoko blog</a></p> <p>hostsは以下のようにsetupで設定したものに開放ポートを追記した上で、</p> <script src="http://gist-it.appspot.com/github/sfujimaki/ansible-playbooks/blob/master/wordpress-nginx/hosts"></script> <p>以下のコマンドを実行します。</p> <pre class="code" data-lang="" data-unlink>$ ansible-playbook -i wordpress-nginx/hosts wordpress-nginx/site.yml</pre> <p>これで<a class="keyword" href="http://d.hatena.ne.jp/keyword/WordPress">WordPress</a>が動く状態になるはずです。</p> <h2><a class="keyword" href="http://d.hatena.ne.jp/keyword/WordPress">WordPress</a>設定</h2> <p>最後に、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8">ディレクト</a>リを変更します。 <a href="http://example.com/wp">http://example.com/wp</a> にアクセスして管理画面にログインし、設定 → 一般 で 「サイトアドレス」から &ldquo;/wp&rdquo; を消し、「変更を保存」を押すと完成です!</p> <h2>まとめ</h2> <p>途中から面倒臭くなって説明不足な感が否めませんがお許しください笑</p> <p>簡単にできると思ってたら、ちょっと設定を変えたりしたせいで地味に面倒でした&hellip; ベストプラクティスに沿ってしっかり構築するのも良いですが、ファイルが多くなって最初はとっつきにくいので1ファイルにまとめて見るのも良いんじゃないでしょうか。</p> <p>ここまで書いといてという感じではありますが、1環境に対して1アプリケーションもしくは1アプリケーションを複数サーバーに置くという運用なら便利ではあるものの、個人の半分実験用途のサーバーならわざわざ面倒な構成管理をしなくてもいいのかなーと思いました笑</p> <p>手順書のコード化という意味では有用だと思うので、手動で環境構築した上で、Ansibleにコードとして残すという使い方が良いかもしれません。</p> <h2>參考にしたページ</h2> <ul> <li><a href="https://wpdocs.osdn.jp/WordPress_%E3%82%92%E5%B0%82%E7%94%A8%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%81%AB%E9%85%8D%E7%BD%AE%E3%81%99%E3%82%8B">WordPress を専用ディレクトリに配置する - WordPress Codex 日本語版</a></li> <li><a href="http://knowledge.sakura.ad.jp/tech/3084/">実践!Ansibleベストプラクティス(前編)</a></li> <li><a href="http://knowledge.sakura.ad.jp/tech/3086/">実践!Ansibleベストプラクティス(後編)</a></li> <li><a href="http://cflat-inc.hatenablog.com/entry/2014/09/01/074500">Ansibleで自社Wordpressを移行を自動化</a></li> <li><a href="http://akiyoko.hatenablog.jp/entry/2014/05/31/204914">Ansible で CentOS 6.5 に WordPress + Nginx + PHP-FPM 環境をさくっと構築(Vagrantバージョン &amp; さくらのVPSバージョン)</a></li> <li><a href="http://akiyoko.hatenablog.jp/entry/2013/12/16/020529">Ansible でさくらのVPS の環境構築を自動化 ~ハマりポイントとともに~</a></li> <li><a href="http://akiyoko.hatenablog.jp/entry/2014/06/05/221618">Ansibleで WordPress日本語版(3.9.1) を楽々インストール</a></li> <li><a href="http://qiita.com/vectorxenon/items/5609f7a23abbafa4ea08">AnsibleをBest Practicesのディレクトリ構成にする</a></li> <li><a href="http://sechiro.hatenablog.com/entry/2015/01/06/Ansible%E3%82%92%E4%BD%BF%E3%81%84%E5%87%BA%E3%81%99%E5%89%8D%E3%81%AB%E6%8A%BC%E3%81%95%E3%81%88%E3%81%A6%E3%81%8A%E3%81%8D%E3%81%9F%E3%81%8B%E3%81%A3%E3%81%9F%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF">Ansibleを使い出す前に押さえておきたかったディレクトリ構成のベストプラクティス</a></li> <li><a href="https://github.com/akiyoko/ansible-examples/tree/master/wordpress-nginx">https://github.com/akiyoko/ansible-examples/tree/master/wordpress-nginx</a></li> <li><a href="http://developer-blog.finc.co.jp/post/130599782822/ansible%E3%81%A7%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E6%A7%8B%E6%88%90%E7%AE%A1%E7%90%86">ansibleでサーバー構成管理 | FiNC Developers Blog</a></li> <li><a href="http://liginc.co.jp/web/programming/server/129004">Ansible初心者がLAMP環境の構築を自動化する方法</a></li> <li><a href="https://www.conoha.jp/conoben/archives/4031">構成管理ツールAnsibleを使ってみよう</a></li> <li><a href="http://liapoc.com/firewall.html">KAGOYA VPSでLAMP構築。Apacheサーバーインストール・ファイヤーウォールの設定まで。</a></li> </ul> sfjmk ソーシャル上での記事拡散を一覧できるWEBサービス「Buzzmeter」を作りました hatenablog://entry/12921228815713820554 2013-12-05T22:25:09+09:00 2014-04-07T20:42:33+09:00 前回の更新がだいぶ時間がたってしまいました。。。 BuzzmeterというWEBサービスを作ったので、それについて書きたいと思います! Buzzmeterは 登録したWEBページ、フィードの「いいね!数・ツイート数・はてブ数」を一覧することができるWEBアプリケーションです。 http://buzzmeter.org/ つくろうと思った理由 ブログやまとめ等に記事を投稿したとき、いつもその後のソーシャル上の反応に気が散ってしまっていました。 それらを一覧できるものがあるなといいなーっとなんとなく思っていたのですが、WEB上で動くものならそこそこ簡単に作れそうだったので、作ってみました。 できる… <p>前回の更新がだいぶ時間がたってしまいました。。。</p> <p>Buzzmeterという<a class="keyword" href="http://d.hatena.ne.jp/keyword/WEB%A5%B5%A1%BC%A5%D3%A5%B9">WEBサービス</a>を作ったので、それについて書きたいと思います!</p> <p>Buzzmeterは 登録したWEBページ、フィードの「いいね!数・ツイート数・<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A4%CF%A4%C6%A5%D6">はてブ</a>数」を一覧することができるWEBアプリケーションです。</p> <p> </p> <p><a href="http://buzzmeter.org/" target="_blank">http://buzzmeter.org/</a></p> <p><img class="hatena-fotolife" title="f:id:sfjmk:20131205215829p:plain" src="http://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20131205/20131205215829.png" alt="f:id:sfjmk:20131205215829p:plain" /></p> <h4>つくろうと思った理由</h4> <p>ブログやまとめ等に記事を投稿したとき、いつもその後のソーシャル上の反応に気が散ってしまっていました。</p> <p>それらを一覧できるものがあるなといいなーっとなんとなく思っていたのですが、WEB上で動くものならそこそこ簡単に作れそうだったので、作ってみました。</p> <p> </p> <h4>できること</h4> <p>・メールアドレス or <a class="keyword" href="http://d.hatena.ne.jp/keyword/Facebook">Facebook</a>でログイン</p> <p>・ページの登録</p> <p>・フィードの登録</p> <p>(もし上手くいかなかったら手動で入力して下さい)</p> <p>・削除</p> <p>・並び替え</p> <p>...</p> <p>詳しくはページに飛んでみて下さい!</p> <p><a href="http://buzzmeter.org/" target="_blank">http://buzzmeter.org/</a></p> <p> </p> <p>機能はかなりシンプル&amp;かなりニッチなアプリですが、記事を書く人にとっては結構便利なんじゃないかなと思っています!</p> <p>こんな機能あったらもっと便利だなーとか色々考えてるのですが、その辺は使って下さる方がもし増えたら考えたいと思います。気合入れるために無駄に<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C6%C8%BC%AB%A5%C9%A5%E1%A5%A4%A5%F3">独自ドメイン</a>もとったので、是非使って下さい!!w</p> <p> </p> <p>そしてこういったものを0から全部自分で作ってリリースしたのですが、やることの多さに結構びっくりしました。とにかく最後の詰めが結構辛い・・・ まだ結構雑な部分があるのですが、その辺はぼちぼち直していければなと思っています。</p> <p> </p> <p>他にも3つくらい<a class="keyword" href="http://d.hatena.ne.jp/keyword/WEB%A5%B5%A1%BC%A5%D3%A5%B9">WEBサービス</a>を開発をしているのですが(今度はもう少し対象が広めなやつですw)どれも中途半端な状態なので、"Done is better than perfect."を肝に命じて(最低限のクオリティも大事ですが) できれば年内に出したいと思っているので、心温かく見守って下さい!</p> <p> </p> <p>追記:ブログにも取り上げていただきました。ありがとうございます!</p> <p><span style="font-size: 13px; line-height: normal; font-family: 'Hiragino Kaku Gothic Pro'; color: #042eee;"><span style="text-decoration: underline;"><a href="http://ringobito.com/blog/buzzmeter/">http://ringobito.com/blog/buzzmeter/</a></span></span><br /> <span style="font-size: 13px; line-height: normal; font-family: 'Hiragino Kaku Gothic Pro'; color: #042eee;"><span style="text-decoration: underline;"><a href="http://www.nnmal.com/2013/12/buzzmeter/">http://www.nnmal.com/2013/12/buzzmeter/</a></span></span><br /> <span style="font-size: 13px; line-height: normal; font-family: 'Hiragino Kaku Gothic Pro'; color: #042eee;"><span style="text-decoration: underline;"><a href="http://princesswell.rocketserver.jp/webservices/buzzmeter/">http://princesswell.rocketserver.jp/webservices/buzzmeter/</a></span></span><br /> <span style="font-size: 13px; line-height: normal; font-family: 'Hiragino Kaku Gothic Pro'; color: #042eee;"><span style="text-decoration: underline;"><a href="http://www.danshihack.com/2013/12/06/junp/webservice_buzzmeter.html">http://www.danshihack.com/2013/12/06/junp/webservice_buzzmeter.html</a></span></span></p> <p> </p> <p> </p> sfjmk ブログを始めてすぐにホッテントリ入りして感じた10のこと hatenablog://entry/11696248318758325314 2013-10-02T13:01:17+09:00 2013-10-04T03:41:49+09:00 9月20日にブログを開設して2週間。 まともに書いた記事は2つだけなのですが、昨日書いた記事が運良くホッテントリ&おすすめブログ入りすることができたので、個人的に「ブログ開設した当初こんなことが知りたかった!」と思うこととかをざくっと書いていきます。 (あくまで僕が感じたことなので、正しいかどうかは保証できません&釣り気味のタイトルすみません・・・笑) ※タイトルを思いっきりタイポしてることに気づいたので修正しました。 ×初めて→○始めて ですね。すみません。 1.無名ブログ・無名著者でもホッテントリ入りするチャンスはある →正直記事がそこそこバズるようになるには、記事を沢山書いてブログ自体が… <p> </p> <p><img class="hatena-fotolife" title="f:id:sfjmk:20131002130007p:plain" src="http://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20131002/20131002130007.png" alt="f:id:sfjmk:20131002130007p:plain" /></p> <p> </p> <p>9月20日にブログを開設して2週間。</p> <p>まともに書いた記事は2つだけなのですが、<a href="http://fjmk.hatenablog.com/entry/2013/10/01/215856">昨日書いた記事</a>が運良く<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DB%A5%C3%A5%C6%A5%F3%A5%C8%A5%EA">ホッテントリ</a>&おすすめブログ入りすることができたので、個人的に「ブログ開設した当初こんなことが知りたかった!」と思うこととかをざくっと書いていきます。</p> <p>(あくまで僕が感じたことなので、正しいかどうかは保証できません&釣り気味のタイトルすみません・・・笑)</p> <p> </p> <p>※タイトルを思いっきりタイポしてることに気づいたので修正しました。</p> <p>×初めて→○始めて</p> <p>ですね。すみません。</p> <p> </p> <h4>1.無名ブログ・無名著者でも<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DB%A5%C3%A5%C6%A5%F3%A5%C8%A5%EA">ホッテントリ</a>入りするチャンスはある</h4> <p>→正直記事がそこそこバズるようになるには、記事を沢山書いてブログ自体が有名になる必要がまずあると思っていました。</p> <p>僕の場合今回の記事を書くまでは5記事しかストックがなく、しかもメモを貼り付けたようなものばかりでした。</p> <p>それでも一応<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DB%A5%C3%A5%C6%A5%F3%A5%C8%A5%EA">ホッテントリ</a>入りすることができたので、ブログや著者自体の知名度等は関係ないことがわかりました。だから記事の出し惜しみはやめましょう!笑</p> <p> </p> <h4>2.主張を入れるのが大事</h4> <p>→実はYlvisについては<a class="keyword" href="http://d.hatena.ne.jp/keyword/Naver">Naver</a>まとめを一番乗りで書いていたのですが、事実を羅列しただけだったのでその時は全然拡散しませんでした。</p> <p>Ylvisの良さについて一度言語化して考えてみたいと思っていたので、今回は自分が思っていることも加えてみました。</p> <p>主張を入れることが必ずしも大事なことかは分かりませんが、今回は主張を入れたおかげでこのような結果が得られたと思っています。</p> <p> </p> <h4>3.ウケるタイトルにセオリーはない?</h4> <p>→多分「ブログのタイトルは○文字以内にしろ!」みたいなセオリーはあると思うのですが、めんどくさかったので思ったことをそのまま書いちゃいました笑</p> <p>タイトルは内容が推測しやすかったり興味がわきそうなものであれば何でもいいんじゃないかなと思います。</p> <p> </p> <h4>4.細かいことは考えずにとりあえず書いてすぐに公開するのが大事</h4> <p>→これまで色々と悩んで結局記事を書けなかったようなタイプだったのですが、今回は一気に書き上げてまったく推敲せずに出しました。勢って大事ですね笑</p> <p>ブログの書き方のコツみたいなエントリーは沢山ありますが、色々考えてると書けなくなってしまうので考えないほうがいいと思います!</p> <p> </p> <h4>5.編集にはメモ帳が便利</h4> <p>僕はMacなのでCotEditorを使っていますが、ブラウザ上の編集画面だと動作が重くてイライラしてしまうので、メモ帳のような軽いエディタを使って快適に記事を書きましょう!笑</p> <p> </p> <h4>6.<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%A2%A5%AF%A5%BB%A5%B9%B2%F2%C0%CF">アクセス解析</a>に気が散る</h4> <p>→<a class="keyword" href="http://d.hatena.ne.jp/keyword/Google%20Analytics">Google Analytics</a>のリアルタイム解析を見るのが面白くてなかなか他のことに集中できません。</p> <p>常に数十人が自分の文章を見てくれてるというのはなかなか面白い体験です。</p> <p>アクセス数が気にならないほど安定して良い記事を出せるようになりたい・・・</p> <p> </p> <h4>7.はてな新着エントリーからの流入が嬉しい</h4> <p>→これは<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A4%CF%A4%C6%A4%CA%A5%D6%A5%ED%A5%B0">はてなブログ</a>ならではですね! 少し話題になり出すとはてな側から一気に流入してくれて助かりました。面白い記事を書けばそれだけ多くの人がみてくれる素晴らしい仕組みだと思います!</p> <p> </p> <h4>8.コメントがつくと嬉しい</h4> <p>→色々な意見がありますが、お会いしたことのない方が自分の書いた文章に対してフィードバックを下さるのは大きなモチベーションになります。</p> <p> </p> <h4>9.<a class="keyword" href="http://d.hatena.ne.jp/keyword/Twitter">Twitter</a>と<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A4%CF%A4%C6%A5%D6">はてブ</a>では反応が大きかったが<a class="keyword" href="http://d.hatena.ne.jp/keyword/Facebook">Facebook</a>では全然反応がない</h4> <p>→扱うトピックが少し狭かったからでしょうか? ソーシャルボタンを見ても<a class="keyword" href="http://d.hatena.ne.jp/keyword/Facebook">Facebook</a>の反応数だけ少なく、自分の友人にもあまり話題にしてもらえませんでした笑 <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A4%CF%A4%C6%A5%D6">はてブ</a>を狙いたいなら<a class="keyword" href="http://d.hatena.ne.jp/keyword/Facebook">Facebook</a>を切り捨てることも大事かもしれませんw</p> <p> </p> <h4>10.自分自身の影響力は特に上がらない</h4> <p>→「<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DB%A5%C3%A5%C6%A5%F3%A5%C8%A5%EA">ホッテントリ</a>入りしたらフォロワー増えるんじゃ!?」と思っていた時期も有りましたが、読者数・フォロワー数とも超微増でした(数人レベル)。</p> <p>読者登録・フォローしてくださった方ありがとうございます!みなさんも是非!笑</p> <p> </p> <p>開設当初、この辺りのことが分からなすぎて戸惑ったので、 少しでも参考になれば嬉しいです。</p> <p>まあ、友人の大多数は「<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DB%A5%C3%A5%C6%A5%F3%A5%C8%A5%EA">ホッテントリ</a>って何?」って感じなんですけどね笑</p> <p>これからもコンスタントに記事を書いていきたいと思うので、これからもよろしくお願いします!</p> sfjmk Ylvisというノルウェー発ユニットの新曲「The Fox」がYouTubeで爆発的ヒットをしているのを見て、世界的ヒット曲を生むには非言語性が大事なのかなと思った話。 hatenablog://entry/11696248318758309977 2013-10-01T21:58:56+09:00 2013-10-04T01:52:25+09:00 日本ではまだあまり話題になっていませんが、最近世界で爆発的にヒットしている曲があります。 まずは観てみて下さい。 0:40以に注目です。 Ylvis - The Fox ( What does the Fox say?) [Official ... 観てお分かりのように、色んな動物とその鳴き声を挙げた上で「キツネはなんて鳴くんだろう?」という疑問をただ叫び続ける何の意味もないヒドイ歌(褒め言葉)です笑 美しいAメロBメロのメロディーとサビのギャップが面白いです。 ノルウェーのYlvisという、本業がお笑いの兄弟ユニットが今年の9月3日にYouTubeで公開した「The Fox」という曲なのです… <p><img class="hatena-fotolife" title="f:id:sfjmk:20131001220744p:plain" src="http://cdn-ak.f.st-hatena.com/images/fotolife/s/sfjmk/20131001/20131001220744.png" alt="f:id:sfjmk:20131001220744p:plain" /></p> <p> </p> <p>日本ではまだあまり話題になっていませんが、最近世界で爆発的にヒットしている曲があります。</p> <p>まずは観てみて下さい。</p> <p>0:40以に注目です。</p> <p><iframe src="https://youtube.googleapis.com/v/jofNR_WkoCE&amp;source=uds" frameborder="0" width="420" height="315"></iframe><br /><a href="http://www.youtube.com/watch?v=jofNR_WkoCE">Ylvis - The Fox ( What does the Fox say?) [Official ...</a></p> <p> </p> <p>観てお分かりのように、色んな動物とその鳴き声を挙げた上で「キツネはなんて鳴くんだろう?」という疑問をただ叫び続ける何の意味もないヒドイ歌(褒め言葉)です笑  </p> <p>美しいAメロBメロのメロディーとサビのギャップが面白いです。</p> <p> </p> <p>ノルウェーのYlvisという、本業がお笑いの兄弟ユニットが今年の9月3日に<a class="keyword" href="http://d.hatena.ne.jp/keyword/YouTube">YouTube</a>で公開した「The Fox」という曲なのですが、なんと公開から1ヶ月経っていないにもかかわらず7324万回も再生されています。(10月1日現在)</p> <p>あれだけ凄いと言われていた江南スタイルが1億回再生されるにも2ヶ月かかったので、それを上回りそうな勢いです。</p> <p> </p> <p>プロデュースは、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%D3%A5%E8%A5%F3%A5%BB">ビヨンセ</a>、リアーナ、Ne-Yo、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B7%A5%E3%A5%AD%A1%BC%A5%E9">シャキーラ</a>など名だたるアーティストを手がけたStargate。</p> <p>色々と考えを練った上でこの曲を作り結果としてヒットしたと思うのですが、非言語的な曲であるということが大事なんじゃないかなーと思いました。</p> <p> </p> <p>そこで、最近どんな曲がヒットしてるのかなと思い、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Youtube">Youtube</a>再生数<a class="keyword" href="http://d.hatena.ne.jp/keyword/%C0%A4%B3%A6%A5%E9%A5%F3%A5%AD%A5%F3%A5%B0">世界ランキング</a>をみてみました。</p> <p>( <a href="http://www.youtube.com/charts/videos_views?t=a&amp;gl=US">http://www.youtube.com/charts/videos_views?t=a&amp;gl=US</a> )</p> <p> </p> <p>上位5位をみてみると、、、</p> <p> </p> <p>1位・・・PSY - GANGNAM STYLE (1,781,163,382 回再生)</p> <p><a href="http://www.youtube.com/watch?v=9bZkp7q19f0">http://www.youtube.com/watch?v=9bZkp7q19f0</a></p> <p>2位・・・Justin Bieber - Baby ft. <a class="keyword" href="http://d.hatena.ne.jp/keyword/Ludacris">Ludacris</a> (904,503,128 回再生)</p> <p><a href="http://www.youtube.com/watch?v=kffacxfA7G4">http://www.youtube.com/watch?v=kffacxfA7G4</a></p> <p>3位・・・<a class="keyword" href="http://d.hatena.ne.jp/keyword/Jennifer%20Lopez">Jennifer Lopez</a> - On The Floor ft. Pitbull (694,246,042 回再生) </p> <p><a href="http://www.youtube.com/watch?v=t4H_Zoh7G5A">http://www.youtube.com/watch?v=t4H_Zoh7G5A</a></p> <p>4位・・・<a class="keyword" href="http://d.hatena.ne.jp/keyword/Eminem">Eminem</a> - Love The Way You Lie ft. Rihanna (600,813,778 回再生)</p> <p><a href="http://www.youtube.com/watch?v=uelHwf8o7_U">http://www.youtube.com/watch?v=uelHwf8o7_U</a></p> <p>5位・・・ LMFAO - <a class="keyword" href="http://d.hatena.ne.jp/keyword/Party%20Rock%20Anthem">Party Rock Anthem</a> ft. Lauren Bennett, GoonRock</p> <p><a href="http://www.youtube.com/watch?v=KQ6zr6kCPj8">http://www.youtube.com/watch?v=KQ6zr6kCPj8</a></p> <p> </p> <p><a class="keyword" href="http://d.hatena.ne.jp/keyword/Eminem">Eminem</a>のLove The Way You Lie ft. Rihanna以外の4曲にはある共通点があります。</p> <p>それは、</p> <p><strong>サビに意味がない!</strong></p> <p> </p> <p>サビ(というか一番盛り上がる部分)をみてみましょう</p> <p> </p> <p>・PSY - GANGNAM STYLE・・・歌詞なし (特徴的な踊り)</p> <p>・Justin Bieber - Baby ft. <a class="keyword" href="http://d.hatena.ne.jp/keyword/Ludacris">Ludacris</a>・・・ "Baby, baby, baby oooooh,like"</p> <p>・<a class="keyword" href="http://d.hatena.ne.jp/keyword/Jennifer%20Lopez">Jennifer Lopez</a> - On The Floor ft. Pitbull  ・・・ "Lalalalalalalalalalalalalala"</p> <p>・LMFAO - <a class="keyword" href="http://d.hatena.ne.jp/keyword/Party%20Rock%20Anthem">Party Rock Anthem</a> ft. Lauren Bennett, GoonRock・・・歌詞なし(特徴的な踊り)</p> <p> </p> <p>その下のランキングをみても同じように、意味が無かったり分かりやすい発音の言葉のものが多いです。</p> <p>最近話題になったHarlem Shakeも言葉が全く関係ないですよね。</p> <p> </p> <p>今回のYlvisも、この法則に当てはまります。</p> <p>(個人的にはキツネの鳴き声が覚えづらいので統一したほうがよかったんじゃないかなと...)</p> <p> </p> <p>インターネット業界では最近の日本発の世界的ヒットアプリの共通点は無言語性というのがトレンドです。(ex. 写真アプリ・着せ替えアプリ)</p> <p> </p> <p>元気がないと言われている日本の音楽業界ですが、日本発の世界的ヒット曲を出すには、</p> <p> </p> <p>・意味のない且つ覚えやすいサビ</p> <p>・もしくは思い切って歌詞のないサビ</p> <p>・特徴的且つ覚えやすいダンス</p> <p> </p> <p>こういった非言語的な曲を意識して作り続けるべきなんじゃないかと思いました。</p> <p>動画自体は無料で公開するというのも大事かもしれません。</p> <p> </p> <p>勿論、歌詞自体を楽しむという音楽の聴き方もあるとは思います。</p> <p>ただ自分も作曲やバンド活動をしていましたが、本来の音楽の形は「楽しければいい!」ものだと思うので、こういった盛り上がれる曲が増えるのは良いことなんじゃないかなと思っています。</p> <p> </p> <p>日本の歌謡曲は世界でも全然通用するレベルの高い音楽性を持っていると思うので、非言語性をキーワードにもっと世界に羽ばたいて欲しいです!</p> <p> </p> <p>なんか、最近ヒットしてる<a class="keyword" href="http://d.hatena.ne.jp/keyword/YouTube">YouTube</a>の曲を紹介するだけのつもりが壮大な感じになってしまった・・・笑</p> <p> </p> <p>※<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A4%E2%A4%E2%A5%AF%A5%ED">ももクロ</a>はこれらの条件を満たしていると思うので是非世界中でヒットして欲しいです!!</p> <p> </p> <p>追記1:葉っぱ隊のYATTA!が海外で流行っていると一時期話題になっていましたが、これも非言語的な曲ですよね! <a class="keyword" href="http://d.hatena.ne.jp/keyword/%A4%A2%A4%E4%A4%DE%A4%F3JAPAN">あやまんJAPAN</a>も例のポイポイの曲なら実は世界を狙えるポテンシャルを秘めてると思ってます。</p> <p> </p> <p>追記2:<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A4%CF%A4%C6%A5%D6">はてブ</a>コメントにて、「<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A4%AD%A4%E3%A4%EA%A1%BC%A4%D1%A4%DF%A4%E5%A4%D1%A4%DF%A4%E5">きゃりーぱみゅぱみゅ</a>は?」との指摘を数件頂いていますが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A4%AD%A4%E3%A4%EA%A1%BC%A4%D1%A4%DF%A4%E5%A4%D1%A4%DF%A4%E5">きゃりーぱみゅぱみゅ</a>は海外でもそこそこウケてるようなので敢えて言及しませんでした。しかし大ヒットしてるとは言い難いと思うので、世界中でもっとヒットして欲しいです!</p> <p> </p> <p>追記3:<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%DB%A5%C3%A5%C6%A5%F3%A5%C8%A5%EA">ホッテントリ</a>入りしてびっくりしたので、こんな記事をかいてみました。</p> <p>よかったらこちらも読んで頂けると嬉しいです。</p> <p> </p> <p><a href="http://fjmk.hatenablog.com/entry/2013/10/02/130117">ブログを初めてすぐにホッテントリ入りして感じた10のこと</a></p> sfjmk