【Git】リモートブランチにcheckout する方法 ~git fetch をお忘れなく~
駆け出しからベテランプログラマーまで、コードに触れる人であればなくてはならないのがバージョンコントロール【Git】
駆け出しの方であれば多くのコマンドにアレルギー反応を示し、経験者であっても、ふっと自信がなくなりググってしまう。
そんな経験はないでしょうか。
私は日常茶飯事です。
なので今回は、
以前個人的に少し詰まった
リモートブランチにcheckout する方法を
注意点を踏まえ
ここに書き残します。
シナリオ
とあるアプリケーションを共同で開発しているチームメイトからのcodereviewを自分の慣れ親しんだローカルの環境でやりたい。
ターゲットブランチ名
taros_branch
注意点(詰まりポイント)
ただ前準備なしでこのコマンドを実行するとGitさんに
error: pathspec 'taros_branch' did not match any file(s) known to git
と怒られてしまうので、
事前に
git fetch
でターゲットブランチを自分のローカルにFetchするのを忘れないようにしよう!
fetch についてはこちらをご覧ください。
atsashimipy.hatenablog.com
それではGitと良い1日を!
ありがとうございましたー!
【Flask超入門】その2:jsonifyで超簡単にREST APIをビルドする
前回のFlaskの記事から2年近く開いてしまいました脳筋ニシキです。
その記事の終わり際に、
次回はもっとhtmlを書いて、それっぽい形にしていきましょう!
とかぬかしつつ、この2年の間フロントエンドはReactで書き、Flaskは基本フロントエンドから叩かれた時にapiを返すバックエンドとして使用してきました。
なので今回は予定を変更して、Flaskで超簡単にREST APIをビルドする方法をここに書き残していこうと思います!
では早速参ります。
前回のおさらい
#flask_project.py from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return "<h1>Hello World!!</h1>" if __name__ == '__main__': app.run(debug=True)
でこのfileをrunすると
速攻でHello Worldできるお手軽さ!さすがFlaskの兄貴!🙆🏻♂️
ただ今回、Flask兄貴にはバックエンドに徹してもらいます🙇🏻♂️
text/html ではなく application/jsonが欲しい!そんな時のjsonify!
上で見た、html で表現されたHello World も素敵なのですが、今回は HTTP Content-type: application/jsonで返してもらいます。
まず、jsonify を インポートします。
flask.palletsprojects.com
#flask_project.py from flask import Flask, jsonify
このjsonifyを使うことで簡単に Content-type: application/json のレスポンスを返すことができるようになります!
なので、先程のコードを以下のように書き換え、
#flask_project.py from flask import Flask app = Flask(__name__) @app.route("/") def hello(): hello_api = { 'greeting': "Hello World!" } return jsonify(hello_api) if __name__ == '__main__': app.run(debug=True)
curl http://localhost:5000/ { "greeting": "Hello World!" }
肝心のContent-Typeは...
curl -v http://localhost:5000/ Content-Type: application/json
簡単にREST APIをビルドすることができました。
さすがFlaskの兄貴!目立たない裏方でもサクッとスマートこなしちまうぜ!
こっから先のフロントエンドは私Reactにお任せくだせい!🙋🏻♂️
と、このようにバックエンドからフロントエンドへのデータの受け渡しが簡単にできるようになりました!!
今回は基本中の基本でしたが、次回はやや応用編を攻めていこうと思います!
ありがとうございました!
【Pandas最強説2】リストを含むDataFrameを展開するのが超絶簡単だった!
結論
DataFrame.explode(column, ignore_index=False)メソッドを使う事でDataFrameに含まれるリストを展開、中身の値を列へと変換できるようになっていた!(注意:バージョン 0.25.0から)
実際に使ってみる
動作環境
Python 3.6
Pandas 1.1.3
シナリオ
とあるスーパーで売れた商品をスプレッドシートで細かく把握したい。
customer items 0 customer-000 [Milk, Eggs, Bananas] 1 customer-001 [Chicken, Beef, Pork] 2 customer-002 Pasta
ただこのままCSVに変換してしまうと
リストがそのまま1つのセルに。。
そのリストを縦に展開してこうしたい!
customer items 0 customer-000 Milk 0 customer-000 Eggs 0 customer-000 Bananas 1 customer-001 Chicken 1 customer-001 Beef 1 customer-001 Pork 2 customer-002 Pasta
実践
とりあえずimport
import pandas as pd
テストDataframe
df = pd.DataFrame( columns=['customer', 'items'], data=[ ['customer-000', ['Milk', 'Eggs', 'Bananas']], ['customer-001', ['Chicken', 'Beef', 'Pork']], ['customer-002', 'Pasta'] ] )
あとは例のDataFrame.explode(column, ignore_index=False)メソッドを使い展開したいコラムを指定すれば、
exploded_df = df.explode("items")
たったの1行て!?
print(exploded_df)
customer items 0 customer-000 Milk 0 customer-000 Eggs 0 customer-000 Bananas 1 customer-001 Chicken 1 customer-001 Beef 1 customer-001 Pork 2 customer-002 Pasta
欲しかったやつ!
あとお馴染みのdDataFrame.to_csv()で
pandas.pydata.org
exploded_df.to_csv('explode_test.csv')
本当にもうPandasさんありがとうございますっ!!
というわけで、以上DataFrame内のリストを縦に展開する方法でした!
今日も頭のいい先人たちに感謝!
前回の【Pandas最強説】記事はこちら
atsashimipy.hatenablog.com
【Codingインタビュー対策】Python で文字列あれこれ!〜自責の念を込めて〜
お久しぶりです。
ここのところ転職活動に注力していた脳筋ニシキですが、
ありがたいことに
内定をいただくことができました!
ありがとうございます!!
今回はCoding インタビューで出題された
Python での String 操作
について少し自責の念を込めて触れていきたいと思います。
Coding インタビュー対策は日々 HackerRank で問題を解きまくっていたので
「まぁいけるっしょ!」
と完全になめてかかってたのですが、
いざ本番になってみると、細かい部分がさっと思い出せなかったり、ググっていいのかよくわからなかったり(普通に聞けばよかった)、そんなこんなで時間がみるみる過ぎていくという散々な結果に繋がってしまったのですが、幸いにも、今回のインタビューでは思考法やどう問題にアプローチするかに重きが置かれていたようで、ギリなんとかなりました笑
ただ、やはり悔しい!
ゆうても基礎中の基礎とも言える 文字列操作。これは瞬発的に回答できるようになりたい!
という事で
公式ドキュメントを参考に
復習タイムです。
- 対象者
- 環境
- 置換:str.replace(old, new, count)
- 検索:str.find(sub, start, end)
- 分割:str.split(sep=None, maxsplit=-1)
- 連結:str.join() もしくは ”+ 演算子”
- 任意文字または空白の削除:str.strip([chars])
- その他あれこれ
- 参考リンク
対象者
- Python 初心者
- 初めてのCoding インタビューを控えてる方
- 文字列操作の基本を抑えたい方
環境
MacBook Pro (macOS Mojave)
Python 3.7
それでは見ていきましょう!
(間違えている点や、こっちの方がいいよーなどのアドバイスなどがありましたらお手数ですが、コメントしていただけると幸いかつ私の勉強になります!)
置換:str.replace(old, new, count)
文字列からoldを探しnewと置換します。
countの部分はオプションで、指定した数字分だけ頭から置換します。
では次の例題を見てみましょう。
例題
"I would like to eat sushi"
のように与えられた文字列の
"半角スペース"
と
"-"
を入れ替えて
"I-would-like-to-eat-sushi"
のような文字列を返そう。
解答例
def replace_ex(givne_string): new_string=givne_string.replace(' ','-') return new_string print(replace_ex('I would like to eat sushi')) #I-would-like-to-eat-sushi
解答例の解説
問題文そのままでreplace()を使って、
半角スペースを第一引数にとり、
第二引数に”-”を代入し、
半角スペースと”-”を取り替える。以上。
検索:str.find(sub, start, end)
文字列に sub が含まれる場合、その sub の一文字目の index を返します。オプション引数 start および end はスライス表記と同様に解釈されます。 sub が見つからなかった場合 -1 を返します。
公式のドキュメントにも書かれていますが、sub が部分文字列であるかどうかのみ知りたい場合は以下のように "in 演算子" を使いましょう。
>>> 'Py' in 'Python' True
では次の例題を見てみましょう。
例題1
"afaweasfsushias" のように与えられた文字列に"sushi" というsubstring が含まれていた場合、最初の index をPrint せよ。
1つも含まれていない場合は "No" をPrint せよ。
解答例
def find_ex(givne_string, sub_string): index = givne_string.find(sub_string) if index != -1: print(index) else: print("No") return givne_string = "sushifasfareasushifasushisuhisushi" sub_string = "sushi" find_ex(givne_string, sub_string) #7 givne_string = "sushifasfareasushifasushisuhisushi" sub_string = "sashimi" find_ex(givne_string, sub_string) #No
解答例の解説
if文を使ってfind() で返した index が -1 (つまりsubが文字列内に存在しない)ではないとき、index をPrint し、それ以外では "No" を吐きだします。
例題2
"afaweasfsushias" のように与えられた文字列に"sushi" というsubstring が含まれていた場合、全てのindex を Print せよ。
1つも含まれていない場合は "No" を Print せよ。
解答例
def find_multiple(givne_string, sub_string): index = givne_string.find(sub_string) if index != -1: index = 0 while index != -1: index = givne_string.find(sub_string, index) if index != -1: print(index) index += 1 else: print("No") return sub_string="tomato" find_multiple(givne_string, sub_string) #No sub_string="sushi" find_multiple(givne_string, sub_string) #7 #14 #23
解答例の解説
例題1と同様にif文を使っていきます。
Point は while ループを使ってsub が文字列内に存在し続ける限り index を1ずつ増加させながら回し続ける点。
分割:str.split(sep=None, maxsplit=-1)
文字列を第一引数の sep で区切った文字列のリストを返します。オプション引数のmaxsplit を指定すると maxsplit 回分割されます。 maxsplit を指定しない,もしくは -1 に設定すると全ての sep で分割されます。
兎にも角にも使ってみましょう。
例題
与えられた英文から単語の出現回数順に並べたリストを返す関数"common_words" を完成させよう。(与えられる英文の単語間は半角スペースとする。)
特に意味はないですがシェイクスピアの名言をここでは使わせていただきます。
'A fool thinks himself to be wise, but a wise man knows himself to be a fool'
『愚者は己が賢いと考えるが、賢者は己が愚かなことを知っている』
な、なるほど。。
ちなみに出現回数が同じものに関しての並びについては、ここでは気にしません。
解答例
from collections import Counter def common_words(shakespeare_words): words_list = shakespeare_words.lower().split(' ') c = Counter(words_list).most_common() common_list = [i[0] for i in c] return common_list shakespeare_words = 'A fool thinks himself to be wise, but a wise man knows himself to be a fool' print(common_words(shakespeare_words)) #['a', 'fool', 'himself', 'to', 'be', 'thinks', 'wise,', 'but', 'wise', 'man', 'knows']
解答例の解説
- split(' ') で単語ごとに区切り、大文字小文字の区別をなくすため全て小文字にしつつリスト化。
- Counterでリストの各単語の出現個数をカウント。
- Counter の most_common() で、(単語, 出現回数)という形のタプルを出現回数順に並べたリストを取得。
- 欲しいのは単語だけのリストなのでリスト内包表記で取り出す。
連結:str.join() もしくは ”+ 演算子”
str.join(iterable)
リストや、タプルを文字列に変換したい場合よく使います。
"iterable" にはリストや、タプルを、"str" の部分にはセパレーターを取り、"iterable" の内容をセパレーターで連結してた文字列を返します。
以下の例ではリストの中身を半角スペースで繋いで1つの文字列として
”python is great” を Print out しています。
join_list = ["python", "is", "great"] print(" ".join(join_list)) #python is great
+ 演算子
”+ 演算子” はそのまま複数の文字列を繋げる役割を果たします。
例えばこんな感じで
a = "I " b = "love " c = "python!" print(a + b + c) #I love python!
例題
"I would like to eat sushi"
のように与えられた文字列の
"半角スペース"
と
"-"
を入れ替えて
"I-would-like-to-eat-sushi"
のような文字列を Print せよ。
ただし、replace() は使わずに。
上で扱った split() と join()で以下のようにしてみました。
解答例
def join_ex(givne_string): string_list = givne_string.split(' ') print('-'.join(string_list)) return join_ex('I would like to eat sushi') #I-would-like-to-eat-sushi
解答例の解説
- 半角スペースで区切られた単語のリストをsplit()で作る。
- そしてjoin()で単語を"-"で連結。
任意文字または空白の削除:str.strip([chars])
読んで字の如く、文字列の外側(先頭&末尾)から引数 chars 値を剥ぎ取ったコピーを返します。引数 chars は除去される文字集合を指定する文字列です。
この剥ぎ取りは引数 chars の文字集合に含まれない文字に辿り着くまで続きます。何も指定しない場合は、外側から空白を剥ぎ取ります。
早速例題をみてみましょう。
例題
与えられた "ugly_list" から余計な"スペース"、"コンマ" 、"ピリオド"を取り除いた "clean_list" を Print せよ。
解答例
ugly_list = ['. python. ', ' . javascript . ', '... .. swift,,,,'] clean_list = map(lambda x: x.strip(' ,.'), ugly_list) print(list(clean_list))
解答例の解説
文字通り ugly_list からstrip()で余計な文字を先頭と末尾の両端から剥ぎ取る。
その他あれこれ
以前、文字列の大文字、小文字を操る capitalize() や、upper()、lower()についても触れたので
よろしければそちらもご参照ください!
atsashimipy.hatenablog.com
参考リンク
docs.python.org
estorypost.com
以上、駆け足ですが Python での文字列操作をまとめさせていただきました!
これでまた、文字列操作を問われてもNo Google で即答できるのではないかと思います!多分笑
それでは皆様の良き Python Life を祈っております!!
また次回!
ありがとうございましたー!
【Flask超入門】その1:Flask で Hello World!! のための基本操作
この記事は【Flask超入門】その0 の続きとなります!
atsashimipy.hatenablog.com
では早速、前回作った仮想環境でpython fileを作成し、軽量Webフレームワークと名高い Flask でサクッと ”Hello World!!”していきましょう!
#terminal $ touch flask_project.py
基本初期設定
公式に従って(ちょっと変更しました笑)
#flask_project.py from flask import Flask app = Flask(__name__) @app.route('/') def hello(): return "<h1>Hello World!!</h1>"
Environment Variable を設定してローカルサーバーでRunできるようにします。
#terminal $ export FLASK_APP=flask_project.py
#terminal
$ flask run
出来ました!(はや!!)
ただこのままだとコードを変更した際、毎回サーバーを再起動しないと変更が適応されません。
それは、超絶面倒臭いので
#terminal $ export FLASK_DEBUG=1
とすると
ページを更新するだけで変更が適用されるようになります。
試しに
#flask_project.py from flask import Flask app = Flask(__name__) @app.route('/') def hello(): return "<h1>Hello Flask!!</h1>"
と
Hello World!!
から
Hello Flask!!
に変更、そしてページ更新すると。。。
はい!更新されました!
Hello Flask!!
Environment Variableをターミナル閉じるごとに設定するのは面倒臭い。
面倒なことはなるべく排除していきましょう!
ということで
以下の
if __name__ == '__main__': app.run(debug=True)
を flask_project.pyの一番下に付け足しましょう。
#flask_project.py from flask import Flask app = Flask(__name__) @app.route('/') def hello(): return "<h1>Hello Flask!!</h1>" if __name__ == '__main__': app.run(debug=True)
そしていつものpythonを実行するように
#terminal
python flask_project.py
とすると
同じ画面が表示されます。
Environment Variable いちいち設定する必要がなくてこっちの方が断然楽ですね!
About ページ
以下を付け足して新しいページ(About page)を作りましょう
@app.route('/about') def about(): return "<h1>About Page</h1>"
できました
@app.route('/') の真下に
@app.route('/home')
を加え、function名をhomeに
#flask_project.py from flask import Flask app = Flask(__name__) @app.route('/') @app.route('/home') def home(): return "<h1>Hello Flask!!</h1>" @app.route('/about') def about(): return "<h1>About Page</h1>" if __name__ == '__main__': app.run(debug=True)
こうすることで
http://localhost:5000/home
でも
http://localhost:5000
でもメインのページに帰ってくることができるようになりました。
今回はとりあえずここまで!
次回はもっとhtmlを書いて、それっぽい形にしていきましょう!
では!
【Flask超入門】その0:Conda で仮想環境構築+自動起動
こんにちは!
絶賛転職活動中!脳筋ニシキです!
先日ご縁があって、とあるディベロッパー採用マネージャーの方と話す機会を頂いたのですが、その方の口からやたらと
『Flaskを使って〇〇』
『うちではFlaskが〜〜』
とFlask推しと取れる発言が多く、今までDjagoしか触ったことのない僕としては、
『こいつはちょっとはFlask触れといたほうがいいな』
と強く感じ、週末を使ってFlaskで少し遊んでみることにしました。
仮想環境を作る
今日ここで触れるのはFlaskではなく、仮想環境になります。
(Flaskについてはまた後日!)
仮想環境のメリット
個々のプロジェクトごとに使用されるライブラリ(特定のバージョン)のみインストールされている綺麗で無駄のない環境を用意できる上に管理しやすい
という点だと僕は認識しています。
なので今回はFlaskで遊ぶための仮想環境を作っていきます。
環境
MacBook Pro (macOS Mojave)
python=3.7.4
conda=4.7.5
対象者
- インストールはしたものの Anaconda 初心者
- conda で複数のプロジェクトをスマートに管理したい
- そもそも仮想環境って何?
とういう方々に向けて書き記していきたいと思います。
まずはプロジェクトのディレクトリを作成
ディレクトリ内に仮想環境構築
conda create --name {任意の仮想環境名} {任意ライブラリ等}
以下の condaコマンドで仮想環境を作ります。
その際必要なライブラリ等も同時にインストールします。
$ conda create --name flask_project_env flask sqlalchemy numpy pandas
実行しますか?と聞かれるので、問題がなければ "y" を選択。
$ Proceed ([y]/n)? y
準備が整うと以下のような Activate と Deactivate のメッセージが出てくると思うので
# # To activate this environment, use: # > conda activate flask_project_env # # To deactivate an active environment, use: # > conda deactivate #
早速起動 (Activate) してみましょう!
仮想環境起動!
conda activate {仮想環境名}
$ conda activate flask_project_env
以下のようなエラーメッセージが出た場合
CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'. To initialize your shell, run $ conda init <SHELL_NAME> Currently supported shells are: - bash - fish - tcsh - xonsh - zsh - powershell See 'conda init --help' for more information and options. IMPORTANT: You may need to close and restart your shell after running 'conda init'.
説明に沿って
$ conda init bash
と入力し、ターミナルを再起動。
すると
(flask_project_env)
出来ました!
pip list でインストールされてるライブラリーを確認してみると
$ pip list Package Version --------------- --------- certifi 2019.9.11 Click 7.0 Flask 1.1.1 itsdangerous 1.1.0 Jinja2 2.10.3 MarkupSafe 1.1.1 mkl-fft 1.0.14 mkl-random 1.1.0 mkl-service 2.3.0 numpy 1.17.2 pandas 0.25.1 pip 19.2.3 python-dateutil 2.8.0 pytz 2019.3 setuptools 41.4.0 six 1.12.0 SQLAlchemy 1.3.9 Werkzeug 0.16.0 wheel 0.33.6
上で指定したライブラリーとそれらに付随したライブラリーが表示されていると思います。
仮想環境の内容をYAMLファイルに出力して保存
仮想環境が整ったら、以下のコマンドで ”environment.yaml” を生成しておきます。
conda env export > {任意のファイル名}.yaml
$ conda env export > environment.yaml
中身は以下のようになります。
$ cat environment.yaml name: flask_project_env channels: - defaults dependencies: - blas=1.0=mkl - ca-certificates=2019.8.28=0 - certifi=2019.9.11=py37_0 - click=7.0=py37_0 - flask=1.1.1=py_0 - intel-openmp=2019.4=233 - itsdangerous=1.1.0=py37_0 - jinja2=2.10.3=py_0 - libcxx=4.0.1=hcfea43d_1 - libcxxabi=4.0.1=hcfea43d_1 - libedit=3.1.20181209=hb402a30_0 - libffi=3.2.1=h475c297_4 - libgfortran=3.0.1=h93005f0_2 - markupsafe=1.1.1=py37h1de35cc_0 - mkl=2019.4=233 - mkl-service=2.3.0=py37hfbe908c_0 - mkl_fft=1.0.14=py37h5e564d8_0 - mkl_random=1.1.0=py37ha771720_0 - ncurses=6.1=h0a44026_1 - numpy=1.17.2=py37h99e6662_0 - numpy-base=1.17.2=py37h6575580_0 - openssl=1.1.1d=h1de35cc_2 - pandas=0.25.1=py37h0a44026_0 - pip=19.2.3=py37_0 - python=3.7.4=h359304d_1 - python-dateutil=2.8.0=py37_0 - pytz=2019.3=py_0 - readline=7.0=h1de35cc_5 - setuptools=41.4.0=py37_0 - six=1.12.0=py37_0 - sqlalchemy=1.3.9=py37h1de35cc_0 - sqlite=3.30.0=ha441bb4_0 - tk=8.6.8=ha441bb4_0 - werkzeug=0.16.0=py_0 - wheel=0.33.6=py37_0 - xz=5.2.4=h1de35cc_4 - zlib=1.2.11=h1de35cc_3 prefix: /anaconda3/envs/flask_project_env
こうすることで同じ仮想環境が次のコマンドで再構築することが可能に。
$ conda create -f envirornment.yaml
【おまけ】
超便利!自動仮想環境起動スクリプト
こちらを参考にさせていただきました。ありがとうございます。
$ nano ~/.bash_profile
で以下をbash_profileに付け足すと
# Auto activate conda environments function conda_auto_env() { if [ -e "environment.yaml" ]; then ENV_NAME=$(head -n 1 environment.yaml | cut -f2 -d ' ') # Check if you are already in the environment if [[ $CONDA_PREFIX != *$ENV_NAME* ]]; then # Try to activate environment source activate $ENV_NAME &>/dev/null fi fi } export PROMPT_COMMAND="conda_auto_env;$PROMPT_COMMAND"
これで、"environment.yaml" が存在するディレクトリに移動すると自動で仮想環境を起動してくれます。これホント便利!
駆け足でしたが、これでCondaを使った仮想環境の準備が整いました!
次回から早速今回構築した仮想環境を使って Flask で遊んでいきます!
【Flask超入門】その1
atsashimipy.hatenablog.com
ありがとうございました!
【筋トレ初心者必見】筋トレが嫌でも習慣化する脳筋思考のススメ【人生が楽しくなる】
こんにちは!
筋肉ドリブン 脳筋ニシキです。
普段はPythonやらJavaScriptでコードを書いたりして暮らしていて、ブログも大体そちら方面なのですが、最近のプログラマー界隈でのフィットネスブームに便乗して、大好きな筋トレについて書いてみようかと。
歯を毎日磨がないと気持ち悪いように筋肉も毎日鍛えてないと気持ち悪い現象。もはや呪い。勉強にも当てはまる。
— 脳筋ニシキ@海外IT企業(タチコマと並列化中) (@Beyond_Ame) September 1, 2019
にしても最近のエンジニア界隈の筋トレブーム嬉しい #筋トレ #今日の積み上げ #frontpulldown を横で #背中の日 #海外生活 #アメリカ pic.twitter.com/61VawBfy7p
かく言う僕は自他共に認める『脳筋』で、どんなに忙しくとも毎日ジムで鍛えないといけない呪いを掛けられたかのような日々を送っております。
ひたすらコードを書いた後に、夜な夜な肩の日。
— 脳筋ニシキ@海外IT企業(タチコマと並列化中) (@Beyond_Ame) September 16, 2019
どんなに忙しくとも、ジムに行かなくてはならない呪い。#今日の積み上げ #肩の日 #筋トレ #アメリカ生活 #海外就職 #海外生活 #脳筋 pic.twitter.com/eIODLq43Kl
逆に
世の中の筋トレを習慣化したいという方には、この脳筋の思考がもしかしたら役に立つこともあるかもしれないのでここに記します。
対象読者
- 筋トレ初心者
- 筋トレを習慣化したい
- 脳筋の行動/生態を理解したい
脳筋思考は一般的な思考法からは酷く逸脱しているので頑張って付いてきてください。
では参ります。
まず脳筋の主な特徴として次の3つがあります。
その①:脳筋は筋肉ドリブン、故にハッピー
その②:脳筋は筋肉の成長が最高の喜び
順番にみていきましょう。
その①:脳筋は筋肉ドリブン、故にハッピー
おそらくみなさん周りにも一人か二人いるのではないでしょうか?
いつも明るく熱いやつが。
脳筋はどんなに小さいことでも筋肉が鍛えられていると感じると同時に幸せを感じます。
つまり、人間生きている限り常に何かしらの筋肉を使っている訳なので、そこに意識を向けるだけで、
『お、今ここの筋肉鍛えられてる!ラッキー!』
『あ、ここの筋肉にも効いてる!やったー!』
となる訳です。
デメリットすらメリットに変える脳筋思考
筋肉を鍛えていることが周囲に認知されてきたり、筋肉キャラが定着すると増えるのが、
『引っ越し手伝ってくれない?お礼に焼肉おごるから!』
などの重労働の依頼。
これを1つのデメリットとして捉える方もいるかもしれませんが、
真の脳筋は違います。
引っ越しの手伝い…そして、そのあとに焼肉
〜脳筋変換〜
『もちろん、行きます!むしろ、ありがとうございます!』
【補足】これに加え、筋肉を頼られたり褒められたりすると基本喜びます。適度に褒めてあげましょう。
その②:脳筋は筋肉の成長が最高の喜び
脳筋は筋肉の成長に敏感です。
見た目、パフォーマンスの質の変動に一喜一憂する生き物です。
努力が目に見えて実を結ぶ経験は自信に繋がり、さらに高みを目指す糧となります。
辞めるという選択肢は、自然となくなります。
その③:脳筋は脳筋を呼ぶ
『類は友を呼ぶ』
と言いますが、まさにそれです。
筋肉という外見から判断しやすいという特性も相まって、脳筋は同類の匂いを嗅ぎ分けます。
ジムに限らず、職場や学校であっても、初対面で筋肉を無意識にチェックし、どの程度ストイックに筋肉にコミットしているのか、予想し判断しています。
筋肉の付き具合、質でどの位のガチ感か、瞬時に判断している。#筋トレあるある https://t.co/XitjWSXxP0
— 脳筋ニシキ@海外IT企業(タチコマと並列化中) (@Beyond_Ame) August 27, 2019
なので近い思考の、筋トレ仲間が自然と増えていきます。
こうして増ていく脳筋の繋がりがまたモチベーションとなり、あなたを挫折からまた1つ遠ざけてくれる要因となるでしょう。