tag:blogger.com,1999:blog-25925816397148849382024-03-13T11:46:48.826+09:00Review of My LifeUnknownnoreply@blogger.comBlogger324125tag:blogger.com,1999:blog-2592581639714884938.post-69797714081333290172021-01-20T10:40:00.000+09:002021-01-20T10:40:00.974+09:00Twitter APIのはまりどころ<p> PythonのTweepyを利用して、Twitter APIを利用している。</p><p>その中で、ハマったポイントをメモしておく。</p><p>まず、Searchに関して。</p><p>Twitter検索は、クライアントアプリ側では、全期間の検索が可能になっている。</p><p>一方で、APIを利用する際は、過去1週間しか閲覧することができない。</p><p>全期間を利用する場合は、Twitter Premium Search APIを利用しないといけない。</p><p>次に、Twitter Search APIでOperatorを利用する時の条件。</p><p>Operator、例えば(牛丼 OR 鶏そぼろ)みたいな条件で検索することが、API経由だとできない可能性がある。</p><p><a href="https://developer.twitter.com/en/docs/twitter-api/v1/rules-and-filtering/search-operators">Rules and filtering: Standard v1.1</a></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHIaPq-ehqQU6SIgUniC_Sj8JiY_TJzmgbqYYZC0ku2NpT6o4r8RP8gl0pd3AJ-IBwwvQyfs06KDC-o8bopUMMdtA70OOMZYC-zRkYJe7wWymfB5AXT-g3rBYUdSn3wtBQQV9WjIATH2o/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1041" data-original-width="2048" height="163" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHIaPq-ehqQU6SIgUniC_Sj8JiY_TJzmgbqYYZC0ku2NpT6o4r8RP8gl0pd3AJ-IBwwvQyfs06KDC-o8bopUMMdtA70OOMZYC-zRkYJe7wWymfB5AXT-g3rBYUdSn3wtBQQV9WjIATH2o/" width="320" /></a></div><br /><br /><p></p>Unknownnoreply@blogger.comtag:blogger.com,1999:blog-2592581639714884938.post-24703169937291489852021-01-15T14:18:00.003+09:002021-01-15T14:18:52.953+09:00FirebaseのタイムスタンプをPythonで無理やり実装する<p>多分こんな感じになる。</p><div style="background-color: #1e1e1e; color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; line-height: 18px; white-space: pre;"><div><span style="color: #c586c0;">import</span> datetime</div><br /><div>now = datetime.datetime.now()</div><div>year = <span style="color: #4ec9b0;">str</span>(now.year)</div><div>month = <span style="color: #ce9178;">"</span><span style="color: #569cd6;">{:02d}</span><span style="color: #ce9178;">"</span>.format(now.month)</div><div>day = <span style="color: #4ec9b0;">str</span>(now.day)</div><div>hour = <span style="color: #4ec9b0;">str</span>(now.hour)</div><div>minute = <span style="color: #4ec9b0;">str</span>(now.minute)</div><div>timestamp = year + month + day + hour + minute</div><div><span style="color: #dcdcaa;">print</span>(timestamp)</div><br /></div><p>結果</p><div style="background-color: #1e1e1e; color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; line-height: 18px; white-space: pre;"><div><span style="color: #f44747;">$</span> python3 timestamp.py</div><div><span style="color: #b5cea8;">202101151418</span></div></div>Unknownnoreply@blogger.comtag:blogger.com,1999:blog-2592581639714884938.post-24259816582430924322019-01-15T11:38:00.001+09:002019-01-16T08:23:13.984+09:00CubaseでやりたいこととかまとめてみたDTMを始めたくなった。<br />
<br />
<h4>
やりたいこと</h4>
・Zedd, 中田ヤスタカあたりのヘビーなEDMサウンドを作れるようになりたい。<br />
・Bonobos, Bathsのような、ちょっとおしゃれな感じのサウンドも作れるようになりたい<br />
<br />
<b>自分のレベル</b><br />
<br />
・作曲は、過去にバンドをやっていて(ギター、ドラム、ピアノは全部行けます)、オリジナル作ったり、簡単な打ち込みはAbleton Liveで過去に試したことがあるレベル。なのでなんとなくは理解できている<br />
・過去やってたバンド <a href="https://untitled-japan.bandcamp.com/track/yoakemae">Untitled yoakemae</a><br />
・個人で<a href="https://www.youtube.com/watch?v=ilUaZgZVLZM">過去に作った曲</a>。打ち込みではないけど、Audioから音取り入れてオリジナル作ったりしたことはある<br />
<div>
<br /></div>
<br />
<b>課題感</b><br />
<br />
・やりたいことをやるために、どういうプラグインや機材を変えばいいのかわからない<br />
・systh1とかmassiveとか購入しようかと検討しているが、そもそもcubase AIでやっているのは正しいのか。もっとプラグインがあるバージョンを購入したほうがいいのか。<br />
<br />
<br />
<b>持っている機材</b><br />
<br />
・UR12(オーディオインターフェイス)<br />
・Cubase AI (UR12についてきた)<br />
・Acoustic Guitar<br />
・Mic<br />
<br />
<br />
<b>*******************************</b><br />
以下調べたこと<br />
<b>*******************************</b><br />
<h4>
音の強弱</h4>
<div>
<br /></div>
<div>
・ベロシティというらしい</div>
<div>
・鉛筆マークから、ベロシティをクリックしてあげればよい</div>
<div>
<br /></div>
<div>
<a href="https://dtmmethod.com/cubase%E3%81%A7%E9%9F%B3%E3%81%AE%E5%BC%B7%E3%81%95%EF%BC%88%E3%83%99%E3%83%AD%E3%82%B7%E3%83%86%E3%82%A3%EF%BC%89%E3%82%92%E8%AA%BF%E6%95%B4%E3%81%97%E3%82%88%E3%81%86">> Cubaseで音の強さ(ベロシティ)を調整しよう</a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<b>部分ループ再生</b></div>
<div>
<br />
・編集するときに、ループしたいときはどうするかという話<br />
・</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<b>スペースで再生・停止を押せるようにする方法</b></div>
<div>
<br /></div>
<div>
<b>クリックしても音が出ない問題</b></div>
<div>
<br /></div>
<div>
<b>アコースティックオーディオの編集はどうすればいい?</b></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
Audioの音量を上げるにはどうすればいい?</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<b>プリカウントの入れ方</b></div>
<div>
<br /></div>
<div>
<a href="https://satcreative.hatenablog.com/entry/2016/12/15/234124">【Cubase9】録音開始前にカウントを入れるプリカウントの設定</a></div>
<div>
<br /></div>
<div>
<b>拍数を短くする、8連ぷとかできるようにする</b></div>
<div>
<br /></div>
<div>
<b>ギターにリバーブをいれる </b><br />
<br />
<br />
ドラム<br />
<br />
<blockquote class="tr_bq">
1)電子ドラム<br />
生ドラムではなく電子ドラムを使います。<br />
一般的には「TR-808」「TR-909」というメジャーなキットが定番であり、HALion Sonicにも「T8」「T9」という名前が入っているプリセットがそれです。<br />
またGroove Agentの、Dub(「ダブステップ」のダブですね)とかDanceとかElektroとかの系統のものもEDM向きです。<br />
「かえるのうた」では<b>Dubstep Kit01</b>を使いました。<br />
もっと凝るなら、後述のオーディオ素材を駆使して独自セットを作ることもできますが、ベーシックなものならプリセットでも十分かと思います。</blockquote>
<br />
<b>シンセ</b><br />
<br />
<blockquote class="tr_bq">
2)シンセ<br />
ベース、コード楽器、メロディ楽器などありますが、全部Retrologueでいけます。<br />
(Cubase標準にはPrologueもあるが、シンセ初心者にはRetrologueのほうが入りやすいと思います。まあこの辺は単に好みかもしれませんが。)</blockquote>
<br />
-> Cubase AIには入ってなかった。<br />
<br />
<br />
<b>Native Instruments(NIプラグイン)</b><br />
<br />
<blockquote class="tr_bq">
Cubaseにおいて、Native InstrumentsソフトウェアはVSTプラグインインターフェースを経由して使用するものとなります。CubaseでNIプラグインを使用するには、NIプラグインが格納されているフォルダをCubaseにスキャンさせる必要があります。この記事ではMacとWindows、両方のシステムでこれを行う方法をご説明します。</blockquote>
<br />
<blockquote class="tr_bq">
Windows<br />
NI VSTプラグインのインストール<br />
Windowsコンピュータにおいて、VSTプラグインはハードディスク上のどこにでもインストールすることが可能ですが、Native Accessに表示されるデフォルトのインストールパスにインストールされることを強くお勧めします:</blockquote>
<br />
<a href="https://sleepfreaks-dtm.com/dtm-trouble/komplete-cubase/">KompleteがCubaseに表示されない_Windows</a><br />
<br />
<br />
<h3>
Retrologue</h3>
<br />
・アナログシンセ<br />
・オクターブ<br />
・オシレーター<br />
<br />
<a href="https://www.youtube.com/watch?v=PP3P2MtRI04">Retrologue</a> Youtube<br />
<br />
<br />
<a href="https://www.youtube.com/watch?v=q8ISbsJfOp0">How to Use Retrologue (Cubase Tutorial)</a><br />
<br />
<a href="https://sleepfreaks-dtm.com/synth-basic/synth-lfo/">LFOの基本と役割を把握する シンセサイザー 初心者講座</a><br />
<br />
<br />
<a href="https://www.frenchbread-dtm.com/entry/2017/07/24/225920">初心者が初心者に向けて書いた、Cubase標準でのEDMの作り方</a><br />
<br />
<br />
<h4>
Massive</h4>
<br />
・Instrumental Trackを追加<br />
・スクリレックス ヤスタカ Bonobos さんが利用している<br />
・普通に有料で使えない<br />
<br />
<br />
<a href="https://yuk717.com/archives/488">最強シンセ!?中田ヤスタカ愛用MASSIVE紹介!【LIAR GAME】</a><br />
<br />
<a href="https://www.youtube.com/watch?time_continue=357&v=-F-Aq_Ziwto">Synth レシピ Perfume チョコレイトディスコ ① イントロ《Massive 使い方》(Sleepfreaks DTMスクール)</a><br />
<br />
<a href="http://massive%20tutorial%20-%20zedd%20bass/">Massive</a><br />
<br />
<h4>
Sylenth1</h4>
<br />
・Zeddの音色を作れる<br />
・もちろん有料<br />
<br />
<a href="https://nomadiary.hatenablog.com/entry/sylenth1">zedd(ゼッド)の曲の作り方とか機材とか[エレクトロ、EDM系]</a><br />
<br />
<br />
そのほかの無料のEDMに向いているプラグイン<br />
<br />
<blockquote class="tr_bq">
5).Aalto<br />
http://madronalabs.com/products/aalto<br />
4).BRZOZA<br />
http://www.vst4free.com/free_vst.php?...<br />
3). Venom VB-303<br />
http://antonsavov.net/cms/projects/ve...<br />
2). Dreamkiller<br />
http://www.freedrumkits.net/browse-vs...<br />
1). T-Force Alpha Plus<br />
http://www.mastrcode-music-vst.com/ma...</blockquote>
<br />
<a href="https://www.youtube.com/watch?v=91T0UcSsO5A">Our top 5 Free VST synths for EDM and Hip-hop</a><br />
<br /></div>
Unknownnoreply@blogger.comtag:blogger.com,1999:blog-2592581639714884938.post-66219791282132774262019-01-15T08:47:00.000+09:002019-01-15T08:47:46.049+09:00Firebaseについて調べたことまとめFirebaseについてまとめる。<br />
<br />
・BaaSで、Google製<br />
・フロントエンドエンジニアがバックエンド任せちゃうみたいなときに使える<br />
<br />
<a href="https://qiita.com/gonta616/items/8896bcffa04fb00b9567">≫フロントエンジニアが今話題のFirebaseについて語りたい</a><br />
<br />
<h4>
Firebase Auth</h4>
<br />
Firebase が提供するサービスのうち、認証に関する機能を提供するものが Firebase Authentication です。<br />
<br />
* GitHub や Twitter などの SNS を使った OAuth 認証機能を簡単に用意できる [1]<br />
* パスワード認証機能も用意されており、パスワード認証に関する機能を自前で実装しなくて済む。またパスワード情報を自社が管理するデータベースに保存しなくて済む。<br />
<br />
<br />
<a href="https://slideship.com/users/@iktakahiro/docs/2018/01/JnhLGehLsRw4dcZ42EY3Jf/">≫Firebase Authentication を使って得られた知見まとめ - トークンの仕様や注意点など</a><br />
<br />
<h4>
Firebase UI </h4>
<br />
Firebase UI is basically a drop in library that does all the UI (buttons, etc) and redirect logic for you automatically for all supported Firebase OAuth providers (Google, Facebook, GitHub, etc).<br />
<br />
<h4>
Firebase x Flask</h4>
<br />
<a href="https://www.youtube.com/watch?v=FCw5PFDb99k">≫Firebase Authentication with Python including Flask API</a><br />
<br />
<br />
<a href="https://www.youtube.com/watch?v=aojoWWMN1r0">≫Firebase Real Time Database using Python and Flask Web Application</a><br />
<br />
<a href="https://medium.com/google-cloud/firebase-developing-a-web-service-with-admin-sdk-flask-and-google-cloud-6fb97eb38b80">≫Firebase: Developing a Web Service with Admin SDK, Flask and Google Cloud</a>Unknownnoreply@blogger.comtag:blogger.com,1999:blog-2592581639714884938.post-20727901167686883382018-12-24T10:23:00.001+09:002018-12-24T10:23:18.588+09:00PandasでUnicodeDecodeError: 'shift_jis' codec can't decode byte 0xff in position 0: illegal multibyte sequenceが起こった時の対処法<h4>
状況</h4>
<br />
- 読み込もうとしているCSVファイルが、unicode形式になっている<br />
- 文字コードの確認方法はこちら。<br />
<br />
<a href="https://global-wing.com/activity/csv_character_code.html">CSVファイルが文字化けしてExcelで見れない時の対処法について|Excel実務のノウハウのお勉強</a><br />
<br />
<br />
- pandasのread_csvメソッドで。以下のようにCSVを読み込もうとする<br />
<br />
stop_words = pd.read_csv(stop_words_filename, encoding="shift-jis")<br />
<br />
<h4>
問題</h4>
<br />
- 以下のエラーが発生した<br />
<br />
UnicodeDecodeError: 'shift_jis' codec can't decode byte 0xff in position 0: illegal multibyte sequence<br />
<br />
<h4>
原因</h4>
<br />
- Pandasは、基本的にurf-8で文字コードを読み込もうとしている。utf-8以外の場合、encoding指定をしてあげる必要がある。<br />
- 上のコードでは、shift-jisで読み込もうとしている<br />
- しかし、元のファイルがunicodeなので読み込めていない。<br />
<br />
<h4>
対策</h4>
<br />
- 元のファイルをutf-8でencoding指定なし、もしくはshift-jis形式に変換をおこなう必要がある。<br />
- どちらにせよ、ファイルの形式をunicodeから何等かの値に変更する必要がある<br />
<br />
Excelの場合はこちらをutf-8形式に保存する<br />
<a href="https://did2memo.net/2016/11/14/excel-csv-utf8/">ExcelファイルをUTF-8のCSV形式で保存する方法(Excel 2016最新機能)40,710</a><br />
<br />
libreofficeで修整する場合はこう。<br />
<br />
<a href="https://help.libreoffice.org/Common/Export_text_files/ja">https://help.libreoffice.org/Common/Export_text_files/ja</a><br />
<br />
<br />
<br />
<br />Unknownnoreply@blogger.comtag:blogger.com,1999:blog-2592581639714884938.post-32278602094848847692018-12-20T09:51:00.000+09:002018-12-20T09:51:06.982+09:00Flaskを利用した並列処理をThreadを利用する際の忘備録<h4>
# スレッド(thread)とは</h4>
<blockquote class="tr_bq">
> プログラムの処理の実行単位</blockquote>
引用:<a href="https://wa3.i-3-i.info/word12453.html">スレッド (thread)とは</a><br />
<br />
<h4>
# スレッドを複数利用するタイミング</h4>
<br />
・並列処理を行う必要がある場合<br />
<br />
<h4>
# Pythonで複数Threadを利用する場合</h4>
<br />
<br />
<ul>
<li>Celery</li>
<ul>
<li>ジョブキューを使う</li>
<li>redisなど使うため準備が少し必要</li>
</ul>
<li>Thread</li>
</ul>
<div>
引用:<a href="https://qiita.com/juri-t/items/5cec3822e168215aff49">PythonでThreadを使うflaskサンプルを作ってみた</a><br />
<br />
<h4>
# Threadの使い方</h4>
<br /></div>
<br />
<pre style="background-color: #f7f7f7; border-radius: 3px; border: 0px; box-sizing: inherit; color: #333333; cursor: text; font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 0.7em; line-height: 1.2; overflow-wrap: normal; overflow-x: auto; padding: 0.6em 1.2em; word-break: break-all;"><span class="kn" style="box-sizing: inherit; font-weight: 700;">import</span> <span class="nn" style="box-sizing: inherit; color: #555555;">time</span>
<span class="kn" style="box-sizing: inherit; font-weight: 700;">import</span> <span class="nn" style="box-sizing: inherit; color: #555555;">threading</span>
<span class="k" style="box-sizing: inherit; font-weight: 700;">def</span> <span class="nf" style="box-sizing: inherit; color: #990000; font-weight: 700;">func1</span><span class="p" style="box-sizing: inherit;">():</span>
<span class="k" style="box-sizing: inherit; font-weight: 700;">while</span> <span class="bp" style="box-sizing: inherit; color: #999999;">True</span><span class="p" style="box-sizing: inherit;">:</span>
<span class="k" style="box-sizing: inherit; font-weight: 700;">print</span><span class="p" style="box-sizing: inherit;">(</span><span class="s" style="box-sizing: inherit; color: #d01040;">"func1"</span><span class="p" style="box-sizing: inherit;">)</span>
<span class="n" style="box-sizing: inherit;">time</span><span class="o" style="box-sizing: inherit; font-weight: 700;">.</span><span class="n" style="box-sizing: inherit;">sleep</span><span class="p" style="box-sizing: inherit;">(</span><span class="mi" style="box-sizing: inherit; color: #009999;">1</span><span class="p" style="box-sizing: inherit;">)</span>
<span class="k" style="box-sizing: inherit; font-weight: 700;">def</span> <span class="nf" style="box-sizing: inherit; color: #990000; font-weight: 700;">func2</span><span class="p" style="box-sizing: inherit;">():</span>
<span class="k" style="box-sizing: inherit; font-weight: 700;">while</span> <span class="bp" style="box-sizing: inherit; color: #999999;">True</span><span class="p" style="box-sizing: inherit;">:</span>
<span class="k" style="box-sizing: inherit; font-weight: 700;">print</span><span class="p" style="box-sizing: inherit;">(</span><span class="s" style="box-sizing: inherit; color: #d01040;">"func2"</span><span class="p" style="box-sizing: inherit;">)</span>
<span class="n" style="box-sizing: inherit;">time</span><span class="o" style="box-sizing: inherit; font-weight: 700;">.</span><span class="n" style="box-sizing: inherit;">sleep</span><span class="p" style="box-sizing: inherit;">(</span><span class="mi" style="box-sizing: inherit; color: #009999;">1</span><span class="p" style="box-sizing: inherit;">)</span>
<span class="k" style="box-sizing: inherit; font-weight: 700;">if</span> <span class="n" style="box-sizing: inherit;">__name__</span> <span class="o" style="box-sizing: inherit; font-weight: 700;">==</span> <span class="s" style="box-sizing: inherit; color: #d01040;">"__main__"</span><span class="p" style="box-sizing: inherit;">:</span>
<span class="n" style="box-sizing: inherit;">thread_1</span> <span class="o" style="box-sizing: inherit; font-weight: 700;">=</span> <span class="n" style="box-sizing: inherit;">threading</span><span class="o" style="box-sizing: inherit; font-weight: 700;">.</span><span class="n" style="box-sizing: inherit;">Thread</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">target</span><span class="o" style="box-sizing: inherit; font-weight: 700;">=</span><span class="n" style="box-sizing: inherit;">func1</span><span class="p" style="box-sizing: inherit;">)</span>
<span class="n" style="box-sizing: inherit;">thread_2</span> <span class="o" style="box-sizing: inherit; font-weight: 700;">=</span> <span class="n" style="box-sizing: inherit;">threading</span><span class="o" style="box-sizing: inherit; font-weight: 700;">.</span><span class="n" style="box-sizing: inherit;">Thread</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">target</span><span class="o" style="box-sizing: inherit; font-weight: 700;">=</span><span class="n" style="box-sizing: inherit;">func2</span><span class="p" style="box-sizing: inherit;">)</span>
<span class="n" style="box-sizing: inherit;">thread_1</span><span class="o" style="box-sizing: inherit; font-weight: 700;">.</span><span class="n" style="box-sizing: inherit;">start</span><span class="p" style="box-sizing: inherit;">()</span>
<span class="n" style="box-sizing: inherit;">thread_2</span><span class="o" style="box-sizing: inherit; font-weight: 700;">.</span><span class="n" style="box-sizing: inherit;">start</span><span class="p" style="box-sizing: inherit;">()</span></pre>
<br />
引用:<a href="https://qiita.com/castaneai/items/9cc33817419896667f34">Pythonの並列・並行処理サンプルコードまとめ</a><br />
<div>
<br /></div>
<br />
<h4>
# Flaskで利用する場合</h4>
<br />
<br />
<pre style="background-color: #f7f7f7; border-radius: 3px; border: 0px; box-sizing: inherit; color: #333333; cursor: text; font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 0.7em; line-height: 1.2; overflow-wrap: normal; overflow-x: auto; padding: 0.6em 1.2em; word-break: break-all;"><span class="kn" style="box-sizing: inherit; font-weight: 700;">from</span> <span class="nn" style="box-sizing: inherit; color: #555555;">datetime</span> <span class="kn" style="box-sizing: inherit; font-weight: 700;">import</span> <span class="n" style="box-sizing: inherit;">datetime</span>
<span class="kn" style="box-sizing: inherit; font-weight: 700;">from</span> <span class="nn" style="box-sizing: inherit; color: #555555;">flask</span> <span class="kn" style="box-sizing: inherit; font-weight: 700;">import</span> <span class="n" style="box-sizing: inherit;">Flask</span><span class="p" style="box-sizing: inherit;">,</span> <span class="n" style="box-sizing: inherit;">make_response</span>
<span class="kn" style="box-sizing: inherit; font-weight: 700;">from</span> <span class="nn" style="box-sizing: inherit; color: #555555;">time</span> <span class="kn" style="box-sizing: inherit; font-weight: 700;">import</span> <span class="n" style="box-sizing: inherit;">sleep</span>
<span class="kn" style="box-sizing: inherit; font-weight: 700;">import</span> <span class="nn" style="box-sizing: inherit; color: #555555;">threading</span>
<span class="n" style="box-sizing: inherit;">app</span> <span class="o" style="box-sizing: inherit; font-weight: 700;">=</span> <span class="n" style="box-sizing: inherit;">Flask</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">__name__</span><span class="p" style="box-sizing: inherit;">)</span>
<span class="k" style="box-sizing: inherit; font-weight: 700;">class</span> <span class="nc" style="box-sizing: inherit; color: #445588; font-weight: 700;">MyThread</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">threading</span><span class="o" style="box-sizing: inherit; font-weight: 700;">.</span><span class="n" style="box-sizing: inherit;">Thread</span><span class="p" style="box-sizing: inherit;">):</span>
<span class="k" style="box-sizing: inherit; font-weight: 700;">def</span> <span class="nf" style="box-sizing: inherit; color: #990000; font-weight: 700;">__init__</span><span class="p" style="box-sizing: inherit;">(</span><span class="bp" style="box-sizing: inherit; color: #999999;">self</span><span class="p" style="box-sizing: inherit;">):</span>
<span class="nb" style="box-sizing: inherit; color: #0086b3;">super</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">MyThread</span><span class="p" style="box-sizing: inherit;">,</span> <span class="bp" style="box-sizing: inherit; color: #999999;">self</span><span class="p" style="box-sizing: inherit;">)</span><span class="o" style="box-sizing: inherit; font-weight: 700;">.</span><span class="n" style="box-sizing: inherit;">__init__</span><span class="p" style="box-sizing: inherit;">()</span>
<span class="bp" style="box-sizing: inherit; color: #999999;">self</span><span class="o" style="box-sizing: inherit; font-weight: 700;">.</span><span class="n" style="box-sizing: inherit;">stop_event</span> <span class="o" style="box-sizing: inherit; font-weight: 700;">=</span> <span class="n" style="box-sizing: inherit;">threading</span><span class="o" style="box-sizing: inherit; font-weight: 700;">.</span><span class="n" style="box-sizing: inherit;">Event</span><span class="p" style="box-sizing: inherit;">()</span>
<span class="k" style="box-sizing: inherit; font-weight: 700;">def</span> <span class="nf" style="box-sizing: inherit; color: #990000; font-weight: 700;">stop</span><span class="p" style="box-sizing: inherit;">(</span><span class="bp" style="box-sizing: inherit; color: #999999;">self</span><span class="p" style="box-sizing: inherit;">):</span>
<span class="bp" style="box-sizing: inherit; color: #999999;">self</span><span class="o" style="box-sizing: inherit; font-weight: 700;">.</span><span class="n" style="box-sizing: inherit;">stop_event</span><span class="o" style="box-sizing: inherit; font-weight: 700;">.</span><span class="nb" style="box-sizing: inherit; color: #0086b3;">set</span><span class="p" style="box-sizing: inherit;">()</span>
<span class="k" style="box-sizing: inherit; font-weight: 700;">def</span> <span class="nf" style="box-sizing: inherit; color: #990000; font-weight: 700;">run</span><span class="p" style="box-sizing: inherit;">(</span><span class="bp" style="box-sizing: inherit; color: #999999;">self</span><span class="p" style="box-sizing: inherit;">):</span>
<span class="k" style="box-sizing: inherit; font-weight: 700;">try</span><span class="p" style="box-sizing: inherit;">:</span>
<span class="k" style="box-sizing: inherit; font-weight: 700;">for</span> <span class="n" style="box-sizing: inherit;">_</span> <span class="ow" style="box-sizing: inherit; font-weight: 700;">in</span> <span class="nb" style="box-sizing: inherit; color: #0086b3;">range</span><span class="p" style="box-sizing: inherit;">(</span><span class="mi" style="box-sizing: inherit; color: #009999;">1000</span><span class="p" style="box-sizing: inherit;">):</span>
<span class="k" style="box-sizing: inherit; font-weight: 700;">print</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">f</span><span class="s" style="box-sizing: inherit; color: #d01040;">'{datetime.now():</span><span class="si" style="box-sizing: inherit; color: #d01040;">%</span><span class="s" style="box-sizing: inherit; color: #d01040;">H:</span><span class="si" style="box-sizing: inherit; color: #d01040;">%</span><span class="s" style="box-sizing: inherit; color: #d01040;">M:</span><span class="si" style="box-sizing: inherit; color: #d01040;">%</span><span class="s" style="box-sizing: inherit; color: #d01040;">S}'</span><span class="p" style="box-sizing: inherit;">)</span>
<span class="n" style="box-sizing: inherit;">sleep</span><span class="p" style="box-sizing: inherit;">(</span><span class="mi" style="box-sizing: inherit; color: #009999;">1</span><span class="p" style="box-sizing: inherit;">)</span>
<span class="c" style="box-sizing: inherit; color: #999988; font-style: italic;"># 定期的にフラグを確認して停止させる</span>
<span class="k" style="box-sizing: inherit; font-weight: 700;">if</span> <span class="bp" style="box-sizing: inherit; color: #999999;">self</span><span class="o" style="box-sizing: inherit; font-weight: 700;">.</span><span class="n" style="box-sizing: inherit;">stop_event</span><span class="o" style="box-sizing: inherit; font-weight: 700;">.</span><span class="n" style="box-sizing: inherit;">is_set</span><span class="p" style="box-sizing: inherit;">():</span>
<span class="k" style="box-sizing: inherit; font-weight: 700;">break</span>
<span class="k" style="box-sizing: inherit; font-weight: 700;">finally</span><span class="p" style="box-sizing: inherit;">:</span>
<span class="k" style="box-sizing: inherit; font-weight: 700;">print</span><span class="p" style="box-sizing: inherit;">(</span><span class="s" style="box-sizing: inherit; color: #d01040;">'時間のかかる処理が終わりました</span><span class="se" style="box-sizing: inherit; color: #d01040;">\n</span><span class="s" style="box-sizing: inherit; color: #d01040;">'</span><span class="p" style="box-sizing: inherit;">)</span>
<span class="n" style="box-sizing: inherit;">jobs</span> <span class="o" style="box-sizing: inherit; font-weight: 700;">=</span> <span class="p" style="box-sizing: inherit;">{}</span>
<span class="nd" style="box-sizing: inherit; color: #3c5d5d; font-weight: 700;">@app.route</span><span class="p" style="box-sizing: inherit;">(</span><span class="s" style="box-sizing: inherit; color: #d01040;">'/start/<id>/'</span><span class="p" style="box-sizing: inherit;">)</span>
<span class="k" style="box-sizing: inherit; font-weight: 700;">def</span> <span class="nf" style="box-sizing: inherit; color: #990000; font-weight: 700;">root</span><span class="p" style="box-sizing: inherit;">(</span><span class="nb" style="box-sizing: inherit; color: #0086b3;">id</span><span class="p" style="box-sizing: inherit;">):</span>
<span class="n" style="box-sizing: inherit;">t</span> <span class="o" style="box-sizing: inherit; font-weight: 700;">=</span> <span class="n" style="box-sizing: inherit;">MyThread</span><span class="p" style="box-sizing: inherit;">()</span>
<span class="n" style="box-sizing: inherit;">t</span><span class="o" style="box-sizing: inherit; font-weight: 700;">.</span><span class="n" style="box-sizing: inherit;">start</span><span class="p" style="box-sizing: inherit;">()</span>
<span class="n" style="box-sizing: inherit;">jobs</span><span class="p" style="box-sizing: inherit;">[</span><span class="nb" style="box-sizing: inherit; color: #0086b3;">id</span><span class="p" style="box-sizing: inherit;">]</span> <span class="o" style="box-sizing: inherit; font-weight: 700;">=</span> <span class="n" style="box-sizing: inherit;">t</span>
<span class="k" style="box-sizing: inherit; font-weight: 700;">return</span> <span class="n" style="box-sizing: inherit;">make_response</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">f</span><span class="s" style="box-sizing: inherit; color: #d01040;">'{id}の処理を受け付けました</span><span class="se" style="box-sizing: inherit; color: #d01040;">\n</span><span class="s" style="box-sizing: inherit; color: #d01040;">'</span><span class="p" style="box-sizing: inherit;">),</span> <span class="mi" style="box-sizing: inherit; color: #009999;">202</span>
<span class="nd" style="box-sizing: inherit; color: #3c5d5d; font-weight: 700;">@app.route</span><span class="p" style="box-sizing: inherit;">(</span><span class="s" style="box-sizing: inherit; color: #d01040;">'/stop/<id>/'</span><span class="p" style="box-sizing: inherit;">)</span>
<span class="k" style="box-sizing: inherit; font-weight: 700;">def</span> <span class="nf" style="box-sizing: inherit; color: #990000; font-weight: 700;">stop</span><span class="p" style="box-sizing: inherit;">(</span><span class="nb" style="box-sizing: inherit; color: #0086b3;">id</span><span class="p" style="box-sizing: inherit;">):</span>
<span class="n" style="box-sizing: inherit;">jobs</span><span class="p" style="box-sizing: inherit;">[</span><span class="nb" style="box-sizing: inherit; color: #0086b3;">id</span><span class="p" style="box-sizing: inherit;">]</span><span class="o" style="box-sizing: inherit; font-weight: 700;">.</span><span class="n" style="box-sizing: inherit;">stop</span><span class="p" style="box-sizing: inherit;">()</span>
<span class="k" style="box-sizing: inherit; font-weight: 700;">del</span> <span class="n" style="box-sizing: inherit;">jobs</span><span class="p" style="box-sizing: inherit;">[</span><span class="nb" style="box-sizing: inherit; color: #0086b3;">id</span><span class="p" style="box-sizing: inherit;">]</span>
<span class="k" style="box-sizing: inherit; font-weight: 700;">return</span> <span class="n" style="box-sizing: inherit;">make_response</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">f</span><span class="s" style="box-sizing: inherit; color: #d01040;">'{id}の中止処理を受け付けました</span><span class="se" style="box-sizing: inherit; color: #d01040;">\n</span><span class="s" style="box-sizing: inherit; color: #d01040;">'</span><span class="p" style="box-sizing: inherit;">),</span> <span class="mi" style="box-sizing: inherit; color: #009999;">202</span>
<span class="nd" style="box-sizing: inherit; color: #3c5d5d; font-weight: 700;">@app.route</span><span class="p" style="box-sizing: inherit;">(</span><span class="s" style="box-sizing: inherit; color: #d01040;">'/status/<id>/'</span><span class="p" style="box-sizing: inherit;">)</span>
<span class="k" style="box-sizing: inherit; font-weight: 700;">def</span> <span class="nf" style="box-sizing: inherit; color: #990000; font-weight: 700;">status</span><span class="p" style="box-sizing: inherit;">(</span><span class="nb" style="box-sizing: inherit; color: #0086b3;">id</span><span class="p" style="box-sizing: inherit;">):</span>
<span class="k" style="box-sizing: inherit; font-weight: 700;">if</span> <span class="nb" style="box-sizing: inherit; color: #0086b3;">id</span> <span class="ow" style="box-sizing: inherit; font-weight: 700;">in</span> <span class="n" style="box-sizing: inherit;">jobs</span><span class="p" style="box-sizing: inherit;">:</span>
<span class="k" style="box-sizing: inherit; font-weight: 700;">return</span> <span class="n" style="box-sizing: inherit;">make_response</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">f</span><span class="s" style="box-sizing: inherit; color: #d01040;">'{id}は実行中です</span><span class="se" style="box-sizing: inherit; color: #d01040;">\n</span><span class="s" style="box-sizing: inherit; color: #d01040;">'</span><span class="p" style="box-sizing: inherit;">),</span> <span class="mi" style="box-sizing: inherit; color: #009999;">200</span>
<span class="k" style="box-sizing: inherit; font-weight: 700;">else</span><span class="p" style="box-sizing: inherit;">:</span>
<span class="k" style="box-sizing: inherit; font-weight: 700;">return</span> <span class="n" style="box-sizing: inherit;">make_response</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">f</span><span class="s" style="box-sizing: inherit; color: #d01040;">'{id}は実行していません</span><span class="se" style="box-sizing: inherit; color: #d01040;">\n</span><span class="s" style="box-sizing: inherit; color: #d01040;">'</span><span class="p" style="box-sizing: inherit;">),</span> <span class="mi" style="box-sizing: inherit; color: #009999;">200</span></pre>
<br />
<br />
引用:<a href="https://qiita.com/juri-t/items/5cec3822e168215aff49">PythonでThreadを使うflaskサンプルを作ってみた</a><br />
<br />
<h4>
# 並列処理の注意点</h4>
<br />
<br />
<ul>
<li>Flaskのデフォルトでは複数のリクエストを同時に処理することができません。</li>
<li>並列処理を有効にして同時アクセスを可能にするにはthreaded=Trueパラメータを設定します。</li>
</ul>
<br />
<br />
引用) <a href="https://qiita.com/5zm/items/251be97d2800bf67b1c6">Flaskのデフォルトでは同時アクセスを処理できない</a><br />
<br />
<br />
<br />
<br />
<br />Unknownnoreply@blogger.comtag:blogger.com,1999:blog-2592581639714884938.post-1032128702611342802018-12-07T20:00:00.002+09:002018-12-07T20:00:19.295+09:00Flaskで多対多のデータベース構成にするときにやるあれFlaskで簡単なWebアプリを作るときに、DBの持ち方をどうするか問題にぶち当たったので、忘備録。<br />
<br />
* Flask-SQLAlchemy<br />
* Flask-Migrate<br />
<br />
を使って、DBを管理している。<br />
<br />
モデルは<br />
<br />
* User<br />
* Followers<br />
<br />
というテーブルを持っている。User間のフォロー機能を実装したい。<br />
<br />
<br />
<div class="code-lang" style="background-color: #777777; box-sizing: inherit; color: #eeeeee; display: inline-block; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Hiragino Kaku Gothic ProN", メイリオ, meiryo, sans-serif; font-size: 14.4px; padding: 2px 4px; transform: translateY(-1em); word-break: break-all;">
<span class="bold" style="box-sizing: inherit;">app/init.py</span></div>
<span style="background-color: #364549; color: #e3e3e3; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Hiragino Kaku Gothic ProN", メイリオ, meiryo, sans-serif; font-size: 14.4px;"></span><div class="highlight" style="background-color: #364549; box-sizing: inherit; color: #e3e3e3; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Hiragino Kaku Gothic ProN", メイリオ, meiryo, sans-serif; font-size: 14.4px; overflow-x: auto; padding: 0.5em;">
<pre style="background-color: transparent; border-radius: 0px; border: none; box-sizing: inherit; color: inherit; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: inherit; line-height: 1.8; overflow-wrap: break-word; padding: 0px; word-break: break-all;"><span class="kn" style="box-sizing: inherit; color: #ff8095;">from</span> <span class="nn" style="box-sizing: inherit;">flask</span> <span class="kn" style="box-sizing: inherit; color: #ff8095;">import</span> <span class="n" style="box-sizing: inherit;">Flask</span>
<span class="kn" style="box-sizing: inherit; color: #ff8095;">from</span> <span class="nn" style="box-sizing: inherit;">config</span> <span class="kn" style="box-sizing: inherit; color: #ff8095;">import</span> <span class="n" style="box-sizing: inherit;">Config</span><span class="p" style="box-sizing: inherit;">,</span> <span class="n" style="box-sizing: inherit;">CONSUMER_KEY</span><span class="p" style="box-sizing: inherit;">,</span> <span class="n" style="box-sizing: inherit;">CONSUMER_SECRET</span><span class="p" style="box-sizing: inherit;">,</span> <span class="n" style="box-sizing: inherit;">CALLBACK_URL</span>
<span class="kn" style="box-sizing: inherit; color: #ff8095;">from</span> <span class="nn" style="box-sizing: inherit;">flask_sqlalchemy</span> <span class="kn" style="box-sizing: inherit; color: #ff8095;">import</span> <span class="n" style="box-sizing: inherit;">SQLAlchemy</span>
<span class="kn" style="box-sizing: inherit; color: #ff8095;">from</span> <span class="nn" style="box-sizing: inherit;">flask_migrate</span> <span class="kn" style="box-sizing: inherit; color: #ff8095;">import</span> <span class="n" style="box-sizing: inherit;">Migrate</span>
<span class="kn" style="box-sizing: inherit; color: #ff8095;">from</span> <span class="nn" style="box-sizing: inherit;">flask_login</span> <span class="kn" style="box-sizing: inherit; color: #ff8095;">import</span> <span class="n" style="box-sizing: inherit;">LoginManager</span>
<span class="n" style="box-sizing: inherit;">app</span> <span class="o" style="box-sizing: inherit; color: #ff8095;">=</span> <span class="n" style="box-sizing: inherit;">Flask</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">__name__</span><span class="p" style="box-sizing: inherit;">)</span>
<span class="n" style="box-sizing: inherit;">db</span> <span class="o" style="box-sizing: inherit; color: #ff8095;">=</span> <span class="n" style="box-sizing: inherit;">SQLAlchemy</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">app</span><span class="p" style="box-sizing: inherit;">)</span>
<span class="n" style="box-sizing: inherit;">migrate</span> <span class="o" style="box-sizing: inherit; color: #ff8095;">=</span> <span class="n" style="box-sizing: inherit;">Migrate</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">app</span><span class="p" style="box-sizing: inherit;">,</span> <span class="n" style="box-sizing: inherit;">db</span><span class="p" style="box-sizing: inherit;">)</span>
<span class="n" style="box-sizing: inherit;">app</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">config</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">from_object</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">Config</span><span class="p" style="box-sizing: inherit;">)</span>
<span class="n" style="box-sizing: inherit;">login</span> <span class="o" style="box-sizing: inherit; color: #ff8095;">=</span> <span class="n" style="box-sizing: inherit;">LoginManager</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">app</span><span class="p" style="box-sizing: inherit;">)</span>
<span class="kn" style="box-sizing: inherit; color: #ff8095;">from</span> <span class="nn" style="box-sizing: inherit;">app</span> <span class="kn" style="box-sizing: inherit; color: #ff8095;">import</span> <span class="n" style="box-sizing: inherit;">routes</span><span class="p" style="box-sizing: inherit;">,</span> <span class="n" style="box-sizing: inherit;">models</span>
<span class="kn" style="box-sizing: inherit; color: #ff8095;">from</span> <span class="nn" style="box-sizing: inherit;">app.models</span> <span class="kn" style="box-sizing: inherit; color: #ff8095;">import</span> <span class="n" style="box-sizing: inherit;">User</span></pre>
</div>
<br />
でモデルが<br />
<br />
<div class="code-lang" style="background-color: #777777; box-sizing: inherit; color: #eeeeee; display: inline-block; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Hiragino Kaku Gothic ProN", メイリオ, meiryo, sans-serif; font-size: 14.4px; padding: 2px 4px; transform: translateY(-1em); word-break: break-all;">
<span class="bold" style="box-sizing: inherit;">models.py</span></div>
<span style="background-color: #364549; color: #e3e3e3; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Hiragino Kaku Gothic ProN", メイリオ, meiryo, sans-serif; font-size: 14.4px;"></span><br />
<div class="highlight" style="background-color: #364549; box-sizing: inherit; color: #e3e3e3; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Hiragino Kaku Gothic ProN", メイリオ, meiryo, sans-serif; font-size: 14.4px; overflow-x: auto; padding: 0.5em;">
<pre style="background-color: transparent; border-radius: 0px; border: none; box-sizing: inherit; color: inherit; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: inherit; line-height: 1.8; overflow-wrap: break-word; padding: 0px; word-break: break-all;"><span class="kn" style="box-sizing: inherit; color: #ff8095;">from</span> <span class="nn" style="box-sizing: inherit;">datetime</span> <span class="kn" style="box-sizing: inherit; color: #ff8095;">import</span> <span class="n" style="box-sizing: inherit;">datetime</span>
<span class="kn" style="box-sizing: inherit; color: #ff8095;">from</span> <span class="nn" style="box-sizing: inherit;">app</span> <span class="kn" style="box-sizing: inherit; color: #ff8095;">import</span> <span class="n" style="box-sizing: inherit;">db</span>
<span class="kn" style="box-sizing: inherit; color: #ff8095;">from</span> <span class="nn" style="box-sizing: inherit;">flask_login</span> <span class="kn" style="box-sizing: inherit; color: #ff8095;">import</span> <span class="n" style="box-sizing: inherit;">UserMixin</span>
<span class="kn" style="box-sizing: inherit; color: #ff8095;">from</span> <span class="nn" style="box-sizing: inherit;">app</span> <span class="kn" style="box-sizing: inherit; color: #ff8095;">import</span> <span class="n" style="box-sizing: inherit;">login</span>
<span class="n" style="box-sizing: inherit;">followers</span> <span class="o" style="box-sizing: inherit; color: #ff8095;">=</span> <span class="n" style="box-sizing: inherit;">db</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">Table</span><span class="p" style="box-sizing: inherit;">(</span><span class="s" style="box-sizing: inherit; color: #41b7d7;">'followers'</span><span class="p" style="box-sizing: inherit;">,</span>
<span class="n" style="box-sizing: inherit;">db</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">Column</span><span class="p" style="box-sizing: inherit;">(</span><span class="s" style="box-sizing: inherit; color: #41b7d7;">'follower_id'</span><span class="p" style="box-sizing: inherit;">,</span> <span class="n" style="box-sizing: inherit;">db</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">Integer</span><span class="p" style="box-sizing: inherit;">,</span> <span class="n" style="box-sizing: inherit;">db</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">ForeignKey</span><span class="p" style="box-sizing: inherit;">(</span><span class="s" style="box-sizing: inherit; color: #41b7d7;">'user.id'</span><span class="p" style="box-sizing: inherit;">)),</span>
<span class="n" style="box-sizing: inherit;">db</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">Column</span><span class="p" style="box-sizing: inherit;">(</span><span class="s" style="box-sizing: inherit; color: #41b7d7;">'followed_id'</span><span class="p" style="box-sizing: inherit;">,</span> <span class="n" style="box-sizing: inherit;">db</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">Integer</span><span class="p" style="box-sizing: inherit;">,</span> <span class="n" style="box-sizing: inherit;">db</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">ForeignKey</span><span class="p" style="box-sizing: inherit;">(</span><span class="s" style="box-sizing: inherit; color: #41b7d7;">'user.id'</span><span class="p" style="box-sizing: inherit;">))</span>
<span class="p" style="box-sizing: inherit;">)</span>
<span class="n" style="box-sizing: inherit;">likers</span> <span class="o" style="box-sizing: inherit; color: #ff8095;">=</span> <span class="n" style="box-sizing: inherit;">db</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">Table</span><span class="p" style="box-sizing: inherit;">(</span><span class="s" style="box-sizing: inherit; color: #41b7d7;">'likers'</span><span class="p" style="box-sizing: inherit;">,</span>
<span class="n" style="box-sizing: inherit;">db</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">Column</span><span class="p" style="box-sizing: inherit;">(</span><span class="s" style="box-sizing: inherit; color: #41b7d7;">'liker_id'</span><span class="p" style="box-sizing: inherit;">,</span> <span class="n" style="box-sizing: inherit;">db</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">Integer</span><span class="p" style="box-sizing: inherit;">,</span> <span class="n" style="box-sizing: inherit;">db</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">ForeignKey</span><span class="p" style="box-sizing: inherit;">(</span><span class="s" style="box-sizing: inherit; color: #41b7d7;">'user.id'</span><span class="p" style="box-sizing: inherit;">)),</span>
<span class="n" style="box-sizing: inherit;">db</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">Column</span><span class="p" style="box-sizing: inherit;">(</span><span class="s" style="box-sizing: inherit; color: #41b7d7;">'liked_id'</span><span class="p" style="box-sizing: inherit;">,</span> <span class="n" style="box-sizing: inherit;">db</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">Integer</span><span class="p" style="box-sizing: inherit;">,</span> <span class="n" style="box-sizing: inherit;">db</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">ForeignKey</span><span class="p" style="box-sizing: inherit;">(</span><span class="s" style="box-sizing: inherit; color: #41b7d7;">'user.id'</span><span class="p" style="box-sizing: inherit;">))</span>
<span class="p" style="box-sizing: inherit;">)</span>
<span class="k" style="box-sizing: inherit; color: #ebd247;">class</span> <span class="nc" style="box-sizing: inherit; color: #8bdf4c;">User</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">UserMixin</span><span class="p" style="box-sizing: inherit;">,</span> <span class="n" style="box-sizing: inherit;">db</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">Model</span><span class="p" style="box-sizing: inherit;">):</span>
<span class="nb" style="box-sizing: inherit;">id</span> <span class="o" style="box-sizing: inherit; color: #ff8095;">=</span> <span class="n" style="box-sizing: inherit;">db</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">Column</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">db</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">Integer</span><span class="p" style="box-sizing: inherit;">,</span> <span class="n" style="box-sizing: inherit;">primary_key</span><span class="o" style="box-sizing: inherit; color: #ff8095;">=</span><span class="bp" style="box-sizing: inherit;">True</span><span class="p" style="box-sizing: inherit;">)</span>
<span class="n" style="box-sizing: inherit;">registered_at</span> <span class="o" style="box-sizing: inherit; color: #ff8095;">=</span> <span class="n" style="box-sizing: inherit;">db</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">Column</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">db</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">DateTime</span><span class="p" style="box-sizing: inherit;">,</span> <span class="n" style="box-sizing: inherit;">index</span><span class="o" style="box-sizing: inherit; color: #ff8095;">=</span><span class="bp" style="box-sizing: inherit;">True</span><span class="p" style="box-sizing: inherit;">,</span> <span class="n" style="box-sizing: inherit;">default</span><span class="o" style="box-sizing: inherit; color: #ff8095;">=</span><span class="n" style="box-sizing: inherit;">datetime</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">utcnow</span><span class="p" style="box-sizing: inherit;">)</span>
<span class="n" style="box-sizing: inherit;">last_updated_at</span> <span class="o" style="box-sizing: inherit; color: #ff8095;">=</span> <span class="n" style="box-sizing: inherit;">db</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">Column</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">db</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">DateTime</span><span class="p" style="box-sizing: inherit;">,</span> <span class="n" style="box-sizing: inherit;">index</span><span class="o" style="box-sizing: inherit; color: #ff8095;">=</span><span class="bp" style="box-sizing: inherit;">True</span><span class="p" style="box-sizing: inherit;">,</span> <span class="n" style="box-sizing: inherit;">default</span><span class="o" style="box-sizing: inherit; color: #ff8095;">=</span><span class="n" style="box-sizing: inherit;">datetime</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">utcnow</span><span class="p" style="box-sizing: inherit;">)</span>
<span class="n" style="box-sizing: inherit;">last_logined_at</span> <span class="o" style="box-sizing: inherit; color: #ff8095;">=</span> <span class="n" style="box-sizing: inherit;">db</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">Column</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">db</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">DateTime</span><span class="p" style="box-sizing: inherit;">,</span> <span class="n" style="box-sizing: inherit;">index</span><span class="o" style="box-sizing: inherit; color: #ff8095;">=</span><span class="bp" style="box-sizing: inherit;">True</span><span class="p" style="box-sizing: inherit;">,</span> <span class="n" style="box-sizing: inherit;">default</span><span class="o" style="box-sizing: inherit; color: #ff8095;">=</span><span class="n" style="box-sizing: inherit;">datetime</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">utcnow</span><span class="p" style="box-sizing: inherit;">)</span>
<span class="n" style="box-sizing: inherit;">twitter_id</span> <span class="o" style="box-sizing: inherit; color: #ff8095;">=</span> <span class="n" style="box-sizing: inherit;">db</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">Column</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">db</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">String</span><span class="p" style="box-sizing: inherit;">(</span><span class="mi" style="box-sizing: inherit; color: #a980f5;">64</span><span class="p" style="box-sizing: inherit;">),</span> <span class="n" style="box-sizing: inherit;">index</span><span class="o" style="box-sizing: inherit; color: #ff8095;">=</span><span class="bp" style="box-sizing: inherit;">True</span><span class="p" style="box-sizing: inherit;">,</span> <span class="n" style="box-sizing: inherit;">unique</span><span class="o" style="box-sizing: inherit; color: #ff8095;">=</span><span class="bp" style="box-sizing: inherit;">True</span><span class="p" style="box-sizing: inherit;">)</span>
<span class="n" style="box-sizing: inherit;">screen_name</span> <span class="o" style="box-sizing: inherit; color: #ff8095;">=</span> <span class="n" style="box-sizing: inherit;">db</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">Column</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">db</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">String</span><span class="p" style="box-sizing: inherit;">(</span><span class="mi" style="box-sizing: inherit; color: #a980f5;">64</span><span class="p" style="box-sizing: inherit;">),</span> <span class="n" style="box-sizing: inherit;">index</span><span class="o" style="box-sizing: inherit; color: #ff8095;">=</span><span class="bp" style="box-sizing: inherit;">True</span><span class="p" style="box-sizing: inherit;">,</span> <span class="n" style="box-sizing: inherit;">unique</span><span class="o" style="box-sizing: inherit; color: #ff8095;">=</span><span class="bp" style="box-sizing: inherit;">True</span><span class="p" style="box-sizing: inherit;">)</span>
<span class="n" style="box-sizing: inherit;">username</span> <span class="o" style="box-sizing: inherit; color: #ff8095;">=</span> <span class="n" style="box-sizing: inherit;">db</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">Column</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">db</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">String</span><span class="p" style="box-sizing: inherit;">(</span><span class="mi" style="box-sizing: inherit; color: #a980f5;">64</span><span class="p" style="box-sizing: inherit;">),</span> <span class="n" style="box-sizing: inherit;">index</span><span class="o" style="box-sizing: inherit; color: #ff8095;">=</span><span class="bp" style="box-sizing: inherit;">True</span><span class="p" style="box-sizing: inherit;">,</span> <span class="n" style="box-sizing: inherit;">unique</span><span class="o" style="box-sizing: inherit; color: #ff8095;">=</span><span class="bp" style="box-sizing: inherit;">True</span><span class="p" style="box-sizing: inherit;">)</span>
<span class="n" style="box-sizing: inherit;">image_url</span> <span class="o" style="box-sizing: inherit; color: #ff8095;">=</span> <span class="n" style="box-sizing: inherit;">db</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">Column</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">db</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">String</span><span class="p" style="box-sizing: inherit;">(</span><span class="mi" style="box-sizing: inherit; color: #a980f5;">128</span><span class="p" style="box-sizing: inherit;">),</span> <span class="n" style="box-sizing: inherit;">index</span><span class="o" style="box-sizing: inherit; color: #ff8095;">=</span><span class="bp" style="box-sizing: inherit;">True</span><span class="p" style="box-sizing: inherit;">,</span> <span class="n" style="box-sizing: inherit;">unique</span><span class="o" style="box-sizing: inherit; color: #ff8095;">=</span><span class="bp" style="box-sizing: inherit;">True</span><span class="p" style="box-sizing: inherit;">)</span>
<span class="n" style="box-sizing: inherit;">description</span> <span class="o" style="box-sizing: inherit; color: #ff8095;">=</span> <span class="n" style="box-sizing: inherit;">db</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">Column</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">db</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">String</span><span class="p" style="box-sizing: inherit;">(</span><span class="mi" style="box-sizing: inherit; color: #a980f5;">300</span><span class="p" style="box-sizing: inherit;">),</span> <span class="n" style="box-sizing: inherit;">index</span><span class="o" style="box-sizing: inherit; color: #ff8095;">=</span><span class="bp" style="box-sizing: inherit;">True</span><span class="p" style="box-sizing: inherit;">,</span> <span class="n" style="box-sizing: inherit;">unique</span><span class="o" style="box-sizing: inherit; color: #ff8095;">=</span><span class="bp" style="box-sizing: inherit;">True</span><span class="p" style="box-sizing: inherit;">)</span>
<span class="n" style="box-sizing: inherit;">followed</span> <span class="o" style="box-sizing: inherit; color: #ff8095;">=</span> <span class="n" style="box-sizing: inherit;">db</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">relationship</span><span class="p" style="box-sizing: inherit;">(</span>
<span class="s" style="box-sizing: inherit; color: #41b7d7;">'User'</span><span class="p" style="box-sizing: inherit;">,</span> <span class="n" style="box-sizing: inherit;">secondary</span><span class="o" style="box-sizing: inherit; color: #ff8095;">=</span><span class="n" style="box-sizing: inherit;">followers</span><span class="p" style="box-sizing: inherit;">,</span>
<span class="n" style="box-sizing: inherit;">primaryjoin</span><span class="o" style="box-sizing: inherit; color: #ff8095;">=</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">followers</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">c</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">follower_id</span> <span class="o" style="box-sizing: inherit; color: #ff8095;">==</span> <span class="n" style="box-sizing: inherit;">twitter_id</span><span class="p" style="box-sizing: inherit;">),</span>
<span class="n" style="box-sizing: inherit;">secondaryjoin</span><span class="o" style="box-sizing: inherit; color: #ff8095;">=</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">followers</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">c</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">followed_id</span> <span class="o" style="box-sizing: inherit; color: #ff8095;">==</span> <span class="n" style="box-sizing: inherit;">twitter_id</span><span class="p" style="box-sizing: inherit;">),</span>
<span class="n" style="box-sizing: inherit;">backref</span><span class="o" style="box-sizing: inherit; color: #ff8095;">=</span><span class="n" style="box-sizing: inherit;">db</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">backref</span><span class="p" style="box-sizing: inherit;">(</span><span class="s" style="box-sizing: inherit; color: #41b7d7;">'followers'</span><span class="p" style="box-sizing: inherit;">,</span> <span class="n" style="box-sizing: inherit;">lazy</span><span class="o" style="box-sizing: inherit; color: #ff8095;">=</span><span class="s" style="box-sizing: inherit; color: #41b7d7;">'dynamic'</span><span class="p" style="box-sizing: inherit;">),</span> <span class="n" style="box-sizing: inherit;">lazy</span><span class="o" style="box-sizing: inherit; color: #ff8095;">=</span><span class="s" style="box-sizing: inherit; color: #41b7d7;">'dynamic'</span><span class="p" style="box-sizing: inherit;">)</span>
<span class="n" style="box-sizing: inherit;">liked</span> <span class="o" style="box-sizing: inherit; color: #ff8095;">=</span> <span class="n" style="box-sizing: inherit;">db</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">relationship</span><span class="p" style="box-sizing: inherit;">(</span>
<span class="s" style="box-sizing: inherit; color: #41b7d7;">'User'</span><span class="p" style="box-sizing: inherit;">,</span> <span class="n" style="box-sizing: inherit;">secondary</span><span class="o" style="box-sizing: inherit; color: #ff8095;">=</span><span class="n" style="box-sizing: inherit;">likers</span><span class="p" style="box-sizing: inherit;">,</span>
<span class="n" style="box-sizing: inherit;">primaryjoin</span><span class="o" style="box-sizing: inherit; color: #ff8095;">=</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">likers</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">c</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">liker_id</span> <span class="o" style="box-sizing: inherit; color: #ff8095;">==</span> <span class="n" style="box-sizing: inherit;">twitter_id</span><span class="p" style="box-sizing: inherit;">),</span>
<span class="n" style="box-sizing: inherit;">secondaryjoin</span><span class="o" style="box-sizing: inherit; color: #ff8095;">=</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">likers</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">c</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">liked_id</span> <span class="o" style="box-sizing: inherit; color: #ff8095;">==</span> <span class="n" style="box-sizing: inherit;">twitter_id</span><span class="p" style="box-sizing: inherit;">),</span>
<span class="n" style="box-sizing: inherit;">backref</span><span class="o" style="box-sizing: inherit; color: #ff8095;">=</span><span class="n" style="box-sizing: inherit;">db</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">backref</span><span class="p" style="box-sizing: inherit;">(</span><span class="s" style="box-sizing: inherit; color: #41b7d7;">'likers'</span><span class="p" style="box-sizing: inherit;">,</span> <span class="n" style="box-sizing: inherit;">lazy</span><span class="o" style="box-sizing: inherit; color: #ff8095;">=</span><span class="s" style="box-sizing: inherit; color: #41b7d7;">'dynamic'</span><span class="p" style="box-sizing: inherit;">),</span> <span class="n" style="box-sizing: inherit;">lazy</span><span class="o" style="box-sizing: inherit; color: #ff8095;">=</span><span class="s" style="box-sizing: inherit; color: #41b7d7;">'dynamic'</span><span class="p" style="box-sizing: inherit;">)</span>
<span class="k" style="box-sizing: inherit; color: #ebd247;">def</span> <span class="nf" style="box-sizing: inherit; color: #8bdf4c;">follow</span><span class="p" style="box-sizing: inherit;">(</span><span class="bp" style="box-sizing: inherit;">self</span><span class="p" style="box-sizing: inherit;">,</span> <span class="n" style="box-sizing: inherit;">user</span><span class="p" style="box-sizing: inherit;">):</span>
<span class="k" style="box-sizing: inherit; color: #ebd247;">if</span> <span class="ow" style="box-sizing: inherit; color: #ff8095;">not</span> <span class="bp" style="box-sizing: inherit;">self</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">is_following</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">user</span><span class="p" style="box-sizing: inherit;">):</span>
<span class="bp" style="box-sizing: inherit;">self</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">followed</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">append</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">user</span><span class="p" style="box-sizing: inherit;">)</span>
<span class="k" style="box-sizing: inherit; color: #ebd247;">def</span> <span class="nf" style="box-sizing: inherit; color: #8bdf4c;">unfollow</span><span class="p" style="box-sizing: inherit;">(</span><span class="bp" style="box-sizing: inherit;">self</span><span class="p" style="box-sizing: inherit;">,</span> <span class="n" style="box-sizing: inherit;">user</span><span class="p" style="box-sizing: inherit;">):</span>
<span class="k" style="box-sizing: inherit; color: #ebd247;">if</span> <span class="bp" style="box-sizing: inherit;">self</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">is_following</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">user</span><span class="p" style="box-sizing: inherit;">):</span>
<span class="bp" style="box-sizing: inherit;">self</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">followed</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">remove</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">user</span><span class="p" style="box-sizing: inherit;">)</span>
<span class="k" style="box-sizing: inherit; color: #ebd247;">def</span> <span class="nf" style="box-sizing: inherit; color: #8bdf4c;">is_following</span><span class="p" style="box-sizing: inherit;">(</span><span class="bp" style="box-sizing: inherit;">self</span><span class="p" style="box-sizing: inherit;">,</span> <span class="n" style="box-sizing: inherit;">user</span><span class="p" style="box-sizing: inherit;">):</span>
<span class="k" style="box-sizing: inherit; color: #ebd247;">return</span> <span class="bp" style="box-sizing: inherit;">self</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">followed</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="nb" style="box-sizing: inherit;">filter</span><span class="p" style="box-sizing: inherit;">(</span>
<span class="n" style="box-sizing: inherit;">followers</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">c</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">followed_id</span> <span class="o" style="box-sizing: inherit; color: #ff8095;">==</span> <span class="n" style="box-sizing: inherit;">user</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="nb" style="box-sizing: inherit;">id</span><span class="p" style="box-sizing: inherit;">)</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">count</span><span class="p" style="box-sizing: inherit;">()</span> <span class="o" style="box-sizing: inherit; color: #ff8095;">></span> <span class="mi" style="box-sizing: inherit; color: #a980f5;">0</span>
<span class="k" style="box-sizing: inherit; color: #ebd247;">def</span> <span class="nf" style="box-sizing: inherit; color: #8bdf4c;">mutual_ids_list</span><span class="p" style="box-sizing: inherit;">(</span><span class="bp" style="box-sizing: inherit;">self</span><span class="p" style="box-sizing: inherit;">):</span>
<span class="k" style="box-sizing: inherit; color: #ebd247;">print</span> <span class="p" style="box-sizing: inherit;">(</span><span class="s" style="box-sizing: inherit; color: #41b7d7;">"twitter_id"</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">format</span><span class="p" style="box-sizing: inherit;">(</span><span class="bp" style="box-sizing: inherit;">self</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">twitter_id</span><span class="p" style="box-sizing: inherit;">))</span>
<span class="n" style="box-sizing: inherit;">followed_ids</span> <span class="o" style="box-sizing: inherit; color: #ff8095;">=</span> <span class="bp" style="box-sizing: inherit;">self</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">followed</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="nb" style="box-sizing: inherit;">filter</span><span class="p" style="box-sizing: inherit;">(</span>
<span class="n" style="box-sizing: inherit;">followers</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">c</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">followed_id</span> <span class="o" style="box-sizing: inherit; color: #ff8095;">==</span> <span class="bp" style="box-sizing: inherit;">self</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">twitter_id</span><span class="p" style="box-sizing: inherit;">)</span>
<span class="n" style="box-sizing: inherit;">following_ids</span> <span class="o" style="box-sizing: inherit; color: #ff8095;">=</span> <span class="bp" style="box-sizing: inherit;">self</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">followed</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="nb" style="box-sizing: inherit;">filter</span><span class="p" style="box-sizing: inherit;">(</span>
<span class="n" style="box-sizing: inherit;">followers</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">c</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">follower_id</span> <span class="o" style="box-sizing: inherit; color: #ff8095;">==</span> <span class="bp" style="box-sizing: inherit;">self</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">twitter_id</span><span class="p" style="box-sizing: inherit;">)</span>
<span class="k" style="box-sizing: inherit; color: #ebd247;">print</span> <span class="p" style="box-sizing: inherit;">(</span><span class="s" style="box-sizing: inherit; color: #41b7d7;">"followed_ids:"</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">format</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">followed_ids</span><span class="p" style="box-sizing: inherit;">))</span>
<span class="k" style="box-sizing: inherit; color: #ebd247;">print</span> <span class="p" style="box-sizing: inherit;">(</span><span class="s" style="box-sizing: inherit; color: #41b7d7;">"follower_ids:"</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">format</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">following_ids</span><span class="p" style="box-sizing: inherit;">))</span>
<span class="k" style="box-sizing: inherit; color: #ebd247;">print</span> <span class="p" style="box-sizing: inherit;">(</span><span class="nb" style="box-sizing: inherit;">list</span><span class="p" style="box-sizing: inherit;">(</span><span class="nb" style="box-sizing: inherit;">set</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">following_ids</span> <span class="o" style="box-sizing: inherit; color: #ff8095;">&</span> <span class="nb" style="box-sizing: inherit;">set</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">followed_ids</span><span class="p" style="box-sizing: inherit;">))))</span>
<span class="k" style="box-sizing: inherit; color: #ebd247;">def</span> <span class="nf" style="box-sizing: inherit; color: #8bdf4c;">like</span><span class="p" style="box-sizing: inherit;">(</span><span class="bp" style="box-sizing: inherit;">self</span><span class="p" style="box-sizing: inherit;">,</span> <span class="n" style="box-sizing: inherit;">user</span><span class="p" style="box-sizing: inherit;">):</span>
<span class="k" style="box-sizing: inherit; color: #ebd247;">if</span> <span class="ow" style="box-sizing: inherit; color: #ff8095;">not</span> <span class="bp" style="box-sizing: inherit;">self</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">is_liking</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">user</span><span class="p" style="box-sizing: inherit;">):</span>
<span class="bp" style="box-sizing: inherit;">self</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">liked</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">append</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">user</span><span class="p" style="box-sizing: inherit;">)</span>
<span class="k" style="box-sizing: inherit; color: #ebd247;">def</span> <span class="nf" style="box-sizing: inherit; color: #8bdf4c;">unlike</span><span class="p" style="box-sizing: inherit;">(</span><span class="bp" style="box-sizing: inherit;">self</span><span class="p" style="box-sizing: inherit;">,</span> <span class="n" style="box-sizing: inherit;">user</span><span class="p" style="box-sizing: inherit;">):</span>
<span class="k" style="box-sizing: inherit; color: #ebd247;">if</span> <span class="bp" style="box-sizing: inherit;">self</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">is_liking</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">user</span><span class="p" style="box-sizing: inherit;">):</span>
<span class="bp" style="box-sizing: inherit;">self</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">liked</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">remove</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">user</span><span class="p" style="box-sizing: inherit;">)</span>
<span class="k" style="box-sizing: inherit; color: #ebd247;">def</span> <span class="nf" style="box-sizing: inherit; color: #8bdf4c;">is_likeing</span><span class="p" style="box-sizing: inherit;">(</span><span class="bp" style="box-sizing: inherit;">self</span><span class="p" style="box-sizing: inherit;">,</span> <span class="n" style="box-sizing: inherit;">user</span><span class="p" style="box-sizing: inherit;">):</span>
<span class="k" style="box-sizing: inherit; color: #ebd247;">return</span> <span class="bp" style="box-sizing: inherit;">self</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">likeed</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="nb" style="box-sizing: inherit;">filter</span><span class="p" style="box-sizing: inherit;">(</span>
<span class="n" style="box-sizing: inherit;">likers</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">c</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">liked_id</span> <span class="o" style="box-sizing: inherit; color: #ff8095;">==</span> <span class="n" style="box-sizing: inherit;">user</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="nb" style="box-sizing: inherit;">id</span><span class="p" style="box-sizing: inherit;">)</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">count</span><span class="p" style="box-sizing: inherit;">()</span> <span class="o" style="box-sizing: inherit; color: #ff8095;">></span> <span class="mi" style="box-sizing: inherit; color: #a980f5;">0</span>
<span class="k" style="box-sizing: inherit; color: #ebd247;">def</span> <span class="nf" style="box-sizing: inherit; color: #8bdf4c;">__repr__</span><span class="p" style="box-sizing: inherit;">(</span><span class="bp" style="box-sizing: inherit;">self</span><span class="p" style="box-sizing: inherit;">):</span>
<span class="k" style="box-sizing: inherit; color: #ebd247;">return</span> <span class="s" style="box-sizing: inherit; color: #41b7d7;">'<User {}>'</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">format</span><span class="p" style="box-sizing: inherit;">(</span><span class="bp" style="box-sizing: inherit;">self</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">twitter_id</span><span class="p" style="box-sizing: inherit;">)</span>
<span class="k" style="box-sizing: inherit; color: #ebd247;">class</span> <span class="nc" style="box-sizing: inherit; color: #8bdf4c;">Follower</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">db</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">Model</span><span class="p" style="box-sizing: inherit;">):</span>
<span class="nb" style="box-sizing: inherit;">id</span> <span class="o" style="box-sizing: inherit; color: #ff8095;">=</span> <span class="n" style="box-sizing: inherit;">db</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">Column</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">db</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">Integer</span><span class="p" style="box-sizing: inherit;">,</span> <span class="n" style="box-sizing: inherit;">primary_key</span><span class="o" style="box-sizing: inherit; color: #ff8095;">=</span><span class="bp" style="box-sizing: inherit;">True</span><span class="p" style="box-sizing: inherit;">)</span>
<span class="k" style="box-sizing: inherit; color: #ebd247;">class</span> <span class="nc" style="box-sizing: inherit; color: #8bdf4c;">Liker</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">db</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">Model</span><span class="p" style="box-sizing: inherit;">):</span>
<span class="nb" style="box-sizing: inherit;">id</span> <span class="o" style="box-sizing: inherit; color: #ff8095;">=</span> <span class="n" style="box-sizing: inherit;">db</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">Column</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">db</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">Integer</span><span class="p" style="box-sizing: inherit;">,</span> <span class="n" style="box-sizing: inherit;">primary_key</span><span class="o" style="box-sizing: inherit; color: #ff8095;">=</span><span class="bp" style="box-sizing: inherit;">True</span><span class="p" style="box-sizing: inherit;">)</span></pre>
</div>
<br />
的な感じ。これで、pythonから多対多のモデルが作れるのか確認。<br />
<br />
<div class="code-lang" style="background-color: #777777; box-sizing: inherit; color: #eeeeee; display: inline-block; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Hiragino Kaku Gothic ProN", メイリオ, meiryo, sans-serif; font-size: 14.4px; padding: 2px 4px; transform: translateY(-1em); word-break: break-all;">
<span class="bold" style="box-sizing: inherit;">python3</span></div>
<span style="background-color: #364549; color: #e3e3e3; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Hiragino Kaku Gothic ProN", メイリオ, meiryo, sans-serif; font-size: 14.4px;"></span><br />
<div class="highlight" style="background-color: #364549; box-sizing: inherit; color: #e3e3e3; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Hiragino Kaku Gothic ProN", メイリオ, meiryo, sans-serif; font-size: 14.4px; overflow-x: auto; padding: 0.5em;">
<pre style="background-color: transparent; border-radius: 0px; border: none; box-sizing: inherit; color: inherit; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: inherit; line-height: 1.8; overflow-wrap: break-word; padding: 0px; word-break: break-all;"><span class="o" style="box-sizing: inherit; color: #ff8095;">>>></span> <span class="kn" style="box-sizing: inherit; color: #ff8095;">from</span> <span class="nn" style="box-sizing: inherit;">app.models</span> <span class="kn" style="box-sizing: inherit; color: #ff8095;">import</span> <span class="n" style="box-sizing: inherit;">User</span><span class="p" style="box-sizing: inherit;">,</span> <span class="n" style="box-sizing: inherit;">Follower</span>
<span class="o" style="box-sizing: inherit; color: #ff8095;">>>></span> <span class="kn" style="box-sizing: inherit; color: #ff8095;">from</span> <span class="nn" style="box-sizing: inherit;">app</span> <span class="kn" style="box-sizing: inherit; color: #ff8095;">import</span> <span class="n" style="box-sizing: inherit;">db</span>
<span class="o" style="box-sizing: inherit; color: #ff8095;">>>></span> <span class="n" style="box-sizing: inherit;">u1</span> <span class="o" style="box-sizing: inherit; color: #ff8095;">=</span> <span class="n" style="box-sizing: inherit;">User</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">twitter_id</span><span class="o" style="box-sizing: inherit; color: #ff8095;">=</span><span class="mi" style="box-sizing: inherit; color: #a980f5;">3</span><span class="p" style="box-sizing: inherit;">)</span>
<span class="o" style="box-sizing: inherit; color: #ff8095;">>>></span> <span class="n" style="box-sizing: inherit;">u2</span> <span class="o" style="box-sizing: inherit; color: #ff8095;">=</span> <span class="n" style="box-sizing: inherit;">User</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">twitter_id</span><span class="o" style="box-sizing: inherit; color: #ff8095;">=</span><span class="mi" style="box-sizing: inherit; color: #a980f5;">4</span><span class="p" style="box-sizing: inherit;">)</span>
<span class="o" style="box-sizing: inherit; color: #ff8095;">>>></span> <span class="n" style="box-sizing: inherit;">db</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">session</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">add</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">u1</span><span class="p" style="box-sizing: inherit;">)</span>
<span class="o" style="box-sizing: inherit; color: #ff8095;">>>></span> <span class="n" style="box-sizing: inherit;">db</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">session</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">add</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">u2</span><span class="p" style="box-sizing: inherit;">)</span>
<span class="o" style="box-sizing: inherit; color: #ff8095;">>>></span> <span class="n" style="box-sizing: inherit;">db</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">session</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">commit</span><span class="p" style="box-sizing: inherit;">()</span>
<span class="o" style="box-sizing: inherit; color: #ff8095;">>>></span> <span class="n" style="box-sizing: inherit;">u1</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">follow</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">u2</span><span class="p" style="box-sizing: inherit;">)</span>
<span class="o" style="box-sizing: inherit; color: #ff8095;">>>></span> <span class="n" style="box-sizing: inherit;">u2</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">follow</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">u1</span><span class="p" style="box-sizing: inherit;">)</span>
<span class="o" style="box-sizing: inherit; color: #ff8095;">>>></span> <span class="n" style="box-sizing: inherit;">db</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">session</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">commit</span><span class="p" style="box-sizing: inherit;">()</span>
<span class="o" style="box-sizing: inherit; color: #ff8095;">>>></span> <span class="n" style="box-sizing: inherit;">u1</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">followed</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="nb" style="box-sizing: inherit;">all</span><span class="p" style="box-sizing: inherit;">()</span>
<span class="p" style="box-sizing: inherit;">[</span><span class="o" style="box-sizing: inherit; color: #ff8095;"><</span><span class="n" style="box-sizing: inherit;">User</span> <span class="mi" style="box-sizing: inherit; color: #a980f5;">4</span><span class="o" style="box-sizing: inherit; color: #ff8095;">></span><span class="p" style="box-sizing: inherit;">]</span></pre>
</div>
<br />
<br />
できてる。sqlite3にアクセスして、followerのテーブルにデータがあるのか確認。<br />
<br />
<div class="code-lang" style="background-color: #777777; box-sizing: inherit; color: #eeeeee; display: inline-block; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Hiragino Kaku Gothic ProN", メイリオ, meiryo, sans-serif; font-size: 14.4px; padding: 2px 4px; transform: translateY(-1em); word-break: break-all;">
<span class="bold" style="box-sizing: inherit;">bash</span></div>
<span style="background-color: #364549; color: #e3e3e3; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Hiragino Kaku Gothic ProN", メイリオ, meiryo, sans-serif; font-size: 14.4px;"></span><br />
<div class="highlight" style="background-color: #364549; box-sizing: inherit; color: #e3e3e3; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Hiragino Kaku Gothic ProN", メイリオ, meiryo, sans-serif; font-size: 14.4px; overflow-x: auto; padding: 0.5em;">
<pre style="background-color: transparent; border-radius: 0px; border: none; box-sizing: inherit; color: inherit; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: inherit; line-height: 1.8; overflow-wrap: break-word; padding: 0px; word-break: break-all;"><span class="err" style="border-bottom: 2px dotted rgb(192, 27, 27); box-sizing: inherit; color: #dddddd;">$</span> <span class="n" style="box-sizing: inherit;">sqlite3</span> <span class="n" style="box-sizing: inherit;">app</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="n" style="box-sizing: inherit;">db</span>
<span class="n" style="box-sizing: inherit;">SQLite</span> <span class="n" style="box-sizing: inherit;">version</span> <span class="mf" style="box-sizing: inherit; color: #a980f5;">3.11</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span><span class="mi" style="box-sizing: inherit; color: #a980f5;">0</span> <span class="mi" style="box-sizing: inherit; color: #a980f5;">2016</span><span class="o" style="box-sizing: inherit; color: #ff8095;">-</span><span class="mo" style="box-sizing: inherit; color: #a980f5;">02</span><span class="o" style="box-sizing: inherit; color: #ff8095;">-</span><span class="mi" style="box-sizing: inherit; color: #a980f5;">15</span> <span class="mi" style="box-sizing: inherit; color: #a980f5;">17</span><span class="p" style="box-sizing: inherit;">:</span><span class="mi" style="box-sizing: inherit; color: #a980f5;">29</span><span class="p" style="box-sizing: inherit;">:</span><span class="mi" style="box-sizing: inherit; color: #a980f5;">24</span>
<span class="n" style="box-sizing: inherit;">Enter</span> <span class="s" style="box-sizing: inherit; color: #41b7d7;">".help"</span> <span class="k" style="box-sizing: inherit; color: #ebd247;">for</span> <span class="n" style="box-sizing: inherit;">usage</span> <span class="n" style="box-sizing: inherit;">hints</span><span class="o" style="box-sizing: inherit; color: #ff8095;">.</span>
<span class="n" style="box-sizing: inherit;">sqlite</span><span class="o" style="box-sizing: inherit; color: #ff8095;">></span> <span class="n" style="box-sizing: inherit;">select</span> <span class="o" style="box-sizing: inherit; color: #ff8095;">*</span> <span class="k" style="box-sizing: inherit; color: #ebd247;">from</span> <span class="n" style="box-sizing: inherit;">followers</span>
<span class="o" style="box-sizing: inherit; color: #ff8095;">...></span> <span class="p" style="box-sizing: inherit;">;</span>
<span class="o" style="box-sizing: inherit; color: #ff8095;">|</span>
<span class="o" style="box-sizing: inherit; color: #ff8095;">|</span>
<span class="mi" style="box-sizing: inherit; color: #a980f5;">1</span><span class="o" style="box-sizing: inherit; color: #ff8095;">|</span><span class="mi" style="box-sizing: inherit; color: #a980f5;">2</span>
<span class="mi" style="box-sizing: inherit; color: #a980f5;">2</span><span class="o" style="box-sizing: inherit; color: #ff8095;">|</span><span class="mi" style="box-sizing: inherit; color: #a980f5;">1</span>
<span class="mi" style="box-sizing: inherit; color: #a980f5;">1</span><span class="o" style="box-sizing: inherit; color: #ff8095;">|</span><span class="mi" style="box-sizing: inherit; color: #a980f5;">2</span>
<span class="mi" style="box-sizing: inherit; color: #a980f5;">1</span><span class="o" style="box-sizing: inherit; color: #ff8095;">|</span><span class="mi" style="box-sizing: inherit; color: #a980f5;">2</span>
<span class="mi" style="box-sizing: inherit; color: #a980f5;">2</span><span class="o" style="box-sizing: inherit; color: #ff8095;">|</span><span class="mi" style="box-sizing: inherit; color: #a980f5;">1</span>
<span class="mi" style="box-sizing: inherit; color: #a980f5;">3</span><span class="o" style="box-sizing: inherit; color: #ff8095;">|</span><span class="mi" style="box-sizing: inherit; color: #a980f5;">4</span>
<span class="mi" style="box-sizing: inherit; color: #a980f5;">4</span><span class="o" style="box-sizing: inherit; color: #ff8095;">|</span><span class="mi" style="box-sizing: inherit; color: #a980f5;">3</span></pre>
</div>
<br />
できているはず。<br />
あとはこのfollowersテーブルにsqlalchemyからアクセスしたいんだけど、そこがようわからんので調査が必要。<br />
<br />Unknownnoreply@blogger.comtag:blogger.com,1999:blog-2592581639714884938.post-83805362555725121952018-12-07T19:05:00.000+09:002018-12-07T19:05:39.739+09:00FlaskでWebアプリを作るときの忘備録FlaskでWebアプリを作っているので、今後使いそうなところの忘備録<br />
<br />
<h4>
## flask-login</h4>
<br />
主な機能<br />
<br />
<ul>
<li>login/logoutが login_user(user)/logout_user()で簡単に管理できる</li>
<li>ログインが必要なページを @login_requiredデコレーターで簡単に管理できる</li>
<li>グローバル変数current_userがスクリプトからもテンプレートからも使える</li>
<li>ログインしてない時はcurrent_userにAnonymousUserMixinオブジェクトがセットされ、いい感じに使える</li>
<ul>
<li>is_active, is_authenticated == False</li>
<li>is_anonymous == True</li>
<li>get_id() returns None</li>
</ul>
</ul>
<br />
<h4>
## SQLAlchemy</h4>
<br />
<ul>
<li>Railsでいうrake db:migrateみたいな感じで、マイグレーション管理ができるパッケージ</li>
<li>flask db init -> DBの初期化</li>
<li>flask db migrate -> マイグレーションファイルの作成</li>
<li>flask db upgrade -> マイグレーションファイルの実行</li>
<li>flask db downgrade -> ロールバック</li>
</ul>
<br />
## One to One, One to Manyのリレーション<br />
<br />
<br />
<ul>
<li>One to Manyのリレーションは下記コードの通り</li>
<ul>
<li><br /></li>
</ul>
</ul>
<br />
<pre style="background: rgb(238, 238, 238); color: #3e4349; font-family: Consolas, Menlo, "Deja Vu Sans Mono", "Bitstream Vera Sans Mono", monospace; font-size: 0.9em; line-height: 1.3em; margin: 15px -30px; overflow: auto hidden; padding: 7px 30px;"><span class="k" style="color: #004461; font-weight: bold;">class</span> <span class="nc" style="color: black;">Person</span><span class="p" style="color: black; font-weight: bold;">(</span><span class="n" style="color: black;">db</span><span class="o" style="color: #582800;">.</span><span class="n" style="color: black;">Model</span><span class="p" style="color: black; font-weight: bold;">):</span>
<span class="nb" style="color: #004461;">id</span> <span class="o" style="color: #582800;">=</span> <span class="n" style="color: black;">db</span><span class="o" style="color: #582800;">.</span><span class="n" style="color: black;">Column</span><span class="p" style="color: black; font-weight: bold;">(</span><span class="n" style="color: black;">db</span><span class="o" style="color: #582800;">.</span><span class="n" style="color: black;">Integer</span><span class="p" style="color: black; font-weight: bold;">,</span> <span class="n" style="color: black;">primary_key</span><span class="o" style="color: #582800;">=</span><span class="kc" style="color: #004461; font-weight: bold;">True</span><span class="p" style="color: black; font-weight: bold;">)</span>
<span class="n" style="color: black;">name</span> <span class="o" style="color: #582800;">=</span> <span class="n" style="color: black;">db</span><span class="o" style="color: #582800;">.</span><span class="n" style="color: black;">Column</span><span class="p" style="color: black; font-weight: bold;">(</span><span class="n" style="color: black;">db</span><span class="o" style="color: #582800;">.</span><span class="n" style="color: black;">String</span><span class="p" style="color: black; font-weight: bold;">(</span><span class="mi" style="color: #990000;">50</span><span class="p" style="color: black; font-weight: bold;">),</span> <span class="n" style="color: black;">nullable</span><span class="o" style="color: #582800;">=</span><span class="kc" style="color: #004461; font-weight: bold;">False</span><span class="p" style="color: black; font-weight: bold;">)</span>
<span class="n" style="color: black;">addresses</span> <span class="o" style="color: #582800;">=</span> <span class="n" style="color: black;">db</span><span class="o" style="color: #582800;">.</span><span class="n" style="color: black;">relationship</span><span class="p" style="color: black; font-weight: bold;">(</span><span class="s1" style="color: #4e9a06;">'Address'</span><span class="p" style="color: black; font-weight: bold;">,</span> <span class="n" style="color: black;">backref</span><span class="o" style="color: #582800;">=</span><span class="s1" style="color: #4e9a06;">'person'</span><span class="p" style="color: black; font-weight: bold;">,</span> <span class="n" style="color: black;">lazy</span><span class="o" style="color: #582800;">=</span><span class="kc" style="color: #004461; font-weight: bold;">True</span><span class="p" style="color: black; font-weight: bold;">)</span>
<span class="k" style="color: #004461; font-weight: bold;">class</span> <span class="nc" style="color: black;">Address</span><span class="p" style="color: black; font-weight: bold;">(</span><span class="n" style="color: black;">db</span><span class="o" style="color: #582800;">.</span><span class="n" style="color: black;">Model</span><span class="p" style="color: black; font-weight: bold;">):</span>
<span class="nb" style="color: #004461;">id</span> <span class="o" style="color: #582800;">=</span> <span class="n" style="color: black;">db</span><span class="o" style="color: #582800;">.</span><span class="n" style="color: black;">Column</span><span class="p" style="color: black; font-weight: bold;">(</span><span class="n" style="color: black;">db</span><span class="o" style="color: #582800;">.</span><span class="n" style="color: black;">Integer</span><span class="p" style="color: black; font-weight: bold;">,</span> <span class="n" style="color: black;">primary_key</span><span class="o" style="color: #582800;">=</span><span class="kc" style="color: #004461; font-weight: bold;">True</span><span class="p" style="color: black; font-weight: bold;">)</span>
<span class="n" style="color: black;">email</span> <span class="o" style="color: #582800;">=</span> <span class="n" style="color: black;">db</span><span class="o" style="color: #582800;">.</span><span class="n" style="color: black;">Column</span><span class="p" style="color: black; font-weight: bold;">(</span><span class="n" style="color: black;">db</span><span class="o" style="color: #582800;">.</span><span class="n" style="color: black;">String</span><span class="p" style="color: black; font-weight: bold;">(</span><span class="mi" style="color: #990000;">120</span><span class="p" style="color: black; font-weight: bold;">),</span> <span class="n" style="color: black;">nullable</span><span class="o" style="color: #582800;">=</span><span class="kc" style="color: #004461; font-weight: bold;">False</span><span class="p" style="color: black; font-weight: bold;">)</span>
<span class="n" style="color: black;">person_id</span> <span class="o" style="color: #582800;">=</span> <span class="n" style="color: black;">db</span><span class="o" style="color: #582800;">.</span><span class="n" style="color: black;">Column</span><span class="p" style="color: black; font-weight: bold;">(</span><span class="n" style="color: black;">db</span><span class="o" style="color: #582800;">.</span><span class="n" style="color: black;">Integer</span><span class="p" style="color: black; font-weight: bold;">,</span> <span class="n" style="color: black;">db</span><span class="o" style="color: #582800;">.</span><span class="n" style="color: black;">ForeignKey</span><span class="p" style="color: black; font-weight: bold;">(</span><span class="s1" style="color: #4e9a06;">'person.id'</span><span class="p" style="color: black; font-weight: bold;">),</span>
<span class="n" style="color: black;">nullable</span><span class="o" style="color: #582800;">=</span><span class="kc" style="color: #004461; font-weight: bold;">False</span><span class="p" style="color: black; font-weight: bold;">)</span></pre>
<br />
<ul>
<li>One to Oneのリレーションは下記コードの通り</li>
<ul>
<li>modelsの外部にForeignKey指定でユーザーIDを指定してあげる</li>
<li>引用元はflask mega tutorial</li>
</ul>
</ul>
<div>
<br /></div>
<br />
<div class="code_title" style="background-color: #cccccc; box-sizing: border-box; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 12.6px; line-height: 18.9px; margin-bottom: -4px; padding-bottom: 4px; padding-left: 10px;">
<i style="box-sizing: border-box;">app/models.py</i>: Followers association table</div>
<div>
<pre class="prettyprint" style="background: rgb(248, 248, 248); border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; font-family: Menlo, "Bitstream Vera Sans Mono", "DejaVu Sans Mono", Monaco, Consolas, monospace; font-size: 12px; line-height: 1.5; margin-bottom: 16px; overflow-wrap: break-word; overflow: auto; padding: 10px; word-break: break-all;"><code class="python" style="background-color: transparent; border-radius: 0px; box-sizing: border-box; color: inherit; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: inherit; padding: 0px; white-space: pre-wrap;"><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">followers </span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">=</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;"> db</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">.</span><span class="typ" style="box-sizing: border-box; color: #4271ae;">Table</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">(</span><span class="str" style="box-sizing: border-box; color: #718c00;">'followers'</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">,</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">
db</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">.</span><span class="typ" style="box-sizing: border-box; color: #4271ae;">Column</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">(</span><span class="str" style="box-sizing: border-box; color: #718c00;">'follower_id'</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">,</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;"> db</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">.</span><span class="typ" style="box-sizing: border-box; color: #4271ae;">Integer</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">,</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;"> db</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">.</span><span class="typ" style="box-sizing: border-box; color: #4271ae;">ForeignKey</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">(</span><span class="str" style="box-sizing: border-box; color: #718c00;">'user.id'</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">)),</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">
db</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">.</span><span class="typ" style="box-sizing: border-box; color: #4271ae;">Column</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">(</span><span class="str" style="box-sizing: border-box; color: #718c00;">'followed_id'</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">,</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;"> db</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">.</span><span class="typ" style="box-sizing: border-box; color: #4271ae;">Integer</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">,</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;"> db</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">.</span><span class="typ" style="box-sizing: border-box; color: #4271ae;">ForeignKey</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">(</span><span class="str" style="box-sizing: border-box; color: #718c00;">'user.id'</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">))</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">
</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">)</span></code></pre>
</div>
<br />
<ul>
<li>ユーザーモデルの中に、以下のように書いてあげる。</li>
</ul>
<br />
<br />
<pre class="prettyprint" style="background: rgb(248, 248, 248); border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; font-family: Menlo, "Bitstream Vera Sans Mono", "DejaVu Sans Mono", Monaco, Consolas, monospace; font-size: 12px; line-height: 1.5; margin-bottom: 16px; overflow-wrap: break-word; overflow: auto; padding: 10px; word-break: break-all;"><code class="python" style="background-color: transparent; border-radius: 0px; box-sizing: border-box; color: inherit; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: inherit; padding: 0px; white-space: pre-wrap;"><span class="kwd" style="box-sizing: border-box; color: #8959a8;">class</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;"> </span><span class="typ" style="box-sizing: border-box; color: #4271ae;">User</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">(</span><span class="typ" style="box-sizing: border-box; color: #4271ae;">UserMixin</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">,</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;"> db</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">.</span><span class="typ" style="box-sizing: border-box; color: #4271ae;">Model</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">):</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">
</span><span class="com" style="box-sizing: border-box; color: #8e908c;"># ...</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">
followed </span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">=</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;"> db</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">.</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">relationship</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">(</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">
</span><span class="str" style="box-sizing: border-box; color: #718c00;">'User'</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">,</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;"> secondary</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">=</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">followers</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">,</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">
primaryjoin</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">=(</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">followers</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">.</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">c</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">.</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">follower_id </span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">==</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;"> id</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">),</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">
secondaryjoin</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">=(</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">followers</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">.</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">c</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">.</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">followed_id </span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">==</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;"> id</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">),</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">
backref</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">=</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">db</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">.</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">backref</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">(</span><span class="str" style="box-sizing: border-box; color: #718c00;">'followers'</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">,</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;"> lazy</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">=</span><span class="str" style="box-sizing: border-box; color: #718c00;">'dynamic'</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">),</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;"> lazy</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">=</span><span class="str" style="box-sizing: border-box; color: #718c00;">'dynamic'</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">)</span></code></pre>
<br />
<ul>
<li>フォローするなら、こんな感じ。</li>
</ul>
<div>
<br /></div>
<div>
</div>
<br />
<pre class="prettyprint" style="background: rgb(248, 248, 248); border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; font-family: Menlo, "Bitstream Vera Sans Mono", "DejaVu Sans Mono", Monaco, Consolas, monospace; font-size: 12px; line-height: 1.5; margin-bottom: 16px; overflow-wrap: break-word; overflow: auto; padding: 10px; word-break: break-all;"><code class="python" style="background-color: transparent; border-radius: 0px; box-sizing: border-box; color: inherit; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: inherit; padding: 0px; white-space: pre-wrap;"><span class="kwd" style="box-sizing: border-box; color: #8959a8;">class</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;"> </span><span class="typ" style="box-sizing: border-box; color: #4271ae;">User</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">(</span><span class="typ" style="box-sizing: border-box; color: #4271ae;">UserMixin</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">,</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;"> db</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">.</span><span class="typ" style="box-sizing: border-box; color: #4271ae;">Model</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">):</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">
</span><span class="com" style="box-sizing: border-box; color: #8e908c;">#...</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">
</span><span class="kwd" style="box-sizing: border-box; color: #8959a8;">def</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;"> follow</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">(</span><span class="kwd" style="box-sizing: border-box; color: #8959a8;">self</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">,</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;"> user</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">):</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">
</span><span class="kwd" style="box-sizing: border-box; color: #8959a8;">if</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;"> </span><span class="kwd" style="box-sizing: border-box; color: #8959a8;">not</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;"> </span><span class="kwd" style="box-sizing: border-box; color: #8959a8;">self</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">.</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">is_following</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">(</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">user</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">):</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">
</span><span class="kwd" style="box-sizing: border-box; color: #8959a8;">self</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">.</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">followed</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">.</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">append</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">(</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">user</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">)</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">
</span><span class="kwd" style="box-sizing: border-box; color: #8959a8;">def</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;"> unfollow</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">(</span><span class="kwd" style="box-sizing: border-box; color: #8959a8;">self</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">,</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;"> user</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">):</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">
</span><span class="kwd" style="box-sizing: border-box; color: #8959a8;">if</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;"> </span><span class="kwd" style="box-sizing: border-box; color: #8959a8;">self</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">.</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">is_following</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">(</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">user</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">):</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">
</span><span class="kwd" style="box-sizing: border-box; color: #8959a8;">self</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">.</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">followed</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">.</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">remove</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">(</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">user</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">)</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">
</span><span class="kwd" style="box-sizing: border-box; color: #8959a8;">def</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;"> is_following</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">(</span><span class="kwd" style="box-sizing: border-box; color: #8959a8;">self</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">,</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;"> user</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">):</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">
</span><span class="kwd" style="box-sizing: border-box; color: #8959a8;">return</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;"> </span><span class="kwd" style="box-sizing: border-box; color: #8959a8;">self</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">.</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">followed</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">.</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">filter</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">(</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">
followers</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">.</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">c</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">.</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">followed_id </span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">==</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;"> user</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">.</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">id</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">).</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">count</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">()</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;"> </span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">></span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;"> </span><span class="lit" style="box-sizing: border-box; color: #f5871f;">0</span></code></pre>
<br />
routingしてあげるときはこんな感じ。<br />
<br />
<div class="code_title" style="background-color: #cccccc; box-sizing: border-box; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 12.6px; line-height: 18.9px; margin-bottom: -4px; padding-bottom: 4px; padding-left: 10px;">
<i style="box-sizing: border-box;">app/routes.py</i>: Follow and unfollow routes.</div>
<pre class="prettyprint" style="background: rgb(248, 248, 248); border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; font-family: Menlo, "Bitstream Vera Sans Mono", "DejaVu Sans Mono", Monaco, Consolas, monospace; font-size: 12px; line-height: 1.5; margin-bottom: 16px; overflow-wrap: break-word; overflow: auto; padding: 10px; word-break: break-all;"><code class="python" style="background-color: transparent; border-radius: 0px; box-sizing: border-box; color: inherit; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: inherit; padding: 0px; white-space: pre-wrap;"><span class="lit" style="box-sizing: border-box; color: #f5871f;">@app</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">.</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">route</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">(</span><span class="str" style="box-sizing: border-box; color: #718c00;">'/follow/<username>'</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">)</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">
</span><span class="lit" style="box-sizing: border-box; color: #f5871f;">@login_required</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">
</span><span class="kwd" style="box-sizing: border-box; color: #8959a8;">def</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;"> follow</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">(</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">username</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">):</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">
user </span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">=</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;"> </span><span class="typ" style="box-sizing: border-box; color: #4271ae;">User</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">.</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">query</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">.</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">filter_by</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">(</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">username</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">=</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">username</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">).</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">first</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">()</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">
</span><span class="kwd" style="box-sizing: border-box; color: #8959a8;">if</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;"> user </span><span class="kwd" style="box-sizing: border-box; color: #8959a8;">is</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;"> </span><span class="kwd" style="box-sizing: border-box; color: #8959a8;">None</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">:</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">
flash</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">(</span><span class="str" style="box-sizing: border-box; color: #718c00;">'User {} not found.'</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">.</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">format</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">(</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">username</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">))</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">
</span><span class="kwd" style="box-sizing: border-box; color: #8959a8;">return</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;"> redirect</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">(</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">url_for</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">(</span><span class="str" style="box-sizing: border-box; color: #718c00;">'index'</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">))</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">
</span><span class="kwd" style="box-sizing: border-box; color: #8959a8;">if</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;"> user </span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">==</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;"> current_user</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">:</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">
flash</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">(</span><span class="str" style="box-sizing: border-box; color: #718c00;">'You cannot follow yourself!'</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">)</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">
</span><span class="kwd" style="box-sizing: border-box; color: #8959a8;">return</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;"> redirect</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">(</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">url_for</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">(</span><span class="str" style="box-sizing: border-box; color: #718c00;">'user'</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">,</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;"> username</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">=</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">username</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">))</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">
current_user</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">.</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">follow</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">(</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">user</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">)</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">
db</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">.</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">session</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">.</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">commit</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">()</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">
flash</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">(</span><span class="str" style="box-sizing: border-box; color: #718c00;">'You are following {}!'</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">.</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">format</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">(</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">username</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">))</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">
</span><span class="kwd" style="box-sizing: border-box; color: #8959a8;">return</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;"> redirect</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">(</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">url_for</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">(</span><span class="str" style="box-sizing: border-box; color: #718c00;">'user'</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">,</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;"> username</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">=</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">username</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">))</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">
</span><span class="lit" style="box-sizing: border-box; color: #f5871f;">@app</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">.</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">route</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">(</span><span class="str" style="box-sizing: border-box; color: #718c00;">'/unfollow/<username>'</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">)</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">
</span><span class="lit" style="box-sizing: border-box; color: #f5871f;">@login_required</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">
</span><span class="kwd" style="box-sizing: border-box; color: #8959a8;">def</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;"> unfollow</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">(</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">username</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">):</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">
user </span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">=</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;"> </span><span class="typ" style="box-sizing: border-box; color: #4271ae;">User</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">.</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">query</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">.</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">filter_by</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">(</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">username</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">=</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">username</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">).</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">first</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">()</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">
</span><span class="kwd" style="box-sizing: border-box; color: #8959a8;">if</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;"> user </span><span class="kwd" style="box-sizing: border-box; color: #8959a8;">is</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;"> </span><span class="kwd" style="box-sizing: border-box; color: #8959a8;">None</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">:</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">
flash</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">(</span><span class="str" style="box-sizing: border-box; color: #718c00;">'User {} not found.'</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">.</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">format</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">(</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">username</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">))</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">
</span><span class="kwd" style="box-sizing: border-box; color: #8959a8;">return</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;"> redirect</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">(</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">url_for</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">(</span><span class="str" style="box-sizing: border-box; color: #718c00;">'index'</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">))</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">
</span><span class="kwd" style="box-sizing: border-box; color: #8959a8;">if</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;"> user </span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">==</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;"> current_user</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">:</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">
flash</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">(</span><span class="str" style="box-sizing: border-box; color: #718c00;">'You cannot unfollow yourself!'</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">)</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">
</span><span class="kwd" style="box-sizing: border-box; color: #8959a8;">return</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;"> redirect</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">(</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">url_for</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">(</span><span class="str" style="box-sizing: border-box; color: #718c00;">'user'</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">,</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;"> username</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">=</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">username</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">))</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">
current_user</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">.</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">unfollow</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">(</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">user</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">)</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">
db</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">.</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">session</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">.</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">commit</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">()</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">
flash</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">(</span><span class="str" style="box-sizing: border-box; color: #718c00;">'You are not following {}.'</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">.</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">format</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">(</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">username</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">))</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">
</span><span class="kwd" style="box-sizing: border-box; color: #8959a8;">return</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;"> redirect</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">(</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">url_for</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">(</span><span class="str" style="box-sizing: border-box; color: #718c00;">'user'</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">,</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;"> username</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">=</span><span class="pln" style="box-sizing: border-box; color: #4d4d4c;">username</span><span class="pun" style="box-sizing: border-box; color: #4d4d4c;">))</span></code></pre>
<br />
<br />
<br />
<br />
参考<br />
<br />
<ul>
<li><a href="https://qiita.com/msrks/items/d9c327dd81749ec01d1d">Flask-Loginの使い方</a></li>
<li><a href="https://qiita.com/shirakiya/items/0114d51e9c189658002e">Flask + SQLAlchemyプロジェクトを始める手順</a></li>
<li><a href="http://flask-sqlalchemy.pocoo.org/2.3/models/">Declaring Models¶</a></li>
<li><a href="http://flask-sqlalchemy.pocoo.org/2.3/models/">The Flask Mega-Tutorial Part VIII: Followers</a></li>
<li><a href="https://docs.sqlalchemy.org/en/latest/orm/basic_relationships.html">Basic Relationship Patterns</a></li>
</ul>
Unknownnoreply@blogger.comtag:blogger.com,1999:blog-2592581639714884938.post-24158296782675895772018-08-26T16:16:00.000+09:002018-08-26T19:33:11.439+09:00『Googleアナリティクス分析・改善のすべてがわかる本』を読んだので学んだこととか調べたことをまとめる。独学でGoogle Analyticsを使っていたので、ちゃんとプロの人がどうやって使っているんのかを知りたくなったので、『Googleアナリティクス分析・改善のすべてがわかる本』を購入し、2-3日で読了。<br />
<br />
<a name='more'></a><br />
<br />
<br />
<div class="amazlet-box" style="margin-bottom: 0px;">
<div class="amazlet-image" style="float: left; margin: 0px 12px 1px 0px;">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/B074M8F2KY/kdmgs110-22/ref=nosim/" name="amazletlink" target="_blank"><img alt="「やりたいこと」からパッと引ける Google アナリティクス分析・改善のすべてがわかる本" src="https://images-fe.ssl-images-amazon.com/images/I/51uHg8fZfdL._SL160_.jpg" style="border: none;" /></a></div>
<div class="amazlet-info" style="line-height: 120%; margin-bottom: 10px;">
<div class="amazlet-name" style="line-height: 120%; margin-bottom: 10px;">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/B074M8F2KY/kdmgs110-22/ref=nosim/" name="amazletlink" target="_blank">「やりたいこと」からパッと引ける Google アナリティクス分析・改善のすべてがわかる本</a><br />
<div class="amazlet-powered-date" style="font-size: 80%; line-height: 120%; margin-top: 5px;">
posted with <a href="http://www.amazlet.com/" target="_blank" title="amazlet">amazlet</a> at 18.08.26</div>
</div>
<div class="amazlet-detail">
ソーテック社 (2017-08-09)<br />
売り上げランキング: 10,895</div>
<div class="amazlet-sub-info" style="float: left;">
<div class="amazlet-link" style="margin-top: 5px;">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/B074M8F2KY/kdmgs110-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jpで詳細を見る</a></div>
</div>
</div>
<div class="amazlet-footer" style="clear: left;">
</div>
</div>
<br />
<h4>
ビジネスユースケースからAnalyticsを見れる</h4>
<br />
本著のよかったのは、実際のビジネスの課題から、どのデータを見るべきかがまとまっていた点だった。例えば、離脱率を改善する時に見るべき指標は?とか、コンテンツ改善する時に見るべき指標は?とか、そういう点でKPIをたてるときにある程度まとまっていてよかった。<br />
<br />
<blockquote class="twitter-tweet" data-lang="ja">
<div dir="ltr" lang="ja">
データによる意思決定にフォーカスしているのが非常によかった。どういうKPIを置いた時に、その下のKPIは何であるか見たいな内容を、実際のGoogle Analyticsの画面を見ながら解説する感じ。概要がわかったので、実際のデータで試してみよう! <a href="https://t.co/DDuJLr5nsI">https://t.co/DDuJLr5nsI</a></div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/1033579501740077057?ref_src=twsrc%5Etfw">2018年8月26日</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<blockquote class="twitter-tweet" data-lang="ja">
<div dir="ltr" lang="ja">
小川さん(<a href="https://twitter.com/ryuka01?ref_src=twsrc%5Etfw">@ryuka01</a> )の「Googleアナリティクス分析・改善のすべてがわかる本」 読了。ユースケースからデータを見て改善する流れがメイン。例えば、離脱率をデバイスごとに見て、スマホ対応の課題特定、リライトすべき記事を判断する指標とか、データで意思決定するためのノウハウが詰まっていた。 <a href="https://t.co/XiwPoOCQIq">pic.twitter.com/XiwPoOCQIq</a></div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/1033576749387280385?ref_src=twsrc%5Etfw">2018年8月26日</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<h4>
<br />どのタイミングでメルマガを打つべきか</h4>
<br />
<blockquote class="twitter-tweet" data-lang="ja">
<div dir="ltr" lang="ja">
どのタイミングでメルマガを打つべきか?<br />
<br />
▶︎意思決定のための指標<br />
・曜日別、時間別のユーザー数が多いところ<a href="https://twitter.com/hashtag/Google%E3%82%A2%E3%83%8A%E3%83%AA%E3%83%86%E3%82%A3%E3%82%AF%E3%82%B9%E5%88%86%E6%9E%90%E3%83%BB%E6%94%B9%E5%96%84%E3%81%AE%E3%81%99%E3%81%B9%E3%81%A6%E3%81%8C%E3%82%8F%E3%81%8B%E3%82%8B%E6%9C%AC?src=hash&ref_src=twsrc%5Etfw">#Googleアナリティクス分析・改善のすべてがわかる本</a> <a href="https://t.co/dUl9Vt0ef7">pic.twitter.com/dUl9Vt0ef7</a></div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/1033592909163982853?ref_src=twsrc%5Etfw">2018年8月26日</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<h4>
施策の効果検証</h4>
<br />
<br />
<blockquote class="twitter-tweet" data-lang="ja">
<div dir="ltr" lang="ja">
▶︎施策の検証<br />
<br />
・特異点が起こった時の説明ができる必要がある<br />
・計測ができるように、施策とパラメーターをほかの人がみれるようにする<br />
<br />
▶︎cvの分析で確認すべき変数<br />
<br />
・ユーザーの年齢層<br />
・新規訪問vs再訪<br />
・地理情報データ<br />
・デバイス<a href="https://twitter.com/hashtag/Google%E3%82%A2%E3%83%8A%E3%83%AA%E3%83%86%E3%82%A3%E3%82%AF%E3%82%B9%E5%88%86%E6%9E%90%E3%83%BB%E6%94%B9%E5%96%84%E3%81%AE%E3%81%99%E3%81%B9%E3%81%A6%E3%81%8C%E3%82%8F%E3%81%8B%E3%82%8B%E6%9C%AC?src=hash&ref_src=twsrc%5Etfw">#Googleアナリティクス分析・改善のすべてがわかる本</a> <a href="https://t.co/ngpDUc3gDI">pic.twitter.com/ngpDUc3gDI</a></div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/1033593782745219073?ref_src=twsrc%5Etfw">2018年8月26日</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<h4>
レスポンシブ対応</h4>
<br />
<blockquote class="twitter-tweet" data-lang="ja">
<div dir="ltr" lang="ja">
▶︎CVRの検証<br />
<br />
・特定の端末で離脱が起こっている場合、レスポンシブ対応に失敗している可能性がある。そのように端末でのCVRを確認すべき<a href="https://twitter.com/hashtag/Google%E3%82%A2%E3%83%8A%E3%83%AA%E3%83%86%E3%82%A3%E3%82%AF%E3%82%B9%E5%88%86%E6%9E%90%E3%83%BB%E6%94%B9%E5%96%84%E3%81%AE%E3%81%99%E3%81%B9%E3%81%A6%E3%81%8C%E3%82%8F%E3%81%8B%E3%82%8B%E6%9C%AC?src=hash&ref_src=twsrc%5Etfw">#Googleアナリティクス分析・改善のすべてがわかる本</a> <a href="https://t.co/JS6sIV06Mn">pic.twitter.com/JS6sIV06Mn</a></div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/1033594454538518528?ref_src=twsrc%5Etfw">2018年8月26日</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<h4>
間接的な施策の効果検証</h4>
<br />
<blockquote class="twitter-tweet" data-lang="ja">
<div dir="ltr" lang="ja">
▶︎間接的な施策<br />
・最初にリスティング広告、次にディスプレイ広告、さらにリフェラルからLP流入みたいな指標はアトリビューションから確認できる。認知施策の効果検証とかが可能<a href="https://twitter.com/hashtag/Google%E3%82%A2%E3%83%8A%E3%83%AA%E3%83%86%E3%82%A3%E3%82%AF%E3%82%B9%E5%88%86%E6%9E%90%E3%83%BB%E6%94%B9%E5%96%84%E3%81%AE%E3%81%99%E3%81%B9%E3%81%A6%E3%81%8C%E3%82%8F%E3%81%8B%E3%82%8B%E6%9C%AC?src=hash&ref_src=twsrc%5Etfw">#Googleアナリティクス分析・改善のすべてがわかる本</a> <a href="https://t.co/JBah3Xl7xs">pic.twitter.com/JBah3Xl7xs</a></div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/1033595217914421249?ref_src=twsrc%5Etfw">2018年8月26日</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<h4>
潜在顧客と、顕在顧客向けの施策</h4>
<br />
<blockquote class="twitter-tweet" data-lang="ja">
<div dir="ltr" lang="ja">
▶︎潜在顧客と顕在顧客の施策を分けて、全体設計する<a href="https://twitter.com/hashtag/Google%E3%82%A2%E3%83%8A%E3%83%AA%E3%83%86%E3%82%A3%E3%82%AF%E3%82%B9%E5%88%86%E6%9E%90%E3%83%BB%E6%94%B9%E5%96%84%E3%81%AE%E3%81%99%E3%81%B9%E3%81%A6%E3%81%8C%E3%82%8F%E3%81%8B%E3%82%8B%E6%9C%AC?src=hash&ref_src=twsrc%5Etfw">#Googleアナリティクス分析・改善のすべてがわかる本</a> <a href="https://t.co/A65jKGJeNO">pic.twitter.com/A65jKGJeNO</a></div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/1033595818417123328?ref_src=twsrc%5Etfw">2018年8月26日</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<h4>
離脱率改善</h4>
<br />
<blockquote class="twitter-tweet" data-lang="ja">
<div dir="ltr" lang="ja">
▶︎離脱率改善<br />
・すべてのページの離脱率を改善する必要がない<br />
・例えば、企業概要とかは連絡先が欲しいだけかもしれない<a href="https://twitter.com/hashtag/Google%E3%82%A2%E3%83%8A%E3%83%AA%E3%83%86%E3%82%A3%E3%82%AF%E3%82%B9%E5%88%86%E6%9E%90%E3%83%BB%E6%94%B9%E5%96%84%E3%81%AE%E3%81%99%E3%81%B9%E3%81%A6%E3%81%8C%E3%82%8F%E3%81%8B%E3%82%8B%E6%9C%AC?src=hash&ref_src=twsrc%5Etfw">#Googleアナリティクス分析・改善のすべてがわかる本</a> <a href="https://t.co/BovURiGx9i">pic.twitter.com/BovURiGx9i</a></div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/1033597072702754816?ref_src=twsrc%5Etfw">2018年8月26日</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<blockquote class="twitter-tweet" data-lang="ja">
<div dir="ltr" lang="ja">
▶︎離脱改善<br />
・ページ速度と離脱率が関係している可能性がある<br />
・これらは散布図にかいて、相関係数等をもとめることで、読み込み速度が離脱しているか簡易に計測することができる<br />
・ページ速度の改善の施策のプライオリティで、小さく検証できる<a href="https://twitter.com/hashtag/Google%E3%82%A2%E3%83%8A%E3%83%AA%E3%83%86%E3%82%A3%E3%82%AF%E3%82%B9%E5%88%86%E6%9E%90%E3%83%BB%E6%94%B9%E5%96%84%E3%81%AE%E3%81%99%E3%81%B9%E3%81%A6%E3%81%8C%E3%82%8F%E3%81%8B%E3%82%8B%E6%9C%AC?src=hash&ref_src=twsrc%5Etfw">#Googleアナリティクス分析・改善のすべてがわかる本</a> <a href="https://t.co/22X5rMsi72">pic.twitter.com/22X5rMsi72</a></div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/1033598906049822720?ref_src=twsrc%5Etfw">2018年8月26日</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<h4>
コンバージョンファネルレポート</h4>
<br />
<blockquote class="twitter-tweet" data-lang="ja">
<div dir="ltr" lang="ja">
▶︎コンバージョンファネルレポート<br />
<br />
・LP → 申し込みフォーム → Thanksページへの遷移率みたいなものが見たい時に、ファネルレポートを使うとみれる<a href="https://twitter.com/hashtag/Google%E3%82%A2%E3%83%8A%E3%83%AA%E3%83%86%E3%82%A3%E3%82%AF%E3%82%B9%E5%88%86%E6%9E%90%E3%83%BB%E6%94%B9%E5%96%84%E3%81%AE%E3%81%99%E3%81%B9%E3%81%A6%E3%81%8C%E3%82%8F%E3%81%8B%E3%82%8B%E6%9C%AC?src=hash&ref_src=twsrc%5Etfw">#Googleアナリティクス分析・改善のすべてがわかる本</a> <a href="https://t.co/9Z8OT7KAMD">pic.twitter.com/9Z8OT7KAMD</a></div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/1033599957612163073?ref_src=twsrc%5Etfw">2018年8月26日</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
ファネルレポートについてはこちらで解説されている。<br />
<br />
<a href="https://qiita.com/Yamotty/items/a0673b6611ed4e14f75c">> GoogleAnalyticsのカスタムレポートを使って手軽に経路×ファネル分析を始める</a><br />
<br />
<br />
<div style="background-color: white; box-sizing: inherit; color: #333333; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Hiragino Kaku Gothic ProN", メイリオ, meiryo, sans-serif; font-size: 16px; line-height: 1.9;">
画面上部にある<code style="background-color: #eeeeee; border-radius: 3px; box-sizing: inherit; color: #4a4a4a; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 1em; padding: 0.1em 0.4em;">[カスタム]->[+新しいカスタムレポート]</code>と進み、オリジナルのレポートを作成する。以下Qiitaから引用。</div>
<blockquote class="tr_bq" style="background-color: white; box-sizing: inherit; color: #333333; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Hiragino Kaku Gothic ProN", メイリオ, meiryo, sans-serif; font-size: 16px; line-height: 1.9; margin-top: 1.5em;">
各設定項目は以下を参考に。<ul style="background-color: white; box-sizing: inherit; color: #333333; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Hiragino Kaku Gothic ProN", メイリオ, meiryo, sans-serif; font-size: 16px; line-height: 1.9; list-style-image: initial; list-style-position: initial; margin: 1.5em 0px; padding: 0px 0px 0px 1.5em;">
<li style="box-sizing: inherit;"><code style="background-color: #eeeeee; border-radius: 3px; box-sizing: inherit; color: #4a4a4a; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 1em; padding: 0.1em 0.4em;">指標グループ</code>:レポートに表示させるパラメータ項目を設定する。ここでは前項にて設定した各ゴールの完了数を設定。下記例ではその他セッション、直帰率等も横並びで比較している。</li>
</ul>
<ul style="background-color: white; box-sizing: inherit; color: #333333; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Hiragino Kaku Gothic ProN", メイリオ, meiryo, sans-serif; font-size: 16px; line-height: 1.9; list-style-image: initial; list-style-position: initial; margin: 1.5em 0px; padding: 0px 0px 0px 1.5em;">
<li style="box-sizing: inherit;"><code style="background-color: #eeeeee; border-radius: 3px; box-sizing: inherit; color: #4a4a4a; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 1em; padding: 0.1em 0.4em;">ディメンジョンの詳細</code>:レポートの切り口を設定する。ここではデフォルトチャネルグループ(サイトへの流入チャネル)を設定した。この他おすすめの設定としては「デバイス」「新規とリピーター」など。ユーザーの属性ごとに比較検討したいディメンジョンを設定する。</li>
</ul>
</blockquote>
<a href="https://kobit.in/archives/5962">> コンバージョン率最適化のステップ〜Part2:ファネル分析による課題発見</a><br />
<br />
<blockquote class="tr_bq">
ファネル分析をレポート出力するツール<br />Google Analytics<br />ファネル分析を自動で行うには、Google Analyticsの目標到達プロセスが便利です。目標到達プロセスのレポートでは各ステップへ進んだユーザーの数が視覚的に示され、離脱率が自動的に計算されます。各ステップに該当するURLを指定するだけで目標到達プロセスの設定ができ、非常に簡単です。</blockquote>
<br />
<br />
<h4>
ユーザーエクスプローラー</h4>
<br />
<blockquote class="twitter-tweet" data-lang="ja">
<div dir="ltr" lang="ja">
▶︎ユーザーエクスポローラー<br />
<br />
・ユーザー一人一人の動きをおえる<a href="https://twitter.com/hashtag/Google%E3%82%A2%E3%83%8A%E3%83%AA%E3%83%86%E3%82%A3%E3%82%AF%E3%82%B9%E5%88%86%E6%9E%90%E3%83%BB%E6%94%B9%E5%96%84%E3%81%AE%E3%81%99%E3%81%B9%E3%81%A6%E3%81%8C%E3%82%8F%E3%81%8B%E3%82%8B%E6%9C%AC?src=hash&ref_src=twsrc%5Etfw">#Googleアナリティクス分析・改善のすべてがわかる本</a> <a href="https://t.co/g5sA9fQsBS">pic.twitter.com/g5sA9fQsBS</a></div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/1033600415714004992?ref_src=twsrc%5Etfw">2018年8月26日</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
詳しいことはここにまとめた。<br />
<a href="https://webtan.impress.co.jp/e/2016/05/12/22763">> Googleアナリティクス期待の新機能「ユーザーエクスプローラ」を徹底解説</a><br />
<br />
<br />
<br />
<h4>
コンテンツの評価指標</h4>
<br />
<br />
<blockquote class="twitter-tweet" data-lang="ja">
<div dir="ltr" lang="ja">
▶︎コンテンツの評価指標<br />
<br />
・集客力/閲覧力/誘導力/成果力をKPIに置く<br />
<br />
これはアフィリエイト界隈でもコンテンツ改善にめちゅくちゃ使えそうだと思った<a href="https://twitter.com/hashtag/Google%E3%82%A2%E3%83%8A%E3%83%AA%E3%83%86%E3%82%A3%E3%82%AF%E3%82%B9%E5%88%86%E6%9E%90%E3%83%BB%E6%94%B9%E5%96%84%E3%81%AE%E3%81%99%E3%81%B9%E3%81%A6%E3%81%8C%E3%82%8F%E3%81%8B%E3%82%8B%E6%9C%AC?src=hash&ref_src=twsrc%5Etfw">#Googleアナリティクス分析・改善のすべてがわかる本</a> <a href="https://t.co/vrBd85STOq">pic.twitter.com/vrBd85STOq</a></div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/1033602143167467521?ref_src=twsrc%5Etfw">2018年8月26日</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<br />
<br />
<div class="amazlet-image" style="float: left; margin: 0px 12px 1px 0px;">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/B074M8F2KY/kdmgs110-22/ref=nosim/" name="amazletlink" target="_blank"><img alt="「やりたいこと」からパッと引ける Google アナリティクス分析・改善のすべてがわかる本" src="https://images-fe.ssl-images-amazon.com/images/I/51uHg8fZfdL._SL160_.jpg" style="border: none;" /></a></div>
<div class="amazlet-info" style="line-height: 19.2px; margin-bottom: 10px;">
<div class="amazlet-name" style="line-height: 19.2px; margin-bottom: 10px;">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/B074M8F2KY/kdmgs110-22/ref=nosim/" name="amazletlink" target="_blank">「やりたいこと」からパッと引ける Google アナリティクス分析・改善のすべてがわかる本</a><br />
<div class="amazlet-powered-date" style="font-size: 12.8px; line-height: 15.36px; margin-top: 5px;">
posted with <a href="http://www.amazlet.com/" target="_blank" title="amazlet">amazlet</a> at 18.08.26</div>
</div>
<div class="amazlet-detail">
ソーテック社 (2017-08-09)<br />
売り上げランキング: 10,895</div>
<div class="amazlet-sub-info" style="float: left;">
<div class="amazlet-link" style="margin-top: 5px;">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/B074M8F2KY/kdmgs110-22/ref=nosim/" name="amazletlink" target="_blank">Ama</a></div>
</div>
</div>
<br />Unknownnoreply@blogger.comtag:blogger.com,1999:blog-2592581639714884938.post-9812885795236314902018-08-25T17:42:00.001+09:002018-08-25T17:42:35.379+09:00ビジネスマンも読むべき!ゆうこすの『SNSで夢を叶える ニートだった私の人生を変えた発信力の育て方』モテクリエイターのゆうこすさんの書籍ゆうこすの『SNSで夢を叶える ニートだった私の人生を変えた発信力の育て方』を読んだ。<br />
<div>
<br /></div>
<div>
<div class="amazlet-box" style="margin-bottom: 0px;">
<div class="amazlet-image" style="float: left; margin: 0px 12px 1px 0px;">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/B075G6VMWD/kdmgs110-22/ref=nosim/" name="amazletlink" target="_blank"><img alt="SNSで夢を叶える ニートだった私の人生を変えた発信力の育て方" src="https://images-fe.ssl-images-amazon.com/images/I/41UBwp8JfAL._SL160_.jpg" style="border: none;" /></a></div>
<div class="amazlet-info" style="line-height: 120%; margin-bottom: 10px;">
<div class="amazlet-name" style="line-height: 120%; margin-bottom: 10px;">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/B075G6VMWD/kdmgs110-22/ref=nosim/" name="amazletlink" target="_blank">SNSで夢を叶える ニートだった私の人生を変えた発信力の育て方</a><br />
<div class="amazlet-powered-date" style="font-size: 80%; line-height: 120%; margin-top: 5px;">
posted with <a href="http://www.amazlet.com/" target="_blank" title="amazlet">amazlet</a> at 18.08.25</div>
</div>
<div class="amazlet-detail">
KADOKAWA / 角川マガジンズ (2017-09-14)<br />
売り上げランキング: 3,567</div>
<div class="amazlet-sub-info" style="float: left;">
<div class="amazlet-link" style="margin-top: 5px;">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/B075G6VMWD/kdmgs110-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jpで詳細を見る</a></div>
</div>
</div>
<div class="amazlet-footer" style="clear: left;">
</div>
</div>
<br /></div>
<div>
<h4>
SNSの運用、ブランディングの教科書としてめちゃくちゃよかった</h4>
<br />
普通にこれ一冊読めば、SNSの運用方法が包括的に理解できると思った。小手先のノウハウだけではなく、ブランディングとは何かとか、なにをKPIにすべきかとか、そういうところもビジネスマンじゃない人でもわかるような言葉で書かれていたので、おすすめでした。<br />
<br />
あとそれ以上に、モテクリエイターってめちゃくちゃ大事な仕事だなぁと。突き詰めるとブランディングのお仕事につながるなぁと。<br />
<br />
<br />
「モテる」って言葉、とても男性中心的にみてたけど、実はみんなに好かれるというブランディングに近い概念なんだなぁ〜と思って、読んでて実に納得してしまった。彼女は多分マーケティングとかそういう意図じゃなくて、本当にモテたい!と思っている人に対して価値を提供しようとしているとおもうんだけど、本質的に企業でもなんでも、そのサービスに対して、ユーザーからモテたいとおもっていると考えていて。そうなるとこの「モテクリエイター」ていう仕事はどの領域でも応用が聞く。個人事業主であれ、法人であれ、なんであれわからんけど。<br />
<br />
今情報が溢れている時代、商品そのもの自体の価値って差別化できなくて、誰が提供しているのかとか、どうやって作られているのかとか、そういう体験込みで商品の価値がきまると思うんだけど、その商品が個人に紐づいているパターンの場合、モテるってすごく大事だよなぁ。<br />
<br />
あと、ソーシャルの運用方法がすごくよかった。ちゃんとターゲティングと、メディアの強みからSNSを選ぶべきで、相当考えて運用されているんだなぁと感動した。YoutubeやTwitter、Instagramなどの導線設計とかもものすごく考えられているし、そのコミュニティでなにが求められているのかとかもものすごく考えれられていて、学ぶことが多かった。<br />
<br />
あと、実はデータで分析しながらツイートやらインスタの投稿とかみられているということで、本気で伸ばしている人はこういう努力しているんだなぁと感じた。<br />
<br />
いつもは要約や引用しているけど、ちょっと時間がないので感想だけまとめた。<br />
<br />
<h4>
読みながらツイッターで書いた感想とか</h4>
<br />
<blockquote class="twitter-tweet" data-lang="ja">
<div dir="ltr" lang="ja">
ゆうこす氏の書籍、メディアの使い分けがすごく詳しく書いてあって、下手な有料note読むよりもこちらの方が圧倒的によい。ブランディングについても哲学的にめちゃくちゃ優れている。施策も素晴らしいな。</div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/1033263557419229184?ref_src=twsrc%5Etfw">2018年8月25日</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<blockquote class="twitter-tweet" data-lang="ja">
<div dir="ltr" lang="ja">
ゆうこす氏の本、自分がデータで検証したことが全部書いてあって、ソーシャルの分析力にビビる。。。すごいな。。。結局エモいことの方が大事とか、そのヘンもデータで出てるしなぁ。</div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/1033256056976097280?ref_src=twsrc%5Etfw">2018年8月25日</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<blockquote class="twitter-tweet" data-lang="ja">
<div dir="ltr" lang="ja">
糸井さんの本で、「正直が最高戦略」って書いてあったけど、エモさって正直の中からしか出てこないから、隠さずに思っていること、本音をぶちまけるってのがとても大事なんじゃろうな。</div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/1033256673920483329?ref_src=twsrc%5Etfw">2018年8月25日</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<div>
<div class="amazlet-box" style="margin-bottom: 0px;">
<div class="amazlet-image" style="float: left; margin: 0px 12px 1px 0px;">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/B075G6VMWD/kdmgs110-22/ref=nosim/" name="amazletlink" target="_blank"><img alt="SNSで夢を叶える ニートだった私の人生を変えた発信力の育て方" src="https://images-fe.ssl-images-amazon.com/images/I/41UBwp8JfAL._SL160_.jpg" style="border: none;" /></a></div>
<div class="amazlet-info" style="line-height: 120%; margin-bottom: 10px;">
<div class="amazlet-name" style="line-height: 120%; margin-bottom: 10px;">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/B075G6VMWD/kdmgs110-22/ref=nosim/" name="amazletlink" target="_blank">SNSで夢を叶える ニートだった私の人生を変えた発信力の育て方</a><br />
<div class="amazlet-powered-date" style="font-size: 80%; line-height: 120%; margin-top: 5px;">
posted with <a href="http://www.amazlet.com/" target="_blank" title="amazlet">amazlet</a> at 18.08.25</div>
</div>
<div class="amazlet-detail">
KADOKAWA / 角川マガジンズ (2017-09-14)<br />
売り上げランキング: 3,567</div>
<div class="amazlet-sub-info" style="float: left;">
<div class="amazlet-link" style="margin-top: 5px;">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/B075G6VMWD/kdmgs110-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jpで詳細を見る</a></div>
</div>
</div>
<div class="amazlet-footer" style="clear: left;">
</div>
</div>
<br /></div>
<div>
<br />
<br />
<br /></div>
</div>
Unknownnoreply@blogger.comtag:blogger.com,1999:blog-2592581639714884938.post-91631235917006536722018-08-25T15:43:00.000+09:002018-08-25T15:43:06.462+09:0017年前に書かれた『インターネット的(糸井重里)』が現代の予言書だった前にFictyの二宮さんに、「え、読んでないの?」と煽られたので、糸井重里さんの「インターネット的」を読んでみた。2-3日で読了。面白かったところメモしておく。2001年に出版された本なんだけど、現代の予言書っぽくてすさまじかった。この時はスマホもないし、ソーシャルネットワークもない。ビビる。<br />
<br />
<br />
<div class="amazlet-box" style="margin-bottom: 0px;">
<div class="amazlet-image" style="float: left; margin: 0px 12px 1px 0px;">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/B00799SLAG/kdmgs110-22/ref=nosim/" name="amazletlink" target="_blank"><img alt="インターネット的 (PHP新書)" src="https://images-fe.ssl-images-amazon.com/images/I/416u%2BALLJuL._SL160_.jpg" style="border: none;" /></a></div>
<div class="amazlet-info" style="line-height: 120%; margin-bottom: 10px;">
<div class="amazlet-name" style="line-height: 120%; margin-bottom: 10px;">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/B00799SLAG/kdmgs110-22/ref=nosim/" name="amazletlink" target="_blank">インターネット的 (PHP新書)</a><br />
<div class="amazlet-powered-date" style="font-size: 80%; line-height: 120%; margin-top: 5px;">
posted with <a href="http://www.amazlet.com/" target="_blank" title="amazlet">amazlet</a> at 18.08.25</div>
</div>
<div class="amazlet-detail">
PHP研究所 (2007-11-13)<br />
売り上げランキング: 36,246</div>
<div class="amazlet-sub-info" style="float: left;">
<div class="amazlet-link" style="margin-top: 5px;">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/B00799SLAG/kdmgs110-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jpで詳細を見る</a></div>
</div>
</div>
<div class="amazlet-footer" style="clear: left;">
</div>
</div>
<br />
<blockquote class="tr_bq">
糸井 重里(いとい しげさと、1948年11月10日 - )は、日本のコピーライター、エッセイスト、タレント、作詞家。株式会社ほぼ日[1]代表取締役社長。フィールズ株式会社社外取締役。妻は女優の樋口可南子。愛犬はジャック・ラッセル・テリアのブイヨン、日本モノポリー協会会長。血液型はA型[2]。</blockquote>
wikipediaより引用<br />
<a href="https://ja.wikipedia.org/wiki/%E7%B3%B8%E4%BA%95%E9%87%8D%E9%87%8C">https://ja.wikipedia.org/wiki/%E7%B3%B8%E4%BA%95%E9%87%8D%E9%87%8C</a><br />
<br />
<br />
<blockquote class="twitter-tweet" data-lang="ja">
<div dir="ltr" lang="ja">
世界がインターネット的になっていくと、裸の評価になるから今以上に格差が広がりそうな気がする。うーん、示唆深い。これが2001年の本というのがまた面白い。ようやく世界がインターネット的になってきたのかも。</div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/1032423030423580673?ref_src=twsrc%5Etfw">2018年8月23日</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<blockquote class="twitter-tweet" data-lang="ja">
<div dir="ltr" lang="ja">
まるで預言書レベルですほんと</div>
— nino 🐶🎧🐱 (@aktona) <a href="https://twitter.com/aktona/status/1032431215331041281?ref_src=twsrc%5Etfw">2018年8月23日</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<blockquote class="twitter-tweet" data-lang="ja">
<div dir="ltr" lang="ja">
すごいでしょ。ここまで見通すの、本当にすごいよね。</div>
— 加藤 貞顕 (@sadaaki) <a href="https://twitter.com/sadaaki/status/1032438472894627840?ref_src=twsrc%5Etfw">2018年8月23日</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<a name='more'></a><br /><br />
<h4>
正直が最大の戦略である</h4>
計算高い人よりも、常に正直な人が成功しやすいみたいな社会実験の例があるらしい。<br />
<br />
<blockquote class="tr_bq">
インターネットにつながっていない人たちと、ちょっとだけ先につながった人たちが重なる。これを実現させたいと思ってぼくが思い出したのは、“〝 正直は最大の戦略である”〟 という言葉です。これは社会心理学者の山岸俊男さんの著書の中にある言葉で、ぼくは非常に救われた思いがしました。</blockquote>
<br />
<h4>
インターネット的とは</h4>
<br />
<b>①リンク</b><br />
<br />
<blockquote class="tr_bq">
インターネット的といったとき、軸になるもののひとつは「リンク」という発想です。 複雑な情報のカタマリどうしが互いにつながっていることが、インターネットの仕組みそのもの。いままでのつながり方というのは、有用な情報どうしが互いに機能でつながっていることが多かったわけです。これをするために、こういう情報はないか”〟 と要請があったときに、“〝 はい、その情報なら、ここにありますッ”〟 と差し出すのが、いままでの「ジョイント」的なつながり。いわば、問いと答えのセットのようなつながりですね。辞書をひくのは、こういう感じだったと思います。 しかし、「リンク」というつながり方はそういうものではありません。もともと、「問い」のほうにも、「答え」のほうにも、たくさんの付属する情報があるのですが、それが有機的につながりあうというのが魅力的です。周辺情報だとか、リンクの先のリンクにまで延々と深くつながってゆくのです。これこそが、インターネット的の一番の鍵になるわけです。</blockquote>
<br />
<b>②シェア</b><br />
<br />
<blockquote class="tr_bq">
そういった「市場がイニシアティブを持つ」という背景を考えたとき、企業にとっての「シェア」の考え方というものがきわめて重要になってきます。企業が自分の利益を考えるのは当然のことなのですが、その利益を何らかのかたちで社会に「シェア」していくという考え方が、もっと大事になる</blockquote>
<br />
<blockquote class="tr_bq">
人や企業が、シェアということを、もっと大事にしていくようになったら、いままでの社会の仕組みが、ガラッと変わってしまうかもしれません。楽しみやごちそうを、上手に分け与えてくれる「おすそわけ」の上手な人は、みんなによろこばれるし信頼もされますよね。 それと同じように、シェアの上手な会社は、これからの時代には、とても好感を持たれることになるのではないかと、ぼくは思っています。 「好感持たれることなんぞ、ナンボのもんじゃい」という反論もあるかもしれませんが、それは「生産」主体の社会での考え。一番大きく経済活動を支えていくのは「市場」なのだと思えば、好感などという一見甘っちょろいことが、どれだけ大切なことかわかってもらえるでしょう</blockquote>
<br />
<blockquote class="tr_bq">
また、実は、情報はたくさん出した人のところにドッと集まってくるんだ、という法則があるのです。もらってばかりいる人は、いつまでたっても「少しもらう」ことを続けることになります。おすそわけをたくさんしている人や企業には、「これも、あなたが配ってください」という新しい情報が集まる交差点のようになっていきます</blockquote>
<br />
<b>③フラット</b><br />
<br />
<blockquote class="tr_bq">
フラットというのは、それぞれが無名性で情報をやりとりするということと考えられます。情報のやりとり自体に意味があるので、そこでは、それぞれのポジション、年齢、性別、価値などの意味が失われているわけです。失われるのはイヤだ、という人にとっては、ありがたくないことでしょうね。せっかく築いてきた地位が、意味をなさないような場が、インターネットのつくり出す「フラット」な世界なのです</blockquote>
<blockquote class="tr_bq">
<br />
みんなが同じプライオリティを持っていることが、社会の常識なるものを下支えしていた。でも、その常識が、いまや紅白歌合戦の視聴率レベルにまで降下してきたように思います。つまり、半分くらいの人々は、いままでどおりに考えている、というくらいの感覚かなぁ。 このように、豊かな社会においては、経済も、文化も、いままでのような同じ価値観で「価値の三角形(ヒエラルキー)」をつくっていくことが困難になっていきます。いままでにも、価値が多様化しているとよくいわれていましたが、価値が多様化するというよりは、価値の“〝 順位付けが多様化する”〟“〝 価値の順位組み替えは個人の自由になっていく”〟 ということでしょう</blockquote>
<br />
<b>価値=勢い</b><br />
<br />
<blockquote class="tr_bq">
<br />
一番高い価値というのは、「なんと名付けていいかわからないけど、とにかくすごいんですよっ!」というようなもので(これは勢いがあるものにはセットで付いている場合も多いので、話はややこしくなりますが)、一般的には“〝 底力”〟 とか“〝 実力”〟 とか“〝 本物”〟 とかいう呼び方をしてきたわけです。しかし、いまは、“〝 実力”〟 というようなものよりも、“〝 勢い”〟 の価値のほうが高値で取引されているよう</blockquote>
<br />
<blockquote class="tr_bq">
位置(ポジション)を表す言葉では、価値を表せない時代がきてしまうわけです。「いま力のあるものが勝ちじゃ」という「勢いが価値である」という考え方が出てきた、と。いわば、下克上という感じですね。こういう考え方が、人気アイドルが演歌の大御所より価値があるというような、時代のイデオロギーになっていきました。つまり、“〝 勢い”〟 が一番の価値になったのは、「位置が価値である時代」がひっくり返されたからなの</blockquote>
<br />
<br />
<h4>
情報が溢れている時代でのプライオリティの決め方</h4>
<br />
<br />
<blockquote class="twitter-tweet" data-lang="ja">
<div dir="ltr" lang="ja">
インターネット的優先順位の決め方<br />
<br />
・とりあえず色々手を動かしてみる<br />
・まともに間違える<br />
・何度でも試す<br />
<br />
情報が多すぎて選べない場合、まず試してみて学習するなかでプライオリティをつける<a href="https://twitter.com/hashtag/%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%8D%E3%83%83%E3%83%88%E7%9A%84?src=hash&ref_src=twsrc%5Etfw">#インターネット的</a> <a href="https://t.co/FbsFEurMz2">pic.twitter.com/FbsFEurMz2</a></div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/1033210269734907904?ref_src=twsrc%5Etfw">2018年8月25日</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<blockquote class="tr_bq">
そういう状況の中で「優先順位」を決めていくというのは、どういうことでしょうか。 ここからは、かなり、ぼく個人の方法論なのですが。「やりたければやる」「選びたいものがあったら、もっといいものを待つよりも、すぐにやる」というのが、インターネット的なのではないかと考えています。網羅的でもなく、情報選択の幅を狭く限定するのでもないやり方とは、やりたいことを 逡巡 しないでやってみて「まともに間違う」こと、そして次の何かを待っているよりも早く成功なり失敗なりをして「何度でも試す」という方法なのではないでしょう</blockquote>
<br />
<br />
<h4>
その他、この本を読んでいて漠然と考えたこと</h4>
<br />
<br />
<blockquote class="twitter-tweet" data-lang="ja">
<div dir="ltr" lang="ja">
情報過多の時代、それをつなぎ合わせる編集が重要になってくるんだろうなぁ。 <a href="https://twitter.com/hashtag/%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%8D%E3%83%83%E3%83%88%E7%9A%84?src=hash&ref_src=twsrc%5Etfw">#インターネット的</a> <a href="https://t.co/O3TK7Wwcuj">pic.twitter.com/O3TK7Wwcuj</a></div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/1033207062417657862?ref_src=twsrc%5Etfw">2018年8月25日</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<blockquote class="twitter-tweet" data-lang="ja">
<div dir="ltr" lang="ja">
・「役割は点滅する」<br />
・「消費者」という人はいない、ただの役割<br />
<br />
c2c市場が成熟する前の先験的な予言だなぁ。<br />
生産者でもあり消費者である顧客をどう観察するか。<a href="https://twitter.com/hashtag/%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%8D%E3%83%83%E3%83%88%E7%9A%84?src=hash&ref_src=twsrc%5Etfw">#インターネット的</a> <a href="https://t.co/IKrnVzum7T">pic.twitter.com/IKrnVzum7T</a></div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/1033213694048579584?ref_src=twsrc%5Etfw">2018年8月25日</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<blockquote class="twitter-tweet" data-lang="ja">
<div dir="ltr" lang="ja">
世界がインターネット的になっていくと、裸の評価になるから今以上に格差が広がりそうな気がする。うーん、示唆深い。これが2001年の本というのがまた面白い。ようやく世界がインターネット的になってきたのかも。</div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/1032423030423580673?ref_src=twsrc%5Etfw">2018年8月23日</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<br />
<blockquote class="twitter-tweet" data-lang="ja">
<div dir="ltr" lang="ja">
おもろい人にお金が入るのがソーシャルなんだろうなぁ。奢られて生きている人とか、無職に感情消費する時代だ。仕事のできるの定義がもしかしたら「面白いかいなか」で変わったりするのかなぁ。そうすると信頼isなにって感じだ。</div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/1033239123778199554?ref_src=twsrc%5Etfw">2018年8月25日</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<blockquote class="twitter-tweet" data-lang="ja">
<div dir="ltr" lang="ja">
95年生まれなんだけど、PS3が小学4年生くらいに出て、そこからFPSにどハマりして、社会人含めたチームのリーダーとかやって上位20%のチームにしたりしてたんだけど、ぼくらの世代ってこういうインターネット的なフラットな競争の世界が割と身近なだったなぁと感じる。</div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/1032420944403292160?ref_src=twsrc%5Etfw">2018年8月23日</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<blockquote class="twitter-tweet" data-lang="ja">
<div dir="ltr" lang="ja">
僕らの世代ではそこまでSNSが民主化した青春時代を送ってなかったけど、今高校生とかでも普通にフラットな競争に巻き込まれて新しいものどんどん生まれてるから、インターネットによる人類の進化すごそうだなぁ。</div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/1032421367168155648?ref_src=twsrc%5Etfw">2018年8月23日</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<blockquote class="twitter-tweet" data-lang="ja">
<div dir="ltr" lang="ja">
あと、インターネットのフラットな世界が、いきなり現実空間上に転移されることも最近感じていて、フラットな世界のヒエラルキーが、現実世界でも意味を帯び始めたなぁと。もともとあったのかもしれない。島宇宙なインフルエンサーの台頭で、周りの認識見てるとそう感じる。</div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/1032421910070448128?ref_src=twsrc%5Etfw">2018年8月23日</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<blockquote class="twitter-tweet" data-lang="ja">
<div dir="ltr" lang="ja">
おもろい人にお金が入るのがソーシャルなんだろうなぁ。奢られて生きている人とか、無職に感情消費する時代だ。仕事のできるの定義がもしかしたら「面白いかいなか」で変わったりするのかなぁ。そうすると信頼isなにって感じだ。</div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/1033239123778199554?ref_src=twsrc%5Etfw">2018年8月25日</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<blockquote class="twitter-tweet" data-lang="ja">
<div dir="ltr" lang="ja">
ソーシャルで個性的であることが強制的に強いられている環境だと思う。この個性的であることを強いる競争にいると、かなりの人が「個性の競争疲れ」をそこそこ感じていそう。(実は個性の競争がない、没個性の社会の方が人類にとっては幸せだったみたいなこと十分起こり得そう)</div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/1033240792171610114?ref_src=twsrc%5Etfw">2018年8月25日</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<blockquote class="twitter-tweet" data-lang="ja">
<div dir="ltr" lang="ja">
個性の競争疲れから、没個性に回帰して、5年後にまたAnonymousな2chみたいなサイトがはやったりして。</div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/1033241118647803904?ref_src=twsrc%5Etfw">2018年8月25日</a></blockquote>
<br />
気になった方はこちらのリンクからどうぞ。AMAZONでKINDLEでありました〜<br />
<br />
<div class="amazlet-box" style="margin-bottom: 0px;">
<div class="amazlet-image" style="float: left; margin: 0px 12px 1px 0px;">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/B00799SLAG/kdmgs110-22/ref=nosim/" name="amazletlink" target="_blank"><img alt="インターネット的 (PHP新書)" src="https://images-fe.ssl-images-amazon.com/images/I/416u%2BALLJuL._SL160_.jpg" style="border: none;" /></a></div>
<div class="amazlet-info" style="line-height: 120%; margin-bottom: 10px;">
<div class="amazlet-name" style="line-height: 120%; margin-bottom: 10px;">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/B00799SLAG/kdmgs110-22/ref=nosim/" name="amazletlink" target="_blank">インターネット的 (PHP新書)</a><br />
<div class="amazlet-powered-date" style="font-size: 80%; line-height: 120%; margin-top: 5px;">
posted with <a href="http://www.amazlet.com/" target="_blank" title="amazlet">amazlet</a> at 18.08.25</div>
</div>
<div class="amazlet-detail">
PHP研究所 (2007-11-13)<br />
売り上げランキング: 36,246</div>
<div class="amazlet-sub-info" style="float: left;">
<div class="amazlet-link" style="margin-top: 5px;">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/B00799SLAG/kdmgs110-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jpで詳細を見る</a></div>
</div>
</div>
<div class="amazlet-footer" style="clear: left;">
</div>
</div>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
Unknownnoreply@blogger.comtag:blogger.com,1999:blog-2592581639714884938.post-33070402843500815532018-08-22T22:48:00.003+09:002018-08-22T22:51:22.149+09:00ブランド人になるには、ソーシャルメディアの影響力を上げろ!『ブランド人になれ』田端信太郎田端さんの『ブランド人になれ!』を読んだ。以前読んだ彼の著書「Media Maker」も以前読んでいた。前の本に共通する部分もあったが、こっちはもっとシンプルで面白かった。<br />
<br />
<br />
<div class="amazlet-box" style="margin-bottom: 0px;">
<div class="amazlet-image" style="float: left; margin: 0px 12px 1px 0px;">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/B07DZYM679/kdmgs110-22/ref=nosim/" name="amazletlink" target="_blank"><img alt="ブランド人になれ! 会社の奴隷解放宣言 (NewsPicks Book)" src="https://images-fe.ssl-images-amazon.com/images/I/51L-EOeF5kL._SL160_.jpg" style="border: none;" /></a></div>
<div class="amazlet-info" style="line-height: 120%; margin-bottom: 10px;">
<div class="amazlet-name" style="line-height: 120%; margin-bottom: 10px;">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/B07DZYM679/kdmgs110-22/ref=nosim/" name="amazletlink" target="_blank">ブランド人になれ! 会社の奴隷解放宣言 (NewsPicks Book)</a><br />
<div class="amazlet-powered-date" style="font-size: 80%; line-height: 120%; margin-top: 5px;">
posted with <a href="http://www.amazlet.com/" target="_blank" title="amazlet">amazlet</a> at 18.08.22</div>
</div>
<div class="amazlet-detail">
幻冬舎 (2018-07-05)<br />
売り上げランキング: 828</div>
<div class="amazlet-sub-info" style="float: left;">
<div class="amazlet-link" style="margin-top: 5px;">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/B07DZYM679/kdmgs110-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jpで詳細を見る</a></div>
</div>
</div>
<div class="amazlet-footer" style="clear: left;">
</div>
</div>
<br />
<br />
<div class="amazlet-box" style="margin-bottom: 0px;">
<div class="amazlet-image" style="float: left; margin: 0px 12px 1px 0px;">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/B00AQZLZ2G/kdmgs110-22/ref=nosim/" name="amazletlink" target="_blank"><img alt="MEDIA MAKERS―社会が動く「影響力」の正体 宣伝会議" src="https://images-fe.ssl-images-amazon.com/images/I/41LJI6Ux12L._SL160_.jpg" style="border: none;" /></a></div>
<div class="amazlet-info" style="line-height: 120%; margin-bottom: 10px;">
<div class="amazlet-name" style="line-height: 120%; margin-bottom: 10px;">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/B00AQZLZ2G/kdmgs110-22/ref=nosim/" name="amazletlink" target="_blank">MEDIA MAKERS―社会が動く「影響力」の正体 宣伝会議</a><br />
<div class="amazlet-powered-date" style="font-size: 80%; line-height: 120%; margin-top: 5px;">
posted with <a href="http://www.amazlet.com/" target="_blank" title="amazlet">amazlet</a> at 18.08.22</div>
</div>
<div class="amazlet-detail">
宣伝会議 (2012-12-19)<br />
売り上げランキング: 3,137</div>
<div class="amazlet-sub-info" style="float: left;">
<div class="amazlet-link" style="margin-top: 5px;">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/B00AQZLZ2G/kdmgs110-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jpで詳細を見る</a></div>
</div>
</div>
<div class="amazlet-footer" style="clear: left;">
</div>
</div>
<br />
<br />
読んで、面白かったところだけ引用してまとめておく。<br />
<br />
<a name='more'></a><br />
<br />
<h4>
個人化の時代、ブランド人になることが求められている</h4>
<div>
<br /></div>
<div>
・会社だけでなんとかならなくなってきた</div>
<div>
・自分自身のブランディングをする必要が出てきた<br />
<div>
<br /></div>
<div>
<blockquote class="tr_bq">
会社の中でいかに評価されるかがすべてだったし、自分の仕事を聞かれたら、会社の名前を答えればよかった。 有名企業、安定企業に就職することこそがゴールだった。 そこからは上司の顔色をうかがってミスがないように仕事をこなす。会社に一生の忠誠を誓い出世レースを勝ち抜く。定年まで走りぬけば、退職金というご褒美を手に余生を過ごせる。そんな生き方が幸せの象徴だった。 しかし、世の中は大きく変わった。</blockquote>
<div>
<br /></div>
</div>
<div>
<blockquote class="tr_bq">
どんな大企業でも変化に対応できなければ簡単に潰れてしまう。リストラなんて日常茶飯事だ。終身雇用、年功序列などは幻想だったと誰もが気付いた。 最近しきりに語られる「副業解禁」。このバズワードは何を示しているか。 それは「会社はあなたの面倒を見きれないから外で稼いでください」ということだ。政府が主導しているわけで、この流れはやがて本格化していくだろう。</blockquote>
<h4>
<br />社内だけではなく、社外に向けてもブランディングする必要がある</h4>
<div>
<br /></div>
<div>
・社内だけの評価ではなく、社外での評価を持つことが重要</div>
<div>
・社外で可視化できるような職種につかないと、社外評価は得られない</div>
<div>
<br /></div>
<div>
<blockquote class="tr_bq">
ブランド人になりたければ、社内での人事評価ではなく、社外へ向けて、圧倒的なインパクトを残すことを最も重視するべきだ。仕事をするにあたって、途中プロセスである社内評価ではなく、社外においてインパクトと爪痕を残すことをより重視することがブランド人の基本態度だ。</blockquote>
<div>
<br /></div>
<div>
<blockquote class="tr_bq">
あの種のコンサルティング会社で働いたところで、「この仕事はオレがやりました」と言えないからだ。仕事の具体的な中身は、守秘義務という縛りをかけられて退職後も口にはできない。自分が手がけた仕事であっても、職業倫理として「オレがやりました」と言えず、黒子に徹しないといけない。これではつまらない。</blockquote>
</div>
<div>
<h4>
ブランド人やるならソーシャルメディアやれ</h4>
</div>
<div>
・世界中のインフルエンサーがソーシャルメディアをやっている</div>
<div>
・学歴、名刺等が個人の価値を規定してきたが、より評価の指標として、ソーシャル影響度になってきている</div>
<div>
・ソーシャル影響度はストックする資本だから持っておくとよい</div>
<div>
<br /></div>
<div>
<blockquote class="tr_bq">
ツイッターもフェイスブックもインスタグラムもやっておらず、SNSのアカウントを一つも作っていない。 世界中どこを見渡しても、そんなブランド人は見当たらない。 ブランド人たるもの、呼吸するかのようにSNSで発信をしろ! トランプを見ろ! イーロン・マスクを見ろ! </blockquote>
</div>
<blockquote class="tr_bq">
<br />
SNSが登場する前の時代は、名刺や学歴があなたを証明するものだった。 しかし、今や名刺や学歴なんて、SNSでのプレゼンスに比べれば、クソの役にも立たない。名刺や学歴なんて、君がブランド人であるかどうかを測る基準にはなりえない。 肩書で仕事をしている人間は、会社から肩書を奪われてしまったら用なし<br />
しかしSNSのフォロワーは誰にも奪うことはできない</blockquote>
<blockquote class="tr_bq">
<h4>
</h4>
君の発信に価値を感じる人がいれば、たとえ無名の個人であってもフォロワーがつく。 あなたのフォロワーの数は、あなた個人の資産であり、会社でいうところの資本金や時価総額、社会からの評価資本のようなものなのだ。 </blockquote>
<div>
<div>
<br /></div>
</div>
<div>
<blockquote class="tr_bq">
1億円は事業で失敗したら一瞬でなくなるが、100万人のフォロワーはあなたがどんなに転んでケガをしても、いきなり消えてなくなることはない。こんなに心強い存在はないだろう。 フォロワーとは、君というブランド人の価値を世間に知らしめてくれる誰にも奪えない資本なのだ。 上場企業が時価総額の最大化を目指すように、SNSのフォロワー最大化を目指せ</blockquote>
<div>
<br /></div>
</div>
<div>
<blockquote class="tr_bq">
フォロワーが万単位まで突き抜けることができれば、すでに君は社会から相当注目を集めている。バカな会社からイチャモンをつけられたときには、逆ギレして辞めてしまったっていい。 むしろ派手な行動はネタになり、君の応援団であるフォロワーは熱狂する。 ブランドの旗さえ立っていれば、退職をツイートした瞬間、「ウチに来ませんか」というオファーがいくつも寄せられるだろう。</blockquote>
<div>
<br /></div>
</div>
<div>
<h4>
感想</h4>
・スキルのポータビリティというか、社外への評価可能性は前から考えてスキルを選んでいかないといけないなぁというのは自分自身が新卒で転職活動をしていた時に思ったので、その観点でソーシャルの影響力はストックもされやすいしポータビリティも高いからいいなぁと思った<br />
・コンサルティングとか、守秘義務が多い案件だと、プロフェッショナリズムがかえって市場価値をあげにくくなることがあるのかな<br />
<br /></div>
<div>
<br /></div>
</div>
<div>
<div class="amazlet-box" style="margin-bottom: 0px;">
<div class="amazlet-image" style="float: left; margin: 0px 12px 1px 0px;">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/B07DZYM679/kdmgs110-22/ref=nosim/" name="amazletlink" target="_blank"><img alt="ブランド人になれ! 会社の奴隷解放宣言 (NewsPicks Book)" src="https://images-fe.ssl-images-amazon.com/images/I/51L-EOeF5kL._SL160_.jpg" style="border: none;" /></a></div>
<div class="amazlet-info" style="line-height: 120%; margin-bottom: 10px;">
<div class="amazlet-name" style="line-height: 120%; margin-bottom: 10px;">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/B07DZYM679/kdmgs110-22/ref=nosim/" name="amazletlink" target="_blank">ブランド人になれ! 会社の奴隷解放宣言 (NewsPicks Book)</a><br />
<div class="amazlet-powered-date" style="font-size: 80%; line-height: 120%; margin-top: 5px;">
posted with <a href="http://www.amazlet.com/" target="_blank" title="amazlet">amazlet</a> at 18.08.22</div>
</div>
<div class="amazlet-detail">
幻冬舎 (2018-07-05)<br />
売り上げランキング: 828</div>
<div class="amazlet-sub-info" style="float: left;">
<div class="amazlet-link" style="margin-top: 5px;">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/B07DZYM679/kdmgs110-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jpで詳細を見る</a></div>
</div>
</div>
<div class="amazlet-footer" style="clear: left;">
</div>
</div>
<br /></div>
</div>
</div>
Unknownnoreply@blogger.comtag:blogger.com,1999:blog-2592581639714884938.post-30284351040513567442018-08-22T01:49:00.001+09:002018-08-22T01:50:25.309+09:00SNS運用、グロース施策の考え方として面白かった『ファンベース』まとめファンベースというマーケ本読んだんだけど、ものすごく示唆深かったので読書メモ。<br />
<br />
<br />
<div class="amazlet-box" style="margin-bottom: 0px;">
<div class="amazlet-image" style="float: left; margin: 0px 12px 1px 0px;">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/B079JRSVVQ/kdmgs110-22/ref=nosim/" name="amazletlink" target="_blank"><img alt="ファンベース ──支持され、愛され、長く売れ続けるために (ちくま新書)" src="https://images-fe.ssl-images-amazon.com/images/I/41kzPThMcvL._SL160_.jpg" style="border: none;" /></a></div>
<div class="amazlet-info" style="line-height: 120%; margin-bottom: 10px;">
<div class="amazlet-name" style="line-height: 120%; margin-bottom: 10px;">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/B079JRSVVQ/kdmgs110-22/ref=nosim/" name="amazletlink" target="_blank">ファンベース ──支持され、愛され、長く売れ続けるために (ちくま新書)</a><br />
<div class="amazlet-powered-date" style="font-size: 80%; line-height: 120%; margin-top: 5px;">
posted with <a href="http://www.amazlet.com/" target="_blank" title="amazlet">amazlet</a> at 18.08.21</div>
</div>
<div class="amazlet-detail">
筑摩書房 (2018-02-22)<br />
売り上げランキング: 2,137</div>
<div class="amazlet-sub-info" style="float: left;">
<div class="amazlet-link" style="margin-top: 5px;">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/B079JRSVVQ/kdmgs110-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jpで詳細を見る</a></div>
</div>
</div>
<div class="amazlet-footer" style="clear: left;">
</div>
</div>
<br />
<a name='more'></a><br />
<br />
<h4>
ファンベースとは</h4>
・ファンベースとは、ファンをベースに中長期的な売り上げや価値を上げていく考え方<br />
<br />
<div>
<blockquote class="tr_bq">
ファンベースとは、ファンを大切にし、ファンをベースにし、(ベースには、土台、支持母体などの意味がある)、中長期的に売上や価値を上げていく考え方である。</blockquote>
<br />
<div>
<blockquote class="tr_bq">
他のブランドや商品が数多くある中、強く惹かれ、愛用し、思わず友人に薦めたブランドや商品があるはずだ。それは支持だ。ブランドや商品が提供してくれている価値を支持して、購入しているのである。 そういう意味において、ボクは「ファン=支持者」 だと思っている</blockquote>
<br />
<div>
<blockquote class="tr_bq">
もう少し言うと、 ファンとは「企業やブランド、商品が大切している『価値』を支持している人」 と、この本では定義したい。</blockquote>
<br />
<h4>
新規顧客獲得 VS ファン獲得</h4>
・広告にあふれ、広告の効果が薄れている一方で、ファンのリフェラルはめちゃくちゃ強い。<br />
<div>
<br />
<blockquote class="tr_bq">
「でも、 ファンって、黙っていても買ってくれる人たちだよね。それよりも『今買ってくれてない新規顧客』に売らないと、売上増えないんじゃないの? 貴重な予算を使ってまで、そういう人たちにアプローチするのは抵抗がある」</blockquote>
<br />
<div>
<blockquote class="tr_bq">
ボクも広告コミュニケーション業界で 30 年以上やってきて、新規顧客を狙ったプランニングを数多くやってきたし、大きなパイを意識することも長かった。ファンの存在もずっと目に入っていなかったし、それはどこか別の部署が担当することだと思っていた。マス広告全盛時代はもちろん、ネット時代に入ってもそういうアプローチで良かったし、実際、売上アップや業績反映にも貢献できたと思う。 でも、明らかに状況が変わった</blockquote>
<br />
<h4>
ファン獲得 = LTV向上</h4>
・ファンは売上の安定に直結している。<br />
・少数のファンが売上の大半を支えている。<br />
・つまり、今いるファンを大切にして彼らのライフタイムバリュー〔※〕 を上げていくこ<br />
といいう理由で、ファンのLTVを上げるのが大事<br />
<br />
<div>
<blockquote class="tr_bq">
せっかちな方のために先にいくつかの理由に触れておくと、まず、<br />
・ファンは売上の安定に直結している。<br />
・少数のファンが売上の大半を支えている。<br />
・つまり、今いるファンを大切にして彼らのライフタイムバリュー〔※〕 を上げていくことは、収益の安定・成長に直結する</blockquote>
<blockquote class="tr_bq">
<br />
※ライフタイムバリュー(LTV) とは、顧客生涯価値のこと。一人の顧客がライフタイムを通じて企業にもたらすトータルなバリューのことである。一般には「その人が一生のうち、その商品をどのくらいくり返し買ってくれたか」的に受け取られているが、もちろん 顧客が中長期的にもたらすバリューは使った金額だけではない。 ファンベースを考えるにおいてとても重要</blockquote>
<div>
<br />
<h4>
キャンペーンでの新規獲得と、 ファン獲得の全体設計が必要</h4>
・ただし新規獲得をやめるのではなく、新規獲得と中長期の施策が同時に実行されているのが大事。<br />
<br />
<br />
<div>
<blockquote class="tr_bq">
そんな中、今まで売上に効果を上げてきた「キャンペーン」の実効性も薄れてきた。 キャンペーンとは、目的達成のために一定期間かけて行われる宣伝・販促活動のこと。数週間のプレゼント・キャンペーンや値下げキャンペーンから、タレントを起用して数カ月単位で大々的に展開するものまでいろいろあり、それをくり返して行くことが売上を伸ばす王道と考える企業も多かった。</blockquote>
<br />
<div>
<blockquote class="tr_bq">
・世の中に情報も商品もエンターテインメント(エンタメ) も溢れかえりすぎていて、キャンペーンがとても届きにくくなった。<br />
・そんな過酷な環境下でたまたまキャンペーンが話題になっても、一過性かつ瞬間風速的で、あっという間に忘れ去られてしまう</blockquote>
</div>
</div>
<br />
<div>
<blockquote class="tr_bq">
キャンペーンなどの短期施策はもちろん、広報リリースやパブリシティ、バズ狙いのコンテンツ、スポット的なデジタル広告、店頭イベントなどの「単発施策」 は特に、話題化するのがどんどん困難になってきている。しかも現代日本においては、新規顧客へのリーチ(到達) を狙った施策はますます効きづらくなっていく。</blockquote>
<br />
<blockquote class="tr_bq">
ただ、ファンに売上の大半を支えてもらいつつ、それをベースに短期施策や単発施策を連動させて新規顧客を増やしていく、というような「全体構築(短期施策・単発施策と中長期ファンベース施策の組み合わせ)」を意識的に考えていかないと、もう立ちゆかないくらいハードな時代になってきた</blockquote>
<br />
<div>
<blockquote class="tr_bq">
カンフル剤のように短期施策などを打ち続けて一時的に売れる状況を作るのではなく、長く安定して売れ続ける状態に、ブランドや商品を、する。だからこそ欠かせないアプローチ</blockquote>
<br />
<div>
<blockquote class="tr_bq">
リーチして認知を獲得したあとにどうするのか。どうやってその気持ちを継続させ、ファンにしていくのか。どうやってファンたちのライフタイムバリュー(LTV) を上げていくのか。それらをあらかじめ構築したうえでリーチしないと意味がない</blockquote>
<br />
<div>
<br />
<div>
<br />
<div>
<blockquote class="tr_bq">
どうせやることになるのなら、一過性かつ瞬間風速的に終わらせるのではなく、その効果を資産化していくべきである。 図 4 や図 6 のように、短期キャンペーン施策や単発施策と中長期ファンベース施策を組み合わせた「全体構築」が必要だ。</blockquote>
<br />
<h4>
ファンは全体の20%だけど、売り上げの80%の土台となる</h4>
<br /></div>
</div>
</div>
</div>
</div>
</div>
<div>
<blockquote class="tr_bq">
ブランドや商品の「価値」は時代とともに変化していく。使われ方も、愛され方も、喜ばれるポイントも、少しずつ変わっていく。 その変化をファンという支持母体とともに見極め、改善をくり返す過程もまたファンベース<br />
(1)ファンは売上の大半を支え、伸ばしてくれるから<br />
(2)時代的・社会的にファンを大切にすることがより重要になってきたから<br />
(3)ファンが新たなファンを作ってくれる</blockquote>
<div>
<br />
<h4>
SNSはファンベース施策のメディアとして有効</h4>
<br />
<br />
<div>
<blockquote class="tr_bq">
SNSの項があるが、これは「総利用時間の 82%は 22%のヘビーユーザーによって消費されている」という意味である。つまり、 SNSユーザーの約 20%にあたるヘビーユーザーが、総利用時間の約 80%を占有している のである(まさにパレートの法則!)。残りの 80%のユーザーはそんなに使っていないのだ。</blockquote>
<br />
<div>
<blockquote class="tr_bq">
・ツイッター: 4500 万人( 2017 年 10 月現在) ・フェイスブック: 2800 万人( 2017 年 9 月現在) ・インスタグラム: 2000 万人( 2017 年 10 月</blockquote>
<br />
<div>
<blockquote class="tr_bq">
これらの総利用時間の 80%をたった 20%のヘビーユーザーが占有している。一番多いツイッターで言うと 20%とは 900 万人だ。たった 900 万人が、ツイッター総利用時間全体の 80%を消費しているのである。</blockquote>
</div>
</div>
<br />
<div>
<blockquote class="tr_bq">
そういう意味において、現時点でのSNSは「リーチ 量 を上げるメディア」ではなく、「リーチ 質 を上げるメディア」と捉えたほうがいい</blockquote>
<br />
<div>
<blockquote class="tr_bq">
それよりも、企業とファンとのつながりを強くする、または( 3)で述べる「ファンから類友へのオーガニックなオススメ」に活用される時などにはとても有効なメディアなのである。つまり、 SNSこそファンベースで活かすべき だ。 SNSを率先して使っている 22%のヘビーユーザーは発信力が高く、商品を友人に広めてくれるタイプの人でもある</blockquote>
<br />
<br />
<h4>
リフェラルが最強</h4>
<div>
<br />
<br />
<blockquote class="tr_bq">
価値観が近い友人がツボにはまるコンテンツは自分もツボに可能性が高いし、価値観が近い友人が愛用しているモノは自分も愛用する可能性が高いし、価値観が近い友人が熱中するコトは自分も熱中する可能性が高い</blockquote>
<br />
<div>
<blockquote class="tr_bq">
逆に言うと、今ほど「企業からの都合のいい一方的な情報」が受け取られにくい時代はないということだ。特に価値観が近い友人からの推奨にかなうものはない<br />
これは「ホモフィリー(同類を好む傾向)」と呼ばれ、さまざまな角度から研究されてきた現象であり、ソーシャルネットワークにおける基本的な構造のひとつ である。</blockquote>
<div>
<br />
<div>
<blockquote class="tr_bq">
その意味において、 価値観が近い類友は、テレビやネットを凌ぐ最強メディア と言ってもいいし、類友の実体験による「自分の言葉」は、この過酷な情報環境において、超貴重な情報源</blockquote>
<br />
<div>
<blockquote class="tr_bq">
要するに「ファンは周りの類友をファンにしてくれる」 のでファンがオーガニックなオススメをするきっかけを作る。言いたくなるような状況を作る。言いやすくなるような環境を</blockquote>
</div>
</div>
<br />
<div>
<blockquote class="tr_bq">
ファンはSNSだけでなく、リアルでも自分の大好きなものを類友に言いたい</blockquote>
<blockquote class="tr_bq">
<br />
ただ、第三章で書いていくように、 この自走式サイクルが回るきっかけや状況や環境を作ることはできる。 ファンがオーガニックなオススメをするきっかけを作れば作るほど、言いたくなるような状況を作れば作るほど、言いやすくなるような環境を作れば作るほど、彼ら彼女らは類友にオーガニックなオススメを言ってくれるようになるだろ</blockquote>
<div>
<blockquote class="tr_bq">
<br />
例えば中心に(たった) 100 人のファンがいるとして、彼ら彼女らは類友に商品のことを言いたくて仕方がない。それぞれが 10 人の類友(前出の強いつながり: 5 ~ 15 人) にオススメするとすると、それは 1000 人に強いオーガニック・リーチとして伝わる。それがまたそれぞれ 10 人の類友に伝えるとすると、すぐ 1 万人に達する。非常に影響力が強いオーガニックな言葉が、 100 人からあっという間に 1 万人に広がるのである。</blockquote>
<div>
<br />
<div>
<blockquote class="tr_bq">
ただ、言いたいことは、 たった 100 人のファンが母数だったとしても、「類友や友人のつながり」の連鎖で、あっという間に数万、数十万、数百万と広がっていく可能性がある</blockquote>
<br />
<div>
<blockquote class="tr_bq">
ファンベース的な考え方は、一般的には「顧客維持」に有効だと考えられていると思うし、確かにそういう面も大きい。が、ここまで書いてきたように「新規顧客の獲得」にも強い効果を上げるし、類友・友人への影響力という意味では最強ですらある</blockquote>
<br /></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div>
<div>
<div>
<h4>
SNS運用</h4>
<div>
<br />
<blockquote class="tr_bq">
<br />
SNSという接点は、毎日の「愛着」をもってもらうために超重要視している企業でも、「拡散担当」くらいに思われているところがあるが、情報過多なこの時代において、特にSNSをヘビーに使っている生活者が「企業からの一方的な拡散」に注意を払うことはほとんどSNS担当者が重要なのは「日々の愛着を強められるから」である</blockquote>
</div>
<div>
<br /></div>
<br />
<div>
<blockquote class="tr_bq">
毎日、いや、もしかしたら毎時毎分、ファン(SNSを活用している発信力が高い層の中のファン) と接して、愛着を強めることができる存在なのだ。 例えば、商店街の八百屋や魚屋の兄ちゃんみたいなものだ。毎日毎日、道に出て「いらっしゃい、いらっしゃい」「奥さん、こんにちはー!」</blockquote>
<br />
<br />
<br /></div>
<br />
<div>
<blockquote class="tr_bq">
人間をもっと見せる。等身大の発信を増やす 人が応援するのはモノでもコトでもなく、ヒトである。だから「こういう人が働いている」ということをちゃんと見せていくことが応援する気持ちを強めることにつながる。社員をもっと見せることだ。有名社員を作ることも重要</blockquote>
<br />
<div>
<br />
<br /></div>
</div>
</div>
<br /></div>
<div>
<blockquote class="tr_bq">
有名社員がいる場合、その人をもっと前面に出したほうがいい。 それは創業者や社長だけでなく、カリスマ店員やスター開発者、褒章職人、仕事に関係ない技能をもった名物社員でもいい。その人の「等身大の発信」を(コンプライアンスがどうのとか締め付けずに) 容認し、増やし、その「人間」をもっともっと見せていくことだ。</blockquote>
<br />
<div>
<blockquote class="tr_bq">
また、そういう人とファンたちをより多く会わせることも応援につながっていく。同じ人間として等身大の共感が生まれる</blockquote>
<br /></div>
</div>
<div class="amazlet-box" style="margin-bottom: 0px;">
<div class="amazlet-image" style="float: left; margin: 0px 12px 1px 0px;">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/B079JRSVVQ/kdmgs110-22/ref=nosim/" name="amazletlink" target="_blank"><img alt="ファンベース ──支持され、愛され、長く売れ続けるために (ちくま新書)" src="https://images-fe.ssl-images-amazon.com/images/I/41kzPThMcvL._SL160_.jpg" style="border: none;" /></a></div>
<div class="amazlet-info" style="line-height: 120%; margin-bottom: 10px;">
<div class="amazlet-name" style="line-height: 120%; margin-bottom: 10px;">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/B079JRSVVQ/kdmgs110-22/ref=nosim/" name="amazletlink" target="_blank">ファンベース ──支持され、愛され、長く売れ続けるために (ちくま新書)</a><br />
<div class="amazlet-powered-date" style="font-size: 80%; line-height: 120%; margin-top: 5px;">
posted with <a href="http://www.amazlet.com/" target="_blank" title="amazlet">amazlet</a> at 18.08.21</div>
</div>
<div class="amazlet-detail">
筑摩書房 (2018-02-22)<br />
売り上げランキング: 2,137</div>
<div class="amazlet-sub-info" style="float: left;">
<div class="amazlet-link" style="margin-top: 5px;">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/B079JRSVVQ/kdmgs110-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jpで詳細を見る</a></div>
</div>
</div>
<div class="amazlet-footer" style="clear: left;">
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
Unknownnoreply@blogger.comtag:blogger.com,1999:blog-2592581639714884938.post-37619009180359796432018-06-15T20:58:00.001+09:002018-06-15T20:58:59.589+09:00『データ解析の実務プロセス入門(あんちべ)』を読んで特に学びが多かったこと『データ解析の実務プロセス入門(あんちべ)』という本をさらっと読んで、特に学びが多かったところをまとめます。<br />
<br />
<br />
<div class="amazlet-box" style="margin-bottom: 0px;">
<div class="amazlet-image" style="float: left; margin: 0px 12px 1px 0px;">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/4627817711/kdmgs110-22/ref=nosim/" name="amazletlink" target="_blank"><img alt="データ解析の実務プロセス入門" src="https://images-fe.ssl-images-amazon.com/images/I/51w-m%2B2EohL._SL160_.jpg" style="border: none;" /></a></div>
<div class="amazlet-info" style="line-height: 120%; margin-bottom: 10px;">
<div class="amazlet-name" style="line-height: 120%; margin-bottom: 10px;">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/4627817711/kdmgs110-22/ref=nosim/" name="amazletlink" target="_blank">データ解析の実務プロセス入門</a><br />
<div class="amazlet-powered-date" style="font-size: 80%; line-height: 120%; margin-top: 5px;">
posted with <a href="http://www.amazlet.com/" target="_blank" title="amazlet">amazlet</a> at 18.06.15</div>
</div>
<div class="amazlet-detail">
あんちべ <br />
森北出版 <br />
売り上げランキング: 12,930</div>
<div class="amazlet-sub-info" style="float: left;">
<div class="amazlet-link" style="margin-top: 5px;">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/4627817711/kdmgs110-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jpで詳細を見る</a></div>
</div>
</div>
<div class="amazlet-footer" style="clear: left;">
</div>
</div>
<br />
<br />
<a name='more'></a><br />
<br />
<h4>
データ解析のフロー</h4>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />
データ分析の流れ的なところについて。進め方は以下のようにやるとよいらしいです。当たり前だけど、しっかりとハメていかないとと思いました。<br />
<br />
<blockquote class="tr_bq">
1·目的設定:何のためにデータを取るか<br />
2·分析計画:どのような分析をするか<br />
3·データ設計:どのようなデータを取るか<br />
4·データ収集·保存<br />
5·データの前処理<br />
6·分析手法選択と適用<br />
7·分析結果の解釈<br />
8·施策の提案<br />
9. 実施と検証<br />
10. 反省</blockquote>
<br />
<h4>
データの定義</h4>
データの定義次第によって、出てくる結果は大きくことなるので、定義を誰から見てもわかるようにしておく必要があるようです。例えば、ユーザー数などと表示されているときに、それは月間ユーザー数なのか、総登録ユーザー数なのか、もしくは新規ユーザーなのかがわかりません。MECEにデータを定義してあげないと、報告に耐えうる数字にはならないでしょう。<br />
<br />
<br />
データのディスカッションをしていて、抜け勝ちなのですが、そもそも何のデータを取っているのかが全員同じ前提で話せていないのはかなりまずい(というかそれだと分析している意味がない)ので、複数の解釈が生まれないようなデータの定義を全体でしておくことが大事なのだと思います。<br />
<br />
<blockquote class="tr_bq">
データの素性で何よりも大切なことが「データの定義」です。<br />
情報でも定義次第でどのようなデータになるのか全く異なるため、定義<br />
簡潔に明示しなければなりません。筆者がSNSを眺めていると、「凶悪犯罪を比較した結果、ある国が頭一つとび抜けて件数が多かった」というグラフが投稿されてきたことがあります。こうした情報を正しく理解するためには必ず定義を確認しなければなりません。</blockquote>
<br />
<br />
<br />
<h4>
目的設定:①仮説検証型アプローチと②探索型アプローチ</h4>
<br />
データを使って研究の目的を設定する場合に二つのアプローチがあるようです。一つは、仮説検証型アプローチで、もう一つは探索型アプローチです。<br />
<br />
<br />
仮説検証型アプローチは、すでに膨大なある仮設を検証する分析を目的にしていて、そもそも仮説がない場合は探索的にデータを見ていくアプローチがよいそうです。<br />
<br />
<br />
<blockquote class="tr_bq">
目的を設定する方法は大きく分けて二つのアプローチがあり、仮説検証型アプ<br />
ローチと探索型アプローチと言います。前者はデータ解析者や依頼者がもつ仮説をデータによって正誤を検証するアプローチで、後者はすでにあるデータを様々な切口から眺めることによって目的を生み出すためのアプローチです。はじめから何かの仮説がある場合は、その仮説に基づいて仮説検証型のアプローチを進めま仮にその仮説が間違っていた場合であっても、それはプロセスを反復する上で改善していけばよいだけです。逆に、データ解析者に市場や製品の知識が乏しかっり市場の変遷が激しすぎて仮説を立てられない状況で、かつある程度データがぁる場合は、探索型のアプローチを取ります。その場合は、各データの分布を見たりデータ同士を比較することによってデータから何らかの特徴を発見し、その特徴を解明することによって最終的に価値へとつなげるという手順を踏みます。たとえば、数ある自社製品のなかでもある商品だけ売上が悪かったり、あるサービスにおして30代男性の層だけ妙に利用継続率が悪かったなどの特徴がデータから明らかになれば、さらにその理由を問うことで検証を進めていくことができます。この探索型のアプローチを統計学の用語で探索的データ解析と言います。</blockquote>
<br />
<h4>
探索的データ解析の方法</h4>
<br />
まだ仮説なんてねえよ!ってくらい、全体で何が起こっているのかがよくわからない場合、探索的データ解析を行うようです。それはまずデータの可視化を行うことが大事です。<br />
<br />
<br />
<blockquote class="tr_bq">
■可視化<br />
どの値がどの程度大きいのか、時間に沿ってどのように増減しているのかなどを読み取るのは至難の業です。また、人間が大量のだけでその全体像や特徴を把握することは不可能です。そこで図やデータグラフを用いて、データを視覚的にわかりやすく表現するのが可視化です。データの性質や特徴によって適用できる統計処理が異るため、ある程度データの様々な性質や特徴を把握している必要があります。実務では、データの性質や特徴が事前に明らかではないケースも多々あります。<br />
そこで探索的データ解析では、まずデータの性質や傾向はそもそも不明であるという前提に立ち、データの性質や傾向を明らかにするための可視化に重点を置きます。<br />
使われる手法としては、分布を表現するヒストグラムや(比較対象が少ない場合)<br />
げ図(比較対象が多い場合)、変数の関係を表す散布図が挙げられます。</blockquote>
<div>
<br /></div>
<h4>
最後に</h4>
<br />
<br />
さくっと呼んだだけなのですが、データ解析で要約統計量、つまりは探索的データ解析<br />
をしてから、仮説検証型のデータ解析をするという流れがよいのを、大学の研究でやっていたのにすっかり忘れていました。そうそう、全体像で細かい問題が見えなければ、仮説なんて出てこないもんなぁ。いざチームでやると難しいものだ。<br />
<br />
<br />
<br />
<br />
<div class="amazlet-box" style="margin-bottom: 0px;">
<div class="amazlet-image" style="float: left; margin: 0px 12px 1px 0px;">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/4627817711/kdmgs110-22/ref=nosim/" name="amazletlink" target="_blank"><img alt="データ解析の実務プロセス入門" src="https://images-fe.ssl-images-amazon.com/images/I/51w-m%2B2EohL._SL160_.jpg" style="border: none;" /></a></div>
<div class="amazlet-info" style="line-height: 19.2px; margin-bottom: 10px;">
<div class="amazlet-name" style="line-height: 19.2px; margin-bottom: 10px;">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/4627817711/kdmgs110-22/ref=nosim/" name="amazletlink" target="_blank">データ解析の実務プロセス入門</a><br />
<div class="amazlet-powered-date" style="font-size: 12.8px; line-height: 15.36px; margin-top: 5px;">
posted with <a href="http://www.amazlet.com/" target="_blank" title="amazlet">amazlet</a> at 18.06.15</div>
</div>
<div class="amazlet-detail">
あんちべ<br />
森北出版<br />
売り上げランキング: 12,930</div>
<div class="amazlet-sub-info" style="float: left;">
<div class="amazlet-link" style="margin-top: 5px;">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/4627817711/kdmgs110-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jpで詳細を見る</a></div>
</div>
</div>
<div class="amazlet-footer" style="clear: left;">
</div>
</div>
<br />
<br />
<br />
<br />Unknownnoreply@blogger.comtag:blogger.com,1999:blog-2592581639714884938.post-6374488295102160552018-05-02T12:56:00.000+09:002018-05-02T12:56:30.981+09:00『いちばんやさしいグロースハックの教本』のためになったことをまとめた<h4>
『いちばんやさしいグロースハックの教本』を読んでみた。</h4>
<br />
つい最近Web集客だったり、プロダクト改善のためのグロースハックという言葉に興味を持ち、本屋を歩いていたら『いちばんやさしいグロースハックの教本』という本が結構いいい感じだったので、Amazonで調べてみました。<br />
<br />
<br />
<div class="amazlet-box" style="margin-bottom: 0px;">
<div class="amazlet-image" style="float: left; margin: 0px 12px 1px 0px;">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/B01BY7HMYO/kdmgs110-22/ref=nosim/" name="amazletlink" target="_blank"><img alt="いちばんやさしいグロースハックの教本 人気講師が教える急成長マーケティング戦略 「いちばんやさしい教本」シリーズ" src="https://images-fe.ssl-images-amazon.com/images/I/61bowC9GKzL._SL160_.jpg" style="border: none;" /></a></div>
<div class="amazlet-info" style="line-height: 120%; margin-bottom: 10px;">
<div class="amazlet-name" style="line-height: 120%; margin-bottom: 10px;">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/B01BY7HMYO/kdmgs110-22/ref=nosim/" name="amazletlink" target="_blank">いちばんやさしいグロースハックの教本 人気講師が教える急成長マーケティング戦略 「いちばんやさしい教本」シリーズ</a><br />
<div class="amazlet-powered-date" style="font-size: 80%; line-height: 120%; margin-top: 5px;">
posted with <a href="http://www.amazlet.com/" target="_blank" title="amazlet">amazlet</a> at 18.05.01</div>
</div>
<div class="amazlet-detail">
インプレス (2016-01-22)<br />
売り上げランキング: 863</div>
<div class="amazlet-sub-info" style="float: left;">
<div class="amazlet-link" style="margin-top: 5px;">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/B01BY7HMYO/kdmgs110-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jpで詳細を見る</a></div>
</div>
</div>
<div class="amazlet-footer" style="clear: left;">
</div>
</div>
<br />
<a name='more'></a><br /><br />
<br />
で、かなりびっくりしたんですけど、<span style="background-color: #fff2cc;">Kindle Unlimitedで0円で販売されていた</span>ので、すかさず購入しました。Kindle Unlimited、結構良書が無料だったりするので月額980円払っておいてよかったなぁと思いました。ちなみに下がKindle Unlimitedのリンクですね。興味がある人はぜひ。<br />
<br />
<br />
<iframe border="0" frameborder="0" height="100" marginwidth="0" scrolling="no" src="https://rcm-fe.amazon-adsystem.com/e/cm?o=9&p=293&l=ur1&category=kindleunlimited&banner=05G450N240N3CHYBN2R2&f=ifr&linkID=d191be7ad3fe04bc78aeff0a4174ffb1&t=kdmgs110-22&tracking_id=kdmgs110-22" style="border: none;" width="640"></iframe><br />
<br />
<br />
で、本の内容もすごくよくて、<span style="background-color: #fff2cc;">まさにこういうことを知りたかった!</span>という情報がたくさん載っていました。amazonの紹介はこんな感じ!<br />
<br />
<br />
<blockquote class="tr_bq">
注目の成長戦略「グロースハック」の実践方法が学べる、日本初の体系的な解説書。業界の第一人者である著者が、自社製品を育てた経験をもとに、すぐに役立つ手法やフレームワークを解説します。製品やサービスを最短で収益化して成長に導くために、製品開発とマーケティングを横断しながら「成長のエンジン」を製品に埋め込むグロースハックはどうすれば実行できるのか。成長段階を5つに分ける「ARRRA」モデルや、正しいKPIの設定方法、有効な施策を導く「グロースサイクル」フレームワークなど、自社実践に基づく成長のノウハウを丁寧に解説。</blockquote>
<br />
<br />
これは今後も必読書になりそうなので、また何度か読み直したいと考えています。<br />
以下、箇条書きにメモ。<br />
<br />
<br />
<h4>
グロースハックとは</h4>
<br />
<ul>
<li>グロースハック:製品開発とマーケティングに両方携わる</li>
<li>製品そのものに成長する仕組みを取り入れることがマーケティングとの違い</li>
<li>メリット</li>
<ul>
<li>数字による検証でメンバーのモチベーションを向上させられる</li>
<li>成長率を客観的に可視化できるので、投資先に説明しやすい</li>
</ul>
</ul>
<br />
<blockquote class="tr_bq">
グロースハックの主戦場は製品開発です。製品開発といっても単にサービスの改良や改善を目的としたものではなく、「仕組み」として成長する機能を盛り込んでいくことがポイントになります。例えばFacebookでは、友人が自分をタグ付けした写真を投稿すると、自分宛にメールが来たり、アプリのアイコンに赤丸が付いて通知されたりするようになっています。このため日常的にFacebookを使わない人でも気になって、Facebookにアクセスしてしまう、という仕組みです。</blockquote>
<br />
<blockquote class="tr_bq">
グロースハックにおいてデータによる意思決定は非常に重要です。何かしらのグロースハックをして、それが成功か失敗かを判断するものはデータしかありません。製品の「成長」を判断できるものは数値しかないからです。グロースハックの企画、設計時点で、 どの数値をどのようにしたいのか、ということを明確に定義しておき、その結果を数値で判断できるようにしておく ことが必須です。</blockquote>
<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
グロースハックはマーケと開発を横断する役割を持つ <a href="https://twitter.com/hashtag/%E3%82%B0%E3%83%AD%E3%83%BC%E3%82%B9%E3%83%8F%E3%83%83%E3%82%AF?src=hash&ref_src=twsrc%5Etfw">#グロースハック</a> <a href="https://t.co/BNWXdWCUwo">pic.twitter.com/BNWXdWCUwo</a></div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/990613423124762624?ref_src=twsrc%5Etfw">April 29, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
グロースハックはプロダクトの中に成長を埋め込む仕組み。Progateのコース完了後のソーシャル拡散とかもそうだな。OAuth認証ってセキュリティ以上に認可の点でグロースハックのための攻めの機能になってそう。スコープに自動投稿とか入れたら強いもんな <a href="https://twitter.com/hashtag/%E3%82%B0%E3%83%AD%E3%83%BC%E3%82%B9%E3%83%8F%E3%83%83%E3%82%AF?src=hash&ref_src=twsrc%5Etfw">#グロースハック</a> <a href="https://t.co/BD4K5rFo9P">pic.twitter.com/BD4K5rFo9P</a></div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/990614977084997632?ref_src=twsrc%5Etfw">April 29, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
・Dropboxはシェアして登録することで保存容量を増やす仕組みでグロースハック<br />
・Airbnbは競合プラットフォームに自動登録してパイを奪ってグロースハック<br />
ある程度鉄板のグロースハック事例は抑えておきたい。 <a href="https://twitter.com/hashtag/%E3%82%B0%E3%83%AD%E3%83%BC%E3%82%B9%E3%83%8F%E3%83%83%E3%82%AF?src=hash&ref_src=twsrc%5Etfw">#グロースハック</a></div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/990618118807470086?ref_src=twsrc%5Etfw">April 29, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
グロースハックのメリット<br />
・数字による検証でメンバーのモチベーションを向上させられる<br />
・成長率を客観的に可視化できるので、投資先に説明しやすい<a href="https://twitter.com/hashtag/%E3%82%B0%E3%83%AD%E3%83%BC%E3%82%B9%E3%83%8F%E3%83%83%E3%82%AF?src=hash&ref_src=twsrc%5Etfw">#グロースハック</a></div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/990619924845346818?ref_src=twsrc%5Etfw">April 29, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<br />
<h4>
グロースハッカーに必要な能力、および必要なメンバー</h4>
<br />
<ul>
<li>必要な資質</li>
<ul>
<li>UXデザイン</li>
<li>データ分析</li>
<li>PM(プロジェクトマネジメント)</li>
</ul>
<li>必要なチームメンバー</li>
<ul>
<li>ハスラー</li>
<li>ハッカー:製品開発</li>
<li>ヒップスター:UX/UIデザイナー</li>
</ul>
</ul>
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
グロースハッカーに必要な3要素<br />
・UXデザイン<br />
・データ分析<br />
・PM<a href="https://twitter.com/hashtag/%E3%82%B0%E3%83%AD%E3%83%BC%E3%82%B9%E3%83%8F%E3%83%83%E3%82%AF?src=hash&ref_src=twsrc%5Etfw">#グロースハック</a> <a href="https://t.co/6l5M4IOtmM">pic.twitter.com/6l5M4IOtmM</a></div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/990620958267342848?ref_src=twsrc%5Etfw">April 29, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
グロースチーム <a href="https://twitter.com/hashtag/%E3%82%B0%E3%83%AD%E3%83%BC%E3%82%B9%E3%83%8F%E3%83%83%E3%82%AF?src=hash&ref_src=twsrc%5Etfw">#グロースハック</a> <a href="https://t.co/pKiDMPMP87">pic.twitter.com/pKiDMPMP87</a></div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/990622981897445376?ref_src=twsrc%5Etfw">April 29, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<h4>
AARRRモデル</h4>
<br />
<br />
<ul>
<li>Aqquisition:ユーザー獲得</li>
<li>Activation:ユーザー活性化</li>
<li>Retention:継続</li>
<li>Revenue:収益化</li>
<li>Referal:紹介</li>
</ul>
<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
AARRRモデル。note戦略に落とし込みたい。 <a href="https://twitter.com/hashtag/%E3%82%B0%E3%83%AD%E3%83%BC%E3%82%B9%E3%83%8F%E3%83%83%E3%82%AF?src=hash&ref_src=twsrc%5Etfw">#グロースハック</a> <a href="https://t.co/IZLpLy9Jym">pic.twitter.com/IZLpLy9Jym</a></div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/990624570330701825?ref_src=twsrc%5Etfw">April 29, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<br />
<h4>
Activationの検証</h4>
<div>
<br /></div>
<ul>
<li>PSF検証が必須(Problem Solution Fit)</li>
<ul>
<li>誰の</li>
<li>どんな課題を</li>
<li>どうやって解決するか</li>
</ul>
<li>PSF検証しないでプロダクトを創るとニーズがなくて死ぬ</li>
<ul>
<li>スタートアップが失敗する理由は、マーケットのニーズが足りないことに起因する</li>
</ul>
<li>PSF検証の方法</li>
<ul>
<li>デモを作って顧客の反応を見る</li>
<li>自明ではなく、かつそれが分かればインパクトの強い仮説の検証が必要</li>
</ul>
</ul>
<br />
<blockquote class="tr_bq">
誰の・どんな課題を・どうやって解決するか」、つまり「顧客・課題・解決法」という3つの要素から成り立っています。しかし、そのサービスが解決しようとしている課題が実は存在していなかった、ということはよくあります。開発やマーケティングに長い時間を使って、サービス終了の直前にこうした事実に気づくのでは遅すぎます。本格的な開発をするよりも先に、「そもそも解決しようとしている課題を、本当に顧客は抱えているのか?」「そもそもこのサービスは顧客が求めるものか?」という問いを検証しましょ<br />
う。</blockquote>
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
すべてのサービスには<br />
1. 誰の<br />
2. どんな課題を<br />
3. どうやって解決するか<br />
という要素がある。が、課題がないのにプロダクトを作り続けて詰むことがあるので仮説検証する必要がある <a href="https://twitter.com/hashtag/%E3%82%B0%E3%83%AD%E3%83%BC%E3%82%B9%E3%83%8F%E3%83%83%E3%82%AF?src=hash&ref_src=twsrc%5Etfw">#グロースハック</a> <a href="https://t.co/cLVzBXQiLf">pic.twitter.com/cLVzBXQiLf</a></div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/990758702935257088?ref_src=twsrc%5Etfw">April 30, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
スタートアップが失敗する理由で一番多いのは、マーケットのニーズがないパターン <a href="https://twitter.com/hashtag/%E3%82%B0%E3%83%AD%E3%83%BC%E3%82%B9%E3%83%8F%E3%83%83%E3%82%AF?src=hash&ref_src=twsrc%5Etfw">#グロースハック</a> <a href="https://t.co/UCBqoIHH8N">pic.twitter.com/UCBqoIHH8N</a></div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/990759102480506880?ref_src=twsrc%5Etfw">April 30, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
PSF検証はデモで良い<a href="https://twitter.com/hashtag/%E3%82%B0%E3%83%AD%E3%83%BC%E3%82%B9%E3%83%8F%E3%83%83%E3%82%AF?src=hash&ref_src=twsrc%5Etfw">#グロースハック</a> <a href="https://t.co/a2SMUX2WBN">pic.twitter.com/a2SMUX2WBN</a></div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/990813449411219457?ref_src=twsrc%5Etfw">April 30, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
PSF検証と評価<a href="https://twitter.com/hashtag/%E3%82%B0%E3%83%AD%E3%83%BC%E3%82%B9%E3%83%8F%E3%83%83%E3%82%AF?src=hash&ref_src=twsrc%5Etfw">#グロースハック</a> <a href="https://t.co/Wd9MovmQmQ">pic.twitter.com/Wd9MovmQmQ</a></div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/991072167507910656?ref_src=twsrc%5Etfw">April 30, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<br />
PFS検証についてはこちらの記事がよくまとまっていました。<br />
<br />
<a href="http://growiz.us/activation-problem-solution-fit/">> グロースハックにおいて最も重要なアクティベーション完全マニュアル</a><br />
<br />
<br />
<h4>
KGIとKPI</h4>
<br />
<ul>
<li>KGI (Key Goal Indicator)</li>
<ul>
<li>最終的に上げたい数値(売り上げ、再来率等)</li>
</ul>
<li>KPI(Key Peformance Indicator):以下3つの条件が必要</li>
<ul>
<li>行動につながる指標であるということ</li>
<li>理解しやすいということ</li>
<li>期間ごとに比較ができる</li>
</ul>
</ul>
<br />
<blockquote class="tr_bq">
良いKPIの3つの条件 良いKPIは以下の3つの条件を満たしています。 1つ目は、アクショナブル、すなわち 行動につながる指標であるということ。例えば、サービスの「総PV数」をKPIとしてても施策を考えるのは難しいでしょう。一方で、「登録初日ユーザーの投稿数」というKPIであれば、施策はいくらでも思いつきます。 2つ目は、 理解しやすいということ です。説明に苦労するような複雑なKPIはグロースハッカー自身も使いこなせない可能性が高く、チームの理解・協力も得づらいため、できるだけKPIはシンプルで分かりやすいものにしましょう。 3つ目は 期間ごとに比較ができることです。</blockquote>
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
KGIとKPI<a href="https://twitter.com/hashtag/%E3%82%B0%E3%83%AD%E3%83%BC%E3%82%B9%E3%83%8F%E3%83%83%E3%82%AF?src=hash&ref_src=twsrc%5Etfw">#グロースハック</a> <a href="https://t.co/0oaFjUenlO">pic.twitter.com/0oaFjUenlO</a></div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/991074731267784704?ref_src=twsrc%5Etfw">April 30, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
グロースサイクル<a href="https://twitter.com/hashtag/%E3%82%B0%E3%83%AD%E3%83%BC%E3%82%B9%E3%83%8F%E3%83%83%E3%82%AF?src=hash&ref_src=twsrc%5Etfw">#グロースハック</a> <a href="https://t.co/pQSu9dvhLJ">pic.twitter.com/pQSu9dvhLJ</a></div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/991074250504060929?ref_src=twsrc%5Etfw">April 30, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<h4>
ファネル分析</h4>
<br />
<ul>
<li>ファネル分析</li>
<ul>
<li>グロースハックの段階でどこで離脱率が多いのかを特定する方法</li>
</ul>
<li>施策</li>
<ul>
<li>ファネル分析でボトルネックになっているところを改善する</li>
<li>インパクトが大きく工数が低い施策を打つことが必要とされている</li>
</ul>
</ul>
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
ファネル分析<br />
・ユーザーの離脱率を段階的に見ていく方法<a href="https://twitter.com/hashtag/%E3%82%B0%E3%83%AD%E3%83%BC%E3%82%B9%E3%83%8F%E3%83%83%E3%82%AF?src=hash&ref_src=twsrc%5Etfw">#グロースハック</a> <a href="https://t.co/QbZ3Fn3VLx">pic.twitter.com/QbZ3Fn3VLx</a></div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/991075371662561280?ref_src=twsrc%5Etfw">April 30, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
施策を打つ時は<br />
・インパクト<br />
・工数<br />
で検討する<a href="https://twitter.com/hashtag/%E3%82%B0%E3%83%AD%E3%83%BC%E3%82%B9%E3%83%8F%E3%83%83%E3%82%AF?src=hash&ref_src=twsrc%5Etfw">#グロースハック</a> <a href="https://t.co/zcqxVFHq5w">pic.twitter.com/zcqxVFHq5w</a></div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/991077486933950465?ref_src=twsrc%5Etfw">April 30, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<br />
<h4>
コーホート分析</h4>
<br />
<br />
<ul>
<li>コーホート分析:施策の可否をデータで追いかける</li>
<li>習慣づけのフレームワーク</li>
<ul>
<li>Trigger</li>
<li>Action</li>
<li>Variable Reward</li>
<li>Investment</li>
</ul>
</ul>
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
リテンション<br />
・コーホート分析<br />
・習慣づけのフレームワーク<a href="https://twitter.com/hashtag/%E3%82%B0%E3%83%AD%E3%83%BC%E3%82%B9%E3%83%8F%E3%83%83%E3%82%AF?src=hash&ref_src=twsrc%5Etfw">#グロースハック</a> <a href="https://t.co/3mxxTJvDNq">pic.twitter.com/3mxxTJvDNq</a></div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/991194293732761600?ref_src=twsrc%5Etfw">May 1, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<blockquote class="tr_bq">
いつやったリテンション施策がどのくらい効果があったのかを正確に把握するために最も適している分析手法がコホート分析です。個別の施策の効果を正しく計測するには、「1日1施策」で計測することがポイントです。</blockquote>
<br />
<br />
<br />
コーホート分析についてはネットで以下の記事が詳しかった。<br />
<br />
<a href="https://www.synergy-marketing.co.jp/glossary/cohort-analysis/">> コーホート分析</a><br />
<br />
<br />
<h4>
フックモデル</h4>
<br />
<blockquote class="tr_bq">
ユーザーの行動を促す最初のきっかけが作られたら、次は具体的な行動、つまりサービスの利用を促しましょう。ユーザーにサービスを利用してもらうためには、「B=M+A+T」という公式にあてはめて考えると理解しやすくなります。この公式をかいつまんで言うと、「 行動は、モチベーションと能力とトリガーの3つがそろったときに起きる」というものです。例えば、雨の日のランニングという行動(B)は、雨の日でもランニングしたいというモチベーション(M)と、ランニングできるという能力(A)、ランニングしたいというきっかけ(T)</blockquote>
<h4>
<br />リファラル</h4>
<br />
<br />
<ul>
<li>「自然的拡散」:サービスを利用する中で自然とリファラルが起きる種類のもの</li>
<li>「人工的拡散」:ポイントなどのインセンティブを付与することで、人為的にリファラルを起こす もの</li>
<li>「パラサイト型拡散」:パラサイト型のリファラルとは、 同種のユーザーを抱えたより大きなプラットフォームに自社のコンテンツを流し込み、ユーザーを獲得する方法</li>
<li>「クチコミ」:サービスに満足したユーザーが、リアルな場やSNSなどサービスとは離れたところで友人に紹介する 行為</li>
<li></li>
<li>自社サービスにリファラルの仕組みを入れるとよい</li>
</ul>
<br />
<br />
<h4>
リファラルを定量的な指標で評価する方法</h4>
<br />
<ul>
<li>ネットプロモータースコア(NPS): 全ユーザーのうち推奨者(プロモーター)の割合を示すもの で、ユーザーのロイヤルティを最も手軽に測れる指標</li>
<li>バイラル係数: 既存ユーザーが平均して何人の新規ユーザーを呼び込むかという指標</li>
</ul>
<br />
<br />
<h4>
最後に</h4>
<br />
書きたいことはやまほどあるのですが、現時点で理解できるレベルはこのくらいだったので、メモとして残しておきました。いやぁそれにしてもこれがKindle Unlimitedにあるの謎だ!っていうくらいいい本でした。Amazonから直接買いたい人はこちらからどうぞ!<br />
<br />
<br />
<div class="amazlet-box" style="margin-bottom: 0px;">
<div class="amazlet-image" style="float: left; margin: 0px 12px 1px 0px;">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/B01BY7HMYO/kdmgs110-22/ref=nosim/" name="amazletlink" target="_blank"><img alt="いちばんやさしいグロースハックの教本 人気講師が教える急成長マーケティング戦略 「いちばんやさしい教本」シリーズ" src="https://images-fe.ssl-images-amazon.com/images/I/61bowC9GKzL._SL160_.jpg" style="border: none;" /></a></div>
<div class="amazlet-info" style="line-height: 19.2px; margin-bottom: 10px;">
<div class="amazlet-name" style="line-height: 19.2px; margin-bottom: 10px;">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/B01BY7HMYO/kdmgs110-22/ref=nosim/" name="amazletlink" target="_blank">いちばんやさしいグロースハックの教本 人気講師が教える急成長マーケティング戦略 「いちばんやさしい教本」シリーズ</a><br />
<div class="amazlet-powered-date" style="font-size: 12.8px; line-height: 15.36px; margin-top: 5px;">
posted with <a href="http://www.amazlet.com/" target="_blank" title="amazlet">amazlet</a> at 18.05.01</div>
</div>
<div class="amazlet-detail">
インプレス (2016-01-22)<br />
売り上げランキング: 863</div>
<div class="amazlet-sub-info" style="float: left;">
<div class="amazlet-link" style="margin-top: 5px;">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/B01BY7HMYO/kdmgs110-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jpで詳細を見る</a></div>
</div>
</div>
<div class="amazlet-footer" style="clear: left;">
</div>
</div>
<br />
<br />
Kindle Unlimitedの場合実質ただなので、ゴールデンウイークでひたすら本読むのであれば割によさそうです。下のリンクからKindle Unlimitedにいけます!<br />
<br />
<iframe border="0" frameborder="0" height="100" marginwidth="0" scrolling="no" src="https://rcm-fe.amazon-adsystem.com/e/cm?o=9&p=293&l=ur1&category=kindleunlimited&banner=05G450N240N3CHYBN2R2&f=ifr&linkID=d191be7ad3fe04bc78aeff0a4174ffb1&t=kdmgs110-22&tracking_id=kdmgs110-22" style="border-style: none; border-width: initial;" width="640"></iframe><br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />Unknownnoreply@blogger.comtag:blogger.com,1999:blog-2592581639714884938.post-51522402890875487152018-04-30T13:06:00.002+09:002018-04-30T13:06:48.254+09:00【急募】『次に売れるAV女優を予測する』スケベKaggleやります!人材募集中!<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGnDAwWgTLJJCpbae_9B9dtwn1PQpgONq1kBeRoUv-Cy9SONNFH_54VWqb2yRLXFlR_SH1DoDnNJ8I8g4EnKeks3JwTfJkqIuDTcXyAqMI48trfBk91kQeZOHPM652MBMuHFQ64JnRo5s/s1600/kaggle.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="291" data-original-width="640" height="145" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGnDAwWgTLJJCpbae_9B9dtwn1PQpgONq1kBeRoUv-Cy9SONNFH_54VWqb2yRLXFlR_SH1DoDnNJ8I8g4EnKeks3JwTfJkqIuDTcXyAqMI48trfBk91kQeZOHPM652MBMuHFQ64JnRo5s/s320/kaggle.png" width="320" /></a></div>
<div class="tr_bq">
<br /></div>
<div class="tr_bq">
<br /></div>
<h4>
<br />さきにまとめ</h4>
<div class="tr_bq">
<br /></div>
<br />
<ul>
<li>『次に売れるAV女優を予測する』スケベKaggleをやりたいです</li>
<li>様々な仮説をもとに、スケベデータを取得して、一般公開します</li>
<li>協力者募集中!</li>
</ul>
<br />
<br />
というお話です。<br />
<br />
<br />
<a name='more'></a><br /><br />
<h4>
ことの発端</h4>
<br />
まだ全然構想ないんですけど、『次に売れるAV女優を予測する』というテーマで、スケベKaggleやりたいと思ってます。Kaggleについてはこの記事を参照<br />
<br />
<a href="https://wired.jp/2018/01/17/solve-tough-data-problems/">> データ分析を「世界競技」にするサイトKaggle──その優勝者たちが企業から引く手あまたの理由</a><br />
<br />
<br />
発端はこのツイート<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
もちこさん(<a href="https://twitter.com/CO_mochi_mochi?ref_src=twsrc%5Etfw">@CO_mochi_mochi</a>)のブログめっちゃくちゃ面白い。 売れるAV女優の予測とか、統計的なアプローチできたら面白そうだなぁ<a href="https://t.co/7g9Jcc1qs3">https://t.co/7g9Jcc1qs3</a></div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/990373445211897856?ref_src=twsrc%5Etfw">April 28, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
もちこさんが<span style="background-color: #fff2cc;">売れるAV女優の特徴を分析</span>されていたんですよね。読んでいるといろいろな変数があるみたいで。やっぱりレーベルごとに出演本数が違ったり、おっぱいの大きさも関係していたりするんですよね。<br />
<br />
<br />
<a href="http://mochi-mochi.hateblo.jp/entry/2017/03/11/080000">> AV女優は25歳をすぎないと売れない</a><br />
<br />
以下引用<br />
<br />
<br />
<blockquote class="tr_bq">
以前、業界歴の長いセル店の店長さんに「売れる女優ってどうしたら分かりますか?」と聞いたら、今まで売れていた女優を調べて、昔売れていたけど、最近は似ている子が出てない子を見つけて、今の女優の中から似た女優を探せばいい、とおしえてもらったので、DMM女優ランキングをエクセルにまとめるようにしているんです。量が膨大だから、ちょっとずつね。</blockquote>
調査している変数としては<br />
<br />
<blockquote>
・参考にするランキングはDMMの各年次のAV女優ランキング<br />・調べるのは身長、髪色、髪の長さ、カップ数、デビューからの年数、生まれ年、営業年齢、デビュー年、専属経験<br />・女優のプロフィールはwikipedia参照 <br />・営業年齢、デビューからの年数はランキング当時 <br />・髪色・髪型はDMM登録画像参照。私が目視で確認した印象を記載</blockquote>
<br />
<h4>
スケベKaggleできんでねぇか?</h4>
<br />
ということはですよ、もしこれに一般化できるモデルが創れたら、「次に売れるスターAV女優の予測」ができるはずなんですよ。最高にホットじゃないですか?<br />
<br />
<br />
<h4>
スケベKaggleプロジェクト始動します!</h4>
<br />
ということで、さっそくプロジェクト立ち上げたいと思います。題名はずばりスケベKaggleです。<br />
<br />
<br />
<h4>
プロジェクトの詳細</h4>
<br />
やろうと思っていることは以下の通りです<br />
<br />
<br />
<h4>
1. 売れるAV女優の仮説を集める</h4>
<br />
まず、数年間にわたって最も売れたAV女優の特徴を知りたいです。そのために、AV女優として売れるための変数を洗いざらいにしたいです。採用条件はかなり厳しめですが<br />
<br />
<br />
<br />
<ul>
<li>10年以上のオナニー経験</li>
<li>広範囲にわたるAV女優の知識</li>
<li>レーベルなどの業界事情に詳しい人</li>
</ul>
<br />
<br />
を募集したいです。<br />
<br />
<br />
<h4>
2. 各種データの前処理を行う</h4>
<br />
<br />
さらに、1.で出た情報をもとに、泥臭くデータを集めたいと思います。<br />
おそらく髪の色だったり、レーベルの情報だったりをwikipediaで集めたりとか、割と泥臭い情報になると思います。<br />
<br />
・スケベな情報を調べるのが苦ではない人<br />
<br />
が欲しいです。<br />
<br />
<br />
<h4>
3. データ分析</h4>
<br />
ここまでいったら、それらのデータをオープンデータとして公開したいと思います。そしてスケベKaggleをやります。ここはプロのデータサイエンティストにやってもらったらうれしいなぁ。<br />
<br />
<br />
<br />
<h4>
参加方法</h4>
ツイッターの<a href="https://twitter.com/never_be_a_pm">@never_be_a_pm</a>まで「スケベKaggleやりたい」とご連絡ください。<br />
適当にSlackで部屋つくってやりたいと思います。Unknownnoreply@blogger.comtag:blogger.com,1999:blog-2592581639714884938.post-60028328713285459712018-04-30T09:09:00.000+09:002018-04-30T09:09:03.570+09:00『10年後の仕事図鑑』の面白かったところまとめ堀江貴文氏と落合洋一氏の共著『10年後の仕事図鑑』を読みましたので書評を書きます。<br />
<div>
<br /></div>
<div>
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
<a href="https://twitter.com/hashtag/10%E5%B9%B4%E5%BE%8C%E3%81%AE%E4%BB%95%E4%BA%8B%E5%9B%B3%E9%91%91?src=hash&ref_src=twsrc%5Etfw">#10年後の仕事図鑑</a> 読了。<br />
堀江さんと落合さんの本はかなり読んでるので思想のバックグラウンドがあったけど、両者の視点を交互に見れるのがよかった。明日ブログにまとめる <a href="https://twitter.com/hashtag/%E3%82%84%E3%82%8A%E3%81%9F%E3%81%84%E3%81%93%E3%81%A8?src=hash&ref_src=twsrc%5Etfw">#やりたいこと</a> <a href="https://t.co/3e8uDNrkxI">https://t.co/3e8uDNrkxI</a></div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/990608225367044096?ref_src=twsrc%5Etfw">April 29, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
</div>
<div>
<br /></div>
<div>
もともとホリエモンの多動力と、落合洋一氏のは読んでいたので、この本には非常に興味がありました。<br />
<br />
<a href="https://review-of-my-life.blogspot.jp/2017/06/tadoryoku.html">> 過去記事 多動力まとめました を読む</a><br />
<br />
<a href="https://review-of-my-life.blogspot.jp/2017/11/blog-post18.html">> 過去記事 「これからの世界をつくる仲間たちへ(落合陽一)」の書評を書きました。 を読む</a><br />
<br />
ということで、面白かったところのハイライトをまとめていきたいと思います。<br />
<br />
<br />
<div class="amazlet-box" style="margin-bottom: 0px;">
<div class="amazlet-image" style="float: left; margin: 0px 12px 1px 0px;">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/B07BGVZLDZ/kdmgs110-22/ref=nosim/" name="amazletlink" target="_blank"><img alt="10年後の仕事図鑑" src="https://images-fe.ssl-images-amazon.com/images/I/51FC6pCUJ9L._SL160_.jpg" style="border: none;" /></a></div>
<div class="amazlet-info" style="line-height: 120%; margin-bottom: 10px;">
<div class="amazlet-name" style="line-height: 120%; margin-bottom: 10px;">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/B07BGVZLDZ/kdmgs110-22/ref=nosim/" name="amazletlink" target="_blank">10年後の仕事図鑑</a><br />
<div class="amazlet-powered-date" style="font-size: 80%; line-height: 120%; margin-top: 5px;">
posted with <a href="http://www.amazlet.com/" target="_blank" title="amazlet">amazlet</a> at 18.04.30</div>
</div>
<div class="amazlet-detail">
SBクリエイティブ (2018-04-05)<br />
売り上げランキング: 42</div>
<div class="amazlet-sub-info" style="float: left;">
<div class="amazlet-link" style="margin-top: 5px;">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/B07BGVZLDZ/kdmgs110-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jpで詳細を見る</a></div>
</div>
</div>
<div class="amazlet-footer" style="clear: left;">
</div>
</div>
<br />
<br />
<br />
<h4>
目次</h4>
<br />
<br />
<ul>
<li>ブルーオーシャンを探せ</li>
<li>一つの職業にはまるな</li>
<li>交換できる価値を持とう</li>
<li>ポートフォリオ分散しよう</li>
</ul>
<br />
<br />
<a name='more'></a><br /></div>
<div>
<h4>
ブルーオーシャンを探せ</h4>
<br />
競合が多く仕組み化されやすくなる将来、そこで頑張り続けるとレッドオーシャンなので、まだ誰もやっていない領域でとことん面白いことを追求していき、ブルーオーシャンを探せとのこと。これは落合氏の<a href="https://review-of-my-life.blogspot.jp/2017/11/blog-post18.html">「これからの世界をつくる仲間たちへ(落合陽一)」</a>でも語られていたことですね。<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
受託案件からチュートリアルにピボットしたのは、<a href="https://twitter.com/ochyai?ref_src=twsrc%5Etfw">@ochyai</a> さんの「レッドオーシャンでやるな」って話を参考にしたからだけど、誰もやってない領域で楽しみながらやってたら青いとこ発掘したなぁとつくづく思った。<a href="https://twitter.com/hashtag/10%E5%B9%B4%E5%BE%8C%E3%81%AE%E4%BB%95%E4%BA%8B%E5%9B%B3%E9%91%91?src=hash&ref_src=twsrc%5Etfw">#10年後の仕事図鑑</a> <a href="https://t.co/RHbv4nAwdp">pic.twitter.com/RHbv4nAwdp</a></div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/989535389089083392?ref_src=twsrc%5Etfw">April 26, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
自身も、技術力がそこまでないのにクラウドソーシングで案件を受託していましたが、ほかに技術力が高い人が多かったのでかなり買いたたかれます。なので、そうではないプログラミングのコンサルティングや、技術チュートリアルの作成、および販売にピボットしたところ、非常に収益化しやすい領域に行けました。<br />
<br />
<br />
参入する領域が競合がいないかを確認することが非常に重要かとおもいます。<br />
<br />
<h4>
一つの職業にはまるな</h4>
<br />
技術がものすごい勢いで汎用化する時代になります。医薬品が安くなってジェネリック医薬品がどんどん出てきている時代、ほかの領域も発明そのものが誰にでも使える状態になってしまいます。<br />
<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
先端技術がかなり早いペースでジェネリック化する時代。ジェネリック化の比喩はとても分かりやすい。面白い。薬の開発そのものの価値はジェネリック化によってどんどん薄れてきてしまうからな。 <a href="https://t.co/Sm9Qm7o04l">pic.twitter.com/Sm9Qm7o04l</a></div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/990606239284453376?ref_src=twsrc%5Etfw">April 29, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
技術の汎用化のペースが凄まじいので、そのスキルだけで戦おうとすると赤くなりやすそう。コモディティ化した技術をいかに現実の課題に落とし込んで課題を解決するかのデザインこそアーティスティックだし、イケてる前略なのかもしれない。<a href="https://twitter.com/hashtag/10%E5%B9%B4%E5%BE%8C%E3%81%AE%E4%BB%95%E4%BA%8B%E5%9B%B3%E9%91%91?src=hash&ref_src=twsrc%5Etfw">#10年後の仕事図鑑</a> <a href="https://t.co/R3NeMHrmlE">pic.twitter.com/R3NeMHrmlE</a></div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/990603494271868928?ref_src=twsrc%5Etfw">April 29, 2018</a></blockquote>
<br />
<br />
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
子供の頃にダーマ神殿で複数の職業掛け持ちしてた世代だけど、この感覚もめっちゃわかる。マーケ・エンジニアリング・教育のバックグラウンドがいまめっちゃくちゃ組み合わされていい感じになってる。<a href="https://twitter.com/hashtag/10%E5%B9%B4%E5%BE%8C%E3%81%AE%E4%BB%95%E4%BA%8B%E5%9B%B3%E9%91%91?src=hash&ref_src=twsrc%5Etfw">#10年後の仕事図鑑</a> <a href="https://t.co/gC2Xea518j">pic.twitter.com/gC2Xea518j</a></div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/989536261315555330?ref_src=twsrc%5Etfw">April 26, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<br />
これは僕自身が教育 X テクノロジーにもともと興味があったりしたことが功を奏したのではないかと考えます。いろいろなスキルを組み合わせて面白いことを追求していくのは非常にありなのではないかと思います。<br />
<br />
<br />
<h4>
交換できる価値を持とう</h4>
<br />
市場価値とは、別の言葉でいうと交換可能性だということです。そして人に交換できる価値を持っておくことが重要と本の中では書かれています。<br />
<br />
<br />
僕はこれにプラスで、時間という価値と、クリエイティブという価値があって、このクリエイティブという価値をたくさん持っておくと、時間と交換せずとも収益化できる仕組みができると思っています。<br />
<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
価値を考えた時に<br />
・自分の人生を価値にする=時給労働<br />
・自分のクリエイティブを価値にする<br />
で考えた時に、後者は時間を拡張することができるな。時給を上げるよりクリエイティブのコンテンツ増やしてくのがよさそうだ。<a href="https://twitter.com/hashtag/10%E5%B9%B4%E5%BE%8C%E3%81%AE%E4%BB%95%E4%BA%8B%E5%9B%B3%E9%91%91?src=hash&ref_src=twsrc%5Etfw">#10年後の仕事図鑑</a> <a href="https://t.co/E58DOTCy3c">pic.twitter.com/E58DOTCy3c</a></div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/990596863890939904?ref_src=twsrc%5Etfw">April 29, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
どれにせよ、自分の仕事が番人に対して価値交換が可能か考えておくのは、非常に重要かと思います。仕組み化された組織の中でルーティンだけやっていたら、その組織の中でゆでガエルになり、外部組織に交換することができなくなっている可能性もあります。常になるべく大きいパイに対して自分の価値が交換可能性があるのか、検討しておくことは不可欠かと思います<br />
<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
ホワイトカラー正社員で外の世界見ずに「3年間は働く」って言ってる人はサンクコストが働いてる可能性もある。1年おきに職務経歴書書いて市場価値みないとホワイトカラーこそ茹でガエルってのありそう<br />
それが怖くてポートフォリオ分散してる<a href="https://twitter.com/hashtag/10%E5%B9%B4%E5%BE%8C%E3%81%AE%E4%BB%95%E4%BA%8B%E5%9B%B3%E9%91%91?src=hash&ref_src=twsrc%5Etfw">#10年後の仕事図鑑</a> <a href="https://t.co/FIxPy7kmLu">pic.twitter.com/FIxPy7kmLu</a></div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/989544017623859206?ref_src=twsrc%5Etfw">April 26, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<h4>
ポートフォリオ分散しよう</h4>
交換可能性を持つという点で、会社に入ると自分の名前で仕事をするのが難しくなります。だから実績を出したとしても、それが自分の結果ということは難しくなります。<br />
<br />
<br />
常に自分の成果として証明できるようなポートフォリオを、社内、社外に分散して持っておくことが重要かと思います。<br />
<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
そうそう、ポートフォリオを車内に蓄積するといろいろ面倒くさいので、学習したアウトプットは社外に保存してるなぁ。実名でやってるのもこの感覚が近いなぁ。なるべく現ナマの形でポートフォリオは残しておきたい<a href="https://twitter.com/hashtag/10%E5%B9%B4%E5%BE%8C%E3%81%AE%E4%BB%95%E4%BA%8B%E5%9B%B3%E9%91%91?src=hash&ref_src=twsrc%5Etfw">#10年後の仕事図鑑</a> <a href="https://t.co/wzgHxNmEyq">pic.twitter.com/wzgHxNmEyq</a></div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/989538881551790080?ref_src=twsrc%5Etfw">April 26, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<h4>
最後に</h4>
<br />
ということで、やはり期待通り面白かったです!GW暇な人はぜひ!Kindleもあります!<br />
<br />
<br />
<div class="amazlet-box" style="margin-bottom: 0px;">
<div class="amazlet-image" style="float: left; margin: 0px 12px 1px 0px;">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/B07BGVZLDZ/kdmgs110-22/ref=nosim/" name="amazletlink" target="_blank"><img alt="10年後の仕事図鑑" src="https://images-fe.ssl-images-amazon.com/images/I/51FC6pCUJ9L._SL160_.jpg" style="border: none;" /></a></div>
<div class="amazlet-info" style="line-height: 120%; margin-bottom: 10px;">
<div class="amazlet-name" style="line-height: 120%; margin-bottom: 10px;">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/B07BGVZLDZ/kdmgs110-22/ref=nosim/" name="amazletlink" target="_blank">10年後の仕事図鑑</a><br />
<div class="amazlet-powered-date" style="font-size: 80%; line-height: 120%; margin-top: 5px;">
posted with <a href="http://www.amazlet.com/" target="_blank" title="amazlet">amazlet</a> at 18.04.30</div>
</div>
<div class="amazlet-detail">
SBクリエイティブ (2018-04-05)<br />
売り上げランキング: 42</div>
<div class="amazlet-sub-info" style="float: left;">
<div class="amazlet-link" style="margin-top: 5px;">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/B07BGVZLDZ/kdmgs110-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jpで詳細を見る</a></div>
</div>
</div>
<div class="amazlet-footer" style="clear: left;">
</div>
</div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br /></div>
<div>
<br /></div>
Unknownnoreply@blogger.comtag:blogger.com,1999:blog-2592581639714884938.post-35081837900942844552018-04-28T11:23:00.001+09:002018-04-28T11:23:29.433+09:00LINEから撮ったテキスト画像を自動で文字起こししてくれる「文字おこし君」を作りましたLINEから撮ったテキスト画像を自動で文字起こししてくれる「文字おこし君」を作りました。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioRbVWGXDCphn24EyZ8q5HWvkqcoH4nevaDyS4nJoWJ3dbWkdsqANxmrSh5LjdwjQm81BTOX3-lLrh-yNXdgGqReQHvG0ZkLW2rcyikzuLwrG6vMu1bsh0puJsO8Di8rzU-WeUKXb1k0c/s1600/line-mojiokoshi.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="766" data-original-width="1360" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioRbVWGXDCphn24EyZ8q5HWvkqcoH4nevaDyS4nJoWJ3dbWkdsqANxmrSh5LjdwjQm81BTOX3-lLrh-yNXdgGqReQHvG0ZkLW2rcyikzuLwrG6vMu1bsh0puJsO8Di8rzU-WeUKXb1k0c/s320/line-mojiokoshi.jpg" width="320" /></a></div>
<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
Lineに画像を送信すると、AIが全部文字おこしして返してくれる「文字おこし君」ができましたー!卒論とか、書評とか書くときに、いちいち元の文献を手で写すの面倒くさいので、写真撮って送るだけなのでだいぶ楽になるぞー!友達追加できます! <a href="https://t.co/9DVI20f3oG">pic.twitter.com/9DVI20f3oG</a></div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/988774430263336961?ref_src=twsrc%5Etfw">April 24, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<h4>
目次</h4>
<ul>
<li>何ができるの?</li>
<li>なんでつくったの?</li>
<li>ツイッターでの反応は?</li>
<li>現在の稼働状況は?</li>
<li>作り方も公開</li>
</ul>
<br />
<a name='more'></a><br />
<br />
<h4>
何ができるの?</h4>
<br />
<br />
こんな感じで、文字起こしをしてくれます。<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
文字起こし君、もちろんですが紙の本でもいけます。大学生の時に電子版でない文献を、文字に起こすのが面倒くさいからという理由でとらなかったのですが、こういうのがテクノロジーで解決されたら超便利でわくわくします。 <a href="https://t.co/GNkOqNfKNe">pic.twitter.com/GNkOqNfKNe</a></div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/988794636503105536?ref_src=twsrc%5Etfw">April 24, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
実際に使ってくださったユーザーさんからだと、英語でも使えるようです。それ以外の言語の動作検証はしていませんが、基本的にはGoogle Cloud Vision APIの仕様通りとなっています。<br />
<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
文字起こし君超イケメン。研究室に布教します <a href="https://t.co/QdYblnxgdz">pic.twitter.com/QdYblnxgdz</a></div>
— ウィルソン (@wilson_ekimemo) <a href="https://twitter.com/wilson_ekimemo/status/988798122842251265?ref_src=twsrc%5Etfw">April 24, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<h4>
なんで作ったの?</h4>
<br />
普段書評書いたりするときに、Kindleだと簡単に引用できるんですけど、紙の本だといちいち見てタイプしなければいけないのがしんどかったっていうのがあります。で、それをやるためにGoogle Documentやらを使えばできるのですが、パソコン開いてそれやるのが面倒くさいので、LINEでとった画像をそのままテキストにして送れたらすごいらくちんだなぁと思いました。あとIT詳しくない人でもできたほうがいいですよね。おばあちゃんでも使えるぐらいのユーザービリティにしたいと思いました。<br />
<br />
<br />
ただ、それ以上に僕自身プログラミングを独学で学んでいて、テンションが上がるもの作れるチュートリアルが世の中にもっとあったらいいなぁ~と思ったので、いい題材になるかなぁと思って作りました。実際これもJavaScriptの知識さえあれば、コーディング自体はそこまで難しくないんですよね。<br />
<br />
<br />
<a href="https://note.mu/daikawai">> noteでプログラミング学習向けのチュートリアルを見てみる</a><br />
<br />
<h4>
ツイッターでの反応は?</h4>
<br />
割と需要もあったようでした。<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
キェー!!すごいっ。ビジネス書サロンやってたときに出会いたかった!📚 <a href="https://t.co/wZyje60iQQ">https://t.co/wZyje60iQQ</a></div>
— 田中 伶 (@TanakaRei_vd) <a href="https://twitter.com/TanakaRei_vd/status/989312836596744192?ref_src=twsrc%5Etfw">April 26, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
これ凄え!!! <a href="https://t.co/gUIqQVS7eq">https://t.co/gUIqQVS7eq</a></div>
— 田端 信太郎 (@tabbata) <a href="https://twitter.com/tabbata/status/988959834992066560?ref_src=twsrc%5Etfw">April 25, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<br />
メディアにも取り上げていただきました。<br />
<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
カメラで撮った文献をLINEに送信→テキストデータに変換して返信 論文作成などに役立つ「文字起こし君」 <a href="https://t.co/qbT1a7nUCx">https://t.co/qbT1a7nUCx</a> <a href="https://t.co/TCH4Wv7pzI">pic.twitter.com/TCH4Wv7pzI</a></div>
— ねとらぼ (@itm_nlab) <a href="https://twitter.com/itm_nlab/status/989362233678315520?ref_src=twsrc%5Etfw">April 26, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
はじめまして、MAG2 NEWS(<a href="https://twitter.com/mag2_news?ref_src=twsrc%5Etfw">@mag2_news</a>)と申します。このたび、文字起こし君に関するツイートを拝見し、掲載許可の件でご連絡させていただきました。あまりにも便利で感動しました。画像をサムネイルに使用し、ツイートを本文に埋め込んだ記事を作成したいのですが許可をいただけないでしょうか?</div>
— まぐまぐニュース (@mag2_news) <a href="https://twitter.com/mag2_news/status/989090161710522368?ref_src=twsrc%5Etfw">April 25, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
突然のご連絡失礼致します。 テレビ朝日「ファクトリサーチTV」の 名田と申します。 今回、投稿された「文字おこしくん」のツイートを拝見し、是非一度お話を伺いたく、ご連絡させて頂きました。お手数ですが、差し支えなければDMで連絡を取り合わせて頂けると幸いです。何卒宜しくお願い致します</div>
— ファクトリサーチTV(テレビ朝日) (@fact_researchTV) <a href="https://twitter.com/fact_researchTV/status/989785149054201856?ref_src=twsrc%5Etfw">April 27, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<a href="https://www.danshihack.com/2018/04/25/junp/line-mojiokoshi.html">> 【凄すぎ】LINEで画像を送るとAIが文字起こししてくれる「文字起こし君」誕生</a><br />
<br />
<a href="http://nlab.itmedia.co.jp/nl/articles/1804/26/news092.html">> カメラで撮った文献をLINEに送信→テキストデータに変換して返信 論文作成などに役立つ「文字起こし君」</a><br />
<br />
<a href="https://t.co/GYbA8Dd9gX">> LINEで画像を送るとテキストに起こしてくれる【文字お起こし君】が登場!</a><br />
<br />
<br />
<h4>
現在の稼働状況は?</h4>
<br />
で、登録者数がエグイことになり、またサーバーがパンクしました。<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
現在の文字起こし君の状況<br />
<br />
・登録ユーザー数86122名<br />
・一日数千ユーザーが増加<br />
・リプライ成功数は1日600前後<br />
・1日のアップロード制限が1,250 MBなので、それ以上いくと動かなくなる<br />
<br />
という状況です。 <a href="https://t.co/oA383sKUWi">pic.twitter.com/oA383sKUWi</a></div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/990024581543948290?ref_src=twsrc%5Etfw">April 28, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
前のスケベAIの時と完全に一緒ですね。この時もリリース直後パンクして死にました。<br />
<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
画像のURLを入れると、それに似たAV女優の名前、合致度と、DMMの出演している動画リストが見れるページのリンクを返す、変態博士が完成したぞ。 <a href="https://t.co/gHUj6qH24P">pic.twitter.com/gHUj6qH24P</a></div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/976360062758174720?ref_src=twsrc%5Etfw">March 21, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<br />
<a href="https://review-of-my-life.blogspot.jp/2018/03/sukebe-AI-introduction.html">> AIで似ているAV女優を紹介しているスケベAI「スケベ博士」を作りました。①アプリ紹介編</a><br />
<br />
<br />
<h4>
作り方を公開</h4>
<br />
<br />
これを常時稼働するには、相当なお金がかかりそうなのですが、僕がそれをやるモチベーションが一切ないので、<span style="background-color: #fff2cc;">ぜひ皆さんにマイ文字起こし君を作っていただければと思います。JavaScriptの知識だけあれば、あとは少し勉強すればできるはずです。</span><br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
47000人がたった1人のおじさんに仕事を押し付けたせいでニートになってしまったみたいなので、是非みみなさまがオリジナルの文字おこしくん作ってください <a href="https://t.co/dv3XBHlYK5">pic.twitter.com/dv3XBHlYK5</a></div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/989103387428847617?ref_src=twsrc%5Etfw">April 25, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
Google Apps Scriptでアプリ公開すると、リリース初日でアプリがパンクする芸<br />
だけど有料化すると採算が合わないので結局チュートリアルつくって使いたい人は自分で作ってくださいという形にしています。</div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/989281026055655424?ref_src=twsrc%5Etfw">April 25, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
まだ全然できていませんが、めっちゃくちゃ需要がありそうなので、文字起こし君のチュートリアル作ることにしました。まだ完成したソースコードのっけただけですが、これからどんどん書き足していきます。最初は1980円で販売しますが、購入者が増えていったら値上げします!<a href="https://t.co/Q8f1RHLMLg">https://t.co/Q8f1RHLMLg</a></div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/988815476229750784?ref_src=twsrc%5Etfw">April 24, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<br />
<span style="background-color: #fff2cc;">GW中やることないって方、ぜひJavaScriptとマイ文字起こし君を作って、友達に自慢しましょう!今だけ1980円で購入できます!</span><br />
<br />
<br />
<a href="https://note.mu/daikawai">> noteでプログラミング学習向けのチュートリアルを見てみる</a>Unknownnoreply@blogger.comtag:blogger.com,1999:blog-2592581639714884938.post-29179138901393114472018-04-26T07:58:00.004+09:002018-04-26T07:58:59.515+09:00プログラミング教育の僕のスタンス自分の問題意識をまとめておく忘備録<br />
<br />
<br />
<a name='more'></a><br /><br />
<h4>
プログラミング教育は、工場型モデルではなく、探求学習であるべき</h4>
<br />
<ul>
<li>近代教育制度が生んだ工場型モデルだと、モチベーションが続かない</li>
<li>作りたいものを定義して、「探求学習」したほうが長期的に伸びる</li>
</ul>
<div>
<br /></div>
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
初心者向けの技術書って、工場型教育を前提としていると思うんだけど、工場型教育の何が問題かというと、モチベーションが続かないことなんだよな。人間の学習効率の最大化はモチベーションにあると思っているけど、それをうまくデザインできているものは本当に少ない<a href="https://t.co/dyConiECPy">https://t.co/dyConiECPy</a></div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/989262308286189568?ref_src=twsrc%5Etfw">April 25, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
チュートリアルでやりたいのは、ジョン・デューイがやってたような、探求学習的アプローチなんだよな。つまりまず先にゴールがあって、そのあとに学ぶものが決まるというもの。探求学習は工場型教育と比べて学びの設計が難しいけど、その分モチベーションをデザインしやすい。<a href="https://t.co/b2Kxg0jF2g">https://t.co/b2Kxg0jF2g</a></div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/989264046841999366?ref_src=twsrc%5Etfw">April 25, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
工場型教育は、すべてのパーツを少しずつはめていけば完成できるという前提で、教育する側としては効率的なんだけど、学ぶ側としたら、なんでこれを学ぶ必要があるのかという視点が欠けやすいのよねぇ。 <a href="https://t.co/iKdJpB8V51">pic.twitter.com/iKdJpB8V51</a></div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/989262699233136640?ref_src=twsrc%5Etfw">April 25, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
プログラミングの学習もやっぱりそうで、もっといい仕組みにできるはずなのに、その仕組みの構築がうまくいってないから、個人でチュートリアル出してもマネタイズできてしまってるわけで。Factory Modelに基づいた教育はモチベーションが死ぬんだよなぁ。</div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/984400689244717056?ref_src=twsrc%5Etfw">April 12, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<h4>
エンジニアの視点で可読性の高いコードは、初心者からしたらわけわからない</h4>
<br />
<br />
<ul>
<li>エンジニアにとってきれいなコード=保守性の高いコード</li>
<li>でも初学者からしたら、高度に抽象化されすぎてわからないし、つまらない</li>
<li>初学者の一番の教材は、アンチパターンをたくさん踏むことなのでは</li>
<li>アンチパターンをたくさん踏んで、最後に抽象化を学べばいい</li>
<li>一番大事なのは、厳密さよりもモチベーションなのでは?</li>
</ul>
<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
僕の書くコードは独学なのでおそろしく汚いですが、初心者にはなるべくわかりやすい形になっています。プロにとって可読性の高いコードと、初心者にとって可読性の高いコードは違うと思ってるので、これだけ読んでプロのエンジニアになりたい!って方はご遠慮ください <a href="https://t.co/zFtqZ4F0v1">pic.twitter.com/zFtqZ4F0v1</a></div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/989251956324511744?ref_src=twsrc%5Etfw">April 25, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
プログラミングがエンジニアだけのものだと思っている人が多いし、そういう人は拡張性やらなんやら気にするけど、リサーチャーだって使うし、なんなら事務の人でも使うわけ。綺麗なコードでチュートリアル書いたとして、そういう人たちが理解できるかというと怪しいと思うんだよな。</div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/989255799036768256?ref_src=twsrc%5Etfw">April 25, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
できる人の綺麗なコードが、これから学ぶ人にとってわかりやすいかというとそうでもない。ってか寧ろ僕のチュートリアルではリファクタリングしてない状態なので、アンチパターン学んでもらって、かけるようになってから他のところでリファクタリング学べばよいわけで。</div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/989256452622569472?ref_src=twsrc%5Etfw">April 25, 2018</a></blockquote>
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
プログラミング始めたての人に保守性の高いコード教えても、よくわからないでしょ。たくさんアンチパターン踏んで、例えばhogeNameとhoge_name混同してスクリプト書いて、たくさんエラー出してからコード規約学ぶのでもいいと思うし。順番が間違ってると思う。</div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/989268103392456709?ref_src=twsrc%5Etfw">April 25, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<br />
<h4>
コードはエンジニアだけが書くわけではない</h4>
<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
いわゆるエンジニアでなくても、絶対プログラミングは学んでおくと得することが増えると思います。だって、ルーティン減るって、その分死んでた時間を取り返すってことですからね。知り合いの営業マンのひとは、朝のルーティン作業プログラミングで自動化してその分ゲームしてるんって言ってましたよ笑</div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/983653554928861185?ref_src=twsrc%5Etfw">April 10, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
プログラミングって寿命を延ばす薬だと思うんだよなぁ。今までルーティンで死んでいた時間を排除して、生きている感覚を得られるような時間をプログラミングで得られるなら。そしてその寿命を延ばせる領域は、エンジニアリング意外の仕事が大きそう。例えば保育とか。</div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/989276956851032064?ref_src=twsrc%5Etfw">April 25, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
技術が入りにくいところこそ、可能性がある気がするし、そうなってきたときにきれいで抽象的なコードを書ける必要があるかというとそういうわけでもない気がするのよなぁ。</div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/989277112107388928?ref_src=twsrc%5Etfw">April 25, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<br />
<h4>
技術の民主化には、エバンジェリストが必要</h4>
<br />
<ul>
<li>技術者と初学者の間の翻訳者が必要なので、エバンジェリストは今後需要が高まりそう</li>
<li>技術をもっと一般人に落とし込めるように民主化する必要がある</li>
</ul>
<br />
<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
あと、教育の話。やっぱり何かを作りたいと思ってる人は多いけど、できる人はそれをアピールする方向にだいたいいってしまって民主化しない。テクノロジーマウンティング。だけど、それを民主化するエバンジェリスト的な人って少ないけど、実は技術革新が早い時代めっちゃ必要なのかもしれん。</div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/984801801458208769?ref_src=twsrc%5Etfw">April 13, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
ちょっとできる人がイキるのって実は大事なのかと思った。じゃないと中間層の知識が下に降りてこないから。そして少し先の世界を見てきた人が発信するコンテンツは実は価値があるものだということも気付いた。(Qiitaのトレンドとかだいたいそうな気がする)</div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/986790612111310848?ref_src=twsrc%5Etfw">April 19, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
技術的には前からあったものやけど、見せ方、ユーザーへのアプローチの仕方一つで流行る、便利になるってのは変わるんやなぁ…<br />
<br />
って思うすごくいい事例 <a href="https://t.co/RqbMcBg07r">https://t.co/RqbMcBg07r</a></div>
— 🦀 \ ガッチャン! / 🦀 (@gatchan0807) <a href="https://twitter.com/gatchan0807/status/988795500420714496?ref_src=twsrc%5Etfw">April 24, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
本当そう思います。知識をすでに持っている人の視点と、これから学ぶ人の視点ってまったく違くて、いかに初心者だったり、技術を知らない人の視点に立てるかってプロダクトしかり教育コンテンツしかり重要だと思います!!(専門家のググれは初学者に対する一種の暴力だと思ってます。) <a href="https://t.co/dhPoo2CvmR">https://t.co/dhPoo2CvmR</a></div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/988791160285024256?ref_src=twsrc%5Etfw">April 24, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
技術は、難しいことを民主化するだけでだいぶ需要があるのに、なぜほとんどの人は難しいものを難しいままイキろうとするのかわけわからない。厳密性を求めている場合だったらしょうがないけど、読者の想定一切してない気がする。</div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/988790562009436165?ref_src=twsrc%5Etfw">April 24, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<br />
<h4>
ホワイトボックス vs ブラックボックス</h4>
<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
技術界隈で役に立つのって基礎研究やってる人と、その研究をもとにユーザーが使ってメリットが出るレベルに落とし込んで実装する人で、中途半端にロジック勉強して何も実装できないでイキッてるのは僕は嫌いです。僕は誰がなんと言おうがブラックボックスでもとりあえずいいから便利なものを作る派です</div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/988789118598434816?ref_src=twsrc%5Etfw">April 24, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<br />
<h4>
EDX (Education Experience)</h4>
<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
プログラミング教育アプリを使っててイラつくポイント<br />
<br />
・作ろうとしているものでテンションが上がらない(電卓システムとか)<br />
・学んでいる断片が全体の中で位置付けられない<br />
・新しいことを学ぶときの前提知識が考慮されていない<br />
・購入する前にどこまでできるようになるのか分からない</div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/988595010428792832?ref_src=twsrc%5Etfw">April 24, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
特に今学んでいることの意味を見いだせなくなる瞬間、離脱したくなる。意味を見いだせなくなるのは、<br />
<br />
・難しすぎて何をしているのかよく分からない瞬間<br />
・今全体の中でどこにいるのか分からない瞬間<br />
<br />
教育工学系で、この辺をレビューしてる論文読みたい。 <a href="https://t.co/CC60fWDhD0">https://t.co/CC60fWDhD0</a></div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/988595711611568128?ref_src=twsrc%5Etfw">April 24, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
学びの最終目標を達成できることを仕様として定義するとき、離脱して戻ってこなくなるのは明らかにバグだよな。これ、学びの品質保証エンジニアリングだなぁ。カリキュラムの品質保証のフレームワーク論文から学びたいところ。 <a href="https://t.co/FJL1TRxkpC">https://t.co/FJL1TRxkpC</a></div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/988596322600083456?ref_src=twsrc%5Etfw">April 24, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
EDXっていう概念を広げたいな<br />
Educational Experience<br />
教育を受けたときのユーザー体験みたいなもの。もう一回ちゃんと教育学勉強しようかな。</div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/988581938783965184?ref_src=twsrc%5Etfw">April 24, 2018</a></blockquote>
<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
チュートリアルの設計で大事なのは<br />
・現実上の課題に対して解決している場面をデザインできているか(実用性)<br />
・既知の知識をもとに次のステップを推論できるか(接続性)<br />
・誰が同じようにやっても同じ結果が得られるか(再現性)<br />
・その知識を使ってほかのシチュエーションに対応できるか(応用性)</div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/987981558282776576?ref_src=twsrc%5Etfw">April 22, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<br />
<h4>
ネット上にチュートリアルが必要な理由</h4>
<br />
<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
プログラミングのチュートリアルはまさに、ネットの情報が断片的すぎるので、包括的な学習コンテンツがあったほうがよい!という問題意識から作ってます。 <a href="https://t.co/XcZCnkdcHi">https://t.co/XcZCnkdcHi</a></div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/987084734026018816?ref_src=twsrc%5Etfw">April 19, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
僕は基本コンテンツ無料でだけど、有料化する場合の条件は決めてます。<br />
1.作業量が膨大すぎて、自分の内発的なモチベーションが続かない<br />
2.だけど需要は大きい<br />
<br />
需要が大きくて、やったほうが意味あるなってことなら、有料化してコンテンツ作ります。それ以外は断片的にコードをブログに載せてます。</div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/986948565141356545?ref_src=twsrc%5Etfw">April 19, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
僕の仮説は、その教育を受けることによってどういうリターンがくるかわかれば、躓いてもトライアンドエラーできるってこと。だからスケベチュートリアルもそうだし、クラウドソーシングもそうだけど、何かしら便利だったり、個人のエンパワメントになるコンテンツがもっと世の中にあっていいと思うだ。</div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/985096436416110592?ref_src=twsrc%5Etfw">April 14, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<br />
<br />
<br />
<br />
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
Unknownnoreply@blogger.comtag:blogger.com,1999:blog-2592581639714884938.post-59160374209386036172018-04-23T21:44:00.003+09:002018-04-23T21:44:31.445+09:00『完全教祖マニュアル』を読んで「インフルエンサー」と「教祖」って似ていると思った話先日、友人に<a href="https://amzn.to/2HmFwQN">完全教祖マニュアル</a>という本を教えてもらいました。一から自分で教団を立ち上げ、信者を獲得し、国家を支配する方法をマニュアル化されているとのことだったので、「仕事中におっぱいと言える社会にしたい」というミッションがある私としては、読んで少しでもノウハウを学びたいと思い、すぐさまポチって購入しました。<br />
<br />
<br />
<div class="amazlet-box" style="margin-bottom: 0px;">
<div class="amazlet-image" style="float: left; margin: 0px 12px 1px 0px;">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/B01IT5TZBM/kdmgs110-22/ref=nosim/" name="amazletlink" target="_blank"><img alt="完全教祖マニュアル (ちくま新書)" src="https://images-fe.ssl-images-amazon.com/images/I/410to4jNYYL._SL160_.jpg" style="border: none;" /></a></div>
<div class="amazlet-info" style="line-height: 120%; margin-bottom: 10px;">
<div class="amazlet-name" style="line-height: 120%; margin-bottom: 10px;">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/B01IT5TZBM/kdmgs110-22/ref=nosim/" name="amazletlink" target="_blank">完全教祖マニュアル (ちくま新書)</a><br />
<div class="amazlet-powered-date" style="font-size: 80%; line-height: 120%; margin-top: 5px;">
posted with <a href="http://www.amazlet.com/" target="_blank" title="amazlet">amazlet</a> at 18.04.23</div>
</div>
<div class="amazlet-detail">
筑摩書房 (2016-07-29)<br />
売り上げランキング: 996</div>
<div class="amazlet-sub-info" style="float: left;">
<div class="amazlet-link" style="margin-top: 5px;">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/B01IT5TZBM/kdmgs110-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jpで詳細を見る</a></div>
</div>
</div>
<div class="amazlet-footer" style="clear: left;">
</div>
</div>
<br />
<br />
そしてこの本を読んで、SNSのインフルエンサーと教祖は非常に似ていると感じたので、書評がてら「教祖がいかに信者を獲得するか」というアプローチと、「インフルエンサーがいかにフォロワーを獲得するか」というアプローチをアナロジーで見てみたいと思います。先に本の紹介をして、そのあとにインフルエンサーと絡めてみていきたいと思います<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgz_uhU61Ev21e1YWPpkovdrFRDT2qo5Dnbnj6efYCrDdZVA5PG3iKZyPkdHktL76zCFqtaIEGqU6gYMvqumpfidlOgUpc3SJgHTCUIKzji9P06JreOdieTTIubWvY6xE8hH4OIAI-eNEs/s1600/hitler.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="162" data-original-width="310" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgz_uhU61Ev21e1YWPpkovdrFRDT2qo5Dnbnj6efYCrDdZVA5PG3iKZyPkdHktL76zCFqtaIEGqU6gYMvqumpfidlOgUpc3SJgHTCUIKzji9P06JreOdieTTIubWvY6xE8hH4OIAI-eNEs/s1600/hitler.jpg" /></a></div>
<br />
<h4>
目次</h4>
<br />
宗教は「なにか言う人」「それを信じる人」で成立する<br />
教祖の仕事は、人をハッピーにすること<br />
教祖になる方法① 反社会的な教えを作ろう<br />
教祖になる方法② 教えを簡略化しよう<br />
教祖になる方法③ 現世利益をうたおう<br />
教祖になる方法④ 不安を煽ろう<br />
教祖になる方法⑤ 救済を与えよ<br />
実際のインフルエンサー・イケダハヤト氏を見てみる<br />
<br />
<br />
<a name='more'></a><br /><br />
<br />
<h4>
宗教は「なにか言う人」「それを信じる人」で成立する</h4>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOzvW1GYJPUVueagfjj3_a43YiVo2kyXs6usxysjdzbGiZnzpP4cLZTmjADHEI6-coQ2_dHDGyvsDApK8lPZwXix053dPWwKy1wbTkE_tc5FJlQySkRNQuPDvb11XYaY7kNVRWHwpj7DQ/s1600/kaiwa.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="944" data-original-width="1500" height="201" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOzvW1GYJPUVueagfjj3_a43YiVo2kyXs6usxysjdzbGiZnzpP4cLZTmjADHEI6-coQ2_dHDGyvsDApK8lPZwXix053dPWwKy1wbTkE_tc5FJlQySkRNQuPDvb11XYaY7kNVRWHwpj7DQ/s320/kaiwa.jpg" width="320" /></a></div>
<br />
宗教の教祖は、「何かを言う人」であり、その信者が「それを信じる人」です。つまり、何かしらの主張をして、それを信じる人ができれば宗教になります。なので、身近な人が一人信じてくれれば、教祖になったということができるのです。<br />
<br />
<blockquote class="tr_bq">
宗教の成立要件は以下の二要素です。つまり、「なにか言う人」「それを信じる人」。そう、たったのふたつだけなのです。この時、「なにか言う人」が教祖となり、「それを信じる人」が信者となるわけです。 たとえば、いま、あなたの目の前に、奥さんの膝でガタガタ震えている男がいるとしましょう。彼は姉さん女房に泣きつき、自分を襲った怪奇現象を必死に訴えています。「本当なんだ。超自然的存在がオレの首を絞めたんだ」。彼女は夫を慰めて言います。「あなたの言うことを信じるわ」。そうです。瞬間、夫は「教祖」となったのです。ちなみに、この男の名をムハンマドと言いそして、これがイスラム教のスタートとなったのです。 もしも、ムハンマドの奥さんが信じてくれなかったらどうでしょう? 彼も他の預言者たちのように石で打たれて殺されていたかもしれません。彼は「信者」を得たからこそ、「教祖」となりえたのです。</blockquote>
<br />
<br />
<h4>
教祖の仕事は、人をハッピーにすること</h4>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3yOU-x5li9Mzd7tRsXgnu7bE-XFhiBBWS_MR0as3CgL5SQacHPiOXPTs02W9O6V7TzEpsggiN2mzqjiwSNLKWDsi3JGwO4oABFHgxVVtVv6QQkLVgEs3PGDpnL3k76ZEzjvCSjE3e4jw/s1600/jesus.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="183" data-original-width="275" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3yOU-x5li9Mzd7tRsXgnu7bE-XFhiBBWS_MR0as3CgL5SQacHPiOXPTs02W9O6V7TzEpsggiN2mzqjiwSNLKWDsi3JGwO4oABFHgxVVtVv6QQkLVgEs3PGDpnL3k76ZEzjvCSjE3e4jw/s1600/jesus.jpg" /></a></div>
<br />
<br />
<br />
で、教祖の仕事は、人の信じたいものを信じさせて、人をハッピーにさせることです。<br />
<br />
<blockquote class="tr_bq">
教祖は人をハッピーにするお仕事なのです。教祖というと、どうしてもうさんくさいイメージが付きまといますよね。人を洗脳し、お金を巻き上げ、思うようにこき使う。宗教なんかにハマってしまうと不幸になってしまう。──とんでもありません! 事実はその逆です。教祖は人をハッピーにする素敵なお仕事なのです。</blockquote>
<br />
<br />
<h4>
教祖になる方法① 反社会的な教えを作ろう</h4>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEY71s5T3UfP0yjw9-9_dICsGkgFI4qBs5ftrk8jgnRrYNcMq9whLyxVbmR-l3fPV2-zVxyerieY0FGSnsGWh582KHp9y4O4siFETSNtAK9zl-jPwlTzDvMxt72m01KhlObMXkhBF2Qz0/s1600/hitler.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="162" data-original-width="310" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEY71s5T3UfP0yjw9-9_dICsGkgFI4qBs5ftrk8jgnRrYNcMq9whLyxVbmR-l3fPV2-zVxyerieY0FGSnsGWh582KHp9y4O4siFETSNtAK9zl-jPwlTzDvMxt72m01KhlObMXkhBF2Qz0/s1600/hitler.jpg" /></a></div>
<br />
<br />
<br />
あらゆる宗教は、最初は新興宗教とされていましたが、実は最初は反社会的な教義を持つことで、宗教は成長してきました。なので、教祖になる前に必要なことは、宗教の協議に反社会的な教えを入れることが必要となります。反社会的な教えを作って、① 社会の基準で幸せになれない人を見つける、 ② 反社会的な基準を与えてその人を幸せにする という手順が最も効果的なようですね。<br />
<br />
<br />
<br />
<blockquote class="tr_bq">
宗教の本質というのは、むしろ反社会性にこそあるのです。特に新興宗教においては、どれだけ社会を混乱させるかが 肝 だということを胸に刻んでおいてください</blockquote>
<br />
<br />
<blockquote class="tr_bq">
イスラム教しかり、儒教しかり、仏教しかり。どれも最初はやべえカルト宗教でした。しかし、その中でも最もヤバいカルトはキリスト教でしょう。イエスの反社会性は只事ではありません。罪びとである徴税人と平気でメシを食い、売春婦を祝福し、労働を禁じられた安息日に病人を癒し、神聖な神殿で暴れまわったのです。</blockquote>
<br />
<br />
<blockquote class="tr_bq">
ですから、彼らのような社会的弱者を救済し、神の祝福を与えるイエスは、どうしても反社会的にならざるをえないわけです。安息日に病人を癒したのも、神殿で商人相手に暴れ回ったのも彼なりの信念によるもので、「安息日に人を助けられないってバカじゃないの?」「神聖な神殿で商売するってバカじゃないの?」という意味があったのです。</blockquote>
<br />
<br />
<blockquote class="tr_bq">
皆さんは教祖となって人々をハッピーにするのがお仕事ですが、そもそも、現在不幸な人というのは、社会の提示する価値基準に照らして不幸なわけです。つまり、貧乏だとか、恋人がいないとか、出世できないとか、そういうことで不幸になっているのですから、あなたは彼らに社会とは別の価値基準を提供すれば良いのです。</blockquote>
<br />
<br />
<blockquote class="tr_bq">
あなたのすべきこととは、 ① 社会の基準で幸せになれない人を見つける、 ② 反社会的な基準を与えてその人を幸せにする、ことだと考えてください</blockquote>
<br />
<br />
<h4>
教祖になる方法② 教えを簡略化しよう</h4>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhzuadvR9U4KcsglKf8RSfWijaol6MoZifuCvCJk9TcYzPwpD49sFtWE6EIP4RxmJam588ja5j5T5IVESYMxsQjA2paF_DFgWtDL4ALxh2onLPCZ0GyNX5WZAIbyf-NjY8ff4cIJhBvMg/s1600/understand.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="504" data-original-width="670" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhzuadvR9U4KcsglKf8RSfWijaol6MoZifuCvCJk9TcYzPwpD49sFtWE6EIP4RxmJam588ja5j5T5IVESYMxsQjA2paF_DFgWtDL4ALxh2onLPCZ0GyNX5WZAIbyf-NjY8ff4cIJhBvMg/s320/understand.jpg" width="320" /></a></div>
<br />
<br />
社会的弱者のほとんどがインテリ層ではないので、なるべく教義を簡単にして、社会的弱者に響きやすいような教義にするといいみたいですね。そして、インテリでなくても救われるようなわかりやすい教義にすることが大事なようです。<br />
<br />
<br />
<blockquote class="tr_bq">
結論から言うと、彼らに必要なのは極限まで簡略化された教えと、御手軽な現世利益なのだと覚えておいて下さい。ヒトラーも『我が闘争』でこのように言っています。「どのようなプロパガンダも大衆にあわさねばならず、その知的水準は獲得すべき大衆の最低水準の人々が受け入れられるようにあわさねばならない」</blockquote>
<br />
<br />
<blockquote class="tr_bq">
浄土教は、怒りや欲望を完全に取り去れない凡夫のための教えです。「南無阿弥陀仏」と心の底から唱えると、死後に阿弥陀仏が極楽浄土に連れて行ってくれます。極楽浄土というのはスポーツジムのようなものだと考えて下さい。極楽には仏になるためのトレーニング器具がばっちり揃っており、ムキムキのインストラクターである阿弥陀仏が、手取り足取りレッスンを付けてくれます。一般人は 南無妙法蓮華経 だけ唱えとけばいいよね」と言っています。やっぱり実際に一般人に布教することを考えると、このくらいの簡略化が必要なのですね。ちなみにイスラム教も「アッラーのほかに神はなし」「ムハンマドは神の使徒なり」だけ言っておけば、とりあえず天国には行けるようになっています。</blockquote>
<br />
<br />
<h4>
教祖になる方法③ 現世利益をうたおう</h4>
<br />
で、宗教を信じたうえで、そのメリットがすぐに得られるような形にするのがよいみたいですね。<br />
<br />
<blockquote class="tr_bq">
一般人は難しい哲学なんかに興味はない、彼らには簡略化した教えが必要だ、と前に書きました。では彼らは一体何を求めているのでしょうか。言うまでもありませんね。現世利益です。この世の真理を悟りたいとか、完璧な人格を目指したいとかではなく、健康でいたい、家族と仲良く暮らしたい、給料が上がるといいな、大学に受かりますように、と、彼らが求めるのはそういった次元のものなのです。</blockquote>
<br />
<br />
<div>
<h4>
教祖になる方法④ 不安を煽ろう</h4>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcMkhUKcauvW29IxVzaHCuDj6hXBm0zIPyfXmTyFmKSQJU0n-_JaxP0u0DaE8W-MinImiUnIAy_L7NBlKcSv2pYx_IOgQFKmrD6QlXLq3bQwVSfKJ6aqu5dlwWGRzSqNQvN0CJxq0hPGQ/s1600/afraid.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="348" data-original-width="648" height="171" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcMkhUKcauvW29IxVzaHCuDj6hXBm0zIPyfXmTyFmKSQJU0n-_JaxP0u0DaE8W-MinImiUnIAy_L7NBlKcSv2pYx_IOgQFKmrD6QlXLq3bQwVSfKJ6aqu5dlwWGRzSqNQvN0CJxq0hPGQ/s320/afraid.jpg" width="320" /></a></div>
<br />
<br />
人が宗教を信じる時、人は不安にさいなまれている必要があります。なので、不安をあおれば信者を獲得できるようですね。<br />
<br />
<br />
<blockquote class="tr_bq">
人が宗教を意識するのは基本的に「困った時の神頼み」です。困ってないと宗教なんか見向きもしないものです。そして、「困った時」の最たるものはやはり「死」ですが、しかし、人間、死にかけのじいさんばあさんならともかく、若い時分には死についてリアルに考えることなどそうそうありませは論理的に示すことができます。彼らは困っていないから宗教に頼らないのです。ならば、彼らを困らせれば良いのです。もちろん、困らせるといってもバキュームカーで相手の家へ突っ込んで軒先でうんこをブチ撒けるとか、そんなヤクザな方法を取る必要はありません。</blockquote>
<br />
<br />
<blockquote class="tr_bq">
教祖にはもっとスマートな困らせ方があるのキリスト教の言うところによれば、毎日のほほんと暮らしている私たちも実は困っているのです。というのも、私たちは、遠い遠いご先祖様のアダムさんとイヴさんがエデンの園で果物のつまみ食いをした罪を引き継いでおり、このままのほほんと生きて死んだ場合は一〇〇%地獄に落ちてしまうのです。天国に行きたければキリスト教徒となって神を信じるしかありません。</blockquote>
<br />
<h4>
教祖になる方法⑤ 救済を与えよ</h4>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbfmIsGVN6AZUf3f37U3cYGuJD8E_CJvfDgFESj-4JPJSJbburbSS-sSgg682uPeJ3qSaLyY-X8p3deFfRHMKmirXsrQ90qGUe4BCgQQcSsaVoUodXmvkMIBv_guFj1SLBTQvXtDBucXU/s1600/miracle.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="200" data-original-width="252" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbfmIsGVN6AZUf3f37U3cYGuJD8E_CJvfDgFESj-4JPJSJbburbSS-sSgg682uPeJ3qSaLyY-X8p3deFfRHMKmirXsrQ90qGUe4BCgQQcSsaVoUodXmvkMIBv_guFj1SLBTQvXtDBucXU/s1600/miracle.jpg" /></a></div>
<br />
<br />
不安を喚起させた後は、これさえすれば大丈夫だよ!と義務を与えたうえで、救済を与えましょう。<br />
<br />
<blockquote class="tr_bq">
「みんなに助けられてちゃんと暮らしていけるって幸せだなあ」という形に最終的に落ち着きますが、この元となった「身調べ」は浄土真宗系の修行法ですから、こちらは最終的に「こんな悪人の自分でも阿弥陀仏は救ってくれるんだ」という確信へと行き着くわけです。 しかし、どちらにしろ、不安を喚起した後にそれに対するカタルシスを与える、という意味では変わりません。</blockquote>
<br /></div>
<div>
<div>
<div>
</div>
</div>
</div>
<h4>
実際のインフルエンサー・イケダハヤト氏を見てみる</h4>
さて、これらの5つの方法が教祖になる方法でした。これらを実はインフルエンサーが体現していることにきづきました。今回はイケダハヤト氏を例に見てみたいと思います。<br />
<br />
<br />
<h4>
①反社会的な教え:「まだ東京で消耗してるの?」「大企業はクソ」「東京はクソ」「移住はよいぞ~」「起業しちゃえ~!」</h4>
社会的には、大企業は安泰で、最高の選択肢だと思っている人がいまだに多くいます。しかし、イケダハヤト氏は、明確にこれらの選択肢を取っている人に対して、反社会的な協議をぶつけます。「大企業はクソ」「東京はクソ」という明確な教義を持っています。<br />
<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
昔書いた長文。/ 辞めてわかった!大企業就職のデメリット11選 : まだ仮想通貨持ってないの? <a href="https://t.co/xHnqbu7cVa">https://t.co/xHnqbu7cVa</a> <a href="https://t.co/s7zCJU5nhJ">pic.twitter.com/s7zCJU5nhJ</a></div>
— ikehaya | Blockchain (@IHayato) <a href="https://twitter.com/IHayato/status/967304567959490560?ref_src=twsrc%5Etfw">February 24, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
「田舎のほうが東京より万倍面白い」なんてことは常識になったと思ったけど、まだそんなことはないようだなー。<br />
<br />
まだ東京で消耗してるの?<br />
そんな狭いところで、あなたは何を生み出そうとしてるの?<br />
どこでも仕事はできる時代なのに?</div>
— ikehaya | Blockchain (@IHayato) <a href="https://twitter.com/IHayato/status/956105189072691200?ref_src=twsrc%5Etfw">January 24, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
よっぽどの目的意識がないかぎり、今の時代に「新卒で大企業」を目指す理由なんかないと思うけど、大学生とかの意識は変わってないのだろうか……。<br />
なんとなく大企業行っても成長できませんよ。厳しい時代になっていくわけですから、最初の就職先はよく考えて選ぶべし。</div>
— ikehaya | Blockchain (@IHayato) <a href="https://twitter.com/IHayato/status/975916146498023424?ref_src=twsrc%5Etfw">March 20, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
起業スクールとか、なんかもはやその時点で語義が矛盾してますよね……。<br />
勉強してる暇とお金があるなら、さっさと起業しましょうw <br />
ブログメディア作るのも起業だし、noteで100円の記事作るのも起業だし、お祭りでパンを売るのも起業ですよ。初期投資かからない事業から始めましょう。</div>
— ikehaya | Blockchain (@IHayato) <a href="https://twitter.com/IHayato/status/986059912454144000?ref_src=twsrc%5Etfw">April 17, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<h4>
②教えを簡略化しよう:大企業やめて副業して移住しろ</h4>
<br />
もうすでに①で見てきましたが、とてもシンプルです。東京はクソ 地方は最高! 大企業はクソ 起業・副業は最高!というシンプルな教えです。<br />
<br />
<h4>
③ 現世利益をうたおう</h4>
<br />
起業・副業をすると、大企業で消耗することもなく、楽しい毎日が待っているよ!という明確な利益を教えてくれます。<br />
<br />
<br />
<h4>
④ 不安を煽ろう : 大企業は終わる</h4>
<br />
そして圧倒的な大企業ディスリによって、大衆の不安をあおります。しかも相当理路整然と。<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
何度も書いてるけど、新卒で大企業に就職するのはおすすめしません。<br />
<br />
・クソ上司引いたら、うつ病で退職コース<br />
・自分のキャリアを自分で作れない<br />
・転勤地獄で住みたい場所に住めない<br />
・働き方が昭和<br />
・何の強みもない「ジェネラリスト」になる<br />
・目が死んでる社員多数<br />
<br />
1年で辞めてほんとよかった。</div>
— ikehaya | Blockchain (@IHayato) <a href="https://twitter.com/IHayato/status/975912832297443328?ref_src=twsrc%5Etfw">March 20, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
大企業に勤めていると「やりたいことをやる」なんてことはできませんからねぇ……。<br />
部署も上司も業務内容も選べない。<br />
自分で企画を通すのも困難。<br />
出る杭は打たれる。<br />
その結果、「本気でやりたいことがない大人」になってしまうんでしょう。この病は根深い……。</div>
— ikehaya | Blockchain (@IHayato) <a href="https://twitter.com/IHayato/status/967303031728439296?ref_src=twsrc%5Etfw">February 24, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
日本の大企業は、「羊のように無気力な若者」と「不勉強で偉そうなおっさん」しか残らないでしょう。<br />
当然ながらそのままだと沈没していきます。<br />
今さらぼくが指摘するまでもなく、すでにそうなってますよね。<br />
少し前の大手メーカー、今だとメガバン・地銀あたり。</div>
— ikehaya | Blockchain (@IHayato) <a href="https://twitter.com/IHayato/status/959960595465252865?ref_src=twsrc%5Etfw">February 4, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
【日本の大企業に入社すべきではない理由】<br />
・上司が選べない。クソ上司に当たったら鬱病。<br />
・職種が選べない。使えないジェネラリストへ。<br />
・勤務場所が選べない。<br />
・ノマドワークなどもってのほか。<br />
・転勤強制からの家庭崩壊。<br />
・ハンコ文化と社内政治で超消耗。<br />
・次第に目が死んでいく。</div>
— ikehaya | Blockchain (@IHayato) <a href="https://twitter.com/IHayato/status/910062349742170112?ref_src=twsrc%5Etfw">September 19, 2017</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<h4>
⑤救済を与えよ : note、電子書籍読んで君も副業マスター!</h4>
<br />
不安をあおった後に、どうすればいいのか。それはnoteを買うことです!とのばかりの救済を与えてくださいます。<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
noteが売れ続けている。800万円突破。ちょっとしたベストセラー本の印税くらいの売上になってきましたね〜。すごい時代です! <a href="https://t.co/xMrFu0v6nB">pic.twitter.com/xMrFu0v6nB</a></div>
— ikehaya | Blockchain (@IHayato) <a href="https://twitter.com/IHayato/status/987998966372417537?ref_src=twsrc%5Etfw">April 22, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<h4>
インフルエンサー・マーケティングまとめ</h4>
<br />
ということで、教祖とインフルエンサーのアナロジーで見ていきました。が、ここで再現性のあるフレームワークとして<br />
<br />
<br />
<br />
<ul>
<li>社会的弱者にアプローチする</li>
<li>不安を煽る</li>
<li>教えを簡略化する</li>
<li>救済を与える</li>
</ul>
<br />
<br />
というアプローチは非常に使えるのではないでしょうか。<br />
<br />
<br />
<br />Unknownnoreply@blogger.comtag:blogger.com,1999:blog-2592581639714884938.post-84774156352511626552018-04-21T21:29:00.001+09:002018-04-21T21:29:52.328+09:00サラリーマンで社内評価上げるよりも、自分でコンテンツ作って売って稼いだほうがはるかに簡単に早く年収が上がるという話僕は新卒入社して1年経つのですが、<span style="background-color: #fff2cc;">自分のキャリアを金銭的な余裕のなさで縛りたくない</span>という思いが強かったので、<span style="background-color: #fff2cc;">絶対に3年以内には自分の月収分くらいは自分で稼げるようになる!</span>という目標をもってコツコツと二毛作で副業してまいりました。<br />
<br />
<br />
そして、コツコツとやっていった結果その目標が先月、今月達成されてしまいました。<br />
<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
こんなこと言うと、「辛いことがあってもやりつづけなさい」って言われると思うけど、プライベートの活動も十分つらい。だってどんなに頑張って最初のほうとか収益にならないから。でも、やってることの価値とか、そういうものにドライブされるから2年間やり続けられた。 <a href="https://t.co/4NVIo5gzx8">pic.twitter.com/4NVIo5gzx8</a></div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/985095735493341189?ref_src=twsrc%5Etfw">April 14, 2018</a></blockquote>
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
今までのブログ収益とかもろもろの収益全部下ろしたら50万円くらいになってびびった笑</div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/980028613905940480?ref_src=twsrc%5Etfw">March 31, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<br />
実際に稼げるようになってから、感じたことまとめます。<br />
<br />
<br />
<a name='more'></a><br />
<br />
<br />
<h4>
・サラリーマンで評価上げて年収上げるよりも、自分でコンテンツ作って売って稼いだほうがはるかに簡単</h4>
<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
「年収を上げる」なんてくだらない努力をするくらいなら、実名顔出しでツイッターアカウント作って、有益な情報とか面白いコンテンツ発信して、フォロワー1万人獲得する努力をした方がいいですよ。絶対に。<br />その方が人生はラクになる。<br />その程度のリスク取れないうちは一生サラリーマンです。</div>
— ikehaya | Blockchain (@IHayato) <a href="https://twitter.com/IHayato/status/987658950509117447?ref_src=twsrc%5Etfw">April 21, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
会社の評価上げるよりも、圧倒的に簡単です。<br />
より短いサイクルで市場からフィードバックもらえて修正できるので。<br />
<br />
<br />
僕みたいに非定型発達の人間からすると、他人の感情が読めずフィードバックわかりませんから会社の人間の評価なんては地獄でしかないです。<br />
<br />
<br />
それよりも、自分でコンテンツ作って、数字見て、改善繰り返して施策ひたすらうって売ったほうが会社の評価を上げるよりも圧倒的に簡単でした。<br />
<br />
<br />
<br />
<h4>
・寝てても一日働く分のお金が自動で入ってくるので、労働とは何か本気で悩み始める</h4>
<div>
<br /></div>
<div>
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
労働ってなんだ。仕事終わった後にシコシコとスケベなネタ書いているだけで20万円入るのに、それの3倍以上の時間かけて正社員で働く意義ってなんだ。なんかわからなくなってきてしまった。働くってなんだ。 <a href="https://t.co/5jd1d5cHji">pic.twitter.com/5jd1d5cHji</a></div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/979324367657058305?ref_src=twsrc%5Etfw">March 29, 2018</a></blockquote>
<br />
<span style="background-color: #fff2cc;">お金が急に入ってくるようになると、お金がどうでもよくなります。</span><br />
<br />
<br />
<span style="background-color: #fff2cc;">そして、その結果今の自分のキャリアに対してお金のこと抜きで考えることができるようになりました。</span>働いている意義だったりとか、自分の成長だとか。だから多少年収が下がっても、学習資本を経済資本に変換すればその分利益は自分に返ってくるので、そっちでもいいのかなぁと。<br />
<br />
<br />
あと、労働の意義とかめっちゃくちゃ考えるようになってしまいました。<span style="background-color: #fff2cc;">自分の命をだれのために、何のために使うべきか。生きている意味とはみたいなことめっちゃくちゃ悩むようになりました。</span><br />
<br />
<br />
(とりあえず結局まだ報告はできませんが、経済基盤が自分で創れるようになったので、6月から新しいチャレンジをすることにしました。ありがとう21世紀!)<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
noteで2カ月間で稼げるようになった結果、新たなチャレンジする覚悟が生まれました。そのことについては来月になったら記事書こうかと思ってますが、取り急ぎフォロワーのみなさん本当にありがとうございます。 <a href="https://t.co/uE7tJp1ZM8">pic.twitter.com/uE7tJp1ZM8</a></div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/986943868137385984?ref_src=twsrc%5Etfw">April 19, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br /></div>
<div>
<h4>
・「新卒で入社したら3年間働け」とかいう意見がどうでもよくなる</h4>
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
noteで2カ月間で稼げるようになった結果、新たなチャレンジする覚悟が生まれました。そのことについては来月になったら記事書こうかと思ってますが、取り急ぎフォロワーのみなさん本当にありがとうございます。 <a href="https://t.co/uE7tJp1ZM8">pic.twitter.com/uE7tJp1ZM8</a></div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/986943868137385984?ref_src=twsrc%5Etfw">April 19, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
「入社したら3年間働け」と言われたとしても、それに対して「<span style="background-color: #fff2cc;">うるせぇ自分で稼ぐわボケ</span>」と言えるようになったので、自分の直感的な判断で道を選べるようになりました。結局転職するときに心配なのってお金だけなんで、そのベーシックな部分がしっかり保証されると、もうあらゆる縛りがなくなるんですよね。<span style="background-color: #fff2cc;">純粋にやりたいことと、成長に全リソースをぶち込める覚悟が生まれます。</span></div>
Unknownnoreply@blogger.comtag:blogger.com,1999:blog-2592581639714884938.post-63930144345546033922018-04-19T21:26:00.002+09:002018-05-04T22:40:50.980+09:00【プログラミング初心者必見】noteで技術チュートリアルを作っている人をまとめてみたよ!<div class="tr_bq">
先日、プログラミングの技術チュートリアルをnoteで売るという実験をしたのですが、非常に大きな反響がありました。はてなブックマークでも603ブックマークでした。</div>
<br />
<br />
<a href="https://note.mu/daikawai/n/n252b3f8d1138">スケベAI「スケベ博士」をPythonとGoogle Apps Scriptで作るスケベ・チュートリアルを公開します</a><br />
<br />
で、僕みたいな独学スケベサイエンティストではなく、もっと仕事でコードを書いているような人にやってほしかったんですよね。<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
<a href="https://twitter.com/hashtag/%E3%82%84%E3%82%8A%E3%81%9F%E3%81%84%E3%81%93%E3%81%A8?src=hash&ref_src=twsrc%5Etfw">#やりたいこと</a><br />
<br />
優秀なエンジニアの人が個人でチュートリアルをnoteに作る文化を作る。</div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/978808794560872448?ref_src=twsrc%5Etfw">March 28, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
なので、こんな僕でもマネタイズができるか証明するために、試行錯誤してチュートリアルを作ってまいりました。その結果、なんと2カ月で50万円達成してしまいました!ありがたや!<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQW_Gy7agOupiErWra2KlJgfuFVSLvT-iQ1cfv1qDfl8zfZsQS4uz2z0YwG1L2zMO47LanU2mfSXu2UAOHDC9YZLGKk6pPENQFFe25hvZPgJHBWh0OvHv2dg0DNtwftuPO015gJyOlJnY/s1600/%25E5%25A3%25B2%25E3%2582%258A%25E4%25B8%258A%25E3%2581%2592.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="824" data-original-width="652" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQW_Gy7agOupiErWra2KlJgfuFVSLvT-iQ1cfv1qDfl8zfZsQS4uz2z0YwG1L2zMO47LanU2mfSXu2UAOHDC9YZLGKk6pPENQFFe25hvZPgJHBWh0OvHv2dg0DNtwftuPO015gJyOlJnY/s640/%25E5%25A3%25B2%25E3%2582%258A%25E4%25B8%258A%25E3%2581%2592.PNG" width="506" /></a></div>
<br />
<br />
<br />
<br />
その結果(なのかはわかりませんが汗)、身の回りの人が様々なチュートリアルを作成するようになったので、今回はそのチュートリアルを紹介しようと思います。<br />
<br />
<br />
<br />
<a name='more'></a><br />
<br />
<h4>
人工知能を使って小説を書く方法(テキストマイニングからbot生成まで)by <a href="https://twitter.com/karaage0703">からあげさん</a>(@karaage0703)</h4>
<br />
ツイッターの機械学習界隈では有名な<a href="https://twitter.com/karaage0703">からあげさん</a>(@karaage0703)が創った、チュートリアルです。マルコフ連鎖を利用して、自動で小説を作るという内容ですね。更新も適宜されているのと、普段ブログも読んでいるのですが、非常に丁寧に書いていらっしゃいます。詳しくは下記noteのURLを見てみて下さい。<br />
<br />
<br />
<a href="https://note.mu/karaage0703/n/n332753db486d">人工知能を使って小説を書く方法(テキストマイニングからbot生成まで)</a><br />
<br />
<br />
ツイッターのアカウントはこちら!<br />
<br />
<br />
<a class="twitter-follow-button" data-show-count="false" href="https://twitter.com/karaage0703?ref_src=twsrc%5Etfw">Follow @karaage0703</a><script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<h4>
<a href="https://note.mu/cohki0305/n/n5e6e916feec3">早割!【Dapp入門】仮想通貨 NOTE トークンを開発してウォレットアプリまで作ろう! by とだ@元営業フリーエンジニア(@cohki0305)</a></h4>
<br />
<br />
ブロックチェーン技術を利用した、アプリケーションの作り方を解説しているチュートリアルです。とださんはリアルでも一回お会いしたことがあるのですが、営業から独学でプログラミングを学び、現在はフリーランスエンジニアとして活躍されています!<br />
<br />
<blockquote class="tr_bq">
本コースでは、ブロックチェーン技術を利用してアプリを開発していきます。NOTE トークンという独自の仮想通貨を作成し、それの取引を行う Web のアプリケーションを開発していきます。<br />
ブロックチェーンを使ったアプリとなると難しそうに聞こえるのですが、すでに良い開発環境が揃っているので、基礎をしっかりおさえながら勉強すれば、普通の web アプリのように簡単に作れてしまいます。<br />
プログラミング初心者の方でも最後まで受講できるようなレベル感になっていますが、開発しているとわからないところも出てくると思います。そういう方向けに Note 購入者には Github の issue にて本コースに関する質問対応も行っています。</blockquote>
<br />
<a href="https://note.mu/cohki0305/n/n5e6e916feec3">早割!【Dapp入門】仮想通貨 NOTE トークンを開発してウォレットアプリまで作ろう! by とだ@元営業フリーエンジニア(@cohki0305) </a><br />
<br />
<br />
ツイッターはこちら。<br />
<br />
<br />
<a class="twitter-follow-button" data-show-count="false" href="https://twitter.com/cohki0305?ref_src=twsrc%5Etfw">Follow @cohki0305</a><script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<h4>
<a href="https://note.mu/dragontaro/n/nc8a82bf15035">reactのnoteを作ろうかなと考えています</a> by 宮川 竜太朗@化学専攻ITエンジニア</h4>
<br />
こちらはまだ完成されていませんが、RTがあれば作成するとのこと。フロントエンド系のチュートリアルって少ないんですよね~。非常に興味があります。<br />
<br />
<br />
<blockquote class="tr_bq">
reactって簡単なんですけど、すごくとっつきにくくてリソースも他の言語に比べるとかなり限られてるんですよね、、結構新しいやつなので。僕はちょうど一年前に勉強したのですが、そのときに比べたらだいぶリソースは増えたかなって感じです。<br />
もう一つ、reactが学習しにくい原因として、jsxやes6についての説明を飛ばしている記事が多いんですよね。じゃあこれだけ勉強したらいいやんってなるかもしれないですけど、これもまたくせ者でなかなかまとまった記事がないんです。<br />
だから、一から作ってやろうって思ってます。でも、この記事がそんなに需要がないならつくってもなあ、、って思ってます。前のnote売れなかったし。笑<br />
現在は無料公開中です。</blockquote>
<br />
<a href="https://note.mu/dragontaro/n/nc8a82bf15035">reactのnoteを作ろうかなと考えています</a><br />
<br />
<br />
<br />
<h4>
<a href="https://note.mu/mman/n/n2555cfb3f06a">ビットコイン 自動売買 BOT 作成〈講座〉 BitMEX 最強ボットの作り方 (その1)</a> by ミラーマン</h4>
<br />
ビットコインの自動売買のチュートリアルらしいです!<br />
<br />
<blockquote class="tr_bq">
結論から言ってしまおう。この講座であなたも Bot トレーダーになれる。<br />
その方法はこうだ →「Trading View」を使って「ストラテジーを作り(無料でゲットもできる)」→ Python に移植(本書を受講すれば簡単)→ BitMEX 等でボットを運用する。しかも、本書ではその「一番簡単な方法」と「最短距離」を伝授する。</blockquote>
<br />
<br />
ということで、いまチュートリアルを販売している人がたくさんいるので、各アカウントを追ってみるのもよいでしょう!<br />
<br />
<br />
<br />
<h4>
<a href="https://note.mu/currypurin/n/nf390914c721e">kaggleのチュートリアル本を書きました!今後更に更新して、チュートリアルを作り上げます!(4/22まで500円で販売)</a> by カレーちゃん(4/22技術書典Kaggleの新刊頒布します</h4>
<br />
データ分析コンペのKaggleの英語チュートリアルを翻訳したものですね。<br />
翻訳需要は高そうなので、すごくありがたいかも!<br />
<br />
<a class="twitter-follow-button" data-show-count="false" href="https://twitter.com/currypurin?ref_src=twsrc%5Etfw">Follow @currypurin</a><script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<blockquote>
Kaggleというのは、1年をとおして何らかの機会学習のコンペが開かれているサイトであり、世界中のデータサイエンティストが挑戦しています。<br />
今流行りの機械学習に入門するのであれば、Kaggleから入門するのか最適だと思っているのですが、Kaggleのサイトは英語であり、日本人にはなかなか初めの一歩を踏み出すのがむずかしいです。<br />
そこで、まずは英語がわからなくてもKaggleのチュートリアルコンペであるタイタニックの乗船者の生死を予測するというコンペのみを解説するという本を上記の技術書典で販売することにしました。</blockquote>
<br />
<h4>
<a href="https://note.mu/fwww/n/ne5bba623f23d">[自動化]TwitterとInstagramのフォロー数やフォロワー数、他を定期的にスプレッドシートに反映させて推移をデータ化する方法</a> by Fwww ⚡️ふうや</h4>
<br />
<br />
タイトルの通りです。Google Apps Scriptを使って自動化処理するようですね!<br />
<br />
<br />
<a class="twitter-follow-button" data-show-count="false" href="https://twitter.com/fwww0707?ref_src=twsrc%5Etfw">Follow @fwww0707</a><script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<br />
<br />
<h4>
【2番目にわかりやすい】 React Native どチュートリアル① 【ウェルカムページ編】 by <a href="https://twitter.com/ho_ttu">川西発之 / 陳発暉</a></h4>
<br />
Android、iOSのスマホアプリをJavaScriptで書ける React Nativeのチュートリアルを書いてくれています。React Nativeは資料が少ないので、非常に助かりますね!<br />
<br />
<blockquote class="twitter-tweet" data-lang="ja">
<div dir="ltr" lang="ja">
Daiさん( <a href="https://twitter.com/never_be_a_pm?ref_src=twsrc%5Etfw">@never_be_a_pm</a> )に影響されて技術チュートリアルnote書きました!こんな感じのアプリを作りながら読み進めてくnoteです。30本売れたら値上げ&続き書きます!<br />
<br />
【2番目にわかりやすい】 React Native どチュートリアル① 【ウェルカムページ編】|note(ノート) <a href="https://t.co/Op93sfbC6g">https://t.co/Op93sfbC6g</a> <a href="https://t.co/elqNVpuXp0">pic.twitter.com/elqNVpuXp0</a></div>
— 川西発之 / 陳発暉 (@ho_ttu) <a href="https://twitter.com/ho_ttu/status/992247537938542592?ref_src=twsrc%5Etfw">2018年5月4日</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<a class="twitter-follow-button" data-show-count="false" href="https://twitter.com/ho_ttu?ref_src=twsrc%5Etfw">Follow @ho_ttu</a><script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />Unknownnoreply@blogger.comtag:blogger.com,1999:blog-2592581639714884938.post-4358196338460683002018-04-09T00:21:00.002+09:002018-04-09T00:21:41.938+09:00発達障害者が健常者と呼ばれる社会が創りたい<h4>
発達障害者が健常者と呼ばれる社会が創りたい</h4>
※ここでいう発達障碍者とは、辞書的な意味の発達障碍者ではないです。差別の意図は一切ないですし、むしろリスペクトの意味で使っています。<br />
<div>
<br /></div>
<br />
社会的にあらねばならない形を逸脱した発達障害者が報われる世界を作りたい。<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
エモい不適合者が報われる社会つくりてぇな</div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/982991859201880064?ref_src=twsrc%5Etfw">April 8, 2018</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
謎の方向に熱量を持った人が、ちゃんとしかるべきパワーを持ち、しかるべき形で社会に貢献できる形に世の中をデザインしたい。し、そういう人たちが上層階級で当たり前に統治していて、将来の夢が「Youtuber」とか言える小学生をもっと増やしたい。いきなり二足歩行始める系人類が生き残りやすい仕組み。社会変動が激しくなるから、突然変異しないと死ぬ時代になる。そういう突然変異系の発達障害者がどちらかというと健常者になる未来。<br />
<br />
<br />
<blockquote class="twitter-tweet" data-lang="en">
<div dir="ltr" lang="ja">
今は2%の障害者と、98%の健常者が経済回しているけど、将来2%の障害者と、97%の機械と、1%の健常者が経済を回していると思う。</div>
— Dai (@never_be_a_pm) <a href="https://twitter.com/never_be_a_pm/status/921032772386353152?ref_src=twsrc%5Etfw">October 19, 2017</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
<br />
<br />
<br />
<a name='more'></a><br /><br />
<h4>
発達障害者は実は社会の上層階級にたくさんいる</h4>
<br />
大学時代にいろいろなコミュニティに行ったけど、いけてる人は大体発達障害者。学校では中庸の適合者が勝つと教えてくれるんだけど、進化論的にいい意味で突然変異したおじさんたちが、上層階級にいることがすごく多い。(その分屍もあるけど)体感<br />
<br />
<br />
<ul>
<li>突然変異発達障害者が5%</li>
<li>健常者が90%</li>
<li>発達障害者が5%</li>
</ul>
<br />
<br />
これから中間層が軒並み消えていくから、そうなった時に発達障害者がロールモデルになると思うんだけど、それがなるべく早く当たり前にならないと本当にやばいと思う。たぶんあと5年以内くらいで変わるんだけど。<br />
<br />
<br />
(こういう書き方すると自分がエモい不適合者なのかと勘違いされるけど、そうじゃなくて、もっと僕の身の回りにいて、狂気がしっかりと形になったら輝ける人がたくさんいるから、それに対してかなりイライラする)<br />
<br />
<br />
<h4>
発達障害者の評価指標に忖度を入れては絶対にダメ</h4>
<br />
発達障害者は才能が忖度でつぶされてしまうので、狂気をちゃんと図れる指標が欲しい。発達障害者でも個性が面白ければ収益になる評価経済に移行しているんだから、より狂気をしっかりと評価指標に入れられるようになる必要があると思う。そしてその指標に忖度は絶対に入れてはいけない。<br />
<br />
<br />
発達障害者型パフォーマーは顧客を前提としないアートがイケてるわけだから、忖度というバイアスで才能が活かしきれなくなる。顧客への価値提供を意識しないで、熱量自体を価値になるから。<br />
<br />
<br />
<h4>
狂気を正確に評価できるのは、狂気プロダクトを作り、それをアウトプットしている必要がある</h4>
<br />
それでもって、その人の狂気はアウトプットして初めて出てくるから、そういうエモい不適合者が何かしら情報=プロダクトを作り、それを発信し、マネタイズできる仕組みをどんな人にでも作れる仕組みが創りたい。一時的な忖度舞踊ではなく、毎日必ず熱量があることをしている発達障害者手帳が欲しい。今はそれがツイッターになるんだろうけど。<br />
<br />
<br />
<b>発達障碍者手帳をもとに、変態採用がばしばし決まって、少人数ですごい熱量のレッチリみたいなバンド社会ができてったら面白い</b>。<br />
<br />
<br />
そしてそのためには発達障碍者が、未来の障害者の規範に合わせることなく、熱量を形にできる仕組みが絶対に必要。それをちゃんとデザインしていきたいと思った。<br />
<br />
<br />
<br />Unknownnoreply@blogger.comtag:blogger.com,1999:blog-2592581639714884938.post-42920268757644695962018-04-08T21:16:00.001+09:002018-04-08T21:16:48.788+09:00Python3でCrontabを設定し指定したキーワードからツイッターのいいねの自動実行を行う<h4>
#この記事の目的</h4>
<br />
<ul>
<li>PythonでCRONTABを利用して、いいね自動化プログラムを定期実行する方法をまとめます。</li>
<li>内容としては主に以下の内容となります</li>
<ul>
<li>CRONTABとは何かという話</li>
<li>実際にCRONTABを使うときに必要な知識</li>
<li>PythonコードをCRONTABから実行する方法</li>
</ul>
</ul>
<div>
<br />
<a name='more'></a><br /></div>
<h4>
CRONTABとは</h4>
<br />
<ul>
<li>指定した時間に、ファイルを実行してくれる機能です。</li>
<li>同じような処理を何度も実行したい場合に便利です。</li>
<li>PCが起動していれば、なんどでも同じ処理を実行することができます</li>
<li>Linux系のOSには標準でついているらしい(Windowsだとタスクスケジューラなるものがあるらしい)</li>
</ul>
<br />
<h4>
CRONTABの書き方</h4>
<br />
<ul>
<li>時間の指定の仕方に癖がありますが、覚えてしまえばこっちのものです。</li>
<li>具体的な書き方については、下記記事を参照するとわかりやすいです。</li>
</ul>
<blockquote class="embedly-card">
<h4>
<a href="http://www.server-memo.net/tips/crontab.html">crontabの書き方 | server-memo.net</a></h4>
crontabの書き方 検証環境 OS CentOS 4.4 crontabについて 設定した時間になったら定期的にコマンドを実行してくれる、ナイスガイですw 設定方法をすぐに忘れるのでメモ代わりに:-p 設定方法 crontab 書式 crontab { -l | -r | -e } オプションの使い方 -u オプション -u どのユーザがcrontabを設定するのかを指定します。省略した場合はcrontabコマンドを実行したユーザで設定されます。 # crontab -u tamo -l 1 * * * * echo "cron test" -l オプション -l オプションは、現在の crontab を標準出力へ表示させる。 $ crontab -l 1 * *</blockquote>
<br />
<br />
<ul>
<li>Linuxなら crontab -eで呼び出すと、VIMで起動されます。</li>
<li>いくつかのサンプルを書いてみます</li>
<ul>
<li>毎時15分に1回: 15 * * * *</li>
<li>毎日4:02に実行: 02 4 * * *</li>
<li>10分ごとに実行: */10 * * * *</li>
<li>1分ごとに実行: * * * * * </li>
</ul>
<li>ぼくが今回書いたコードのcrontabはこんな感じでした。crontab -eで編集できます</li>
</ul>
<div>
<br />
<pre style="background-color: #f7f7f7; border-radius: 3px; border: 0px; box-sizing: inherit; color: #333333; font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 0.8em; line-height: 1.2; overflow-x: auto; padding: 0.6em 1.2em; word-break: break-all; word-wrap: normal;">kdmgs110@DESKTOP-4HHEO95:/mnt/c/workspace/pydev/tweet-analyser$ crontab -l
# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h dom mon dow command
30 * * * * python3 /mnt/c/workspace/pydev/tweet-analyser/autoLike.py progate >> /mnt/c/workspace/pydev/tweet-analyser/autoLike.log</pre>
<br />
<br />
<br />
<ul>
<li>30 * * * * ⇒ 30分に一回実行</li>
<li>フルパスで実行しないとダメらしいです。</li>
<ul>
<li>python3 /mnt/c/workspace/pydev/tweet-analyser/autoLike.py progate</li>
</ul>
<li>実行結果をautoLike.logに保存 (>>で結果を渡せる)</li>
<ul>
<li> >> /mnt/c/workspace/pydev/tweet-analyser/autoLike.log</li>
</ul>
</ul>
<br />
<br />
<pre style="background-color: #f7f7f7; border-radius: 3px; border: 0px; box-sizing: inherit; color: #333333; font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 0.8em; line-height: 1.2; overflow-x: auto; padding: 0.6em 1.2em; word-break: break-all; word-wrap: normal;">30 * * * * python3 /mnt/c/workspace/pydev/tweet-analyser/autoLike.py progate >> /mnt/c/workspace/pydev/tweet-analyser/autoLike.log</pre>
<br /></div>
<h4>
WSL(Windows Subsystem For Linux)からCRONTABを設定する</h4>
<div>
<ul>
<li>crontab -eでviが起動する</li>
</ul>
</div>
<div>
<br />
<h4>
CRONTABを起動する</h4>
<br />
<br />
<ul>
<li>$ sudo service cron start で起動する</li>
<li>ps -aef | grep cron でプロセスが生きているか確認。ルート権限で存在するらしい。</li>
</ul>
<div>
<span style="background-color: white; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 14px;">root 975 1 0 17:24 ? 00:00:00 /usr/sbin/cron</span><br style="background-color: white; box-sizing: border-box; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 14px;" /><span style="background-color: white; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 14px;">USER 992 2 0 17:26 tty1 00:00:00 grep --color=auto cron</span></div>
<div>
<br /></div>
<div>
</div>
<div>
<br />
<h4>
PythonでTweepyを使っていいねしたスクリプト</h4>
<br />
<ul>
<li>引数にキーワードを入れるといいねしてくれるスクリプト</li>
</ul>
<br />
<br />
<div class="code-lang" style="background-color: rgba(0, 0, 0, 0.07); box-sizing: inherit; color: #555555; display: inline-block; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Hiragino Kaku Gothic ProN", メイリオ, meiryo, sans-serif; font-size: 0.8em; line-height: 1; margin: 0px; padding: 0.25em 0.5em;">
<span class="bold" style="box-sizing: inherit;">autoLike.py</span></div>
<span style="background-color: #f7f7f7; color: #4a4a4a; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Hiragino Kaku Gothic ProN", メイリオ, meiryo, sans-serif; font-size: 16.1px;"></span><br />
<div class="highlight" style="background: rgb(255, 255, 255); box-sizing: inherit; color: #4a4a4a; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", "Hiragino Kaku Gothic ProN", メイリオ, meiryo, sans-serif; font-size: 16.1px;">
<pre style="background-color: #f7f7f7; border-radius: 3px; border: 0px; box-sizing: inherit; color: #333333; font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 0.8em; line-height: 1.2; overflow-x: auto; padding: 0.6em 1.2em; word-break: break-all; word-wrap: normal;"><span class="kn" style="box-sizing: inherit; font-weight: 700;">import</span> <span class="nn" style="box-sizing: inherit; color: #555555;">tweepy</span>
<span class="kn" style="box-sizing: inherit; font-weight: 700;">from</span> <span class="nn" style="box-sizing: inherit; color: #555555;">config</span> <span class="kn" style="box-sizing: inherit; font-weight: 700;">import</span> <span class="n" style="box-sizing: inherit;">CONFIG</span>
<span class="kn" style="box-sizing: inherit; font-weight: 700;">import</span> <span class="nn" style="box-sizing: inherit; color: #555555;">time</span>
<span class="kn" style="box-sizing: inherit; font-weight: 700;">import</span> <span class="nn" style="box-sizing: inherit; color: #555555;">sys</span>
<span class="kn" style="box-sizing: inherit; font-weight: 700;">from</span> <span class="nn" style="box-sizing: inherit; color: #555555;">datetime</span> <span class="kn" style="box-sizing: inherit; font-weight: 700;">import</span> <span class="n" style="box-sizing: inherit;">datetime</span>
<span class="k" style="box-sizing: inherit; font-weight: 700;">def</span> <span class="nf" style="box-sizing: inherit; color: #990000; font-weight: 700;">searchTweets</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">query</span><span class="p" style="box-sizing: inherit;">):</span>
<span class="n" style="box-sizing: inherit;">tweets</span> <span class="o" style="box-sizing: inherit; font-weight: 700;">=</span> <span class="n" style="box-sizing: inherit;">api</span><span class="o" style="box-sizing: inherit; font-weight: 700;">.</span><span class="n" style="box-sizing: inherit;">search</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">q</span><span class="o" style="box-sizing: inherit; font-weight: 700;">=</span><span class="n" style="box-sizing: inherit;">query</span><span class="p" style="box-sizing: inherit;">,</span> <span class="n" style="box-sizing: inherit;">count</span><span class="o" style="box-sizing: inherit; font-weight: 700;">=</span><span class="mi" style="box-sizing: inherit; color: #009999;">100</span><span class="p" style="box-sizing: inherit;">)</span>
<span class="k" style="box-sizing: inherit; font-weight: 700;">return</span> <span class="n" style="box-sizing: inherit;">tweets</span>
<span class="k" style="box-sizing: inherit; font-weight: 700;">def</span> <span class="nf" style="box-sizing: inherit; color: #990000; font-weight: 700;">likeTweets</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">tweets</span><span class="p" style="box-sizing: inherit;">,</span> <span class="n" style="box-sizing: inherit;">keyword_id</span><span class="p" style="box-sizing: inherit;">):</span>
<span class="n" style="box-sizing: inherit;">like_count</span> <span class="o" style="box-sizing: inherit; font-weight: 700;">=</span> <span class="mi" style="box-sizing: inherit; color: #009999;">0</span>
<span class="n" style="box-sizing: inherit;">created_at</span> <span class="o" style="box-sizing: inherit; font-weight: 700;">=</span> <span class="n" style="box-sizing: inherit;">datetime</span><span class="o" style="box-sizing: inherit; font-weight: 700;">.</span><span class="n" style="box-sizing: inherit;">now</span><span class="p" style="box-sizing: inherit;">()</span><span class="o" style="box-sizing: inherit; font-weight: 700;">.</span><span class="n" style="box-sizing: inherit;">strftime</span><span class="p" style="box-sizing: inherit;">(</span><span class="s" style="box-sizing: inherit; color: #d01040;">"</span><span class="si" style="box-sizing: inherit; color: #d01040;">%</span><span class="s" style="box-sizing: inherit; color: #d01040;">Y</span><span class="si" style="box-sizing: inherit; color: #d01040;">%</span><span class="s" style="box-sizing: inherit; color: #d01040;">m</span><span class="si" style="box-sizing: inherit; color: #d01040;">%</span><span class="s" style="box-sizing: inherit; color: #d01040;">d</span><span class="si" style="box-sizing: inherit; color: #d01040;">%</span><span class="s" style="box-sizing: inherit; color: #d01040;">H</span><span class="si" style="box-sizing: inherit; color: #d01040;">%</span><span class="s" style="box-sizing: inherit; color: #d01040;">M</span><span class="si" style="box-sizing: inherit; color: #d01040;">%</span><span class="s" style="box-sizing: inherit; color: #d01040;">S"</span><span class="p" style="box-sizing: inherit;">)</span>
<span class="k" style="box-sizing: inherit; font-weight: 700;">for</span> <span class="n" style="box-sizing: inherit;">tweet</span> <span class="ow" style="box-sizing: inherit; font-weight: 700;">in</span> <span class="n" style="box-sizing: inherit;">tweets</span><span class="p" style="box-sizing: inherit;">:</span>
<span class="c" style="box-sizing: inherit; color: #999988; font-style: italic;">#DB:ID KEYWORD_ID CREATED_AT USER_ID USER_NAME TWEET_ID CONTENT IS_FOLLOWER</span>
<span class="n" style="box-sizing: inherit;">user_id</span> <span class="o" style="box-sizing: inherit; font-weight: 700;">=</span> <span class="n" style="box-sizing: inherit;">tweet</span><span class="o" style="box-sizing: inherit; font-weight: 700;">.</span><span class="n" style="box-sizing: inherit;">user</span><span class="o" style="box-sizing: inherit; font-weight: 700;">.</span><span class="n" style="box-sizing: inherit;">_json</span><span class="p" style="box-sizing: inherit;">[</span><span class="s" style="box-sizing: inherit; color: #d01040;">'screen_name'</span><span class="p" style="box-sizing: inherit;">]</span>
<span class="n" style="box-sizing: inherit;">user_name</span> <span class="o" style="box-sizing: inherit; font-weight: 700;">=</span> <span class="n" style="box-sizing: inherit;">tweet</span><span class="o" style="box-sizing: inherit; font-weight: 700;">.</span><span class="n" style="box-sizing: inherit;">user</span><span class="o" style="box-sizing: inherit; font-weight: 700;">.</span><span class="n" style="box-sizing: inherit;">name</span>
<span class="n" style="box-sizing: inherit;">tweet_id</span> <span class="o" style="box-sizing: inherit; font-weight: 700;">=</span> <span class="n" style="box-sizing: inherit;">tweet</span><span class="o" style="box-sizing: inherit; font-weight: 700;">.</span><span class="nb" style="box-sizing: inherit; color: #0086b3;">id</span>
<span class="n" style="box-sizing: inherit;">content</span> <span class="o" style="box-sizing: inherit; font-weight: 700;">=</span> <span class="n" style="box-sizing: inherit;">tweet</span><span class="o" style="box-sizing: inherit; font-weight: 700;">.</span><span class="n" style="box-sizing: inherit;">text</span>
<span class="k" style="box-sizing: inherit; font-weight: 700;">try</span><span class="p" style="box-sizing: inherit;">:</span>
<span class="n" style="box-sizing: inherit;">api</span><span class="o" style="box-sizing: inherit; font-weight: 700;">.</span><span class="n" style="box-sizing: inherit;">create_favorite</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">tweet_id</span><span class="p" style="box-sizing: inherit;">)</span> <span class="c" style="box-sizing: inherit; color: #999988; font-style: italic;">#フォロワーでなければいいねする</span>
<span class="c" style="box-sizing: inherit; color: #999988; font-style: italic;">#insertLikeRecord(keyword_id, created_at, user_id, user_name, tweet_id, content, is_follower) #結果をDBに保存する</span>
<span class="k" style="box-sizing: inherit; font-weight: 700;">print</span><span class="p" style="box-sizing: inherit;">(</span><span class="s" style="box-sizing: inherit; color: #d01040;">"[INFO]likeレコードを追加しました。user_id:{}"</span><span class="o" style="box-sizing: inherit; font-weight: 700;">.</span><span class="n" style="box-sizing: inherit;">format</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">user_id</span><span class="p" style="box-sizing: inherit;">))</span>
<span class="n" style="box-sizing: inherit;">like_count</span> <span class="o" style="box-sizing: inherit; font-weight: 700;">+=</span> <span class="mi" style="box-sizing: inherit; color: #009999;">1</span>
<span class="k" style="box-sizing: inherit; font-weight: 700;">print</span><span class="p" style="box-sizing: inherit;">(</span><span class="s" style="box-sizing: inherit; color: #d01040;">"[INFO]いいね数: {}"</span><span class="o" style="box-sizing: inherit; font-weight: 700;">.</span><span class="n" style="box-sizing: inherit;">format</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">like_count</span><span class="p" style="box-sizing: inherit;">))</span>
<span class="k" style="box-sizing: inherit; font-weight: 700;">except</span> <span class="nb" style="box-sizing: inherit; color: #0086b3;">Exception</span> <span class="k" style="box-sizing: inherit; font-weight: 700;">as</span> <span class="n" style="box-sizing: inherit;">e</span><span class="p" style="box-sizing: inherit;">:</span>
<span class="k" style="box-sizing: inherit; font-weight: 700;">print</span><span class="p" style="box-sizing: inherit;">(</span><span class="s" style="box-sizing: inherit; color: #d01040;">"[ERROR]いいねに失敗しました: {}"</span><span class="o" style="box-sizing: inherit; font-weight: 700;">.</span><span class="n" style="box-sizing: inherit;">format</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">e</span><span class="p" style="box-sizing: inherit;">))</span>
<span class="k" style="box-sizing: inherit; font-weight: 700;">if</span> <span class="n" style="box-sizing: inherit;">e</span><span class="o" style="box-sizing: inherit; font-weight: 700;">.</span><span class="n" style="box-sizing: inherit;">response</span> <span class="ow" style="box-sizing: inherit; font-weight: 700;">and</span> <span class="n" style="box-sizing: inherit;">e</span><span class="o" style="box-sizing: inherit; font-weight: 700;">.</span><span class="n" style="box-sizing: inherit;">response</span><span class="o" style="box-sizing: inherit; font-weight: 700;">.</span><span class="n" style="box-sizing: inherit;">status</span> <span class="o" style="box-sizing: inherit; font-weight: 700;">==</span> <span class="mi" style="box-sizing: inherit; color: #009999;">88</span><span class="p" style="box-sizing: inherit;">:</span>
<span class="k" style="box-sizing: inherit; font-weight: 700;">print</span><span class="p" style="box-sizing: inherit;">(</span><span class="s" style="box-sizing: inherit; color: #d01040;">"[INFO] rate limitの上限値を超えたので、15分待機後に実行します。"</span><span class="p" style="box-sizing: inherit;">)</span>
<span class="n" style="box-sizing: inherit;">time</span><span class="o" style="box-sizing: inherit; font-weight: 700;">.</span><span class="n" style="box-sizing: inherit;">sleep</span><span class="p" style="box-sizing: inherit;">(</span><span class="mi" style="box-sizing: inherit; color: #009999;">60</span> <span class="o" style="box-sizing: inherit; font-weight: 700;">*</span> <span class="mi" style="box-sizing: inherit; color: #009999;">15</span><span class="p" style="box-sizing: inherit;">)</span>
<span class="k" style="box-sizing: inherit; font-weight: 700;">if</span> <span class="n" style="box-sizing: inherit;">e</span><span class="o" style="box-sizing: inherit; font-weight: 700;">.</span><span class="n" style="box-sizing: inherit;">response</span> <span class="ow" style="box-sizing: inherit; font-weight: 700;">and</span> <span class="n" style="box-sizing: inherit;">e</span><span class="o" style="box-sizing: inherit; font-weight: 700;">.</span><span class="n" style="box-sizing: inherit;">response</span><span class="o" style="box-sizing: inherit; font-weight: 700;">.</span><span class="n" style="box-sizing: inherit;">status</span> <span class="o" style="box-sizing: inherit; font-weight: 700;">==</span> <span class="mi" style="box-sizing: inherit; color: #009999;">139</span><span class="p" style="box-sizing: inherit;">:</span>
<span class="k" style="box-sizing: inherit; font-weight: 700;">print</span><span class="p" style="box-sizing: inherit;">(</span><span class="s" style="box-sizing: inherit; color: #d01040;">"[ERROR] すでにいいねをしているツイートです"</span><span class="p" style="box-sizing: inherit;">)</span>
<span class="k" style="box-sizing: inherit; font-weight: 700;">return</span> <span class="n" style="box-sizing: inherit;">like_count</span>
<span class="k" style="box-sizing: inherit; font-weight: 700;">if</span> <span class="n" style="box-sizing: inherit;">__name__</span> <span class="o" style="box-sizing: inherit; font-weight: 700;">==</span> <span class="s" style="box-sizing: inherit; color: #d01040;">'__main__'</span><span class="p" style="box-sizing: inherit;">:</span>
<span class="n" style="box-sizing: inherit;">args</span> <span class="o" style="box-sizing: inherit; font-weight: 700;">=</span> <span class="n" style="box-sizing: inherit;">sys</span><span class="o" style="box-sizing: inherit; font-weight: 700;">.</span><span class="n" style="box-sizing: inherit;">argv</span>
<span class="n" style="box-sizing: inherit;">query</span> <span class="o" style="box-sizing: inherit; font-weight: 700;">=</span> <span class="n" style="box-sizing: inherit;">args</span><span class="p" style="box-sizing: inherit;">[</span><span class="mi" style="box-sizing: inherit; color: #009999;">1</span><span class="p" style="box-sizing: inherit;">]</span>
<span class="k" style="box-sizing: inherit; font-weight: 700;">print</span><span class="p" style="box-sizing: inherit;">(</span><span class="s" style="box-sizing: inherit; color: #d01040;">"[INFO]「{}」で検索したツイートを取得し、いいねします"</span><span class="o" style="box-sizing: inherit; font-weight: 700;">.</span><span class="n" style="box-sizing: inherit;">format</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">query</span><span class="p" style="box-sizing: inherit;">))</span>
<span class="c" style="box-sizing: inherit; color: #999988; font-style: italic;"># 各種ツイッターのキーをセット</span>
<span class="n" style="box-sizing: inherit;">CONSUMER_KEY</span> <span class="o" style="box-sizing: inherit; font-weight: 700;">=</span> <span class="n" style="box-sizing: inherit;">CONFIG</span><span class="p" style="box-sizing: inherit;">[</span><span class="s" style="box-sizing: inherit; color: #d01040;">"CONSUMER_KEY"</span><span class="p" style="box-sizing: inherit;">]</span>
<span class="n" style="box-sizing: inherit;">CONSUMER_SECRET</span> <span class="o" style="box-sizing: inherit; font-weight: 700;">=</span> <span class="n" style="box-sizing: inherit;">CONFIG</span><span class="p" style="box-sizing: inherit;">[</span><span class="s" style="box-sizing: inherit; color: #d01040;">"CONSUMER_SECRET"</span><span class="p" style="box-sizing: inherit;">]</span>
<span class="n" style="box-sizing: inherit;">ACCESS_TOKEN</span> <span class="o" style="box-sizing: inherit; font-weight: 700;">=</span> <span class="n" style="box-sizing: inherit;">CONFIG</span><span class="p" style="box-sizing: inherit;">[</span><span class="s" style="box-sizing: inherit; color: #d01040;">"ACCESS_TOKEN"</span><span class="p" style="box-sizing: inherit;">]</span>
<span class="n" style="box-sizing: inherit;">ACCESS_SECRET</span> <span class="o" style="box-sizing: inherit; font-weight: 700;">=</span> <span class="n" style="box-sizing: inherit;">CONFIG</span><span class="p" style="box-sizing: inherit;">[</span><span class="s" style="box-sizing: inherit; color: #d01040;">"ACCESS_SECRET"</span><span class="p" style="box-sizing: inherit;">]</span>
<span class="c" style="box-sizing: inherit; color: #999988; font-style: italic;">#Tweepy</span>
<span class="n" style="box-sizing: inherit;">auth</span> <span class="o" style="box-sizing: inherit; font-weight: 700;">=</span> <span class="n" style="box-sizing: inherit;">tweepy</span><span class="o" style="box-sizing: inherit; font-weight: 700;">.</span><span class="n" style="box-sizing: inherit;">OAuthHandler</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">CONSUMER_KEY</span><span class="p" style="box-sizing: inherit;">,</span> <span class="n" style="box-sizing: inherit;">CONSUMER_SECRET</span><span class="p" style="box-sizing: inherit;">)</span>
<span class="n" style="box-sizing: inherit;">auth</span><span class="o" style="box-sizing: inherit; font-weight: 700;">.</span><span class="n" style="box-sizing: inherit;">set_access_token</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">ACCESS_TOKEN</span><span class="p" style="box-sizing: inherit;">,</span> <span class="n" style="box-sizing: inherit;">ACCESS_SECRET</span><span class="p" style="box-sizing: inherit;">)</span>
<span class="c" style="box-sizing: inherit; color: #999988; font-style: italic;">#APIインスタンスを作成</span>
<span class="n" style="box-sizing: inherit;">api</span> <span class="o" style="box-sizing: inherit; font-weight: 700;">=</span> <span class="n" style="box-sizing: inherit;">tweepy</span><span class="o" style="box-sizing: inherit; font-weight: 700;">.</span><span class="n" style="box-sizing: inherit;">API</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">auth</span><span class="p" style="box-sizing: inherit;">)</span>
<span class="n" style="box-sizing: inherit;">tweets</span> <span class="o" style="box-sizing: inherit; font-weight: 700;">=</span> <span class="n" style="box-sizing: inherit;">searchTweets</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">query</span><span class="p" style="box-sizing: inherit;">)</span>
<span class="n" style="box-sizing: inherit;">likeTweets</span><span class="p" style="box-sizing: inherit;">(</span><span class="n" style="box-sizing: inherit;">tweets</span><span class="p" style="box-sizing: inherit;">,</span> <span class="mi" style="box-sizing: inherit; color: #009999;">0</span><span class="p" style="box-sizing: inherit;">)</span></pre>
</div>
<br />
<br /></div>
</div>
<div>
<h4>
CRONTAB使うときに覚えておえておきたいコマンド</h4>
<br />
crontab -e : crontabを編集できる (vi的なやつ)<br />
crontab -l : 実際のcrontabの中身を見ることができる(cat的なやつ)<br />
<br />
<h4>
よく知らなかったこと・今もわからないこと・後で覚えておきたいこと</h4>
<br />
<ul>
<li><a href="https://qiita.com/kenju/items/a73a3610011391eee252">grep / fgrepの違い</a>とか</li>
<li><a href="https://qiita.com/Takashi_Noboru/items/b1d96f706e20d8976c57">crontabを1秒おきに指定する方法</a></li>
<ul>
<li>普通に使うと最短で1分らしい。</li>
</ul>
<li>ps -aef | grep cron : <a href="https://webkaru.net/linux/ps-command/">プロセスを見つけて、検索しているっぽい</a></li>
<li>シェルスクリプトで、ログファイルを上書きして追加したいときは>>を使う</li>
<ul>
<li><a href="https://www.adminweb.jp/command/redirect/index2.html">追加書き込みでファイルへ出力</a></li>
</ul>
<li><a href="https://qiita.com/shishamo_dev/items/558b116fda95e4f4f808">シバン</a>もよくわからなかった</li>
<ul>
<li>○○.shを./○○.shで実行できるようにする</li>
</ul>
<li><a href="https://qiita.com/genreh/items/8d935526571ccfe171ae">tailf ファイル名</a>:リアルタイムでファイルが更新されているのが見れる</li>
<ul>
<li>less F ファイル名でもできるらしい</li>
</ul>
</ul>
<br />
<br />
<br />
<br />
<br />
<br />
<br /></div>
Unknownnoreply@blogger.comtag:blogger.com,1999:blog-2592581639714884938.post-68267525777772389892018-04-07T13:41:00.004+09:002018-04-07T13:41:40.873+09:00Python3 PandasでHeaderのみのDataFrameを作成する意外に簡単だった。<br />
<div>
pandas.DataFrame(columns=[])で指定してあげるだけだった。</div>
<div>
<br /></div>
<div>
<a name='more'></a><br /></div>
<div>
<br /></div>
<div>
$ ipython </div>
<div>
<br /></div>
<div>
import pandas as pd</div>
<div>
df = pd.DataFrame(columns=["hoge", "piyo", "fuga"])</div>
<div>
print(df)</div>
<div>
<br /></div>
<div>
<div>
>Empty DataFrame</div>
<div>
Columns: [hoge, fuga, piyo]</div>
<div>
Index: []</div>
</div>
<div>
<br /></div>
<div>
df.to_csv("result.csv")</div>
<div>
exit()</div>
<div>
<br /></div>
<div>
$ cat result.csv</div>
<div>
<br /></div>
<div>
> ,hoge,fuga,piyo</div>
<div>
<br /></div>
<div>
参考</div>
<div>
<br /></div>
<div>
https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.html</div>
<div>
<br /></div>
<div>
https://stackoverflow.com/questions/44513738/pandas-create-empty-dataframe-with-only-column-names</div>
Unknownnoreply@blogger.com